[{"data":1,"prerenderedAt":174799},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu":3,"wiki-doc-nav":2320},{"id":4,"title":5,"body":6,"description":57,"extension":2314,"meta":2315,"navigation":453,"path":2316,"seo":2317,"stem":2318,"__hash__":2319},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":8,"toc":2290},"minimark",[9,13,18,22,25,44,47,50,61,64,68,71,113,116,134,137,187,190,212,216,219,225,228,264,269,275,300,303,337,344,347,350,356,359,365,368,374,378,381,416,419,423,1346,1349,1362,1365,1376,1379,1382,1399,1402,1405,1417,1420,1423,1469,1472,1485,1488,1571,1574,1577,1593,1605,1618,1621,1661,1671,1682,1692,1705,1708,1737,1740,1750,1753,1759,1776,1787,1790,1796,1813,1824,1845,1848,1862,1865,1887,1890,1899,1910,1927,1930,1999,2006,2015,2018,2032,2039,2043,2046,2052,2055,2058,2064,2070,2074,2124,2128,2134,2143,2146,2149,2171,2174,2177,2183,2187,2190,2218,2221,2224,2254,2261,2264,2267,2271,2274,2277,2283,2286],[10,11,5],"h1",{"id":12},"_7控制任务reacher-机械臂到达目标",[14,15,17],"h2",{"id":16},"_1目标说明","1.目标说明",[19,20,21],"p",{},"本章搭建一个二维两关节 reacher 任务。",[19,23,24],{},"你将学习:",[26,27,28,32,35,38,41],"ol",{},[29,30,31],"li",{},"两个 hinge joint",[29,33,34],{},"两个 motor actuator",[29,36,37],{},"site 作为末端点和目标点",[29,39,40],{},"根据末端和目标距离设计 reward",[29,42,43],{},"构造机械臂任务的基本形式",[19,45,46],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,48,49],{},"Reacher 任务可以理解为：",[51,52,58],"pre",{"className":53,"code":55,"language":56,"meta":57},[54],"language-text","一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n","text","",[59,60,55],"code",{"__ignoreMap":57},[19,62,63],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,65,67],{"id":66},"_2环境与依赖安装","2.环境与依赖安装",[19,69,70],{},"Fedora 44 系统依赖:",[51,72,76],{"className":73,"code":74,"language":75,"meta":57,"style":57},"language-bash shiki shiki-themes github-light github-dark","sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n","bash",[59,77,78],{"__ignoreMap":57},[79,80,83,87,91,94,98,101,104,107,110],"span",{"class":81,"line":82},"line",1,[79,84,86],{"class":85},"sScJk","sudo",[79,88,90],{"class":89},"sZZnC"," dnf",[79,92,93],{"class":89}," install",[79,95,97],{"class":96},"sj4cs"," -y",[79,99,100],{"class":89}," python3",[79,102,103],{"class":89}," python3-pip",[79,105,106],{"class":89}," mesa-libGL",[79,108,109],{"class":89}," mesa-dri-drivers",[79,111,112],{"class":89}," glfw\n",[19,114,115],{},"pip:",[51,117,119],{"className":73,"code":118,"language":75,"meta":57,"style":57},"pip install \"mujoco>=2.3\" numpy\n",[59,120,121],{"__ignoreMap":57},[79,122,123,126,128,131],{"class":81,"line":82},[79,124,125],{"class":85},"pip",[79,127,93],{"class":89},[79,129,130],{"class":89}," \"mujoco>=2.3\"",[79,132,133],{"class":89}," numpy\n",[19,135,136],{},"conda:",[51,138,140],{"className":73,"code":139,"language":75,"meta":57,"style":57},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[59,141,142,165,176],{"__ignoreMap":57},[79,143,144,147,150,153,156,159,162],{"class":81,"line":82},[79,145,146],{"class":85},"conda",[79,148,149],{"class":89}," create",[79,151,152],{"class":96}," -n",[79,154,155],{"class":89}," mujoco-reacher",[79,157,158],{"class":89}," python=",[79,160,161],{"class":96},"3.10",[79,163,164],{"class":96}," -y\n",[79,166,168,170,173],{"class":81,"line":167},2,[79,169,146],{"class":85},[79,171,172],{"class":89}," activate",[79,174,175],{"class":89}," mujoco-reacher\n",[79,177,179,181,183,185],{"class":81,"line":178},3,[79,180,125],{"class":85},[79,182,93],{"class":89},[79,184,130],{"class":89},[79,186,133],{"class":89},[19,188,189],{},"版本冲突说明:",[26,191,192,195,198],{},[29,193,194],{},"本章使用低维状态，不使用图像输入。",[29,196,197],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[29,199,200,201,204,205,204,208,211],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[59,202,203],{},"qpos","、",[59,206,207],{},"qvel",[59,209,210],{},"site_xpos"," 的方法一致。",[14,213,215],{"id":214},"_3核心概念解释","3.核心概念解释",[19,217,218],{},"Reacher 任务核心:",[51,220,223],{"className":221,"code":222,"language":56,"meta":57},[54],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[59,224,222],{"__ignoreMap":57},[19,226,227],{},"读取 site 世界坐标:",[51,229,233],{"className":230,"code":231,"language":232,"meta":57,"style":57},"language-python shiki shiki-themes github-light github-dark","site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n","python",[59,234,235,254],{"__ignoreMap":57},[79,236,237,241,245,248,251],{"class":81,"line":82},[79,238,240],{"class":239},"sVt8B","site_id ",[79,242,244],{"class":243},"szBVR","=",[79,246,247],{"class":239}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[79,249,250],{"class":89},"\"tip\"",[79,252,253],{"class":239},")\n",[79,255,256,259,261],{"class":81,"line":167},[79,257,258],{"class":239},"tip_pos ",[79,260,244],{"class":243},[79,262,263],{"class":239}," data.site_xpos[site_id]\n",[265,266,268],"h3",{"id":267},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,270,271,272,274],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[59,273,203],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[51,276,278],{"className":230,"code":277,"language":232,"meta":57,"style":57},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[59,279,280,290],{"__ignoreMap":57},[79,281,282,285,287],{"class":81,"line":82},[79,283,284],{"class":239},"tip ",[79,286,244],{"class":243},[79,288,289],{"class":239}," data.site_xpos[tip_site_id]\n",[79,291,292,295,297],{"class":81,"line":167},[79,293,294],{"class":239},"target ",[79,296,244],{"class":243},[79,298,299],{"class":239}," data.site_xpos[target_site_id]\n",[19,301,302],{},"这样 reward 就很容易写：",[51,304,306],{"className":230,"code":305,"language":232,"meta":57,"style":57},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[59,307,308,324],{"__ignoreMap":57},[79,309,310,313,315,318,321],{"class":81,"line":82},[79,311,312],{"class":239},"dist ",[79,314,244],{"class":243},[79,316,317],{"class":239}," np.linalg.norm(tip ",[79,319,320],{"class":243},"-",[79,322,323],{"class":239}," target)\n",[79,325,326,329,331,334],{"class":81,"line":167},[79,327,328],{"class":239},"reward ",[79,330,244],{"class":243},[79,332,333],{"class":243}," -",[79,335,336],{"class":239},"dist\n",[19,338,339,340,343],{},"距离越小，",[59,341,342],{},"-dist"," 越接近 0，奖励越高。",[265,345,346],{"id":346},"两关节机械臂的状态",[19,348,349],{},"这个模型有两个 hinge joint：",[51,351,354],{"className":352,"code":353,"language":56,"meta":57},[54],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[59,355,353],{"__ignoreMap":57},[19,357,358],{},"再加上末端和目标位置：",[51,360,363],{"className":361,"code":362,"language":56,"meta":57},[54],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[59,364,362],{"__ignoreMap":57},[19,366,367],{},"总维度：",[51,369,372],{"className":370,"code":371,"language":56,"meta":57},[54],"2 + 2 + 3 + 3 = 10\n",[59,373,371],{"__ignoreMap":57},[265,375,377],{"id":376},"为什么-gravity-是-0","为什么 gravity 是 0",[19,379,380],{},"本章把重力设为：",[51,382,386],{"className":383,"code":384,"language":385,"meta":57,"style":57},"language-xml shiki shiki-themes github-light github-dark","\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n","xml",[59,387,388],{"__ignoreMap":57},[79,389,390,393,397,400,402,405,408,410,413],{"class":81,"line":82},[79,391,392],{"class":239},"\u003C",[79,394,396],{"class":395},"s9eBZ","option",[79,398,399],{"class":85}," timestep",[79,401,244],{"class":239},[79,403,404],{"class":89},"\"0.01\"",[79,406,407],{"class":85}," gravity",[79,409,244],{"class":239},[79,411,412],{"class":89},"\"0 0 0\"",[79,414,415],{"class":239},"\u002F>\n",[19,417,418],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,420,422],{"id":421},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[51,424,426],{"className":230,"code":425,"language":232,"meta":57,"style":57},"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",[59,427,428,436,449,455,460,472,478,484,489,495,501,507,512,518,524,530,535,541,547,553,559,565,571,577,582,588,594,600,606,612,618,623,628,646,657,674,706,715,720,725,736,751,766,774,779,784,800,813,826,840,857,876,881,886,902,917,928,939,944,967,973,987,1001,1017,1022,1065,1099,1104,1110,1122,1127,1148,1159,1173,1192,1209,1226,1244,1249,1272,1294,1314,1319,1324,1340],{"__ignoreMap":57},[79,429,430,433],{"class":81,"line":82},[79,431,432],{"class":243},"import",[79,434,435],{"class":239}," mujoco\n",[79,437,438,440,443,446],{"class":81,"line":167},[79,439,432],{"class":243},[79,441,442],{"class":239}," numpy ",[79,444,445],{"class":243},"as",[79,447,448],{"class":239}," np\n",[79,450,451],{"class":81,"line":178},[79,452,454],{"emptyLinePlaceholder":453},true,"\n",[79,456,458],{"class":81,"line":457},4,[79,459,454],{"emptyLinePlaceholder":453},[79,461,463,466,469],{"class":81,"line":462},5,[79,464,465],{"class":96},"XML",[79,467,468],{"class":243}," =",[79,470,471],{"class":89}," \"\"\"\n",[79,473,475],{"class":81,"line":474},6,[79,476,477],{"class":89},"\u003Cmujoco model=\"two_link_reacher\">\n",[79,479,481],{"class":81,"line":480},7,[79,482,483],{"class":89},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[79,485,487],{"class":81,"line":486},8,[79,488,454],{"emptyLinePlaceholder":453},[79,490,492],{"class":81,"line":491},9,[79,493,494],{"class":89},"  \u003Cworldbody>\n",[79,496,498],{"class":81,"line":497},10,[79,499,500],{"class":89},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[79,502,504],{"class":81,"line":503},11,[79,505,506],{"class":89},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[79,508,510],{"class":81,"line":509},12,[79,511,454],{"emptyLinePlaceholder":453},[79,513,515],{"class":81,"line":514},13,[79,516,517],{"class":89},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[79,519,521],{"class":81,"line":520},14,[79,522,523],{"class":89},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[79,525,527],{"class":81,"line":526},15,[79,528,529],{"class":89},"      \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",[79,531,533],{"class":81,"line":532},16,[79,534,454],{"emptyLinePlaceholder":453},[79,536,538],{"class":81,"line":537},17,[79,539,540],{"class":89},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[79,542,544],{"class":81,"line":543},18,[79,545,546],{"class":89},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[79,548,550],{"class":81,"line":549},19,[79,551,552],{"class":89},"        \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",[79,554,556],{"class":81,"line":555},20,[79,557,558],{"class":89},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[79,560,562],{"class":81,"line":561},21,[79,563,564],{"class":89},"      \u003C\u002Fbody>\n",[79,566,568],{"class":81,"line":567},22,[79,569,570],{"class":89},"    \u003C\u002Fbody>\n",[79,572,574],{"class":81,"line":573},23,[79,575,576],{"class":89},"  \u003C\u002Fworldbody>\n",[79,578,580],{"class":81,"line":579},24,[79,581,454],{"emptyLinePlaceholder":453},[79,583,585],{"class":81,"line":584},25,[79,586,587],{"class":89},"  \u003Cactuator>\n",[79,589,591],{"class":81,"line":590},26,[79,592,593],{"class":89},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[79,595,597],{"class":81,"line":596},27,[79,598,599],{"class":89},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[79,601,603],{"class":81,"line":602},28,[79,604,605],{"class":89},"  \u003C\u002Factuator>\n",[79,607,609],{"class":81,"line":608},29,[79,610,611],{"class":89},"\u003C\u002Fmujoco>\n",[79,613,615],{"class":81,"line":614},30,[79,616,617],{"class":89},"\"\"\"\n",[79,619,621],{"class":81,"line":620},31,[79,622,454],{"emptyLinePlaceholder":453},[79,624,626],{"class":81,"line":625},32,[79,627,454],{"emptyLinePlaceholder":453},[79,629,631,634,637,640,643],{"class":81,"line":630},33,[79,632,633],{"class":243},"def",[79,635,636],{"class":85}," site_position",[79,638,639],{"class":239},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[79,641,642],{"class":96},"str",[79,644,645],{"class":239},") -> np.ndarray:\n",[79,647,649,652,654],{"class":81,"line":648},34,[79,650,651],{"class":239},"    site_id ",[79,653,244],{"class":243},[79,655,656],{"class":239}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[79,658,660,663,666,668,671],{"class":81,"line":659},35,[79,661,662],{"class":243},"    if",[79,664,665],{"class":239}," site_id ",[79,667,392],{"class":243},[79,669,670],{"class":96}," 0",[79,672,673],{"class":239},":\n",[79,675,677,680,683,686,689,692,695,698,701,704],{"class":81,"line":676},36,[79,678,679],{"class":243},"        raise",[79,681,682],{"class":96}," RuntimeError",[79,684,685],{"class":239},"(",[79,687,688],{"class":243},"f",[79,690,691],{"class":89},"\"site not found: ",[79,693,694],{"class":96},"{",[79,696,697],{"class":239},"name",[79,699,700],{"class":96},"}",[79,702,703],{"class":89},"\"",[79,705,253],{"class":239},[79,707,709,712],{"class":81,"line":708},37,[79,710,711],{"class":243},"    return",[79,713,714],{"class":239}," data.site_xpos[site_id].copy()\n",[79,716,718],{"class":81,"line":717},38,[79,719,454],{"emptyLinePlaceholder":453},[79,721,723],{"class":81,"line":722},39,[79,724,454],{"emptyLinePlaceholder":453},[79,726,728,730,733],{"class":81,"line":727},40,[79,729,633],{"class":243},[79,731,732],{"class":85}," get_obs",[79,734,735],{"class":239},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[79,737,739,742,744,747,749],{"class":81,"line":738},41,[79,740,741],{"class":239},"    tip ",[79,743,244],{"class":243},[79,745,746],{"class":239}," site_position(model, data, ",[79,748,250],{"class":89},[79,750,253],{"class":239},[79,752,754,757,759,761,764],{"class":81,"line":753},42,[79,755,756],{"class":239},"    target ",[79,758,244],{"class":243},[79,760,746],{"class":239},[79,762,763],{"class":89},"\"target\"",[79,765,253],{"class":239},[79,767,769,771],{"class":81,"line":768},43,[79,770,711],{"class":243},[79,772,773],{"class":239}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[79,775,777],{"class":81,"line":776},44,[79,778,454],{"emptyLinePlaceholder":453},[79,780,782],{"class":81,"line":781},45,[79,783,454],{"emptyLinePlaceholder":453},[79,785,787,789,792,795,798],{"class":81,"line":786},46,[79,788,633],{"class":243},[79,790,791],{"class":85}," reward",[79,793,794],{"class":239},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[79,796,797],{"class":96},"float",[79,799,673],{"class":239},[79,801,803,805,807,809,811],{"class":81,"line":802},47,[79,804,741],{"class":239},[79,806,244],{"class":243},[79,808,746],{"class":239},[79,810,250],{"class":89},[79,812,253],{"class":239},[79,814,816,818,820,822,824],{"class":81,"line":815},48,[79,817,756],{"class":239},[79,819,244],{"class":243},[79,821,746],{"class":239},[79,823,763],{"class":89},[79,825,253],{"class":239},[79,827,829,832,834,836,838],{"class":81,"line":828},49,[79,830,831],{"class":239},"    dist ",[79,833,244],{"class":243},[79,835,317],{"class":239},[79,837,320],{"class":243},[79,839,323],{"class":239},[79,841,843,846,848,851,854],{"class":81,"line":842},50,[79,844,845],{"class":239},"    control_cost ",[79,847,244],{"class":243},[79,849,850],{"class":96}," 0.01",[79,852,853],{"class":243}," *",[79,855,856],{"class":239}," np.sum(np.square(data.ctrl))\n",[79,858,860,862,865,867,869,871,873],{"class":81,"line":859},51,[79,861,711],{"class":243},[79,863,864],{"class":96}," float",[79,866,685],{"class":239},[79,868,320],{"class":243},[79,870,312],{"class":239},[79,872,320],{"class":243},[79,874,875],{"class":239}," control_cost)\n",[79,877,879],{"class":81,"line":878},52,[79,880,454],{"emptyLinePlaceholder":453},[79,882,884],{"class":81,"line":883},53,[79,885,454],{"emptyLinePlaceholder":453},[79,887,889,891,894,897,900],{"class":81,"line":888},54,[79,890,633],{"class":243},[79,892,893],{"class":85}," main",[79,895,896],{"class":239},"() -> ",[79,898,899],{"class":96},"None",[79,901,673],{"class":239},[79,903,905,908,910,913,915],{"class":81,"line":904},55,[79,906,907],{"class":239},"    model ",[79,909,244],{"class":243},[79,911,912],{"class":239}," mujoco.MjModel.from_xml_string(",[79,914,465],{"class":96},[79,916,253],{"class":239},[79,918,920,923,925],{"class":81,"line":919},56,[79,921,922],{"class":239},"    data ",[79,924,244],{"class":243},[79,926,927],{"class":239}," mujoco.MjData(model)\n",[79,929,931,934,936],{"class":81,"line":930},57,[79,932,933],{"class":239},"    total_reward ",[79,935,244],{"class":243},[79,937,938],{"class":96}," 0.0\n",[79,940,942],{"class":81,"line":941},58,[79,943,454],{"emptyLinePlaceholder":453},[79,945,947,950,953,956,959,961,964],{"class":81,"line":946},59,[79,948,949],{"class":243},"    for",[79,951,952],{"class":239}," step ",[79,954,955],{"class":243},"in",[79,957,958],{"class":96}," range",[79,960,685],{"class":239},[79,962,963],{"class":96},"500",[79,965,966],{"class":239},"):\n",[79,968,970],{"class":81,"line":969},60,[79,971,972],{"class":239},"        mujoco.mj_forward(model, data)\n",[79,974,976,979,981,983,985],{"class":81,"line":975},61,[79,977,978],{"class":239},"        tip ",[79,980,244],{"class":243},[79,982,746],{"class":239},[79,984,250],{"class":89},[79,986,253],{"class":239},[79,988,990,993,995,997,999],{"class":81,"line":989},62,[79,991,992],{"class":239},"        target ",[79,994,244],{"class":243},[79,996,746],{"class":239},[79,998,763],{"class":89},[79,1000,253],{"class":239},[79,1002,1004,1007,1009,1012,1014],{"class":81,"line":1003},63,[79,1005,1006],{"class":239},"        error ",[79,1008,244],{"class":243},[79,1010,1011],{"class":239}," target ",[79,1013,320],{"class":243},[79,1015,1016],{"class":239}," tip\n",[79,1018,1020],{"class":81,"line":1019},64,[79,1021,454],{"emptyLinePlaceholder":453},[79,1023,1025,1028,1031,1034,1036,1039,1042,1044,1047,1050,1053,1055,1058,1061,1063],{"class":81,"line":1024},65,[79,1026,1027],{"class":239},"        data.ctrl[",[79,1029,1030],{"class":96},"0",[79,1032,1033],{"class":239},"] ",[79,1035,244],{"class":243},[79,1037,1038],{"class":239}," np.clip(",[79,1040,1041],{"class":96},"2.0",[79,1043,853],{"class":243},[79,1045,1046],{"class":239}," error[",[79,1048,1049],{"class":96},"2",[79,1051,1052],{"class":239},"], ",[79,1054,320],{"class":243},[79,1056,1057],{"class":96},"1.0",[79,1059,1060],{"class":239},", ",[79,1062,1057],{"class":96},[79,1064,253],{"class":239},[79,1066,1068,1070,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097],{"class":81,"line":1067},66,[79,1069,1027],{"class":239},[79,1071,1072],{"class":96},"1",[79,1074,1033],{"class":239},[79,1076,244],{"class":243},[79,1078,1038],{"class":239},[79,1080,1041],{"class":96},[79,1082,853],{"class":243},[79,1084,1046],{"class":239},[79,1086,1030],{"class":96},[79,1088,1052],{"class":239},[79,1090,320],{"class":243},[79,1092,1057],{"class":96},[79,1094,1060],{"class":239},[79,1096,1057],{"class":96},[79,1098,253],{"class":239},[79,1100,1102],{"class":81,"line":1101},67,[79,1103,454],{"emptyLinePlaceholder":453},[79,1105,1107],{"class":81,"line":1106},68,[79,1108,1109],{"class":239},"        mujoco.mj_step(model, data)\n",[79,1111,1113,1116,1119],{"class":81,"line":1112},69,[79,1114,1115],{"class":239},"        total_reward ",[79,1117,1118],{"class":243},"+=",[79,1120,1121],{"class":239}," reward(model, data)\n",[79,1123,1125],{"class":81,"line":1124},70,[79,1126,454],{"emptyLinePlaceholder":453},[79,1128,1130,1133,1135,1138,1141,1144,1146],{"class":81,"line":1129},71,[79,1131,1132],{"class":243},"        if",[79,1134,952],{"class":239},[79,1136,1137],{"class":243},"%",[79,1139,1140],{"class":96}," 100",[79,1142,1143],{"class":243}," ==",[79,1145,670],{"class":96},[79,1147,673],{"class":239},[79,1149,1151,1154,1156],{"class":81,"line":1150},72,[79,1152,1153],{"class":239},"            obs ",[79,1155,244],{"class":243},[79,1157,1158],{"class":239}," get_obs(model, data)\n",[79,1160,1162,1165,1167,1170],{"class":81,"line":1161},73,[79,1163,1164],{"class":96},"            print",[79,1166,685],{"class":239},[79,1168,1169],{"class":89},"\"step:\"",[79,1171,1172],{"class":239},", step)\n",[79,1174,1176,1178,1180,1183,1186,1189],{"class":81,"line":1175},74,[79,1177,1164],{"class":96},[79,1179,685],{"class":239},[79,1181,1182],{"class":89},"\"  tip:\"",[79,1184,1185],{"class":239},", np.round(tip, ",[79,1187,1188],{"class":96},"3",[79,1190,1191],{"class":239},"))\n",[79,1193,1195,1197,1199,1202,1205,1207],{"class":81,"line":1194},75,[79,1196,1164],{"class":96},[79,1198,685],{"class":239},[79,1200,1201],{"class":89},"\"  target:\"",[79,1203,1204],{"class":239},", np.round(target, ",[79,1206,1188],{"class":96},[79,1208,1191],{"class":239},[79,1210,1212,1214,1216,1219,1222,1224],{"class":81,"line":1211},76,[79,1213,1164],{"class":96},[79,1215,685],{"class":239},[79,1217,1218],{"class":89},"\"  ctrl:\"",[79,1220,1221],{"class":239},", np.round(data.ctrl.copy(), ",[79,1223,1188],{"class":96},[79,1225,1191],{"class":239},[79,1227,1229,1231,1233,1236,1239,1241],{"class":81,"line":1228},77,[79,1230,1164],{"class":96},[79,1232,685],{"class":239},[79,1234,1235],{"class":89},"\"  obs_dim:\"",[79,1237,1238],{"class":239},", obs.shape[",[79,1240,1030],{"class":96},[79,1242,1243],{"class":239},"])\n",[79,1245,1247],{"class":81,"line":1246},78,[79,1248,454],{"emptyLinePlaceholder":453},[79,1250,1252,1255,1257,1260,1262,1265,1268,1270],{"class":81,"line":1251},79,[79,1253,1254],{"class":96},"    print",[79,1256,685],{"class":239},[79,1258,1259],{"class":89},"\"total_reward:\"",[79,1261,1060],{"class":239},[79,1263,1264],{"class":96},"round",[79,1266,1267],{"class":239},"(total_reward, ",[79,1269,1188],{"class":96},[79,1271,1191],{"class":239},[79,1273,1275,1277,1279,1282,1285,1287,1290,1292],{"class":81,"line":1274},80,[79,1276,1254],{"class":96},[79,1278,685],{"class":239},[79,1280,1281],{"class":89},"\"final tip:\"",[79,1283,1284],{"class":239},", np.round(site_position(model, data, ",[79,1286,250],{"class":89},[79,1288,1289],{"class":239},"), ",[79,1291,1188],{"class":96},[79,1293,1191],{"class":239},[79,1295,1297,1299,1301,1304,1306,1308,1310,1312],{"class":81,"line":1296},81,[79,1298,1254],{"class":96},[79,1300,685],{"class":239},[79,1302,1303],{"class":89},"\"target:\"",[79,1305,1284],{"class":239},[79,1307,763],{"class":89},[79,1309,1289],{"class":239},[79,1311,1188],{"class":96},[79,1313,1191],{"class":239},[79,1315,1317],{"class":81,"line":1316},82,[79,1318,454],{"emptyLinePlaceholder":453},[79,1320,1322],{"class":81,"line":1321},83,[79,1323,454],{"emptyLinePlaceholder":453},[79,1325,1327,1330,1333,1335,1338],{"class":81,"line":1326},84,[79,1328,1329],{"class":243},"if",[79,1331,1332],{"class":96}," __name__",[79,1334,1143],{"class":243},[79,1336,1337],{"class":89}," \"__main__\"",[79,1339,673],{"class":239},[79,1341,1343],{"class":81,"line":1342},85,[79,1344,1345],{"class":239},"    main()\n",[19,1347,1348],{},"保存为：",[51,1350,1352],{"className":73,"code":1351,"language":75,"meta":57,"style":57},"touch ch7_reacher.py\n",[59,1353,1354],{"__ignoreMap":57},[79,1355,1356,1359],{"class":81,"line":82},[79,1357,1358],{"class":85},"touch",[79,1360,1361],{"class":89}," ch7_reacher.py\n",[19,1363,1364],{},"运行：",[51,1366,1368],{"className":73,"code":1367,"language":75,"meta":57,"style":57},"python ch7_reacher.py\n",[59,1369,1370],{"__ignoreMap":57},[79,1371,1372,1374],{"class":81,"line":82},[79,1373,232],{"class":85},[79,1375,1361],{"class":89},[265,1377,1378],{"id":1378},"代码逐段解释",[19,1380,1381],{},"读取 site 坐标：",[51,1383,1385],{"className":230,"code":1384,"language":232,"meta":57,"style":57},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[59,1386,1387],{"__ignoreMap":57},[79,1388,1389,1391,1393,1395,1397],{"class":81,"line":82},[79,1390,633],{"class":243},[79,1392,636],{"class":85},[79,1394,639],{"class":239},[79,1396,642],{"class":96},[79,1398,645],{"class":239},[19,1400,1401],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,1403,1404],{},"构造观测：",[51,1406,1408],{"className":230,"code":1407,"language":232,"meta":57,"style":57},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[59,1409,1410],{"__ignoreMap":57},[79,1411,1412,1415],{"class":81,"line":82},[79,1413,1414],{"class":243},"return",[79,1416,773],{"class":239},[19,1418,1419],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,1421,1422],{},"奖励函数：",[51,1424,1426],{"className":230,"code":1425,"language":232,"meta":57,"style":57},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[59,1427,1428,1440,1453],{"__ignoreMap":57},[79,1429,1430,1432,1434,1436,1438],{"class":81,"line":82},[79,1431,312],{"class":239},[79,1433,244],{"class":243},[79,1435,317],{"class":239},[79,1437,320],{"class":243},[79,1439,323],{"class":239},[79,1441,1442,1445,1447,1449,1451],{"class":81,"line":167},[79,1443,1444],{"class":239},"control_cost ",[79,1446,244],{"class":243},[79,1448,850],{"class":96},[79,1450,853],{"class":243},[79,1452,856],{"class":239},[79,1454,1455,1457,1459,1461,1463,1465,1467],{"class":81,"line":178},[79,1456,1414],{"class":243},[79,1458,864],{"class":96},[79,1460,685],{"class":239},[79,1462,320],{"class":243},[79,1464,312],{"class":239},[79,1466,320],{"class":243},[79,1468,875],{"class":239},[19,1470,1471],{},"奖励由两部分组成：",[26,1473,1474,1479],{},[29,1475,1476,1478],{},[59,1477,342],{},"：末端离目标越远，奖励越低。",[29,1480,1481,1484],{},[59,1482,1483],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,1486,1487],{},"简单控制器：",[51,1489,1491],{"className":230,"code":1490,"language":232,"meta":57,"style":57},"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",[59,1492,1493,1506,1539],{"__ignoreMap":57},[79,1494,1495,1498,1500,1502,1504],{"class":81,"line":82},[79,1496,1497],{"class":239},"error ",[79,1499,244],{"class":243},[79,1501,1011],{"class":239},[79,1503,320],{"class":243},[79,1505,1016],{"class":239},[79,1507,1508,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537],{"class":81,"line":167},[79,1509,1510],{"class":239},"data.ctrl[",[79,1512,1030],{"class":96},[79,1514,1033],{"class":239},[79,1516,244],{"class":243},[79,1518,1038],{"class":239},[79,1520,1041],{"class":96},[79,1522,853],{"class":243},[79,1524,1046],{"class":239},[79,1526,1049],{"class":96},[79,1528,1052],{"class":239},[79,1530,320],{"class":243},[79,1532,1057],{"class":96},[79,1534,1060],{"class":239},[79,1536,1057],{"class":96},[79,1538,253],{"class":239},[79,1540,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569],{"class":81,"line":178},[79,1542,1510],{"class":239},[79,1544,1072],{"class":96},[79,1546,1033],{"class":239},[79,1548,244],{"class":243},[79,1550,1038],{"class":239},[79,1552,1041],{"class":96},[79,1554,853],{"class":243},[79,1556,1046],{"class":239},[79,1558,1030],{"class":96},[79,1560,1052],{"class":239},[79,1562,320],{"class":243},[79,1564,1057],{"class":96},[79,1566,1060],{"class":239},[79,1568,1057],{"class":96},[79,1570,253],{"class":239},[19,1572,1573],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[265,1575,1576],{"id":1576},"代码逐行细讲",[51,1578,1579],{"className":230,"code":1384,"language":232,"meta":57,"style":57},[59,1580,1581],{"__ignoreMap":57},[79,1582,1583,1585,1587,1589,1591],{"class":81,"line":82},[79,1584,633],{"class":243},[79,1586,636],{"class":85},[79,1588,639],{"class":239},[79,1590,642],{"class":96},[79,1592,645],{"class":239},[19,1594,1595,1596,1598,1599,1601,1602,1604],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[59,1597,697],{}," 是 site 的名字，比如 ",[59,1600,250],{}," 或 ",[59,1603,763],{},"。",[51,1606,1608],{"className":230,"code":1607,"language":232,"meta":57,"style":57},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[59,1609,1610],{"__ignoreMap":57},[79,1611,1612,1614,1616],{"class":81,"line":82},[79,1613,240],{"class":239},[79,1615,244],{"class":243},[79,1617,656],{"class":239},[19,1619,1620],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[51,1622,1624],{"className":230,"code":1623,"language":232,"meta":57,"style":57},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[59,1625,1626,1638],{"__ignoreMap":57},[79,1627,1628,1630,1632,1634,1636],{"class":81,"line":82},[79,1629,1329],{"class":243},[79,1631,665],{"class":239},[79,1633,392],{"class":243},[79,1635,670],{"class":96},[79,1637,673],{"class":239},[79,1639,1640,1643,1645,1647,1649,1651,1653,1655,1657,1659],{"class":81,"line":167},[79,1641,1642],{"class":243},"    raise",[79,1644,682],{"class":96},[79,1646,685],{"class":239},[79,1648,688],{"class":243},[79,1650,691],{"class":89},[79,1652,694],{"class":96},[79,1654,697],{"class":239},[79,1656,700],{"class":96},[79,1658,703],{"class":89},[79,1660,253],{"class":239},[19,1662,1663,1664,1667,1668,1670],{},"如果 site 没找到，就主动报错。",[59,1665,1666],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[59,1669,697],{}," 的值放进字符串里。",[51,1672,1674],{"className":230,"code":1673,"language":232,"meta":57,"style":57},"return data.site_xpos[site_id].copy()\n",[59,1675,1676],{"__ignoreMap":57},[79,1677,1678,1680],{"class":81,"line":82},[79,1679,1414],{"class":243},[79,1681,714],{"class":239},[19,1683,1684,1685,1687,1688,1691],{},"返回这个 site 的世界坐标。",[59,1686,210],{}," 里的每一行都是一个 site 的 ",[59,1689,1690],{},"(x, y, z)"," 坐标。",[51,1693,1695],{"className":230,"code":1694,"language":232,"meta":57,"style":57},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[59,1696,1697],{"__ignoreMap":57},[79,1698,1699,1701,1703],{"class":81,"line":82},[79,1700,633],{"class":243},[79,1702,732],{"class":85},[79,1704,735],{"class":239},[19,1706,1707],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[51,1709,1711],{"className":230,"code":1710,"language":232,"meta":57,"style":57},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[59,1712,1713,1725],{"__ignoreMap":57},[79,1714,1715,1717,1719,1721,1723],{"class":81,"line":82},[79,1716,284],{"class":239},[79,1718,244],{"class":243},[79,1720,746],{"class":239},[79,1722,250],{"class":89},[79,1724,253],{"class":239},[79,1726,1727,1729,1731,1733,1735],{"class":81,"line":167},[79,1728,294],{"class":239},[79,1730,244],{"class":243},[79,1732,746],{"class":239},[79,1734,763],{"class":89},[79,1736,253],{"class":239},[19,1738,1739],{},"分别读取末端点和目标点的世界坐标。",[51,1741,1742],{"className":230,"code":1407,"language":232,"meta":57,"style":57},[59,1743,1744],{"__ignoreMap":57},[79,1745,1746,1748],{"class":81,"line":82},[79,1747,1414],{"class":243},[79,1749,773],{"class":239},[19,1751,1752],{},"把四部分拼成一个观测数组：",[51,1754,1757],{"className":1755,"code":1756,"language":56,"meta":57},[54],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[59,1758,1756],{"__ignoreMap":57},[51,1760,1762],{"className":230,"code":1761,"language":232,"meta":57,"style":57},"dist = np.linalg.norm(tip - target)\n",[59,1763,1764],{"__ignoreMap":57},[79,1765,1766,1768,1770,1772,1774],{"class":81,"line":82},[79,1767,312],{"class":239},[79,1769,244],{"class":243},[79,1771,317],{"class":239},[79,1773,320],{"class":243},[79,1775,323],{"class":239},[19,1777,1778,1779,1782,1783,1786],{},"计算 tip 到 target 的距离。",[59,1780,1781],{},"tip - target"," 得到一个三维向量，",[59,1784,1785],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,1788,1789],{},"例如：",[51,1791,1794],{"className":1792,"code":1793,"language":56,"meta":57},[54],"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",[59,1795,1793],{"__ignoreMap":57},[51,1797,1799],{"className":230,"code":1798,"language":232,"meta":57,"style":57},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[59,1800,1801],{"__ignoreMap":57},[79,1802,1803,1805,1807,1809,1811],{"class":81,"line":82},[79,1804,1444],{"class":239},[79,1806,244],{"class":243},[79,1808,850],{"class":96},[79,1810,853],{"class":243},[79,1812,856],{"class":239},[19,1814,1815,1816,1819,1820,1823],{},"计算动作惩罚。",[59,1817,1818],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[59,1821,1822],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[51,1825,1827],{"className":230,"code":1826,"language":232,"meta":57,"style":57},"return float(-dist - control_cost)\n",[59,1828,1829],{"__ignoreMap":57},[79,1830,1831,1833,1835,1837,1839,1841,1843],{"class":81,"line":82},[79,1832,1414],{"class":243},[79,1834,864],{"class":96},[79,1836,685],{"class":239},[79,1838,320],{"class":243},[79,1840,312],{"class":239},[79,1842,320],{"class":243},[79,1844,875],{"class":239},[19,1846,1847],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[51,1849,1851],{"className":230,"code":1850,"language":232,"meta":57,"style":57},"total_reward = 0.0\n",[59,1852,1853],{"__ignoreMap":57},[79,1854,1855,1858,1860],{"class":81,"line":82},[79,1856,1857],{"class":239},"total_reward ",[79,1859,244],{"class":243},[79,1861,938],{"class":96},[19,1863,1864],{},"累计奖励变量，记录整个运行过程的总分。",[51,1866,1868],{"className":230,"code":1867,"language":232,"meta":57,"style":57},"for step in range(500):\n",[59,1869,1870],{"__ignoreMap":57},[79,1871,1872,1875,1877,1879,1881,1883,1885],{"class":81,"line":82},[79,1873,1874],{"class":243},"for",[79,1876,952],{"class":239},[79,1878,955],{"class":243},[79,1880,958],{"class":96},[79,1882,685],{"class":239},[79,1884,963],{"class":96},[79,1886,966],{"class":239},[19,1888,1889],{},"运行 500 个控制步。",[51,1891,1893],{"className":230,"code":1892,"language":232,"meta":57,"style":57},"mujoco.mj_forward(model, data)\n",[59,1894,1895],{"__ignoreMap":57},[79,1896,1897],{"class":81,"line":82},[79,1898,1892],{"class":239},[19,1900,1901,1902,1905,1906,1909],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[59,1903,1904],{},"tip"," 和 ",[59,1907,1908],{},"target"," 是当前状态下的坐标。",[51,1911,1913],{"className":230,"code":1912,"language":232,"meta":57,"style":57},"error = target - tip\n",[59,1914,1915],{"__ignoreMap":57},[79,1916,1917,1919,1921,1923,1925],{"class":81,"line":82},[79,1918,1497],{"class":239},[79,1920,244],{"class":243},[79,1922,1011],{"class":239},[79,1924,320],{"class":243},[79,1926,1016],{"class":239},[19,1928,1929],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[51,1931,1933],{"className":230,"code":1932,"language":232,"meta":57,"style":57},"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",[59,1934,1935,1967],{"__ignoreMap":57},[79,1936,1937,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963,1965],{"class":81,"line":82},[79,1938,1510],{"class":239},[79,1940,1030],{"class":96},[79,1942,1033],{"class":239},[79,1944,244],{"class":243},[79,1946,1038],{"class":239},[79,1948,1041],{"class":96},[79,1950,853],{"class":243},[79,1952,1046],{"class":239},[79,1954,1049],{"class":96},[79,1956,1052],{"class":239},[79,1958,320],{"class":243},[79,1960,1057],{"class":96},[79,1962,1060],{"class":239},[79,1964,1057],{"class":96},[79,1966,253],{"class":239},[79,1968,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997],{"class":81,"line":167},[79,1970,1510],{"class":239},[79,1972,1072],{"class":96},[79,1974,1033],{"class":239},[79,1976,244],{"class":243},[79,1978,1038],{"class":239},[79,1980,1041],{"class":96},[79,1982,853],{"class":243},[79,1984,1046],{"class":239},[79,1986,1030],{"class":96},[79,1988,1052],{"class":239},[79,1990,320],{"class":243},[79,1992,1057],{"class":96},[79,1994,1060],{"class":239},[79,1996,1057],{"class":96},[79,1998,253],{"class":239},[19,2000,2001,2002,2005],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[59,2003,2004],{},"error -> ctrl -> step"," 的流程。",[51,2007,2009],{"className":230,"code":2008,"language":232,"meta":57,"style":57},"mujoco.mj_step(model, data)\n",[59,2010,2011],{"__ignoreMap":57},[79,2012,2013],{"class":81,"line":82},[79,2014,2008],{"class":239},[19,2016,2017],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[51,2019,2021],{"className":230,"code":2020,"language":232,"meta":57,"style":57},"obs = get_obs(model, data)\n",[59,2022,2023],{"__ignoreMap":57},[79,2024,2025,2028,2030],{"class":81,"line":82},[79,2026,2027],{"class":239},"obs ",[79,2029,244],{"class":243},[79,2031,1158],{"class":239},[19,2033,2034,2035,2038],{},"读取最新观测。后面打印 ",[59,2036,2037],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,2040,2042],{"id":2041},"_5运行结果说明","5.运行结果说明",[19,2044,2045],{},"观测维度为:",[51,2047,2050],{"className":2048,"code":2049,"language":56,"meta":57},[54],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[59,2051,2049],{"__ignoreMap":57},[19,2053,2054],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,2056,2057],{},"程序每 100 步打印：",[51,2059,2062],{"className":2060,"code":2061,"language":56,"meta":57},[54],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[59,2063,2061],{"__ignoreMap":57},[19,2065,2066,2067,2069],{},"如果控制有效，你应该看到最终 ",[59,2068,1904],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,2071,2073],{"id":2072},"_6验证步骤","6.验证步骤",[26,2075,2076,2079,2082,2089,2098,2109,2121],{},[29,2077,2078],{},"修改目标点位置。",[29,2080,2081],{},"重新运行，观察最终 tip 是否变化。",[29,2083,2084,2085,2088],{},"把 gravity 改成 ",[59,2086,2087],{},"0 0 -9.81","，观察控制是否变差。",[29,2090,2091,2092,2095,2096,1604],{},"打印 ",[59,2093,2094],{},"model.nu","，应为 ",[59,2097,1049],{},[29,2099,2100,2101,2104,2105,2108],{},"把 ",[59,2102,2103],{},"ctrlrange=\"-1 1\""," 改成 ",[59,2106,2107],{},"-0.2 0.2","，观察机械臂是否更难移动。",[29,2110,2100,2111,2113,2114,2104,2117,2120],{},[59,2112,1908],{}," 的 ",[59,2115,2116],{},"pos",[59,2118,2119],{},"0.2 0 0.6","，观察 reward 和 final tip。",[29,2122,2123],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,2125,2127],{"id":2126},"_7常见错误与解决方案","7.常见错误与解决方案",[265,2129,2131],{"id":2130},"site-not-found",[59,2132,2133],{},"site not found",[19,2135,2136,2137,1905,2140,1604],{},"检查 XML 中是否有 ",[59,2138,2139],{},"site name=\"tip\"",[59,2141,2142],{},"site name=\"target\"",[265,2144,2145],{"id":2145},"机械臂完全不动",[19,2147,2148],{},"检查:",[26,2150,2151,2156,2159,2165],{},[29,2152,2153,2155],{},[59,2154,2094],{}," 是否为 2",[29,2157,2158],{},"actuator 是否引用正确 joint",[29,2160,2161,2164],{},[59,2162,2163],{},"data.ctrl"," 是否被赋值",[29,2166,2167,2168],{},"是否执行了 ",[59,2169,2170],{},"mujoco.mj_step(model, data)",[265,2172,2173],{"id":2173},"控制效果不好",[19,2175,2176],{},"正常。本章重点不是控制器最优，而是任务结构:",[51,2178,2181],{"className":2179,"code":2180,"language":56,"meta":57},[54],"obs → action → mj_step → reward → next_obs\n",[59,2182,2180],{"__ignoreMap":57},[265,2184,2186],{"id":2185},"tip-坐标不变化","tip 坐标不变化",[19,2188,2189],{},"检查：",[26,2191,2192,2197,2206,2215],{},[29,2193,2194,2195,1604],{},"是否每步调用了 ",[59,2196,2170],{},[29,2198,2199,2200,1905,2203,1604],{},"是否写入了 ",[59,2201,2202],{},"data.ctrl[0]",[59,2204,2205],{},"data.ctrl[1]",[29,2207,2208,2209,204,2212,1604],{},"actuator 是否正确引用 ",[59,2210,2211],{},"joint1",[59,2213,2214],{},"joint2",[29,2216,2217],{},"控制输入是否太小。",[265,2219,2220],{"id":2220},"目标点不会动",[19,2222,2223],{},"本章的 target 是固定 site：",[51,2225,2227],{"className":383,"code":2226,"language":385,"meta":57,"style":57},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[59,2228,2229],{"__ignoreMap":57},[79,2230,2231,2233,2236,2239,2241,2243,2246,2248,2251],{"class":81,"line":82},[79,2232,392],{"class":239},[79,2234,2235],{"class":395},"site",[79,2237,2238],{"class":85}," name",[79,2240,244],{"class":239},[79,2242,763],{"class":89},[79,2244,2245],{"class":85}," pos",[79,2247,244],{"class":239},[79,2249,2250],{"class":89},"\"0.5 0 0.4\"",[79,2252,2253],{"class":239}," ...\u002F>\n",[19,2255,2256,2257,2260],{},"它直接挂在 ",[59,2258,2259],{},"worldbody"," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[265,2262,2263],{"id":2263},"机械臂不像真实机械臂",[19,2265,2266],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,2268,2270],{"id":2269},"_8本章小结","8.本章小结",[19,2272,2273],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,2275,2276],{},"核心公式：",[51,2278,2281],{"className":2279,"code":2280,"language":56,"meta":57},[54],"distance = ||tip - target||\nreward = -distance - action_cost\n",[59,2282,2280],{"__ignoreMap":57},[19,2284,2285],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[2287,2288,2289],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .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":57,"searchDepth":167,"depth":167,"links":2291},[2292,2293,2294,2299,2303,2304,2305,2313],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":214,"depth":167,"text":215,"children":2295},[2296,2297,2298],{"id":267,"depth":178,"text":268},{"id":346,"depth":178,"text":346},{"id":376,"depth":178,"text":377},{"id":421,"depth":167,"text":422,"children":2300},[2301,2302],{"id":1378,"depth":178,"text":1378},{"id":1576,"depth":178,"text":1576},{"id":2041,"depth":167,"text":2042},{"id":2072,"depth":167,"text":2073},{"id":2126,"depth":167,"text":2127,"children":2306},[2307,2308,2309,2310,2311,2312],{"id":2130,"depth":178,"text":2133},{"id":2145,"depth":178,"text":2145},{"id":2173,"depth":178,"text":2173},{"id":2185,"depth":178,"text":2186},{"id":2220,"depth":178,"text":2220},{"id":2263,"depth":178,"text":2263},{"id":2269,"depth":167,"text":2270},"md",{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":5,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",[2321,7360,8465,9884,12843,14194,15682,16770,25510,25523,26118,26144,26268,26509,26574,26592,26605,26652,26775,26944,27143,27322,27527,27663,27758,27795,27808,28118,28856,29564,29585,30604,32234,32385,32398,32410,32706,52507,52522,52539,52572,55440,78786,94928,94949,95062,95183,95953,96616,96977,97015,97121,97221,97264,97290,97351,99003,99104,99129,99620,100120,101200,101483,102225,102727,102739,104692,106339,107833,109524,111441,113343,115127,118597,119029,119492,120241,123185,123533,123555,123911,127218,127230,127633,127656,127803,127970,128175,128476,129033,129690,131621,133219,133868,135362,136793,138028,139722,141474,143884,144000,144935,145146,146031,147266,147494,147507,148662,151074,153442,156763,159240,160884,162661,164674,167726,169906,172433,174627],{"id":2322,"title":2323,"body":2324,"description":57,"extension":2314,"meta":7355,"navigation":453,"path":7356,"seo":7357,"stem":7358,"__hash__":7359},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":2325,"toc":7327},[2326,2329,2333,2336,2340,2351,2355,2359,2362,2365,2368,2371,2374,2400,2404,2407,2410,2413,2416,2463,2467,2485,2487,2501,2504,2512,2515,3369,3376,3393,3397,3483,3487,3493,3578,3582,3620,3624,3688,3692,3696,3703,3714,3718,3723,3727,3732,3736,3741,3745,3749,3754,4004,4009,4147,4152,4407,4410,4418,4422,4427,4530,4533,4830,4839,4940,4943,4946,4949,4952,5212,5217,5355,5358,5536,5539,5667,5670,5822,5826,5831,5834,5845,5853,5856,5962,5966,5970,5975,6025,6030,6035,6059,6064,6117,6120,6125,6300,6305,6590,6595,6990,6994,6999,7056,7061,7069,7072,7212,7215,7324],[10,2327,2323],{"id":2328},"_1基础入门",[14,2330,2332],{"id":2331},"_11注释","1.1注释",[19,2334,2335],{},"\u002F\u002F或者\u002F* *\u002F",[14,2337,2339],{"id":2338},"_12命名","1.2命名",[26,2341,2342,2345,2348],{},[29,2343,2344],{},"字母数字下划线",[29,2346,2347],{},"开头必须是字母或_",[29,2349,2350],{},"不能使用关键词",[14,2352,2354],{"id":2353},"_13数据类型","1.3数据类型",[265,2356,2358],{"id":2357},"_131整形","1.3.1整形",[19,2360,2361],{},"short 短整形 2",[19,2363,2364],{},"int 整形 4",[19,2366,2367],{},"long 长整形 win4 linux32位4 linux64位8",[19,2369,2370],{},"long long 长长整形 8",[19,2372,2373],{},"利用sizeof可以求数据类型占用的内存空间大小",[51,2375,2379],{"className":2376,"code":2377,"language":2378,"meta":57,"style":57},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[59,2380,2381,2393],{"__ignoreMap":57},[79,2382,2383,2386,2388,2391],{"class":81,"line":82},[79,2384,2385],{"class":243},"sizeof",[79,2387,685],{"class":239},[79,2389,2390],{"class":243},"int",[79,2392,253],{"class":239},[79,2394,2395,2397],{"class":81,"line":167},[79,2396,2385],{"class":243},[79,2398,2399],{"class":239},"(num)\n",[265,2401,2403],{"id":2402},"_132浮点型","1.3.2浮点型",[19,2405,2406],{},"float 单精度 4节 7位有效数字",[19,2408,2409],{},"double 双精度 8节 15-16有效数字",[19,2411,2412],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2414,2415],{},"注意点：",[51,2417,2419],{"className":2376,"code":2418,"language":2378,"meta":57,"style":57},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[59,2420,2421,2442],{"__ignoreMap":57},[79,2422,2423,2425,2428,2430,2433,2435,2438],{"class":81,"line":82},[79,2424,797],{"class":243},[79,2426,2427],{"class":239}," f1",[79,2429,244],{"class":243},[79,2431,2432],{"class":96},"3.14",[79,2434,688],{"class":243},[79,2436,2437],{"class":239},";",[79,2439,2441],{"class":2440},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[79,2443,2444,2446,2449,2451,2453,2456,2458,2460],{"class":81,"line":167},[79,2445,797],{"class":243},[79,2447,2448],{"class":239}," f2",[79,2450,244],{"class":243},[79,2452,1188],{"class":96},[79,2454,2455],{"class":243},"e",[79,2457,1049],{"class":96},[79,2459,2437],{"class":239},[79,2461,2462],{"class":2440}," \u002F\u002F科学记数法\n",[265,2464,2466],{"id":2465},"_133字符型","1.3.3字符型",[51,2468,2470],{"className":2376,"code":2469,"language":2378,"meta":57,"style":57},"char ch='a'\n",[59,2471,2472],{"__ignoreMap":57},[79,2473,2474,2477,2480,2482],{"class":81,"line":82},[79,2475,2476],{"class":243},"char",[79,2478,2479],{"class":239}," ch",[79,2481,244],{"class":243},[79,2483,2484],{"class":89},"'a'\n",[19,2486,2415],{},[26,2488,2489,2492,2495,2498],{},[29,2490,2491],{},"在显示字符型变量时，只能单引号，双引号x",[29,2493,2494],{},"单引号内只能一个字符，不能字符串",[29,2496,2497],{},"c和c++字符型变量只占用一个字符",[29,2499,2500],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2502,2503],{},"ASCII码大致由以下两部分组成：",[26,2505,2506,2509],{},[29,2507,2508],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[29,2510,2511],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2513,2514],{},"ASCII码表格：",[2516,2517,2518,2562],"table",{},[2519,2520,2521],"thead",{},[2522,2523,2524,2532,2537,2541,2546,2550,2554,2558],"tr",{},[2525,2526,2527,2531],"th",{},[2528,2529,2530],"strong",{},"ASCII","值",[2525,2533,2534],{},[2528,2535,2536],{},"控制字符",[2525,2538,2539,2531],{},[2528,2540,2530],{},[2525,2542,2543],{},[2528,2544,2545],{},"字符",[2525,2547,2548,2531],{},[2528,2549,2530],{},[2525,2551,2552],{},[2528,2553,2545],{},[2525,2555,2556,2531],{},[2528,2557,2530],{},[2525,2559,2560],{},[2528,2561,2545],{},[2563,2564,2565,2590,2615,2639,2664,2690,2714,2739,2765,2790,2816,2842,2868,2893,2918,2944,2970,2994,3019,3044,3069,3094,3119,3144,3169,3194,3219,3245,3269,3293,3317,3343],"tbody",{},[2522,2566,2567,2570,2573,2576,2579,2582,2585,2588],{},[2568,2569,1030],"td",{},[2568,2571,2572],{},"NUT",[2568,2574,2575],{},"32",[2568,2577,2578],{},"(space)",[2568,2580,2581],{},"64",[2568,2583,2584],{},"@",[2568,2586,2587],{},"96",[2568,2589,204],{},[2522,2591,2592,2594,2597,2600,2603,2606,2609,2612],{},[2568,2593,1072],{},[2568,2595,2596],{},"SOH",[2568,2598,2599],{},"33",[2568,2601,2602],{},"!",[2568,2604,2605],{},"65",[2568,2607,2608],{},"A",[2568,2610,2611],{},"97",[2568,2613,2614],{},"a",[2522,2616,2617,2619,2622,2625,2627,2630,2633,2636],{},[2568,2618,1049],{},[2568,2620,2621],{},"STX",[2568,2623,2624],{},"34",[2568,2626,703],{},[2568,2628,2629],{},"66",[2568,2631,2632],{},"B",[2568,2634,2635],{},"98",[2568,2637,2638],{},"b",[2522,2640,2641,2643,2646,2649,2652,2655,2658,2661],{},[2568,2642,1188],{},[2568,2644,2645],{},"ETX",[2568,2647,2648],{},"35",[2568,2650,2651],{},"#",[2568,2653,2654],{},"67",[2568,2656,2657],{},"C",[2568,2659,2660],{},"99",[2568,2662,2663],{},"c",[2522,2665,2666,2669,2672,2675,2678,2681,2684,2687],{},[2568,2667,2668],{},"4",[2568,2670,2671],{},"EOT",[2568,2673,2674],{},"36",[2568,2676,2677],{},"$",[2568,2679,2680],{},"68",[2568,2682,2683],{},"D",[2568,2685,2686],{},"100",[2568,2688,2689],{},"d",[2522,2691,2692,2695,2698,2701,2703,2706,2709,2712],{},[2568,2693,2694],{},"5",[2568,2696,2697],{},"ENQ",[2568,2699,2700],{},"37",[2568,2702,1137],{},[2568,2704,2705],{},"69",[2568,2707,2708],{},"E",[2568,2710,2711],{},"101",[2568,2713,2455],{},[2522,2715,2716,2719,2722,2725,2728,2731,2734,2737],{},[2568,2717,2718],{},"6",[2568,2720,2721],{},"ACK",[2568,2723,2724],{},"38",[2568,2726,2727],{},"&",[2568,2729,2730],{},"70",[2568,2732,2733],{},"F",[2568,2735,2736],{},"102",[2568,2738,688],{},[2522,2740,2741,2744,2747,2750,2753,2756,2759,2762],{},[2568,2742,2743],{},"7",[2568,2745,2746],{},"BEL",[2568,2748,2749],{},"39",[2568,2751,2752],{},",",[2568,2754,2755],{},"71",[2568,2757,2758],{},"G",[2568,2760,2761],{},"103",[2568,2763,2764],{},"g",[2522,2766,2767,2770,2773,2776,2778,2781,2784,2787],{},[2568,2768,2769],{},"8",[2568,2771,2772],{},"BS",[2568,2774,2775],{},"40",[2568,2777,685],{},[2568,2779,2780],{},"72",[2568,2782,2783],{},"H",[2568,2785,2786],{},"104",[2568,2788,2789],{},"h",[2522,2791,2792,2795,2798,2801,2804,2807,2810,2813],{},[2568,2793,2794],{},"9",[2568,2796,2797],{},"HT",[2568,2799,2800],{},"41",[2568,2802,2803],{},")",[2568,2805,2806],{},"73",[2568,2808,2809],{},"I",[2568,2811,2812],{},"105",[2568,2814,2815],{},"i",[2522,2817,2818,2821,2824,2827,2830,2833,2836,2839],{},[2568,2819,2820],{},"10",[2568,2822,2823],{},"LF",[2568,2825,2826],{},"42",[2568,2828,2829],{},"*",[2568,2831,2832],{},"74",[2568,2834,2835],{},"J",[2568,2837,2838],{},"106",[2568,2840,2841],{},"j",[2522,2843,2844,2847,2850,2853,2856,2859,2862,2865],{},[2568,2845,2846],{},"11",[2568,2848,2849],{},"VT",[2568,2851,2852],{},"43",[2568,2854,2855],{},"+",[2568,2857,2858],{},"75",[2568,2860,2861],{},"K",[2568,2863,2864],{},"107",[2568,2866,2867],{},"k",[2522,2869,2870,2873,2876,2879,2881,2884,2887,2890],{},[2568,2871,2872],{},"12",[2568,2874,2875],{},"FF",[2568,2877,2878],{},"44",[2568,2880,2752],{},[2568,2882,2883],{},"76",[2568,2885,2886],{},"L",[2568,2888,2889],{},"108",[2568,2891,2892],{},"l",[2522,2894,2895,2898,2901,2904,2906,2909,2912,2915],{},[2568,2896,2897],{},"13",[2568,2899,2900],{},"CR",[2568,2902,2903],{},"45",[2568,2905,320],{},[2568,2907,2908],{},"77",[2568,2910,2911],{},"M",[2568,2913,2914],{},"109",[2568,2916,2917],{},"m",[2522,2919,2920,2923,2926,2929,2932,2935,2938,2941],{},[2568,2921,2922],{},"14",[2568,2924,2925],{},"SO",[2568,2927,2928],{},"46",[2568,2930,2931],{},".",[2568,2933,2934],{},"78",[2568,2936,2937],{},"N",[2568,2939,2940],{},"110",[2568,2942,2943],{},"n",[2522,2945,2946,2949,2952,2955,2958,2961,2964,2967],{},[2568,2947,2948],{},"15",[2568,2950,2951],{},"SI",[2568,2953,2954],{},"47",[2568,2956,2957],{},"\u002F",[2568,2959,2960],{},"79",[2568,2962,2963],{},"O",[2568,2965,2966],{},"111",[2568,2968,2969],{},"o",[2522,2971,2972,2975,2978,2981,2983,2986,2989,2992],{},[2568,2973,2974],{},"16",[2568,2976,2977],{},"DLE",[2568,2979,2980],{},"48",[2568,2982,1030],{},[2568,2984,2985],{},"80",[2568,2987,2988],{},"P",[2568,2990,2991],{},"112",[2568,2993,19],{},[2522,2995,2996,2999,3002,3005,3007,3010,3013,3016],{},[2568,2997,2998],{},"17",[2568,3000,3001],{},"DCI",[2568,3003,3004],{},"49",[2568,3006,1072],{},[2568,3008,3009],{},"81",[2568,3011,3012],{},"Q",[2568,3014,3015],{},"113",[2568,3017,3018],{},"q",[2522,3020,3021,3024,3027,3030,3032,3035,3038,3041],{},[2568,3022,3023],{},"18",[2568,3025,3026],{},"DC2",[2568,3028,3029],{},"50",[2568,3031,1049],{},[2568,3033,3034],{},"82",[2568,3036,3037],{},"R",[2568,3039,3040],{},"114",[2568,3042,3043],{},"r",[2522,3045,3046,3049,3052,3055,3057,3060,3063,3066],{},[2568,3047,3048],{},"19",[2568,3050,3051],{},"DC3",[2568,3053,3054],{},"51",[2568,3056,1188],{},[2568,3058,3059],{},"83",[2568,3061,3062],{},"S",[2568,3064,3065],{},"115",[2568,3067,3068],{},"s",[2522,3070,3071,3074,3077,3080,3082,3085,3088,3091],{},[2568,3072,3073],{},"20",[2568,3075,3076],{},"DC4",[2568,3078,3079],{},"52",[2568,3081,2668],{},[2568,3083,3084],{},"84",[2568,3086,3087],{},"T",[2568,3089,3090],{},"116",[2568,3092,3093],{},"t",[2522,3095,3096,3099,3102,3105,3107,3110,3113,3116],{},[2568,3097,3098],{},"21",[2568,3100,3101],{},"NAK",[2568,3103,3104],{},"53",[2568,3106,2694],{},[2568,3108,3109],{},"85",[2568,3111,3112],{},"U",[2568,3114,3115],{},"117",[2568,3117,3118],{},"u",[2522,3120,3121,3124,3127,3130,3132,3135,3138,3141],{},[2568,3122,3123],{},"22",[2568,3125,3126],{},"SYN",[2568,3128,3129],{},"54",[2568,3131,2718],{},[2568,3133,3134],{},"86",[2568,3136,3137],{},"V",[2568,3139,3140],{},"118",[2568,3142,3143],{},"v",[2522,3145,3146,3149,3152,3155,3157,3160,3163,3166],{},[2568,3147,3148],{},"23",[2568,3150,3151],{},"TB",[2568,3153,3154],{},"55",[2568,3156,2743],{},[2568,3158,3159],{},"87",[2568,3161,3162],{},"W",[2568,3164,3165],{},"119",[2568,3167,3168],{},"w",[2522,3170,3171,3174,3177,3180,3182,3185,3188,3191],{},[2568,3172,3173],{},"24",[2568,3175,3176],{},"CAN",[2568,3178,3179],{},"56",[2568,3181,2769],{},[2568,3183,3184],{},"88",[2568,3186,3187],{},"X",[2568,3189,3190],{},"120",[2568,3192,3193],{},"x",[2522,3195,3196,3199,3202,3205,3207,3210,3213,3216],{},[2568,3197,3198],{},"25",[2568,3200,3201],{},"EM",[2568,3203,3204],{},"57",[2568,3206,2794],{},[2568,3208,3209],{},"89",[2568,3211,3212],{},"Y",[2568,3214,3215],{},"121",[2568,3217,3218],{},"y",[2522,3220,3221,3224,3227,3230,3233,3236,3239,3242],{},[2568,3222,3223],{},"26",[2568,3225,3226],{},"SUB",[2568,3228,3229],{},"58",[2568,3231,3232],{},":",[2568,3234,3235],{},"90",[2568,3237,3238],{},"Z",[2568,3240,3241],{},"122",[2568,3243,3244],{},"z",[2522,3246,3247,3250,3253,3256,3258,3261,3264,3267],{},[2568,3248,3249],{},"27",[2568,3251,3252],{},"ESC",[2568,3254,3255],{},"59",[2568,3257,2437],{},[2568,3259,3260],{},"91",[2568,3262,3263],{},"[",[2568,3265,3266],{},"123",[2568,3268,694],{},[2522,3270,3271,3274,3277,3280,3282,3285,3287,3290],{},[2568,3272,3273],{},"28",[2568,3275,3276],{},"FS",[2568,3278,3279],{},"60",[2568,3281,392],{},[2568,3283,3284],{},"92",[2568,3286,2957],{},[2568,3288,3289],{},"124",[2568,3291,3292],{},"|",[2522,3294,3295,3298,3301,3304,3306,3309,3312,3315],{},[2568,3296,3297],{},"29",[2568,3299,3300],{},"GS",[2568,3302,3303],{},"61",[2568,3305,244],{},[2568,3307,3308],{},"93",[2568,3310,3311],{},"]",[2568,3313,3314],{},"125",[2568,3316,700],{},[2522,3318,3319,3322,3325,3328,3331,3334,3337,3340],{},[2568,3320,3321],{},"30",[2568,3323,3324],{},"RS",[2568,3326,3327],{},"62",[2568,3329,3330],{},">",[2568,3332,3333],{},"94",[2568,3335,3336],{},"^",[2568,3338,3339],{},"126",[2568,3341,3342],{},"`",[2522,3344,3345,3348,3351,3354,3357,3360,3363,3366],{},[2568,3346,3347],{},"31",[2568,3349,3350],{},"US",[2568,3352,3353],{},"63",[2568,3355,3356],{},"?",[2568,3358,3359],{},"95",[2568,3361,3362],{},"_",[2568,3364,3365],{},"127",[2568,3367,3368],{},"DEL",[19,3370,3371,3372,3375],{},"ASCII 码大致由以下",[2528,3373,3374],{},"两部分组","成：",[3377,3378,3379,3386],"ul",{},[29,3380,3381,3382,3385],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[2528,3383,3384],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[29,3387,3388,3389,3392],{},"ASCII 打印字符：数字 ",[2528,3390,3391],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[265,3394,3396],{"id":3395},"_134转义字符","1.3.4转义字符",[51,3398,3400],{"className":2376,"code":3399,"language":2378,"meta":57,"style":57},"\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",[59,3401,3402,3407,3423,3437,3442,3455,3460],{"__ignoreMap":57},[79,3403,3404],{"class":81,"line":82},[79,3405,3406],{"class":2440},"\u002F\u002F换行符\n",[79,3408,3409,3412,3415,3418,3420],{"class":81,"line":167},[79,3410,3411],{"class":239},"cout ",[79,3413,3414],{"class":243},"\u003C\u003C",[79,3416,3417],{"class":89},"\"hello world\u002Fn\"",[79,3419,2437],{"class":239},[79,3421,3422],{"class":2440}," \u002F\u002F就等同于如下：\n",[79,3424,3425,3427,3429,3432,3434],{"class":81,"line":178},[79,3426,3411],{"class":239},[79,3428,3414],{"class":243},[79,3430,3431],{"class":89},"\"hello world\"",[79,3433,3414],{"class":243},[79,3435,3436],{"class":239},"endl;\n",[79,3438,3439],{"class":81,"line":457},[79,3440,3441],{"class":2440},"\u002F\u002F反斜杠\n",[79,3443,3444,3446,3448,3451,3453],{"class":81,"line":462},[79,3445,3411],{"class":239},[79,3447,3414],{"class":243},[79,3449,3450],{"class":89},"\"\u002F\u002F\"",[79,3452,3414],{"class":243},[79,3454,3436],{"class":239},[79,3456,3457],{"class":81,"line":474},[79,3458,3459],{"class":2440},"\u002F\u002F水平制表符\n",[79,3461,3462,3464,3466,3469,3472,3475,3477,3480],{"class":81,"line":480},[79,3463,3411],{"class":239},[79,3465,3414],{"class":243},[79,3467,3468],{"class":89},"\"aaaa",[79,3470,3471],{"class":96},"\\t",[79,3473,3474],{"class":89},"helloworld\"",[79,3476,3414],{"class":243},[79,3478,3479],{"class":239},"endl;",[79,3481,3482],{"class":2440}," \u002F\u002F输出窗口时有对齐效果\n",[265,3484,3486],{"id":3485},"_135字符串型","1.3.5字符串型",[19,3488,3489,3490,3492],{},"char 变量名",[79,3491],{},"=\"字符串值\"",[51,3494,3496],{"className":2376,"code":3495,"language":2378,"meta":57,"style":57},"\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",[59,3497,3498,3503,3508,3513,3518,3532,3544,3549,3554,3565],{"__ignoreMap":57},[79,3499,3500],{"class":81,"line":82},[79,3501,3502],{"class":2440},"\u002F\u002Fc风格字符串\n",[79,3504,3505],{"class":81,"line":167},[79,3506,3507],{"class":2440},"\u002F\u002F注意事项：\n",[79,3509,3510],{"class":81,"line":178},[79,3511,3512],{"class":2440},"\u002F\u002F1.char字符串名[]\n",[79,3514,3515],{"class":81,"line":457},[79,3516,3517],{"class":2440},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[79,3519,3520,3522,3525,3527,3529],{"class":81,"line":462},[79,3521,2476],{"class":243},[79,3523,3524],{"class":239}," str[]",[79,3526,244],{"class":243},[79,3528,3431],{"class":89},[79,3530,3531],{"class":239},";\n",[79,3533,3534,3536,3538,3540,3542],{"class":81,"line":474},[79,3535,3411],{"class":239},[79,3537,3414],{"class":243},[79,3539,642],{"class":239},[79,3541,3414],{"class":243},[79,3543,3436],{"class":239},[79,3545,3546],{"class":81,"line":480},[79,3547,3548],{"class":2440},"\u002F\u002Fc++风格字符串\n",[79,3550,3551],{"class":81,"line":486},[79,3552,3553],{"class":2440},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[79,3555,3556,3559,3561,3563],{"class":81,"line":491},[79,3557,3558],{"class":239},"string str2",[79,3560,244],{"class":243},[79,3562,3431],{"class":89},[79,3564,3531],{"class":239},[79,3566,3567,3569,3571,3574,3576],{"class":81,"line":497},[79,3568,3411],{"class":239},[79,3570,3414],{"class":243},[79,3572,3573],{"class":239},"str2",[79,3575,3414],{"class":243},[79,3577,3436],{"class":239},[265,3579,3581],{"id":3580},"_136布尔类型bool","1.3.6布尔类型bool",[51,3583,3585],{"className":2376,"code":3584,"language":2378,"meta":57,"style":57},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[59,3586,3587,3602],{"__ignoreMap":57},[79,3588,3589,3592,3595,3597,3600],{"class":81,"line":82},[79,3590,3591],{"class":243},"bool",[79,3593,3594],{"class":239}," flag",[79,3596,244],{"class":243},[79,3598,3599],{"class":96},"true",[79,3601,3531],{"class":239},[79,3603,3604,3607,3610,3613,3615,3617],{"class":81,"line":167},[79,3605,3606],{"class":239},"cout",[79,3608,3609],{"class":243},"\u003C\u003Csizeof",[79,3611,3612],{"class":239},"(flag)",[79,3614,3414],{"class":243},[79,3616,3479],{"class":239},[79,3618,3619],{"class":2440}," \u002F\u002F查看布尔占内存空间\n",[14,3621,3623],{"id":3622},"_14键盘输入cin","1.4键盘输入cin",[51,3625,3627],{"className":2376,"code":3626,"language":2378,"meta":57,"style":57},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[59,3628,3629,3642,3659,3670],{"__ignoreMap":57},[79,3630,3631,3633,3636,3638,3640],{"class":81,"line":82},[79,3632,2390],{"class":243},[79,3634,3635],{"class":239}," a",[79,3637,244],{"class":243},[79,3639,1030],{"class":96},[79,3641,3531],{"class":239},[79,3643,3644,3646,3648,3651,3653,3655,3657],{"class":81,"line":167},[79,3645,3606],{"class":239},[79,3647,3414],{"class":243},[79,3649,3650],{"class":89},"\"请给整型变量a赋值\"",[79,3652,3414],{"class":243},[79,3654,2614],{"class":239},[79,3656,3414],{"class":243},[79,3658,3436],{"class":239},[79,3660,3661,3664,3667],{"class":81,"line":178},[79,3662,3663],{"class":239},"cin ",[79,3665,3666],{"class":243},">>",[79,3668,3669],{"class":239}," a;\n",[79,3671,3672,3674,3676,3679,3682,3684,3686],{"class":81,"line":457},[79,3673,3411],{"class":239},[79,3675,3414],{"class":243},[79,3677,3678],{"class":89}," \"整型变量a=\"",[79,3680,3681],{"class":243}," \u003C\u003C",[79,3683,2614],{"class":239},[79,3685,3414],{"class":243},[79,3687,3436],{"class":239},[14,3689,3691],{"id":3690},"_15运算符","1.5运算符",[265,3693,3695],{"id":3694},"_151算术运算符","1.5.1算术运算符",[19,3697,3698,3702],{},[3699,3700],"img",{"alt":57,"src":3701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[26,3704,3705,3708,3711],{},[29,3706,3707],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[29,3709,3710],{},"两个小数不可以做取模运算",[29,3712,3713],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[265,3715,3717],{"id":3716},"_152赋值运算符","1.5.2赋值运算符",[19,3719,3720],{},[3699,3721],{"alt":57,"src":3722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[265,3724,3726],{"id":3725},"_153比较运算符","1.5.3比较运算符",[19,3728,3729],{},[3699,3730],{"alt":57,"src":3731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[265,3733,3735],{"id":3734},"_154逻辑运算符","1.5.4逻辑运算符",[19,3737,3738],{},[3699,3739],{"alt":57,"src":3740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3742,3744],{"id":3743},"_16程序流程结构","1.6程序流程结构",[265,3746,3748],{"id":3747},"_161选择结构","1.6.1选择结构",[26,3750,3751],{},[29,3752,3753],{},"if语句\n单行、多行、多条件if语句",[51,3755,3757],{"className":2376,"code":3756,"language":2378,"meta":57,"style":57},"\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",[59,3758,3759,3764,3778,3783,3797,3802,3807,3816,3829,3833,3846,3850,3855,3859,3872,3876,3881,3901,3905,3918,3922,3950,3954,3970,3974,3978,3982,3995,3999],{"__ignoreMap":57},[79,3760,3761],{"class":81,"line":82},[79,3762,3763],{"class":2440},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[79,3765,3766,3768,3771,3773,3776],{"class":81,"line":167},[79,3767,1329],{"class":243},[79,3769,3770],{"class":239},"(score",[79,3772,3330],{"class":243},[79,3774,3775],{"class":96},"600",[79,3777,253],{"class":239},[79,3779,3780],{"class":81,"line":178},[79,3781,3782],{"class":239},"{\n",[79,3784,3785,3788,3790,3793,3795],{"class":81,"line":457},[79,3786,3787],{"class":239},"    cout",[79,3789,3414],{"class":243},[79,3791,3792],{"class":89},"'这是单行if语句'",[79,3794,3414],{"class":243},[79,3796,3436],{"class":239},[79,3798,3799],{"class":81,"line":462},[79,3800,3801],{"class":239},"}\n",[79,3803,3804],{"class":81,"line":474},[79,3805,3806],{"class":2440},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[79,3808,3809,3811,3813],{"class":81,"line":480},[79,3810,3663],{"class":239},[79,3812,3666],{"class":243},[79,3814,3815],{"class":239}," score\n",[79,3817,3818,3820,3822,3825,3827],{"class":81,"line":486},[79,3819,1329],{"class":243},[79,3821,3770],{"class":239},[79,3823,3824],{"class":243},"\u003C=",[79,3826,3775],{"class":96},[79,3828,253],{"class":239},[79,3830,3831],{"class":81,"line":491},[79,3832,3782],{"class":239},[79,3834,3835,3837,3839,3842,3844],{"class":81,"line":497},[79,3836,3787],{"class":239},[79,3838,3666],{"class":243},[79,3840,3841],{"class":89},"\"小于等于600\"",[79,3843,3414],{"class":243},[79,3845,3436],{"class":239},[79,3847,3848],{"class":81,"line":503},[79,3849,3801],{"class":239},[79,3851,3852],{"class":81,"line":509},[79,3853,3854],{"class":243},"else\n",[79,3856,3857],{"class":81,"line":514},[79,3858,3782],{"class":239},[79,3860,3861,3863,3865,3868,3870],{"class":81,"line":520},[79,3862,3787],{"class":239},[79,3864,3666],{"class":243},[79,3866,3867],{"class":89},"\"大于600\"",[79,3869,3666],{"class":243},[79,3871,3436],{"class":239},[79,3873,3874],{"class":81,"line":526},[79,3875,3801],{"class":239},[79,3877,3878],{"class":81,"line":532},[79,3879,3880],{"class":2440},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[79,3882,3883,3885,3888,3890,3892,3895,3897,3899],{"class":81,"line":537},[79,3884,1329],{"class":243},[79,3886,3887],{"class":239}," (",[79,3889,1030],{"class":96},[79,3891,392],{"class":243},[79,3893,3894],{"class":239},"num",[79,3896,392],{"class":243},[79,3898,2686],{"class":96},[79,3900,253],{"class":239},[79,3902,3903],{"class":81,"line":543},[79,3904,3782],{"class":239},[79,3906,3907,3909,3911,3914,3916],{"class":81,"line":549},[79,3908,3787],{"class":239},[79,3910,3414],{"class":243},[79,3912,3913],{"class":89},"\"小于100\"",[79,3915,3414],{"class":243},[79,3917,3436],{"class":239},[79,3919,3920],{"class":81,"line":555},[79,3921,3801],{"class":239},[79,3923,3924,3927,3930,3933,3936,3938,3941,3943,3945,3948],{"class":81,"line":561},[79,3925,3926],{"class":243},"else",[79,3928,3929],{"class":243}," if",[79,3931,3932],{"class":239}," (nmu",[79,3934,3935],{"class":243},">=",[79,3937,2686],{"class":96},[79,3939,3940],{"class":243},"&&",[79,3942,3894],{"class":239},[79,3944,392],{"class":243},[79,3946,3947],{"class":96},"200",[79,3949,253],{"class":239},[79,3951,3952],{"class":81,"line":567},[79,3953,3782],{"class":239},[79,3955,3956,3958,3960,3963,3965,3967],{"class":81,"line":573},[79,3957,3787],{"class":239},[79,3959,3414],{"class":243},[79,3961,3962],{"class":89},"\"不小于100且小于200\"",[79,3964,3414],{"class":243},[79,3966,3479],{"class":239},[79,3968,3969],{"class":2440}," \u002F\u002F可以无限else if,python中是elif：\n",[79,3971,3972],{"class":81,"line":579},[79,3973,3801],{"class":239},[79,3975,3976],{"class":81,"line":584},[79,3977,3854],{"class":243},[79,3979,3980],{"class":81,"line":590},[79,3981,3782],{"class":239},[79,3983,3984,3986,3988,3991,3993],{"class":81,"line":596},[79,3985,3787],{"class":239},[79,3987,3414],{"class":243},[79,3989,3990],{"class":89},"\"不小于200\"",[79,3992,3414],{"class":243},[79,3994,3436],{"class":239},[79,3996,3997],{"class":81,"line":602},[79,3998,3801],{"class":239},[79,4000,4001],{"class":81,"line":608},[79,4002,4003],{"class":2440},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[26,4005,4006],{"start":167},[29,4007,4008],{},"三目运算符",[51,4010,4012],{"className":2376,"code":4011,"language":2378,"meta":57,"style":57},"\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",[59,4013,4014,4019,4024,4050,4072,4089,4094,4117,4132],{"__ignoreMap":57},[79,4015,4016],{"class":81,"line":82},[79,4017,4018],{"class":2440},"\u002F\u002F创建三个变量a,b,c\n",[79,4020,4021],{"class":81,"line":167},[79,4022,4023],{"class":2440},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[79,4025,4026,4028,4030,4032,4034,4037,4039,4041,4044,4046,4048],{"class":81,"line":178},[79,4027,2390],{"class":243},[79,4029,3635],{"class":239},[79,4031,244],{"class":243},[79,4033,3073],{"class":96},[79,4035,4036],{"class":239},",b",[79,4038,244],{"class":243},[79,4040,2820],{"class":96},[79,4042,4043],{"class":239},",c",[79,4045,244],{"class":243},[79,4047,1030],{"class":96},[79,4049,3531],{"class":239},[79,4051,4052,4054,4056,4059,4061,4063,4065,4067,4069],{"class":81,"line":457},[79,4053,2663],{"class":239},[79,4055,244],{"class":243},[79,4057,4058],{"class":239},"(a",[79,4060,3330],{"class":243},[79,4062,2638],{"class":239},[79,4064,3356],{"class":243},[79,4066,2614],{"class":239},[79,4068,3232],{"class":243},[79,4070,4071],{"class":239},"b)\n",[79,4073,4074,4076,4078,4081,4083,4085,4087],{"class":81,"line":462},[79,4075,3606],{"class":239},[79,4077,3414],{"class":243},[79,4079,4080],{"class":89},"\"c=\"",[79,4082,3414],{"class":243},[79,4084,2663],{"class":239},[79,4086,3414],{"class":243},[79,4088,3436],{"class":239},[79,4090,4091],{"class":81,"line":474},[79,4092,4093],{"class":2440},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[79,4095,4096,4098,4100,4102,4104,4106,4108,4111,4113,4115],{"class":81,"line":480},[79,4097,4058],{"class":239},[79,4099,3330],{"class":243},[79,4101,2638],{"class":239},[79,4103,3356],{"class":243},[79,4105,2614],{"class":239},[79,4107,3232],{"class":243},[79,4109,4110],{"class":239},"b)",[79,4112,244],{"class":243},[79,4114,2686],{"class":96},[79,4116,3531],{"class":239},[79,4118,4119,4121,4123,4125,4127,4129],{"class":81,"line":486},[79,4120,3606],{"class":239},[79,4122,3414],{"class":243},[79,4124,2614],{"class":239},[79,4126,3414],{"class":243},[79,4128,3479],{"class":239},[79,4130,4131],{"class":2440}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[79,4133,4134,4136,4138,4140,4142,4144],{"class":81,"line":491},[79,4135,3606],{"class":239},[79,4137,3414],{"class":243},[79,4139,2638],{"class":239},[79,4141,3414],{"class":243},[79,4143,3479],{"class":239},[79,4145,4146],{"class":2440}," \u002F\u002F10   a>b,b还是原值\n",[26,4148,4149],{"start":178},[29,4150,4151],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[51,4153,4155],{"className":2376,"code":4154,"language":2378,"meta":57,"style":57},"\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",[59,4156,4157,4162,4170,4183,4192,4196,4210,4223,4233,4241,4246,4271,4292,4314,4335,4357,4378,4398,4403],{"__ignoreMap":57},[79,4158,4159],{"class":81,"line":82},[79,4160,4161],{"class":2440},"\u002F\u002F案例-电影打分\n",[79,4163,4164,4167],{"class":81,"line":167},[79,4165,4166],{"class":243},"#include",[79,4168,4169],{"class":89},"\u003Ciostream>\n",[79,4171,4172,4175,4178,4181],{"class":81,"line":178},[79,4173,4174],{"class":243},"using",[79,4176,4177],{"class":243}," namespace",[79,4179,4180],{"class":85}," std",[79,4182,3531],{"class":239},[79,4184,4185,4187,4189],{"class":81,"line":457},[79,4186,2390],{"class":243},[79,4188,893],{"class":85},[79,4190,4191],{"class":239},"()\n",[79,4193,4194],{"class":81,"line":462},[79,4195,3782],{"class":239},[79,4197,4198,4201,4204,4206,4208],{"class":81,"line":474},[79,4199,4200],{"class":243},"    int",[79,4202,4203],{"class":239}," score",[79,4205,244],{"class":243},[79,4207,1030],{"class":96},[79,4209,3531],{"class":239},[79,4211,4212,4214,4216,4219,4221],{"class":81,"line":480},[79,4213,3787],{"class":239},[79,4215,3414],{"class":243},[79,4217,4218],{"class":89},"\"电影打分：\"",[79,4220,3414],{"class":243},[79,4222,3436],{"class":239},[79,4224,4225,4228,4230],{"class":81,"line":486},[79,4226,4227],{"class":239},"    cin",[79,4229,3666],{"class":243},[79,4231,4232],{"class":239},"score;\n",[79,4234,4235,4238],{"class":81,"line":491},[79,4236,4237],{"class":243},"    switch",[79,4239,4240],{"class":239},"(score)\n",[79,4242,4243],{"class":81,"line":497},[79,4244,4245],{"class":239},"    {\n",[79,4247,4248,4251,4254,4257,4259,4262,4264,4266,4269],{"class":81,"line":503},[79,4249,4250],{"class":243},"        case",[79,4252,4253],{"class":96}," 10",[79,4255,4256],{"class":239},":cout",[79,4258,3414],{"class":243},[79,4260,4261],{"class":89},"\"经典\"",[79,4263,3414],{"class":243},[79,4265,3479],{"class":239},[79,4267,4268],{"class":243},"break",[79,4270,3531],{"class":239},[79,4272,4273,4275,4278,4280,4282,4284,4286,4288,4290],{"class":81,"line":509},[79,4274,4250],{"class":243},[79,4276,4277],{"class":96}," 9",[79,4279,4256],{"class":239},[79,4281,3414],{"class":243},[79,4283,4261],{"class":89},[79,4285,3414],{"class":243},[79,4287,3479],{"class":239},[79,4289,4268],{"class":243},[79,4291,3531],{"class":239},[79,4293,4294,4296,4299,4301,4303,4306,4308,4310,4312],{"class":81,"line":514},[79,4295,4250],{"class":243},[79,4297,4298],{"class":96}," 8",[79,4300,4256],{"class":239},[79,4302,3414],{"class":243},[79,4304,4305],{"class":89},"\"非常好\"",[79,4307,3414],{"class":243},[79,4309,3479],{"class":239},[79,4311,4268],{"class":243},[79,4313,3531],{"class":239},[79,4315,4316,4318,4321,4323,4325,4327,4329,4331,4333],{"class":81,"line":520},[79,4317,4250],{"class":243},[79,4319,4320],{"class":96}," 7",[79,4322,4256],{"class":239},[79,4324,3414],{"class":243},[79,4326,4305],{"class":89},[79,4328,3414],{"class":243},[79,4330,3479],{"class":239},[79,4332,4268],{"class":243},[79,4334,3531],{"class":239},[79,4336,4337,4339,4342,4344,4346,4349,4351,4353,4355],{"class":81,"line":526},[79,4338,4250],{"class":243},[79,4340,4341],{"class":96}," 6",[79,4343,4256],{"class":239},[79,4345,3414],{"class":243},[79,4347,4348],{"class":89},"\"一般\"",[79,4350,3414],{"class":243},[79,4352,3479],{"class":239},[79,4354,4268],{"class":243},[79,4356,3531],{"class":239},[79,4358,4359,4361,4364,4366,4368,4370,4372,4374,4376],{"class":81,"line":532},[79,4360,4250],{"class":243},[79,4362,4363],{"class":96}," 5",[79,4365,4256],{"class":239},[79,4367,3414],{"class":243},[79,4369,4348],{"class":89},[79,4371,3414],{"class":243},[79,4373,3479],{"class":239},[79,4375,4268],{"class":243},[79,4377,3531],{"class":239},[79,4379,4380,4383,4385,4387,4390,4392,4394,4396],{"class":81,"line":537},[79,4381,4382],{"class":243},"        default",[79,4384,4256],{"class":239},[79,4386,3414],{"class":243},[79,4388,4389],{"class":89},"\"烂片\"",[79,4391,3414],{"class":243},[79,4393,3479],{"class":239},[79,4395,4268],{"class":243},[79,4397,3531],{"class":239},[79,4399,4400],{"class":81,"line":543},[79,4401,4402],{"class":239},"    }\n",[79,4404,4405],{"class":81,"line":549},[79,4406,3801],{"class":239},[19,4408,4409],{},"if和switch区别：",[3377,4411,4412,4415],{},[29,4413,4414],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[29,4416,4417],{},"switch优点：结构清晰，执行效率高",[265,4419,4421],{"id":4420},"_162循环结构","1.6.2循环结构",[26,4423,4424],{},[29,4425,4426],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[51,4428,4430],{"className":2376,"code":4429,"language":2378,"meta":57,"style":57},"\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",[59,4431,4432,4437,4445,4449,4462,4476,4480,4500,4510,4514,4526],{"__ignoreMap":57},[79,4433,4434],{"class":81,"line":82},[79,4435,4436],{"class":2440},"\u002F\u002F打印0-9数字\n",[79,4438,4439,4441,4443],{"class":81,"line":167},[79,4440,2390],{"class":243},[79,4442,893],{"class":85},[79,4444,4191],{"class":239},[79,4446,4447],{"class":81,"line":178},[79,4448,3782],{"class":239},[79,4450,4451,4453,4456,4458,4460],{"class":81,"line":457},[79,4452,4200],{"class":243},[79,4454,4455],{"class":239}," num",[79,4457,244],{"class":243},[79,4459,1030],{"class":96},[79,4461,3531],{"class":239},[79,4463,4464,4467,4470,4472,4474],{"class":81,"line":462},[79,4465,4466],{"class":243},"    while",[79,4468,4469],{"class":239},"(num",[79,4471,392],{"class":243},[79,4473,2820],{"class":96},[79,4475,253],{"class":239},[79,4477,4478],{"class":81,"line":474},[79,4479,4245],{"class":239},[79,4481,4482,4485,4488,4490,4492,4494,4497],{"class":81,"line":480},[79,4483,4484],{"class":85},"       std",[79,4486,4487],{"class":239},"::cout",[79,4489,3414],{"class":243},[79,4491,3894],{"class":239},[79,4493,3414],{"class":243},[79,4495,4496],{"class":85},"std",[79,4498,4499],{"class":239},"::endl;\n",[79,4501,4502,4505,4508],{"class":81,"line":486},[79,4503,4504],{"class":239},"        num",[79,4506,4507],{"class":243},"++",[79,4509,3531],{"class":239},[79,4511,4512],{"class":81,"line":491},[79,4513,4402],{"class":239},[79,4515,4516,4519,4521,4524],{"class":81,"line":497},[79,4517,4518],{"class":85},"    system",[79,4520,685],{"class":239},[79,4522,4523],{"class":89},"\"pause\"",[79,4525,253],{"class":239},[79,4527,4528],{"class":81,"line":503},[79,4529,3801],{"class":239},[19,4531,4532],{},"注意：写好循环条件，避免死循环情况",[51,4534,4536],{"className":2376,"code":4535,"language":2378,"meta":57,"style":57},"\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",[59,4537,4538,4543,4550,4557,4567,4575,4579,4584,4611,4615,4620,4628,4655,4660,4665,4678,4688,4692,4702,4707,4719,4724,4738,4743,4758,4762,4775,4779,4784,4788,4801,4808,4812,4817,4822,4826],{"__ignoreMap":57},[79,4539,4540],{"class":81,"line":82},[79,4541,4542],{"class":2440},"\u002F\u002F循环结构-猜数字\n",[79,4544,4545,4547],{"class":81,"line":167},[79,4546,4166],{"class":243},[79,4548,4549],{"class":89}," \u003Ciostream>\n",[79,4551,4552,4554],{"class":81,"line":178},[79,4553,4166],{"class":243},[79,4555,4556],{"class":89}," \u003Cctime>\n",[79,4558,4559,4561,4563,4565],{"class":81,"line":457},[79,4560,4174],{"class":243},[79,4562,4177],{"class":243},[79,4564,4180],{"class":85},[79,4566,3531],{"class":239},[79,4568,4569,4571,4573],{"class":81,"line":462},[79,4570,2390],{"class":243},[79,4572,893],{"class":85},[79,4574,4191],{"class":239},[79,4576,4577],{"class":81,"line":474},[79,4578,3782],{"class":239},[79,4580,4581],{"class":81,"line":480},[79,4582,4583],{"class":2440},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[79,4585,4586,4589,4592,4595,4598,4600,4603,4605,4608],{"class":81,"line":486},[79,4587,4588],{"class":85},"    srand",[79,4590,4591],{"class":239},"((",[79,4593,4594],{"class":243},"unsigned",[79,4596,4597],{"class":243}," int",[79,4599,2803],{"class":239},[79,4601,4602],{"class":85},"time",[79,4604,685],{"class":239},[79,4606,4607],{"class":96},"NULL",[79,4609,4610],{"class":239},"));\n",[79,4612,4613],{"class":81,"line":491},[79,4614,454],{"emptyLinePlaceholder":453},[79,4616,4617],{"class":81,"line":497},[79,4618,4619],{"class":2440},"    \u002F\u002F1.系统生成随机数\n",[79,4621,4622,4625],{"class":81,"line":503},[79,4623,4624],{"class":2440},"    \u002F\u002Frand()%100",[79,4626,4627],{"class":2440}," \u002F\u002F生成0-99的随机数\n",[79,4629,4630,4632,4634,4636,4639,4642,4644,4646,4648,4650,4652],{"class":81,"line":509},[79,4631,4200],{"class":243},[79,4633,4455],{"class":239},[79,4635,244],{"class":243},[79,4637,4638],{"class":85},"rand",[79,4640,4641],{"class":239},"()",[79,4643,1137],{"class":243},[79,4645,2686],{"class":96},[79,4647,2855],{"class":243},[79,4649,1072],{"class":96},[79,4651,2437],{"class":239},[79,4653,4654],{"class":2440}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[79,4656,4657],{"class":81,"line":514},[79,4658,4659],{"class":2440},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[79,4661,4662],{"class":81,"line":520},[79,4663,4664],{"class":2440},"    \u002F\u002F2.玩家猜测\n",[79,4666,4667,4669,4672,4674,4676],{"class":81,"line":526},[79,4668,4200],{"class":243},[79,4670,4671],{"class":239}," val",[79,4673,244],{"class":243},[79,4675,1030],{"class":96},[79,4677,3531],{"class":239},[79,4679,4680,4682,4684,4686],{"class":81,"line":532},[79,4681,4466],{"class":243},[79,4683,3887],{"class":239},[79,4685,1072],{"class":96},[79,4687,253],{"class":239},[79,4689,4690],{"class":81,"line":537},[79,4691,4245],{"class":239},[79,4693,4694,4697,4699],{"class":81,"line":543},[79,4695,4696],{"class":239},"        cin",[79,4698,3666],{"class":243},[79,4700,4701],{"class":239},"val;\n",[79,4703,4704],{"class":81,"line":549},[79,4705,4706],{"class":2440},"        \u002F\u002F3.判断玩家猜测\n",[79,4708,4709,4711,4714,4716],{"class":81,"line":555},[79,4710,1132],{"class":243},[79,4712,4713],{"class":239},"(val",[79,4715,392],{"class":243},[79,4717,4718],{"class":239},"num) \n",[79,4720,4721],{"class":81,"line":561},[79,4722,4723],{"class":239},"        {\n",[79,4725,4726,4729,4731,4734,4736],{"class":81,"line":567},[79,4727,4728],{"class":239},"            cout",[79,4730,3414],{"class":243},[79,4732,4733],{"class":89},"\"猜小了！\"",[79,4735,3414],{"class":243},[79,4737,3436],{"class":239},[79,4739,4740],{"class":81,"line":573},[79,4741,4742],{"class":239},"        }\n",[79,4744,4745,4748,4750,4753,4755],{"class":81,"line":579},[79,4746,4747],{"class":243},"        else",[79,4749,3929],{"class":243},[79,4751,4752],{"class":239}," (val",[79,4754,3330],{"class":243},[79,4756,4757],{"class":239},"num)\n",[79,4759,4760],{"class":81,"line":584},[79,4761,4723],{"class":239},[79,4763,4764,4766,4768,4771,4773],{"class":81,"line":590},[79,4765,4728],{"class":239},[79,4767,3414],{"class":243},[79,4769,4770],{"class":89},"\"猜大了！\"",[79,4772,3414],{"class":243},[79,4774,3436],{"class":239},[79,4776,4777],{"class":81,"line":596},[79,4778,4742],{"class":239},[79,4780,4781],{"class":81,"line":602},[79,4782,4783],{"class":243},"        else\n",[79,4785,4786],{"class":81,"line":608},[79,4787,4723],{"class":239},[79,4789,4790,4792,4794,4797,4799],{"class":81,"line":614},[79,4791,4728],{"class":239},[79,4793,3414],{"class":243},[79,4795,4796],{"class":89},"\"猜对了！\"",[79,4798,3414],{"class":243},[79,4800,3436],{"class":239},[79,4802,4803,4806],{"class":81,"line":620},[79,4804,4805],{"class":243},"            break",[79,4807,3531],{"class":239},[79,4809,4810],{"class":81,"line":625},[79,4811,4742],{"class":239},[79,4813,4814],{"class":81,"line":630},[79,4815,4816],{"class":2440},"        \u002F\u002F猜对 退出游戏\n",[79,4818,4819],{"class":81,"line":648},[79,4820,4821],{"class":2440},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[79,4823,4824],{"class":81,"line":659},[79,4825,4402],{"class":239},[79,4827,4828],{"class":81,"line":676},[79,4829,3801],{"class":239},[26,4831,4832],{"start":167},[29,4833,4834,4835,4838],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[2528,4836,4837],{},"do...while会先执行一次循环语句","，在判断循环语句",[51,4840,4842],{"className":2376,"code":4841,"language":2378,"meta":57,"style":57},"\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",[59,4843,4844,4849,4857,4861,4873,4881,4885,4902,4909,4913,4926,4936],{"__ignoreMap":57},[79,4845,4846],{"class":81,"line":82},[79,4847,4848],{"class":2440},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[79,4850,4851,4853,4855],{"class":81,"line":167},[79,4852,2390],{"class":243},[79,4854,893],{"class":85},[79,4856,4191],{"class":239},[79,4858,4859],{"class":81,"line":178},[79,4860,3782],{"class":239},[79,4862,4863,4865,4867,4869,4871],{"class":81,"line":457},[79,4864,4200],{"class":243},[79,4866,4455],{"class":239},[79,4868,244],{"class":243},[79,4870,1030],{"class":96},[79,4872,3531],{"class":239},[79,4874,4875,4878],{"class":81,"line":462},[79,4876,4877],{"class":243},"    do",[79,4879,4880],{"class":239}," \n",[79,4882,4883],{"class":81,"line":474},[79,4884,4245],{"class":239},[79,4886,4887,4890,4892,4894,4896,4898,4900],{"class":81,"line":480},[79,4888,4889],{"class":85},"        std",[79,4891,4487],{"class":239},[79,4893,3414],{"class":243},[79,4895,3894],{"class":239},[79,4897,3414],{"class":243},[79,4899,4496],{"class":85},[79,4901,4499],{"class":239},[79,4903,4904,4906],{"class":81,"line":486},[79,4905,4504],{"class":239},[79,4907,4908],{"class":243},"++\n",[79,4910,4911],{"class":81,"line":491},[79,4912,4402],{"class":239},[79,4914,4915,4917,4919,4921,4923],{"class":81,"line":497},[79,4916,4466],{"class":243},[79,4918,4469],{"class":239},[79,4920,392],{"class":243},[79,4922,2820],{"class":96},[79,4924,4925],{"class":239},");\n",[79,4927,4928,4930,4932,4934],{"class":81,"line":503},[79,4929,4518],{"class":85},[79,4931,685],{"class":239},[79,4933,4523],{"class":89},[79,4935,4925],{"class":239},[79,4937,4938],{"class":81,"line":509},[79,4939,3801],{"class":239},[19,4941,4942],{},"案例-水仙花数",[19,4944,4945],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4947,4948],{},"例如：1^3+5^3+3^3=153",[19,4950,4951],{},"请用do...while语句，求出所有3位数的水仙花数",[51,4953,4955],{"className":2376,"code":4954,"language":2378,"meta":57,"style":57},"#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",[59,4956,4957,4963,4973,4981,4985,4990,5002,5008,5012,5017,5033,5049,5065,5080,5099,5114,5162,5166,5178,5182,5190,5194,5208],{"__ignoreMap":57},[79,4958,4959,4961],{"class":81,"line":82},[79,4960,4166],{"class":243},[79,4962,4549],{"class":89},[79,4964,4965,4967,4969,4971],{"class":81,"line":167},[79,4966,4174],{"class":243},[79,4968,4177],{"class":243},[79,4970,4180],{"class":85},[79,4972,3531],{"class":239},[79,4974,4975,4977,4979],{"class":81,"line":178},[79,4976,2390],{"class":243},[79,4978,893],{"class":85},[79,4980,4191],{"class":239},[79,4982,4983],{"class":81,"line":457},[79,4984,3782],{"class":239},[79,4986,4987],{"class":81,"line":462},[79,4988,4989],{"class":2440},"    \u002F\u002F1.先打印所有三位数字\n",[79,4991,4992,4994,4996,4998,5000],{"class":81,"line":474},[79,4993,4200],{"class":243},[79,4995,4455],{"class":239},[79,4997,244],{"class":243},[79,4999,2686],{"class":96},[79,5001,3531],{"class":239},[79,5003,5004,5006],{"class":81,"line":480},[79,5005,4877],{"class":243},[79,5007,4880],{"class":239},[79,5009,5010],{"class":81,"line":486},[79,5011,4245],{"class":239},[79,5013,5014],{"class":81,"line":491},[79,5015,5016],{"class":2440},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[79,5018,5019,5022,5024,5026,5028,5030],{"class":81,"line":497},[79,5020,5021],{"class":243},"        int",[79,5023,3635],{"class":239},[79,5025,244],{"class":243},[79,5027,1030],{"class":96},[79,5029,2437],{"class":239},[79,5031,5032],{"class":2440}," \u002F\u002F个位\n",[79,5034,5035,5037,5040,5042,5044,5046],{"class":81,"line":503},[79,5036,5021],{"class":243},[79,5038,5039],{"class":239}," b",[79,5041,244],{"class":243},[79,5043,1030],{"class":96},[79,5045,2437],{"class":239},[79,5047,5048],{"class":2440}," \u002F\u002F十位\n",[79,5050,5051,5053,5056,5058,5060,5062],{"class":81,"line":509},[79,5052,5021],{"class":243},[79,5054,5055],{"class":239}," c",[79,5057,244],{"class":243},[79,5059,1030],{"class":96},[79,5061,2437],{"class":239},[79,5063,5064],{"class":2440}," \u002F\u002F百位\n",[79,5066,5067,5070,5072,5074,5076,5078],{"class":81,"line":514},[79,5068,5069],{"class":239},"        a",[79,5071,244],{"class":243},[79,5073,3894],{"class":239},[79,5075,1137],{"class":243},[79,5077,2820],{"class":96},[79,5079,3531],{"class":239},[79,5081,5082,5085,5087,5089,5091,5093,5095,5097],{"class":81,"line":520},[79,5083,5084],{"class":239},"        b",[79,5086,244],{"class":243},[79,5088,3894],{"class":239},[79,5090,2957],{"class":243},[79,5092,2820],{"class":96},[79,5094,1137],{"class":243},[79,5096,2820],{"class":96},[79,5098,3531],{"class":239},[79,5100,5101,5104,5106,5108,5110,5112],{"class":81,"line":526},[79,5102,5103],{"class":239},"        c",[79,5105,244],{"class":243},[79,5107,3894],{"class":239},[79,5109,2957],{"class":243},[79,5111,2686],{"class":96},[79,5113,3531],{"class":239},[79,5115,5116,5118,5120,5122,5124,5126,5128,5130,5132,5134,5136,5138,5140,5142,5144,5146,5148,5150,5153,5156,5159],{"class":81,"line":532},[79,5117,1132],{"class":243},[79,5119,4058],{"class":239},[79,5121,2829],{"class":243},[79,5123,2614],{"class":239},[79,5125,2829],{"class":243},[79,5127,2614],{"class":239},[79,5129,2855],{"class":243},[79,5131,2638],{"class":239},[79,5133,2829],{"class":243},[79,5135,2638],{"class":239},[79,5137,2829],{"class":243},[79,5139,2638],{"class":239},[79,5141,2855],{"class":243},[79,5143,2663],{"class":239},[79,5145,2829],{"class":243},[79,5147,2663],{"class":239},[79,5149,2829],{"class":243},[79,5151,5152],{"class":239},"c ",[79,5154,5155],{"class":243},"==",[79,5157,5158],{"class":239}," num)",[79,5160,5161],{"class":2440}," \u002F\u002F如果是水仙花数，才打印\n",[79,5163,5164],{"class":81,"line":537},[79,5165,4723],{"class":239},[79,5167,5168,5170,5172,5174,5176],{"class":81,"line":543},[79,5169,4728],{"class":239},[79,5171,3414],{"class":243},[79,5173,3894],{"class":239},[79,5175,3414],{"class":243},[79,5177,3436],{"class":239},[79,5179,5180],{"class":81,"line":549},[79,5181,4742],{"class":239},[79,5183,5184,5186,5188],{"class":81,"line":555},[79,5185,4504],{"class":239},[79,5187,4507],{"class":243},[79,5189,3531],{"class":239},[79,5191,5192],{"class":81,"line":561},[79,5193,4402],{"class":239},[79,5195,5196,5198,5201,5203,5206],{"class":81,"line":567},[79,5197,4466],{"class":243},[79,5199,5200],{"class":239}," (num ",[79,5202,392],{"class":243},[79,5204,5205],{"class":96}," 1000",[79,5207,4925],{"class":239},[79,5209,5210],{"class":81,"line":573},[79,5211,3801],{"class":239},[26,5213,5214],{"start":178},[29,5215,5216],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[51,5218,5220],{"className":2376,"code":5219,"language":2378,"meta":57,"style":57},"\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",[59,5221,5222,5227,5255,5259,5271,5275,5280,5291,5298,5302,5315,5319,5326,5330,5342,5351],{"__ignoreMap":57},[79,5223,5224],{"class":81,"line":82},[79,5225,5226],{"class":2440},"\u002F\u002F从数字0-9打印\n",[79,5228,5229,5231,5233,5235,5238,5240,5242,5245,5247,5249,5251,5253],{"class":81,"line":167},[79,5230,1874],{"class":243},[79,5232,685],{"class":239},[79,5234,2390],{"class":243},[79,5236,5237],{"class":239}," i",[79,5239,244],{"class":243},[79,5241,1030],{"class":96},[79,5243,5244],{"class":239},";i",[79,5246,392],{"class":243},[79,5248,2820],{"class":96},[79,5250,5244],{"class":239},[79,5252,4507],{"class":243},[79,5254,253],{"class":239},[79,5256,5257],{"class":81,"line":178},[79,5258,3782],{"class":239},[79,5260,5261,5263,5265,5267,5269],{"class":81,"line":457},[79,5262,3787],{"class":239},[79,5264,3414],{"class":243},[79,5266,2815],{"class":239},[79,5268,3414],{"class":243},[79,5270,3436],{"class":239},[79,5272,5273],{"class":81,"line":462},[79,5274,3801],{"class":239},[79,5276,5277],{"class":81,"line":474},[79,5278,5279],{"class":2440},"\u002F\u002F上式可以进行拆分\n",[79,5281,5282,5284,5286,5288],{"class":81,"line":480},[79,5283,2390],{"class":243},[79,5285,5237],{"class":239},[79,5287,244],{"class":243},[79,5289,5290],{"class":96},"0\n",[79,5292,5293,5295],{"class":81,"line":486},[79,5294,1874],{"class":243},[79,5296,5297],{"class":239},"(;;;)\n",[79,5299,5300],{"class":81,"line":491},[79,5301,3782],{"class":239},[79,5303,5304,5306,5309,5311,5313],{"class":81,"line":497},[79,5305,662],{"class":243},[79,5307,5308],{"class":239},"(i",[79,5310,3935],{"class":243},[79,5312,2820],{"class":96},[79,5314,253],{"class":239},[79,5316,5317],{"class":81,"line":503},[79,5318,4245],{"class":239},[79,5320,5321,5324],{"class":81,"line":509},[79,5322,5323],{"class":243},"        break",[79,5325,3531],{"class":239},[79,5327,5328],{"class":81,"line":514},[79,5329,4402],{"class":239},[79,5331,5332,5334,5336,5338,5340],{"class":81,"line":520},[79,5333,3787],{"class":239},[79,5335,3414],{"class":243},[79,5337,2815],{"class":239},[79,5339,3414],{"class":243},[79,5341,3436],{"class":239},[79,5343,5344,5347,5349],{"class":81,"line":526},[79,5345,5346],{"class":239},"    i",[79,5348,4507],{"class":243},[79,5350,3531],{"class":239},[79,5352,5353],{"class":81,"line":532},[79,5354,3801],{"class":239},[19,5356,5357],{},"小练习",[51,5359,5361],{"className":2376,"code":5360,"language":2378,"meta":57,"style":57},"#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",[59,5362,5363,5369,5379,5387,5391,5396,5401,5428,5432,5437,5442,5483,5487,5500,5504,5508,5512,5524,5528,5532],{"__ignoreMap":57},[79,5364,5365,5367],{"class":81,"line":82},[79,5366,4166],{"class":243},[79,5368,4169],{"class":89},[79,5370,5371,5373,5375,5377],{"class":81,"line":167},[79,5372,4174],{"class":243},[79,5374,4177],{"class":243},[79,5376,4180],{"class":85},[79,5378,3531],{"class":239},[79,5380,5381,5383,5385],{"class":81,"line":178},[79,5382,2390],{"class":243},[79,5384,893],{"class":85},[79,5386,4191],{"class":239},[79,5388,5389],{"class":81,"line":457},[79,5390,3782],{"class":239},[79,5392,5393],{"class":81,"line":462},[79,5394,5395],{"class":2440},"    \u002F\u002F敲桌子案例\n",[79,5397,5398],{"class":81,"line":474},[79,5399,5400],{"class":2440},"    \u002F\u002F1.先输出1-100的数字\n",[79,5402,5403,5405,5407,5409,5411,5413,5415,5418,5420,5422,5424,5426],{"class":81,"line":480},[79,5404,949],{"class":243},[79,5406,685],{"class":239},[79,5408,2390],{"class":243},[79,5410,5237],{"class":239},[79,5412,244],{"class":243},[79,5414,1072],{"class":96},[79,5416,5417],{"class":239},"; i",[79,5419,3824],{"class":243},[79,5421,2686],{"class":96},[79,5423,5417],{"class":239},[79,5425,4507],{"class":243},[79,5427,253],{"class":239},[79,5429,5430],{"class":81,"line":486},[79,5431,4245],{"class":239},[79,5433,5434],{"class":81,"line":491},[79,5435,5436],{"class":2440},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[79,5438,5439],{"class":81,"line":497},[79,5440,5441],{"class":2440},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[79,5443,5444,5446,5448,5450,5452,5454,5456,5459,5461,5463,5465,5467,5469,5471,5473,5475,5477,5479,5481],{"class":81,"line":503},[79,5445,1132],{"class":243},[79,5447,5308],{"class":239},[79,5449,1137],{"class":243},[79,5451,2743],{"class":96},[79,5453,5155],{"class":243},[79,5455,1030],{"class":96},[79,5457,5458],{"class":243}," ||",[79,5460,5237],{"class":239},[79,5462,1137],{"class":243},[79,5464,2820],{"class":96},[79,5466,5155],{"class":243},[79,5468,2743],{"class":96},[79,5470,5458],{"class":243},[79,5472,5237],{"class":239},[79,5474,2957],{"class":243},[79,5476,2820],{"class":96},[79,5478,5155],{"class":243},[79,5480,2743],{"class":96},[79,5482,253],{"class":239},[79,5484,5485],{"class":81,"line":509},[79,5486,4723],{"class":239},[79,5488,5489,5491,5493,5496,5498],{"class":81,"line":514},[79,5490,4728],{"class":239},[79,5492,3414],{"class":243},[79,5494,5495],{"class":89},"\"敲桌子\"",[79,5497,3414],{"class":243},[79,5499,3436],{"class":239},[79,5501,5502],{"class":81,"line":520},[79,5503,4742],{"class":239},[79,5505,5506],{"class":81,"line":526},[79,5507,4783],{"class":243},[79,5509,5510],{"class":81,"line":532},[79,5511,4723],{"class":239},[79,5513,5514,5516,5518,5520,5522],{"class":81,"line":537},[79,5515,4728],{"class":239},[79,5517,3414],{"class":243},[79,5519,2815],{"class":239},[79,5521,3414],{"class":243},[79,5523,3436],{"class":239},[79,5525,5526],{"class":81,"line":543},[79,5527,4742],{"class":239},[79,5529,5530],{"class":81,"line":549},[79,5531,4402],{"class":239},[79,5533,5534],{"class":81,"line":555},[79,5535,3801],{"class":239},[19,5537,5538],{},"嵌套实现星图",[51,5540,5542],{"className":2376,"code":5541,"language":2378,"meta":57,"style":57},"#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",[59,5543,5544,5550,5560,5568,5572,5598,5602,5631,5635,5646,5650,5659,5663],{"__ignoreMap":57},[79,5545,5546,5548],{"class":81,"line":82},[79,5547,4166],{"class":243},[79,5549,4169],{"class":89},[79,5551,5552,5554,5556,5558],{"class":81,"line":167},[79,5553,4174],{"class":243},[79,5555,4177],{"class":243},[79,5557,4180],{"class":85},[79,5559,3531],{"class":239},[79,5561,5562,5564,5566],{"class":81,"line":178},[79,5563,2390],{"class":243},[79,5565,893],{"class":85},[79,5567,4191],{"class":239},[79,5569,5570],{"class":81,"line":457},[79,5571,3782],{"class":239},[79,5573,5574,5576,5578,5580,5582,5584,5586,5588,5590,5592,5594,5596],{"class":81,"line":462},[79,5575,949],{"class":243},[79,5577,3887],{"class":239},[79,5579,2390],{"class":243},[79,5581,5237],{"class":239},[79,5583,244],{"class":243},[79,5585,1030],{"class":96},[79,5587,5244],{"class":239},[79,5589,392],{"class":243},[79,5591,2820],{"class":96},[79,5593,5244],{"class":239},[79,5595,4507],{"class":243},[79,5597,253],{"class":239},[79,5599,5600],{"class":81,"line":474},[79,5601,4245],{"class":239},[79,5603,5604,5607,5609,5611,5614,5616,5618,5621,5623,5625,5627,5629],{"class":81,"line":480},[79,5605,5606],{"class":243},"        for",[79,5608,3887],{"class":239},[79,5610,2390],{"class":243},[79,5612,5613],{"class":239}," j",[79,5615,244],{"class":243},[79,5617,1030],{"class":96},[79,5619,5620],{"class":239},";j",[79,5622,392],{"class":243},[79,5624,2820],{"class":96},[79,5626,5620],{"class":239},[79,5628,4507],{"class":243},[79,5630,253],{"class":239},[79,5632,5633],{"class":81,"line":486},[79,5634,4723],{"class":239},[79,5636,5637,5639,5641,5644],{"class":81,"line":491},[79,5638,4728],{"class":239},[79,5640,3414],{"class":243},[79,5642,5643],{"class":89},"\"*\"",[79,5645,3531],{"class":239},[79,5647,5648],{"class":81,"line":497},[79,5649,4742],{"class":239},[79,5651,5652,5655,5657],{"class":81,"line":503},[79,5653,5654],{"class":239},"        cout",[79,5656,3414],{"class":243},[79,5658,3436],{"class":239},[79,5660,5661],{"class":81,"line":509},[79,5662,4402],{"class":239},[79,5664,5665],{"class":81,"line":514},[79,5666,3801],{"class":239},[19,5668,5669],{},"乘法口诀表",[51,5671,5673],{"className":2376,"code":5672,"language":2378,"meta":57,"style":57},"#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",[59,5674,5675,5681,5691,5699,5703,5729,5733,5758,5762,5802,5806,5814,5818],{"__ignoreMap":57},[79,5676,5677,5679],{"class":81,"line":82},[79,5678,4166],{"class":243},[79,5680,4549],{"class":89},[79,5682,5683,5685,5687,5689],{"class":81,"line":167},[79,5684,4174],{"class":243},[79,5686,4177],{"class":243},[79,5688,4180],{"class":85},[79,5690,3531],{"class":239},[79,5692,5693,5695,5697],{"class":81,"line":178},[79,5694,2390],{"class":243},[79,5696,893],{"class":85},[79,5698,4191],{"class":239},[79,5700,5701],{"class":81,"line":457},[79,5702,3782],{"class":239},[79,5704,5705,5707,5709,5711,5713,5715,5717,5719,5721,5723,5725,5727],{"class":81,"line":462},[79,5706,949],{"class":243},[79,5708,685],{"class":239},[79,5710,2390],{"class":243},[79,5712,5237],{"class":239},[79,5714,244],{"class":243},[79,5716,1072],{"class":96},[79,5718,5244],{"class":239},[79,5720,392],{"class":243},[79,5722,2820],{"class":96},[79,5724,5244],{"class":239},[79,5726,4507],{"class":243},[79,5728,253],{"class":239},[79,5730,5731],{"class":81,"line":474},[79,5732,4245],{"class":239},[79,5734,5735,5737,5739,5741,5743,5745,5747,5749,5751,5754,5756],{"class":81,"line":480},[79,5736,5606],{"class":243},[79,5738,685],{"class":239},[79,5740,2390],{"class":243},[79,5742,5613],{"class":239},[79,5744,244],{"class":243},[79,5746,1072],{"class":96},[79,5748,5620],{"class":239},[79,5750,3824],{"class":243},[79,5752,5753],{"class":239},"i;j",[79,5755,4507],{"class":243},[79,5757,253],{"class":239},[79,5759,5760],{"class":81,"line":486},[79,5761,4723],{"class":239},[79,5763,5764,5766,5768,5770,5772,5774,5776,5778,5780,5783,5785,5787,5789,5791,5793,5796,5798,5800],{"class":81,"line":491},[79,5765,4728],{"class":239},[79,5767,3414],{"class":243},[79,5769,2841],{"class":239},[79,5771,3414],{"class":243},[79,5773,5643],{"class":89},[79,5775,3414],{"class":243},[79,5777,2815],{"class":239},[79,5779,3414],{"class":243},[79,5781,5782],{"class":89},"\"=\"",[79,5784,3414],{"class":243},[79,5786,2815],{"class":239},[79,5788,2829],{"class":243},[79,5790,2841],{"class":239},[79,5792,3414],{"class":243},[79,5794,5795],{"class":89},"'",[79,5797,3471],{"class":96},[79,5799,5795],{"class":89},[79,5801,3531],{"class":239},[79,5803,5804],{"class":81,"line":497},[79,5805,4742],{"class":239},[79,5807,5808,5810,5812],{"class":81,"line":503},[79,5809,5654],{"class":239},[79,5811,3414],{"class":243},[79,5813,3436],{"class":239},[79,5815,5816],{"class":81,"line":509},[79,5817,4402],{"class":239},[79,5819,5820],{"class":81,"line":514},[79,5821,3801],{"class":239},[265,5823,5825],{"id":5824},"_163跳出语句","1.6.3跳出语句",[26,5827,5828],{},[29,5829,5830],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5832,5833],{},"break使用时机：",[3377,5835,5836,5839,5842],{},[29,5837,5838],{},"出现在switch条件语句中，作用是终止case并跳出switch",[29,5840,5841],{},"出现在循环结构中，作用是跳出当前的循环结构",[29,5843,5844],{},"出现在嵌套循环中，跳出最近的内层循环语句",[26,5846,5847,5850],{"start":167},[29,5848,5849],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[29,5851,5852],{},"goto语句\n语法：goto 标记;",[19,5854,5855],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[51,5857,5859],{"className":2376,"code":5858,"language":2378,"meta":57,"style":57},"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",[59,5860,5861,5869,5873,5886,5896,5909,5922,5935,5942,5958],{"__ignoreMap":57},[79,5862,5863,5865,5867],{"class":81,"line":82},[79,5864,2390],{"class":243},[79,5866,893],{"class":85},[79,5868,4191],{"class":239},[79,5870,5871],{"class":81,"line":167},[79,5872,3782],{"class":239},[79,5874,5875,5877,5879,5882,5884],{"class":81,"line":178},[79,5876,3787],{"class":239},[79,5878,3414],{"class":243},[79,5880,5881],{"class":89},"\"1\"",[79,5883,3414],{"class":243},[79,5885,3436],{"class":239},[79,5887,5888,5891,5894],{"class":81,"line":457},[79,5889,5890],{"class":243},"    goto",[79,5892,5893],{"class":85}," FLAG",[79,5895,3531],{"class":239},[79,5897,5898,5900,5902,5905,5907],{"class":81,"line":462},[79,5899,3787],{"class":239},[79,5901,3414],{"class":243},[79,5903,5904],{"class":89},"\"2\"",[79,5906,3414],{"class":243},[79,5908,3436],{"class":239},[79,5910,5911,5913,5915,5918,5920],{"class":81,"line":474},[79,5912,3787],{"class":239},[79,5914,3414],{"class":243},[79,5916,5917],{"class":89},"\"3\"",[79,5919,3414],{"class":243},[79,5921,3436],{"class":239},[79,5923,5924,5926,5928,5931,5933],{"class":81,"line":480},[79,5925,3787],{"class":239},[79,5927,3414],{"class":243},[79,5929,5930],{"class":89},"\"4\"",[79,5932,3414],{"class":243},[79,5934,3436],{"class":239},[79,5936,5937,5940],{"class":81,"line":486},[79,5938,5939],{"class":85},"    FLAG",[79,5941,673],{"class":239},[79,5943,5944,5946,5948,5951,5953,5955],{"class":81,"line":491},[79,5945,3787],{"class":239},[79,5947,3414],{"class":243},[79,5949,5950],{"class":89},"\"5\"",[79,5952,3414],{"class":243},[79,5954,3479],{"class":239},[79,5956,5957],{"class":2440},"\u002F\u002F跳过了2,3,4,直接到5\n",[79,5959,5960],{"class":81,"line":497},[79,5961,3801],{"class":239},[14,5963,5965],{"id":5964},"_17数组","1.7数组",[265,5967,5969],{"id":5968},"_171一维数组","1.7.1一维数组",[26,5971,5972],{},[29,5973,5974],{},"一维数组定义方式",[2516,5976,5977,5987],{},[2519,5978,5979],{},[2522,5980,5981,5984],{},[2525,5982,5983],{},"方式",[2525,5985,5986],{},"注意事项",[2563,5988,5989,6003,6013],{},[2522,5990,5991,5997],{},[2568,5992,5993,5994,2437],{},"数据类型 数组名",[79,5995,5996],{},"数组长度",[2568,5998,5999,6000,6002],{},"这种方式是先定义再arr",[79,6001,2815],{},"赋值",[2522,6004,6005,6010],{},[2568,6006,5993,6007,6009],{},[79,6008,5996],{},"={值1,值2....};",[2568,6011,6012],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[2522,6014,6015,6019],{},[2568,6016,5993,6017,6009],{},[79,6018],{},[2568,6020,6021,6022,6024],{},"int arr",[79,6023],{},";这是不正确的，按照这样的方式定义必须有初始长度",[26,6026,6027],{"start":167},[29,6028,6029],{},"一维数组数组名\n用途：",[3377,6031,6032],{},[29,6033,6034],{},"1.可以统计整个数组在内存中的长度：",[51,6036,6038],{"className":2376,"code":6037,"language":2378,"meta":57,"style":57},"sizeof(arr);\nsizeof(arr[0]);\n",[59,6039,6040,6047],{"__ignoreMap":57},[79,6041,6042,6044],{"class":81,"line":82},[79,6043,2385],{"class":243},[79,6045,6046],{"class":239},"(arr);\n",[79,6048,6049,6051,6054,6056],{"class":81,"line":167},[79,6050,2385],{"class":243},[79,6052,6053],{"class":239},"(arr[",[79,6055,1030],{"class":96},[79,6057,6058],{"class":239},"]);\n",[3377,6060,6061],{},[29,6062,6063],{},"2.可以获取数组在内存中的首地址:",[51,6065,6067],{"className":2376,"code":6066,"language":2378,"meta":57,"style":57},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[59,6068,6069,6074,6087,6092],{"__ignoreMap":57},[79,6070,6071],{"class":81,"line":82},[79,6072,6073],{"class":2440},"\u002F\u002F查看16进制的首地址\n",[79,6075,6076,6078,6080,6083,6085],{"class":81,"line":167},[79,6077,3606],{"class":239},[79,6079,3414],{"class":243},[79,6081,6082],{"class":239},"arr",[79,6084,3414],{"class":243},[79,6086,3436],{"class":239},[79,6088,6089],{"class":81,"line":178},[79,6090,6091],{"class":2440},"\u002F\u002F看10进制数\n",[79,6093,6094,6096,6098,6100,6102,6104,6106,6109,6111,6113,6115],{"class":81,"line":457},[79,6095,3606],{"class":239},[79,6097,3414],{"class":243},[79,6099,685],{"class":239},[79,6101,2390],{"class":243},[79,6103,2803],{"class":239},[79,6105,2727],{"class":243},[79,6107,6108],{"class":239},"arr[",[79,6110,1030],{"class":96},[79,6112,3311],{"class":239},[79,6114,3414],{"class":243},[79,6116,3436],{"class":239},[19,6118,6119],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[3377,6121,6122],{},[29,6123,6124],{},"1️⃣五只小猪称体重",[51,6126,6128],{"className":2376,"code":6127,"language":2378,"meta":57,"style":57},"#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",[59,6129,6130,6136,6146,6154,6158,6198,6211,6237,6241,6253,6257,6267,6271,6275,6288,6296],{"__ignoreMap":57},[79,6131,6132,6134],{"class":81,"line":82},[79,6133,4166],{"class":243},[79,6135,4169],{"class":89},[79,6137,6138,6140,6142,6144],{"class":81,"line":167},[79,6139,4174],{"class":243},[79,6141,4177],{"class":243},[79,6143,4180],{"class":85},[79,6145,3531],{"class":239},[79,6147,6148,6150,6152],{"class":81,"line":178},[79,6149,2390],{"class":243},[79,6151,893],{"class":85},[79,6153,4191],{"class":239},[79,6155,6156],{"class":81,"line":457},[79,6157,3782],{"class":239},[79,6159,6160,6162,6165,6167,6169,6171,6173,6176,6178,6181,6183,6185,6187,6190,6192,6195],{"class":81,"line":462},[79,6161,4200],{"class":243},[79,6163,6164],{"class":239}," arr[",[79,6166,2694],{"class":96},[79,6168,3311],{"class":239},[79,6170,244],{"class":243},[79,6172,694],{"class":239},[79,6174,6175],{"class":96},"300",[79,6177,2752],{"class":239},[79,6179,6180],{"class":96},"350",[79,6182,2752],{"class":239},[79,6184,3947],{"class":96},[79,6186,2752],{"class":239},[79,6188,6189],{"class":96},"400",[79,6191,2752],{"class":239},[79,6193,6194],{"class":96},"250",[79,6196,6197],{"class":239},"};\n",[79,6199,6200,6202,6205,6207,6209],{"class":81,"line":474},[79,6201,4200],{"class":243},[79,6203,6204],{"class":239}," tmp",[79,6206,244],{"class":243},[79,6208,1030],{"class":96},[79,6210,3531],{"class":239},[79,6212,6213,6215,6217,6219,6221,6223,6225,6227,6229,6231,6233,6235],{"class":81,"line":480},[79,6214,949],{"class":243},[79,6216,3887],{"class":239},[79,6218,2390],{"class":243},[79,6220,5237],{"class":239},[79,6222,244],{"class":243},[79,6224,1030],{"class":96},[79,6226,5244],{"class":239},[79,6228,392],{"class":243},[79,6230,2694],{"class":96},[79,6232,5244],{"class":239},[79,6234,4507],{"class":243},[79,6236,253],{"class":239},[79,6238,6239],{"class":81,"line":486},[79,6240,4245],{"class":239},[79,6242,6243,6245,6248,6250],{"class":81,"line":491},[79,6244,1132],{"class":243},[79,6246,6247],{"class":239},"(tmp",[79,6249,392],{"class":243},[79,6251,6252],{"class":239},"arr[i])\n",[79,6254,6255],{"class":81,"line":497},[79,6256,4723],{"class":239},[79,6258,6259,6262,6264],{"class":81,"line":503},[79,6260,6261],{"class":239},"            tmp",[79,6263,244],{"class":243},[79,6265,6266],{"class":239},"arr[i];\n",[79,6268,6269],{"class":81,"line":509},[79,6270,4742],{"class":239},[79,6272,6273],{"class":81,"line":514},[79,6274,4402],{"class":239},[79,6276,6277,6279,6281,6284,6286],{"class":81,"line":520},[79,6278,3787],{"class":239},[79,6280,3414],{"class":243},[79,6282,6283],{"class":239},"tmp",[79,6285,3414],{"class":243},[79,6287,3436],{"class":239},[79,6289,6290,6292,6294],{"class":81,"line":526},[79,6291,711],{"class":243},[79,6293,670],{"class":96},[79,6295,3531],{"class":239},[79,6297,6298],{"class":81,"line":532},[79,6299,3801],{"class":239},[3377,6301,6302],{},[29,6303,6304],{},"2️⃣数组元素逆置",[51,6306,6308],{"className":2376,"code":6307,"language":2378,"meta":57,"style":57},"\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",[59,6309,6310,6315,6321,6331,6339,6343,6378,6394,6426,6439,6444,6449,6461,6471,6481,6486,6495,6505,6510,6515,6542,6546,6562,6566,6577,6586],{"__ignoreMap":57},[79,6311,6312],{"class":81,"line":82},[79,6313,6314],{"class":2440},"\u002F\u002F元素逆置\n",[79,6316,6317,6319],{"class":81,"line":167},[79,6318,4166],{"class":243},[79,6320,4169],{"class":89},[79,6322,6323,6325,6327,6329],{"class":81,"line":178},[79,6324,4174],{"class":243},[79,6326,4177],{"class":243},[79,6328,4180],{"class":85},[79,6330,3531],{"class":239},[79,6332,6333,6335,6337],{"class":81,"line":457},[79,6334,2390],{"class":243},[79,6336,893],{"class":85},[79,6338,4191],{"class":239},[79,6340,6341],{"class":81,"line":462},[79,6342,3782],{"class":239},[79,6344,6345,6348,6350,6352,6354,6356,6358,6360,6362,6364,6366,6368,6370,6372,6374,6376],{"class":81,"line":474},[79,6346,6347],{"class":243},"   int",[79,6349,6164],{"class":239},[79,6351,2694],{"class":96},[79,6353,3311],{"class":239},[79,6355,244],{"class":243},[79,6357,694],{"class":239},[79,6359,1072],{"class":96},[79,6361,2752],{"class":239},[79,6363,1049],{"class":96},[79,6365,2752],{"class":239},[79,6367,1188],{"class":96},[79,6369,2752],{"class":239},[79,6371,2668],{"class":96},[79,6373,2752],{"class":239},[79,6375,2694],{"class":96},[79,6377,6197],{"class":239},[79,6379,6380,6382,6385,6387,6389,6391],{"class":81,"line":480},[79,6381,6347],{"class":243},[79,6383,6384],{"class":239}," start",[79,6386,244],{"class":243},[79,6388,1030],{"class":96},[79,6390,2437],{"class":239},[79,6392,6393],{"class":2440},"\u002F\u002F起始下标\n",[79,6395,6396,6398,6401,6404,6407,6410,6412,6414,6417,6419,6421,6423],{"class":81,"line":486},[79,6397,6347],{"class":243},[79,6399,6400],{"class":239}," end",[79,6402,6403],{"class":243},"=sizeof",[79,6405,6406],{"class":239},"(arr)",[79,6408,6409],{"class":243},"\u002Fsizeof",[79,6411,6053],{"class":239},[79,6413,1030],{"class":96},[79,6415,6416],{"class":239},"])",[79,6418,320],{"class":243},[79,6420,1072],{"class":96},[79,6422,2437],{"class":239},[79,6424,6425],{"class":2440},"\u002F\u002F结束下标\n",[79,6427,6428,6431,6434,6436],{"class":81,"line":491},[79,6429,6430],{"class":243},"   while",[79,6432,6433],{"class":239}," (start",[79,6435,392],{"class":243},[79,6437,6438],{"class":239},"end)\n",[79,6440,6441],{"class":81,"line":497},[79,6442,6443],{"class":239},"   {\n",[79,6445,6446],{"class":81,"line":503},[79,6447,6448],{"class":2440},"    \u002F\u002F实现元素互换代码\n",[79,6450,6451,6453,6456,6458],{"class":81,"line":509},[79,6452,4200],{"class":243},[79,6454,6455],{"class":239}," temp",[79,6457,244],{"class":243},[79,6459,6460],{"class":239},"arr[start];\n",[79,6462,6463,6466,6468],{"class":81,"line":514},[79,6464,6465],{"class":239},"    arr[start]",[79,6467,244],{"class":243},[79,6469,6470],{"class":239},"arr[end];\n",[79,6472,6473,6476,6478],{"class":81,"line":520},[79,6474,6475],{"class":239},"    arr[end]",[79,6477,244],{"class":243},[79,6479,6480],{"class":239},"temp;\n",[79,6482,6483],{"class":81,"line":526},[79,6484,6485],{"class":2440},"    \u002F\u002F下标更新\n",[79,6487,6488,6491,6493],{"class":81,"line":532},[79,6489,6490],{"class":239},"    start",[79,6492,4507],{"class":243},[79,6494,3531],{"class":239},[79,6496,6497,6500,6503],{"class":81,"line":537},[79,6498,6499],{"class":239},"    end",[79,6501,6502],{"class":243},"--",[79,6504,3531],{"class":239},[79,6506,6507],{"class":81,"line":543},[79,6508,6509],{"class":239},"   }\n",[79,6511,6512],{"class":81,"line":549},[79,6513,6514],{"class":2440},"   \u002F\u002F输出逆置后的数组\n",[79,6516,6517,6520,6522,6524,6526,6528,6530,6532,6534,6536,6538,6540],{"class":81,"line":555},[79,6518,6519],{"class":243},"   for",[79,6521,3887],{"class":239},[79,6523,2390],{"class":243},[79,6525,5237],{"class":239},[79,6527,244],{"class":243},[79,6529,1030],{"class":96},[79,6531,5244],{"class":239},[79,6533,392],{"class":243},[79,6535,2694],{"class":96},[79,6537,5244],{"class":239},[79,6539,4507],{"class":243},[79,6541,253],{"class":239},[79,6543,6544],{"class":81,"line":561},[79,6545,6443],{"class":239},[79,6547,6548,6550,6552,6555,6557,6560],{"class":81,"line":567},[79,6549,3787],{"class":239},[79,6551,3414],{"class":243},[79,6553,6554],{"class":239},"arr[i]",[79,6556,3414],{"class":243},[79,6558,6559],{"class":89},"\" \"",[79,6561,3531],{"class":239},[79,6563,6564],{"class":81,"line":573},[79,6565,6509],{"class":239},[79,6567,6568,6571,6573,6575],{"class":81,"line":579},[79,6569,6570],{"class":85},"   system",[79,6572,685],{"class":239},[79,6574,4523],{"class":89},[79,6576,4925],{"class":239},[79,6578,6579,6582,6584],{"class":81,"line":584},[79,6580,6581],{"class":243},"   return",[79,6583,670],{"class":96},[79,6585,3531],{"class":239},[79,6587,6588],{"class":81,"line":590},[79,6589,3801],{"class":239},[3377,6591,6592],{},[29,6593,6594],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[51,6596,6598],{"className":2376,"code":6597,"language":2378,"meta":57,"style":57},"\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",[59,6599,6600,6605,6611,6621,6629,6633,6684,6697,6723,6727,6741,6745,6750,6755,6785,6789,6794,6828,6832,6837,6856,6861,6873,6889,6904,6909,6913,6917,6930,6956,6960,6974,6978,6986],{"__ignoreMap":57},[79,6601,6602],{"class":81,"line":82},[79,6603,6604],{"class":2440},"\u002F\u002F冒泡排序,升序\n",[79,6606,6607,6609],{"class":81,"line":167},[79,6608,4166],{"class":243},[79,6610,4169],{"class":89},[79,6612,6613,6615,6617,6619],{"class":81,"line":178},[79,6614,4174],{"class":243},[79,6616,4177],{"class":243},[79,6618,4180],{"class":85},[79,6620,3531],{"class":239},[79,6622,6623,6625,6627],{"class":81,"line":457},[79,6624,2390],{"class":243},[79,6626,893],{"class":85},[79,6628,4191],{"class":239},[79,6630,6631],{"class":81,"line":462},[79,6632,3782],{"class":239},[79,6634,6635,6637,6639,6641,6643,6645,6648,6650,6652,6654,6656,6658,6660,6662,6664,6666,6668,6670,6672,6674,6676,6678,6680,6682],{"class":81,"line":474},[79,6636,4200],{"class":243},[79,6638,6164],{"class":239},[79,6640,2794],{"class":96},[79,6642,1033],{"class":239},[79,6644,244],{"class":243},[79,6646,6647],{"class":239}," {",[79,6649,2668],{"class":96},[79,6651,2752],{"class":239},[79,6653,1049],{"class":96},[79,6655,2752],{"class":239},[79,6657,2769],{"class":96},[79,6659,2752],{"class":239},[79,6661,1030],{"class":96},[79,6663,2752],{"class":239},[79,6665,2694],{"class":96},[79,6667,2752],{"class":239},[79,6669,2743],{"class":96},[79,6671,2752],{"class":239},[79,6673,1072],{"class":96},[79,6675,2752],{"class":239},[79,6677,1188],{"class":96},[79,6679,2752],{"class":239},[79,6681,2794],{"class":96},[79,6683,6197],{"class":239},[79,6685,6686,6688,6690,6693,6695],{"class":81,"line":480},[79,6687,3787],{"class":239},[79,6689,3414],{"class":243},[79,6691,6692],{"class":89},"\"排序前：\"",[79,6694,3414],{"class":243},[79,6696,3436],{"class":239},[79,6698,6699,6701,6703,6705,6707,6709,6711,6713,6715,6717,6719,6721],{"class":81,"line":486},[79,6700,949],{"class":243},[79,6702,3887],{"class":239},[79,6704,2390],{"class":243},[79,6706,5237],{"class":239},[79,6708,244],{"class":243},[79,6710,1030],{"class":96},[79,6712,5244],{"class":239},[79,6714,392],{"class":243},[79,6716,2794],{"class":96},[79,6718,5244],{"class":239},[79,6720,4507],{"class":243},[79,6722,253],{"class":239},[79,6724,6725],{"class":81,"line":491},[79,6726,4245],{"class":239},[79,6728,6729,6731,6733,6735,6737,6739],{"class":81,"line":497},[79,6730,5654],{"class":239},[79,6732,3414],{"class":243},[79,6734,6554],{"class":239},[79,6736,3414],{"class":243},[79,6738,6559],{"class":89},[79,6740,3531],{"class":239},[79,6742,6743],{"class":81,"line":503},[79,6744,4402],{"class":239},[79,6746,6747],{"class":81,"line":509},[79,6748,6749],{"class":2440},"    \u002F\u002F开始冒泡排序\n",[79,6751,6752],{"class":81,"line":514},[79,6753,6754],{"class":2440},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[79,6756,6757,6759,6761,6763,6765,6767,6769,6771,6773,6775,6777,6779,6781,6783],{"class":81,"line":520},[79,6758,949],{"class":243},[79,6760,3887],{"class":239},[79,6762,2390],{"class":243},[79,6764,5237],{"class":239},[79,6766,244],{"class":243},[79,6768,1030],{"class":96},[79,6770,5244],{"class":239},[79,6772,392],{"class":243},[79,6774,2794],{"class":96},[79,6776,320],{"class":243},[79,6778,1072],{"class":96},[79,6780,5244],{"class":239},[79,6782,4507],{"class":243},[79,6784,253],{"class":239},[79,6786,6787],{"class":81,"line":526},[79,6788,4245],{"class":239},[79,6790,6791],{"class":81,"line":532},[79,6792,6793],{"class":2440},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[79,6795,6796,6798,6800,6802,6804,6806,6808,6810,6812,6814,6816,6818,6820,6822,6824,6826],{"class":81,"line":537},[79,6797,5606],{"class":243},[79,6799,3887],{"class":239},[79,6801,2390],{"class":243},[79,6803,5613],{"class":239},[79,6805,244],{"class":243},[79,6807,1030],{"class":96},[79,6809,5620],{"class":239},[79,6811,392],{"class":243},[79,6813,2794],{"class":96},[79,6815,320],{"class":243},[79,6817,2815],{"class":239},[79,6819,320],{"class":243},[79,6821,1072],{"class":96},[79,6823,5620],{"class":239},[79,6825,4507],{"class":243},[79,6827,253],{"class":239},[79,6829,6830],{"class":81,"line":543},[79,6831,4723],{"class":239},[79,6833,6834],{"class":81,"line":549},[79,6835,6836],{"class":2440},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[79,6838,6839,6842,6845,6847,6850,6852,6854],{"class":81,"line":555},[79,6840,6841],{"class":243},"            if",[79,6843,6844],{"class":239},"(arr[j]",[79,6846,3330],{"class":243},[79,6848,6849],{"class":239},"arr[j",[79,6851,2855],{"class":243},[79,6853,1072],{"class":96},[79,6855,1243],{"class":239},[79,6857,6858],{"class":81,"line":561},[79,6859,6860],{"class":239},"            {\n",[79,6862,6863,6866,6868,6870],{"class":81,"line":567},[79,6864,6865],{"class":243},"                int",[79,6867,6455],{"class":239},[79,6869,244],{"class":243},[79,6871,6872],{"class":239},"arr[j];\n",[79,6874,6875,6878,6880,6882,6884,6886],{"class":81,"line":573},[79,6876,6877],{"class":239},"                arr[j]",[79,6879,244],{"class":243},[79,6881,6849],{"class":239},[79,6883,2855],{"class":243},[79,6885,1072],{"class":96},[79,6887,6888],{"class":239},"];\n",[79,6890,6891,6894,6896,6898,6900,6902],{"class":81,"line":579},[79,6892,6893],{"class":239},"                arr[j",[79,6895,2855],{"class":243},[79,6897,1072],{"class":96},[79,6899,3311],{"class":239},[79,6901,244],{"class":243},[79,6903,6480],{"class":239},[79,6905,6906],{"class":81,"line":584},[79,6907,6908],{"class":239},"            }\n",[79,6910,6911],{"class":81,"line":590},[79,6912,4742],{"class":239},[79,6914,6915],{"class":81,"line":596},[79,6916,4402],{"class":239},[79,6918,6919,6921,6923,6926,6928],{"class":81,"line":602},[79,6920,3787],{"class":239},[79,6922,3414],{"class":243},[79,6924,6925],{"class":89},"\"排序后：\"",[79,6927,3414],{"class":243},[79,6929,3436],{"class":239},[79,6931,6932,6934,6936,6938,6940,6942,6944,6946,6948,6950,6952,6954],{"class":81,"line":608},[79,6933,949],{"class":243},[79,6935,3887],{"class":239},[79,6937,2390],{"class":243},[79,6939,5237],{"class":239},[79,6941,244],{"class":243},[79,6943,1030],{"class":96},[79,6945,5244],{"class":239},[79,6947,392],{"class":243},[79,6949,2794],{"class":96},[79,6951,5244],{"class":239},[79,6953,4507],{"class":243},[79,6955,253],{"class":239},[79,6957,6958],{"class":81,"line":614},[79,6959,4245],{"class":239},[79,6961,6962,6964,6966,6968,6970,6972],{"class":81,"line":620},[79,6963,5654],{"class":239},[79,6965,3414],{"class":243},[79,6967,6554],{"class":239},[79,6969,3414],{"class":243},[79,6971,6559],{"class":89},[79,6973,3531],{"class":239},[79,6975,6976],{"class":81,"line":625},[79,6977,4402],{"class":239},[79,6979,6980,6982,6984],{"class":81,"line":630},[79,6981,711],{"class":243},[79,6983,670],{"class":96},[79,6985,3531],{"class":239},[79,6987,6988],{"class":81,"line":648},[79,6989,3801],{"class":239},[265,6991,6993],{"id":6992},"_172二维数组","1.7.2二维数组",[26,6995,6996],{},[29,6997,6998],{},"二维数组的四种定义方式",[2516,7000,7001,7010],{},[2519,7002,7003],{},[2522,7004,7005,7008],{},[2525,7006,7007],{},"序号",[2525,7009,5983],{},[2563,7011,7012,7022,7031,7040,7049],{},[2522,7013,7014,7016],{},[2568,7015,1072],{},[2568,7017,7018,7019,2437],{},"数据类型 数组名[行数]",[79,7020,7021],{},"列数",[2522,7023,7024,7026],{},[2568,7025,1049],{},[2568,7027,7018,7028,7030],{},[79,7029,7021],{},"={ {数据1,数据2}，{数据3，数据4}... }",[2522,7032,7033,7035],{},[2568,7034,1188],{},[2568,7036,7018,7037,7039],{},[79,7038,7021],{},"={数据1,数据2,数据3...}",[2522,7041,7042,7044],{},[2568,7043,2668],{},[2568,7045,7046,7047,7039],{},"数据类型 数组名[]",[79,7048,7021],{},[2522,7050,7051,7054],{},[2568,7052,7053],{},"注意：不能只省略列数",[2568,7055],{},[26,7057,7058],{"start":167},[29,7059,7060],{},"二维数组数组名",[3377,7062,7063,7066],{},[29,7064,7065],{},"1.查看二维数组所占内存空间",[29,7067,7068],{},"2.获取二维数组首地址",[19,7070,7071],{},"已知二维数组，求二维数组的行数与列数",[51,7073,7075],{"className":2376,"code":7074,"language":2378,"meta":57,"style":57},"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",[59,7076,7077,7085,7089,7107,7111,7129,7145,7150,7175,7208],{"__ignoreMap":57},[79,7078,7079,7081,7083],{"class":81,"line":82},[79,7080,2390],{"class":243},[79,7082,893],{"class":85},[79,7084,4191],{"class":239},[79,7086,7087],{"class":81,"line":167},[79,7088,3782],{"class":239},[79,7090,7091,7093,7095,7097,7100,7102,7104],{"class":81,"line":178},[79,7092,4200],{"class":243},[79,7094,6164],{"class":239},[79,7096,1049],{"class":96},[79,7098,7099],{"class":239},"][",[79,7101,1188],{"class":96},[79,7103,3311],{"class":239},[79,7105,7106],{"class":243},"=\n",[79,7108,7109],{"class":81,"line":457},[79,7110,4245],{"class":239},[79,7112,7113,7116,7118,7120,7122,7124,7126],{"class":81,"line":462},[79,7114,7115],{"class":239},"        {",[79,7117,1072],{"class":96},[79,7119,2752],{"class":239},[79,7121,1049],{"class":96},[79,7123,2752],{"class":239},[79,7125,1188],{"class":96},[79,7127,7128],{"class":239},"},\n",[79,7130,7131,7133,7135,7137,7139,7141,7143],{"class":81,"line":474},[79,7132,7115],{"class":239},[79,7134,2668],{"class":96},[79,7136,2752],{"class":239},[79,7138,2694],{"class":96},[79,7140,2752],{"class":239},[79,7142,2718],{"class":96},[79,7144,3801],{"class":239},[79,7146,7147],{"class":81,"line":480},[79,7148,7149],{"class":239},"    };\n",[79,7151,7152,7154,7156,7159,7161,7163,7165,7167,7169,7171,7173],{"class":81,"line":486},[79,7153,3787],{"class":239},[79,7155,3414],{"class":243},[79,7157,7158],{"class":89},"\"二维数组的行数\"",[79,7160,3609],{"class":243},[79,7162,6406],{"class":239},[79,7164,6409],{"class":243},[79,7166,6053],{"class":239},[79,7168,1030],{"class":96},[79,7170,6416],{"class":239},[79,7172,3414],{"class":243},[79,7174,3436],{"class":239},[79,7176,7177,7179,7181,7184,7186,7188,7190,7192,7194,7196,7198,7200,7202,7204,7206],{"class":81,"line":491},[79,7178,3787],{"class":239},[79,7180,3414],{"class":243},[79,7182,7183],{"class":89},"\"二维数组的列数\"",[79,7185,3609],{"class":243},[79,7187,6053],{"class":239},[79,7189,1030],{"class":96},[79,7191,6416],{"class":239},[79,7193,6409],{"class":243},[79,7195,6053],{"class":239},[79,7197,1030],{"class":96},[79,7199,7099],{"class":239},[79,7201,1030],{"class":96},[79,7203,6416],{"class":239},[79,7205,3414],{"class":243},[79,7207,3436],{"class":239},[79,7209,7210],{"class":81,"line":497},[79,7211,3801],{"class":239},[19,7213,7214],{},"查看二维数组首地址",[51,7216,7218],{"className":2376,"code":7217,"language":2378,"meta":57,"style":57},"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",[59,7219,7220,7237,7263,7288],{"__ignoreMap":57},[79,7221,7222,7224,7226,7229,7231,7233,7235],{"class":81,"line":82},[79,7223,3606],{"class":239},[79,7225,3414],{"class":243},[79,7227,7228],{"class":89},"\"二维数组首地址：\"",[79,7230,3414],{"class":243},[79,7232,6082],{"class":239},[79,7234,3414],{"class":243},[79,7236,3436],{"class":239},[79,7238,7239,7241,7243,7246,7248,7250,7252,7255,7257,7259,7261],{"class":81,"line":167},[79,7240,3606],{"class":239},[79,7242,3414],{"class":243},[79,7244,7245],{"class":89},"\"二维数组第一行的首地址：\"",[79,7247,3414],{"class":243},[79,7249,685],{"class":239},[79,7251,2390],{"class":243},[79,7253,7254],{"class":239},")arr[",[79,7256,1030],{"class":96},[79,7258,3311],{"class":239},[79,7260,3414],{"class":243},[79,7262,3436],{"class":239},[79,7264,7265,7267,7269,7272,7274,7276,7278,7280,7282,7284,7286],{"class":81,"line":178},[79,7266,3606],{"class":239},[79,7268,3414],{"class":243},[79,7270,7271],{"class":89},"\"二维数组第二行的首地址：\"",[79,7273,3414],{"class":243},[79,7275,685],{"class":239},[79,7277,2390],{"class":243},[79,7279,7254],{"class":239},[79,7281,1072],{"class":96},[79,7283,3311],{"class":239},[79,7285,3414],{"class":243},[79,7287,3436],{"class":239},[79,7289,7290,7292,7294,7297,7299,7301,7303,7305,7307,7309,7311,7313,7315,7317,7319,7321],{"class":81,"line":457},[79,7291,3606],{"class":239},[79,7293,3414],{"class":243},[79,7295,7296],{"class":89},"\"二维数组第一个元素的首地址:\"",[79,7298,3414],{"class":243},[79,7300,685],{"class":239},[79,7302,2390],{"class":243},[79,7304,2803],{"class":239},[79,7306,2727],{"class":243},[79,7308,6108],{"class":239},[79,7310,1030],{"class":96},[79,7312,7099],{"class":239},[79,7314,1030],{"class":96},[79,7316,3311],{"class":239},[79,7318,3414],{"class":243},[79,7320,3479],{"class":239},[79,7322,7323],{"class":2440},"\u002F\u002F对于数，要加取址符\n",[2287,7325,7326],{},"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":57,"searchDepth":167,"depth":167,"links":7328},[7329,7330,7331,7339,7340,7346,7351],{"id":2331,"depth":167,"text":2332},{"id":2338,"depth":167,"text":2339},{"id":2353,"depth":167,"text":2354,"children":7332},[7333,7334,7335,7336,7337,7338],{"id":2357,"depth":178,"text":2358},{"id":2402,"depth":178,"text":2403},{"id":2465,"depth":178,"text":2466},{"id":3395,"depth":178,"text":3396},{"id":3485,"depth":178,"text":3486},{"id":3580,"depth":178,"text":3581},{"id":3622,"depth":167,"text":3623},{"id":3690,"depth":167,"text":3691,"children":7341},[7342,7343,7344,7345],{"id":3694,"depth":178,"text":3695},{"id":3716,"depth":178,"text":3717},{"id":3725,"depth":178,"text":3726},{"id":3734,"depth":178,"text":3735},{"id":3743,"depth":167,"text":3744,"children":7347},[7348,7349,7350],{"id":3747,"depth":178,"text":3748},{"id":4420,"depth":178,"text":4421},{"id":5824,"depth":178,"text":5825},{"id":5964,"depth":167,"text":5965,"children":7352},[7353,7354],{"id":5968,"depth":178,"text":5969},{"id":6992,"depth":178,"text":6993},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":2323,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":7361,"title":7362,"body":7363,"description":57,"extension":2314,"meta":8460,"navigation":453,"path":8461,"seo":8462,"stem":8463,"__hash__":8464},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":7364,"toc":8452},[7365,7368,7372,7380,7386,7389,7455,7459,7462,7538,7542,7545,7548,7551,7764,7768,7773,7837,7842,7909,7914,8004,8007,8112,8116,8119,8125,8269,8273,8276,8290,8293,8338,8341,8449],[10,7366,7362],{"id":7367},"_2函数",[14,7369,7371],{"id":7370},"_21函数概述","2.1函数概述",[26,7373,7374,7377],{},[29,7375,7376],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[29,7378,7379],{},"语法：",[51,7381,7384],{"className":7382,"code":7383,"language":56,"meta":57},[54],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[59,7385,7383],{"__ignoreMap":57},[19,7387,7388],{},"小案例",[51,7390,7392],{"className":2376,"code":7391,"language":2378,"meta":57,"style":57},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[59,7393,7394,7399,7423,7427,7444,7451],{"__ignoreMap":57},[79,7395,7396],{"class":81,"line":82},[79,7397,7398],{"class":2440},"\u002F\u002Fnum1,num2形参\n",[79,7400,7401,7403,7406,7408,7410,7414,7416,7418,7421],{"class":81,"line":167},[79,7402,2390],{"class":243},[79,7404,7405],{"class":85}," add",[79,7407,685],{"class":239},[79,7409,2390],{"class":243},[79,7411,7413],{"class":7412},"s4XuR"," num1",[79,7415,2752],{"class":239},[79,7417,2390],{"class":243},[79,7419,7420],{"class":7412}," num2",[79,7422,253],{"class":239},[79,7424,7425],{"class":81,"line":178},[79,7426,3782],{"class":239},[79,7428,7429,7431,7434,7436,7439,7441],{"class":81,"line":457},[79,7430,4200],{"class":243},[79,7432,7433],{"class":239}," sum",[79,7435,244],{"class":243},[79,7437,7438],{"class":239},"num1",[79,7440,2855],{"class":243},[79,7442,7443],{"class":239},"num2;\n",[79,7445,7446,7448],{"class":81,"line":462},[79,7447,711],{"class":243},[79,7449,7450],{"class":239}," sum;\n",[79,7452,7453],{"class":81,"line":474},[79,7454,3801],{"class":239},[14,7456,7458],{"id":7457},"_22函数调用","2.2函数调用",[19,7460,7461],{},"调用刚刚写的求和函数",[51,7463,7465],{"className":2376,"code":7464,"language":2378,"meta":57,"style":57},"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",[59,7466,7467,7475,7479,7484,7496,7508,7517,7522,7534],{"__ignoreMap":57},[79,7468,7469,7471,7473],{"class":81,"line":82},[79,7470,2390],{"class":243},[79,7472,893],{"class":85},[79,7474,4191],{"class":239},[79,7476,7477],{"class":81,"line":167},[79,7478,3782],{"class":239},[79,7480,7481],{"class":81,"line":178},[79,7482,7483],{"class":2440},"    \u002F\u002Fa,b实参\n",[79,7485,7486,7488,7490,7492,7494],{"class":81,"line":457},[79,7487,4200],{"class":243},[79,7489,3635],{"class":239},[79,7491,244],{"class":243},[79,7493,1030],{"class":96},[79,7495,3531],{"class":239},[79,7497,7498,7500,7502,7504,7506],{"class":81,"line":462},[79,7499,4200],{"class":243},[79,7501,5039],{"class":239},[79,7503,244],{"class":243},[79,7505,1030],{"class":96},[79,7507,3531],{"class":239},[79,7509,7510,7512,7514],{"class":81,"line":474},[79,7511,4227],{"class":239},[79,7513,3666],{"class":243},[79,7515,7516],{"class":239},"a,b;\n",[79,7518,7519],{"class":81,"line":480},[79,7520,7521],{"class":2440},"    \u002F\u002F调用函数时，实参值传给了形参\n",[79,7523,7524,7526,7528,7531],{"class":81,"line":486},[79,7525,3787],{"class":239},[79,7527,3414],{"class":243},[79,7529,7530],{"class":85},"add",[79,7532,7533],{"class":239},"(a,b);\n",[79,7535,7536],{"class":81,"line":491},[79,7537,3801],{"class":239},[14,7539,7541],{"id":7540},"_23值传递","2.3值传递",[19,7543,7544],{},"值传递就是函数调用时实参将数值传给形参",[19,7546,7547],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7549,7550],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[51,7552,7554],{"className":2376,"code":7553,"language":2378,"meta":57,"style":57},"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",[59,7555,7556,7578,7582,7595,7612,7630,7641,7650,7659,7672,7688,7704,7713,7717,7725,7729,7741,7753,7760],{"__ignoreMap":57},[79,7557,7558,7561,7564,7566,7568,7570,7572,7574,7576],{"class":81,"line":82},[79,7559,7560],{"class":243},"void",[79,7562,7563],{"class":85}," swap",[79,7565,685],{"class":239},[79,7567,2390],{"class":243},[79,7569,7413],{"class":7412},[79,7571,2752],{"class":239},[79,7573,2390],{"class":243},[79,7575,7420],{"class":7412},[79,7577,253],{"class":239},[79,7579,7580],{"class":81,"line":167},[79,7581,3782],{"class":239},[79,7583,7584,7586,7588,7591,7593],{"class":81,"line":178},[79,7585,3787],{"class":239},[79,7587,3414],{"class":243},[79,7589,7590],{"class":89},"\"交换前：\"",[79,7592,3414],{"class":243},[79,7594,3436],{"class":239},[79,7596,7597,7599,7601,7604,7606,7608,7610],{"class":81,"line":457},[79,7598,3787],{"class":239},[79,7600,3414],{"class":243},[79,7602,7603],{"class":89},"\"num1=\"",[79,7605,3414],{"class":243},[79,7607,7438],{"class":239},[79,7609,3414],{"class":243},[79,7611,3436],{"class":239},[79,7613,7614,7616,7618,7621,7623,7626,7628],{"class":81,"line":462},[79,7615,3787],{"class":239},[79,7617,3414],{"class":243},[79,7619,7620],{"class":89},"\"num2=\"",[79,7622,3414],{"class":243},[79,7624,7625],{"class":239},"num2",[79,7627,3414],{"class":243},[79,7629,3436],{"class":239},[79,7631,7632,7634,7636,7638],{"class":81,"line":474},[79,7633,4200],{"class":243},[79,7635,6455],{"class":239},[79,7637,244],{"class":243},[79,7639,7640],{"class":239},"num1;\n",[79,7642,7643,7646,7648],{"class":81,"line":480},[79,7644,7645],{"class":239},"    num1",[79,7647,244],{"class":243},[79,7649,7443],{"class":239},[79,7651,7652,7655,7657],{"class":81,"line":486},[79,7653,7654],{"class":239},"    num2",[79,7656,244],{"class":243},[79,7658,6480],{"class":239},[79,7660,7661,7663,7665,7668,7670],{"class":81,"line":491},[79,7662,3787],{"class":239},[79,7664,3414],{"class":243},[79,7666,7667],{"class":89},"\"交换后：\"",[79,7669,3414],{"class":243},[79,7671,3436],{"class":239},[79,7673,7674,7676,7678,7680,7682,7684,7686],{"class":81,"line":497},[79,7675,3787],{"class":239},[79,7677,3414],{"class":243},[79,7679,7603],{"class":89},[79,7681,3414],{"class":243},[79,7683,7438],{"class":239},[79,7685,3414],{"class":243},[79,7687,3436],{"class":239},[79,7689,7690,7692,7694,7696,7698,7700,7702],{"class":81,"line":503},[79,7691,3787],{"class":239},[79,7693,3414],{"class":243},[79,7695,7620],{"class":89},[79,7697,3414],{"class":243},[79,7699,7625],{"class":239},[79,7701,3414],{"class":243},[79,7703,3436],{"class":239},[79,7705,7706,7708,7710],{"class":81,"line":509},[79,7707,711],{"class":243},[79,7709,2437],{"class":239},[79,7711,7712],{"class":2440},"\u002F\u002F或者不写\n",[79,7714,7715],{"class":81,"line":514},[79,7716,3801],{"class":239},[79,7718,7719,7721,7723],{"class":81,"line":520},[79,7720,2390],{"class":243},[79,7722,893],{"class":85},[79,7724,4191],{"class":239},[79,7726,7727],{"class":81,"line":526},[79,7728,3782],{"class":239},[79,7730,7731,7733,7735,7737,7739],{"class":81,"line":532},[79,7732,4200],{"class":243},[79,7734,3635],{"class":239},[79,7736,244],{"class":243},[79,7738,2820],{"class":96},[79,7740,3531],{"class":239},[79,7742,7743,7745,7747,7749,7751],{"class":81,"line":537},[79,7744,4200],{"class":243},[79,7746,5039],{"class":239},[79,7748,244],{"class":243},[79,7750,3073],{"class":96},[79,7752,3531],{"class":239},[79,7754,7755,7758],{"class":81,"line":543},[79,7756,7757],{"class":85},"    swap",[79,7759,7533],{"class":239},[79,7761,7762],{"class":81,"line":549},[79,7763,3801],{"class":239},[14,7765,7767],{"id":7766},"_24函数的常见形式","2.4函数的常见形式",[26,7769,7770],{},[29,7771,7772],{},"无参无返",[51,7774,7776],{"className":2376,"code":7775,"language":2378,"meta":57,"style":57},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[59,7777,7778,7787,7791,7804,7808,7816,7820,7825,7833],{"__ignoreMap":57},[79,7779,7780,7782,7785],{"class":81,"line":82},[79,7781,7560],{"class":243},[79,7783,7784],{"class":85}," test01",[79,7786,4191],{"class":239},[79,7788,7789],{"class":81,"line":167},[79,7790,3782],{"class":239},[79,7792,7793,7795,7797,7800,7802],{"class":81,"line":178},[79,7794,3787],{"class":239},[79,7796,3414],{"class":243},[79,7798,7799],{"class":89},"\"你好\"",[79,7801,3414],{"class":243},[79,7803,3436],{"class":239},[79,7805,7806],{"class":81,"line":457},[79,7807,3801],{"class":239},[79,7809,7810,7812,7814],{"class":81,"line":462},[79,7811,2390],{"class":243},[79,7813,893],{"class":85},[79,7815,4191],{"class":239},[79,7817,7818],{"class":81,"line":474},[79,7819,3782],{"class":239},[79,7821,7822],{"class":81,"line":480},[79,7823,7824],{"class":2440},"    \u002F\u002F函数调用\n",[79,7826,7827,7830],{"class":81,"line":486},[79,7828,7829],{"class":85},"    test01",[79,7831,7832],{"class":239},"();\n",[79,7834,7835],{"class":81,"line":491},[79,7836,3801],{"class":239},[26,7838,7839],{"start":167},[29,7840,7841],{},"有参无返",[51,7843,7845],{"className":2376,"code":7844,"language":2378,"meta":57,"style":57},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[59,7846,7847,7862,7866,7878,7882,7890,7894,7905],{"__ignoreMap":57},[79,7848,7849,7851,7854,7856,7858,7860],{"class":81,"line":82},[79,7850,7560],{"class":243},[79,7852,7853],{"class":85}," test02",[79,7855,685],{"class":239},[79,7857,2390],{"class":243},[79,7859,3635],{"class":7412},[79,7861,253],{"class":239},[79,7863,7864],{"class":81,"line":167},[79,7865,3782],{"class":239},[79,7867,7868,7870,7872,7874,7876],{"class":81,"line":178},[79,7869,3787],{"class":239},[79,7871,3414],{"class":243},[79,7873,7799],{"class":89},[79,7875,3414],{"class":243},[79,7877,3436],{"class":239},[79,7879,7880],{"class":81,"line":457},[79,7881,3801],{"class":239},[79,7883,7884,7886,7888],{"class":81,"line":462},[79,7885,2390],{"class":243},[79,7887,893],{"class":85},[79,7889,4191],{"class":239},[79,7891,7892],{"class":81,"line":474},[79,7893,3782],{"class":239},[79,7895,7896,7899,7901,7903],{"class":81,"line":480},[79,7897,7898],{"class":85},"    test02",[79,7900,685],{"class":239},[79,7902,2686],{"class":96},[79,7904,4925],{"class":239},[79,7906,7907],{"class":81,"line":486},[79,7908,3801],{"class":239},[26,7910,7911],{"start":178},[29,7912,7913],{},"无参有返",[51,7915,7917],{"className":2376,"code":7916,"language":2378,"meta":57,"style":57},"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",[59,7918,7919,7928,7932,7944,7952,7956,7964,7968,7981,8000],{"__ignoreMap":57},[79,7920,7921,7923,7926],{"class":81,"line":82},[79,7922,2390],{"class":243},[79,7924,7925],{"class":85}," test03",[79,7927,4191],{"class":239},[79,7929,7930],{"class":81,"line":167},[79,7931,3782],{"class":239},[79,7933,7934,7936,7938,7940,7942],{"class":81,"line":178},[79,7935,3787],{"class":239},[79,7937,3414],{"class":243},[79,7939,7799],{"class":89},[79,7941,3414],{"class":243},[79,7943,3436],{"class":239},[79,7945,7946,7948,7950],{"class":81,"line":457},[79,7947,711],{"class":243},[79,7949,1140],{"class":96},[79,7951,3531],{"class":239},[79,7953,7954],{"class":81,"line":462},[79,7955,3801],{"class":239},[79,7957,7958,7960,7962],{"class":81,"line":474},[79,7959,2390],{"class":243},[79,7961,893],{"class":85},[79,7963,4191],{"class":239},[79,7965,7966],{"class":81,"line":480},[79,7967,3782],{"class":239},[79,7969,7970,7972,7974,7976,7979],{"class":81,"line":486},[79,7971,4200],{"class":243},[79,7973,7413],{"class":239},[79,7975,244],{"class":243},[79,7977,7978],{"class":85},"test03",[79,7980,7832],{"class":239},[79,7982,7983,7985,7987,7989,7991,7993,7995,7997],{"class":81,"line":491},[79,7984,3787],{"class":239},[79,7986,3414],{"class":243},[79,7988,7603],{"class":89},[79,7990,3414],{"class":243},[79,7992,7438],{"class":239},[79,7994,3414],{"class":243},[79,7996,3479],{"class":239},[79,7998,7999],{"class":2440}," \u002F\u002F100\n",[79,8001,8002],{"class":81,"line":497},[79,8003,3801],{"class":239},[19,8005,8006],{},"4.有参有返",[51,8008,8010],{"className":2376,"code":8009,"language":2378,"meta":57,"style":57},"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",[59,8011,8012,8027,8031,8044,8050,8054,8063,8067,8079,8093,8108],{"__ignoreMap":57},[79,8013,8014,8016,8019,8021,8023,8025],{"class":81,"line":82},[79,8015,2390],{"class":243},[79,8017,8018],{"class":85}," test04",[79,8020,685],{"class":239},[79,8022,2390],{"class":243},[79,8024,3635],{"class":7412},[79,8026,253],{"class":239},[79,8028,8029],{"class":81,"line":167},[79,8030,3782],{"class":239},[79,8032,8033,8035,8037,8040,8042],{"class":81,"line":178},[79,8034,3787],{"class":239},[79,8036,3414],{"class":243},[79,8038,8039],{"class":89},"\"hello\"",[79,8041,3414],{"class":243},[79,8043,3436],{"class":239},[79,8045,8046,8048],{"class":81,"line":457},[79,8047,711],{"class":243},[79,8049,3669],{"class":239},[79,8051,8052],{"class":81,"line":462},[79,8053,3801],{"class":239},[79,8055,8056,8058,8061],{"class":81,"line":474},[79,8057,2390],{"class":243},[79,8059,8060],{"class":85}," mian",[79,8062,4191],{"class":239},[79,8064,8065],{"class":81,"line":480},[79,8066,3782],{"class":239},[79,8068,8069,8071,8073,8075,8077],{"class":81,"line":486},[79,8070,4200],{"class":243},[79,8072,5039],{"class":239},[79,8074,244],{"class":243},[79,8076,1072],{"class":96},[79,8078,3531],{"class":239},[79,8080,8081,8083,8085,8087,8090],{"class":81,"line":491},[79,8082,4200],{"class":243},[79,8084,5055],{"class":239},[79,8086,244],{"class":243},[79,8088,8089],{"class":85},"test04",[79,8091,8092],{"class":239},"(b);\n",[79,8094,8095,8097,8099,8101,8103,8105],{"class":81,"line":497},[79,8096,3787],{"class":239},[79,8098,3414],{"class":243},[79,8100,2663],{"class":239},[79,8102,3414],{"class":243},[79,8104,3479],{"class":239},[79,8106,8107],{"class":2440}," \u002F\u002F1\n",[79,8109,8110],{"class":81,"line":503},[79,8111,3801],{"class":239},[14,8113,8115],{"id":8114},"_25函数的声明","2.5函数的声明",[19,8117,8118],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,8120,8121,8122],{},"函数的",[2528,8123,8124],{},"声明可以多次，但是函数的定义只能有一次",[51,8126,8128],{"className":2376,"code":8127,"language":2378,"meta":57,"style":57},"\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",[59,8129,8130,8135,8140,8165,8174,8178,8190,8202,8218,8222,8242,8246,8265],{"__ignoreMap":57},[79,8131,8132],{"class":81,"line":82},[79,8133,8134],{"class":2440},"\u002F\u002F函数声明\n",[79,8136,8137],{"class":81,"line":167},[79,8138,8139],{"class":2440},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[79,8141,8142,8144,8147,8149,8151,8153,8155,8157,8159,8162],{"class":81,"line":178},[79,8143,2390],{"class":243},[79,8145,8146],{"class":85}," max",[79,8148,685],{"class":239},[79,8150,2390],{"class":243},[79,8152,3635],{"class":7412},[79,8154,2752],{"class":239},[79,8156,2390],{"class":243},[79,8158,5039],{"class":7412},[79,8160,8161],{"class":239},");",[79,8163,8164],{"class":2440},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[79,8166,8167,8169,8171],{"class":81,"line":457},[79,8168,2390],{"class":243},[79,8170,893],{"class":85},[79,8172,8173],{"class":239},"() \n",[79,8175,8176],{"class":81,"line":462},[79,8177,3782],{"class":239},[79,8179,8180,8182,8184,8186,8188],{"class":81,"line":474},[79,8181,4200],{"class":243},[79,8183,3635],{"class":239},[79,8185,244],{"class":243},[79,8187,2820],{"class":96},[79,8189,3531],{"class":239},[79,8191,8192,8194,8196,8198,8200],{"class":81,"line":480},[79,8193,4200],{"class":243},[79,8195,5039],{"class":239},[79,8197,244],{"class":243},[79,8199,3073],{"class":96},[79,8201,3531],{"class":239},[79,8203,8204,8206,8208,8211,8214,8216],{"class":81,"line":486},[79,8205,3787],{"class":239},[79,8207,3414],{"class":243},[79,8209,8210],{"class":85},"max",[79,8212,8213],{"class":239},"(a,b)",[79,8215,3414],{"class":243},[79,8217,3436],{"class":239},[79,8219,8220],{"class":81,"line":491},[79,8221,3801],{"class":239},[79,8223,8224,8226,8228,8230,8232,8234,8236,8238,8240],{"class":81,"line":497},[79,8225,2390],{"class":243},[79,8227,8146],{"class":85},[79,8229,685],{"class":239},[79,8231,2390],{"class":243},[79,8233,3635],{"class":7412},[79,8235,2752],{"class":239},[79,8237,2390],{"class":243},[79,8239,5039],{"class":7412},[79,8241,253],{"class":239},[79,8243,8244],{"class":81,"line":503},[79,8245,3782],{"class":239},[79,8247,8248,8250,8252,8254,8256,8258,8260,8262],{"class":81,"line":509},[79,8249,711],{"class":243},[79,8251,3635],{"class":239},[79,8253,3330],{"class":243},[79,8255,2638],{"class":239},[79,8257,3356],{"class":243},[79,8259,2614],{"class":239},[79,8261,3232],{"class":243},[79,8263,8264],{"class":239},"b;\n",[79,8266,8267],{"class":81,"line":514},[79,8268,3801],{"class":239},[14,8270,8272],{"id":8271},"_26函数的分文件编写","2.6函数的分文件编写",[19,8274,8275],{},"4个步骤：",[3377,8277,8278,8281,8284,8287],{},[29,8279,8280],{},"1.创建后缀名为.h的头文件",[29,8282,8283],{},"2.创建后缀名为.cpp的源文件",[29,8285,8286],{},"3.在头文件中写函数的定义",[29,8288,8289],{},"4.在源文件中写函数的定义\n示例：",[19,8291,8292],{},"头文件：swap.h",[51,8294,8296],{"className":2376,"code":8295,"language":2378,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[59,8297,8298,8304,8314,8318],{"__ignoreMap":57},[79,8299,8300,8302],{"class":81,"line":82},[79,8301,4166],{"class":243},[79,8303,4169],{"class":89},[79,8305,8306,8308,8310,8312],{"class":81,"line":167},[79,8307,4174],{"class":243},[79,8309,4177],{"class":243},[79,8311,4180],{"class":85},[79,8313,3531],{"class":239},[79,8315,8316],{"class":81,"line":178},[79,8317,8134],{"class":2440},[79,8319,8320,8322,8324,8326,8328,8330,8332,8334,8336],{"class":81,"line":457},[79,8321,7560],{"class":243},[79,8323,7563],{"class":85},[79,8325,685],{"class":239},[79,8327,2390],{"class":243},[79,8329,3635],{"class":7412},[79,8331,2752],{"class":239},[79,8333,2390],{"class":243},[79,8335,5039],{"class":7412},[79,8337,4925],{"class":239},[19,8339,8340],{},"源文件：swap.cpp",[51,8342,8344],{"className":2376,"code":8343,"language":2378,"meta":57,"style":57},"#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",[59,8345,8346,8353,8358,8378,8382,8393,8402,8411,8428,8445],{"__ignoreMap":57},[79,8347,8348,8350],{"class":81,"line":82},[79,8349,4166],{"class":243},[79,8351,8352],{"class":89}," \"swap.h\"\n",[79,8354,8355],{"class":81,"line":167},[79,8356,8357],{"class":2440},"\u002F\u002F函数的定义\n",[79,8359,8360,8362,8364,8366,8368,8370,8372,8374,8376],{"class":81,"line":178},[79,8361,7560],{"class":243},[79,8363,7563],{"class":85},[79,8365,685],{"class":239},[79,8367,2390],{"class":243},[79,8369,3635],{"class":7412},[79,8371,2752],{"class":239},[79,8373,2390],{"class":243},[79,8375,5039],{"class":7412},[79,8377,253],{"class":239},[79,8379,8380],{"class":81,"line":457},[79,8381,3782],{"class":239},[79,8383,8384,8386,8388,8390],{"class":81,"line":462},[79,8385,4200],{"class":243},[79,8387,6455],{"class":239},[79,8389,244],{"class":243},[79,8391,8392],{"class":239},"a;\n",[79,8394,8395,8398,8400],{"class":81,"line":474},[79,8396,8397],{"class":239},"    a",[79,8399,244],{"class":243},[79,8401,8264],{"class":239},[79,8403,8404,8407,8409],{"class":81,"line":480},[79,8405,8406],{"class":239},"    b",[79,8408,244],{"class":243},[79,8410,6480],{"class":239},[79,8412,8413,8415,8417,8420,8422,8424,8426],{"class":81,"line":486},[79,8414,3787],{"class":239},[79,8416,3414],{"class":243},[79,8418,8419],{"class":89},"\"a=\"",[79,8421,3414],{"class":243},[79,8423,2614],{"class":239},[79,8425,3414],{"class":243},[79,8427,3436],{"class":239},[79,8429,8430,8432,8434,8437,8439,8441,8443],{"class":81,"line":491},[79,8431,3787],{"class":239},[79,8433,3414],{"class":243},[79,8435,8436],{"class":89},"\"b=\"",[79,8438,3414],{"class":243},[79,8440,2638],{"class":239},[79,8442,3414],{"class":243},[79,8444,3436],{"class":239},[79,8446,8447],{"class":81,"line":497},[79,8448,3801],{"class":239},[2287,8450,8451],{},"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":57,"searchDepth":167,"depth":167,"links":8453},[8454,8455,8456,8457,8458,8459],{"id":7370,"depth":167,"text":7371},{"id":7457,"depth":167,"text":7458},{"id":7540,"depth":167,"text":7541},{"id":7766,"depth":167,"text":7767},{"id":8114,"depth":167,"text":8115},{"id":8271,"depth":167,"text":8272},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":7362,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8466,"title":8467,"body":8468,"description":8475,"extension":2314,"meta":9879,"navigation":453,"path":9880,"seo":9881,"stem":9882,"__hash__":9883},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8469,"toc":9869},[8470,8473,8476,8480,8642,8646,8649,8652,8655,8658,8797,8801,8804,8807,8810,8875,8879,8884,8951,8954,8958,8961,8972,8977,8997,9000,9005,9024,9027,9031,9050,9053,9057,9292,9296,9299,9302,9305,9467,9470,9474,9477,9483,9866],[10,8471,8467],{"id":8472},"_3指针",[19,8474,8475],{},"通过指针保存一个地址，指针就是个地址",[14,8477,8479],{"id":8478},"_31定义指针","3.1定义指针",[51,8481,8483],{"className":2376,"code":8482,"language":2378,"meta":57,"style":57},"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",[59,8484,8485,8493,8497,8502,8514,8519,8527,8537,8555,8575,8579,8584,8589,8594,8608,8624,8638],{"__ignoreMap":57},[79,8486,8487,8489,8491],{"class":81,"line":82},[79,8488,2390],{"class":243},[79,8490,893],{"class":85},[79,8492,4191],{"class":239},[79,8494,8495],{"class":81,"line":167},[79,8496,3782],{"class":239},[79,8498,8499],{"class":81,"line":178},[79,8500,8501],{"class":2440},"    \u002F\u002F1.定义指针\n",[79,8503,8504,8506,8508,8510,8512],{"class":81,"line":457},[79,8505,4200],{"class":243},[79,8507,3635],{"class":239},[79,8509,244],{"class":243},[79,8511,2820],{"class":96},[79,8513,3531],{"class":239},[79,8515,8516],{"class":81,"line":462},[79,8517,8518],{"class":2440},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[79,8520,8521,8524],{"class":81,"line":474},[79,8522,8523],{"class":243},"    int*",[79,8525,8526],{"class":239},"p;\n",[79,8528,8529,8532,8535],{"class":81,"line":480},[79,8530,8531],{"class":239},"    p",[79,8533,8534],{"class":243},"=&",[79,8536,8392],{"class":239},[79,8538,8539,8541,8543,8546,8549,8551,8553],{"class":81,"line":486},[79,8540,3787],{"class":239},[79,8542,3414],{"class":243},[79,8544,8545],{"class":89},"\"a的地址为：\"",[79,8547,8548],{"class":243},"\u003C\u003C&",[79,8550,2614],{"class":239},[79,8552,3414],{"class":243},[79,8554,3436],{"class":239},[79,8556,8557,8559,8561,8564,8566,8568,8570,8572],{"class":81,"line":491},[79,8558,3787],{"class":239},[79,8560,3414],{"class":243},[79,8562,8563],{"class":89},"\"指针p为：\"",[79,8565,3414],{"class":243},[79,8567,19],{"class":239},[79,8569,3414],{"class":243},[79,8571,3479],{"class":239},[79,8573,8574],{"class":2440},"\u002F\u002F指针p表示的就是a的地址\n",[79,8576,8577],{"class":81,"line":497},[79,8578,454],{"emptyLinePlaceholder":453},[79,8580,8581],{"class":81,"line":503},[79,8582,8583],{"class":2440},"    \u002F\u002F2.使用指针\n",[79,8585,8586],{"class":81,"line":509},[79,8587,8588],{"class":2440},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[79,8590,8591],{"class":81,"line":514},[79,8592,8593],{"class":2440},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[79,8595,8596,8599,8601,8603,8606],{"class":81,"line":520},[79,8597,8598],{"class":243},"    *",[79,8600,19],{"class":239},[79,8602,244],{"class":243},[79,8604,8605],{"class":96},"1000",[79,8607,3531],{"class":239},[79,8609,8610,8612,8615,8617,8619,8621],{"class":81,"line":526},[79,8611,3787],{"class":239},[79,8613,8614],{"class":243},"\u003C\u003C*",[79,8616,19],{"class":239},[79,8618,3414],{"class":243},[79,8620,3479],{"class":239},[79,8622,8623],{"class":2440},"\u002F\u002F1000\n",[79,8625,8626,8628,8630,8632,8634,8636],{"class":81,"line":532},[79,8627,3787],{"class":239},[79,8629,3414],{"class":243},[79,8631,2614],{"class":239},[79,8633,3414],{"class":243},[79,8635,3479],{"class":239},[79,8637,8623],{"class":2440},[79,8639,8640],{"class":81,"line":537},[79,8641,3801],{"class":239},[14,8643,8645],{"id":8644},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8647,8648],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8650,8651],{},"在32位操作系统下：占用4个字节空间",[19,8653,8654],{},"在64位操作系统下：占用8个字节空间",[19,8656,8657],{},"上方是不管啥数据类型的",[51,8659,8661],{"className":2376,"code":8660,"language":2378,"meta":57,"style":57},"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",[59,8662,8663,8671,8675,8680,8692,8697,8702,8707,8719,8741,8767,8793],{"__ignoreMap":57},[79,8664,8665,8667,8669],{"class":81,"line":82},[79,8666,2390],{"class":243},[79,8668,893],{"class":85},[79,8670,4191],{"class":239},[79,8672,8673],{"class":81,"line":167},[79,8674,3782],{"class":239},[79,8676,8677],{"class":81,"line":178},[79,8678,8679],{"class":2440},"    \u002F\u002F指针所占内存空间\n",[79,8681,8682,8684,8686,8688,8690],{"class":81,"line":457},[79,8683,4200],{"class":243},[79,8685,3635],{"class":239},[79,8687,244],{"class":243},[79,8689,2820],{"class":96},[79,8691,3531],{"class":239},[79,8693,8694],{"class":81,"line":462},[79,8695,8696],{"class":2440},"    \u002F\u002Fint *p;\n",[79,8698,8699],{"class":81,"line":474},[79,8700,8701],{"class":2440},"    \u002F\u002Fp=&a;\n",[79,8703,8704],{"class":81,"line":480},[79,8705,8706],{"class":2440},"    \u002F\u002F上述可以写为以下：\n",[79,8708,8709,8711,8713,8715,8717],{"class":81,"line":486},[79,8710,4200],{"class":243},[79,8712,853],{"class":243},[79,8714,19],{"class":239},[79,8716,8534],{"class":243},[79,8718,8392],{"class":239},[79,8720,8721,8724,8726,8729,8731,8734,8736,8738],{"class":81,"line":491},[79,8722,8723],{"class":239},"    cout ",[79,8725,3414],{"class":243},[79,8727,8728],{"class":89},"\"sizeof(int *)\"",[79,8730,3609],{"class":243},[79,8732,8733],{"class":239},"(p)",[79,8735,3414],{"class":243},[79,8737,3479],{"class":239},[79,8739,8740],{"class":2440},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[79,8742,8743,8745,8747,8749,8751,8753,8755,8757,8759,8761,8764],{"class":81,"line":497},[79,8744,8723],{"class":239},[79,8746,3414],{"class":243},[79,8748,8728],{"class":89},[79,8750,3609],{"class":243},[79,8752,685],{"class":239},[79,8754,2390],{"class":243},[79,8756,853],{"class":243},[79,8758,2803],{"class":239},[79,8760,3414],{"class":243},[79,8762,8763],{"class":239},"endl",[79,8765,8766],{"class":2440},"  \u002F\u002F4字节(32位的话)\n",[79,8768,8769,8771,8773,8776,8778,8780,8782,8784,8786,8788,8790],{"class":81,"line":503},[79,8770,8723],{"class":239},[79,8772,3414],{"class":243},[79,8774,8775],{"class":89},"\"sizeof(char *)\"",[79,8777,3609],{"class":243},[79,8779,685],{"class":239},[79,8781,2476],{"class":243},[79,8783,853],{"class":243},[79,8785,2803],{"class":239},[79,8787,3414],{"class":243},[79,8789,3479],{"class":239},[79,8791,8792],{"class":2440}," \u002F\u002F4字节(32位的话)\n",[79,8794,8795],{"class":81,"line":509},[79,8796,3801],{"class":239},[14,8798,8800],{"id":8799},"_33空指针","3.3空指针",[19,8802,8803],{},"空指针：指针变量指向内存中编号为0的空间",[19,8805,8806],{},"用途：初始化指针变量",[19,8808,8809],{},"注意：空指针指向的内存是不可以访问的",[51,8811,8813],{"className":2376,"code":8812,"language":2378,"meta":57,"style":57},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[59,8814,8815,8823,8827,8832,8846,8851,8866,8871],{"__ignoreMap":57},[79,8816,8817,8819,8821],{"class":81,"line":82},[79,8818,2390],{"class":243},[79,8820,893],{"class":85},[79,8822,4191],{"class":239},[79,8824,8825],{"class":81,"line":167},[79,8826,3782],{"class":239},[79,8828,8829],{"class":81,"line":178},[79,8830,8831],{"class":2440},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[79,8833,8834,8836,8838,8840,8842,8844],{"class":81,"line":457},[79,8835,4200],{"class":243},[79,8837,853],{"class":243},[79,8839,19],{"class":239},[79,8841,244],{"class":243},[79,8843,4607],{"class":96},[79,8845,3531],{"class":239},[79,8847,8848],{"class":81,"line":462},[79,8849,8850],{"class":2440},"    \u002F\u002F2.空指针不能进行访问\n",[79,8852,8853,8855,8857,8859,8861,8863],{"class":81,"line":474},[79,8854,8598],{"class":243},[79,8856,19],{"class":239},[79,8858,244],{"class":243},[79,8860,2686],{"class":96},[79,8862,2437],{"class":239},[79,8864,8865],{"class":2440},"\u002F\u002F直接报错，压根不能访问\n",[79,8867,8868],{"class":81,"line":480},[79,8869,8870],{"class":2440},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[79,8872,8873],{"class":81,"line":486},[79,8874,3801],{"class":239},[14,8876,8878],{"id":8877},"_34野指针","3.4野指针",[19,8880,8881],{},[2528,8882,8883],{},"指针变量指向非法的内存空间",[51,8885,8887],{"className":2376,"code":8886,"language":2378,"meta":57,"style":57},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[59,8888,8889,8897,8901,8930,8935,8947],{"__ignoreMap":57},[79,8890,8891,8893,8895],{"class":81,"line":82},[79,8892,2390],{"class":243},[79,8894,893],{"class":85},[79,8896,4191],{"class":239},[79,8898,8899],{"class":81,"line":167},[79,8900,3782],{"class":239},[79,8902,8903,8905,8907,8909,8911,8913,8915,8917,8919,8922,8925,8927],{"class":81,"line":178},[79,8904,4200],{"class":243},[79,8906,853],{"class":243},[79,8908,19],{"class":239},[79,8910,244],{"class":243},[79,8912,685],{"class":239},[79,8914,2390],{"class":243},[79,8916,853],{"class":243},[79,8918,2803],{"class":239},[79,8920,8921],{"class":243},"0x",[79,8923,8924],{"class":96},"1100",[79,8926,2437],{"class":239},[79,8928,8929],{"class":2440}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[79,8931,8932],{"class":81,"line":457},[79,8933,8934],{"class":2440},"    \u002F\u002F访问野指针报错\n",[79,8936,8937,8939,8941,8943,8945],{"class":81,"line":462},[79,8938,3787],{"class":239},[79,8940,8614],{"class":243},[79,8942,19],{"class":239},[79,8944,3414],{"class":243},[79,8946,3436],{"class":239},[79,8948,8949],{"class":81,"line":474},[79,8950,3801],{"class":239},[19,8952,8953],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8955,8957],{"id":8956},"_35const修饰指针","3.5const修饰指针",[19,8959,8960],{},"三种情况：",[3377,8962,8963,8966,8969],{},[29,8964,8965],{},"const修饰指针 常量指针",[29,8967,8968],{},"const修饰常量 指针常量",[29,8970,8971],{},"const即修饰指针，又修饰常量",[26,8973,8974],{},[29,8975,8976],{},"常量指针",[51,8978,8980],{"className":2376,"code":8979,"language":2378,"meta":57,"style":57},"const int *p=&a;\n",[59,8981,8982],{"__ignoreMap":57},[79,8983,8984,8987,8989,8991,8993,8995],{"class":81,"line":82},[79,8985,8986],{"class":243},"const",[79,8988,4597],{"class":243},[79,8990,853],{"class":243},[79,8992,19],{"class":239},[79,8994,8534],{"class":243},[79,8996,8392],{"class":239},[19,8998,8999],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[26,9001,9002],{"start":167},[29,9003,9004],{},"指针常量",[51,9006,9008],{"className":2376,"code":9007,"language":2378,"meta":57,"style":57},"int *const p=&a;\n",[59,9009,9010],{"__ignoreMap":57},[79,9011,9012,9014,9017,9020,9022],{"class":81,"line":82},[79,9013,2390],{"class":243},[79,9015,9016],{"class":243}," *const",[79,9018,9019],{"class":239}," p",[79,9021,8534],{"class":243},[79,9023,8392],{"class":239},[19,9025,9026],{},"指针的指向不可以改，指针指向的值可以改",[26,9028,9029],{"start":178},[29,9030,8971],{},[51,9032,9034],{"className":2376,"code":9033,"language":2378,"meta":57,"style":57},"const int *const p=&a;\n",[59,9035,9036],{"__ignoreMap":57},[79,9037,9038,9040,9042,9044,9046,9048],{"class":81,"line":82},[79,9039,8986],{"class":243},[79,9041,4597],{"class":243},[79,9043,9016],{"class":243},[79,9045,9019],{"class":239},[79,9047,8534],{"class":243},[79,9049,8392],{"class":239},[19,9051,9052],{},"指针的指向和指针指向的值都不可以改变",[14,9054,9056],{"id":9055},"_36指针和数组","3.6指针和数组",[51,9058,9060],{"className":2376,"code":9059,"language":2378,"meta":57,"style":57},"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",[59,9061,9062,9070,9074,9079,9133,9154,9170,9186,9197,9214,9219,9233,9259,9263,9275,9284,9288],{"__ignoreMap":57},[79,9063,9064,9066,9068],{"class":81,"line":82},[79,9065,2390],{"class":243},[79,9067,893],{"class":85},[79,9069,4191],{"class":239},[79,9071,9072],{"class":81,"line":167},[79,9073,3782],{"class":239},[79,9075,9076],{"class":81,"line":178},[79,9077,9078],{"class":2440},"    \u002F\u002F利用指针访问数组中的元素\n",[79,9080,9081,9083,9085,9087,9089,9091,9093,9095,9097,9099,9101,9103,9105,9107,9109,9111,9113,9115,9117,9119,9121,9123,9125,9127,9129,9131],{"class":81,"line":457},[79,9082,4200],{"class":243},[79,9084,6164],{"class":239},[79,9086,2820],{"class":96},[79,9088,3311],{"class":239},[79,9090,244],{"class":243},[79,9092,694],{"class":239},[79,9094,1072],{"class":96},[79,9096,2752],{"class":239},[79,9098,1049],{"class":96},[79,9100,2752],{"class":239},[79,9102,1188],{"class":96},[79,9104,2752],{"class":239},[79,9106,2668],{"class":96},[79,9108,2752],{"class":239},[79,9110,2694],{"class":96},[79,9112,2752],{"class":239},[79,9114,2718],{"class":96},[79,9116,2752],{"class":239},[79,9118,2743],{"class":96},[79,9120,2752],{"class":239},[79,9122,2769],{"class":96},[79,9124,2752],{"class":239},[79,9126,2794],{"class":96},[79,9128,2752],{"class":239},[79,9130,2820],{"class":96},[79,9132,6197],{"class":239},[79,9134,9135,9137,9139,9142,9144,9146,9148,9150,9152],{"class":81,"line":462},[79,9136,3787],{"class":239},[79,9138,3414],{"class":243},[79,9140,9141],{"class":89},"\"数组的第一个元素为：\"",[79,9143,3414],{"class":243},[79,9145,6108],{"class":239},[79,9147,1030],{"class":96},[79,9149,3311],{"class":239},[79,9151,3414],{"class":243},[79,9153,3436],{"class":239},[79,9155,9156,9158,9160,9162,9164,9167],{"class":81,"line":474},[79,9157,4200],{"class":243},[79,9159,853],{"class":243},[79,9161,19],{"class":239},[79,9163,244],{"class":243},[79,9165,9166],{"class":239},"arr;",[79,9168,9169],{"class":2440},"\u002F\u002F注意数才要加取地址符号&\n",[79,9171,9172,9174,9176,9178,9180,9182,9184],{"class":81,"line":480},[79,9173,3787],{"class":239},[79,9175,3414],{"class":243},[79,9177,9141],{"class":89},[79,9179,8614],{"class":243},[79,9181,19],{"class":239},[79,9183,3414],{"class":243},[79,9185,3436],{"class":239},[79,9187,9188,9190,9192,9194],{"class":81,"line":486},[79,9189,8531],{"class":239},[79,9191,4507],{"class":243},[79,9193,2437],{"class":239},[79,9195,9196],{"class":2440}," \u002F\u002F让指针向后偏移4个字节\n",[79,9198,9199,9201,9203,9206,9208,9210,9212],{"class":81,"line":491},[79,9200,3787],{"class":239},[79,9202,3414],{"class":243},[79,9204,9205],{"class":89},"\"数组的第二个元素为：\"",[79,9207,8614],{"class":243},[79,9209,19],{"class":239},[79,9211,3414],{"class":243},[79,9213,3436],{"class":239},[79,9215,9216],{"class":81,"line":497},[79,9217,9218],{"class":2440},"    \u002F\u002F利用指针遍历数组\n",[79,9220,9221,9223,9225,9228,9230],{"class":81,"line":503},[79,9222,4200],{"class":243},[79,9224,853],{"class":243},[79,9226,9227],{"class":239},"p2",[79,9229,244],{"class":243},[79,9231,9232],{"class":239},"arr;\n",[79,9234,9235,9237,9239,9241,9243,9245,9247,9249,9251,9253,9255,9257],{"class":81,"line":509},[79,9236,949],{"class":243},[79,9238,3887],{"class":239},[79,9240,2390],{"class":243},[79,9242,5237],{"class":239},[79,9244,244],{"class":243},[79,9246,1030],{"class":96},[79,9248,5244],{"class":239},[79,9250,392],{"class":243},[79,9252,2820],{"class":96},[79,9254,5244],{"class":239},[79,9256,4507],{"class":243},[79,9258,253],{"class":239},[79,9260,9261],{"class":81,"line":514},[79,9262,4245],{"class":239},[79,9264,9265,9267,9269,9271,9273],{"class":81,"line":520},[79,9266,5654],{"class":239},[79,9268,8614],{"class":243},[79,9270,9227],{"class":239},[79,9272,3414],{"class":243},[79,9274,3436],{"class":239},[79,9276,9277,9280,9282],{"class":81,"line":526},[79,9278,9279],{"class":239},"        p2",[79,9281,4507],{"class":243},[79,9283,3531],{"class":239},[79,9285,9286],{"class":81,"line":532},[79,9287,4402],{"class":239},[79,9289,9290],{"class":81,"line":537},[79,9291,3801],{"class":239},[14,9293,9295],{"id":9294},"_37指针和函数","3.7指针和函数",[19,9297,9298],{},"利用指针做函数参数，可以修改实参的值",[19,9300,9301],{},"值传递：只改变形参，不改变实参",[19,9303,9304],{},"地址传递：",[51,9306,9308],{"className":2376,"code":9307,"language":2378,"meta":57,"style":57},"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",[59,9309,9310,9335,9339,9351,9362,9372,9376,9384,9388,9400,9412,9417,9433,9448,9463],{"__ignoreMap":57},[79,9311,9312,9314,9316,9318,9320,9322,9325,9327,9329,9331,9333],{"class":81,"line":82},[79,9313,7560],{"class":243},[79,9315,7563],{"class":85},[79,9317,685],{"class":239},[79,9319,2390],{"class":243},[79,9321,853],{"class":243},[79,9323,9324],{"class":7412},"p1",[79,9326,2752],{"class":239},[79,9328,2390],{"class":243},[79,9330,853],{"class":243},[79,9332,9227],{"class":7412},[79,9334,253],{"class":239},[79,9336,9337],{"class":81,"line":167},[79,9338,3782],{"class":239},[79,9340,9341,9343,9345,9348],{"class":81,"line":178},[79,9342,4200],{"class":243},[79,9344,6455],{"class":239},[79,9346,9347],{"class":243},"=*",[79,9349,9350],{"class":239},"p1;\n",[79,9352,9353,9355,9357,9359],{"class":81,"line":457},[79,9354,8598],{"class":243},[79,9356,9324],{"class":239},[79,9358,9347],{"class":243},[79,9360,9361],{"class":239},"p2;\n",[79,9363,9364,9366,9368,9370],{"class":81,"line":462},[79,9365,8598],{"class":243},[79,9367,9227],{"class":239},[79,9369,244],{"class":243},[79,9371,6480],{"class":239},[79,9373,9374],{"class":81,"line":474},[79,9375,3801],{"class":239},[79,9377,9378,9380,9382],{"class":81,"line":480},[79,9379,2390],{"class":243},[79,9381,893],{"class":85},[79,9383,4191],{"class":239},[79,9385,9386],{"class":81,"line":486},[79,9387,3782],{"class":239},[79,9389,9390,9392,9394,9396,9398],{"class":81,"line":491},[79,9391,4200],{"class":243},[79,9393,3635],{"class":239},[79,9395,244],{"class":243},[79,9397,2820],{"class":96},[79,9399,3531],{"class":239},[79,9401,9402,9404,9406,9408,9410],{"class":81,"line":497},[79,9403,4200],{"class":243},[79,9405,5039],{"class":239},[79,9407,244],{"class":243},[79,9409,3073],{"class":96},[79,9411,3531],{"class":239},[79,9413,9414],{"class":81,"line":503},[79,9415,9416],{"class":2440},"    \u002F\u002F地址传递\n",[79,9418,9419,9421,9423,9425,9428,9430],{"class":81,"line":509},[79,9420,7757],{"class":85},[79,9422,685],{"class":239},[79,9424,2727],{"class":243},[79,9426,9427],{"class":239},"a,",[79,9429,2727],{"class":243},[79,9431,9432],{"class":239},"b);\n",[79,9434,9435,9437,9439,9441,9443,9445],{"class":81,"line":514},[79,9436,3787],{"class":239},[79,9438,3414],{"class":243},[79,9440,2614],{"class":239},[79,9442,3414],{"class":243},[79,9444,3479],{"class":239},[79,9446,9447],{"class":2440},"\u002F\u002F20\n",[79,9449,9450,9452,9454,9456,9458,9460],{"class":81,"line":520},[79,9451,3787],{"class":239},[79,9453,3414],{"class":243},[79,9455,2638],{"class":239},[79,9457,3414],{"class":243},[79,9459,3479],{"class":239},[79,9461,9462],{"class":2440},"\u002F\u002F10\n",[79,9464,9465],{"class":81,"line":526},[79,9466,3801],{"class":239},[19,9468,9469],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9471,9473],{"id":9472},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9475,9476],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9478,9479,9480,9482],{},"例如数组：int arr",[79,9481,2820],{},"={4,3,6,9,1,2,10,8,7,5}",[51,9484,9486],{"className":2376,"code":9485,"language":2378,"meta":57,"style":57},"#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",[59,9487,9488,9494,9504,9528,9532,9563,9567,9601,9605,9623,9627,9638,9653,9668,9672,9676,9680,9684,9688,9696,9700,9705,9759,9771,9783,9788,9796,9800,9805,9830,9834,9849,9858,9862],{"__ignoreMap":57},[79,9489,9490,9492],{"class":81,"line":82},[79,9491,4166],{"class":243},[79,9493,4169],{"class":89},[79,9495,9496,9498,9500,9502],{"class":81,"line":167},[79,9497,4174],{"class":243},[79,9499,4177],{"class":243},[79,9501,4180],{"class":85},[79,9503,3531],{"class":239},[79,9505,9506,9508,9511,9513,9515,9517,9519,9521,9523,9526],{"class":81,"line":178},[79,9507,7560],{"class":243},[79,9509,9510],{"class":85}," bubbleSort",[79,9512,685],{"class":239},[79,9514,2390],{"class":243},[79,9516,853],{"class":243},[79,9518,19],{"class":7412},[79,9520,2752],{"class":239},[79,9522,2390],{"class":243},[79,9524,9525],{"class":7412}," len",[79,9527,253],{"class":239},[79,9529,9530],{"class":81,"line":457},[79,9531,3782],{"class":239},[79,9533,9534,9536,9538,9540,9542,9544,9546,9548,9550,9553,9555,9557,9559,9561],{"class":81,"line":462},[79,9535,949],{"class":243},[79,9537,685],{"class":239},[79,9539,2390],{"class":243},[79,9541,5237],{"class":239},[79,9543,244],{"class":243},[79,9545,1030],{"class":96},[79,9547,5244],{"class":239},[79,9549,392],{"class":243},[79,9551,9552],{"class":239},"len",[79,9554,320],{"class":243},[79,9556,1072],{"class":96},[79,9558,5244],{"class":239},[79,9560,4507],{"class":243},[79,9562,253],{"class":239},[79,9564,9565],{"class":81,"line":474},[79,9566,4245],{"class":239},[79,9568,9569,9571,9573,9575,9577,9579,9581,9583,9585,9587,9589,9591,9593,9595,9597,9599],{"class":81,"line":480},[79,9570,5606],{"class":243},[79,9572,685],{"class":239},[79,9574,2390],{"class":243},[79,9576,5613],{"class":239},[79,9578,244],{"class":243},[79,9580,1030],{"class":96},[79,9582,5620],{"class":239},[79,9584,392],{"class":243},[79,9586,9552],{"class":239},[79,9588,320],{"class":243},[79,9590,2815],{"class":239},[79,9592,320],{"class":243},[79,9594,1072],{"class":96},[79,9596,5620],{"class":239},[79,9598,4507],{"class":243},[79,9600,253],{"class":239},[79,9602,9603],{"class":81,"line":486},[79,9604,4723],{"class":239},[79,9606,9607,9609,9612,9614,9617,9619,9621],{"class":81,"line":491},[79,9608,6841],{"class":243},[79,9610,9611],{"class":239},"(p[j]",[79,9613,3330],{"class":243},[79,9615,9616],{"class":239},"p[j",[79,9618,2855],{"class":243},[79,9620,1072],{"class":96},[79,9622,1243],{"class":239},[79,9624,9625],{"class":81,"line":497},[79,9626,6860],{"class":239},[79,9628,9629,9631,9633,9635],{"class":81,"line":503},[79,9630,6865],{"class":243},[79,9632,6455],{"class":239},[79,9634,244],{"class":243},[79,9636,9637],{"class":239},"p[j];\n",[79,9639,9640,9643,9645,9647,9649,9651],{"class":81,"line":509},[79,9641,9642],{"class":239},"                p[j]",[79,9644,244],{"class":243},[79,9646,9616],{"class":239},[79,9648,2855],{"class":243},[79,9650,1072],{"class":96},[79,9652,6888],{"class":239},[79,9654,9655,9658,9660,9662,9664,9666],{"class":81,"line":514},[79,9656,9657],{"class":239},"                p[j",[79,9659,2855],{"class":243},[79,9661,1072],{"class":96},[79,9663,3311],{"class":239},[79,9665,244],{"class":243},[79,9667,6480],{"class":239},[79,9669,9670],{"class":81,"line":520},[79,9671,6908],{"class":239},[79,9673,9674],{"class":81,"line":526},[79,9675,4742],{"class":239},[79,9677,9678],{"class":81,"line":532},[79,9679,4402],{"class":239},[79,9681,9682],{"class":81,"line":537},[79,9683,3801],{"class":239},[79,9685,9686],{"class":81,"line":543},[79,9687,454],{"emptyLinePlaceholder":453},[79,9689,9690,9692,9694],{"class":81,"line":549},[79,9691,2390],{"class":243},[79,9693,893],{"class":85},[79,9695,4191],{"class":239},[79,9697,9698],{"class":81,"line":555},[79,9699,3782],{"class":239},[79,9701,9702],{"class":81,"line":561},[79,9703,9704],{"class":2440},"    \u002F\u002F 1.创建数组\n",[79,9706,9707,9709,9711,9713,9715,9717,9719,9721,9723,9725,9727,9729,9731,9733,9735,9737,9739,9741,9743,9745,9747,9749,9751,9753,9755,9757],{"class":81,"line":567},[79,9708,4200],{"class":243},[79,9710,6164],{"class":239},[79,9712,2820],{"class":96},[79,9714,3311],{"class":239},[79,9716,244],{"class":243},[79,9718,694],{"class":239},[79,9720,2668],{"class":96},[79,9722,2752],{"class":239},[79,9724,1188],{"class":96},[79,9726,2752],{"class":239},[79,9728,2718],{"class":96},[79,9730,2752],{"class":239},[79,9732,2794],{"class":96},[79,9734,2752],{"class":239},[79,9736,1072],{"class":96},[79,9738,2752],{"class":239},[79,9740,1049],{"class":96},[79,9742,2752],{"class":239},[79,9744,2820],{"class":96},[79,9746,2752],{"class":239},[79,9748,2769],{"class":96},[79,9750,2752],{"class":239},[79,9752,2743],{"class":96},[79,9754,2752],{"class":239},[79,9756,2694],{"class":96},[79,9758,6197],{"class":239},[79,9760,9761,9763,9765,9767,9769],{"class":81,"line":573},[79,9762,4200],{"class":243},[79,9764,9525],{"class":239},[79,9766,244],{"class":243},[79,9768,2820],{"class":96},[79,9770,3531],{"class":239},[79,9772,9773,9775,9777,9779,9781],{"class":81,"line":579},[79,9774,4200],{"class":243},[79,9776,853],{"class":243},[79,9778,19],{"class":239},[79,9780,244],{"class":243},[79,9782,9232],{"class":239},[79,9784,9785],{"class":81,"line":584},[79,9786,9787],{"class":2440},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[79,9789,9790,9793],{"class":81,"line":590},[79,9791,9792],{"class":85},"    bubbleSort",[79,9794,9795],{"class":239},"(p,len);\n",[79,9797,9798],{"class":81,"line":596},[79,9799,454],{"emptyLinePlaceholder":453},[79,9801,9802],{"class":81,"line":602},[79,9803,9804],{"class":2440},"    \u002F\u002F 3.打印排序后的数组\n",[79,9806,9807,9809,9811,9813,9815,9817,9819,9821,9823,9826,9828],{"class":81,"line":608},[79,9808,949],{"class":243},[79,9810,3887],{"class":239},[79,9812,2390],{"class":243},[79,9814,5237],{"class":239},[79,9816,244],{"class":243},[79,9818,1030],{"class":96},[79,9820,5417],{"class":239},[79,9822,392],{"class":243},[79,9824,9825],{"class":239},"len; i",[79,9827,4507],{"class":243},[79,9829,253],{"class":239},[79,9831,9832],{"class":81,"line":614},[79,9833,4245],{"class":239},[79,9835,9836,9838,9840,9842,9844,9847],{"class":81,"line":620},[79,9837,5654],{"class":239},[79,9839,8614],{"class":243},[79,9841,19],{"class":239},[79,9843,3414],{"class":243},[79,9845,9846],{"class":89},"\"\"",[79,9848,3531],{"class":239},[79,9850,9851,9854,9856],{"class":81,"line":625},[79,9852,9853],{"class":239},"        p",[79,9855,4507],{"class":243},[79,9857,3531],{"class":239},[79,9859,9860],{"class":81,"line":630},[79,9861,4402],{"class":239},[79,9863,9864],{"class":81,"line":648},[79,9865,3801],{"class":239},[2287,9867,9868],{},"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":57,"searchDepth":167,"depth":167,"links":9870},[9871,9872,9873,9874,9875,9876,9877,9878],{"id":8478,"depth":167,"text":8479},{"id":8644,"depth":167,"text":8645},{"id":8799,"depth":167,"text":8800},{"id":8877,"depth":167,"text":8878},{"id":8956,"depth":167,"text":8957},{"id":9055,"depth":167,"text":9056},{"id":9294,"depth":167,"text":9295},{"id":9472,"depth":167,"text":9473},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8467,"description":8475},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9885,"title":9886,"body":9887,"description":9894,"extension":2314,"meta":12838,"navigation":453,"path":12839,"seo":12840,"stem":12841,"__hash__":12842},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9888,"toc":12829},[9889,9892,9895,9899,9902,9905,9916,10244,10247,10251,10254,10261,10516,10520,10523,10526,10681,10685,10688,10691,10897,10901,10904,11207,11210,11218,11222,11225,11376,11378,11389,11446,11450,11455,12092,12100,12103,12197,12200,12820,12826],[10,9890,9886],{"id":9891},"_4结构体",[19,9893,9894],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9896,9898],{"id":9897},"_41结构体定义与使用","4.1结构体定义与使用",[19,9900,9901],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9903,9904],{},"通过结构体创建变量的方式：",[3377,9906,9907,9910,9913],{},[29,9908,9909],{},"struct 结构体名 变量名",[29,9911,9912],{},"struct 结构体名 变量名={成员1值，成员2值...}",[29,9914,9915],{},"定义结构体时顺便创建变量",[51,9917,9919],{"className":2376,"code":9918,"language":2378,"meta":57,"style":57},"#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",[59,9920,9921,9927,9937,9944,9949,9957,9961,9966,9970,9975,9980,9985,9992,9997,10004,10008,10015,10019,10023,10027,10031,10035,10039,10045,10049,10055,10063,10071,10075,10080,10085,10096,10101,10113,10124,10135,10140,10163,10167,10172,10198,10202,10207,10218,10229,10240],{"__ignoreMap":57},[79,9922,9923,9925],{"class":81,"line":82},[79,9924,4166],{"class":243},[79,9926,4169],{"class":89},[79,9928,9929,9931,9933,9935],{"class":81,"line":167},[79,9930,4174],{"class":243},[79,9932,4177],{"class":243},[79,9934,4180],{"class":85},[79,9936,3531],{"class":239},[79,9938,9939,9941],{"class":81,"line":178},[79,9940,4166],{"class":243},[79,9942,9943],{"class":89},"\u003Cstring>\n",[79,9945,9946],{"class":81,"line":457},[79,9947,9948],{"class":2440},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[79,9950,9951,9954],{"class":81,"line":462},[79,9952,9953],{"class":243},"struct",[79,9955,9956],{"class":85}," Student\n",[79,9958,9959],{"class":81,"line":474},[79,9960,3782],{"class":239},[79,9962,9963],{"class":81,"line":480},[79,9964,9965],{"class":2440},"    \u002F\u002F成员列表\n",[79,9967,9968],{"class":81,"line":486},[79,9969,454],{"emptyLinePlaceholder":453},[79,9971,9972],{"class":81,"line":491},[79,9973,9974],{"class":2440},"    \u002F\u002F姓名\n",[79,9976,9977],{"class":81,"line":497},[79,9978,9979],{"class":239},"    string name;\n",[79,9981,9982],{"class":81,"line":503},[79,9983,9984],{"class":2440},"    \u002F\u002F年龄\n",[79,9986,9987,9989],{"class":81,"line":509},[79,9988,4200],{"class":243},[79,9990,9991],{"class":239}," age;\n",[79,9993,9994],{"class":81,"line":514},[79,9995,9996],{"class":2440},"    \u002F\u002F分数\n",[79,9998,9999,10001],{"class":81,"line":520},[79,10000,4200],{"class":243},[79,10002,10003],{"class":239}," score;\n",[79,10005,10006],{"class":81,"line":526},[79,10007,6197],{"class":239},[79,10009,10010,10012],{"class":81,"line":532},[79,10011,9953],{"class":243},[79,10013,10014],{"class":85}," School\n",[79,10016,10017],{"class":81,"line":537},[79,10018,3782],{"class":239},[79,10020,10021],{"class":81,"line":543},[79,10022,9965],{"class":2440},[79,10024,10025],{"class":81,"line":549},[79,10026,454],{"emptyLinePlaceholder":453},[79,10028,10029],{"class":81,"line":555},[79,10030,9974],{"class":2440},[79,10032,10033],{"class":81,"line":561},[79,10034,9979],{"class":239},[79,10036,10037],{"class":81,"line":567},[79,10038,9984],{"class":2440},[79,10040,10041,10043],{"class":81,"line":573},[79,10042,4200],{"class":243},[79,10044,9991],{"class":239},[79,10046,10047],{"class":81,"line":579},[79,10048,9996],{"class":2440},[79,10050,10051,10053],{"class":81,"line":584},[79,10052,4200],{"class":243},[79,10054,10003],{"class":239},[79,10056,10057,10060],{"class":81,"line":590},[79,10058,10059],{"class":239},"} s3;",[79,10061,10062],{"class":2440}," \u002F\u002F创建结构体时就创建了变量\n",[79,10064,10065,10067,10069],{"class":81,"line":596},[79,10066,2390],{"class":243},[79,10068,893],{"class":85},[79,10070,4191],{"class":239},[79,10072,10073],{"class":81,"line":602},[79,10074,3782],{"class":239},[79,10076,10077],{"class":81,"line":608},[79,10078,10079],{"class":2440},"    \u002F\u002F2.通过学生类型创建具体学生\n",[79,10081,10082],{"class":81,"line":614},[79,10083,10084],{"class":2440},"    \u002F\u002F2.1 struct Student s1;\n",[79,10086,10087,10090,10093],{"class":81,"line":620},[79,10088,10089],{"class":243},"    struct",[79,10091,10092],{"class":85}," Student",[79,10094,10095],{"class":239}," s1;\n",[79,10097,10098],{"class":81,"line":625},[79,10099,10100],{"class":2440},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[79,10102,10103,10106,10108,10111],{"class":81,"line":630},[79,10104,10105],{"class":239},"    s1.name",[79,10107,244],{"class":243},[79,10109,10110],{"class":89},"\"张三\"",[79,10112,3531],{"class":239},[79,10114,10115,10118,10120,10122],{"class":81,"line":648},[79,10116,10117],{"class":239},"    s1.age",[79,10119,244],{"class":243},[79,10121,3023],{"class":96},[79,10123,3531],{"class":239},[79,10125,10126,10129,10131,10133],{"class":81,"line":659},[79,10127,10128],{"class":239},"    s1.score",[79,10130,244],{"class":243},[79,10132,2629],{"class":96},[79,10134,3531],{"class":239},[79,10136,10137],{"class":81,"line":676},[79,10138,10139],{"class":2440},"    \u002F\u002F输出结果\n",[79,10141,10142,10144,10146,10149,10151,10154,10156,10159,10161],{"class":81,"line":708},[79,10143,3787],{"class":239},[79,10145,3414],{"class":243},[79,10147,10148],{"class":239},"s1.name",[79,10150,3414],{"class":243},[79,10152,10153],{"class":239},"s1.age",[79,10155,3414],{"class":243},[79,10157,10158],{"class":239},"s1.score",[79,10160,3414],{"class":243},[79,10162,3436],{"class":239},[79,10164,10165],{"class":81,"line":717},[79,10166,454],{"emptyLinePlaceholder":453},[79,10168,10169],{"class":81,"line":722},[79,10170,10171],{"class":2440},"    \u002F\u002F2.2 struct Student s2={...}\n",[79,10173,10174,10176,10178,10181,10183,10185,10188,10190,10192,10194,10196],{"class":81,"line":727},[79,10175,10089],{"class":243},[79,10177,10092],{"class":85},[79,10179,10180],{"class":239}," s2",[79,10182,244],{"class":243},[79,10184,694],{"class":239},[79,10186,10187],{"class":89},"\"王五\"",[79,10189,2752],{"class":239},[79,10191,3023],{"class":96},[79,10193,2752],{"class":239},[79,10195,2629],{"class":96},[79,10197,6197],{"class":239},[79,10199,10200],{"class":81,"line":738},[79,10201,454],{"emptyLinePlaceholder":453},[79,10203,10204],{"class":81,"line":753},[79,10205,10206],{"class":2440},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[79,10208,10209,10212,10214,10216],{"class":81,"line":768},[79,10210,10211],{"class":239},"    s3.name",[79,10213,244],{"class":243},[79,10215,5881],{"class":89},[79,10217,3531],{"class":239},[79,10219,10220,10223,10225,10227],{"class":81,"line":776},[79,10221,10222],{"class":239},"    s3.age",[79,10224,244],{"class":243},[79,10226,3023],{"class":96},[79,10228,3531],{"class":239},[79,10230,10231,10234,10236,10238],{"class":81,"line":781},[79,10232,10233],{"class":239},"    s3.score",[79,10235,244],{"class":243},[79,10237,3073],{"class":96},[79,10239,3531],{"class":239},[79,10241,10242],{"class":81,"line":786},[79,10243,3801],{"class":239},[19,10245,10246],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10248,10250],{"id":10249},"_42结构体数组","4.2结构体数组",[19,10252,10253],{},"将自定义的结构体放入到数组中方便维护",[19,10255,10256,10257,10260],{},"语法：struct 结构体名 数组名",[79,10258,10259],{},"元素个数","={ {}，{},...{} };",[51,10262,10264],{"className":2376,"code":10263,"language":2378,"meta":57,"style":57},"#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",[59,10265,10266,10272,10282,10288,10293,10299,10303,10307,10313,10319,10323,10327,10335,10339,10344,10359,10363,10379,10395,10399,10404,10420,10435,10450,10455,10481,10485,10508,10512],{"__ignoreMap":57},[79,10267,10268,10270],{"class":81,"line":82},[79,10269,4166],{"class":243},[79,10271,4169],{"class":89},[79,10273,10274,10276,10278,10280],{"class":81,"line":167},[79,10275,4174],{"class":243},[79,10277,4177],{"class":243},[79,10279,4180],{"class":85},[79,10281,3531],{"class":239},[79,10283,10284,10286],{"class":81,"line":178},[79,10285,4166],{"class":243},[79,10287,9943],{"class":89},[79,10289,10290],{"class":81,"line":457},[79,10291,10292],{"class":2440},"\u002F\u002F1.定义结构体\n",[79,10294,10295,10297],{"class":81,"line":462},[79,10296,9953],{"class":243},[79,10298,9956],{"class":85},[79,10300,10301],{"class":81,"line":474},[79,10302,3782],{"class":239},[79,10304,10305],{"class":81,"line":480},[79,10306,9979],{"class":239},[79,10308,10309,10311],{"class":81,"line":486},[79,10310,4200],{"class":243},[79,10312,9991],{"class":239},[79,10314,10315,10317],{"class":81,"line":491},[79,10316,4200],{"class":243},[79,10318,10003],{"class":239},[79,10320,10321],{"class":81,"line":497},[79,10322,454],{"emptyLinePlaceholder":453},[79,10324,10325],{"class":81,"line":503},[79,10326,6197],{"class":239},[79,10328,10329,10331,10333],{"class":81,"line":509},[79,10330,2390],{"class":243},[79,10332,893],{"class":85},[79,10334,4191],{"class":239},[79,10336,10337],{"class":81,"line":514},[79,10338,3782],{"class":239},[79,10340,10341],{"class":81,"line":520},[79,10342,10343],{"class":2440},"    \u002F\u002F2.创建结构体数组\n",[79,10345,10346,10348,10350,10353,10355,10357],{"class":81,"line":526},[79,10347,10089],{"class":243},[79,10349,10092],{"class":85},[79,10351,10352],{"class":239}," stuArray[",[79,10354,1049],{"class":96},[79,10356,3311],{"class":239},[79,10358,7106],{"class":243},[79,10360,10361],{"class":81,"line":532},[79,10362,4245],{"class":239},[79,10364,10365,10367,10369,10371,10373,10375,10377],{"class":81,"line":537},[79,10366,7115],{"class":239},[79,10368,10110],{"class":89},[79,10370,2752],{"class":239},[79,10372,3023],{"class":96},[79,10374,2752],{"class":239},[79,10376,2686],{"class":96},[79,10378,7128],{"class":239},[79,10380,10381,10383,10385,10387,10389,10391,10393],{"class":81,"line":543},[79,10382,7115],{"class":239},[79,10384,5881],{"class":89},[79,10386,2752],{"class":239},[79,10388,2948],{"class":96},[79,10390,2752],{"class":239},[79,10392,2948],{"class":96},[79,10394,3801],{"class":239},[79,10396,10397],{"class":81,"line":549},[79,10398,4402],{"class":239},[79,10400,10401],{"class":81,"line":555},[79,10402,10403],{"class":2440},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[79,10405,10406,10409,10411,10414,10416,10418],{"class":81,"line":561},[79,10407,10408],{"class":239},"    stuArray[",[79,10410,1072],{"class":96},[79,10412,10413],{"class":239},"].name",[79,10415,244],{"class":243},[79,10417,5904],{"class":89},[79,10419,3531],{"class":239},[79,10421,10422,10424,10426,10429,10431,10433],{"class":81,"line":567},[79,10423,10408],{"class":239},[79,10425,1072],{"class":96},[79,10427,10428],{"class":239},"].age",[79,10430,244],{"class":243},[79,10432,1049],{"class":96},[79,10434,3531],{"class":239},[79,10436,10437,10439,10441,10444,10446,10448],{"class":81,"line":573},[79,10438,10408],{"class":239},[79,10440,1072],{"class":96},[79,10442,10443],{"class":239},"].score",[79,10445,244],{"class":243},[79,10447,1049],{"class":96},[79,10449,3531],{"class":239},[79,10451,10452],{"class":81,"line":579},[79,10453,10454],{"class":2440},"    \u002F\u002F4.遍历结构体数组\n",[79,10456,10457,10459,10461,10463,10465,10467,10469,10471,10473,10475,10477,10479],{"class":81,"line":584},[79,10458,949],{"class":243},[79,10460,3887],{"class":239},[79,10462,2390],{"class":243},[79,10464,5237],{"class":239},[79,10466,244],{"class":243},[79,10468,1030],{"class":96},[79,10470,5244],{"class":239},[79,10472,392],{"class":243},[79,10474,1049],{"class":96},[79,10476,5244],{"class":239},[79,10478,4507],{"class":243},[79,10480,253],{"class":239},[79,10482,10483],{"class":81,"line":590},[79,10484,4245],{"class":239},[79,10486,10487,10489,10491,10494,10496,10499,10501,10504,10506],{"class":81,"line":596},[79,10488,5654],{"class":239},[79,10490,3414],{"class":243},[79,10492,10493],{"class":239},"stuArray[i].name",[79,10495,3414],{"class":243},[79,10497,10498],{"class":239},"stuArray[i].age",[79,10500,3414],{"class":243},[79,10502,10503],{"class":239},"stuArray[i].score",[79,10505,3414],{"class":243},[79,10507,3436],{"class":239},[79,10509,10510],{"class":81,"line":602},[79,10511,4402],{"class":239},[79,10513,10514],{"class":81,"line":608},[79,10515,3801],{"class":239},[14,10517,10519],{"id":10518},"_43结构体指针","4.3结构体指针",[19,10521,10522],{},"作用：通过指针访问结构体中的成员",[19,10524,10525],{},"利用操作符->可以通过结构体指针访问结构体属性",[51,10527,10529],{"className":2376,"code":10528,"language":2378,"meta":57,"style":57},"#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",[59,10530,10531,10537,10547,10553,10557,10563,10567,10571,10577,10583,10587,10595,10599,10604,10629,10634,10649,10654,10677],{"__ignoreMap":57},[79,10532,10533,10535],{"class":81,"line":82},[79,10534,4166],{"class":243},[79,10536,4169],{"class":89},[79,10538,10539,10541,10543,10545],{"class":81,"line":167},[79,10540,4174],{"class":243},[79,10542,4177],{"class":243},[79,10544,4180],{"class":85},[79,10546,3531],{"class":239},[79,10548,10549,10551],{"class":81,"line":178},[79,10550,4166],{"class":243},[79,10552,9943],{"class":89},[79,10554,10555],{"class":81,"line":457},[79,10556,10292],{"class":2440},[79,10558,10559,10561],{"class":81,"line":462},[79,10560,9953],{"class":243},[79,10562,9956],{"class":85},[79,10564,10565],{"class":81,"line":474},[79,10566,3782],{"class":239},[79,10568,10569],{"class":81,"line":480},[79,10570,9979],{"class":239},[79,10572,10573,10575],{"class":81,"line":486},[79,10574,4200],{"class":243},[79,10576,9991],{"class":239},[79,10578,10579,10581],{"class":81,"line":491},[79,10580,4200],{"class":243},[79,10582,10003],{"class":239},[79,10584,10585],{"class":81,"line":497},[79,10586,6197],{"class":239},[79,10588,10589,10591,10593],{"class":81,"line":503},[79,10590,2390],{"class":243},[79,10592,893],{"class":85},[79,10594,4191],{"class":239},[79,10596,10597],{"class":81,"line":509},[79,10598,3782],{"class":239},[79,10600,10601],{"class":81,"line":514},[79,10602,10603],{"class":2440},"    \u002F\u002F创建学生结构体变量\n",[79,10605,10606,10608,10610,10613,10615,10617,10619,10621,10623,10625,10627],{"class":81,"line":520},[79,10607,10089],{"class":243},[79,10609,10092],{"class":85},[79,10611,10612],{"class":239}," s",[79,10614,244],{"class":243},[79,10616,694],{"class":239},[79,10618,10110],{"class":89},[79,10620,2752],{"class":239},[79,10622,3023],{"class":96},[79,10624,2752],{"class":239},[79,10626,3947],{"class":96},[79,10628,6197],{"class":239},[79,10630,10631],{"class":81,"line":526},[79,10632,10633],{"class":2440},"    \u002F\u002F通过指针指向结构体变量\n",[79,10635,10636,10638,10640,10642,10644,10646],{"class":81,"line":532},[79,10637,10089],{"class":243},[79,10639,10092],{"class":85},[79,10641,853],{"class":243},[79,10643,19],{"class":239},[79,10645,8534],{"class":243},[79,10647,10648],{"class":239},"s\n",[79,10650,10651],{"class":81,"line":537},[79,10652,10653],{"class":2440},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[79,10655,10656,10658,10660,10663,10665,10668,10670,10673,10675],{"class":81,"line":543},[79,10657,3787],{"class":239},[79,10659,3414],{"class":243},[79,10661,10662],{"class":239},"p->name",[79,10664,3414],{"class":243},[79,10666,10667],{"class":239},"p->age",[79,10669,3414],{"class":243},[79,10671,10672],{"class":239},"p->score",[79,10674,3414],{"class":243},[79,10676,3436],{"class":239},[79,10678,10679],{"class":81,"line":549},[79,10680,3801],{"class":239},[14,10682,10684],{"id":10683},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10686,10687],{},"作用：结构体中的成员可以是另一个结构体",[19,10689,10690],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[51,10692,10694],{"className":2376,"code":10693,"language":2378,"meta":57,"style":57},"#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",[59,10695,10696,10702,10712,10718,10723,10731,10735,10739,10745,10751,10755,10760,10767,10771,10778,10782,10788,10793,10797,10805,10809,10814,10819,10824,10835,10847,10858,10871,10882,10893],{"__ignoreMap":57},[79,10697,10698,10700],{"class":81,"line":82},[79,10699,4166],{"class":243},[79,10701,4169],{"class":89},[79,10703,10704,10706,10708,10710],{"class":81,"line":167},[79,10705,4174],{"class":243},[79,10707,4177],{"class":243},[79,10709,4180],{"class":85},[79,10711,3531],{"class":239},[79,10713,10714,10716],{"class":81,"line":178},[79,10715,4166],{"class":243},[79,10717,9943],{"class":89},[79,10719,10720],{"class":81,"line":457},[79,10721,10722],{"class":2440},"\u002F\u002F定义学生结构体\n",[79,10724,10725,10727,10729],{"class":81,"line":462},[79,10726,9953],{"class":243},[79,10728,10092],{"class":85},[79,10730,4880],{"class":239},[79,10732,10733],{"class":81,"line":474},[79,10734,3782],{"class":239},[79,10736,10737],{"class":81,"line":480},[79,10738,9979],{"class":239},[79,10740,10741,10743],{"class":81,"line":486},[79,10742,4200],{"class":243},[79,10744,9991],{"class":239},[79,10746,10747,10749],{"class":81,"line":491},[79,10748,4200],{"class":243},[79,10750,10003],{"class":239},[79,10752,10753],{"class":81,"line":497},[79,10754,3801],{"class":239},[79,10756,10757],{"class":81,"line":503},[79,10758,10759],{"class":2440},"\u002F\u002F定义老师结构体\n",[79,10761,10762,10764],{"class":81,"line":509},[79,10763,9953],{"class":243},[79,10765,10766],{"class":85}," Teacher\n",[79,10768,10769],{"class":81,"line":514},[79,10770,3782],{"class":239},[79,10772,10773,10775],{"class":81,"line":520},[79,10774,4200],{"class":243},[79,10776,10777],{"class":239}," id;\n",[79,10779,10780],{"class":81,"line":526},[79,10781,9979],{"class":239},[79,10783,10784,10786],{"class":81,"line":532},[79,10785,4200],{"class":243},[79,10787,9991],{"class":239},[79,10789,10790],{"class":81,"line":537},[79,10791,10792],{"class":239},"    Student stu;\n",[79,10794,10795],{"class":81,"line":543},[79,10796,3801],{"class":239},[79,10798,10799,10801,10803],{"class":81,"line":549},[79,10800,2390],{"class":243},[79,10802,893],{"class":85},[79,10804,8173],{"class":239},[79,10806,10807],{"class":81,"line":555},[79,10808,3782],{"class":239},[79,10810,10811],{"class":81,"line":561},[79,10812,10813],{"class":2440},"    \u002F\u002F结构体嵌套结构体\n",[79,10815,10816],{"class":81,"line":567},[79,10817,10818],{"class":2440},"    \u002F\u002F创建老师\n",[79,10820,10821],{"class":81,"line":573},[79,10822,10823],{"class":239},"    Teacher t;\n",[79,10825,10826,10829,10831,10833],{"class":81,"line":579},[79,10827,10828],{"class":239},"    t.id",[79,10830,244],{"class":243},[79,10832,2686],{"class":96},[79,10834,3531],{"class":239},[79,10836,10837,10840,10842,10845],{"class":81,"line":584},[79,10838,10839],{"class":239},"    t.name",[79,10841,244],{"class":243},[79,10843,10844],{"class":89},"\"老王\"",[79,10846,3531],{"class":239},[79,10848,10849,10852,10854,10856],{"class":81,"line":590},[79,10850,10851],{"class":239},"    t.age",[79,10853,244],{"class":243},[79,10855,3023],{"class":96},[79,10857,3531],{"class":239},[79,10859,10860,10863,10865,10868],{"class":81,"line":596},[79,10861,10862],{"class":239},"    t.stu.name",[79,10864,244],{"class":243},[79,10866,10867],{"class":89},"\"小王\"",[79,10869,10870],{"class":239},"；\n",[79,10872,10873,10876,10878,10880],{"class":81,"line":602},[79,10874,10875],{"class":239},"    t.stu.age",[79,10877,244],{"class":243},[79,10879,3073],{"class":96},[79,10881,3531],{"class":239},[79,10883,10884,10887,10889,10891],{"class":81,"line":608},[79,10885,10886],{"class":239},"    t.stu.score",[79,10888,244],{"class":243},[79,10890,2718],{"class":96},[79,10892,3531],{"class":239},[79,10894,10895],{"class":81,"line":614},[79,10896,3801],{"class":239},[14,10898,10900],{"id":10899},"_45结构体做函数参数","4.5结构体做函数参数",[19,10902,10903],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[51,10905,10907],{"className":2376,"code":10906,"language":2378,"meta":57,"style":57},"#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",[59,10908,10909,10915,10925,10931,10937,10941,10945,10951,10957,10961,10966,10971,10988,10992,11025,11029,11034,11053,11057,11088,11092,11100,11104,11113,11125,11137,11149,11162,11170,11183,11195,11203],{"__ignoreMap":57},[79,10910,10911,10913],{"class":81,"line":82},[79,10912,4166],{"class":243},[79,10914,4169],{"class":89},[79,10916,10917,10919,10921,10923],{"class":81,"line":167},[79,10918,4174],{"class":243},[79,10920,4177],{"class":243},[79,10922,4180],{"class":85},[79,10924,3531],{"class":239},[79,10926,10927,10929],{"class":81,"line":178},[79,10928,4166],{"class":243},[79,10930,9943],{"class":89},[79,10932,10933,10935],{"class":81,"line":457},[79,10934,9953],{"class":243},[79,10936,9956],{"class":85},[79,10938,10939],{"class":81,"line":462},[79,10940,3782],{"class":239},[79,10942,10943],{"class":81,"line":474},[79,10944,9979],{"class":239},[79,10946,10947,10949],{"class":81,"line":480},[79,10948,4200],{"class":243},[79,10950,9991],{"class":239},[79,10952,10953,10955],{"class":81,"line":486},[79,10954,4200],{"class":243},[79,10956,10003],{"class":239},[79,10958,10959],{"class":81,"line":491},[79,10960,6197],{"class":239},[79,10962,10963],{"class":81,"line":497},[79,10964,10965],{"class":2440},"\u002F\u002F打印学生信息的函数\n",[79,10967,10968],{"class":81,"line":503},[79,10969,10970],{"class":2440},"\u002F\u002F值传递\n",[79,10972,10973,10975,10978,10980,10982,10984,10986],{"class":81,"line":509},[79,10974,7560],{"class":243},[79,10976,10977],{"class":85}," printStudent1",[79,10979,685],{"class":239},[79,10981,9953],{"class":243},[79,10983,10092],{"class":85},[79,10985,10612],{"class":7412},[79,10987,253],{"class":239},[79,10989,10990],{"class":81,"line":514},[79,10991,3782],{"class":239},[79,10993,10994,10996,10998,11001,11003,11006,11008,11011,11013,11015,11017,11020,11022],{"class":81,"line":520},[79,10995,8723],{"class":239},[79,10997,3414],{"class":243},[79,10999,11000],{"class":239}," s.name ",[79,11002,3414],{"class":243},[79,11004,11005],{"class":89}," \" \"",[79,11007,3681],{"class":243},[79,11009,11010],{"class":239}," s.age ",[79,11012,3414],{"class":243},[79,11014,11005],{"class":89},[79,11016,3681],{"class":243},[79,11018,11019],{"class":239}," s.score ",[79,11021,3414],{"class":243},[79,11023,11024],{"class":239}," endl;\n",[79,11026,11027],{"class":81,"line":526},[79,11028,3801],{"class":239},[79,11030,11031],{"class":81,"line":532},[79,11032,11033],{"class":2440},"\u002F\u002F地址传递\n",[79,11035,11036,11038,11041,11043,11045,11047,11049,11051],{"class":81,"line":537},[79,11037,7560],{"class":243},[79,11039,11040],{"class":85}," printStudent2",[79,11042,685],{"class":239},[79,11044,9953],{"class":243},[79,11046,10092],{"class":85},[79,11048,853],{"class":243},[79,11050,3068],{"class":7412},[79,11052,253],{"class":239},[79,11054,11055],{"class":81,"line":543},[79,11056,3782],{"class":239},[79,11058,11059,11061,11063,11066,11068,11070,11072,11075,11077,11079,11081,11084,11086],{"class":81,"line":549},[79,11060,8723],{"class":239},[79,11062,3414],{"class":243},[79,11064,11065],{"class":239}," s->name ",[79,11067,3414],{"class":243},[79,11069,11005],{"class":89},[79,11071,3681],{"class":243},[79,11073,11074],{"class":239}," s->age ",[79,11076,3414],{"class":243},[79,11078,11005],{"class":89},[79,11080,3681],{"class":243},[79,11082,11083],{"class":239}," s->score ",[79,11085,3414],{"class":243},[79,11087,11024],{"class":239},[79,11089,11090],{"class":81,"line":555},[79,11091,3801],{"class":239},[79,11093,11094,11096,11098],{"class":81,"line":561},[79,11095,2390],{"class":243},[79,11097,893],{"class":85},[79,11099,4191],{"class":239},[79,11101,11102],{"class":81,"line":567},[79,11103,3782],{"class":239},[79,11105,11106,11108,11110],{"class":81,"line":573},[79,11107,10089],{"class":243},[79,11109,10092],{"class":85},[79,11111,11112],{"class":239}," s;\n",[79,11114,11115,11118,11120,11123],{"class":81,"line":579},[79,11116,11117],{"class":239},"    s.name ",[79,11119,244],{"class":243},[79,11121,11122],{"class":89}," \"张三\"",[79,11124,3531],{"class":239},[79,11126,11127,11130,11132,11135],{"class":81,"line":584},[79,11128,11129],{"class":239},"    s.age ",[79,11131,244],{"class":243},[79,11133,11134],{"class":96}," 20",[79,11136,3531],{"class":239},[79,11138,11139,11142,11144,11147],{"class":81,"line":590},[79,11140,11141],{"class":239},"    s.score ",[79,11143,244],{"class":243},[79,11145,11146],{"class":96}," 85",[79,11148,3531],{"class":239},[79,11150,11151,11153,11155,11158,11160],{"class":81,"line":596},[79,11152,3787],{"class":239},[79,11154,3414],{"class":243},[79,11156,11157],{"class":89},"\"值传递:\"",[79,11159,3414],{"class":243},[79,11161,3436],{"class":239},[79,11163,11164,11167],{"class":81,"line":602},[79,11165,11166],{"class":85},"    printStudent1",[79,11168,11169],{"class":239},"(s);\n",[79,11171,11172,11174,11176,11179,11181],{"class":81,"line":608},[79,11173,3787],{"class":239},[79,11175,3414],{"class":243},[79,11177,11178],{"class":89},"\"地址传递:\"",[79,11180,3414],{"class":243},[79,11182,3436],{"class":239},[79,11184,11185,11188,11190,11192],{"class":81,"line":614},[79,11186,11187],{"class":85},"    printStudent2",[79,11189,685],{"class":239},[79,11191,2727],{"class":243},[79,11193,11194],{"class":239},"s); \n",[79,11196,11197,11199,11201],{"class":81,"line":620},[79,11198,711],{"class":243},[79,11200,670],{"class":96},[79,11202,3531],{"class":239},[79,11204,11205],{"class":81,"line":625},[79,11206,3801],{"class":239},[19,11208,11209],{},"注意：",[3377,11211,11212,11215],{},[29,11213,11214],{},"1.先定义结构体，不要在函数中写结构体的定义",[29,11216,11217],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11219,11221],{"id":11220},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,11223,11224],{},"用const防止误操作",[51,11226,11228],{"className":2376,"code":11227,"language":2378,"meta":57,"style":57},"#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",[59,11229,11230,11236,11246,11252,11257,11261,11265,11271,11277,11281,11297,11301,11324,11328,11336,11340,11361,11368,11372],{"__ignoreMap":57},[79,11231,11232,11234],{"class":81,"line":82},[79,11233,4166],{"class":243},[79,11235,4169],{"class":89},[79,11237,11238,11240,11242,11244],{"class":81,"line":167},[79,11239,4174],{"class":243},[79,11241,4177],{"class":243},[79,11243,4180],{"class":85},[79,11245,3531],{"class":239},[79,11247,11248,11250],{"class":81,"line":178},[79,11249,4166],{"class":243},[79,11251,9943],{"class":89},[79,11253,11254],{"class":81,"line":457},[79,11255,11256],{"class":239},"sctuct Student\n",[79,11258,11259],{"class":81,"line":462},[79,11260,3782],{"class":239},[79,11262,11263],{"class":81,"line":474},[79,11264,9979],{"class":239},[79,11266,11267,11269],{"class":81,"line":480},[79,11268,4200],{"class":243},[79,11270,9991],{"class":239},[79,11272,11273,11275],{"class":81,"line":486},[79,11274,4200],{"class":243},[79,11276,10003],{"class":239},[79,11278,11279],{"class":81,"line":491},[79,11280,6197],{"class":239},[79,11282,11283,11285,11288,11290,11293,11295],{"class":81,"line":497},[79,11284,7560],{"class":243},[79,11286,11287],{"class":85}," printStudents",[79,11289,685],{"class":239},[79,11291,11292],{"class":85},"student",[79,11294,10612],{"class":7412},[79,11296,253],{"class":239},[79,11298,11299],{"class":81,"line":503},[79,11300,3782],{"class":239},[79,11302,11303,11305,11307,11310,11312,11315,11317,11320,11322],{"class":81,"line":509},[79,11304,3787],{"class":239},[79,11306,3414],{"class":243},[79,11308,11309],{"class":239},"s.name",[79,11311,3414],{"class":243},[79,11313,11314],{"class":239},"s.age",[79,11316,3414],{"class":243},[79,11318,11319],{"class":239},"s.score",[79,11321,3414],{"class":243},[79,11323,3436],{"class":239},[79,11325,11326],{"class":81,"line":514},[79,11327,3801],{"class":239},[79,11329,11330,11332,11334],{"class":81,"line":520},[79,11331,2390],{"class":243},[79,11333,893],{"class":85},[79,11335,8173],{"class":239},[79,11337,11338],{"class":81,"line":526},[79,11339,3782],{"class":239},[79,11341,11342,11345,11347,11349,11351,11353,11355,11357,11359],{"class":81,"line":532},[79,11343,11344],{"class":239},"    Student s",[79,11346,244],{"class":243},[79,11348,694],{"class":239},[79,11350,10110],{"class":89},[79,11352,2752],{"class":239},[79,11354,3023],{"class":96},[79,11356,2752],{"class":239},[79,11358,3023],{"class":96},[79,11360,6197],{"class":239},[79,11362,11363,11366],{"class":81,"line":537},[79,11364,11365],{"class":85},"    printStudent",[79,11367,11169],{"class":239},[79,11369,11370],{"class":81,"line":543},[79,11371,454],{"emptyLinePlaceholder":453},[79,11373,11374],{"class":81,"line":549},[79,11375,3801],{"class":239},[19,11377,11209],{},[3377,11379,11380,11383,11386],{},[29,11381,11382],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[29,11384,11385],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[29,11387,11388],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[51,11390,11392],{"className":2376,"code":11391,"language":2378,"meta":57,"style":57},"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",[59,11393,11394,11413,11417,11422,11442],{"__ignoreMap":57},[79,11395,11396,11398,11400,11402,11404,11407,11409,11411],{"class":81,"line":82},[79,11397,7560],{"class":243},[79,11399,11287],{"class":85},[79,11401,685],{"class":239},[79,11403,8986],{"class":243},[79,11405,11406],{"class":85}," student",[79,11408,853],{"class":243},[79,11410,3068],{"class":7412},[79,11412,253],{"class":239},[79,11414,11415],{"class":81,"line":167},[79,11416,3782],{"class":239},[79,11418,11419],{"class":81,"line":178},[79,11420,11421],{"class":2440},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[79,11423,11424,11426,11428,11430,11432,11434,11436,11438,11440],{"class":81,"line":457},[79,11425,3787],{"class":239},[79,11427,3414],{"class":243},[79,11429,11309],{"class":239},[79,11431,3414],{"class":243},[79,11433,11314],{"class":239},[79,11435,3414],{"class":243},[79,11437,11319],{"class":239},[79,11439,3414],{"class":243},[79,11441,3436],{"class":239},[79,11443,11444],{"class":81,"line":462},[79,11445,3801],{"class":239},[14,11447,11449],{"id":11448},"_47案例","4.7案例",[26,11451,11452],{},[29,11453,11454],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[51,11456,11458],{"className":2376,"code":11457,"language":2378,"meta":57,"style":57},"#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",[59,11459,11460,11466,11476,11482,11489,11493,11499,11503,11508,11514,11520,11524,11528,11534,11538,11543,11548,11561,11565,11570,11596,11600,11612,11639,11643,11655,11664,11668,11673,11702,11706,11718,11727,11754,11765,11775,11779,11783,11787,11792,11816,11820,11844,11848,11867,11893,11897,11921,11943,11966,11970,11974,11978,11986,11990,11995,12015,12020,12033,12038,12064,12072,12077,12084,12088],{"__ignoreMap":57},[79,11461,11462,11464],{"class":81,"line":82},[79,11463,4166],{"class":243},[79,11465,4169],{"class":89},[79,11467,11468,11470,11472,11474],{"class":81,"line":167},[79,11469,4174],{"class":243},[79,11471,4177],{"class":243},[79,11473,4180],{"class":85},[79,11475,3531],{"class":239},[79,11477,11478,11480],{"class":81,"line":178},[79,11479,4166],{"class":243},[79,11481,9943],{"class":89},[79,11483,11484,11486],{"class":81,"line":457},[79,11485,4166],{"class":243},[79,11487,11488],{"class":89},"\u003Cctime>\n",[79,11490,11491],{"class":81,"line":462},[79,11492,10722],{"class":2440},[79,11494,11495,11497],{"class":81,"line":474},[79,11496,9953],{"class":243},[79,11498,9956],{"class":85},[79,11500,11501],{"class":81,"line":480},[79,11502,3782],{"class":239},[79,11504,11505],{"class":81,"line":486},[79,11506,11507],{"class":239},"    string sName;\n",[79,11509,11510,11512],{"class":81,"line":491},[79,11511,4200],{"class":243},[79,11513,9991],{"class":239},[79,11515,11516,11518],{"class":81,"line":497},[79,11517,4200],{"class":243},[79,11519,10003],{"class":239},[79,11521,11522],{"class":81,"line":503},[79,11523,6197],{"class":239},[79,11525,11526],{"class":81,"line":509},[79,11527,10759],{"class":2440},[79,11529,11530,11532],{"class":81,"line":514},[79,11531,9953],{"class":243},[79,11533,10766],{"class":85},[79,11535,11536],{"class":81,"line":520},[79,11537,3782],{"class":239},[79,11539,11540],{"class":81,"line":526},[79,11541,11542],{"class":239},"    string tName;\n",[79,11544,11545],{"class":81,"line":532},[79,11546,11547],{"class":2440},"    \u002F\u002F学生数组\n",[79,11549,11550,11552,11554,11557,11559],{"class":81,"line":537},[79,11551,10089],{"class":243},[79,11553,10092],{"class":85},[79,11555,11556],{"class":239}," sArray[",[79,11558,2694],{"class":96},[79,11560,6888],{"class":239},[79,11562,11563],{"class":81,"line":543},[79,11564,6197],{"class":239},[79,11566,11567],{"class":81,"line":549},[79,11568,11569],{"class":2440},"\u002F\u002F给老师和学生赋值的函数\n",[79,11571,11572,11574,11577,11579,11581,11584,11587,11590,11592,11594],{"class":81,"line":555},[79,11573,7560],{"class":243},[79,11575,11576],{"class":85}," allocateSpace",[79,11578,685],{"class":239},[79,11580,9953],{"class":243},[79,11582,11583],{"class":85}," Teacher",[79,11585,11586],{"class":7412}," tArray",[79,11588,11589],{"class":239},"[],",[79,11591,2390],{"class":243},[79,11593,9525],{"class":7412},[79,11595,253],{"class":239},[79,11597,11598],{"class":81,"line":561},[79,11599,3782],{"class":239},[79,11601,11602,11605,11607,11610],{"class":81,"line":567},[79,11603,11604],{"class":239},"    string nameSeed",[79,11606,244],{"class":243},[79,11608,11609],{"class":89},"\"ABCDE\"",[79,11611,3531],{"class":239},[79,11613,11614,11616,11618,11620,11623,11625,11627,11630,11632,11635,11637],{"class":81,"line":573},[79,11615,949],{"class":243},[79,11617,3887],{"class":239},[79,11619,2390],{"class":243},[79,11621,11622],{"class":239}," i ",[79,11624,244],{"class":243},[79,11626,670],{"class":96},[79,11628,11629],{"class":239},"; i ",[79,11631,392],{"class":243},[79,11633,11634],{"class":239}," len; i",[79,11636,4507],{"class":243},[79,11638,253],{"class":239},[79,11640,11641],{"class":81,"line":579},[79,11642,4245],{"class":239},[79,11644,11645,11648,11650,11653],{"class":81,"line":584},[79,11646,11647],{"class":239},"        tArray[i].tName ",[79,11649,244],{"class":243},[79,11651,11652],{"class":89}," \"Teacher_\"",[79,11654,3531],{"class":239},[79,11656,11657,11659,11661],{"class":81,"line":590},[79,11658,11647],{"class":239},[79,11660,1118],{"class":243},[79,11662,11663],{"class":239},"nameSeed[i];\n",[79,11665,11666],{"class":81,"line":596},[79,11667,454],{"emptyLinePlaceholder":453},[79,11669,11670],{"class":81,"line":602},[79,11671,11672],{"class":2440},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[79,11674,11675,11677,11679,11681,11684,11686,11688,11691,11693,11695,11698,11700],{"class":81,"line":608},[79,11676,5606],{"class":243},[79,11678,3887],{"class":239},[79,11680,2390],{"class":243},[79,11682,11683],{"class":239}," j ",[79,11685,244],{"class":243},[79,11687,670],{"class":96},[79,11689,11690],{"class":239},"; j ",[79,11692,392],{"class":243},[79,11694,4363],{"class":96},[79,11696,11697],{"class":239},"; j",[79,11699,4507],{"class":243},[79,11701,253],{"class":239},[79,11703,11704],{"class":81,"line":614},[79,11705,4723],{"class":239},[79,11707,11708,11711,11713,11716],{"class":81,"line":620},[79,11709,11710],{"class":239},"            tArray[i].sArray[j].sName ",[79,11712,244],{"class":243},[79,11714,11715],{"class":89}," \"Student_\"",[79,11717,3531],{"class":239},[79,11719,11720,11722,11724],{"class":81,"line":625},[79,11721,11710],{"class":239},[79,11723,1118],{"class":243},[79,11725,11726],{"class":239}," nameSeed[j];\n",[79,11728,11729,11732,11735,11737,11739,11741,11743,11745,11747,11749,11751],{"class":81,"line":630},[79,11730,11731],{"class":243},"            int",[79,11733,11734],{"class":239}," random",[79,11736,244],{"class":243},[79,11738,4638],{"class":85},[79,11740,4641],{"class":239},[79,11742,1137],{"class":243},[79,11744,3279],{"class":96},[79,11746,2855],{"class":243},[79,11748,2775],{"class":96},[79,11750,2437],{"class":239},[79,11752,11753],{"class":2440},"\u002F\u002F40~99\n",[79,11755,11756,11759,11761,11763],{"class":81,"line":648},[79,11757,11758],{"class":239},"            tArray[i].sArray[j].age ",[79,11760,244],{"class":243},[79,11762,11134],{"class":96},[79,11764,3531],{"class":239},[79,11766,11767,11770,11772],{"class":81,"line":659},[79,11768,11769],{"class":239},"            tArray[i].sArray[j].score ",[79,11771,244],{"class":243},[79,11773,11774],{"class":239}," random;\n",[79,11776,11777],{"class":81,"line":676},[79,11778,4742],{"class":239},[79,11780,11781],{"class":81,"line":708},[79,11782,4402],{"class":239},[79,11784,11785],{"class":81,"line":717},[79,11786,3801],{"class":239},[79,11788,11789],{"class":81,"line":722},[79,11790,11791],{"class":2440},"\u002F\u002F打印所有信息的函数\n",[79,11793,11794,11796,11799,11801,11803,11805,11807,11810,11812,11814],{"class":81,"line":727},[79,11795,7560],{"class":243},[79,11797,11798],{"class":85}," printInfo",[79,11800,685],{"class":239},[79,11802,9953],{"class":243},[79,11804,11583],{"class":85},[79,11806,11586],{"class":7412},[79,11808,11809],{"class":239},"[], ",[79,11811,2390],{"class":243},[79,11813,9525],{"class":7412},[79,11815,253],{"class":239},[79,11817,11818],{"class":81,"line":738},[79,11819,3782],{"class":239},[79,11821,11822,11824,11826,11828,11830,11832,11834,11836,11838,11840,11842],{"class":81,"line":753},[79,11823,949],{"class":243},[79,11825,3887],{"class":239},[79,11827,2390],{"class":243},[79,11829,11622],{"class":239},[79,11831,244],{"class":243},[79,11833,670],{"class":96},[79,11835,11629],{"class":239},[79,11837,392],{"class":243},[79,11839,11634],{"class":239},[79,11841,4507],{"class":243},[79,11843,253],{"class":239},[79,11845,11846],{"class":81,"line":768},[79,11847,4245],{"class":239},[79,11849,11850,11853,11855,11858,11860,11863,11865],{"class":81,"line":776},[79,11851,11852],{"class":239},"        cout ",[79,11854,3414],{"class":243},[79,11856,11857],{"class":89}," \"Teacher: \"",[79,11859,3681],{"class":243},[79,11861,11862],{"class":239}," tArray[i].tName ",[79,11864,3414],{"class":243},[79,11866,11024],{"class":239},[79,11868,11869,11871,11873,11875,11877,11879,11881,11883,11885,11887,11889,11891],{"class":81,"line":781},[79,11870,5606],{"class":243},[79,11872,3887],{"class":239},[79,11874,2390],{"class":243},[79,11876,11683],{"class":239},[79,11878,244],{"class":243},[79,11880,670],{"class":96},[79,11882,11690],{"class":239},[79,11884,392],{"class":243},[79,11886,4363],{"class":96},[79,11888,11697],{"class":239},[79,11890,4507],{"class":243},[79,11892,253],{"class":239},[79,11894,11895],{"class":81,"line":786},[79,11896,4723],{"class":239},[79,11898,11899,11902,11904,11907,11909,11912,11914,11917,11919],{"class":81,"line":802},[79,11900,11901],{"class":239},"            cout ",[79,11903,3414],{"class":243},[79,11905,11906],{"class":89}," \"",[79,11908,3471],{"class":96},[79,11910,11911],{"class":89},"Student: \"",[79,11913,3681],{"class":243},[79,11915,11916],{"class":239}," tArray[i].sArray[j].sName",[79,11918,3414],{"class":243},[79,11920,3436],{"class":239},[79,11922,11923,11925,11927,11929,11931,11934,11936,11939,11941],{"class":81,"line":815},[79,11924,11901],{"class":239},[79,11926,3414],{"class":243},[79,11928,11906],{"class":89},[79,11930,3471],{"class":96},[79,11932,11933],{"class":89},"Age: \"",[79,11935,3681],{"class":243},[79,11937,11938],{"class":239}," tArray[i].sArray[j].age ",[79,11940,3414],{"class":243},[79,11942,11024],{"class":239},[79,11944,11945,11947,11949,11951,11953,11956,11958,11961,11963],{"class":81,"line":828},[79,11946,11901],{"class":239},[79,11948,3414],{"class":243},[79,11950,11906],{"class":89},[79,11952,3471],{"class":96},[79,11954,11955],{"class":89},"Score: \"",[79,11957,3681],{"class":243},[79,11959,11960],{"class":239}," tArray[i].sArray[j].score ",[79,11962,3414],{"class":243},[79,11964,11965],{"class":239}," endl;   \n",[79,11967,11968],{"class":81,"line":842},[79,11969,4742],{"class":239},[79,11971,11972],{"class":81,"line":859},[79,11973,4402],{"class":239},[79,11975,11976],{"class":81,"line":878},[79,11977,3801],{"class":239},[79,11979,11980,11982,11984],{"class":81,"line":883},[79,11981,2390],{"class":243},[79,11983,893],{"class":85},[79,11985,4191],{"class":239},[79,11987,11988],{"class":81,"line":888},[79,11989,3782],{"class":239},[79,11991,11992],{"class":81,"line":904},[79,11993,11994],{"class":2440},"    \u002F\u002F随机数种子\n",[79,11996,11997,11999,12001,12003,12005,12007,12009,12011,12013],{"class":81,"line":919},[79,11998,4588],{"class":85},[79,12000,4591],{"class":239},[79,12002,4594],{"class":243},[79,12004,4597],{"class":243},[79,12006,2803],{"class":239},[79,12008,4602],{"class":85},[79,12010,685],{"class":239},[79,12012,4607],{"class":96},[79,12014,4610],{"class":239},[79,12016,12017],{"class":81,"line":930},[79,12018,12019],{"class":2440},"    \u002F\u002F1.创建3名老师的数组\n",[79,12021,12022,12024,12026,12029,12031],{"class":81,"line":941},[79,12023,10089],{"class":243},[79,12025,11583],{"class":85},[79,12027,12028],{"class":239}," tArray[",[79,12030,1188],{"class":96},[79,12032,6888],{"class":239},[79,12034,12035],{"class":81,"line":946},[79,12036,12037],{"class":2440},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[79,12039,12040,12042,12045,12047,12050,12053,12055,12057,12060,12062],{"class":81,"line":969},[79,12041,4200],{"class":243},[79,12043,12044],{"class":239}," len ",[79,12046,244],{"class":243},[79,12048,12049],{"class":243}," sizeof",[79,12051,12052],{"class":239},"(tArray) ",[79,12054,2957],{"class":243},[79,12056,12049],{"class":243},[79,12058,12059],{"class":239},"(tArray[",[79,12061,1030],{"class":96},[79,12063,6058],{"class":239},[79,12065,12066,12069],{"class":81,"line":975},[79,12067,12068],{"class":85},"    allocateSpace",[79,12070,12071],{"class":239},"(tArray, len);\n",[79,12073,12074],{"class":81,"line":989},[79,12075,12076],{"class":2440},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[79,12078,12079,12082],{"class":81,"line":1003},[79,12080,12081],{"class":85},"    printInfo",[79,12083,12071],{"class":239},[79,12085,12086],{"class":81,"line":1019},[79,12087,454],{"emptyLinePlaceholder":453},[79,12089,12090],{"class":81,"line":1024},[79,12091,3801],{"class":239},[26,12093,12094],{"start":167},[29,12095,12096,12099],{},[2528,12097,12098],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,12101,12102],{},"五名英雄信息如下：",[51,12104,12108],{"className":12105,"code":12106,"language":12107,"meta":57,"style":57},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[59,12109,12110,12128,12145,12162,12179],{"__ignoreMap":57},[79,12111,12112,12114,12117,12119,12121,12123,12126],{"class":81,"line":82},[79,12113,7115],{"class":239},[79,12115,12116],{"class":89},"\"刘备\"",[79,12118,2752],{"class":239},[79,12120,3148],{"class":96},[79,12122,2752],{"class":239},[79,12124,12125],{"class":89},"\"男\"",[79,12127,7128],{"class":239},[79,12129,12130,12132,12135,12137,12139,12141,12143],{"class":81,"line":167},[79,12131,7115],{"class":239},[79,12133,12134],{"class":89},"\"关羽\"",[79,12136,2752],{"class":239},[79,12138,3123],{"class":96},[79,12140,2752],{"class":239},[79,12142,12125],{"class":89},[79,12144,7128],{"class":239},[79,12146,12147,12149,12152,12154,12156,12158,12160],{"class":81,"line":178},[79,12148,7115],{"class":239},[79,12150,12151],{"class":89},"\"张飞\"",[79,12153,2752],{"class":239},[79,12155,3073],{"class":96},[79,12157,2752],{"class":239},[79,12159,12125],{"class":89},[79,12161,7128],{"class":239},[79,12163,12164,12166,12169,12171,12173,12175,12177],{"class":81,"line":457},[79,12165,7115],{"class":239},[79,12167,12168],{"class":89},"\"赵云\"",[79,12170,2752],{"class":239},[79,12172,3098],{"class":96},[79,12174,2752],{"class":239},[79,12176,12125],{"class":89},[79,12178,7128],{"class":239},[79,12180,12181,12183,12186,12188,12190,12192,12195],{"class":81,"line":462},[79,12182,7115],{"class":239},[79,12184,12185],{"class":89},"\"貂蝉\"",[79,12187,2752],{"class":239},[79,12189,3048],{"class":96},[79,12191,2752],{"class":239},[79,12193,12194],{"class":89},"\"女\"",[79,12196,7128],{"class":239},[19,12198,12199],{},"代码：",[51,12201,12203],{"className":2376,"code":12202,"language":2378,"meta":57,"style":57},"#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",[59,12204,12205,12211,12221,12227,12234,12238,12242,12248,12253,12257,12262,12285,12289,12314,12318,12351,12356,12385,12390,12405,12431,12451,12456,12461,12465,12469,12474,12496,12500,12524,12528,12590,12594,12598,12606,12610,12615,12626,12630,12646,12662,12678,12694,12710,12714,12734,12756,12761,12774,12781,12786,12792,12797,12810,12816],{"__ignoreMap":57},[79,12206,12207,12209],{"class":81,"line":82},[79,12208,4166],{"class":243},[79,12210,4169],{"class":89},[79,12212,12213,12215,12217,12219],{"class":81,"line":167},[79,12214,4174],{"class":243},[79,12216,4177],{"class":243},[79,12218,4180],{"class":85},[79,12220,3531],{"class":239},[79,12222,12223,12225],{"class":81,"line":178},[79,12224,4166],{"class":243},[79,12226,9943],{"class":89},[79,12228,12229,12231],{"class":81,"line":457},[79,12230,9953],{"class":243},[79,12232,12233],{"class":85}," Sanguo\n",[79,12235,12236],{"class":81,"line":462},[79,12237,3782],{"class":239},[79,12239,12240],{"class":81,"line":474},[79,12241,9979],{"class":239},[79,12243,12244,12246],{"class":81,"line":480},[79,12245,4200],{"class":243},[79,12247,9991],{"class":239},[79,12249,12250],{"class":81,"line":486},[79,12251,12252],{"class":239},"    string gender;\n",[79,12254,12255],{"class":81,"line":491},[79,12256,6197],{"class":239},[79,12258,12259],{"class":81,"line":497},[79,12260,12261],{"class":2440},"\u002F\u002F定义排序函数\n",[79,12263,12264,12266,12268,12270,12273,12275,12277,12279,12281,12283],{"class":81,"line":503},[79,12265,7560],{"class":243},[79,12267,9510],{"class":85},[79,12269,685],{"class":239},[79,12271,12272],{"class":85},"Sanguo",[79,12274,853],{"class":243},[79,12276,3068],{"class":7412},[79,12278,2752],{"class":239},[79,12280,2390],{"class":243},[79,12282,9525],{"class":7412},[79,12284,253],{"class":239},[79,12286,12287],{"class":81,"line":509},[79,12288,3782],{"class":239},[79,12290,12291,12293,12295,12297,12299,12301,12303,12305,12307,12310,12312],{"class":81,"line":514},[79,12292,949],{"class":243},[79,12294,685],{"class":239},[79,12296,2390],{"class":243},[79,12298,5237],{"class":239},[79,12300,244],{"class":243},[79,12302,1030],{"class":96},[79,12304,5244],{"class":239},[79,12306,392],{"class":243},[79,12308,12309],{"class":239},"len;i",[79,12311,4507],{"class":243},[79,12313,253],{"class":239},[79,12315,12316],{"class":81,"line":520},[79,12317,4245],{"class":239},[79,12319,12320,12323,12325,12327,12329,12331,12333,12335,12337,12339,12341,12343,12345,12347,12349],{"class":81,"line":526},[79,12321,12322],{"class":243},"     for",[79,12324,3887],{"class":239},[79,12326,2390],{"class":243},[79,12328,5613],{"class":239},[79,12330,244],{"class":243},[79,12332,1030],{"class":96},[79,12334,5620],{"class":239},[79,12336,392],{"class":243},[79,12338,9552],{"class":239},[79,12340,320],{"class":243},[79,12342,1072],{"class":96},[79,12344,320],{"class":243},[79,12346,5753],{"class":239},[79,12348,4507],{"class":243},[79,12350,253],{"class":239},[79,12352,12353],{"class":81,"line":532},[79,12354,12355],{"class":239},"     {\n",[79,12357,12358,12361,12364,12366,12369,12371,12374,12376,12378,12380,12382],{"class":81,"line":537},[79,12359,12360],{"class":243},"         if",[79,12362,12363],{"class":239}," ((s",[79,12365,2855],{"class":243},[79,12367,12368],{"class":239},"j)->age ",[79,12370,3330],{"class":243},[79,12372,12373],{"class":239}," (s",[79,12375,2855],{"class":243},[79,12377,2841],{"class":239},[79,12379,2855],{"class":243},[79,12381,1072],{"class":96},[79,12383,12384],{"class":239},")->age)\n",[79,12386,12387],{"class":81,"line":543},[79,12388,12389],{"class":239},"         {\n",[79,12391,12392,12395,12397,12400,12402],{"class":81,"line":549},[79,12393,12394],{"class":239},"             Sanguo temp",[79,12396,9347],{"class":243},[79,12398,12399],{"class":239},"(s",[79,12401,2855],{"class":243},[79,12403,12404],{"class":239},"j);\n",[79,12406,12407,12410,12412,12414,12417,12419,12421,12423,12425,12427,12429],{"class":81,"line":555},[79,12408,12409],{"class":243},"             *",[79,12411,12399],{"class":239},[79,12413,2855],{"class":243},[79,12415,12416],{"class":239},"j)",[79,12418,9347],{"class":243},[79,12420,12399],{"class":239},[79,12422,2855],{"class":243},[79,12424,2841],{"class":239},[79,12426,2855],{"class":243},[79,12428,1072],{"class":96},[79,12430,4925],{"class":239},[79,12432,12433,12435,12437,12439,12441,12443,12445,12447,12449],{"class":81,"line":561},[79,12434,12409],{"class":243},[79,12436,12399],{"class":239},[79,12438,2855],{"class":243},[79,12440,2841],{"class":239},[79,12442,2855],{"class":243},[79,12444,1072],{"class":96},[79,12446,2803],{"class":239},[79,12448,244],{"class":243},[79,12450,6480],{"class":239},[79,12452,12453],{"class":81,"line":567},[79,12454,12455],{"class":239},"         }\n",[79,12457,12458],{"class":81,"line":573},[79,12459,12460],{"class":239},"     }\n",[79,12462,12463],{"class":81,"line":579},[79,12464,4402],{"class":239},[79,12466,12467],{"class":81,"line":584},[79,12468,3801],{"class":239},[79,12470,12471],{"class":81,"line":590},[79,12472,12473],{"class":2440},"\u002F\u002F定义打印函数\n",[79,12475,12476,12478,12480,12482,12484,12486,12488,12490,12492,12494],{"class":81,"line":596},[79,12477,7560],{"class":243},[79,12479,11798],{"class":85},[79,12481,685],{"class":239},[79,12483,12272],{"class":85},[79,12485,853],{"class":243},[79,12487,3068],{"class":7412},[79,12489,2752],{"class":239},[79,12491,2390],{"class":243},[79,12493,9525],{"class":7412},[79,12495,253],{"class":239},[79,12497,12498],{"class":81,"line":602},[79,12499,3782],{"class":239},[79,12501,12502,12504,12506,12508,12510,12512,12514,12516,12518,12520,12522],{"class":81,"line":608},[79,12503,949],{"class":243},[79,12505,3887],{"class":239},[79,12507,2390],{"class":243},[79,12509,5237],{"class":239},[79,12511,244],{"class":243},[79,12513,1030],{"class":96},[79,12515,5244],{"class":239},[79,12517,392],{"class":243},[79,12519,12309],{"class":239},[79,12521,4507],{"class":243},[79,12523,253],{"class":239},[79,12525,12526],{"class":81,"line":614},[79,12527,4245],{"class":239},[79,12529,12530,12532,12534,12536,12538,12541,12543,12545,12547,12550,12552,12554,12556,12559,12561,12563,12565,12568,12570,12572,12574,12577,12579,12581,12583,12586,12588],{"class":81,"line":620},[79,12531,5654],{"class":239},[79,12533,3414],{"class":243},[79,12535,703],{"class":89},[79,12537,3471],{"class":96},[79,12539,12540],{"class":89},"姓名：\"",[79,12542,3414],{"class":243},[79,12544,12399],{"class":239},[79,12546,2855],{"class":243},[79,12548,12549],{"class":239},"i)->name",[79,12551,3414],{"class":243},[79,12553,703],{"class":89},[79,12555,3471],{"class":96},[79,12557,12558],{"class":89},"年龄：\"",[79,12560,3414],{"class":243},[79,12562,12399],{"class":239},[79,12564,2855],{"class":243},[79,12566,12567],{"class":239},"i)->age",[79,12569,3414],{"class":243},[79,12571,703],{"class":89},[79,12573,3471],{"class":96},[79,12575,12576],{"class":89},"性别：\"",[79,12578,3414],{"class":243},[79,12580,12399],{"class":239},[79,12582,2855],{"class":243},[79,12584,12585],{"class":239},"i)->gender",[79,12587,3414],{"class":243},[79,12589,3436],{"class":239},[79,12591,12592],{"class":81,"line":625},[79,12593,4402],{"class":239},[79,12595,12596],{"class":81,"line":630},[79,12597,3801],{"class":239},[79,12599,12600,12602,12604],{"class":81,"line":648},[79,12601,2390],{"class":243},[79,12603,893],{"class":85},[79,12605,4191],{"class":239},[79,12607,12608],{"class":81,"line":659},[79,12609,3782],{"class":239},[79,12611,12612],{"class":81,"line":676},[79,12613,12614],{"class":2440},"    \u002F\u002F定义结构体变量\n",[79,12616,12617,12620,12622,12624],{"class":81,"line":708},[79,12618,12619],{"class":239},"    Sanguo s1[",[79,12621,2694],{"class":96},[79,12623,3311],{"class":239},[79,12625,7106],{"class":243},[79,12627,12628],{"class":81,"line":717},[79,12629,4245],{"class":239},[79,12631,12632,12634,12636,12638,12640,12642,12644],{"class":81,"line":722},[79,12633,7115],{"class":239},[79,12635,12116],{"class":89},[79,12637,2752],{"class":239},[79,12639,3148],{"class":96},[79,12641,2752],{"class":239},[79,12643,12125],{"class":89},[79,12645,7128],{"class":239},[79,12647,12648,12650,12652,12654,12656,12658,12660],{"class":81,"line":727},[79,12649,7115],{"class":239},[79,12651,12134],{"class":89},[79,12653,2752],{"class":239},[79,12655,3123],{"class":96},[79,12657,2752],{"class":239},[79,12659,12125],{"class":89},[79,12661,7128],{"class":239},[79,12663,12664,12666,12668,12670,12672,12674,12676],{"class":81,"line":738},[79,12665,7115],{"class":239},[79,12667,12151],{"class":89},[79,12669,2752],{"class":239},[79,12671,3073],{"class":96},[79,12673,2752],{"class":239},[79,12675,12125],{"class":89},[79,12677,7128],{"class":239},[79,12679,12680,12682,12684,12686,12688,12690,12692],{"class":81,"line":753},[79,12681,7115],{"class":239},[79,12683,12168],{"class":89},[79,12685,2752],{"class":239},[79,12687,3098],{"class":96},[79,12689,2752],{"class":239},[79,12691,12125],{"class":89},[79,12693,7128],{"class":239},[79,12695,12696,12698,12700,12702,12704,12706,12708],{"class":81,"line":768},[79,12697,7115],{"class":239},[79,12699,12185],{"class":89},[79,12701,2752],{"class":239},[79,12703,3048],{"class":96},[79,12705,2752],{"class":239},[79,12707,12194],{"class":89},[79,12709,7128],{"class":239},[79,12711,12712],{"class":81,"line":776},[79,12713,7149],{"class":239},[79,12715,12716,12718,12720,12722,12725,12727,12730,12732],{"class":81,"line":781},[79,12717,4200],{"class":243},[79,12719,9525],{"class":239},[79,12721,6403],{"class":243},[79,12723,12724],{"class":239},"(s1)",[79,12726,6409],{"class":243},[79,12728,12729],{"class":239},"(s1[",[79,12731,1030],{"class":96},[79,12733,6058],{"class":239},[79,12735,12736,12739,12741,12744,12746,12749,12752,12754],{"class":81,"line":786},[79,12737,12738],{"class":239},"    Sanguo ",[79,12740,2829],{"class":243},[79,12742,12743],{"class":239},"s ",[79,12745,244],{"class":243},[79,12747,12748],{"class":243}," &",[79,12750,12751],{"class":239},"s1[",[79,12753,1030],{"class":96},[79,12755,6888],{"class":239},[79,12757,12758],{"class":81,"line":802},[79,12759,12760],{"class":2440},"    \u002F\u002F排序前：\n",[79,12762,12763,12765,12767,12770,12772],{"class":81,"line":815},[79,12764,8723],{"class":239},[79,12766,3414],{"class":243},[79,12768,12769],{"class":89}," \"排序前：\"",[79,12771,3681],{"class":243},[79,12773,11024],{"class":239},[79,12775,12776,12778],{"class":81,"line":828},[79,12777,12081],{"class":85},[79,12779,12780],{"class":239},"(s,len);\n",[79,12782,12783],{"class":81,"line":842},[79,12784,12785],{"class":2440},"    \u002F\u002F调用排序函数\n",[79,12787,12788,12790],{"class":81,"line":859},[79,12789,9792],{"class":85},[79,12791,12780],{"class":239},[79,12793,12794],{"class":81,"line":878},[79,12795,12796],{"class":2440},"    \u002F\u002F排序后\n",[79,12798,12799,12801,12803,12806,12808],{"class":81,"line":883},[79,12800,8723],{"class":239},[79,12802,3414],{"class":243},[79,12804,12805],{"class":89}," \"排序后：\"",[79,12807,3681],{"class":243},[79,12809,11024],{"class":239},[79,12811,12812,12814],{"class":81,"line":888},[79,12813,12081],{"class":85},[79,12815,12780],{"class":239},[79,12817,12818],{"class":81,"line":904},[79,12819,3801],{"class":239},[19,12821,12822,12823,12825],{},"注意：使用指针时直接用传首地址**&s",[79,12824,1030],{},"**",[2287,12827,12828],{},"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":57,"searchDepth":167,"depth":167,"links":12830},[12831,12832,12833,12834,12835,12836,12837],{"id":9897,"depth":167,"text":9898},{"id":10249,"depth":167,"text":10250},{"id":10518,"depth":167,"text":10519},{"id":10683,"depth":167,"text":10684},{"id":10899,"depth":167,"text":10900},{"id":11220,"depth":167,"text":11221},{"id":11448,"depth":167,"text":11449},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9886,"description":9894},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12844,"title":12845,"body":12846,"description":57,"extension":2314,"meta":14189,"navigation":453,"path":14190,"seo":14191,"stem":14192,"__hash__":14193},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12847,"toc":14183},[12848,12851,12855,12861,12875,12880,12883,12887,12894,12900,12903,12910,12916,12921,12924,12927,12930,13494,13497,13511,13515,13520,13536,13676,13679,13685,13688,13693,13701,13809,13812,13817,13820,13825,13828,13834,13837,14180],[10,12849,12845],{"id":12850},"_5程序内存模型",[14,12852,12854],{"id":12853},"_51内存分区模型","5.1内存分区模型",[19,12856,12857,12858],{},"C++程序在执行时，将内存大方向划分为",[2528,12859,12860],{},"4个区域",[3377,12862,12863,12866,12869,12872],{},[29,12864,12865],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[29,12867,12868],{},"全局区：存放全局变量和静态变量以及常量",[29,12870,12871],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[29,12873,12874],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12876,12877],{},[2528,12878,12879],{},"内存四区意义：",[19,12881,12882],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[265,12884,12886],{"id":12885},"_511程序运行前","5.1.1程序运行前",[19,12888,12889,12890,12893],{},"​\t在程序编译后，生成了exe可执行程序，",[2528,12891,12892],{},"未执行该程序前","分为两个区域",[19,12895,12896,12897],{},"​\t",[2528,12898,12899],{},"代码区：",[19,12901,12902],{},"​\t\t存放 CPU 执行的机器指令",[19,12904,12905,12906,12909],{},"​\t\t代码区是",[2528,12907,12908],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12911,12905,12912,12915],{},[2528,12913,12914],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12917,12896,12918],{},[2528,12919,12920],{},"全局区：",[19,12922,12923],{},"​\t\t全局变量和静态变量存放在此.",[19,12925,12926],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12928,12929],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[51,12931,12933],{"className":2376,"code":12932,"language":2378,"meta":57,"style":57},"\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",[59,12934,12935,12940,12953,12966,12970,12975,12990,13005,13009,13018,13022,13027,13040,13053,13057,13062,13088,13114,13118,13145,13171,13175,13180,13196,13211,13215,13241,13267,13271,13296,13321,13325,13351,13377,13381,13397,13412,13438,13464,13468,13478,13482,13490],{"__ignoreMap":57},[79,12936,12937],{"class":81,"line":82},[79,12938,12939],{"class":2440},"\u002F\u002F全局变量\n",[79,12941,12942,12944,12947,12949,12951],{"class":81,"line":167},[79,12943,2390],{"class":243},[79,12945,12946],{"class":239}," g_a ",[79,12948,244],{"class":243},[79,12950,4253],{"class":96},[79,12952,3531],{"class":239},[79,12954,12955,12957,12960,12962,12964],{"class":81,"line":178},[79,12956,2390],{"class":243},[79,12958,12959],{"class":239}," g_b ",[79,12961,244],{"class":243},[79,12963,4253],{"class":96},[79,12965,3531],{"class":239},[79,12967,12968],{"class":81,"line":457},[79,12969,454],{"emptyLinePlaceholder":453},[79,12971,12972],{"class":81,"line":462},[79,12973,12974],{"class":2440},"\u002F\u002F全局常量\n",[79,12976,12977,12979,12981,12984,12986,12988],{"class":81,"line":474},[79,12978,8986],{"class":243},[79,12980,4597],{"class":243},[79,12982,12983],{"class":239}," c_g_a ",[79,12985,244],{"class":243},[79,12987,4253],{"class":96},[79,12989,3531],{"class":239},[79,12991,12992,12994,12996,12999,13001,13003],{"class":81,"line":480},[79,12993,8986],{"class":243},[79,12995,4597],{"class":243},[79,12997,12998],{"class":239}," c_g_b ",[79,13000,244],{"class":243},[79,13002,4253],{"class":96},[79,13004,3531],{"class":239},[79,13006,13007],{"class":81,"line":486},[79,13008,454],{"emptyLinePlaceholder":453},[79,13010,13011,13013,13015],{"class":81,"line":491},[79,13012,2390],{"class":243},[79,13014,893],{"class":85},[79,13016,13017],{"class":239},"() {\n",[79,13019,13020],{"class":81,"line":497},[79,13021,454],{"emptyLinePlaceholder":453},[79,13023,13024],{"class":81,"line":503},[79,13025,13026],{"class":2440},"    \u002F\u002F局部变量\n",[79,13028,13029,13031,13034,13036,13038],{"class":81,"line":509},[79,13030,4200],{"class":243},[79,13032,13033],{"class":239}," a ",[79,13035,244],{"class":243},[79,13037,4253],{"class":96},[79,13039,3531],{"class":239},[79,13041,13042,13044,13047,13049,13051],{"class":81,"line":514},[79,13043,4200],{"class":243},[79,13045,13046],{"class":239}," b ",[79,13048,244],{"class":243},[79,13050,4253],{"class":96},[79,13052,3531],{"class":239},[79,13054,13055],{"class":81,"line":520},[79,13056,454],{"emptyLinePlaceholder":453},[79,13058,13059],{"class":81,"line":526},[79,13060,13061],{"class":2440},"    \u002F\u002F打印地址\n",[79,13063,13064,13066,13068,13071,13073,13075,13077,13079,13081,13084,13086],{"class":81,"line":532},[79,13065,8723],{"class":239},[79,13067,3414],{"class":243},[79,13069,13070],{"class":89}," \"局部变量a地址为： \"",[79,13072,3681],{"class":243},[79,13074,3887],{"class":239},[79,13076,2390],{"class":243},[79,13078,2803],{"class":239},[79,13080,2727],{"class":243},[79,13082,13083],{"class":239},"a ",[79,13085,3414],{"class":243},[79,13087,11024],{"class":239},[79,13089,13090,13092,13094,13097,13099,13101,13103,13105,13107,13110,13112],{"class":81,"line":537},[79,13091,8723],{"class":239},[79,13093,3414],{"class":243},[79,13095,13096],{"class":89}," \"局部变量b地址为： \"",[79,13098,3681],{"class":243},[79,13100,3887],{"class":239},[79,13102,2390],{"class":243},[79,13104,2803],{"class":239},[79,13106,2727],{"class":243},[79,13108,13109],{"class":239},"b ",[79,13111,3414],{"class":243},[79,13113,11024],{"class":239},[79,13115,13116],{"class":81,"line":543},[79,13117,454],{"emptyLinePlaceholder":453},[79,13119,13120,13122,13124,13127,13129,13132,13134,13136,13138,13141,13143],{"class":81,"line":549},[79,13121,8723],{"class":239},[79,13123,3414],{"class":243},[79,13125,13126],{"class":89}," \"全局变量g_a地址为： \"",[79,13128,3681],{"class":243},[79,13130,13131],{"class":239},"  (",[79,13133,2390],{"class":243},[79,13135,2803],{"class":239},[79,13137,2727],{"class":243},[79,13139,13140],{"class":239},"g_a ",[79,13142,3414],{"class":243},[79,13144,11024],{"class":239},[79,13146,13147,13149,13151,13154,13156,13158,13160,13162,13164,13167,13169],{"class":81,"line":555},[79,13148,8723],{"class":239},[79,13150,3414],{"class":243},[79,13152,13153],{"class":89}," \"全局变量g_b地址为： \"",[79,13155,3681],{"class":243},[79,13157,13131],{"class":239},[79,13159,2390],{"class":243},[79,13161,2803],{"class":239},[79,13163,2727],{"class":243},[79,13165,13166],{"class":239},"g_b ",[79,13168,3414],{"class":243},[79,13170,11024],{"class":239},[79,13172,13173],{"class":81,"line":561},[79,13174,454],{"emptyLinePlaceholder":453},[79,13176,13177],{"class":81,"line":567},[79,13178,13179],{"class":2440},"    \u002F\u002F静态变量\n",[79,13181,13182,13185,13187,13190,13192,13194],{"class":81,"line":573},[79,13183,13184],{"class":243},"    static",[79,13186,4597],{"class":243},[79,13188,13189],{"class":239}," s_a ",[79,13191,244],{"class":243},[79,13193,4253],{"class":96},[79,13195,3531],{"class":239},[79,13197,13198,13200,13202,13205,13207,13209],{"class":81,"line":579},[79,13199,13184],{"class":243},[79,13201,4597],{"class":243},[79,13203,13204],{"class":239}," s_b ",[79,13206,244],{"class":243},[79,13208,4253],{"class":96},[79,13210,3531],{"class":239},[79,13212,13213],{"class":81,"line":584},[79,13214,454],{"emptyLinePlaceholder":453},[79,13216,13217,13219,13221,13224,13226,13228,13230,13232,13234,13237,13239],{"class":81,"line":590},[79,13218,8723],{"class":239},[79,13220,3414],{"class":243},[79,13222,13223],{"class":89}," \"静态变量s_a地址为： \"",[79,13225,3681],{"class":243},[79,13227,3887],{"class":239},[79,13229,2390],{"class":243},[79,13231,2803],{"class":239},[79,13233,2727],{"class":243},[79,13235,13236],{"class":239},"s_a ",[79,13238,3414],{"class":243},[79,13240,11024],{"class":239},[79,13242,13243,13245,13247,13250,13252,13254,13256,13258,13260,13263,13265],{"class":81,"line":596},[79,13244,8723],{"class":239},[79,13246,3414],{"class":243},[79,13248,13249],{"class":89}," \"静态变量s_b地址为： \"",[79,13251,3681],{"class":243},[79,13253,3887],{"class":239},[79,13255,2390],{"class":243},[79,13257,2803],{"class":239},[79,13259,2727],{"class":243},[79,13261,13262],{"class":239},"s_b ",[79,13264,3414],{"class":243},[79,13266,11024],{"class":239},[79,13268,13269],{"class":81,"line":602},[79,13270,454],{"emptyLinePlaceholder":453},[79,13272,13273,13275,13277,13280,13282,13284,13286,13288,13290,13292,13294],{"class":81,"line":608},[79,13274,8723],{"class":239},[79,13276,3414],{"class":243},[79,13278,13279],{"class":89}," \"字符串常量地址为： \"",[79,13281,3681],{"class":243},[79,13283,3887],{"class":239},[79,13285,2390],{"class":243},[79,13287,2803],{"class":239},[79,13289,2727],{"class":243},[79,13291,3431],{"class":89},[79,13293,3681],{"class":243},[79,13295,11024],{"class":239},[79,13297,13298,13300,13302,13304,13306,13308,13310,13312,13314,13317,13319],{"class":81,"line":614},[79,13299,8723],{"class":239},[79,13301,3414],{"class":243},[79,13303,13279],{"class":89},[79,13305,3681],{"class":243},[79,13307,3887],{"class":239},[79,13309,2390],{"class":243},[79,13311,2803],{"class":239},[79,13313,2727],{"class":243},[79,13315,13316],{"class":89},"\"hello world1\"",[79,13318,3681],{"class":243},[79,13320,11024],{"class":239},[79,13322,13323],{"class":81,"line":620},[79,13324,454],{"emptyLinePlaceholder":453},[79,13326,13327,13329,13331,13334,13336,13338,13340,13342,13344,13347,13349],{"class":81,"line":625},[79,13328,8723],{"class":239},[79,13330,3414],{"class":243},[79,13332,13333],{"class":89}," \"全局常量c_g_a地址为： \"",[79,13335,3681],{"class":243},[79,13337,3887],{"class":239},[79,13339,2390],{"class":243},[79,13341,2803],{"class":239},[79,13343,2727],{"class":243},[79,13345,13346],{"class":239},"c_g_a ",[79,13348,3414],{"class":243},[79,13350,11024],{"class":239},[79,13352,13353,13355,13357,13360,13362,13364,13366,13368,13370,13373,13375],{"class":81,"line":630},[79,13354,8723],{"class":239},[79,13356,3414],{"class":243},[79,13358,13359],{"class":89}," \"全局常量c_g_b地址为： \"",[79,13361,3681],{"class":243},[79,13363,3887],{"class":239},[79,13365,2390],{"class":243},[79,13367,2803],{"class":239},[79,13369,2727],{"class":243},[79,13371,13372],{"class":239},"c_g_b ",[79,13374,3414],{"class":243},[79,13376,11024],{"class":239},[79,13378,13379],{"class":81,"line":648},[79,13380,454],{"emptyLinePlaceholder":453},[79,13382,13383,13386,13388,13391,13393,13395],{"class":81,"line":659},[79,13384,13385],{"class":243},"    const",[79,13387,4597],{"class":243},[79,13389,13390],{"class":239}," c_l_a ",[79,13392,244],{"class":243},[79,13394,4253],{"class":96},[79,13396,3531],{"class":239},[79,13398,13399,13401,13403,13406,13408,13410],{"class":81,"line":676},[79,13400,13385],{"class":243},[79,13402,4597],{"class":243},[79,13404,13405],{"class":239}," c_l_b ",[79,13407,244],{"class":243},[79,13409,4253],{"class":96},[79,13411,3531],{"class":239},[79,13413,13414,13416,13418,13421,13423,13425,13427,13429,13431,13434,13436],{"class":81,"line":708},[79,13415,8723],{"class":239},[79,13417,3414],{"class":243},[79,13419,13420],{"class":89}," \"局部常量c_l_a地址为： \"",[79,13422,3681],{"class":243},[79,13424,3887],{"class":239},[79,13426,2390],{"class":243},[79,13428,2803],{"class":239},[79,13430,2727],{"class":243},[79,13432,13433],{"class":239},"c_l_a ",[79,13435,3414],{"class":243},[79,13437,11024],{"class":239},[79,13439,13440,13442,13444,13447,13449,13451,13453,13455,13457,13460,13462],{"class":81,"line":717},[79,13441,8723],{"class":239},[79,13443,3414],{"class":243},[79,13445,13446],{"class":89}," \"局部常量c_l_b地址为： \"",[79,13448,3681],{"class":243},[79,13450,3887],{"class":239},[79,13452,2390],{"class":243},[79,13454,2803],{"class":239},[79,13456,2727],{"class":243},[79,13458,13459],{"class":239},"c_l_b ",[79,13461,3414],{"class":243},[79,13463,11024],{"class":239},[79,13465,13466],{"class":81,"line":722},[79,13467,454],{"emptyLinePlaceholder":453},[79,13469,13470,13472,13474,13476],{"class":81,"line":727},[79,13471,4518],{"class":85},[79,13473,685],{"class":239},[79,13475,4523],{"class":89},[79,13477,4925],{"class":239},[79,13479,13480],{"class":81,"line":738},[79,13481,454],{"emptyLinePlaceholder":453},[79,13483,13484,13486,13488],{"class":81,"line":753},[79,13485,711],{"class":243},[79,13487,670],{"class":96},[79,13489,3531],{"class":239},[79,13491,13492],{"class":81,"line":768},[79,13493,3801],{"class":239},[19,13495,13496],{},"总结：",[3377,13498,13499,13502,13505,13508],{},[29,13500,13501],{},"c++中程序运行前分为全局区和代码区",[29,13503,13504],{},"代码区特点是共享和只读",[29,13506,13507],{},"全局区中存放全局变量、静态变量、常量",[29,13509,13510],{},"常量区中存放const修饰的全局常量和字符串常量",[265,13512,13514],{"id":13513},"_512程序运行后","5.1.2程序运行后",[26,13516,13517],{},[29,13518,13519],{},"栈区：",[3377,13521,13522,13529],{},[29,13523,13524,13525,13528],{},"由编译器自动分配释放, 存放",[2528,13526,13527],{},"函数的参数值,局部变量","等",[29,13530,13531,13532,13535],{},"注意事项：",[2528,13533,13534],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[51,13537,13539],{"className":2376,"code":13538,"language":2378,"meta":57,"style":57},"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",[59,13540,13541,13552,13556,13571,13583,13587,13591,13599,13604,13619,13637,13654,13664,13672],{"__ignoreMap":57},[79,13542,13543,13545,13547,13550],{"class":81,"line":82},[79,13544,2390],{"class":243},[79,13546,853],{"class":243},[79,13548,13549],{"class":85}," func",[79,13551,4191],{"class":239},[79,13553,13554],{"class":81,"line":167},[79,13555,3782],{"class":239},[79,13557,13558,13560,13562,13564,13566,13568],{"class":81,"line":178},[79,13559,4200],{"class":243},[79,13561,13033],{"class":239},[79,13563,244],{"class":243},[79,13565,4253],{"class":96},[79,13567,2437],{"class":239},[79,13569,13570],{"class":2440}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[79,13572,13573,13575,13577,13580],{"class":81,"line":457},[79,13574,711],{"class":243},[79,13576,12748],{"class":243},[79,13578,13579],{"class":239},"a;",[79,13581,13582],{"class":2440}," \u002F\u002F放回局部变量的地址\n",[79,13584,13585],{"class":81,"line":462},[79,13586,3801],{"class":239},[79,13588,13589],{"class":81,"line":474},[79,13590,454],{"emptyLinePlaceholder":453},[79,13592,13593,13595,13597],{"class":81,"line":480},[79,13594,2390],{"class":243},[79,13596,893],{"class":85},[79,13598,13017],{"class":239},[79,13600,13601],{"class":81,"line":486},[79,13602,13603],{"class":2440},"    \u002F\u002F接受func的返回值\n",[79,13605,13606,13608,13610,13613,13615,13617],{"class":81,"line":491},[79,13607,4200],{"class":243},[79,13609,853],{"class":243},[79,13611,13612],{"class":239},"p ",[79,13614,244],{"class":243},[79,13616,13549],{"class":85},[79,13618,7832],{"class":239},[79,13620,13621,13623,13625,13627,13629,13631,13634],{"class":81,"line":497},[79,13622,8723],{"class":239},[79,13624,3414],{"class":243},[79,13626,853],{"class":243},[79,13628,13612],{"class":239},[79,13630,3414],{"class":243},[79,13632,13633],{"class":239}," endl;",[79,13635,13636],{"class":2440}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[79,13638,13639,13641,13643,13645,13647,13649,13651],{"class":81,"line":503},[79,13640,8723],{"class":239},[79,13642,3414],{"class":243},[79,13644,853],{"class":243},[79,13646,13612],{"class":239},[79,13648,3414],{"class":243},[79,13650,13633],{"class":239},[79,13652,13653],{"class":2440}," \u002F\u002F第二次这个数据不再保留\n",[79,13655,13656,13658,13660,13662],{"class":81,"line":509},[79,13657,4518],{"class":85},[79,13659,685],{"class":239},[79,13661,4523],{"class":89},[79,13663,4925],{"class":239},[79,13665,13666,13668,13670],{"class":81,"line":514},[79,13667,711],{"class":243},[79,13669,670],{"class":96},[79,13671,3531],{"class":239},[79,13673,13674],{"class":81,"line":520},[79,13675,3801],{"class":239},[19,13677,13678],{},"输出结果：",[19,13680,13681],{},[3699,13682],{"alt":13683,"src":13684},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13686,13687],{},"总结：不要返回局部变量的地址",[26,13689,13690],{"start":167},[29,13691,13692],{},"堆区",[3377,13694,13695,13698],{},[29,13696,13697],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[29,13699,13700],{},"在c++中主要利用new在堆区开辟内存",[51,13702,13704],{"className":2376,"code":13703,"language":2378,"meta":57,"style":57},"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",[59,13705,13706,13721,13725,13730,13751,13758,13762,13770,13774,13779,13793,13805],{"__ignoreMap":57},[79,13707,13708,13710,13713,13716,13718],{"class":81,"line":82},[79,13709,2390],{"class":243},[79,13711,13712],{"class":243},"  *",[79,13714,13715],{"class":85},"func",[79,13717,4641],{"class":239},[79,13719,13720],{"class":2440},"  \u002F\u002F函数返回指针\n",[79,13722,13723],{"class":81,"line":167},[79,13724,3782],{"class":239},[79,13726,13727],{"class":81,"line":178},[79,13728,13729],{"class":2440},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[79,13731,13732,13734,13736,13738,13740,13743,13745,13747,13749],{"class":81,"line":457},[79,13733,6347],{"class":243},[79,13735,853],{"class":243},[79,13737,19],{"class":239},[79,13739,244],{"class":243},[79,13741,13742],{"class":243}," new",[79,13744,4597],{"class":243},[79,13746,685],{"class":239},[79,13748,2820],{"class":96},[79,13750,4925],{"class":239},[79,13752,13753,13755],{"class":81,"line":462},[79,13754,6581],{"class":243},[79,13756,13757],{"class":239}," p;\n",[79,13759,13760],{"class":81,"line":474},[79,13761,3801],{"class":239},[79,13763,13764,13766,13768],{"class":81,"line":480},[79,13765,2390],{"class":243},[79,13767,893],{"class":85},[79,13769,4191],{"class":239},[79,13771,13772],{"class":81,"line":486},[79,13773,3782],{"class":239},[79,13775,13776],{"class":81,"line":491},[79,13777,13778],{"class":2440},"    \u002F\u002F在堆区开辟数据\n",[79,13780,13781,13783,13785,13787,13789,13791],{"class":81,"line":497},[79,13782,4200],{"class":243},[79,13784,853],{"class":243},[79,13786,19],{"class":239},[79,13788,244],{"class":243},[79,13790,13715],{"class":85},[79,13792,7832],{"class":239},[79,13794,13795,13797,13799,13801,13803],{"class":81,"line":503},[79,13796,3787],{"class":239},[79,13798,8614],{"class":243},[79,13800,19],{"class":239},[79,13802,3414],{"class":243},[79,13804,3436],{"class":239},[79,13806,13807],{"class":81,"line":509},[79,13808,3801],{"class":239},[19,13810,13811],{},"图片展示：",[19,13813,13814],{},[3699,13815],{"alt":13683,"src":13816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13818,13819],{},"堆区内存由程序员管生死！！！",[26,13821,13822],{"start":178},[29,13823,13824],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13826,13827],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13829,13830,13831],{},"​语法：",[59,13832,13833],{}," new 数据类型",[19,13835,13836],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[51,13838,13840],{"className":2376,"code":13839,"language":2378,"meta":57,"style":57},"\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",[59,13841,13842,13847,13857,13861,13866,13871,13893,13897,13905,13909,13923,13935,13947,13959,13964,13969,13980,13984,13989,13997,14001,14006,14028,14054,14058,14076,14080,14106,14110,14122,14126,14131,14136,14144,14148,14152,14160,14164,14170,14176],{"__ignoreMap":57},[79,13843,13844],{"class":81,"line":82},[79,13845,13846],{"class":2440},"\u002F\u002F1.new的基本语法\n",[79,13848,13849,13851,13853,13855],{"class":81,"line":167},[79,13850,2390],{"class":243},[79,13852,853],{"class":243},[79,13854,13715],{"class":85},[79,13856,4191],{"class":239},[79,13858,13859],{"class":81,"line":178},[79,13860,3782],{"class":239},[79,13862,13863],{"class":81,"line":457},[79,13864,13865],{"class":2440},"    \u002F\u002F在堆区创建整型数据\n",[79,13867,13868],{"class":81,"line":462},[79,13869,13870],{"class":2440},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[79,13872,13873,13875,13877,13879,13882,13884,13886,13888,13890],{"class":81,"line":474},[79,13874,4200],{"class":243},[79,13876,853],{"class":243},[79,13878,19],{"class":239},[79,13880,13881],{"class":243},"=new",[79,13883,4597],{"class":243},[79,13885,685],{"class":239},[79,13887,2820],{"class":96},[79,13889,8161],{"class":239},[79,13891,13892],{"class":2440},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[79,13894,13895],{"class":81,"line":480},[79,13896,3801],{"class":239},[79,13898,13899,13901,13903],{"class":81,"line":486},[79,13900,7560],{"class":243},[79,13902,7784],{"class":85},[79,13904,4191],{"class":239},[79,13906,13907],{"class":81,"line":491},[79,13908,3782],{"class":239},[79,13910,13911,13913,13915,13917,13919,13921],{"class":81,"line":497},[79,13912,4200],{"class":243},[79,13914,853],{"class":243},[79,13916,19],{"class":239},[79,13918,244],{"class":243},[79,13920,13715],{"class":85},[79,13922,7832],{"class":239},[79,13924,13925,13927,13929,13931,13933],{"class":81,"line":503},[79,13926,3787],{"class":239},[79,13928,8614],{"class":243},[79,13930,19],{"class":239},[79,13932,3414],{"class":243},[79,13934,3436],{"class":239},[79,13936,13937,13939,13941,13943,13945],{"class":81,"line":509},[79,13938,3787],{"class":239},[79,13940,8614],{"class":243},[79,13942,19],{"class":239},[79,13944,3414],{"class":243},[79,13946,3436],{"class":239},[79,13948,13949,13951,13953,13955,13957],{"class":81,"line":514},[79,13950,3787],{"class":239},[79,13952,8614],{"class":243},[79,13954,19],{"class":239},[79,13956,3414],{"class":243},[79,13958,3436],{"class":239},[79,13960,13961],{"class":81,"line":520},[79,13962,13963],{"class":2440},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[79,13965,13966],{"class":81,"line":526},[79,13967,13968],{"class":2440},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[79,13970,13971,13974,13977],{"class":81,"line":532},[79,13972,13973],{"class":243},"    delete",[79,13975,13976],{"class":239}," p;",[79,13978,13979],{"class":2440},"\u002F\u002F删除这块地址\n",[79,13981,13982],{"class":81,"line":537},[79,13983,3801],{"class":239},[79,13985,13986],{"class":81,"line":543},[79,13987,13988],{"class":2440},"\u002F\u002F2.在堆区利用new开辟数组\n",[79,13990,13991,13993,13995],{"class":81,"line":549},[79,13992,7560],{"class":243},[79,13994,7853],{"class":85},[79,13996,4191],{"class":239},[79,13998,13999],{"class":81,"line":555},[79,14000,3782],{"class":239},[79,14002,14003],{"class":81,"line":561},[79,14004,14005],{"class":2440},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[79,14007,14008,14010,14012,14014,14016,14018,14020,14022,14025],{"class":81,"line":567},[79,14009,4200],{"class":243},[79,14011,853],{"class":243},[79,14013,6082],{"class":239},[79,14015,13881],{"class":243},[79,14017,4597],{"class":243},[79,14019,3263],{"class":239},[79,14021,2820],{"class":96},[79,14023,14024],{"class":239},"];",[79,14026,14027],{"class":2440},"\u002F\u002F10代表数组有10个元素\n",[79,14029,14030,14032,14034,14036,14038,14040,14042,14044,14046,14048,14050,14052],{"class":81,"line":573},[79,14031,949],{"class":243},[79,14033,3887],{"class":239},[79,14035,2390],{"class":243},[79,14037,5237],{"class":239},[79,14039,244],{"class":243},[79,14041,1030],{"class":96},[79,14043,5244],{"class":239},[79,14045,392],{"class":243},[79,14047,2820],{"class":96},[79,14049,5244],{"class":239},[79,14051,4507],{"class":243},[79,14053,253],{"class":239},[79,14055,14056],{"class":81,"line":579},[79,14057,4245],{"class":239},[79,14059,14060,14063,14065,14067,14069,14071,14073],{"class":81,"line":584},[79,14061,14062],{"class":239},"        arr[i]",[79,14064,244],{"class":243},[79,14066,2815],{"class":239},[79,14068,2855],{"class":243},[79,14070,2686],{"class":96},[79,14072,2437],{"class":239},[79,14074,14075],{"class":2440},"\u002F\u002F给10个元素赋值100～109\n",[79,14077,14078],{"class":81,"line":590},[79,14079,4402],{"class":239},[79,14081,14082,14084,14086,14088,14090,14092,14094,14096,14098,14100,14102,14104],{"class":81,"line":596},[79,14083,949],{"class":243},[79,14085,3887],{"class":239},[79,14087,2390],{"class":243},[79,14089,5237],{"class":239},[79,14091,244],{"class":243},[79,14093,1030],{"class":96},[79,14095,5244],{"class":239},[79,14097,392],{"class":243},[79,14099,2820],{"class":96},[79,14101,5244],{"class":239},[79,14103,4507],{"class":243},[79,14105,253],{"class":239},[79,14107,14108],{"class":81,"line":602},[79,14109,4245],{"class":239},[79,14111,14112,14114,14116,14118,14120],{"class":81,"line":608},[79,14113,5654],{"class":239},[79,14115,3414],{"class":243},[79,14117,6554],{"class":239},[79,14119,3414],{"class":243},[79,14121,3436],{"class":239},[79,14123,14124],{"class":81,"line":614},[79,14125,4402],{"class":239},[79,14127,14128],{"class":81,"line":620},[79,14129,14130],{"class":2440},"    \u002F\u002F释放堆区数组\n",[79,14132,14133],{"class":81,"line":625},[79,14134,14135],{"class":2440},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[79,14137,14138,14141],{"class":81,"line":630},[79,14139,14140],{"class":243},"    delete[]",[79,14142,14143],{"class":239}," arr;\n",[79,14145,14146],{"class":81,"line":648},[79,14147,3801],{"class":239},[79,14149,14150],{"class":81,"line":659},[79,14151,454],{"emptyLinePlaceholder":453},[79,14153,14154,14156,14158],{"class":81,"line":676},[79,14155,2390],{"class":243},[79,14157,893],{"class":85},[79,14159,4191],{"class":239},[79,14161,14162],{"class":81,"line":708},[79,14163,3782],{"class":239},[79,14165,14166,14168],{"class":81,"line":717},[79,14167,7829],{"class":85},[79,14169,7832],{"class":239},[79,14171,14172,14174],{"class":81,"line":722},[79,14173,7898],{"class":85},[79,14175,7832],{"class":239},[79,14177,14178],{"class":81,"line":727},[79,14179,3801],{"class":239},[2287,14181,14182],{},"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":57,"searchDepth":167,"depth":167,"links":14184},[14185],{"id":12853,"depth":167,"text":12854,"children":14186},[14187,14188],{"id":12885,"depth":178,"text":12886},{"id":13513,"depth":178,"text":13514},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12845,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14195,"title":14196,"body":14197,"description":57,"extension":2314,"meta":15677,"navigation":453,"path":15678,"seo":15679,"stem":15680,"__hash__":15681},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14198,"toc":15669},[14199,14202,14206,14209,14212,14381,14385,14390,14407,14412,14564,14568,14571,14574,14967,14971,14974,14979,14982,15294,15298,15304,15464,15466,15474,15478,15481,15488,15666],[10,14200,14196],{"id":14201},"_6引用",[14,14203,14205],{"id":14204},"_61引用基本用法","6.1引用基本用法",[19,14207,14208],{},"引用的本质：给变量起别名",[19,14210,14211],{},"语法：数据类型 &别名=原名",[51,14213,14215],{"className":2376,"code":14214,"language":2378,"meta":57,"style":57},"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",[59,14216,14217,14225,14229,14241,14253,14257,14276,14295,14299,14310,14314,14333,14351,14355,14365,14369,14377],{"__ignoreMap":57},[79,14218,14219,14221,14223],{"class":81,"line":82},[79,14220,2390],{"class":243},[79,14222,893],{"class":85},[79,14224,13017],{"class":239},[79,14226,14227],{"class":81,"line":167},[79,14228,454],{"emptyLinePlaceholder":453},[79,14230,14231,14233,14235,14237,14239],{"class":81,"line":178},[79,14232,4200],{"class":243},[79,14234,13033],{"class":239},[79,14236,244],{"class":243},[79,14238,4253],{"class":96},[79,14240,3531],{"class":239},[79,14242,14243,14245,14247,14249,14251],{"class":81,"line":457},[79,14244,4200],{"class":243},[79,14246,12748],{"class":243},[79,14248,13109],{"class":239},[79,14250,244],{"class":243},[79,14252,3669],{"class":239},[79,14254,14255],{"class":81,"line":462},[79,14256,454],{"emptyLinePlaceholder":453},[79,14258,14259,14261,14263,14266,14268,14270,14272,14274],{"class":81,"line":474},[79,14260,8723],{"class":239},[79,14262,3414],{"class":243},[79,14264,14265],{"class":89}," \"a = \"",[79,14267,3681],{"class":243},[79,14269,13033],{"class":239},[79,14271,3414],{"class":243},[79,14273,13633],{"class":239},[79,14275,9462],{"class":2440},[79,14277,14278,14280,14282,14285,14287,14289,14291,14293],{"class":81,"line":480},[79,14279,8723],{"class":239},[79,14281,3414],{"class":243},[79,14283,14284],{"class":89}," \"b = \"",[79,14286,3681],{"class":243},[79,14288,13046],{"class":239},[79,14290,3414],{"class":243},[79,14292,13633],{"class":239},[79,14294,9462],{"class":2440},[79,14296,14297],{"class":81,"line":486},[79,14298,454],{"emptyLinePlaceholder":453},[79,14300,14301,14304,14306,14308],{"class":81,"line":491},[79,14302,14303],{"class":239},"    b ",[79,14305,244],{"class":243},[79,14307,1140],{"class":96},[79,14309,3531],{"class":239},[79,14311,14312],{"class":81,"line":497},[79,14313,454],{"emptyLinePlaceholder":453},[79,14315,14316,14318,14320,14322,14324,14326,14328,14330],{"class":81,"line":503},[79,14317,8723],{"class":239},[79,14319,3414],{"class":243},[79,14321,14265],{"class":89},[79,14323,3681],{"class":243},[79,14325,13033],{"class":239},[79,14327,3414],{"class":243},[79,14329,13633],{"class":239},[79,14331,14332],{"class":2440},"\u002F\u002F100\n",[79,14334,14335,14337,14339,14341,14343,14345,14347,14349],{"class":81,"line":509},[79,14336,8723],{"class":239},[79,14338,3414],{"class":243},[79,14340,14284],{"class":89},[79,14342,3681],{"class":243},[79,14344,13046],{"class":239},[79,14346,3414],{"class":243},[79,14348,13633],{"class":239},[79,14350,14332],{"class":2440},[79,14352,14353],{"class":81,"line":514},[79,14354,454],{"emptyLinePlaceholder":453},[79,14356,14357,14359,14361,14363],{"class":81,"line":520},[79,14358,4518],{"class":85},[79,14360,685],{"class":239},[79,14362,4523],{"class":89},[79,14364,4925],{"class":239},[79,14366,14367],{"class":81,"line":526},[79,14368,454],{"emptyLinePlaceholder":453},[79,14370,14371,14373,14375],{"class":81,"line":532},[79,14372,711],{"class":243},[79,14374,670],{"class":96},[79,14376,3531],{"class":239},[79,14378,14379],{"class":81,"line":537},[79,14380,3801],{"class":239},[14,14382,14384],{"id":14383},"_62引用的注意事项","6.2引用的注意事项",[26,14386,14387],{},[29,14388,14389],{},"引用必须要初始化",[51,14391,14393],{"className":2376,"code":14392,"language":2378,"meta":57,"style":57},"int &b;\u002F\u002F非常错误！\n",[59,14394,14395],{"__ignoreMap":57},[79,14396,14397,14399,14401,14404],{"class":81,"line":82},[79,14398,2390],{"class":243},[79,14400,12748],{"class":243},[79,14402,14403],{"class":239},"b;",[79,14405,14406],{"class":2440},"\u002F\u002F非常错误！\n",[26,14408,14409],{"start":167},[29,14410,14411],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[51,14413,14415],{"className":2376,"code":14414,"language":2378,"meta":57,"style":57},"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",[59,14416,14417,14425,14437,14449,14457,14473,14486,14504,14522,14542,14552,14560],{"__ignoreMap":57},[79,14418,14419,14421,14423],{"class":81,"line":82},[79,14420,2390],{"class":243},[79,14422,893],{"class":85},[79,14424,13017],{"class":239},[79,14426,14427,14429,14431,14433,14435],{"class":81,"line":167},[79,14428,4200],{"class":243},[79,14430,13033],{"class":239},[79,14432,244],{"class":243},[79,14434,4253],{"class":96},[79,14436,3531],{"class":239},[79,14438,14439,14441,14443,14445,14447],{"class":81,"line":178},[79,14440,4200],{"class":243},[79,14442,13046],{"class":239},[79,14444,244],{"class":243},[79,14446,11134],{"class":96},[79,14448,3531],{"class":239},[79,14450,14451,14454],{"class":81,"line":457},[79,14452,14453],{"class":2440},"    \u002F\u002Fint &c;",[79,14455,14456],{"class":2440}," \u002F\u002F错误，引用必须初始化\n",[79,14458,14459,14461,14463,14465,14467,14470],{"class":81,"line":462},[79,14460,4200],{"class":243},[79,14462,12748],{"class":243},[79,14464,5152],{"class":239},[79,14466,244],{"class":243},[79,14468,14469],{"class":239}," a;",[79,14471,14472],{"class":2440}," \u002F\u002F一旦初始化后，就不可以更改\n",[79,14474,14475,14478,14480,14483],{"class":81,"line":474},[79,14476,14477],{"class":239},"    c ",[79,14479,244],{"class":243},[79,14481,14482],{"class":239}," b;",[79,14484,14485],{"class":2440}," \u002F\u002F这是赋值操作，不是更改引用\n",[79,14487,14488,14490,14492,14494,14496,14498,14500,14502],{"class":81,"line":480},[79,14489,8723],{"class":239},[79,14491,3414],{"class":243},[79,14493,14265],{"class":89},[79,14495,3681],{"class":243},[79,14497,13033],{"class":239},[79,14499,3414],{"class":243},[79,14501,13633],{"class":239},[79,14503,9447],{"class":2440},[79,14505,14506,14508,14510,14512,14514,14516,14518,14520],{"class":81,"line":486},[79,14507,8723],{"class":239},[79,14509,3414],{"class":243},[79,14511,14284],{"class":89},[79,14513,3681],{"class":243},[79,14515,13046],{"class":239},[79,14517,3414],{"class":243},[79,14519,13633],{"class":239},[79,14521,9447],{"class":2440},[79,14523,14524,14526,14528,14531,14533,14536,14538,14540],{"class":81,"line":491},[79,14525,8723],{"class":239},[79,14527,3414],{"class":243},[79,14529,14530],{"class":89}," \"c = \"",[79,14532,3681],{"class":243},[79,14534,14535],{"class":239}," c ",[79,14537,3414],{"class":243},[79,14539,13633],{"class":239},[79,14541,9447],{"class":2440},[79,14543,14544,14546,14548,14550],{"class":81,"line":497},[79,14545,4518],{"class":85},[79,14547,685],{"class":239},[79,14549,4523],{"class":89},[79,14551,4925],{"class":239},[79,14553,14554,14556,14558],{"class":81,"line":503},[79,14555,711],{"class":243},[79,14557,670],{"class":96},[79,14559,3531],{"class":239},[79,14561,14562],{"class":81,"line":509},[79,14563,3801],{"class":239},[14,14565,14567],{"id":14566},"_63引用做函数参数","6.3引用做函数参数",[19,14569,14570],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14572,14573],{},"优点：可以简化指针修改实参",[51,14575,14577],{"className":2376,"code":14576,"language":2378,"meta":57,"style":57},"\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",[59,14578,14579,14584,14606,14617,14627,14636,14640,14644,14649,14671,14683,14695,14705,14709,14713,14718,14740,14750,14758,14766,14770,14774,14782,14786,14798,14810,14814,14825,14851,14855,14875,14899,14903,14913,14937,14941,14951,14955,14963],{"__ignoreMap":57},[79,14580,14581],{"class":81,"line":82},[79,14582,14583],{"class":2440},"\u002F\u002F1. 值传递\n",[79,14585,14586,14588,14591,14593,14595,14597,14599,14601,14603],{"class":81,"line":167},[79,14587,7560],{"class":243},[79,14589,14590],{"class":85}," mySwap01",[79,14592,685],{"class":239},[79,14594,2390],{"class":243},[79,14596,3635],{"class":7412},[79,14598,1060],{"class":239},[79,14600,2390],{"class":243},[79,14602,5039],{"class":7412},[79,14604,14605],{"class":239},") {\n",[79,14607,14608,14610,14613,14615],{"class":81,"line":178},[79,14609,4200],{"class":243},[79,14611,14612],{"class":239}," temp ",[79,14614,244],{"class":243},[79,14616,3669],{"class":239},[79,14618,14619,14622,14624],{"class":81,"line":457},[79,14620,14621],{"class":239},"    a ",[79,14623,244],{"class":243},[79,14625,14626],{"class":239}," b;\n",[79,14628,14629,14631,14633],{"class":81,"line":462},[79,14630,14303],{"class":239},[79,14632,244],{"class":243},[79,14634,14635],{"class":239}," temp;\n",[79,14637,14638],{"class":81,"line":474},[79,14639,3801],{"class":239},[79,14641,14642],{"class":81,"line":480},[79,14643,454],{"emptyLinePlaceholder":453},[79,14645,14646],{"class":81,"line":486},[79,14647,14648],{"class":2440},"\u002F\u002F2. 地址传递\n",[79,14650,14651,14653,14656,14658,14661,14663,14665,14667,14669],{"class":81,"line":491},[79,14652,7560],{"class":243},[79,14654,14655],{"class":85}," mySwap02",[79,14657,685],{"class":239},[79,14659,14660],{"class":243},"int*",[79,14662,3635],{"class":7412},[79,14664,1060],{"class":239},[79,14666,14660],{"class":243},[79,14668,5039],{"class":7412},[79,14670,14605],{"class":239},[79,14672,14673,14675,14677,14679,14681],{"class":81,"line":497},[79,14674,4200],{"class":243},[79,14676,14612],{"class":239},[79,14678,244],{"class":243},[79,14680,853],{"class":243},[79,14682,8392],{"class":239},[79,14684,14685,14687,14689,14691,14693],{"class":81,"line":503},[79,14686,8598],{"class":243},[79,14688,13083],{"class":239},[79,14690,244],{"class":243},[79,14692,853],{"class":243},[79,14694,8264],{"class":239},[79,14696,14697,14699,14701,14703],{"class":81,"line":509},[79,14698,8598],{"class":243},[79,14700,13109],{"class":239},[79,14702,244],{"class":243},[79,14704,14635],{"class":239},[79,14706,14707],{"class":81,"line":514},[79,14708,3801],{"class":239},[79,14710,14711],{"class":81,"line":520},[79,14712,454],{"emptyLinePlaceholder":453},[79,14714,14715],{"class":81,"line":526},[79,14716,14717],{"class":2440},"\u002F\u002F3. 引用传递\n",[79,14719,14720,14722,14725,14727,14730,14732,14734,14736,14738],{"class":81,"line":532},[79,14721,7560],{"class":243},[79,14723,14724],{"class":85}," mySwap03",[79,14726,685],{"class":239},[79,14728,14729],{"class":243},"int&",[79,14731,3635],{"class":7412},[79,14733,1060],{"class":239},[79,14735,14729],{"class":243},[79,14737,5039],{"class":7412},[79,14739,14605],{"class":239},[79,14741,14742,14744,14746,14748],{"class":81,"line":537},[79,14743,4200],{"class":243},[79,14745,14612],{"class":239},[79,14747,244],{"class":243},[79,14749,3669],{"class":239},[79,14751,14752,14754,14756],{"class":81,"line":543},[79,14753,14621],{"class":239},[79,14755,244],{"class":243},[79,14757,14626],{"class":239},[79,14759,14760,14762,14764],{"class":81,"line":549},[79,14761,14303],{"class":239},[79,14763,244],{"class":243},[79,14765,14635],{"class":239},[79,14767,14768],{"class":81,"line":555},[79,14769,3801],{"class":239},[79,14771,14772],{"class":81,"line":561},[79,14773,454],{"emptyLinePlaceholder":453},[79,14775,14776,14778,14780],{"class":81,"line":567},[79,14777,2390],{"class":243},[79,14779,893],{"class":85},[79,14781,13017],{"class":239},[79,14783,14784],{"class":81,"line":573},[79,14785,454],{"emptyLinePlaceholder":453},[79,14787,14788,14790,14792,14794,14796],{"class":81,"line":579},[79,14789,4200],{"class":243},[79,14791,13033],{"class":239},[79,14793,244],{"class":243},[79,14795,4253],{"class":96},[79,14797,3531],{"class":239},[79,14799,14800,14802,14804,14806,14808],{"class":81,"line":584},[79,14801,4200],{"class":243},[79,14803,13046],{"class":239},[79,14805,244],{"class":243},[79,14807,11134],{"class":96},[79,14809,3531],{"class":239},[79,14811,14812],{"class":81,"line":590},[79,14813,454],{"emptyLinePlaceholder":453},[79,14815,14816,14819,14822],{"class":81,"line":596},[79,14817,14818],{"class":85},"    mySwap01",[79,14820,14821],{"class":239},"(a, b);",[79,14823,14824],{"class":2440},"\u002F\u002F值传递，形参不会修饰实参\n",[79,14826,14827,14829,14831,14834,14836,14838,14840,14843,14845,14847,14849],{"class":81,"line":602},[79,14828,8723],{"class":239},[79,14830,3414],{"class":243},[79,14832,14833],{"class":89}," \"a:\"",[79,14835,3681],{"class":243},[79,14837,13033],{"class":239},[79,14839,3414],{"class":243},[79,14841,14842],{"class":89}," \" b:\"",[79,14844,3681],{"class":243},[79,14846,13046],{"class":239},[79,14848,3414],{"class":243},[79,14850,11024],{"class":239},[79,14852,14853],{"class":81,"line":608},[79,14854,454],{"emptyLinePlaceholder":453},[79,14856,14857,14860,14862,14864,14867,14869,14872],{"class":81,"line":614},[79,14858,14859],{"class":85},"    mySwap02",[79,14861,685],{"class":239},[79,14863,2727],{"class":243},[79,14865,14866],{"class":239},"a, ",[79,14868,2727],{"class":243},[79,14870,14871],{"class":239},"b);",[79,14873,14874],{"class":2440},"\u002F\u002F地址传递，形参会修饰实参\n",[79,14876,14877,14879,14881,14883,14885,14887,14889,14891,14893,14895,14897],{"class":81,"line":620},[79,14878,8723],{"class":239},[79,14880,3414],{"class":243},[79,14882,14833],{"class":89},[79,14884,3681],{"class":243},[79,14886,13033],{"class":239},[79,14888,3414],{"class":243},[79,14890,14842],{"class":89},[79,14892,3681],{"class":243},[79,14894,13046],{"class":239},[79,14896,3414],{"class":243},[79,14898,11024],{"class":239},[79,14900,14901],{"class":81,"line":625},[79,14902,454],{"emptyLinePlaceholder":453},[79,14904,14905,14908,14910],{"class":81,"line":630},[79,14906,14907],{"class":85},"    mySwap03",[79,14909,14821],{"class":239},[79,14911,14912],{"class":2440},"\u002F\u002F引用传递，形参会修饰实参\n",[79,14914,14915,14917,14919,14921,14923,14925,14927,14929,14931,14933,14935],{"class":81,"line":648},[79,14916,8723],{"class":239},[79,14918,3414],{"class":243},[79,14920,14833],{"class":89},[79,14922,3681],{"class":243},[79,14924,13033],{"class":239},[79,14926,3414],{"class":243},[79,14928,14842],{"class":89},[79,14930,3681],{"class":243},[79,14932,13046],{"class":239},[79,14934,3414],{"class":243},[79,14936,11024],{"class":239},[79,14938,14939],{"class":81,"line":659},[79,14940,454],{"emptyLinePlaceholder":453},[79,14942,14943,14945,14947,14949],{"class":81,"line":676},[79,14944,4518],{"class":85},[79,14946,685],{"class":239},[79,14948,4523],{"class":89},[79,14950,4925],{"class":239},[79,14952,14953],{"class":81,"line":708},[79,14954,454],{"emptyLinePlaceholder":453},[79,14956,14957,14959,14961],{"class":81,"line":717},[79,14958,711],{"class":243},[79,14960,670],{"class":96},[79,14962,3531],{"class":239},[79,14964,14965],{"class":81,"line":722},[79,14966,3801],{"class":239},[14,14968,14970],{"id":14969},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14972,14973],{},"作用：引用是可以作为函数的返回值存在的",[19,14975,11209,14976],{},[2528,14977,14978],{},"不要返回局部变量引用",[19,14980,14981],{},"用法：函数调用作为左值",[51,14983,14985],{"className":12105,"code":14984,"language":12107,"meta":57,"style":57},"\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",[59,14986,14987,14992,15000,15015,15021,15025,15029,15034,15042,15059,15065,15069,15073,15081,15085,15090,15104,15124,15143,15147,15152,15165,15185,15203,15207,15223,15227,15246,15264,15268,15278,15282,15290],{"__ignoreMap":57},[79,14988,14989],{"class":81,"line":82},[79,14990,14991],{"class":2440},"\u002F\u002F返回局部变量引用\n",[79,14993,14994,14996,14998],{"class":81,"line":167},[79,14995,14729],{"class":243},[79,14997,7784],{"class":85},[79,14999,13017],{"class":239},[79,15001,15002,15004,15006,15008,15010,15012],{"class":81,"line":178},[79,15003,4200],{"class":243},[79,15005,13033],{"class":239},[79,15007,244],{"class":243},[79,15009,4253],{"class":96},[79,15011,2437],{"class":239},[79,15013,15014],{"class":2440}," \u002F\u002F局部变量\n",[79,15016,15017,15019],{"class":81,"line":457},[79,15018,711],{"class":243},[79,15020,3669],{"class":239},[79,15022,15023],{"class":81,"line":462},[79,15024,3801],{"class":239},[79,15026,15027],{"class":81,"line":474},[79,15028,454],{"emptyLinePlaceholder":453},[79,15030,15031],{"class":81,"line":480},[79,15032,15033],{"class":2440},"\u002F\u002F返回静态变量引用\n",[79,15035,15036,15038,15040],{"class":81,"line":486},[79,15037,14729],{"class":243},[79,15039,7853],{"class":85},[79,15041,13017],{"class":239},[79,15043,15044,15046,15048,15050,15052,15054,15056],{"class":81,"line":491},[79,15045,13184],{"class":243},[79,15047,4597],{"class":243},[79,15049,13033],{"class":239},[79,15051,244],{"class":243},[79,15053,11134],{"class":96},[79,15055,2437],{"class":239},[79,15057,15058],{"class":2440},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[79,15060,15061,15063],{"class":81,"line":497},[79,15062,711],{"class":243},[79,15064,3669],{"class":239},[79,15066,15067],{"class":81,"line":503},[79,15068,3801],{"class":239},[79,15070,15071],{"class":81,"line":509},[79,15072,454],{"emptyLinePlaceholder":453},[79,15074,15075,15077,15079],{"class":81,"line":514},[79,15076,2390],{"class":243},[79,15078,893],{"class":85},[79,15080,13017],{"class":239},[79,15082,15083],{"class":81,"line":520},[79,15084,454],{"emptyLinePlaceholder":453},[79,15086,15087],{"class":81,"line":526},[79,15088,15089],{"class":2440},"    \u002F\u002F不能返回局部变量的引用\n",[79,15091,15092,15095,15098,15100,15102],{"class":81,"line":532},[79,15093,15094],{"class":243},"    int&",[79,15096,15097],{"class":239}," ref ",[79,15099,244],{"class":243},[79,15101,7784],{"class":85},[79,15103,7832],{"class":239},[79,15105,15106,15108,15110,15113,15115,15117,15119,15121],{"class":81,"line":537},[79,15107,8723],{"class":239},[79,15109,3414],{"class":243},[79,15111,15112],{"class":89}," \"ref = \"",[79,15114,3681],{"class":243},[79,15116,15097],{"class":239},[79,15118,3414],{"class":243},[79,15120,13633],{"class":239},[79,15122,15123],{"class":2440},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[79,15125,15126,15128,15130,15132,15134,15136,15138,15140],{"class":81,"line":543},[79,15127,8723],{"class":239},[79,15129,3414],{"class":243},[79,15131,15112],{"class":89},[79,15133,3681],{"class":243},[79,15135,15097],{"class":239},[79,15137,3414],{"class":243},[79,15139,13633],{"class":239},[79,15141,15142],{"class":2440},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[79,15144,15145],{"class":81,"line":549},[79,15146,454],{"emptyLinePlaceholder":453},[79,15148,15149],{"class":81,"line":555},[79,15150,15151],{"class":2440},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[79,15153,15154,15156,15159,15161,15163],{"class":81,"line":561},[79,15155,15094],{"class":243},[79,15157,15158],{"class":239}," ref2 ",[79,15160,244],{"class":243},[79,15162,7853],{"class":85},[79,15164,7832],{"class":239},[79,15166,15167,15169,15171,15174,15176,15178,15180,15182],{"class":81,"line":567},[79,15168,8723],{"class":239},[79,15170,3414],{"class":243},[79,15172,15173],{"class":89}," \"ref2 = \"",[79,15175,3681],{"class":243},[79,15177,15158],{"class":239},[79,15179,3414],{"class":243},[79,15181,13633],{"class":239},[79,15183,15184],{"class":2440}," \u002F\u002F20\n",[79,15186,15187,15189,15191,15193,15195,15197,15199,15201],{"class":81,"line":573},[79,15188,8723],{"class":239},[79,15190,3414],{"class":243},[79,15192,15173],{"class":89},[79,15194,3681],{"class":243},[79,15196,15158],{"class":239},[79,15198,3414],{"class":243},[79,15200,13633],{"class":239},[79,15202,15184],{"class":2440},[79,15204,15205],{"class":81,"line":579},[79,15206,454],{"emptyLinePlaceholder":453},[79,15208,15209,15211,15214,15216,15218,15220],{"class":81,"line":584},[79,15210,7898],{"class":85},[79,15212,15213],{"class":239},"() ",[79,15215,244],{"class":243},[79,15217,5205],{"class":96},[79,15219,2437],{"class":239},[79,15221,15222],{"class":2440},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[79,15224,15225],{"class":81,"line":590},[79,15226,454],{"emptyLinePlaceholder":453},[79,15228,15229,15231,15233,15235,15237,15239,15241,15243],{"class":81,"line":596},[79,15230,8723],{"class":239},[79,15232,3414],{"class":243},[79,15234,15173],{"class":89},[79,15236,3681],{"class":243},[79,15238,15158],{"class":239},[79,15240,3414],{"class":243},[79,15242,13633],{"class":239},[79,15244,15245],{"class":2440}," \u002F\u002F1000\n",[79,15247,15248,15250,15252,15254,15256,15258,15260,15262],{"class":81,"line":602},[79,15249,8723],{"class":239},[79,15251,3414],{"class":243},[79,15253,15173],{"class":89},[79,15255,3681],{"class":243},[79,15257,15158],{"class":239},[79,15259,3414],{"class":243},[79,15261,13633],{"class":239},[79,15263,15245],{"class":2440},[79,15265,15266],{"class":81,"line":608},[79,15267,454],{"emptyLinePlaceholder":453},[79,15269,15270,15272,15274,15276],{"class":81,"line":614},[79,15271,4518],{"class":85},[79,15273,685],{"class":239},[79,15275,4523],{"class":89},[79,15277,4925],{"class":239},[79,15279,15280],{"class":81,"line":620},[79,15281,454],{"emptyLinePlaceholder":453},[79,15283,15284,15286,15288],{"class":81,"line":625},[79,15285,711],{"class":243},[79,15287,670],{"class":96},[79,15289,3531],{"class":239},[79,15291,15292],{"class":81,"line":630},[79,15293,3801],{"class":239},[14,15295,15297],{"id":15296},"_65引用的本质","6.5引用的本质",[19,15299,15300,15301],{},"本质：",[2528,15302,15303],{},"引用的本质在c++内部实现是一个指针常量.",[51,15305,15307],{"className":2376,"code":15306,"language":2378,"meta":57,"style":57},"\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",[59,15308,15309,15314,15330,15344,15348,15357,15369,15374,15379,15390,15403,15407,15423,15440,15444,15452,15460],{"__ignoreMap":57},[79,15310,15311],{"class":81,"line":82},[79,15312,15313],{"class":2440},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[79,15315,15316,15318,15320,15322,15324,15327],{"class":81,"line":167},[79,15317,7560],{"class":243},[79,15319,13549],{"class":85},[79,15321,685],{"class":239},[79,15323,14729],{"class":243},[79,15325,15326],{"class":7412}," ref",[79,15328,15329],{"class":239},"){\n",[79,15331,15332,15335,15337,15339,15341],{"class":81,"line":178},[79,15333,15334],{"class":239},"    ref ",[79,15336,244],{"class":243},[79,15338,1140],{"class":96},[79,15340,2437],{"class":239},[79,15342,15343],{"class":2440}," \u002F\u002F ref是引用，转换为*ref = 100\n",[79,15345,15346],{"class":81,"line":457},[79,15347,3801],{"class":239},[79,15349,15350,15352,15354],{"class":81,"line":462},[79,15351,2390],{"class":243},[79,15353,893],{"class":85},[79,15355,15356],{"class":239},"(){\n",[79,15358,15359,15361,15363,15365,15367],{"class":81,"line":474},[79,15360,4200],{"class":243},[79,15362,13033],{"class":239},[79,15364,244],{"class":243},[79,15366,4253],{"class":96},[79,15368,3531],{"class":239},[79,15370,15371],{"class":81,"line":480},[79,15372,15373],{"class":239},"    \n",[79,15375,15376],{"class":81,"line":486},[79,15377,15378],{"class":2440},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[79,15380,15381,15383,15385,15387],{"class":81,"line":491},[79,15382,15094],{"class":243},[79,15384,15097],{"class":239},[79,15386,244],{"class":243},[79,15388,15389],{"class":239}," a; \n",[79,15391,15392,15394,15396,15398,15400],{"class":81,"line":497},[79,15393,15334],{"class":239},[79,15395,244],{"class":243},[79,15397,11134],{"class":96},[79,15399,2437],{"class":239},[79,15401,15402],{"class":2440}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[79,15404,15405],{"class":81,"line":503},[79,15406,15373],{"class":239},[79,15408,15409,15411,15413,15415,15417,15419,15421],{"class":81,"line":509},[79,15410,8723],{"class":239},[79,15412,3414],{"class":243},[79,15414,14833],{"class":89},[79,15416,3681],{"class":243},[79,15418,13033],{"class":239},[79,15420,3414],{"class":243},[79,15422,11024],{"class":239},[79,15424,15425,15427,15429,15432,15434,15436,15438],{"class":81,"line":514},[79,15426,8723],{"class":239},[79,15428,3414],{"class":243},[79,15430,15431],{"class":89}," \"ref:\"",[79,15433,3681],{"class":243},[79,15435,15097],{"class":239},[79,15437,3414],{"class":243},[79,15439,11024],{"class":239},[79,15441,15442],{"class":81,"line":520},[79,15443,15373],{"class":239},[79,15445,15446,15449],{"class":81,"line":526},[79,15447,15448],{"class":85},"    func",[79,15450,15451],{"class":239},"(a);\n",[79,15453,15454,15456,15458],{"class":81,"line":532},[79,15455,711],{"class":243},[79,15457,670],{"class":96},[79,15459,3531],{"class":239},[79,15461,15462],{"class":81,"line":537},[79,15463,3801],{"class":239},[19,15465,13496],{},[26,15467,15468,15471],{},[29,15469,15470],{},"引用的本质，就是一个指针常量",[29,15472,15473],{},"引用一旦初始化，就不可以发生改变",[14,15475,15477],{"id":15476},"_66常量引用","6.6常量引用",[19,15479,15480],{},"作用：常量引用主要用来修饰形参",[19,15482,15483,15484,15487],{},"在函数形参列表中，可以加",[2528,15485,15486],{},"const修饰形参","，防止形参改变实参",[51,15489,15491],{"className":2376,"code":15490,"language":2378,"meta":57,"style":57},"\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",[59,15492,15493,15498,15503,15522,15527,15540,15544,15548,15556,15560,15565,15570,15584,15588,15596,15608,15612,15617,15629,15636,15640,15650,15654,15662],{"__ignoreMap":57},[79,15494,15495],{"class":81,"line":82},[79,15496,15497],{"class":2440},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[79,15499,15500],{"class":81,"line":167},[79,15501,15502],{"class":2440},"\u002F\u002F加上const就不能修改实参的\n",[79,15504,15505,15507,15510,15512,15514,15517,15520],{"class":81,"line":178},[79,15506,7560],{"class":243},[79,15508,15509],{"class":85}," showValue",[79,15511,685],{"class":239},[79,15513,8986],{"class":243},[79,15515,15516],{"class":243}," int&",[79,15518,15519],{"class":7412}," v",[79,15521,14605],{"class":239},[79,15523,15524],{"class":81,"line":457},[79,15525,15526],{"class":2440},"    \u002F\u002Fv += 100;\n",[79,15528,15529,15531,15533,15536,15538],{"class":81,"line":462},[79,15530,8723],{"class":239},[79,15532,3414],{"class":243},[79,15534,15535],{"class":239}," v ",[79,15537,3414],{"class":243},[79,15539,11024],{"class":239},[79,15541,15542],{"class":81,"line":474},[79,15543,3801],{"class":239},[79,15545,15546],{"class":81,"line":480},[79,15547,454],{"emptyLinePlaceholder":453},[79,15549,15550,15552,15554],{"class":81,"line":486},[79,15551,2390],{"class":243},[79,15553,893],{"class":85},[79,15555,13017],{"class":239},[79,15557,15558],{"class":81,"line":491},[79,15559,454],{"emptyLinePlaceholder":453},[79,15561,15562],{"class":81,"line":497},[79,15563,15564],{"class":2440},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[79,15566,15567],{"class":81,"line":503},[79,15568,15569],{"class":2440},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[79,15571,15572,15574,15576,15578,15580,15582],{"class":81,"line":509},[79,15573,13385],{"class":243},[79,15575,15516],{"class":243},[79,15577,15097],{"class":239},[79,15579,244],{"class":243},[79,15581,4253],{"class":96},[79,15583,3531],{"class":239},[79,15585,15586],{"class":81,"line":514},[79,15587,454],{"emptyLinePlaceholder":453},[79,15589,15590,15593],{"class":81,"line":520},[79,15591,15592],{"class":2440},"    \u002F\u002Fref = 100;",[79,15594,15595],{"class":2440},"  \u002F\u002F加入const后不可以修改变量\n",[79,15597,15598,15600,15602,15604,15606],{"class":81,"line":526},[79,15599,8723],{"class":239},[79,15601,3414],{"class":243},[79,15603,15097],{"class":239},[79,15605,3414],{"class":243},[79,15607,11024],{"class":239},[79,15609,15610],{"class":81,"line":532},[79,15611,454],{"emptyLinePlaceholder":453},[79,15613,15614],{"class":81,"line":537},[79,15615,15616],{"class":2440},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[79,15618,15619,15621,15623,15625,15627],{"class":81,"line":543},[79,15620,4200],{"class":243},[79,15622,13033],{"class":239},[79,15624,244],{"class":243},[79,15626,4253],{"class":96},[79,15628,3531],{"class":239},[79,15630,15631,15634],{"class":81,"line":549},[79,15632,15633],{"class":85},"    showValue",[79,15635,15451],{"class":239},[79,15637,15638],{"class":81,"line":555},[79,15639,454],{"emptyLinePlaceholder":453},[79,15641,15642,15644,15646,15648],{"class":81,"line":561},[79,15643,4518],{"class":85},[79,15645,685],{"class":239},[79,15647,4523],{"class":89},[79,15649,4925],{"class":239},[79,15651,15652],{"class":81,"line":567},[79,15653,454],{"emptyLinePlaceholder":453},[79,15655,15656,15658,15660],{"class":81,"line":573},[79,15657,711],{"class":243},[79,15659,670],{"class":96},[79,15661,3531],{"class":239},[79,15663,15664],{"class":81,"line":579},[79,15665,3801],{"class":239},[2287,15667,15668],{},"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":57,"searchDepth":167,"depth":167,"links":15670},[15671,15672,15673,15674,15675,15676],{"id":14204,"depth":167,"text":14205},{"id":14383,"depth":167,"text":14384},{"id":14566,"depth":167,"text":14567},{"id":14969,"depth":167,"text":14970},{"id":15296,"depth":167,"text":15297},{"id":15476,"depth":167,"text":15477},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14196,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15683,"title":15684,"body":15685,"description":57,"extension":2314,"meta":16765,"navigation":453,"path":16766,"seo":16767,"stem":16768,"__hash__":16769},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15686,"toc":16757},[15687,15690,15694,15697,15702,15933,15935,15946,15950,15953,15961,16065,16068,16072,16075,16079,16082,16087,16109,16115,16442,16445,16449,16457,16754],[10,15688,15684],{"id":15689},"_7函数高级部分",[14,15691,15693],{"id":15692},"_71函数默认参数","7.1函数默认参数",[19,15695,15696],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15698,7379,15699],{},[59,15700,15701],{}," 返回值类型  函数名 （参数= 默认值）{}",[51,15703,15705],{"className":2376,"code":15704,"language":2378,"meta":57,"style":57},"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",[59,15706,15707,15741,15756,15760,15764,15769,15774,15803,15823,15833,15837,15841,15849,15853,15881,15903,15907,15917,15921,15929],{"__ignoreMap":57},[79,15708,15709,15711,15713,15715,15717,15719,15721,15723,15725,15727,15729,15731,15733,15735,15737,15739],{"class":81,"line":82},[79,15710,2390],{"class":243},[79,15712,13549],{"class":85},[79,15714,685],{"class":239},[79,15716,2390],{"class":243},[79,15718,3635],{"class":7412},[79,15720,1060],{"class":239},[79,15722,2390],{"class":243},[79,15724,5039],{"class":7412},[79,15726,468],{"class":243},[79,15728,4253],{"class":96},[79,15730,1060],{"class":239},[79,15732,2390],{"class":243},[79,15734,5055],{"class":7412},[79,15736,468],{"class":243},[79,15738,4253],{"class":96},[79,15740,14605],{"class":239},[79,15742,15743,15745,15747,15749,15751,15753],{"class":81,"line":167},[79,15744,711],{"class":243},[79,15746,13033],{"class":239},[79,15748,2855],{"class":243},[79,15750,13046],{"class":239},[79,15752,2855],{"class":243},[79,15754,15755],{"class":239}," c;\n",[79,15757,15758],{"class":81,"line":178},[79,15759,3801],{"class":239},[79,15761,15762],{"class":81,"line":457},[79,15763,454],{"emptyLinePlaceholder":453},[79,15765,15766],{"class":81,"line":462},[79,15767,15768],{"class":2440},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[79,15770,15771],{"class":81,"line":474},[79,15772,15773],{"class":2440},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[79,15775,15776,15778,15781,15783,15785,15787,15789,15791,15793,15795,15797,15799,15801],{"class":81,"line":480},[79,15777,2390],{"class":243},[79,15779,15780],{"class":85}," func2",[79,15782,685],{"class":239},[79,15784,2390],{"class":243},[79,15786,3635],{"class":7412},[79,15788,468],{"class":243},[79,15790,4253],{"class":96},[79,15792,1060],{"class":239},[79,15794,2390],{"class":243},[79,15796,5039],{"class":7412},[79,15798,468],{"class":243},[79,15800,4253],{"class":96},[79,15802,4925],{"class":239},[79,15804,15805,15807,15809,15811,15813,15815,15817,15819,15821],{"class":81,"line":486},[79,15806,2390],{"class":243},[79,15808,15780],{"class":85},[79,15810,685],{"class":239},[79,15812,2390],{"class":243},[79,15814,3635],{"class":7412},[79,15816,1060],{"class":239},[79,15818,2390],{"class":243},[79,15820,5039],{"class":7412},[79,15822,14605],{"class":239},[79,15824,15825,15827,15829,15831],{"class":81,"line":491},[79,15826,711],{"class":243},[79,15828,13033],{"class":239},[79,15830,2855],{"class":243},[79,15832,14626],{"class":239},[79,15834,15835],{"class":81,"line":497},[79,15836,3801],{"class":239},[79,15838,15839],{"class":81,"line":503},[79,15840,454],{"emptyLinePlaceholder":453},[79,15842,15843,15845,15847],{"class":81,"line":509},[79,15844,2390],{"class":243},[79,15846,893],{"class":85},[79,15848,13017],{"class":239},[79,15850,15851],{"class":81,"line":514},[79,15852,454],{"emptyLinePlaceholder":453},[79,15854,15855,15857,15859,15862,15864,15866,15868,15870,15872,15874,15877,15879],{"class":81,"line":520},[79,15856,8723],{"class":239},[79,15858,3414],{"class":243},[79,15860,15861],{"class":89}," \"ret = \"",[79,15863,3681],{"class":243},[79,15865,13549],{"class":85},[79,15867,685],{"class":239},[79,15869,3073],{"class":96},[79,15871,1060],{"class":239},[79,15873,3073],{"class":96},[79,15875,15876],{"class":239},") ",[79,15878,3414],{"class":243},[79,15880,11024],{"class":239},[79,15882,15883,15885,15887,15889,15891,15893,15895,15897,15899,15901],{"class":81,"line":526},[79,15884,8723],{"class":239},[79,15886,3414],{"class":243},[79,15888,15861],{"class":89},[79,15890,3681],{"class":243},[79,15892,13549],{"class":85},[79,15894,685],{"class":239},[79,15896,2686],{"class":96},[79,15898,15876],{"class":239},[79,15900,3414],{"class":243},[79,15902,11024],{"class":239},[79,15904,15905],{"class":81,"line":532},[79,15906,454],{"emptyLinePlaceholder":453},[79,15908,15909,15911,15913,15915],{"class":81,"line":537},[79,15910,4518],{"class":85},[79,15912,685],{"class":239},[79,15914,4523],{"class":89},[79,15916,4925],{"class":239},[79,15918,15919],{"class":81,"line":543},[79,15920,454],{"emptyLinePlaceholder":453},[79,15922,15923,15925,15927],{"class":81,"line":549},[79,15924,711],{"class":243},[79,15926,670],{"class":96},[79,15928,3531],{"class":239},[79,15930,15931],{"class":81,"line":555},[79,15932,3801],{"class":239},[19,15934,13496],{},[26,15936,15937,15940,15943],{},[29,15938,15939],{},"我传就用我；没传就用你",[29,15941,15942],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[29,15944,15945],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15947,15949],{"id":15948},"_72函数的占位参数","7.2函数的占位参数",[19,15951,15952],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15954,15955,15957,15958],{},[2528,15956,7379],{}," ",[59,15959,15960],{},"返回值类型 函数名 (数据类型){}",[51,15962,15964],{"className":2376,"code":15963,"language":2378,"meta":57,"style":57},"\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",[59,15965,15966,15971,15989,16002,16006,16014,16018,16035,16039,16049,16053,16061],{"__ignoreMap":57},[79,15967,15968],{"class":81,"line":82},[79,15969,15970],{"class":2440},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[79,15972,15973,15975,15977,15979,15981,15983,15985,15987],{"class":81,"line":167},[79,15974,7560],{"class":243},[79,15976,13549],{"class":85},[79,15978,685],{"class":239},[79,15980,2390],{"class":243},[79,15982,3635],{"class":7412},[79,15984,1060],{"class":239},[79,15986,2390],{"class":243},[79,15988,14605],{"class":239},[79,15990,15991,15993,15995,15998,16000],{"class":81,"line":178},[79,15992,8723],{"class":239},[79,15994,3414],{"class":243},[79,15996,15997],{"class":89}," \"this is func\"",[79,15999,3681],{"class":243},[79,16001,11024],{"class":239},[79,16003,16004],{"class":81,"line":457},[79,16005,3801],{"class":239},[79,16007,16008,16010,16012],{"class":81,"line":462},[79,16009,2390],{"class":243},[79,16011,893],{"class":85},[79,16013,13017],{"class":239},[79,16015,16016],{"class":81,"line":474},[79,16017,454],{"emptyLinePlaceholder":453},[79,16019,16020,16022,16024,16026,16028,16030,16032],{"class":81,"line":480},[79,16021,15448],{"class":85},[79,16023,685],{"class":239},[79,16025,2820],{"class":96},[79,16027,2752],{"class":239},[79,16029,2820],{"class":96},[79,16031,8161],{"class":239},[79,16033,16034],{"class":2440}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[79,16036,16037],{"class":81,"line":486},[79,16038,454],{"emptyLinePlaceholder":453},[79,16040,16041,16043,16045,16047],{"class":81,"line":491},[79,16042,4518],{"class":85},[79,16044,685],{"class":239},[79,16046,4523],{"class":89},[79,16048,4925],{"class":239},[79,16050,16051],{"class":81,"line":497},[79,16052,454],{"emptyLinePlaceholder":453},[79,16054,16055,16057,16059],{"class":81,"line":503},[79,16056,711],{"class":243},[79,16058,670],{"class":96},[79,16060,3531],{"class":239},[79,16062,16063],{"class":81,"line":509},[79,16064,3801],{"class":239},[19,16066,16067],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,16069,16071],{"id":16070},"_73函数重载","7.3函数重载",[19,16073,16074],{},"意思是函数名是可以相同的",[265,16076,16078],{"id":16077},"_731基本语法","7.3.1基本语法",[19,16080,16081],{},"作用：函数名可以相同，提高复用性",[19,16083,16084],{},[2528,16085,16086],{},"函数重载满足条件：",[3377,16088,16089,16092,16095],{},[29,16090,16091],{},"同一个作用域下",[29,16093,16094],{},"函数名称相同",[29,16096,16097,16098,16101,16102,16105,16106],{},"函数参数",[2528,16099,16100],{},"类型不同","  或者 ",[2528,16103,16104],{},"个数不同"," 或者 ",[2528,16107,16108],{},"顺序不同",[19,16110,16111,16114],{},[2528,16112,16113],{},"注意:","  函数的返回值不可以作为函数重载的条件",[51,16116,16118],{"className":12105,"code":16117,"language":12107,"meta":57,"style":57},"\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",[59,16119,16120,16125,16133,16137,16150,16154,16168,16172,16185,16189,16204,16208,16221,16225,16246,16250,16263,16267,16287,16291,16304,16308,16312,16317,16322,16327,16332,16337,16341,16345,16353,16357,16363,16373,16383,16397,16412,16416,16426,16430,16438],{"__ignoreMap":57},[79,16121,16122],{"class":81,"line":82},[79,16123,16124],{"class":2440},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[79,16126,16127,16129,16131],{"class":81,"line":167},[79,16128,7560],{"class":243},[79,16130,13549],{"class":85},[79,16132,4191],{"class":239},[79,16134,16135],{"class":81,"line":178},[79,16136,3782],{"class":239},[79,16138,16139,16141,16143,16146,16148],{"class":81,"line":457},[79,16140,8723],{"class":239},[79,16142,3414],{"class":243},[79,16144,16145],{"class":89}," \"func 的调用！\"",[79,16147,3681],{"class":243},[79,16149,11024],{"class":239},[79,16151,16152],{"class":81,"line":462},[79,16153,3801],{"class":239},[79,16155,16156,16158,16160,16162,16164,16166],{"class":81,"line":474},[79,16157,7560],{"class":243},[79,16159,13549],{"class":85},[79,16161,685],{"class":239},[79,16163,2390],{"class":243},[79,16165,3635],{"class":7412},[79,16167,253],{"class":239},[79,16169,16170],{"class":81,"line":480},[79,16171,3782],{"class":239},[79,16173,16174,16176,16178,16181,16183],{"class":81,"line":486},[79,16175,8723],{"class":239},[79,16177,3414],{"class":243},[79,16179,16180],{"class":89}," \"func (int a) 的调用！\"",[79,16182,3681],{"class":243},[79,16184,11024],{"class":239},[79,16186,16187],{"class":81,"line":491},[79,16188,3801],{"class":239},[79,16190,16191,16193,16195,16197,16200,16202],{"class":81,"line":497},[79,16192,7560],{"class":243},[79,16194,13549],{"class":85},[79,16196,685],{"class":239},[79,16198,16199],{"class":243},"double",[79,16201,3635],{"class":7412},[79,16203,253],{"class":239},[79,16205,16206],{"class":81,"line":503},[79,16207,3782],{"class":239},[79,16209,16210,16212,16214,16217,16219],{"class":81,"line":509},[79,16211,8723],{"class":239},[79,16213,3414],{"class":243},[79,16215,16216],{"class":89}," \"func (double a)的调用！\"",[79,16218,3681],{"class":243},[79,16220,11024],{"class":239},[79,16222,16223],{"class":81,"line":514},[79,16224,3801],{"class":239},[79,16226,16227,16229,16231,16233,16235,16237,16240,16242,16244],{"class":81,"line":520},[79,16228,7560],{"class":243},[79,16230,13549],{"class":85},[79,16232,685],{"class":239},[79,16234,2390],{"class":243},[79,16236,3635],{"class":7412},[79,16238,16239],{"class":239}," ,",[79,16241,16199],{"class":243},[79,16243,5039],{"class":7412},[79,16245,253],{"class":239},[79,16247,16248],{"class":81,"line":526},[79,16249,3782],{"class":239},[79,16251,16252,16254,16256,16259,16261],{"class":81,"line":532},[79,16253,8723],{"class":239},[79,16255,3414],{"class":243},[79,16257,16258],{"class":89}," \"func (int a ,double b) 的调用！\"",[79,16260,3681],{"class":243},[79,16262,11024],{"class":239},[79,16264,16265],{"class":81,"line":537},[79,16266,3801],{"class":239},[79,16268,16269,16271,16273,16275,16277,16279,16281,16283,16285],{"class":81,"line":543},[79,16270,7560],{"class":243},[79,16272,13549],{"class":85},[79,16274,685],{"class":239},[79,16276,16199],{"class":243},[79,16278,3635],{"class":7412},[79,16280,16239],{"class":239},[79,16282,2390],{"class":243},[79,16284,5039],{"class":7412},[79,16286,253],{"class":239},[79,16288,16289],{"class":81,"line":549},[79,16290,3782],{"class":239},[79,16292,16293,16295,16297,16300,16302],{"class":81,"line":555},[79,16294,8723],{"class":239},[79,16296,3414],{"class":243},[79,16298,16299],{"class":89}," \"func (double a ,int b)的调用！\"",[79,16301,3681],{"class":243},[79,16303,11024],{"class":239},[79,16305,16306],{"class":81,"line":561},[79,16307,3801],{"class":239},[79,16309,16310],{"class":81,"line":567},[79,16311,454],{"emptyLinePlaceholder":453},[79,16313,16314],{"class":81,"line":573},[79,16315,16316],{"class":2440},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[79,16318,16319],{"class":81,"line":579},[79,16320,16321],{"class":2440},"\u002F\u002Fint func(double a, int b)\n",[79,16323,16324],{"class":81,"line":584},[79,16325,16326],{"class":2440},"\u002F\u002F{\n",[79,16328,16329],{"class":81,"line":590},[79,16330,16331],{"class":2440},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[79,16333,16334],{"class":81,"line":596},[79,16335,16336],{"class":2440},"\u002F\u002F}\n",[79,16338,16339],{"class":81,"line":602},[79,16340,454],{"emptyLinePlaceholder":453},[79,16342,16343],{"class":81,"line":608},[79,16344,454],{"emptyLinePlaceholder":453},[79,16346,16347,16349,16351],{"class":81,"line":614},[79,16348,2390],{"class":243},[79,16350,893],{"class":85},[79,16352,13017],{"class":239},[79,16354,16355],{"class":81,"line":620},[79,16356,454],{"emptyLinePlaceholder":453},[79,16358,16359,16361],{"class":81,"line":625},[79,16360,15448],{"class":85},[79,16362,7832],{"class":239},[79,16364,16365,16367,16369,16371],{"class":81,"line":630},[79,16366,15448],{"class":85},[79,16368,685],{"class":239},[79,16370,2820],{"class":96},[79,16372,4925],{"class":239},[79,16374,16375,16377,16379,16381],{"class":81,"line":648},[79,16376,15448],{"class":85},[79,16378,685],{"class":239},[79,16380,2432],{"class":96},[79,16382,4925],{"class":239},[79,16384,16385,16387,16389,16391,16393,16395],{"class":81,"line":659},[79,16386,15448],{"class":85},[79,16388,685],{"class":239},[79,16390,2820],{"class":96},[79,16392,2752],{"class":239},[79,16394,2432],{"class":96},[79,16396,4925],{"class":239},[79,16398,16399,16401,16403,16405,16408,16410],{"class":81,"line":676},[79,16400,15448],{"class":85},[79,16402,685],{"class":239},[79,16404,2432],{"class":96},[79,16406,16407],{"class":239}," , ",[79,16409,2820],{"class":96},[79,16411,4925],{"class":239},[79,16413,16414],{"class":81,"line":708},[79,16415,15373],{"class":239},[79,16417,16418,16420,16422,16424],{"class":81,"line":717},[79,16419,4518],{"class":85},[79,16421,685],{"class":239},[79,16423,4523],{"class":89},[79,16425,4925],{"class":239},[79,16427,16428],{"class":81,"line":722},[79,16429,454],{"emptyLinePlaceholder":453},[79,16431,16432,16434,16436],{"class":81,"line":727},[79,16433,711],{"class":243},[79,16435,670],{"class":96},[79,16437,3531],{"class":239},[79,16439,16440],{"class":81,"line":738},[79,16441,3801],{"class":239},[19,16443,16444],{},"重点：函数返回值不可以作为函数重载条件！",[265,16446,16448],{"id":16447},"_732注意事项","7.3.2注意事项",[3377,16450,16451,16454],{},[29,16452,16453],{},"引用作为重载条件!!!",[29,16455,16456],{},"函数重载碰到函数默认参数",[51,16458,16460],{"className":2376,"code":16459,"language":2378,"meta":57,"style":57},"\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",[59,16461,16462,16467,16472,16476,16492,16496,16509,16513,16517,16535,16539,16552,16556,16560,16564,16569,16573,16597,16601,16614,16618,16622,16636,16640,16653,16657,16661,16669,16673,16685,16695,16708,16712,16716,16724,16728,16738,16742,16750],{"__ignoreMap":57},[79,16463,16464],{"class":81,"line":82},[79,16465,16466],{"class":2440},"\u002F\u002F函数重载注意事项\n",[79,16468,16469],{"class":81,"line":167},[79,16470,16471],{"class":2440},"\u002F\u002F1、引用作为重载条件\n",[79,16473,16474],{"class":81,"line":178},[79,16475,454],{"emptyLinePlaceholder":453},[79,16477,16478,16480,16482,16484,16486,16488,16490],{"class":81,"line":457},[79,16479,7560],{"class":243},[79,16481,13549],{"class":85},[79,16483,685],{"class":239},[79,16485,2390],{"class":243},[79,16487,12748],{"class":243},[79,16489,2614],{"class":7412},[79,16491,253],{"class":239},[79,16493,16494],{"class":81,"line":462},[79,16495,3782],{"class":239},[79,16497,16498,16500,16502,16505,16507],{"class":81,"line":474},[79,16499,8723],{"class":239},[79,16501,3414],{"class":243},[79,16503,16504],{"class":89}," \"func (int &a) 调用 \"",[79,16506,3681],{"class":243},[79,16508,11024],{"class":239},[79,16510,16511],{"class":81,"line":480},[79,16512,3801],{"class":239},[79,16514,16515],{"class":81,"line":486},[79,16516,454],{"emptyLinePlaceholder":453},[79,16518,16519,16521,16523,16525,16527,16529,16531,16533],{"class":81,"line":491},[79,16520,7560],{"class":243},[79,16522,13549],{"class":85},[79,16524,685],{"class":239},[79,16526,8986],{"class":243},[79,16528,4597],{"class":243},[79,16530,12748],{"class":243},[79,16532,2614],{"class":7412},[79,16534,253],{"class":239},[79,16536,16537],{"class":81,"line":497},[79,16538,3782],{"class":239},[79,16540,16541,16543,16545,16548,16550],{"class":81,"line":503},[79,16542,8723],{"class":239},[79,16544,3414],{"class":243},[79,16546,16547],{"class":89}," \"func (const int &a) 调用 \"",[79,16549,3681],{"class":243},[79,16551,11024],{"class":239},[79,16553,16554],{"class":81,"line":509},[79,16555,3801],{"class":239},[79,16557,16558],{"class":81,"line":514},[79,16559,454],{"emptyLinePlaceholder":453},[79,16561,16562],{"class":81,"line":520},[79,16563,454],{"emptyLinePlaceholder":453},[79,16565,16566],{"class":81,"line":526},[79,16567,16568],{"class":2440},"\u002F\u002F2、函数重载碰到函数默认参数\n",[79,16570,16571],{"class":81,"line":532},[79,16572,454],{"emptyLinePlaceholder":453},[79,16574,16575,16577,16579,16581,16583,16585,16587,16589,16591,16593,16595],{"class":81,"line":537},[79,16576,7560],{"class":243},[79,16578,15780],{"class":85},[79,16580,685],{"class":239},[79,16582,2390],{"class":243},[79,16584,3635],{"class":7412},[79,16586,1060],{"class":239},[79,16588,2390],{"class":243},[79,16590,5039],{"class":7412},[79,16592,468],{"class":243},[79,16594,4253],{"class":96},[79,16596,253],{"class":239},[79,16598,16599],{"class":81,"line":543},[79,16600,3782],{"class":239},[79,16602,16603,16605,16607,16610,16612],{"class":81,"line":549},[79,16604,8723],{"class":239},[79,16606,3414],{"class":243},[79,16608,16609],{"class":89}," \"func2(int a, int b = 10) 调用\"",[79,16611,3681],{"class":243},[79,16613,11024],{"class":239},[79,16615,16616],{"class":81,"line":555},[79,16617,3801],{"class":239},[79,16619,16620],{"class":81,"line":561},[79,16621,454],{"emptyLinePlaceholder":453},[79,16623,16624,16626,16628,16630,16632,16634],{"class":81,"line":567},[79,16625,7560],{"class":243},[79,16627,15780],{"class":85},[79,16629,685],{"class":239},[79,16631,2390],{"class":243},[79,16633,3635],{"class":7412},[79,16635,253],{"class":239},[79,16637,16638],{"class":81,"line":573},[79,16639,3782],{"class":239},[79,16641,16642,16644,16646,16649,16651],{"class":81,"line":579},[79,16643,8723],{"class":239},[79,16645,3414],{"class":243},[79,16647,16648],{"class":89}," \"func2(int a) 调用\"",[79,16650,3681],{"class":243},[79,16652,11024],{"class":239},[79,16654,16655],{"class":81,"line":584},[79,16656,3801],{"class":239},[79,16658,16659],{"class":81,"line":590},[79,16660,454],{"emptyLinePlaceholder":453},[79,16662,16663,16665,16667],{"class":81,"line":596},[79,16664,2390],{"class":243},[79,16666,893],{"class":85},[79,16668,13017],{"class":239},[79,16670,16671],{"class":81,"line":602},[79,16672,15373],{"class":239},[79,16674,16675,16677,16679,16681,16683],{"class":81,"line":608},[79,16676,4200],{"class":243},[79,16678,13033],{"class":239},[79,16680,244],{"class":243},[79,16682,4253],{"class":96},[79,16684,3531],{"class":239},[79,16686,16687,16689,16692],{"class":81,"line":614},[79,16688,15448],{"class":85},[79,16690,16691],{"class":239},"(a);",[79,16693,16694],{"class":2440}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[79,16696,16697,16699,16701,16703,16705],{"class":81,"line":620},[79,16698,15448],{"class":85},[79,16700,685],{"class":239},[79,16702,2820],{"class":96},[79,16704,8161],{"class":239},[79,16706,16707],{"class":2440},"\u002F\u002F调用有const   10是个常量\n",[79,16709,16710],{"class":81,"line":625},[79,16711,454],{"emptyLinePlaceholder":453},[79,16713,16714],{"class":81,"line":630},[79,16715,454],{"emptyLinePlaceholder":453},[79,16717,16718,16721],{"class":81,"line":648},[79,16719,16720],{"class":2440},"    \u002F\u002Ffunc2(10);",[79,16722,16723],{"class":2440}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[79,16725,16726],{"class":81,"line":659},[79,16727,454],{"emptyLinePlaceholder":453},[79,16729,16730,16732,16734,16736],{"class":81,"line":676},[79,16731,4518],{"class":85},[79,16733,685],{"class":239},[79,16735,4523],{"class":89},[79,16737,4925],{"class":239},[79,16739,16740],{"class":81,"line":708},[79,16741,454],{"emptyLinePlaceholder":453},[79,16743,16744,16746,16748],{"class":81,"line":717},[79,16745,711],{"class":243},[79,16747,670],{"class":96},[79,16749,3531],{"class":239},[79,16751,16752],{"class":81,"line":722},[79,16753,3801],{"class":239},[2287,16755,16756],{},"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":57,"searchDepth":167,"depth":167,"links":16758},[16759,16760,16761],{"id":15692,"depth":167,"text":15693},{"id":15948,"depth":167,"text":15949},{"id":16070,"depth":167,"text":16071,"children":16762},[16763,16764],{"id":16077,"depth":178,"text":16078},{"id":16447,"depth":178,"text":16448},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15684,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16771,"title":16772,"body":16773,"description":25504,"extension":2314,"meta":25505,"navigation":453,"path":25506,"seo":25507,"stem":25508,"__hash__":25509},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16774,"toc":25485},[16775,16778,16784,16791,16795,16798,16801,16804,16808,16812,16815,16818,16826,16831,16834,16841,16846,17005,17008,17260,17263,17266,17269,17274,17277,17280,17291,17296,17532,17536,17546,17549,17557,17704,17708,17711,17714,17718,18163,18167,18175,18183,19075,19082,19087,19714,19717,19720,19723,19842,19845,19932,19935,20061,20064,20158,20161,20514,20518,20526,20530,20537,20540,20543,20554,20560,20565,20577,20585,20605,20613,20630,20816,20819,20823,20826,20829,20832,20835,20838,20841,20844,21304,21310,21314,21317,21328,21915,21918,22407,22411,22414,22417,22420,22423,22426,22434,22830,22834,22837,22840,23287,23290,23293,23298,23301,23306,23309,23313,23316,23318,23324,23327,23633,23643,23684,23688,23691,23693,23726,23729,24036,24038,24053,24056,24079,24088,24094,24097,24101,24104,24107,24112,24123,24128,24136,24141,24271,24274,24277,24452,24457,24669,24673,24676,24790,24795,25034,25038,25042,25045,25048,25053,25158,25161,25164,25167,25171,25282,25285,25288,25293,25345,25348,25351,25356,25402,25405,25410,25478,25480,25483],[10,16776,16772],{"id":16777},"_8类和对象",[19,16779,16780,16781],{},"C++面向对象的三大特性为",[2528,16782,16783],{},"封装、继承、多态",[19,16785,16786,16787,16790],{},"C++认为",[2528,16788,16789],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16792,16793],{},[2528,16794,1789],{},[19,16796,16797],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16799,16800],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16802,16803],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16805,16807],{"id":16806},"_81封装","8.1封装",[265,16809,16811],{"id":16810},"_811封装的意义","8.1.1封装的意义",[19,16813,16814],{},"封装是C++面向对象三大特性之一",[19,16816,16817],{},"封装的意义：",[3377,16819,16820,16823],{},[29,16821,16822],{},"将属性和行为作为一个整体，表现生活中的事物",[29,16824,16825],{},"将属性和行为加以权限控制",[19,16827,16828],{},[2528,16829,16830],{},"封装意义一：",[19,16832,16833],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16835,16836,15957,16838],{},[2528,16837,7379],{},[59,16839,16840],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[26,16842,16843],{},[29,16844,16845],{},"**示例1：**设计一个圆类，求圆的周长",[51,16847,16849],{"className":2376,"code":16848,"language":2378,"meta":57,"style":57},"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",[59,16850,16851,16859,16863,16868,16873,16878,16883,16890,16895,16905,16909,16927,16931,16935,16943,16947,16952,16957,16962,16967,16978,17001],{"__ignoreMap":57},[79,16852,16853,16856],{"class":81,"line":82},[79,16854,16855],{"class":243},"class",[79,16857,16858],{"class":85}," Circle\n",[79,16860,16861],{"class":81,"line":167},[79,16862,3782],{"class":239},[79,16864,16865],{"class":81,"line":178},[79,16866,16867],{"class":2440},"    \u002F\u002F访问权限\n",[79,16869,16870],{"class":81,"line":457},[79,16871,16872],{"class":2440},"    \u002F\u002F公共权限\n",[79,16874,16875],{"class":81,"line":462},[79,16876,16877],{"class":243},"public:\n",[79,16879,16880],{"class":81,"line":474},[79,16881,16882],{"class":2440},"    \u002F\u002F属性\n",[79,16884,16885,16887],{"class":81,"line":480},[79,16886,4200],{"class":243},[79,16888,16889],{"class":239}," m_r;\n",[79,16891,16892],{"class":81,"line":486},[79,16893,16894],{"class":2440},"    \u002F\u002F行为\n",[79,16896,16897,16900,16903],{"class":81,"line":491},[79,16898,16899],{"class":243},"    double",[79,16901,16902],{"class":85}," calculateZC",[79,16904,4191],{"class":239},[79,16906,16907],{"class":81,"line":497},[79,16908,4245],{"class":239},[79,16910,16911,16914,16917,16919,16922,16924],{"class":81,"line":503},[79,16912,16913],{"class":243},"        return",[79,16915,16916],{"class":96}," 2",[79,16918,2829],{"class":243},[79,16920,16921],{"class":239},"PI",[79,16923,2829],{"class":243},[79,16925,16926],{"class":239},"m_r;\n",[79,16928,16929],{"class":81,"line":509},[79,16930,4402],{"class":239},[79,16932,16933],{"class":81,"line":514},[79,16934,6197],{"class":239},[79,16936,16937,16939,16941],{"class":81,"line":520},[79,16938,2390],{"class":243},[79,16940,893],{"class":85},[79,16942,4191],{"class":239},[79,16944,16945],{"class":81,"line":526},[79,16946,3782],{"class":239},[79,16948,16949],{"class":81,"line":532},[79,16950,16951],{"class":2440},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[79,16953,16954],{"class":81,"line":537},[79,16955,16956],{"class":2440},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[79,16958,16959],{"class":81,"line":543},[79,16960,16961],{"class":239},"    Circle c1;\n",[79,16963,16964],{"class":81,"line":549},[79,16965,16966],{"class":2440},"    \u002F\u002F给圆对象 的属性进行赋值\n",[79,16968,16969,16972,16974,16976],{"class":81,"line":555},[79,16970,16971],{"class":239},"    c1.m_r",[79,16973,244],{"class":243},[79,16975,2820],{"class":96},[79,16977,3531],{"class":239},[79,16979,16980,16982,16984,16987,16989,16992,16995,16997,16999],{"class":81,"line":561},[79,16981,3787],{"class":239},[79,16983,3414],{"class":243},[79,16985,16986],{"class":89},"\"圆的周长\"",[79,16988,3414],{"class":243},[79,16990,16991],{"class":239},"c1.",[79,16993,16994],{"class":85},"calculateZC",[79,16996,4641],{"class":239},[79,16998,3414],{"class":243},[79,17000,3436],{"class":239},[79,17002,17003],{"class":81,"line":567},[79,17004,3801],{"class":239},[19,17006,17007],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[51,17009,17011],{"className":2376,"code":17010,"language":2378,"meta":57,"style":57},"#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",[59,17012,17013,17019,17029,17035,17041,17045,17049,17054,17061,17066,17083,17087,17097,17101,17106,17122,17126,17136,17140,17145,17153,17157,17189,17193,17197,17205,17209,17214,17219,17233,17247,17256],{"__ignoreMap":57},[79,17014,17015,17017],{"class":81,"line":82},[79,17016,4166],{"class":243},[79,17018,4169],{"class":89},[79,17020,17021,17023,17025,17027],{"class":81,"line":167},[79,17022,4174],{"class":243},[79,17024,4177],{"class":243},[79,17026,4180],{"class":85},[79,17028,3531],{"class":239},[79,17030,17031,17033],{"class":81,"line":178},[79,17032,4166],{"class":243},[79,17034,9943],{"class":89},[79,17036,17037,17039],{"class":81,"line":457},[79,17038,16855],{"class":243},[79,17040,9956],{"class":85},[79,17042,17043],{"class":81,"line":462},[79,17044,3782],{"class":239},[79,17046,17047],{"class":81,"line":474},[79,17048,16877],{"class":243},[79,17050,17051],{"class":81,"line":480},[79,17052,17053],{"class":239},"    string m_name;\n",[79,17055,17056,17058],{"class":81,"line":486},[79,17057,4200],{"class":243},[79,17059,17060],{"class":239}," m_id;\n",[79,17062,17063],{"class":81,"line":491},[79,17064,17065],{"class":2440},"    \u002F\u002F赋值姓名\n",[79,17067,17068,17071,17074,17076,17079,17081],{"class":81,"line":497},[79,17069,17070],{"class":243},"    void",[79,17072,17073],{"class":85}," setName",[79,17075,685],{"class":239},[79,17077,17078],{"class":85},"string",[79,17080,2238],{"class":7412},[79,17082,253],{"class":239},[79,17084,17085],{"class":81,"line":503},[79,17086,4245],{"class":239},[79,17088,17089,17092,17094],{"class":81,"line":509},[79,17090,17091],{"class":239},"        m_name",[79,17093,244],{"class":243},[79,17095,17096],{"class":239},"name;\n",[79,17098,17099],{"class":81,"line":514},[79,17100,4402],{"class":239},[79,17102,17103],{"class":81,"line":520},[79,17104,17105],{"class":2440},"    \u002F\u002F赋值学号\n",[79,17107,17108,17110,17113,17115,17117,17120],{"class":81,"line":526},[79,17109,17070],{"class":243},[79,17111,17112],{"class":85}," setId",[79,17114,685],{"class":239},[79,17116,2390],{"class":243},[79,17118,17119],{"class":7412}," id",[79,17121,253],{"class":239},[79,17123,17124],{"class":81,"line":532},[79,17125,4245],{"class":239},[79,17127,17128,17131,17133],{"class":81,"line":537},[79,17129,17130],{"class":239},"        m_id",[79,17132,244],{"class":243},[79,17134,17135],{"class":239},"id;\n",[79,17137,17138],{"class":81,"line":543},[79,17139,4402],{"class":239},[79,17141,17142],{"class":81,"line":549},[79,17143,17144],{"class":2440},"    \u002F\u002F打印学生信息\n",[79,17146,17147,17149,17151],{"class":81,"line":555},[79,17148,17070],{"class":243},[79,17150,11798],{"class":85},[79,17152,4191],{"class":239},[79,17154,17155],{"class":81,"line":561},[79,17156,4245],{"class":239},[79,17158,17159,17161,17163,17166,17168,17171,17173,17175,17177,17180,17182,17185,17187],{"class":81,"line":567},[79,17160,5654],{"class":239},[79,17162,3414],{"class":243},[79,17164,17165],{"class":89},"\"姓名：\"",[79,17167,3414],{"class":243},[79,17169,17170],{"class":239},"m_name",[79,17172,3414],{"class":243},[79,17174,6559],{"class":89},[79,17176,3414],{"class":243},[79,17178,17179],{"class":89},"\"学号：\"",[79,17181,3414],{"class":243},[79,17183,17184],{"class":239},"m_id",[79,17186,3414],{"class":243},[79,17188,3436],{"class":239},[79,17190,17191],{"class":81,"line":573},[79,17192,4402],{"class":239},[79,17194,17195],{"class":81,"line":579},[79,17196,6197],{"class":239},[79,17198,17199,17201,17203],{"class":81,"line":584},[79,17200,2390],{"class":243},[79,17202,893],{"class":85},[79,17204,4191],{"class":239},[79,17206,17207],{"class":81,"line":590},[79,17208,3782],{"class":239},[79,17210,17211],{"class":81,"line":596},[79,17212,17213],{"class":2440},"    \u002F\u002F实例化\n",[79,17215,17216],{"class":81,"line":602},[79,17217,17218],{"class":239},"    Student s1;\n",[79,17220,17221,17224,17227,17229,17231],{"class":81,"line":608},[79,17222,17223],{"class":239},"    s1.",[79,17225,17226],{"class":85},"setName",[79,17228,685],{"class":239},[79,17230,10110],{"class":89},[79,17232,4925],{"class":239},[79,17234,17235,17237,17240,17242,17245],{"class":81,"line":614},[79,17236,17223],{"class":239},[79,17238,17239],{"class":85},"setId",[79,17241,685],{"class":239},[79,17243,17244],{"class":96},"123456",[79,17246,4925],{"class":239},[79,17248,17249,17251,17254],{"class":81,"line":620},[79,17250,17223],{"class":239},[79,17252,17253],{"class":85},"printInfo",[79,17255,7832],{"class":239},[79,17257,17258],{"class":81,"line":625},[79,17259,3801],{"class":239},[19,17261,17262],{},"类中的属性和行为统称为成员",[19,17264,17265],{},"属性：成员属性(成员变量)",[19,17267,17268],{},"方法：成员函数(成员方法)",[19,17270,17271],{},[2528,17272,17273],{},"封装意义二：",[19,17275,17276],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,17278,17279],{},"访问权限有三种：",[26,17281,17282,17285,17288],{},[29,17283,17284],{},"public        公共权限",[29,17286,17287],{},"protected 保护权限",[29,17289,17290],{},"private      私有权限",[19,17292,17293],{},[2528,17294,17295],{},"示例：",[51,17297,17299],{"className":12105,"code":17298,"language":12107,"meta":57,"style":57},"\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",[59,17300,17301,17306,17311,17316,17321,17325,17332,17336,17341,17345,17350,17354,17359,17364,17369,17373,17378,17383,17390,17394,17398,17406,17410,17421,17433,17445,17449,17453,17457,17465,17469,17474,17486,17494,17502,17506,17516,17520,17528],{"__ignoreMap":57},[79,17302,17303],{"class":81,"line":82},[79,17304,17305],{"class":2440},"\u002F\u002F三种权限\n",[79,17307,17308],{"class":81,"line":167},[79,17309,17310],{"class":2440},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[79,17312,17313],{"class":81,"line":178},[79,17314,17315],{"class":2440},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[79,17317,17318],{"class":81,"line":457},[79,17319,17320],{"class":2440},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[79,17322,17323],{"class":81,"line":462},[79,17324,454],{"emptyLinePlaceholder":453},[79,17326,17327,17329],{"class":81,"line":474},[79,17328,16855],{"class":243},[79,17330,17331],{"class":85}," Person\n",[79,17333,17334],{"class":81,"line":480},[79,17335,3782],{"class":239},[79,17337,17338],{"class":81,"line":486},[79,17339,17340],{"class":2440},"    \u002F\u002F姓名  公共权限\n",[79,17342,17343],{"class":81,"line":491},[79,17344,16877],{"class":243},[79,17346,17347],{"class":81,"line":497},[79,17348,17349],{"class":239},"    string m_Name;\n",[79,17351,17352],{"class":81,"line":503},[79,17353,454],{"emptyLinePlaceholder":453},[79,17355,17356],{"class":81,"line":509},[79,17357,17358],{"class":2440},"    \u002F\u002F汽车  保护权限\n",[79,17360,17361],{"class":81,"line":514},[79,17362,17363],{"class":243},"protected:\n",[79,17365,17366],{"class":81,"line":520},[79,17367,17368],{"class":239},"    string m_Car;\n",[79,17370,17371],{"class":81,"line":526},[79,17372,454],{"emptyLinePlaceholder":453},[79,17374,17375],{"class":81,"line":532},[79,17376,17377],{"class":2440},"    \u002F\u002F银行卡密码  私有权限\n",[79,17379,17380],{"class":81,"line":537},[79,17381,17382],{"class":243},"private:\n",[79,17384,17385,17387],{"class":81,"line":543},[79,17386,4200],{"class":243},[79,17388,17389],{"class":239}," m_Password;\n",[79,17391,17392],{"class":81,"line":549},[79,17393,454],{"emptyLinePlaceholder":453},[79,17395,17396],{"class":81,"line":555},[79,17397,16877],{"class":243},[79,17399,17400,17402,17404],{"class":81,"line":561},[79,17401,17070],{"class":243},[79,17403,13549],{"class":85},[79,17405,4191],{"class":239},[79,17407,17408],{"class":81,"line":567},[79,17409,4245],{"class":239},[79,17411,17412,17415,17417,17419],{"class":81,"line":573},[79,17413,17414],{"class":239},"        m_Name ",[79,17416,244],{"class":243},[79,17418,11122],{"class":89},[79,17420,3531],{"class":239},[79,17422,17423,17426,17428,17431],{"class":81,"line":579},[79,17424,17425],{"class":239},"        m_Car ",[79,17427,244],{"class":243},[79,17429,17430],{"class":89}," \"拖拉机\"",[79,17432,3531],{"class":239},[79,17434,17435,17438,17440,17443],{"class":81,"line":584},[79,17436,17437],{"class":239},"        m_Password ",[79,17439,244],{"class":243},[79,17441,17442],{"class":96}," 123456",[79,17444,3531],{"class":239},[79,17446,17447],{"class":81,"line":590},[79,17448,4402],{"class":239},[79,17450,17451],{"class":81,"line":596},[79,17452,6197],{"class":239},[79,17454,17455],{"class":81,"line":602},[79,17456,454],{"emptyLinePlaceholder":453},[79,17458,17459,17461,17463],{"class":81,"line":608},[79,17460,2390],{"class":243},[79,17462,893],{"class":85},[79,17464,13017],{"class":239},[79,17466,17467],{"class":81,"line":614},[79,17468,454],{"emptyLinePlaceholder":453},[79,17470,17471],{"class":81,"line":620},[79,17472,17473],{"class":239},"    Person p;\n",[79,17475,17476,17479,17481,17484],{"class":81,"line":625},[79,17477,17478],{"class":239},"    p.m_Name ",[79,17480,244],{"class":243},[79,17482,17483],{"class":89}," \"李四\"",[79,17485,3531],{"class":239},[79,17487,17488,17491],{"class":81,"line":630},[79,17489,17490],{"class":2440},"    \u002F\u002Fp.m_Car = \"奔驰\";",[79,17492,17493],{"class":2440},"  \u002F\u002F保护权限类外访问不到\n",[79,17495,17496,17499],{"class":81,"line":648},[79,17497,17498],{"class":2440},"    \u002F\u002Fp.m_Password = 123;",[79,17500,17501],{"class":2440}," \u002F\u002F私有权限类外访问不到\n",[79,17503,17504],{"class":81,"line":659},[79,17505,454],{"emptyLinePlaceholder":453},[79,17507,17508,17510,17512,17514],{"class":81,"line":676},[79,17509,4518],{"class":85},[79,17511,685],{"class":239},[79,17513,4523],{"class":89},[79,17515,4925],{"class":239},[79,17517,17518],{"class":81,"line":708},[79,17519,454],{"emptyLinePlaceholder":453},[79,17521,17522,17524,17526],{"class":81,"line":717},[79,17523,711],{"class":243},[79,17525,670],{"class":96},[79,17527,3531],{"class":239},[79,17529,17530],{"class":81,"line":722},[79,17531,3801],{"class":239},[265,17533,17535],{"id":17534},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17537,17538,17539,17542,17543],{},"在C++中 struct和class唯一的",[2528,17540,17541],{},"区别","就在于 ",[2528,17544,17545],{},"默认的访问权限不同",[19,17547,17548],{},"区别：",[3377,17550,17551,17554],{},[29,17552,17553],{},"struct 默认权限为公共",[29,17555,17556],{},"class   默认权限为私有",[51,17558,17560],{"className":12105,"code":17559,"language":12107,"meta":57,"style":57},"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",[59,17561,17562,17569,17573,17583,17587,17591,17598,17602,17612,17616,17620,17628,17632,17637,17651,17655,17660,17674,17678,17688,17692,17700],{"__ignoreMap":57},[79,17563,17564,17566],{"class":81,"line":82},[79,17565,16855],{"class":243},[79,17567,17568],{"class":85}," C1\n",[79,17570,17571],{"class":81,"line":167},[79,17572,3782],{"class":239},[79,17574,17575,17577,17580],{"class":81,"line":178},[79,17576,4200],{"class":243},[79,17578,17579],{"class":239},"  m_A;",[79,17581,17582],{"class":2440}," \u002F\u002F默认是私有权限\n",[79,17584,17585],{"class":81,"line":457},[79,17586,6197],{"class":239},[79,17588,17589],{"class":81,"line":462},[79,17590,454],{"emptyLinePlaceholder":453},[79,17592,17593,17595],{"class":81,"line":474},[79,17594,9953],{"class":243},[79,17596,17597],{"class":85}," C2\n",[79,17599,17600],{"class":81,"line":480},[79,17601,3782],{"class":239},[79,17603,17604,17606,17609],{"class":81,"line":486},[79,17605,4200],{"class":243},[79,17607,17608],{"class":239}," m_A;",[79,17610,17611],{"class":2440},"  \u002F\u002F默认是公共权限\n",[79,17613,17614],{"class":81,"line":491},[79,17615,6197],{"class":239},[79,17617,17618],{"class":81,"line":497},[79,17619,454],{"emptyLinePlaceholder":453},[79,17621,17622,17624,17626],{"class":81,"line":503},[79,17623,2390],{"class":243},[79,17625,893],{"class":85},[79,17627,13017],{"class":239},[79,17629,17630],{"class":81,"line":509},[79,17631,454],{"emptyLinePlaceholder":453},[79,17633,17634],{"class":81,"line":514},[79,17635,17636],{"class":239},"    C1 c1;\n",[79,17638,17639,17642,17644,17646,17648],{"class":81,"line":520},[79,17640,17641],{"class":239},"    c1.m_A ",[79,17643,244],{"class":243},[79,17645,4253],{"class":96},[79,17647,2437],{"class":239},[79,17649,17650],{"class":2440}," \u002F\u002F错误，访问权限是私有\n",[79,17652,17653],{"class":81,"line":526},[79,17654,454],{"emptyLinePlaceholder":453},[79,17656,17657],{"class":81,"line":532},[79,17658,17659],{"class":239},"    C2 c2;\n",[79,17661,17662,17665,17667,17669,17671],{"class":81,"line":537},[79,17663,17664],{"class":239},"    c2.m_A ",[79,17666,244],{"class":243},[79,17668,4253],{"class":96},[79,17670,2437],{"class":239},[79,17672,17673],{"class":2440}," \u002F\u002F正确，访问权限是公共\n",[79,17675,17676],{"class":81,"line":543},[79,17677,454],{"emptyLinePlaceholder":453},[79,17679,17680,17682,17684,17686],{"class":81,"line":549},[79,17681,4518],{"class":85},[79,17683,685],{"class":239},[79,17685,4523],{"class":89},[79,17687,4925],{"class":239},[79,17689,17690],{"class":81,"line":555},[79,17691,454],{"emptyLinePlaceholder":453},[79,17693,17694,17696,17698],{"class":81,"line":561},[79,17695,711],{"class":243},[79,17697,670],{"class":96},[79,17699,3531],{"class":239},[79,17701,17702],{"class":81,"line":567},[79,17703,3801],{"class":239},[265,17705,17707],{"id":17706},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17709,17710],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17712,17713],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17715,17716],{},[2528,17717,17295],{},[51,17719,17721],{"className":12105,"code":17720,"language":12107,"meta":57,"style":57},"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",[59,17722,17723,17733,17737,17741,17746,17760,17769,17773,17783,17787,17794,17798,17802,17806,17811,17820,17827,17831,17836,17852,17875,17888,17895,17899,17908,17912,17916,17921,17937,17947,17951,17955,17959,17967,17971,17981,17985,17993,17997,18001,18009,18013,18017,18022,18035,18058,18062,18067,18080,18102,18106,18111,18125,18133,18137,18147,18151,18159],{"__ignoreMap":57},[79,17724,17725,17727,17730],{"class":81,"line":82},[79,17726,16855],{"class":243},[79,17728,17729],{"class":85}," Person",[79,17731,17732],{"class":239}," {\n",[79,17734,17735],{"class":81,"line":167},[79,17736,16877],{"class":243},[79,17738,17739],{"class":81,"line":178},[79,17740,454],{"emptyLinePlaceholder":453},[79,17742,17743],{"class":81,"line":457},[79,17744,17745],{"class":2440},"    \u002F\u002F姓名设置可读可写\n",[79,17747,17748,17750,17752,17754,17756,17758],{"class":81,"line":462},[79,17749,17070],{"class":243},[79,17751,17073],{"class":85},[79,17753,685],{"class":239},[79,17755,17078],{"class":85},[79,17757,2238],{"class":7412},[79,17759,14605],{"class":239},[79,17761,17762,17764,17766],{"class":81,"line":474},[79,17763,17414],{"class":239},[79,17765,244],{"class":243},[79,17767,17768],{"class":239}," name;\n",[79,17770,17771],{"class":81,"line":480},[79,17772,4402],{"class":239},[79,17774,17775,17778,17781],{"class":81,"line":486},[79,17776,17777],{"class":85},"    string",[79,17779,17780],{"class":85}," getName",[79,17782,4191],{"class":239},[79,17784,17785],{"class":81,"line":491},[79,17786,4245],{"class":239},[79,17788,17789,17791],{"class":81,"line":497},[79,17790,16913],{"class":243},[79,17792,17793],{"class":239}," m_Name;\n",[79,17795,17796],{"class":81,"line":503},[79,17797,4402],{"class":239},[79,17799,17800],{"class":81,"line":509},[79,17801,454],{"emptyLinePlaceholder":453},[79,17803,17804],{"class":81,"line":514},[79,17805,454],{"emptyLinePlaceholder":453},[79,17807,17808],{"class":81,"line":520},[79,17809,17810],{"class":2440},"    \u002F\u002F获取年龄 \n",[79,17812,17813,17815,17818],{"class":81,"line":526},[79,17814,4200],{"class":243},[79,17816,17817],{"class":85}," getAge",[79,17819,13017],{"class":239},[79,17821,17822,17824],{"class":81,"line":532},[79,17823,16913],{"class":243},[79,17825,17826],{"class":239}," m_Age;\n",[79,17828,17829],{"class":81,"line":537},[79,17830,4402],{"class":239},[79,17832,17833],{"class":81,"line":543},[79,17834,17835],{"class":2440},"    \u002F\u002F设置年龄\n",[79,17837,17838,17840,17843,17845,17847,17850],{"class":81,"line":549},[79,17839,17070],{"class":243},[79,17841,17842],{"class":85}," setAge",[79,17844,685],{"class":239},[79,17846,2390],{"class":243},[79,17848,17849],{"class":7412}," age",[79,17851,14605],{"class":239},[79,17853,17854,17856,17859,17861,17863,17865,17868,17870,17873],{"class":81,"line":555},[79,17855,1132],{"class":243},[79,17857,17858],{"class":239}," (age ",[79,17860,392],{"class":243},[79,17862,670],{"class":96},[79,17864,5458],{"class":243},[79,17866,17867],{"class":239}," age ",[79,17869,3330],{"class":243},[79,17871,17872],{"class":96}," 150",[79,17874,14605],{"class":239},[79,17876,17877,17879,17881,17884,17886],{"class":81,"line":561},[79,17878,11901],{"class":239},[79,17880,3414],{"class":243},[79,17882,17883],{"class":89}," \"你个老妖精!\"",[79,17885,3681],{"class":243},[79,17887,11024],{"class":239},[79,17889,17890,17893],{"class":81,"line":567},[79,17891,17892],{"class":243},"            return",[79,17894,3531],{"class":239},[79,17896,17897],{"class":81,"line":573},[79,17898,4742],{"class":239},[79,17900,17901,17904,17906],{"class":81,"line":579},[79,17902,17903],{"class":239},"        m_Age ",[79,17905,244],{"class":243},[79,17907,9991],{"class":239},[79,17909,17910],{"class":81,"line":584},[79,17911,4402],{"class":239},[79,17913,17914],{"class":81,"line":590},[79,17915,454],{"emptyLinePlaceholder":453},[79,17917,17918],{"class":81,"line":596},[79,17919,17920],{"class":2440},"    \u002F\u002F情人设置为只写\n",[79,17922,17923,17925,17928,17930,17932,17935],{"class":81,"line":602},[79,17924,17070],{"class":243},[79,17926,17927],{"class":85}," setLover",[79,17929,685],{"class":239},[79,17931,17078],{"class":85},[79,17933,17934],{"class":7412}," lover",[79,17936,14605],{"class":239},[79,17938,17939,17942,17944],{"class":81,"line":608},[79,17940,17941],{"class":239},"        m_Lover ",[79,17943,244],{"class":243},[79,17945,17946],{"class":239}," lover;\n",[79,17948,17949],{"class":81,"line":614},[79,17950,4402],{"class":239},[79,17952,17953],{"class":81,"line":620},[79,17954,454],{"emptyLinePlaceholder":453},[79,17956,17957],{"class":81,"line":625},[79,17958,17382],{"class":243},[79,17960,17961,17964],{"class":81,"line":630},[79,17962,17963],{"class":239},"    string m_Name;",[79,17965,17966],{"class":2440}," \u002F\u002F可读可写  姓名\n",[79,17968,17969],{"class":81,"line":648},[79,17970,15373],{"class":239},[79,17972,17973,17975,17978],{"class":81,"line":659},[79,17974,4200],{"class":243},[79,17976,17977],{"class":239}," m_Age;",[79,17979,17980],{"class":2440}," \u002F\u002F只读  年龄\n",[79,17982,17983],{"class":81,"line":676},[79,17984,454],{"emptyLinePlaceholder":453},[79,17986,17987,17990],{"class":81,"line":708},[79,17988,17989],{"class":239},"    string m_Lover;",[79,17991,17992],{"class":2440}," \u002F\u002F只写  情人\n",[79,17994,17995],{"class":81,"line":717},[79,17996,6197],{"class":239},[79,17998,17999],{"class":81,"line":722},[79,18000,454],{"emptyLinePlaceholder":453},[79,18002,18003,18005,18007],{"class":81,"line":727},[79,18004,2390],{"class":243},[79,18006,893],{"class":85},[79,18008,13017],{"class":239},[79,18010,18011],{"class":81,"line":738},[79,18012,454],{"emptyLinePlaceholder":453},[79,18014,18015],{"class":81,"line":753},[79,18016,17473],{"class":239},[79,18018,18019],{"class":81,"line":768},[79,18020,18021],{"class":2440},"    \u002F\u002F姓名设置\n",[79,18023,18024,18027,18029,18031,18033],{"class":81,"line":776},[79,18025,18026],{"class":239},"    p.",[79,18028,17226],{"class":85},[79,18030,685],{"class":239},[79,18032,10110],{"class":89},[79,18034,4925],{"class":239},[79,18036,18037,18039,18041,18044,18046,18049,18052,18054,18056],{"class":81,"line":781},[79,18038,8723],{"class":239},[79,18040,3414],{"class":243},[79,18042,18043],{"class":89}," \"姓名： \"",[79,18045,3681],{"class":243},[79,18047,18048],{"class":239}," p.",[79,18050,18051],{"class":85},"getName",[79,18053,15213],{"class":239},[79,18055,3414],{"class":243},[79,18057,11024],{"class":239},[79,18059,18060],{"class":81,"line":786},[79,18061,454],{"emptyLinePlaceholder":453},[79,18063,18064],{"class":81,"line":802},[79,18065,18066],{"class":2440},"    \u002F\u002F年龄设置\n",[79,18068,18069,18071,18074,18076,18078],{"class":81,"line":815},[79,18070,18026],{"class":239},[79,18072,18073],{"class":85},"setAge",[79,18075,685],{"class":239},[79,18077,3029],{"class":96},[79,18079,4925],{"class":239},[79,18081,18082,18084,18086,18089,18091,18093,18096,18098,18100],{"class":81,"line":828},[79,18083,8723],{"class":239},[79,18085,3414],{"class":243},[79,18087,18088],{"class":89}," \"年龄： \"",[79,18090,3681],{"class":243},[79,18092,18048],{"class":239},[79,18094,18095],{"class":85},"getAge",[79,18097,15213],{"class":239},[79,18099,3414],{"class":243},[79,18101,11024],{"class":239},[79,18103,18104],{"class":81,"line":842},[79,18105,454],{"emptyLinePlaceholder":453},[79,18107,18108],{"class":81,"line":859},[79,18109,18110],{"class":2440},"    \u002F\u002F情人设置\n",[79,18112,18113,18115,18118,18120,18123],{"class":81,"line":878},[79,18114,18026],{"class":239},[79,18116,18117],{"class":85},"setLover",[79,18119,685],{"class":239},[79,18121,18122],{"class":89},"\"苍井\"",[79,18124,4925],{"class":239},[79,18126,18127,18130],{"class":81,"line":883},[79,18128,18129],{"class":2440},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[79,18131,18132],{"class":2440},"  \u002F\u002F只写属性，不可以读取\n",[79,18134,18135],{"class":81,"line":888},[79,18136,454],{"emptyLinePlaceholder":453},[79,18138,18139,18141,18143,18145],{"class":81,"line":904},[79,18140,4518],{"class":85},[79,18142,685],{"class":239},[79,18144,4523],{"class":89},[79,18146,4925],{"class":239},[79,18148,18149],{"class":81,"line":919},[79,18150,454],{"emptyLinePlaceholder":453},[79,18152,18153,18155,18157],{"class":81,"line":930},[79,18154,711],{"class":243},[79,18156,670],{"class":96},[79,18158,3531],{"class":239},[79,18160,18161],{"class":81,"line":941},[79,18162,3801],{"class":239},[265,18164,18166],{"id":18165},"_814封装案例","8.1.4封装案例",[26,18168,18169],{},[29,18170,18171,18174],{},[2528,18172,18173],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[3377,18176,18177,18180],{},[29,18178,18179],{},"求出立方体的面积和体积",[29,18181,18182],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[51,18184,18186],{"className":2376,"code":18185,"language":2378,"meta":57,"style":57},"#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",[59,18187,18188,18194,18204,18211,18215,18219,18224,18254,18258,18268,18278,18288,18292,18301,18305,18341,18345,18354,18358,18374,18378,18383,18392,18396,18403,18407,18416,18420,18427,18431,18440,18444,18451,18455,18460,18477,18481,18527,18531,18540,18544,18548,18552,18561,18565,18569,18574,18578,18584,18590,18596,18600,18604,18609,18631,18635,18689,18693,18701,18705,18710,18715,18728,18735,18751,18762,18767,18789,18794,18816,18829,18848,18853,18863,18885,18906,18910,18915,18928,18940,18944,18957,18961,18966,18970,18983,18988,18993,19007,19019,19024,19037,19042,19047,19052,19065,19070],{"__ignoreMap":57},[79,18189,18190,18192],{"class":81,"line":82},[79,18191,4166],{"class":243},[79,18193,4169],{"class":89},[79,18195,18196,18198,18200,18202],{"class":81,"line":167},[79,18197,4174],{"class":243},[79,18199,4177],{"class":243},[79,18201,4180],{"class":85},[79,18203,3531],{"class":239},[79,18205,18206,18208],{"class":81,"line":178},[79,18207,16855],{"class":243},[79,18209,18210],{"class":85}," Cube\n",[79,18212,18213],{"class":81,"line":457},[79,18214,3782],{"class":239},[79,18216,18217],{"class":81,"line":462},[79,18218,16877],{"class":243},[79,18220,18221],{"class":81,"line":474},[79,18222,18223],{"class":2440},"    \u002F\u002F输入长宽高\n",[79,18225,18226,18228,18231,18233,18235,18238,18240,18242,18245,18247,18249,18252],{"class":81,"line":480},[79,18227,17070],{"class":243},[79,18229,18230],{"class":85}," setLwh",[79,18232,685],{"class":239},[79,18234,2390],{"class":243},[79,18236,18237],{"class":7412}," l",[79,18239,2752],{"class":239},[79,18241,2390],{"class":243},[79,18243,18244],{"class":7412}," w",[79,18246,2752],{"class":239},[79,18248,2390],{"class":243},[79,18250,18251],{"class":7412}," h",[79,18253,253],{"class":239},[79,18255,18256],{"class":81,"line":486},[79,18257,4245],{"class":239},[79,18259,18260,18263,18265],{"class":81,"line":491},[79,18261,18262],{"class":239},"        m_L",[79,18264,244],{"class":243},[79,18266,18267],{"class":239},"l;\n",[79,18269,18270,18273,18275],{"class":81,"line":497},[79,18271,18272],{"class":239},"        m_W",[79,18274,244],{"class":243},[79,18276,18277],{"class":239},"w;\n",[79,18279,18280,18283,18285],{"class":81,"line":503},[79,18281,18282],{"class":239},"        m_H",[79,18284,244],{"class":243},[79,18286,18287],{"class":239},"h;\n",[79,18289,18290],{"class":81,"line":509},[79,18291,4402],{"class":239},[79,18293,18294,18296,18299],{"class":81,"line":514},[79,18295,4200],{"class":243},[79,18297,18298],{"class":85}," mianji",[79,18300,4191],{"class":239},[79,18302,18303],{"class":81,"line":520},[79,18304,4245],{"class":239},[79,18306,18307,18309,18311,18313,18316,18318,18321,18323,18326,18328,18331,18333,18336,18338],{"class":81,"line":526},[79,18308,16913],{"class":243},[79,18310,16916],{"class":96},[79,18312,2829],{"class":243},[79,18314,18315],{"class":239},"(m_L",[79,18317,2829],{"class":243},[79,18319,18320],{"class":239},"m_W ",[79,18322,2855],{"class":243},[79,18324,18325],{"class":239}," m_L",[79,18327,2829],{"class":243},[79,18329,18330],{"class":239},"m_H ",[79,18332,2855],{"class":243},[79,18334,18335],{"class":239}," m_W",[79,18337,2829],{"class":243},[79,18339,18340],{"class":239},"m_H);\n",[79,18342,18343],{"class":81,"line":532},[79,18344,4402],{"class":239},[79,18346,18347,18349,18352],{"class":81,"line":537},[79,18348,4200],{"class":243},[79,18350,18351],{"class":85}," tiji",[79,18353,4191],{"class":239},[79,18355,18356],{"class":81,"line":543},[79,18357,4245],{"class":239},[79,18359,18360,18362,18364,18366,18369,18371],{"class":81,"line":549},[79,18361,16913],{"class":243},[79,18363,18325],{"class":239},[79,18365,2829],{"class":243},[79,18367,18368],{"class":239},"m_W",[79,18370,2829],{"class":243},[79,18372,18373],{"class":239},"m_H;\n",[79,18375,18376],{"class":81,"line":555},[79,18377,4402],{"class":239},[79,18379,18380],{"class":81,"line":561},[79,18381,18382],{"class":2440},"    \u002F\u002F获取长宽高\n",[79,18384,18385,18387,18390],{"class":81,"line":567},[79,18386,4200],{"class":243},[79,18388,18389],{"class":85}," getLength",[79,18391,4191],{"class":239},[79,18393,18394],{"class":81,"line":573},[79,18395,4245],{"class":239},[79,18397,18398,18400],{"class":81,"line":579},[79,18399,16913],{"class":243},[79,18401,18402],{"class":239}," m_L;\n",[79,18404,18405],{"class":81,"line":584},[79,18406,4402],{"class":239},[79,18408,18409,18411,18414],{"class":81,"line":590},[79,18410,4200],{"class":243},[79,18412,18413],{"class":85}," getWidth",[79,18415,4191],{"class":239},[79,18417,18418],{"class":81,"line":596},[79,18419,4245],{"class":239},[79,18421,18422,18424],{"class":81,"line":602},[79,18423,16913],{"class":243},[79,18425,18426],{"class":239}," m_W;\n",[79,18428,18429],{"class":81,"line":608},[79,18430,4402],{"class":239},[79,18432,18433,18435,18438],{"class":81,"line":614},[79,18434,4200],{"class":243},[79,18436,18437],{"class":85}," getHeight",[79,18439,4191],{"class":239},[79,18441,18442],{"class":81,"line":620},[79,18443,4245],{"class":239},[79,18445,18446,18448],{"class":81,"line":625},[79,18447,16913],{"class":243},[79,18449,18450],{"class":239}," m_H;\n",[79,18452,18453],{"class":81,"line":630},[79,18454,4402],{"class":239},[79,18456,18457],{"class":81,"line":648},[79,18458,18459],{"class":2440},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[79,18461,18462,18465,18468,18470,18473,18475],{"class":81,"line":659},[79,18463,18464],{"class":243},"    bool",[79,18466,18467],{"class":85}," isEqual",[79,18469,685],{"class":239},[79,18471,18472],{"class":85},"Cube",[79,18474,5055],{"class":7412},[79,18476,253],{"class":239},[79,18478,18479],{"class":81,"line":676},[79,18480,4245],{"class":239},[79,18482,18483,18485,18488,18491,18493,18495,18498,18500,18503,18506,18508,18510,18513,18515,18517,18520,18522,18524],{"class":81,"line":708},[79,18484,1132],{"class":243},[79,18486,18487],{"class":239}," (c.",[79,18489,18490],{"class":85},"getLength",[79,18492,15213],{"class":239},[79,18494,5155],{"class":243},[79,18496,18497],{"class":239}," m_L ",[79,18499,3940],{"class":243},[79,18501,18502],{"class":239}," c.",[79,18504,18505],{"class":85},"getWidth",[79,18507,15213],{"class":239},[79,18509,5155],{"class":243},[79,18511,18512],{"class":239}," m_W ",[79,18514,3940],{"class":243},[79,18516,18502],{"class":239},[79,18518,18519],{"class":85},"getHeight",[79,18521,15213],{"class":239},[79,18523,5155],{"class":243},[79,18525,18526],{"class":239}," m_H)\n",[79,18528,18529],{"class":81,"line":717},[79,18530,4723],{"class":239},[79,18532,18533,18535,18538],{"class":81,"line":722},[79,18534,17892],{"class":243},[79,18536,18537],{"class":96}," true",[79,18539,3531],{"class":239},[79,18541,18542],{"class":81,"line":727},[79,18543,4742],{"class":239},[79,18545,18546],{"class":81,"line":738},[79,18547,4783],{"class":243},[79,18549,18550],{"class":81,"line":753},[79,18551,4723],{"class":239},[79,18553,18554,18556,18559],{"class":81,"line":768},[79,18555,17892],{"class":243},[79,18557,18558],{"class":96}," false",[79,18560,3531],{"class":239},[79,18562,18563],{"class":81,"line":776},[79,18564,4742],{"class":239},[79,18566,18567],{"class":81,"line":781},[79,18568,4402],{"class":239},[79,18570,18571],{"class":81,"line":786},[79,18572,18573],{"class":2440},"    \u002F\u002F私有属性\n",[79,18575,18576],{"class":81,"line":802},[79,18577,17382],{"class":243},[79,18579,18580,18582],{"class":81,"line":815},[79,18581,4200],{"class":243},[79,18583,18402],{"class":239},[79,18585,18586,18588],{"class":81,"line":828},[79,18587,4200],{"class":243},[79,18589,18426],{"class":239},[79,18591,18592,18594],{"class":81,"line":842},[79,18593,4200],{"class":243},[79,18595,18450],{"class":239},[79,18597,18598],{"class":81,"line":859},[79,18599,454],{"emptyLinePlaceholder":453},[79,18601,18602],{"class":81,"line":878},[79,18603,6197],{"class":239},[79,18605,18606],{"class":81,"line":883},[79,18607,18608],{"class":2440},"\u002F\u002F全局函数判断两个立方体是否相等\n",[79,18610,18611,18613,18615,18617,18619,18622,18624,18626,18629],{"class":81,"line":888},[79,18612,3591],{"class":243},[79,18614,18467],{"class":85},[79,18616,685],{"class":239},[79,18618,18472],{"class":85},[79,18620,18621],{"class":7412}," c1",[79,18623,2752],{"class":239},[79,18625,18472],{"class":85},[79,18627,18628],{"class":7412}," c2",[79,18630,253],{"class":239},[79,18632,18633],{"class":81,"line":904},[79,18634,3782],{"class":239},[79,18636,18637,18639,18642,18644,18646,18648,18651,18653,18656,18658,18660,18662,18664,18666,18668,18670,18672,18674,18676,18678,18680,18682,18684,18686],{"class":81,"line":919},[79,18638,711],{"class":243},[79,18640,18641],{"class":239}," (c1.",[79,18643,18490],{"class":85},[79,18645,15213],{"class":239},[79,18647,5155],{"class":243},[79,18649,18650],{"class":239}," c2.",[79,18652,18490],{"class":85},[79,18654,18655],{"class":239},"()) ",[79,18657,3940],{"class":243},[79,18659,18641],{"class":239},[79,18661,18505],{"class":85},[79,18663,15213],{"class":239},[79,18665,5155],{"class":243},[79,18667,18650],{"class":239},[79,18669,18505],{"class":85},[79,18671,18655],{"class":239},[79,18673,3940],{"class":243},[79,18675,18641],{"class":239},[79,18677,18519],{"class":85},[79,18679,15213],{"class":239},[79,18681,5155],{"class":243},[79,18683,18650],{"class":239},[79,18685,18519],{"class":85},[79,18687,18688],{"class":239},"());\n",[79,18690,18691],{"class":81,"line":930},[79,18692,3801],{"class":239},[79,18694,18695,18697,18699],{"class":81,"line":941},[79,18696,2390],{"class":243},[79,18698,893],{"class":85},[79,18700,4191],{"class":239},[79,18702,18703],{"class":81,"line":946},[79,18704,3782],{"class":239},[79,18706,18707],{"class":81,"line":969},[79,18708,18709],{"class":239},"    Cube c1;\n",[79,18711,18712],{"class":81,"line":975},[79,18713,18714],{"class":2440},"    \u002F\u002F输入立方体的长宽高\n",[79,18716,18717,18719,18721,18724,18726],{"class":81,"line":989},[79,18718,3787],{"class":239},[79,18720,3414],{"class":243},[79,18722,18723],{"class":89},"\"请输入第一个立方体的长、宽、高：\"",[79,18725,3414],{"class":243},[79,18727,3436],{"class":239},[79,18729,18730,18732],{"class":81,"line":1003},[79,18731,4200],{"class":243},[79,18733,18734],{"class":239}," l,w,h,l1,w1,h1;\n",[79,18736,18737,18739,18741,18743,18745,18747,18749],{"class":81,"line":1019},[79,18738,4227],{"class":239},[79,18740,3666],{"class":243},[79,18742,2892],{"class":239},[79,18744,3666],{"class":243},[79,18746,3168],{"class":239},[79,18748,3666],{"class":243},[79,18750,18287],{"class":239},[79,18752,18753,18756,18759],{"class":81,"line":1024},[79,18754,18755],{"class":239},"    c1.",[79,18757,18758],{"class":85},"setLwh",[79,18760,18761],{"class":239},"(l,w,h);\n",[79,18763,18764],{"class":81,"line":1067},[79,18765,18766],{"class":2440},"    \u002F\u002F面积\n",[79,18768,18769,18771,18773,18776,18778,18780,18783,18785,18787],{"class":81,"line":1101},[79,18770,3787],{"class":239},[79,18772,3414],{"class":243},[79,18774,18775],{"class":89},"\"立方体的表面积为：\"",[79,18777,3414],{"class":243},[79,18779,16991],{"class":239},[79,18781,18782],{"class":85},"mianji",[79,18784,4641],{"class":239},[79,18786,3414],{"class":243},[79,18788,3436],{"class":239},[79,18790,18791],{"class":81,"line":1106},[79,18792,18793],{"class":2440},"    \u002F\u002F体积\n",[79,18795,18796,18798,18800,18803,18805,18807,18810,18812,18814],{"class":81,"line":1112},[79,18797,3787],{"class":239},[79,18799,3414],{"class":243},[79,18801,18802],{"class":89},"\"立方体的体积为：\"",[79,18804,3414],{"class":243},[79,18806,16991],{"class":239},[79,18808,18809],{"class":85},"tiji",[79,18811,4641],{"class":239},[79,18813,3414],{"class":243},[79,18815,3436],{"class":239},[79,18817,18818,18820,18822,18825,18827],{"class":81,"line":1124},[79,18819,3787],{"class":239},[79,18821,3414],{"class":243},[79,18823,18824],{"class":89},"\"请输入第二个立方体的长、宽、高：\"",[79,18826,3414],{"class":243},[79,18828,3436],{"class":239},[79,18830,18831,18833,18835,18838,18840,18843,18845],{"class":81,"line":1129},[79,18832,4227],{"class":239},[79,18834,3666],{"class":243},[79,18836,18837],{"class":239},"l1",[79,18839,3666],{"class":243},[79,18841,18842],{"class":239},"w1",[79,18844,3666],{"class":243},[79,18846,18847],{"class":239},"h1;\n",[79,18849,18850],{"class":81,"line":1150},[79,18851,18852],{"class":239},"    Cube c2;\n",[79,18854,18855,18858,18860],{"class":81,"line":1161},[79,18856,18857],{"class":239},"    c2.",[79,18859,18758],{"class":85},[79,18861,18862],{"class":239},"(l1,w1,h1);\n",[79,18864,18865,18867,18869,18872,18874,18877,18879,18881,18883],{"class":81,"line":1175},[79,18866,3787],{"class":239},[79,18868,3414],{"class":243},[79,18870,18871],{"class":89},"\"第二个立方体的表面积为：\"",[79,18873,3414],{"class":243},[79,18875,18876],{"class":239},"c2.",[79,18878,18782],{"class":85},[79,18880,4641],{"class":239},[79,18882,3414],{"class":243},[79,18884,3436],{"class":239},[79,18886,18887,18889,18891,18894,18896,18898,18900,18902,18904],{"class":81,"line":1194},[79,18888,3787],{"class":239},[79,18890,3414],{"class":243},[79,18892,18893],{"class":89},"\"第二个立方体的体积为：\"",[79,18895,3414],{"class":243},[79,18897,18876],{"class":239},[79,18899,18809],{"class":85},[79,18901,4641],{"class":239},[79,18903,3414],{"class":243},[79,18905,3436],{"class":239},[79,18907,18908],{"class":81,"line":1211},[79,18909,454],{"emptyLinePlaceholder":453},[79,18911,18912],{"class":81,"line":1228},[79,18913,18914],{"class":2440},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[79,18916,18917,18919,18921,18924,18926],{"class":81,"line":1246},[79,18918,3787],{"class":239},[79,18920,3414],{"class":243},[79,18922,18923],{"class":89},"\"内部函数判断结果：\"",[79,18925,3414],{"class":243},[79,18927,3436],{"class":239},[79,18929,18930,18932,18934,18937],{"class":81,"line":1251},[79,18931,662],{"class":243},[79,18933,18641],{"class":239},[79,18935,18936],{"class":85},"isEqual",[79,18938,18939],{"class":239},"(c2))\n",[79,18941,18942],{"class":81,"line":1274},[79,18943,4245],{"class":239},[79,18945,18946,18948,18950,18953,18955],{"class":81,"line":1296},[79,18947,5654],{"class":239},[79,18949,3414],{"class":243},[79,18951,18952],{"class":89},"\"两个立方体相等\"",[79,18954,3414],{"class":243},[79,18956,3436],{"class":239},[79,18958,18959],{"class":81,"line":1316},[79,18960,4402],{"class":239},[79,18962,18963],{"class":81,"line":1321},[79,18964,18965],{"class":243},"    else\n",[79,18967,18968],{"class":81,"line":1326},[79,18969,4245],{"class":239},[79,18971,18972,18974,18976,18979,18981],{"class":81,"line":1342},[79,18973,5654],{"class":239},[79,18975,3414],{"class":243},[79,18977,18978],{"class":89},"\"两个立方体不相等\"",[79,18980,3414],{"class":243},[79,18982,3436],{"class":239},[79,18984,18986],{"class":81,"line":18985},86,[79,18987,4402],{"class":239},[79,18989,18991],{"class":81,"line":18990},87,[79,18992,454],{"emptyLinePlaceholder":453},[79,18994,18996,18998,19000,19003,19005],{"class":81,"line":18995},88,[79,18997,3787],{"class":239},[79,18999,3414],{"class":243},[79,19001,19002],{"class":89},"\"全局函数判断结果：\"",[79,19004,3414],{"class":243},[79,19006,3436],{"class":239},[79,19008,19010,19012,19014,19016],{"class":81,"line":19009},89,[79,19011,662],{"class":243},[79,19013,3887],{"class":239},[79,19015,18936],{"class":85},[79,19017,19018],{"class":239},"(c1, c2))\n",[79,19020,19022],{"class":81,"line":19021},90,[79,19023,4245],{"class":239},[79,19025,19027,19029,19031,19033,19035],{"class":81,"line":19026},91,[79,19028,5654],{"class":239},[79,19030,3414],{"class":243},[79,19032,18952],{"class":89},[79,19034,3414],{"class":243},[79,19036,3436],{"class":239},[79,19038,19040],{"class":81,"line":19039},92,[79,19041,4402],{"class":239},[79,19043,19045],{"class":81,"line":19044},93,[79,19046,18965],{"class":243},[79,19048,19050],{"class":81,"line":19049},94,[79,19051,4245],{"class":239},[79,19053,19055,19057,19059,19061,19063],{"class":81,"line":19054},95,[79,19056,5654],{"class":239},[79,19058,3414],{"class":243},[79,19060,18978],{"class":89},[79,19062,3414],{"class":243},[79,19064,3436],{"class":239},[79,19066,19068],{"class":81,"line":19067},96,[79,19069,4402],{"class":239},[79,19071,19073],{"class":81,"line":19072},97,[79,19074,3801],{"class":239},[26,19076,19077],{"start":167},[29,19078,19079],{},[2528,19080,19081],{},"练习案例2：点和圆的关系",[3377,19083,19084],{},[29,19085,19086],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[51,19088,19090],{"className":2376,"code":19089,"language":2378,"meta":57,"style":57},"#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",[59,19091,19092,19098,19108,19115,19122,19126,19130,19135,19169,19174,19189,19203,19207,19211,19218,19225,19229,19235,19239,19243,19247,19269,19292,19297,19311,19326,19330,19334,19340,19345,19350,19354,19380,19384,19414,19442,19470,19487,19491,19504,19508,19512,19516,19529,19533,19537,19545,19549,19553,19557,19562,19566,19577,19584,19593,19603,19614,19621,19634,19645,19655,19666,19673,19687,19692,19702,19710],{"__ignoreMap":57},[79,19093,19094,19096],{"class":81,"line":82},[79,19095,4166],{"class":243},[79,19097,4169],{"class":89},[79,19099,19100,19102,19104,19106],{"class":81,"line":167},[79,19101,4174],{"class":243},[79,19103,4177],{"class":243},[79,19105,4180],{"class":85},[79,19107,3531],{"class":239},[79,19109,19110,19112],{"class":81,"line":178},[79,19111,4166],{"class":243},[79,19113,19114],{"class":89},"\u003Ccmath>\n",[79,19116,19117,19119],{"class":81,"line":457},[79,19118,16855],{"class":243},[79,19120,19121],{"class":85}," Point\n",[79,19123,19124],{"class":81,"line":462},[79,19125,3782],{"class":239},[79,19127,19128],{"class":81,"line":474},[79,19129,16877],{"class":243},[79,19131,19132],{"class":81,"line":480},[79,19133,19134],{"class":2440},"    \u002F\u002F赋值\n",[79,19136,19137,19139,19142,19144,19146,19149,19151,19153,19156,19159,19161,19164,19166],{"class":81,"line":486},[79,19138,17070],{"class":243},[79,19140,19141],{"class":85}," setPoint",[79,19143,685],{"class":239},[79,19145,16199],{"class":243},[79,19147,19148],{"class":7412}," x",[79,19150,1060],{"class":239},[79,19152,16199],{"class":243},[79,19154,19155],{"class":7412}," y",[79,19157,19158],{"class":239},") { m_x ",[79,19160,244],{"class":243},[79,19162,19163],{"class":239}," x; m_y ",[79,19165,244],{"class":243},[79,19167,19168],{"class":239}," y; }\n",[79,19170,19171],{"class":81,"line":491},[79,19172,19173],{"class":2440},"    \u002F\u002F获取坐标\n",[79,19175,19176,19178,19181,19184,19186],{"class":81,"line":497},[79,19177,16899],{"class":243},[79,19179,19180],{"class":85}," getX",[79,19182,19183],{"class":239},"() { ",[79,19185,1414],{"class":243},[79,19187,19188],{"class":239}," m_x; }\n",[79,19190,19191,19193,19196,19198,19200],{"class":81,"line":503},[79,19192,16899],{"class":243},[79,19194,19195],{"class":85}," getY",[79,19197,19183],{"class":239},[79,19199,1414],{"class":243},[79,19201,19202],{"class":239}," m_y; }\n",[79,19204,19205],{"class":81,"line":509},[79,19206,454],{"emptyLinePlaceholder":453},[79,19208,19209],{"class":81,"line":514},[79,19210,17382],{"class":243},[79,19212,19213,19215],{"class":81,"line":520},[79,19214,16899],{"class":243},[79,19216,19217],{"class":239}," m_x;\n",[79,19219,19220,19222],{"class":81,"line":526},[79,19221,16899],{"class":243},[79,19223,19224],{"class":239}," m_y;\n",[79,19226,19227],{"class":81,"line":532},[79,19228,6197],{"class":239},[79,19230,19231,19233],{"class":81,"line":537},[79,19232,16855],{"class":243},[79,19234,16858],{"class":85},[79,19236,19237],{"class":81,"line":543},[79,19238,3782],{"class":239},[79,19240,19241],{"class":81,"line":549},[79,19242,16877],{"class":243},[79,19244,19245],{"class":81,"line":555},[79,19246,19134],{"class":2440},[79,19248,19249,19251,19254,19256,19258,19261,19264,19266],{"class":81,"line":561},[79,19250,17070],{"class":243},[79,19252,19253],{"class":85}," setRadius",[79,19255,685],{"class":239},[79,19257,16199],{"class":243},[79,19259,19260],{"class":7412}," r",[79,19262,19263],{"class":239},") { m_r ",[79,19265,244],{"class":243},[79,19267,19268],{"class":239}," r; }\n",[79,19270,19271,19273,19276,19278,19281,19284,19287,19289],{"class":81,"line":567},[79,19272,17070],{"class":243},[79,19274,19275],{"class":85}," setCenter",[79,19277,685],{"class":239},[79,19279,19280],{"class":85},"Point",[79,19282,19283],{"class":7412}," center",[79,19285,19286],{"class":239},") { m_center ",[79,19288,244],{"class":243},[79,19290,19291],{"class":239}," center; }\n",[79,19293,19294],{"class":81,"line":573},[79,19295,19296],{"class":2440},"    \u002F\u002F获取属性\n",[79,19298,19299,19301,19304,19306,19308],{"class":81,"line":579},[79,19300,16899],{"class":243},[79,19302,19303],{"class":85}," getRadius",[79,19305,19183],{"class":239},[79,19307,1414],{"class":243},[79,19309,19310],{"class":239}," m_r; }\n",[79,19312,19313,19316,19319,19321,19323],{"class":81,"line":584},[79,19314,19315],{"class":85},"    Point",[79,19317,19318],{"class":85}," getCenter",[79,19320,19183],{"class":239},[79,19322,1414],{"class":243},[79,19324,19325],{"class":239}," m_center; }\n",[79,19327,19328],{"class":81,"line":590},[79,19329,454],{"emptyLinePlaceholder":453},[79,19331,19332],{"class":81,"line":596},[79,19333,17382],{"class":243},[79,19335,19336,19338],{"class":81,"line":602},[79,19337,16899],{"class":243},[79,19339,16889],{"class":239},[79,19341,19342],{"class":81,"line":608},[79,19343,19344],{"class":2440},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[79,19346,19347],{"class":81,"line":614},[79,19348,19349],{"class":239},"    Point m_center;\n",[79,19351,19352],{"class":81,"line":620},[79,19353,6197],{"class":239},[79,19355,19356,19358,19361,19363,19366,19368,19370,19372,19374,19376,19378],{"class":81,"line":625},[79,19357,7560],{"class":243},[79,19359,19360],{"class":85}," isInCircle",[79,19362,685],{"class":239},[79,19364,19365],{"class":85},"Circle",[79,19367,12748],{"class":243},[79,19369,2663],{"class":7412},[79,19371,2752],{"class":239},[79,19373,19280],{"class":85},[79,19375,12748],{"class":243},[79,19377,19],{"class":7412},[79,19379,253],{"class":239},[79,19381,19382],{"class":81,"line":630},[79,19383,3782],{"class":239},[79,19385,19386,19388,19391,19393,19395,19398,19401,19404,19406,19408,19410,19412],{"class":81,"line":648},[79,19387,16899],{"class":243},[79,19389,19390],{"class":239}," dx ",[79,19392,244],{"class":243},[79,19394,18502],{"class":239},[79,19396,19397],{"class":85},"getCenter",[79,19399,19400],{"class":239},"().",[79,19402,19403],{"class":85},"getX",[79,19405,15213],{"class":239},[79,19407,320],{"class":243},[79,19409,18048],{"class":239},[79,19411,19403],{"class":85},[79,19413,7832],{"class":239},[79,19415,19416,19418,19421,19423,19425,19427,19429,19432,19434,19436,19438,19440],{"class":81,"line":659},[79,19417,16899],{"class":243},[79,19419,19420],{"class":239}," dy ",[79,19422,244],{"class":243},[79,19424,18502],{"class":239},[79,19426,19397],{"class":85},[79,19428,19400],{"class":239},[79,19430,19431],{"class":85},"getY",[79,19433,15213],{"class":239},[79,19435,320],{"class":243},[79,19437,18048],{"class":239},[79,19439,19431],{"class":85},[79,19441,7832],{"class":239},[79,19443,19444,19446,19449,19451,19454,19457,19459,19461,19463,19465,19467],{"class":81,"line":676},[79,19445,16899],{"class":243},[79,19447,19448],{"class":239}," distance ",[79,19450,244],{"class":243},[79,19452,19453],{"class":85}," sqrt",[79,19455,19456],{"class":239},"(dx ",[79,19458,2829],{"class":243},[79,19460,19390],{"class":239},[79,19462,2855],{"class":243},[79,19464,19420],{"class":239},[79,19466,2829],{"class":243},[79,19468,19469],{"class":239}," dy);\n",[79,19471,19472,19474,19477,19479,19481,19484],{"class":81,"line":708},[79,19473,662],{"class":243},[79,19475,19476],{"class":239}," (distance ",[79,19478,392],{"class":243},[79,19480,18502],{"class":239},[79,19482,19483],{"class":85},"getRadius",[79,19485,19486],{"class":239},"())\n",[79,19488,19489],{"class":81,"line":717},[79,19490,4245],{"class":239},[79,19492,19493,19495,19497,19500,19502],{"class":81,"line":722},[79,19494,11852],{"class":239},[79,19496,3414],{"class":243},[79,19498,19499],{"class":89}," \"点在圆内\"",[79,19501,3681],{"class":243},[79,19503,11024],{"class":239},[79,19505,19506],{"class":81,"line":727},[79,19507,4402],{"class":239},[79,19509,19510],{"class":81,"line":738},[79,19511,18965],{"class":243},[79,19513,19514],{"class":81,"line":753},[79,19515,4245],{"class":239},[79,19517,19518,19520,19522,19525,19527],{"class":81,"line":768},[79,19519,11852],{"class":239},[79,19521,3414],{"class":243},[79,19523,19524],{"class":89}," \"点在圆外\"",[79,19526,3681],{"class":243},[79,19528,11024],{"class":239},[79,19530,19531],{"class":81,"line":776},[79,19532,4402],{"class":239},[79,19534,19535],{"class":81,"line":781},[79,19536,3801],{"class":239},[79,19538,19539,19541,19543],{"class":81,"line":786},[79,19540,2390],{"class":243},[79,19542,893],{"class":85},[79,19544,4191],{"class":239},[79,19546,19547],{"class":81,"line":802},[79,19548,3782],{"class":239},[79,19550,19551],{"class":81,"line":815},[79,19552,17213],{"class":2440},[79,19554,19555],{"class":81,"line":828},[79,19556,16961],{"class":239},[79,19558,19559],{"class":81,"line":842},[79,19560,19561],{"class":239},"    Point p1;\n",[79,19563,19564],{"class":81,"line":859},[79,19565,19134],{"class":2440},[79,19567,19568,19570,19572,19575],{"class":81,"line":878},[79,19569,3787],{"class":239},[79,19571,3414],{"class":243},[79,19573,19574],{"class":89},"\"请输入圆的半径：\"",[79,19576,3531],{"class":239},[79,19578,19579,19581],{"class":81,"line":883},[79,19580,16899],{"class":243},[79,19582,19583],{"class":239}," r;\n",[79,19585,19586,19588,19590],{"class":81,"line":888},[79,19587,4227],{"class":239},[79,19589,3666],{"class":243},[79,19591,19592],{"class":239},"r;\n",[79,19594,19595,19597,19600],{"class":81,"line":904},[79,19596,18755],{"class":239},[79,19598,19599],{"class":85},"setRadius",[79,19601,19602],{"class":239},"(r);\n",[79,19604,19605,19607,19609,19612],{"class":81,"line":919},[79,19606,3787],{"class":239},[79,19608,3414],{"class":243},[79,19610,19611],{"class":89},"\"请输入圆心坐标：\"",[79,19613,3531],{"class":239},[79,19615,19616,19618],{"class":81,"line":930},[79,19617,16899],{"class":243},[79,19619,19620],{"class":239}," x, y;\n",[79,19622,19623,19625,19627,19629,19631],{"class":81,"line":941},[79,19624,4227],{"class":239},[79,19626,3666],{"class":243},[79,19628,3193],{"class":239},[79,19630,3666],{"class":243},[79,19632,19633],{"class":239},"y;\n",[79,19635,19636,19639,19642],{"class":81,"line":946},[79,19637,19638],{"class":239},"    p1.",[79,19640,19641],{"class":85},"setPoint",[79,19643,19644],{"class":239},"(x, y);\n",[79,19646,19647,19649,19652],{"class":81,"line":969},[79,19648,18755],{"class":239},[79,19650,19651],{"class":85},"setCenter",[79,19653,19654],{"class":239},"(p1);\n",[79,19656,19657,19659,19661,19664],{"class":81,"line":975},[79,19658,3787],{"class":239},[79,19660,3414],{"class":243},[79,19662,19663],{"class":89},"\"请输入测试点坐标：\"",[79,19665,3531],{"class":239},[79,19667,19668,19670],{"class":81,"line":989},[79,19669,16899],{"class":243},[79,19671,19672],{"class":239}," x1, y1;\n",[79,19674,19675,19677,19679,19682,19684],{"class":81,"line":1003},[79,19676,4227],{"class":239},[79,19678,3666],{"class":243},[79,19680,19681],{"class":239},"x1",[79,19683,3666],{"class":243},[79,19685,19686],{"class":239},"y1;\n",[79,19688,19689],{"class":81,"line":1019},[79,19690,19691],{"class":239},"    Point p2;\n",[79,19693,19694,19697,19699],{"class":81,"line":1024},[79,19695,19696],{"class":239},"    p2.",[79,19698,19641],{"class":85},[79,19700,19701],{"class":239},"(x1, y1);\n",[79,19703,19704,19707],{"class":81,"line":1067},[79,19705,19706],{"class":85},"    isInCircle",[79,19708,19709],{"class":239},"(c1, p2);\n",[79,19711,19712],{"class":81,"line":1101},[79,19713,3801],{"class":239},[19,19715,19716],{},"在类中可以让另一个类作为本来的成员",[19,19718,19719],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19721,19722],{},"创建point.h",[51,19724,19726],{"className":2376,"code":19725,"language":2378,"meta":57,"style":57},"#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",[59,19727,19728,19739,19745,19755,19761,19765,19770,19774,19778,19798,19802,19810,19818,19822,19826,19832,19838],{"__ignoreMap":57},[79,19729,19730,19733,19736],{"class":81,"line":82},[79,19731,19732],{"class":243},"#pragma",[79,19734,19735],{"class":85}," once",[79,19737,19738],{"class":2440}," \u002F\u002F防止头文件重复包含\n",[79,19740,19741,19743],{"class":81,"line":167},[79,19742,4166],{"class":243},[79,19744,4169],{"class":89},[79,19746,19747,19749,19751,19753],{"class":81,"line":178},[79,19748,4174],{"class":243},[79,19750,4177],{"class":243},[79,19752,4180],{"class":85},[79,19754,3531],{"class":239},[79,19756,19757,19759],{"class":81,"line":457},[79,19758,16855],{"class":243},[79,19760,19121],{"class":85},[79,19762,19763],{"class":81,"line":462},[79,19764,3782],{"class":239},[79,19766,19767],{"class":81,"line":474},[79,19768,19769],{"class":2440},"\u002F\u002F做好声明与变量定义就可以\n",[79,19771,19772],{"class":81,"line":480},[79,19773,16877],{"class":243},[79,19775,19776],{"class":81,"line":486},[79,19777,19134],{"class":2440},[79,19779,19780,19782,19784,19786,19788,19790,19792,19794,19796],{"class":81,"line":491},[79,19781,17070],{"class":243},[79,19783,19141],{"class":85},[79,19785,685],{"class":239},[79,19787,16199],{"class":243},[79,19789,19148],{"class":7412},[79,19791,1060],{"class":239},[79,19793,16199],{"class":243},[79,19795,19155],{"class":7412},[79,19797,4925],{"class":239},[79,19799,19800],{"class":81,"line":497},[79,19801,19173],{"class":2440},[79,19803,19804,19806,19808],{"class":81,"line":503},[79,19805,16899],{"class":243},[79,19807,19180],{"class":85},[79,19809,7832],{"class":239},[79,19811,19812,19814,19816],{"class":81,"line":509},[79,19813,16899],{"class":243},[79,19815,19195],{"class":85},[79,19817,7832],{"class":239},[79,19819,19820],{"class":81,"line":514},[79,19821,454],{"emptyLinePlaceholder":453},[79,19823,19824],{"class":81,"line":520},[79,19825,17382],{"class":243},[79,19827,19828,19830],{"class":81,"line":526},[79,19829,16899],{"class":243},[79,19831,19217],{"class":239},[79,19833,19834,19836],{"class":81,"line":532},[79,19835,16899],{"class":243},[79,19837,19224],{"class":239},[79,19839,19840],{"class":81,"line":537},[79,19841,6197],{"class":239},[19,19843,19844],{},"创建point.cpp",[51,19846,19848],{"className":2376,"code":19847,"language":2378,"meta":57,"style":57},"#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",[59,19849,19850,19857,19862,19896,19900,19916],{"__ignoreMap":57},[79,19851,19852,19854],{"class":81,"line":82},[79,19853,4166],{"class":243},[79,19855,19856],{"class":89},"\u003Cpoint.h>\n",[79,19858,19859],{"class":81,"line":167},[79,19860,19861],{"class":2440},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[79,19863,19864,19866,19869,19872,19874,19876,19878,19880,19882,19884,19886,19888,19890,19892,19894],{"class":81,"line":178},[79,19865,17070],{"class":243},[79,19867,19868],{"class":85}," Point",[79,19870,19871],{"class":239},"::",[79,19873,19641],{"class":85},[79,19875,685],{"class":239},[79,19877,16199],{"class":243},[79,19879,19148],{"class":7412},[79,19881,1060],{"class":239},[79,19883,16199],{"class":243},[79,19885,19155],{"class":7412},[79,19887,19158],{"class":239},[79,19889,244],{"class":243},[79,19891,19163],{"class":239},[79,19893,244],{"class":243},[79,19895,19168],{"class":239},[79,19897,19898],{"class":81,"line":457},[79,19899,19173],{"class":2440},[79,19901,19902,19904,19906,19908,19910,19912,19914],{"class":81,"line":462},[79,19903,16899],{"class":243},[79,19905,19868],{"class":85},[79,19907,19871],{"class":239},[79,19909,19403],{"class":85},[79,19911,19183],{"class":239},[79,19913,1414],{"class":243},[79,19915,19188],{"class":239},[79,19917,19918,19920,19922,19924,19926,19928,19930],{"class":81,"line":474},[79,19919,16899],{"class":243},[79,19921,19868],{"class":85},[79,19923,19871],{"class":239},[79,19925,19431],{"class":85},[79,19927,19183],{"class":239},[79,19929,1414],{"class":243},[79,19931,19202],{"class":239},[19,19933,19934],{},"创建circle.h",[51,19936,19938],{"className":2376,"code":19937,"language":2378,"meta":57,"style":57},"#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",[59,19939,19940,19947,19953,19963,19969,19975,19979,19983,19987,20001,20015,20019,20027,20035,20039,20043,20049,20053,20057],{"__ignoreMap":57},[79,19941,19942,19944],{"class":81,"line":82},[79,19943,19732],{"class":243},[79,19945,19946],{"class":85}," once\n",[79,19948,19949,19951],{"class":81,"line":167},[79,19950,4166],{"class":243},[79,19952,4169],{"class":89},[79,19954,19955,19957,19959,19961],{"class":81,"line":178},[79,19956,4174],{"class":243},[79,19958,4177],{"class":243},[79,19960,4180],{"class":85},[79,19962,3531],{"class":239},[79,19964,19965,19967],{"class":81,"line":457},[79,19966,4166],{"class":243},[79,19968,19856],{"class":89},[79,19970,19971,19973],{"class":81,"line":462},[79,19972,16855],{"class":243},[79,19974,16858],{"class":85},[79,19976,19977],{"class":81,"line":474},[79,19978,3782],{"class":239},[79,19980,19981],{"class":81,"line":480},[79,19982,16877],{"class":243},[79,19984,19985],{"class":81,"line":486},[79,19986,19134],{"class":2440},[79,19988,19989,19991,19993,19995,19997,19999],{"class":81,"line":491},[79,19990,17070],{"class":243},[79,19992,19253],{"class":85},[79,19994,685],{"class":239},[79,19996,16199],{"class":243},[79,19998,19260],{"class":7412},[79,20000,4925],{"class":239},[79,20002,20003,20005,20007,20009,20011,20013],{"class":81,"line":497},[79,20004,17070],{"class":243},[79,20006,19275],{"class":85},[79,20008,685],{"class":239},[79,20010,19280],{"class":85},[79,20012,19283],{"class":7412},[79,20014,4925],{"class":239},[79,20016,20017],{"class":81,"line":503},[79,20018,19296],{"class":2440},[79,20020,20021,20023,20025],{"class":81,"line":509},[79,20022,16899],{"class":243},[79,20024,19303],{"class":85},[79,20026,7832],{"class":239},[79,20028,20029,20031,20033],{"class":81,"line":514},[79,20030,19315],{"class":85},[79,20032,19318],{"class":85},[79,20034,7832],{"class":239},[79,20036,20037],{"class":81,"line":520},[79,20038,454],{"emptyLinePlaceholder":453},[79,20040,20041],{"class":81,"line":526},[79,20042,17382],{"class":243},[79,20044,20045,20047],{"class":81,"line":532},[79,20046,16899],{"class":243},[79,20048,16889],{"class":239},[79,20050,20051],{"class":81,"line":537},[79,20052,19344],{"class":2440},[79,20054,20055],{"class":81,"line":543},[79,20056,19349],{"class":239},[79,20058,20059],{"class":81,"line":549},[79,20060,6197],{"class":239},[19,20062,20063],{},"创建circle.cpp",[51,20065,20067],{"className":2376,"code":20066,"language":2378,"meta":57,"style":57},"#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",[59,20068,20069,20076,20099,20121,20126,20142],{"__ignoreMap":57},[79,20070,20071,20073],{"class":81,"line":82},[79,20072,4166],{"class":243},[79,20074,20075],{"class":89},"\u003Ccircle.h>\n",[79,20077,20078,20080,20083,20085,20087,20089,20091,20093,20095,20097],{"class":81,"line":167},[79,20079,7560],{"class":243},[79,20081,20082],{"class":85}," Circle",[79,20084,19871],{"class":239},[79,20086,19599],{"class":85},[79,20088,685],{"class":239},[79,20090,16199],{"class":243},[79,20092,19260],{"class":7412},[79,20094,19263],{"class":239},[79,20096,244],{"class":243},[79,20098,19268],{"class":239},[79,20100,20101,20103,20105,20107,20109,20111,20113,20115,20117,20119],{"class":81,"line":178},[79,20102,7560],{"class":243},[79,20104,20082],{"class":85},[79,20106,19871],{"class":239},[79,20108,19651],{"class":85},[79,20110,685],{"class":239},[79,20112,19280],{"class":85},[79,20114,19283],{"class":7412},[79,20116,19286],{"class":239},[79,20118,244],{"class":243},[79,20120,19291],{"class":239},[79,20122,20123],{"class":81,"line":457},[79,20124,20125],{"class":2440},"\u002F\u002F获取属性\n",[79,20127,20128,20130,20132,20134,20136,20138,20140],{"class":81,"line":462},[79,20129,16199],{"class":243},[79,20131,20082],{"class":85},[79,20133,19871],{"class":239},[79,20135,19483],{"class":85},[79,20137,19183],{"class":239},[79,20139,1414],{"class":243},[79,20141,19310],{"class":239},[79,20143,20144,20146,20148,20150,20152,20154,20156],{"class":81,"line":474},[79,20145,19280],{"class":85},[79,20147,20082],{"class":85},[79,20149,19871],{"class":239},[79,20151,19397],{"class":85},[79,20153,19183],{"class":239},[79,20155,1414],{"class":243},[79,20157,19325],{"class":239},[19,20159,20160],{},"使用封装的类",[51,20162,20164],{"className":2376,"code":20163,"language":2378,"meta":57,"style":57},"#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",[59,20165,20166,20172,20182,20188,20194,20218,20222,20248,20274,20298,20312,20316,20328,20332,20336,20340,20352,20356,20360,20368,20372,20376,20380,20384,20388,20398,20404,20412,20420,20430,20436,20448,20456,20464,20474,20480,20492,20496,20504,20510],{"__ignoreMap":57},[79,20167,20168,20170],{"class":81,"line":82},[79,20169,4166],{"class":243},[79,20171,4169],{"class":89},[79,20173,20174,20176,20178,20180],{"class":81,"line":167},[79,20175,4174],{"class":243},[79,20177,4177],{"class":243},[79,20179,4180],{"class":85},[79,20181,3531],{"class":239},[79,20183,20184,20186],{"class":81,"line":178},[79,20185,4166],{"class":243},[79,20187,20075],{"class":89},[79,20189,20190,20192],{"class":81,"line":457},[79,20191,4166],{"class":243},[79,20193,19856],{"class":89},[79,20195,20196,20198,20200,20202,20204,20206,20208,20210,20212,20214,20216],{"class":81,"line":462},[79,20197,7560],{"class":243},[79,20199,19360],{"class":85},[79,20201,685],{"class":239},[79,20203,19365],{"class":85},[79,20205,12748],{"class":243},[79,20207,2663],{"class":7412},[79,20209,2752],{"class":239},[79,20211,19280],{"class":85},[79,20213,12748],{"class":243},[79,20215,19],{"class":7412},[79,20217,253],{"class":239},[79,20219,20220],{"class":81,"line":474},[79,20221,3782],{"class":239},[79,20223,20224,20226,20228,20230,20232,20234,20236,20238,20240,20242,20244,20246],{"class":81,"line":480},[79,20225,16899],{"class":243},[79,20227,19390],{"class":239},[79,20229,244],{"class":243},[79,20231,18502],{"class":239},[79,20233,19397],{"class":85},[79,20235,19400],{"class":239},[79,20237,19403],{"class":85},[79,20239,15213],{"class":239},[79,20241,320],{"class":243},[79,20243,18048],{"class":239},[79,20245,19403],{"class":85},[79,20247,7832],{"class":239},[79,20249,20250,20252,20254,20256,20258,20260,20262,20264,20266,20268,20270,20272],{"class":81,"line":486},[79,20251,16899],{"class":243},[79,20253,19420],{"class":239},[79,20255,244],{"class":243},[79,20257,18502],{"class":239},[79,20259,19397],{"class":85},[79,20261,19400],{"class":239},[79,20263,19431],{"class":85},[79,20265,15213],{"class":239},[79,20267,320],{"class":243},[79,20269,18048],{"class":239},[79,20271,19431],{"class":85},[79,20273,7832],{"class":239},[79,20275,20276,20278,20280,20282,20284,20286,20288,20290,20292,20294,20296],{"class":81,"line":491},[79,20277,16899],{"class":243},[79,20279,19448],{"class":239},[79,20281,244],{"class":243},[79,20283,19453],{"class":85},[79,20285,19456],{"class":239},[79,20287,2829],{"class":243},[79,20289,19390],{"class":239},[79,20291,2855],{"class":243},[79,20293,19420],{"class":239},[79,20295,2829],{"class":243},[79,20297,19469],{"class":239},[79,20299,20300,20302,20304,20306,20308,20310],{"class":81,"line":497},[79,20301,662],{"class":243},[79,20303,19476],{"class":239},[79,20305,392],{"class":243},[79,20307,18502],{"class":239},[79,20309,19483],{"class":85},[79,20311,19486],{"class":239},[79,20313,20314],{"class":81,"line":503},[79,20315,4245],{"class":239},[79,20317,20318,20320,20322,20324,20326],{"class":81,"line":509},[79,20319,11852],{"class":239},[79,20321,3414],{"class":243},[79,20323,19499],{"class":89},[79,20325,3681],{"class":243},[79,20327,11024],{"class":239},[79,20329,20330],{"class":81,"line":514},[79,20331,4402],{"class":239},[79,20333,20334],{"class":81,"line":520},[79,20335,18965],{"class":243},[79,20337,20338],{"class":81,"line":526},[79,20339,4245],{"class":239},[79,20341,20342,20344,20346,20348,20350],{"class":81,"line":532},[79,20343,11852],{"class":239},[79,20345,3414],{"class":243},[79,20347,19524],{"class":89},[79,20349,3681],{"class":243},[79,20351,11024],{"class":239},[79,20353,20354],{"class":81,"line":537},[79,20355,4402],{"class":239},[79,20357,20358],{"class":81,"line":543},[79,20359,3801],{"class":239},[79,20361,20362,20364,20366],{"class":81,"line":549},[79,20363,2390],{"class":243},[79,20365,893],{"class":85},[79,20367,4191],{"class":239},[79,20369,20370],{"class":81,"line":555},[79,20371,3782],{"class":239},[79,20373,20374],{"class":81,"line":561},[79,20375,17213],{"class":2440},[79,20377,20378],{"class":81,"line":567},[79,20379,16961],{"class":239},[79,20381,20382],{"class":81,"line":573},[79,20383,19561],{"class":239},[79,20385,20386],{"class":81,"line":579},[79,20387,19134],{"class":2440},[79,20389,20390,20392,20394,20396],{"class":81,"line":584},[79,20391,3787],{"class":239},[79,20393,3414],{"class":243},[79,20395,19574],{"class":89},[79,20397,3531],{"class":239},[79,20399,20400,20402],{"class":81,"line":590},[79,20401,16899],{"class":243},[79,20403,19583],{"class":239},[79,20405,20406,20408,20410],{"class":81,"line":596},[79,20407,4227],{"class":239},[79,20409,3666],{"class":243},[79,20411,19592],{"class":239},[79,20413,20414,20416,20418],{"class":81,"line":602},[79,20415,18755],{"class":239},[79,20417,19599],{"class":85},[79,20419,19602],{"class":239},[79,20421,20422,20424,20426,20428],{"class":81,"line":608},[79,20423,3787],{"class":239},[79,20425,3414],{"class":243},[79,20427,19611],{"class":89},[79,20429,3531],{"class":239},[79,20431,20432,20434],{"class":81,"line":614},[79,20433,16899],{"class":243},[79,20435,19620],{"class":239},[79,20437,20438,20440,20442,20444,20446],{"class":81,"line":620},[79,20439,4227],{"class":239},[79,20441,3666],{"class":243},[79,20443,3193],{"class":239},[79,20445,3666],{"class":243},[79,20447,19633],{"class":239},[79,20449,20450,20452,20454],{"class":81,"line":625},[79,20451,19638],{"class":239},[79,20453,19641],{"class":85},[79,20455,19644],{"class":239},[79,20457,20458,20460,20462],{"class":81,"line":630},[79,20459,18755],{"class":239},[79,20461,19651],{"class":85},[79,20463,19654],{"class":239},[79,20465,20466,20468,20470,20472],{"class":81,"line":648},[79,20467,3787],{"class":239},[79,20469,3414],{"class":243},[79,20471,19663],{"class":89},[79,20473,3531],{"class":239},[79,20475,20476,20478],{"class":81,"line":659},[79,20477,16899],{"class":243},[79,20479,19672],{"class":239},[79,20481,20482,20484,20486,20488,20490],{"class":81,"line":676},[79,20483,4227],{"class":239},[79,20485,3666],{"class":243},[79,20487,19681],{"class":239},[79,20489,3666],{"class":243},[79,20491,19686],{"class":239},[79,20493,20494],{"class":81,"line":708},[79,20495,19691],{"class":239},[79,20497,20498,20500,20502],{"class":81,"line":717},[79,20499,19696],{"class":239},[79,20501,19641],{"class":85},[79,20503,19701],{"class":239},[79,20505,20506,20508],{"class":81,"line":722},[79,20507,19706],{"class":85},[79,20509,19709],{"class":239},[79,20511,20512],{"class":81,"line":727},[79,20513,3801],{"class":239},[14,20515,20517],{"id":20516},"_82对象的初始化清理","8.2对象的初始化清理",[3377,20519,20520,20523],{},[29,20521,20522],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[29,20524,20525],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[265,20527,20529],{"id":20528},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20531,20532,20533,20536],{},"对象的",[2528,20534,20535],{},"初始化和清理","也是两个非常重要的安全问题",[19,20538,20539],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20541,20542],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20544,20545,20546,20549,20550,20553],{},"c++利用了",[2528,20547,20548],{},"构造函数","和",[2528,20551,20552],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20555,20556,20557],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[2528,20558,20559],{},"我们不提供构造和析构，编译器会提供",[19,20561,20562],{},[2528,20563,20564],{},"编译器提供的构造函数和析构函数是空实现。",[3377,20566,20567,20570],{},[29,20568,20569],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[29,20571,20572,20573,20576],{},"析构函数：主要作用在于对象",[2528,20574,20575],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20578,20579,20582],{},[2528,20580,20581],{},"构造函数语法：",[59,20583,20584],{},"类名(){}",[26,20586,20587,20590,20593,20596,20599],{},[29,20588,20589],{},"构造函数，没有返回值也不写void",[29,20591,20592],{},"函数名称与类名相同",[29,20594,20595],{},"构造函数可以有参数，因此可以发生重载",[29,20597,20598],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[29,20600,20601,20602,2803],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[59,20603,20604],{},"Person(){}",[19,20606,20607,15957,20610],{},[2528,20608,20609],{},"析构函数语法：",[59,20611,20612],{},"~类名(){}",[26,20614,20615,20618,20621,20627],{},[29,20616,20617],{},"析构函数，没有返回值也不写void",[29,20619,20620],{},"函数名称与类名相同,在名称前加上符号  ~",[29,20622,20623,20624],{},"析构函数不可以有参数，因此",[2528,20625,20626],{},"不可以发生重载",[29,20628,20629],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[51,20631,20633],{"className":2376,"code":20632,"language":2378,"meta":57,"style":57},"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",[59,20634,20635,20641,20645,20649,20654,20661,20665,20678,20682,20687,20694,20698,20711,20715,20719,20723,20727,20735,20739,20747,20751,20755,20763,20767,20772,20776,20783,20787,20800,20804,20812],{"__ignoreMap":57},[79,20636,20637,20639],{"class":81,"line":82},[79,20638,16855],{"class":243},[79,20640,17331],{"class":85},[79,20642,20643],{"class":81,"line":167},[79,20644,3782],{"class":239},[79,20646,20647],{"class":81,"line":178},[79,20648,16877],{"class":243},[79,20650,20651],{"class":81,"line":457},[79,20652,20653],{"class":2440},"    \u002F\u002F构造函数\n",[79,20655,20656,20659],{"class":81,"line":462},[79,20657,20658],{"class":85},"    Person",[79,20660,4191],{"class":239},[79,20662,20663],{"class":81,"line":474},[79,20664,4245],{"class":239},[79,20666,20667,20669,20671,20674,20676],{"class":81,"line":480},[79,20668,11852],{"class":239},[79,20670,3414],{"class":243},[79,20672,20673],{"class":89}," \"Person的构造函数调用\"",[79,20675,3681],{"class":243},[79,20677,11024],{"class":239},[79,20679,20680],{"class":81,"line":486},[79,20681,4402],{"class":239},[79,20683,20684],{"class":81,"line":491},[79,20685,20686],{"class":2440},"    \u002F\u002F析构函数\n",[79,20688,20689,20692],{"class":81,"line":497},[79,20690,20691],{"class":85},"    ~Person",[79,20693,4191],{"class":239},[79,20695,20696],{"class":81,"line":503},[79,20697,4245],{"class":239},[79,20699,20700,20702,20704,20707,20709],{"class":81,"line":509},[79,20701,11852],{"class":239},[79,20703,3414],{"class":243},[79,20705,20706],{"class":89}," \"Person的析构函数调用\"",[79,20708,3681],{"class":243},[79,20710,11024],{"class":239},[79,20712,20713],{"class":81,"line":514},[79,20714,4402],{"class":239},[79,20716,20717],{"class":81,"line":520},[79,20718,454],{"emptyLinePlaceholder":453},[79,20720,20721],{"class":81,"line":526},[79,20722,6197],{"class":239},[79,20724,20725],{"class":81,"line":532},[79,20726,454],{"emptyLinePlaceholder":453},[79,20728,20729,20731,20733],{"class":81,"line":537},[79,20730,7560],{"class":243},[79,20732,7784],{"class":85},[79,20734,4191],{"class":239},[79,20736,20737],{"class":81,"line":543},[79,20738,3782],{"class":239},[79,20740,20741,20744],{"class":81,"line":549},[79,20742,20743],{"class":239},"    Person p;",[79,20745,20746],{"class":2440},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[79,20748,20749],{"class":81,"line":555},[79,20750,3801],{"class":239},[79,20752,20753],{"class":81,"line":561},[79,20754,454],{"emptyLinePlaceholder":453},[79,20756,20757,20759,20761],{"class":81,"line":567},[79,20758,2390],{"class":243},[79,20760,893],{"class":85},[79,20762,13017],{"class":239},[79,20764,20765],{"class":81,"line":573},[79,20766,15373],{"class":239},[79,20768,20769],{"class":81,"line":579},[79,20770,20771],{"class":2440},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[79,20773,20774],{"class":81,"line":584},[79,20775,454],{"emptyLinePlaceholder":453},[79,20777,20778,20780],{"class":81,"line":590},[79,20779,20743],{"class":239},[79,20781,20782],{"class":2440},"\u002F\u002F只有构造函数\n",[79,20784,20785],{"class":81,"line":596},[79,20786,454],{"emptyLinePlaceholder":453},[79,20788,20789,20791,20793,20795,20797],{"class":81,"line":602},[79,20790,4518],{"class":85},[79,20792,685],{"class":239},[79,20794,4523],{"class":89},[79,20796,8161],{"class":239},[79,20798,20799],{"class":2440},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[79,20801,20802],{"class":81,"line":608},[79,20803,454],{"emptyLinePlaceholder":453},[79,20805,20806,20808,20810],{"class":81,"line":614},[79,20807,711],{"class":243},[79,20809,670],{"class":96},[79,20811,3531],{"class":239},[79,20813,20814],{"class":81,"line":620},[79,20815,3801],{"class":239},[19,20817,20818],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[265,20820,20822],{"id":20821},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20824,20825],{},"两种分类方式：",[19,20827,20828],{},"​\t按参数分为： 有参构造和无参构造",[19,20830,20831],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20833,20834],{},"三种调用方式：",[19,20836,20837],{},"​\t括号法",[19,20839,20840],{},"​\t显示法",[19,20842,20843],{},"​\t隐式转换法",[51,20845,20847],{"className":2376,"code":20846,"language":2378,"meta":57,"style":57},"#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",[59,20848,20849,20855,20865,20870,20875,20880,20885,20889,20897,20901,20905,20909,20915,20919,20932,20936,20948,20952,20961,20974,20978,20982,20988,20992,21005,21009,21014,21030,21034,21039,21048,21061,21065,21071,21075,21080,21088,21092,21097,21101,21109,21113,21118,21123,21128,21133,21138,21142,21147,21152,21157,21162,21166,21171,21176,21192,21204,21209,21213,21218,21223,21228,21232,21237,21251,21264,21268,21276,21280,21286,21292,21300],{"__ignoreMap":57},[79,20850,20851,20853],{"class":81,"line":82},[79,20852,4166],{"class":243},[79,20854,4169],{"class":89},[79,20856,20857,20859,20861,20863],{"class":81,"line":167},[79,20858,4174],{"class":243},[79,20860,4177],{"class":243},[79,20862,4180],{"class":85},[79,20864,3531],{"class":239},[79,20866,20867],{"class":81,"line":178},[79,20868,20869],{"class":2440},"\u002F\u002F1.构造函数的分类及调用\n",[79,20871,20872],{"class":81,"line":457},[79,20873,20874],{"class":2440},"\u002F\u002F分类\n",[79,20876,20877],{"class":81,"line":462},[79,20878,20879],{"class":2440},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[79,20881,20882],{"class":81,"line":474},[79,20883,20884],{"class":2440},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[79,20886,20887],{"class":81,"line":480},[79,20888,454],{"emptyLinePlaceholder":453},[79,20890,20891,20893,20895],{"class":81,"line":486},[79,20892,16855],{"class":243},[79,20894,17729],{"class":85},[79,20896,4880],{"class":239},[79,20898,20899],{"class":81,"line":491},[79,20900,3782],{"class":239},[79,20902,20903],{"class":81,"line":497},[79,20904,16877],{"class":243},[79,20906,20907],{"class":81,"line":503},[79,20908,20653],{"class":2440},[79,20910,20911,20913],{"class":81,"line":509},[79,20912,20658],{"class":85},[79,20914,4191],{"class":239},[79,20916,20917],{"class":81,"line":514},[79,20918,4245],{"class":239},[79,20920,20921,20923,20925,20928,20930],{"class":81,"line":520},[79,20922,5654],{"class":239},[79,20924,3414],{"class":243},[79,20926,20927],{"class":89},"\"Person构造函数无参构造\"",[79,20929,3414],{"class":243},[79,20931,3436],{"class":239},[79,20933,20934],{"class":81,"line":526},[79,20935,4402],{"class":239},[79,20937,20938,20940,20942,20944,20946],{"class":81,"line":532},[79,20939,20658],{"class":85},[79,20941,685],{"class":239},[79,20943,2390],{"class":243},[79,20945,3635],{"class":7412},[79,20947,253],{"class":239},[79,20949,20950],{"class":81,"line":537},[79,20951,4245],{"class":239},[79,20953,20954,20957,20959],{"class":81,"line":543},[79,20955,20956],{"class":239},"        age",[79,20958,244],{"class":243},[79,20960,8392],{"class":239},[79,20962,20963,20965,20967,20970,20972],{"class":81,"line":549},[79,20964,5654],{"class":239},[79,20966,3414],{"class":243},[79,20968,20969],{"class":89},"\"Person构造函数有参构造\"",[79,20971,3414],{"class":243},[79,20973,3436],{"class":239},[79,20975,20976],{"class":81,"line":555},[79,20977,4402],{"class":239},[79,20979,20980],{"class":81,"line":561},[79,20981,20686],{"class":2440},[79,20983,20984,20986],{"class":81,"line":567},[79,20985,20691],{"class":85},[79,20987,4191],{"class":239},[79,20989,20990],{"class":81,"line":573},[79,20991,4245],{"class":239},[79,20993,20994,20996,20998,21001,21003],{"class":81,"line":579},[79,20995,5654],{"class":239},[79,20997,3414],{"class":243},[79,20999,21000],{"class":89},"\"Person析构函数被调用\"",[79,21002,3414],{"class":243},[79,21004,3436],{"class":239},[79,21006,21007],{"class":81,"line":584},[79,21008,4402],{"class":239},[79,21010,21011],{"class":81,"line":590},[79,21012,21013],{"class":2440},"    \u002F\u002F拷贝构造函数\n",[79,21015,21016,21018,21020,21022,21024,21026,21028],{"class":81,"line":596},[79,21017,20658],{"class":85},[79,21019,685],{"class":239},[79,21021,8986],{"class":243},[79,21023,17729],{"class":85},[79,21025,12748],{"class":243},[79,21027,19],{"class":7412},[79,21029,253],{"class":239},[79,21031,21032],{"class":81,"line":602},[79,21033,4245],{"class":239},[79,21035,21036],{"class":81,"line":608},[79,21037,21038],{"class":2440},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[79,21040,21041,21043,21045],{"class":81,"line":614},[79,21042,20956],{"class":239},[79,21044,244],{"class":243},[79,21046,21047],{"class":239},"p.age;\n",[79,21049,21050,21052,21054,21057,21059],{"class":81,"line":620},[79,21051,5654],{"class":239},[79,21053,3414],{"class":243},[79,21055,21056],{"class":89},"\"Person拷贝构造函数被调用\"",[79,21058,3414],{"class":243},[79,21060,3436],{"class":239},[79,21062,21063],{"class":81,"line":625},[79,21064,4402],{"class":239},[79,21066,21067,21069],{"class":81,"line":630},[79,21068,4200],{"class":243},[79,21070,9991],{"class":239},[79,21072,21073],{"class":81,"line":648},[79,21074,6197],{"class":239},[79,21076,21077],{"class":81,"line":659},[79,21078,21079],{"class":2440},"\u002F\u002F调用\n",[79,21081,21082,21084,21086],{"class":81,"line":676},[79,21083,7560],{"class":243},[79,21085,7784],{"class":85},[79,21087,4191],{"class":239},[79,21089,21090],{"class":81,"line":708},[79,21091,3782],{"class":239},[79,21093,21094],{"class":81,"line":717},[79,21095,21096],{"class":2440},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[79,21098,21099],{"class":81,"line":722},[79,21100,3801],{"class":239},[79,21102,21103,21105,21107],{"class":81,"line":727},[79,21104,7560],{"class":243},[79,21106,7853],{"class":85},[79,21108,4191],{"class":239},[79,21110,21111],{"class":81,"line":738},[79,21112,3782],{"class":239},[79,21114,21115],{"class":81,"line":753},[79,21116,21117],{"class":2440},"    \u002F\u002F1.括号法\n",[79,21119,21120],{"class":81,"line":768},[79,21121,21122],{"class":2440},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[79,21124,21125],{"class":81,"line":776},[79,21126,21127],{"class":2440},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[79,21129,21130],{"class":81,"line":781},[79,21131,21132],{"class":2440},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[79,21134,21135],{"class":81,"line":786},[79,21136,21137],{"class":2440},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[79,21139,21140],{"class":81,"line":802},[79,21141,454],{"emptyLinePlaceholder":453},[79,21143,21144],{"class":81,"line":815},[79,21145,21146],{"class":2440},"    \u002F\u002F注意事项\n",[79,21148,21149],{"class":81,"line":828},[79,21150,21151],{"class":2440},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[79,21153,21154],{"class":81,"line":842},[79,21155,21156],{"class":2440},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[79,21158,21159],{"class":81,"line":859},[79,21160,21161],{"class":2440},"    \u002F\u002F Person p4();\n",[79,21163,21164],{"class":81,"line":878},[79,21165,454],{"emptyLinePlaceholder":453},[79,21167,21168],{"class":81,"line":883},[79,21169,21170],{"class":2440},"    \u002F\u002F2.显示法\n",[79,21172,21173],{"class":81,"line":888},[79,21174,21175],{"class":239},"    Person p1;\n",[79,21177,21178,21181,21183,21186,21188,21190],{"class":81,"line":904},[79,21179,21180],{"class":239},"    Person p2",[79,21182,244],{"class":243},[79,21184,21185],{"class":85},"Person",[79,21187,685],{"class":239},[79,21189,2820],{"class":96},[79,21191,4925],{"class":239},[79,21193,21194,21197,21199,21201],{"class":81,"line":919},[79,21195,21196],{"class":239},"    Person p3",[79,21198,244],{"class":243},[79,21200,21185],{"class":85},[79,21202,21203],{"class":239},"(p2);\n",[79,21205,21206],{"class":81,"line":930},[79,21207,21208],{"class":2440},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[79,21210,21211],{"class":81,"line":941},[79,21212,454],{"emptyLinePlaceholder":453},[79,21214,21215],{"class":81,"line":946},[79,21216,21217],{"class":2440},"    \u002F\u002F 注意事项2\n",[79,21219,21220],{"class":81,"line":969},[79,21221,21222],{"class":2440},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[79,21224,21225],{"class":81,"line":975},[79,21226,21227],{"class":2440},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[79,21229,21230],{"class":81,"line":989},[79,21231,454],{"emptyLinePlaceholder":453},[79,21233,21234],{"class":81,"line":1003},[79,21235,21236],{"class":2440},"    \u002F\u002F3.隐士转换法\n",[79,21238,21239,21242,21244,21246,21248],{"class":81,"line":1019},[79,21240,21241],{"class":239},"    Person p4",[79,21243,244],{"class":243},[79,21245,2820],{"class":96},[79,21247,2437],{"class":239},[79,21249,21250],{"class":2440},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[79,21252,21253,21256,21258,21261],{"class":81,"line":1024},[79,21254,21255],{"class":239},"    Person p5",[79,21257,244],{"class":243},[79,21259,21260],{"class":239},"p4;",[79,21262,21263],{"class":2440}," \u002F\u002F 这里会调用拷贝构造函数\n",[79,21265,21266],{"class":81,"line":1067},[79,21267,3801],{"class":239},[79,21269,21270,21272,21274],{"class":81,"line":1101},[79,21271,2390],{"class":243},[79,21273,893],{"class":85},[79,21275,4191],{"class":239},[79,21277,21278],{"class":81,"line":1106},[79,21279,3782],{"class":239},[79,21281,21282,21284],{"class":81,"line":1112},[79,21283,7829],{"class":85},[79,21285,7832],{"class":239},[79,21287,21288,21290],{"class":81,"line":1124},[79,21289,7898],{"class":85},[79,21291,7832],{"class":239},[79,21293,21294,21296,21298],{"class":81,"line":1129},[79,21295,711],{"class":243},[79,21297,670],{"class":96},[79,21299,3531],{"class":239},[79,21301,21302],{"class":81,"line":1150},[79,21303,3801],{"class":239},[19,21305,21306,21309],{},[2528,21307,21308],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[265,21311,21313],{"id":21312},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,21315,21316],{},"C++中拷贝构造函数调用时机通常有三种情况",[3377,21318,21319,21322,21325],{},[29,21320,21321],{},"使用一个已经创建完毕的对象来初始化一个新对象",[29,21323,21324],{},"值传递的方式给函数参数传值",[29,21326,21327],{},"以值方式返回局部对象",[51,21329,21331],{"className":2376,"code":21330,"language":2378,"meta":57,"style":57},"#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",[59,21332,21333,21339,21349,21353,21358,21362,21367,21372,21377,21383,21387,21391,21397,21401,21414,21418,21423,21435,21439,21447,21460,21464,21468,21484,21488,21497,21510,21514,21520,21524,21536,21540,21546,21550,21554,21562,21566,21579,21587,21605,21609,21614,21619,21634,21638,21651,21655,21663,21667,21671,21679,21683,21688,21697,21701,21705,21730,21740,21744,21752,21756,21767,21792,21796,21800,21804,21812,21816,21821,21826,21833,21838,21843,21848,21853,21857,21862,21866,21871,21875,21880,21885,21889,21893,21898,21903,21911],{"__ignoreMap":57},[79,21334,21335,21337],{"class":81,"line":82},[79,21336,4166],{"class":243},[79,21338,4169],{"class":89},[79,21340,21341,21343,21345,21347],{"class":81,"line":167},[79,21342,4174],{"class":243},[79,21344,4177],{"class":243},[79,21346,4180],{"class":85},[79,21348,3531],{"class":239},[79,21350,21351],{"class":81,"line":178},[79,21352,454],{"emptyLinePlaceholder":453},[79,21354,21355],{"class":81,"line":457},[79,21356,21357],{"class":2440},"\u002F\u002F拷贝构造函数调用时机\n",[79,21359,21360],{"class":81,"line":462},[79,21361,454],{"emptyLinePlaceholder":453},[79,21363,21364],{"class":81,"line":474},[79,21365,21366],{"class":2440},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[79,21368,21369],{"class":81,"line":480},[79,21370,21371],{"class":2440},"\u002F\u002F2.值传递的方式给函数参数传值\n",[79,21373,21374],{"class":81,"line":486},[79,21375,21376],{"class":2440},"\u002F\u002F3.以值方式返回局部对象\n",[79,21378,21379,21381],{"class":81,"line":491},[79,21380,16855],{"class":243},[79,21382,17331],{"class":85},[79,21384,21385],{"class":81,"line":497},[79,21386,3782],{"class":239},[79,21388,21389],{"class":81,"line":503},[79,21390,16877],{"class":243},[79,21392,21393,21395],{"class":81,"line":509},[79,21394,20658],{"class":85},[79,21396,4191],{"class":239},[79,21398,21399],{"class":81,"line":514},[79,21400,4245],{"class":239},[79,21402,21403,21405,21407,21410,21412],{"class":81,"line":520},[79,21404,11852],{"class":239},[79,21406,3414],{"class":243},[79,21408,21409],{"class":89}," \"Person的默认构造函数调用\"",[79,21411,3681],{"class":243},[79,21413,11024],{"class":239},[79,21415,21416],{"class":81,"line":526},[79,21417,4402],{"class":239},[79,21419,21420],{"class":81,"line":532},[79,21421,21422],{"class":2440},"    \u002F\u002F有参构造\n",[79,21424,21425,21427,21429,21431,21433],{"class":81,"line":537},[79,21426,20658],{"class":85},[79,21428,685],{"class":239},[79,21430,2390],{"class":243},[79,21432,17849],{"class":7412},[79,21434,253],{"class":239},[79,21436,21437],{"class":81,"line":543},[79,21438,4245],{"class":239},[79,21440,21441,21443,21445],{"class":81,"line":549},[79,21442,17903],{"class":239},[79,21444,244],{"class":243},[79,21446,9991],{"class":239},[79,21448,21449,21451,21453,21456,21458],{"class":81,"line":555},[79,21450,11852],{"class":239},[79,21452,3414],{"class":243},[79,21454,21455],{"class":89}," \"Person的有参构造函数调用\"",[79,21457,3681],{"class":243},[79,21459,11024],{"class":239},[79,21461,21462],{"class":81,"line":561},[79,21463,4402],{"class":239},[79,21465,21466],{"class":81,"line":567},[79,21467,21013],{"class":2440},[79,21469,21470,21472,21474,21476,21478,21480,21482],{"class":81,"line":573},[79,21471,20658],{"class":85},[79,21473,685],{"class":239},[79,21475,8986],{"class":243},[79,21477,17729],{"class":85},[79,21479,12748],{"class":243},[79,21481,19],{"class":7412},[79,21483,253],{"class":239},[79,21485,21486],{"class":81,"line":579},[79,21487,4245],{"class":239},[79,21489,21490,21492,21494],{"class":81,"line":584},[79,21491,17903],{"class":239},[79,21493,244],{"class":243},[79,21495,21496],{"class":239}," p.m_Age;\n",[79,21498,21499,21501,21503,21506,21508],{"class":81,"line":590},[79,21500,11852],{"class":239},[79,21502,3414],{"class":243},[79,21504,21505],{"class":89}," \"Person的拷贝构造函数调用\"",[79,21507,3681],{"class":243},[79,21509,11024],{"class":239},[79,21511,21512],{"class":81,"line":596},[79,21513,4402],{"class":239},[79,21515,21516,21518],{"class":81,"line":602},[79,21517,20691],{"class":85},[79,21519,4191],{"class":239},[79,21521,21522],{"class":81,"line":608},[79,21523,4245],{"class":239},[79,21525,21526,21528,21530,21532,21534],{"class":81,"line":614},[79,21527,11852],{"class":239},[79,21529,3414],{"class":243},[79,21531,20706],{"class":89},[79,21533,3681],{"class":243},[79,21535,11024],{"class":239},[79,21537,21538],{"class":81,"line":620},[79,21539,4402],{"class":239},[79,21541,21542,21544],{"class":81,"line":625},[79,21543,4200],{"class":243},[79,21545,17826],{"class":239},[79,21547,21548],{"class":81,"line":630},[79,21549,6197],{"class":239},[79,21551,21552],{"class":81,"line":648},[79,21553,21366],{"class":2440},[79,21555,21556,21558,21560],{"class":81,"line":659},[79,21557,7560],{"class":243},[79,21559,7784],{"class":85},[79,21561,4191],{"class":239},[79,21563,21564],{"class":81,"line":676},[79,21565,3782],{"class":239},[79,21567,21568,21571,21573,21575,21577],{"class":81,"line":708},[79,21569,21570],{"class":239},"    Person ",[79,21572,9324],{"class":85},[79,21574,685],{"class":239},[79,21576,3073],{"class":96},[79,21578,4925],{"class":239},[79,21580,21581,21583,21585],{"class":81,"line":717},[79,21582,21570],{"class":239},[79,21584,9227],{"class":85},[79,21586,19654],{"class":239},[79,21588,21589,21591,21593,21596,21598,21601,21603],{"class":81,"line":722},[79,21590,3787],{"class":239},[79,21592,3414],{"class":243},[79,21594,21595],{"class":89},"\"P2的年龄为：\"",[79,21597,3414],{"class":243},[79,21599,21600],{"class":239},"p2.m_Age",[79,21602,3414],{"class":243},[79,21604,3436],{"class":239},[79,21606,21607],{"class":81,"line":727},[79,21608,3801],{"class":239},[79,21610,21611],{"class":81,"line":738},[79,21612,21613],{"class":2440},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[79,21615,21616],{"class":81,"line":753},[79,21617,21618],{"class":2440},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[79,21620,21621,21623,21626,21628,21630,21632],{"class":81,"line":768},[79,21622,7560],{"class":243},[79,21624,21625],{"class":85}," doWork",[79,21627,685],{"class":239},[79,21629,21185],{"class":85},[79,21631,9019],{"class":7412},[79,21633,253],{"class":239},[79,21635,21636],{"class":81,"line":776},[79,21637,3782],{"class":239},[79,21639,21640,21642,21644,21647,21649],{"class":81,"line":781},[79,21641,8723],{"class":239},[79,21643,3414],{"class":243},[79,21645,21646],{"class":89}," \"doWork函数调用\"",[79,21648,3681],{"class":243},[79,21650,11024],{"class":239},[79,21652,21653],{"class":81,"line":786},[79,21654,3801],{"class":239},[79,21656,21657,21659,21661],{"class":81,"line":802},[79,21658,7560],{"class":243},[79,21660,7853],{"class":85},[79,21662,4191],{"class":239},[79,21664,21665],{"class":81,"line":815},[79,21666,3782],{"class":239},[79,21668,21669],{"class":81,"line":828},[79,21670,17473],{"class":239},[79,21672,21673,21676],{"class":81,"line":842},[79,21674,21675],{"class":85},"    doWork",[79,21677,21678],{"class":239},"(p);\n",[79,21680,21681],{"class":81,"line":859},[79,21682,3801],{"class":239},[79,21684,21685],{"class":81,"line":878},[79,21686,21687],{"class":2440},"\u002F\u002F 3.以值方式返回局部对象\n",[79,21689,21690,21692,21695],{"class":81,"line":883},[79,21691,21185],{"class":85},[79,21693,21694],{"class":85}," doWork2",[79,21696,4191],{"class":239},[79,21698,21699],{"class":81,"line":888},[79,21700,3782],{"class":239},[79,21702,21703],{"class":81,"line":904},[79,21704,21175],{"class":239},[79,21706,21707,21709,21711,21713,21715,21717,21719,21721,21723,21725,21727],{"class":81,"line":919},[79,21708,3787],{"class":239},[79,21710,3414],{"class":243},[79,21712,685],{"class":239},[79,21714,2390],{"class":243},[79,21716,853],{"class":243},[79,21718,2803],{"class":239},[79,21720,2727],{"class":243},[79,21722,9324],{"class":239},[79,21724,3414],{"class":243},[79,21726,3479],{"class":239},[79,21728,21729],{"class":2440},"\u002F\u002F打印p1的地址\n",[79,21731,21732,21734,21737],{"class":81,"line":930},[79,21733,711],{"class":243},[79,21735,21736],{"class":239}," p1;",[79,21738,21739],{"class":2440},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[79,21741,21742],{"class":81,"line":941},[79,21743,3801],{"class":239},[79,21745,21746,21748,21750],{"class":81,"line":946},[79,21747,7560],{"class":243},[79,21749,7925],{"class":85},[79,21751,4191],{"class":239},[79,21753,21754],{"class":81,"line":969},[79,21755,3782],{"class":239},[79,21757,21758,21761,21763,21765],{"class":81,"line":975},[79,21759,21760],{"class":239},"    Person p ",[79,21762,244],{"class":243},[79,21764,21694],{"class":85},[79,21766,7832],{"class":239},[79,21768,21769,21771,21773,21775,21777,21779,21781,21783,21785,21787,21789],{"class":81,"line":989},[79,21770,3787],{"class":239},[79,21772,3414],{"class":243},[79,21774,685],{"class":239},[79,21776,2390],{"class":243},[79,21778,853],{"class":243},[79,21780,2803],{"class":239},[79,21782,2727],{"class":243},[79,21784,19],{"class":239},[79,21786,3414],{"class":243},[79,21788,3479],{"class":239},[79,21790,21791],{"class":2440},"\u002F\u002F打印p的地址\n",[79,21793,21794],{"class":81,"line":1003},[79,21795,3801],{"class":239},[79,21797,21798],{"class":81,"line":1019},[79,21799,454],{"emptyLinePlaceholder":453},[79,21801,21802],{"class":81,"line":1024},[79,21803,454],{"emptyLinePlaceholder":453},[79,21805,21806,21808,21810],{"class":81,"line":1067},[79,21807,2390],{"class":243},[79,21809,893],{"class":85},[79,21811,4191],{"class":239},[79,21813,21814],{"class":81,"line":1101},[79,21815,3782],{"class":239},[79,21817,21818],{"class":81,"line":1106},[79,21819,21820],{"class":2440},"    \u002F\u002F test01();\n",[79,21822,21823],{"class":81,"line":1112},[79,21824,21825],{"class":2440},"    \u002F\u002F test02();\n",[79,21827,21828,21831],{"class":81,"line":1124},[79,21829,21830],{"class":85},"    test03",[79,21832,7832],{"class":239},[79,21834,21835],{"class":81,"line":1129},[79,21836,21837],{"class":2440},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[79,21839,21840],{"class":81,"line":1150},[79,21841,21842],{"class":2440},"\u002F\u002F 输出结果如下：\n",[79,21844,21845],{"class":81,"line":1161},[79,21846,21847],{"class":2440},"\u002F\u002F Person的默认构造函数调用\n",[79,21849,21850],{"class":81,"line":1175},[79,21851,21852],{"class":2440},"\u002F\u002F 0x7fffffffceec\n",[79,21854,21855],{"class":81,"line":1194},[79,21856,21852],{"class":2440},[79,21858,21859],{"class":81,"line":1211},[79,21860,21861],{"class":2440},"\u002F\u002F Person的析构函数调用\n",[79,21863,21864],{"class":81,"line":1228},[79,21865,454],{"emptyLinePlaceholder":453},[79,21867,21868],{"class":81,"line":1246},[79,21869,21870],{"class":2440},"\u002F\u002F 之前的输出结果如下：\n",[79,21872,21873],{"class":81,"line":1251},[79,21874,21847],{"class":2440},[79,21876,21877],{"class":81,"line":1274},[79,21878,21879],{"class":2440},"\u002F\u002F 地址\n",[79,21881,21882],{"class":81,"line":1296},[79,21883,21884],{"class":2440},"\u002F\u002F Person的拷贝构造函数调用\n",[79,21886,21887],{"class":81,"line":1316},[79,21888,21861],{"class":2440},[79,21890,21891],{"class":81,"line":1321},[79,21892,21879],{"class":2440},[79,21894,21895],{"class":81,"line":1326},[79,21896,21897],{"class":2440},"\u002F\u002F (这两次输出的地址也是不同的) \n",[79,21899,21900],{"class":81,"line":1342},[79,21901,21902],{"class":2440},"\u002F\u002F Person的析构函数调用     \n",[79,21904,21905,21907,21909],{"class":81,"line":18985},[79,21906,711],{"class":243},[79,21908,670],{"class":96},[79,21910,3531],{"class":239},[79,21912,21913],{"class":81,"line":18990},[79,21914,3801],{"class":239},[19,21916,21917],{},"简化版理解",[51,21919,21921],{"className":2376,"code":21920,"language":2378,"meta":57,"style":57},"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",[59,21922,21923,21931,21935,21941,21954,21965,21969,21981,21994,22002,22006,22022,22035,22044,22048,22053,22059,22072,22076,22080,22087,22091,22095,22100,22108,22112,22128,22141,22154,22158,22163,22171,22175,22179,22184,22189,22205,22213,22220,22226,22230,22234,22239,22247,22251,22255,22278,22285,22289,22293,22301,22305,22315,22337,22341,22345,22349,22357,22361,22366,22371,22377,22381,22391,22395,22403],{"__ignoreMap":57},[79,21924,21925,21927,21929],{"class":81,"line":82},[79,21926,16855],{"class":243},[79,21928,17729],{"class":85},[79,21930,17732],{"class":239},[79,21932,21933],{"class":81,"line":167},[79,21934,16877],{"class":243},[79,21936,21937,21939],{"class":81,"line":178},[79,21938,20658],{"class":85},[79,21940,13017],{"class":239},[79,21942,21943,21945,21947,21950,21952],{"class":81,"line":457},[79,21944,11852],{"class":239},[79,21946,3414],{"class":243},[79,21948,21949],{"class":89}," \"无参构造函数!\"",[79,21951,3681],{"class":243},[79,21953,11024],{"class":239},[79,21955,21956,21959,21961,21963],{"class":81,"line":462},[79,21957,21958],{"class":239},"        mAge ",[79,21960,244],{"class":243},[79,21962,670],{"class":96},[79,21964,3531],{"class":239},[79,21966,21967],{"class":81,"line":474},[79,21968,4402],{"class":239},[79,21970,21971,21973,21975,21977,21979],{"class":81,"line":480},[79,21972,20658],{"class":85},[79,21974,685],{"class":239},[79,21976,2390],{"class":243},[79,21978,17849],{"class":7412},[79,21980,14605],{"class":239},[79,21982,21983,21985,21987,21990,21992],{"class":81,"line":486},[79,21984,11852],{"class":239},[79,21986,3414],{"class":243},[79,21988,21989],{"class":89}," \"有参构造函数!\"",[79,21991,3681],{"class":243},[79,21993,11024],{"class":239},[79,21995,21996,21998,22000],{"class":81,"line":491},[79,21997,21958],{"class":239},[79,21999,244],{"class":243},[79,22001,9991],{"class":239},[79,22003,22004],{"class":81,"line":497},[79,22005,4402],{"class":239},[79,22007,22008,22010,22012,22014,22016,22018,22020],{"class":81,"line":503},[79,22009,20658],{"class":85},[79,22011,685],{"class":239},[79,22013,8986],{"class":243},[79,22015,17729],{"class":85},[79,22017,2727],{"class":243},[79,22019,9019],{"class":7412},[79,22021,14605],{"class":239},[79,22023,22024,22026,22028,22031,22033],{"class":81,"line":509},[79,22025,11852],{"class":239},[79,22027,3414],{"class":243},[79,22029,22030],{"class":89}," \"拷贝构造函数!\"",[79,22032,3681],{"class":243},[79,22034,11024],{"class":239},[79,22036,22037,22039,22041],{"class":81,"line":514},[79,22038,21958],{"class":239},[79,22040,244],{"class":243},[79,22042,22043],{"class":239}," p.mAge;\n",[79,22045,22046],{"class":81,"line":520},[79,22047,4402],{"class":239},[79,22049,22050],{"class":81,"line":526},[79,22051,22052],{"class":2440},"    \u002F\u002F析构函数在释放内存之前调用\n",[79,22054,22055,22057],{"class":81,"line":532},[79,22056,20691],{"class":85},[79,22058,13017],{"class":239},[79,22060,22061,22063,22065,22068,22070],{"class":81,"line":537},[79,22062,11852],{"class":239},[79,22064,3414],{"class":243},[79,22066,22067],{"class":89}," \"析构函数!\"",[79,22069,3681],{"class":243},[79,22071,11024],{"class":239},[79,22073,22074],{"class":81,"line":543},[79,22075,4402],{"class":239},[79,22077,22078],{"class":81,"line":549},[79,22079,16877],{"class":243},[79,22081,22082,22084],{"class":81,"line":555},[79,22083,4200],{"class":243},[79,22085,22086],{"class":239}," mAge;\n",[79,22088,22089],{"class":81,"line":561},[79,22090,6197],{"class":239},[79,22092,22093],{"class":81,"line":567},[79,22094,454],{"emptyLinePlaceholder":453},[79,22096,22097],{"class":81,"line":573},[79,22098,22099],{"class":2440},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[79,22101,22102,22104,22106],{"class":81,"line":579},[79,22103,7560],{"class":243},[79,22105,7784],{"class":85},[79,22107,13017],{"class":239},[79,22109,22110],{"class":81,"line":584},[79,22111,454],{"emptyLinePlaceholder":453},[79,22113,22114,22116,22119,22121,22123,22125],{"class":81,"line":590},[79,22115,21570],{"class":239},[79,22117,22118],{"class":85},"man",[79,22120,685],{"class":239},[79,22122,2686],{"class":96},[79,22124,8161],{"class":239},[79,22126,22127],{"class":2440}," \u002F\u002Fp对象已经创建完毕\n",[79,22129,22130,22132,22135,22138],{"class":81,"line":596},[79,22131,21570],{"class":239},[79,22133,22134],{"class":85},"newman",[79,22136,22137],{"class":239},"(man);",[79,22139,22140],{"class":2440}," \u002F\u002F调用拷贝构造函数\n",[79,22142,22143,22146,22148,22151],{"class":81,"line":602},[79,22144,22145],{"class":239},"    Person newman2 ",[79,22147,244],{"class":243},[79,22149,22150],{"class":239}," man;",[79,22152,22153],{"class":2440}," \u002F\u002F拷贝构造\n",[79,22155,22156],{"class":81,"line":608},[79,22157,454],{"emptyLinePlaceholder":453},[79,22159,22160],{"class":81,"line":614},[79,22161,22162],{"class":2440},"    \u002F\u002FPerson newman3;\n",[79,22164,22165,22168],{"class":81,"line":620},[79,22166,22167],{"class":2440},"    \u002F\u002Fnewman3 = man;",[79,22169,22170],{"class":2440}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[79,22172,22173],{"class":81,"line":625},[79,22174,3801],{"class":239},[79,22176,22177],{"class":81,"line":630},[79,22178,454],{"emptyLinePlaceholder":453},[79,22180,22181],{"class":81,"line":648},[79,22182,22183],{"class":2440},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[79,22185,22186],{"class":81,"line":659},[79,22187,22188],{"class":2440},"\u002F\u002F相当于Person p1 = p;\n",[79,22190,22191,22193,22195,22197,22199,22202],{"class":81,"line":676},[79,22192,7560],{"class":243},[79,22194,21625],{"class":85},[79,22196,685],{"class":239},[79,22198,21185],{"class":85},[79,22200,22201],{"class":7412}," p1",[79,22203,22204],{"class":239},") {}\n",[79,22206,22207,22209,22211],{"class":81,"line":708},[79,22208,7560],{"class":243},[79,22210,7853],{"class":85},[79,22212,13017],{"class":239},[79,22214,22215,22217],{"class":81,"line":717},[79,22216,20743],{"class":239},[79,22218,22219],{"class":2440}," \u002F\u002F无参构造函数\n",[79,22221,22222,22224],{"class":81,"line":722},[79,22223,21675],{"class":85},[79,22225,21678],{"class":239},[79,22227,22228],{"class":81,"line":727},[79,22229,3801],{"class":239},[79,22231,22232],{"class":81,"line":738},[79,22233,454],{"emptyLinePlaceholder":453},[79,22235,22236],{"class":81,"line":753},[79,22237,22238],{"class":2440},"\u002F\u002F3. 以值方式返回局部对象\n",[79,22240,22241,22243,22245],{"class":81,"line":768},[79,22242,21185],{"class":85},[79,22244,21694],{"class":85},[79,22246,4191],{"class":239},[79,22248,22249],{"class":81,"line":776},[79,22250,3782],{"class":239},[79,22252,22253],{"class":81,"line":781},[79,22254,21175],{"class":239},[79,22256,22257,22259,22261,22263,22265,22267,22269,22271,22274,22276],{"class":81,"line":786},[79,22258,8723],{"class":239},[79,22260,3414],{"class":243},[79,22262,3887],{"class":239},[79,22264,2390],{"class":243},[79,22266,853],{"class":243},[79,22268,2803],{"class":239},[79,22270,2727],{"class":243},[79,22272,22273],{"class":239},"p1 ",[79,22275,3414],{"class":243},[79,22277,11024],{"class":239},[79,22279,22280,22282],{"class":81,"line":802},[79,22281,711],{"class":243},[79,22283,22284],{"class":239}," p1;\n",[79,22286,22287],{"class":81,"line":815},[79,22288,3801],{"class":239},[79,22290,22291],{"class":81,"line":828},[79,22292,454],{"emptyLinePlaceholder":453},[79,22294,22295,22297,22299],{"class":81,"line":842},[79,22296,7560],{"class":243},[79,22298,7925],{"class":85},[79,22300,4191],{"class":239},[79,22302,22303],{"class":81,"line":859},[79,22304,3782],{"class":239},[79,22306,22307,22309,22311,22313],{"class":81,"line":878},[79,22308,21760],{"class":239},[79,22310,244],{"class":243},[79,22312,21694],{"class":85},[79,22314,7832],{"class":239},[79,22316,22317,22319,22321,22323,22325,22327,22329,22331,22333,22335],{"class":81,"line":883},[79,22318,8723],{"class":239},[79,22320,3414],{"class":243},[79,22322,3887],{"class":239},[79,22324,2390],{"class":243},[79,22326,853],{"class":243},[79,22328,2803],{"class":239},[79,22330,2727],{"class":243},[79,22332,13612],{"class":239},[79,22334,3414],{"class":243},[79,22336,11024],{"class":239},[79,22338,22339],{"class":81,"line":888},[79,22340,3801],{"class":239},[79,22342,22343],{"class":81,"line":904},[79,22344,454],{"emptyLinePlaceholder":453},[79,22346,22347],{"class":81,"line":919},[79,22348,454],{"emptyLinePlaceholder":453},[79,22350,22351,22353,22355],{"class":81,"line":930},[79,22352,2390],{"class":243},[79,22354,893],{"class":85},[79,22356,13017],{"class":239},[79,22358,22359],{"class":81,"line":941},[79,22360,454],{"emptyLinePlaceholder":453},[79,22362,22363],{"class":81,"line":946},[79,22364,22365],{"class":2440},"    \u002F\u002Ftest01();\n",[79,22367,22368],{"class":81,"line":969},[79,22369,22370],{"class":2440},"    \u002F\u002Ftest02();\n",[79,22372,22373,22375],{"class":81,"line":975},[79,22374,21830],{"class":85},[79,22376,7832],{"class":239},[79,22378,22379],{"class":81,"line":989},[79,22380,454],{"emptyLinePlaceholder":453},[79,22382,22383,22385,22387,22389],{"class":81,"line":1003},[79,22384,4518],{"class":85},[79,22386,685],{"class":239},[79,22388,4523],{"class":89},[79,22390,4925],{"class":239},[79,22392,22393],{"class":81,"line":1019},[79,22394,454],{"emptyLinePlaceholder":453},[79,22396,22397,22399,22401],{"class":81,"line":1024},[79,22398,711],{"class":243},[79,22400,670],{"class":96},[79,22402,3531],{"class":239},[79,22404,22405],{"class":81,"line":1067},[79,22406,3801],{"class":239},[265,22408,22410],{"id":22409},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22412,22413],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22415,22416],{},"1．默认构造函数(无参，函数体为空)",[19,22418,22419],{},"2．默认析构函数(无参，函数体为空)",[19,22421,22422],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22424,22425],{},"构造函数调用规则如下：",[3377,22427,22428,22431],{},[29,22429,22430],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[29,22432,22433],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[51,22435,22437],{"className":2376,"code":22436,"language":2378,"meta":57,"style":57},"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",[59,22438,22439,22447,22451,22456,22462,22474,22478,22483,22495,22504,22516,22520,22524,22540,22549,22561,22565,22569,22575,22587,22591,22595,22601,22605,22609,22617,22621,22633,22638,22646,22650,22668,22672,22676,22684,22688,22693,22701,22716,22729,22733,22738,22745,22761,22774,22778,22782,22790,22794,22800,22804,22814,22818,22826],{"__ignoreMap":57},[79,22440,22441,22443,22445],{"class":81,"line":82},[79,22442,16855],{"class":243},[79,22444,17729],{"class":85},[79,22446,17732],{"class":239},[79,22448,22449],{"class":81,"line":167},[79,22450,16877],{"class":243},[79,22452,22453],{"class":81,"line":178},[79,22454,22455],{"class":2440},"    \u002F\u002F无参（默认）构造函数\n",[79,22457,22458,22460],{"class":81,"line":457},[79,22459,20658],{"class":85},[79,22461,13017],{"class":239},[79,22463,22464,22466,22468,22470,22472],{"class":81,"line":462},[79,22465,11852],{"class":239},[79,22467,3414],{"class":243},[79,22469,21949],{"class":89},[79,22471,3681],{"class":243},[79,22473,11024],{"class":239},[79,22475,22476],{"class":81,"line":474},[79,22477,4402],{"class":239},[79,22479,22480],{"class":81,"line":480},[79,22481,22482],{"class":2440},"    \u002F\u002F有参构造函数\n",[79,22484,22485,22487,22489,22491,22493],{"class":81,"line":486},[79,22486,20658],{"class":85},[79,22488,685],{"class":239},[79,22490,2390],{"class":243},[79,22492,3635],{"class":7412},[79,22494,14605],{"class":239},[79,22496,22497,22500,22502],{"class":81,"line":491},[79,22498,22499],{"class":239},"        age ",[79,22501,244],{"class":243},[79,22503,3669],{"class":239},[79,22505,22506,22508,22510,22512,22514],{"class":81,"line":497},[79,22507,11852],{"class":239},[79,22509,3414],{"class":243},[79,22511,21989],{"class":89},[79,22513,3681],{"class":243},[79,22515,11024],{"class":239},[79,22517,22518],{"class":81,"line":503},[79,22519,4402],{"class":239},[79,22521,22522],{"class":81,"line":509},[79,22523,21013],{"class":2440},[79,22525,22526,22528,22530,22532,22534,22536,22538],{"class":81,"line":514},[79,22527,20658],{"class":85},[79,22529,685],{"class":239},[79,22531,8986],{"class":243},[79,22533,17729],{"class":85},[79,22535,2727],{"class":243},[79,22537,9019],{"class":7412},[79,22539,14605],{"class":239},[79,22541,22542,22544,22546],{"class":81,"line":520},[79,22543,22499],{"class":239},[79,22545,244],{"class":243},[79,22547,22548],{"class":239}," p.age;\n",[79,22550,22551,22553,22555,22557,22559],{"class":81,"line":526},[79,22552,11852],{"class":239},[79,22554,3414],{"class":243},[79,22556,22030],{"class":89},[79,22558,3681],{"class":243},[79,22560,11024],{"class":239},[79,22562,22563],{"class":81,"line":532},[79,22564,4402],{"class":239},[79,22566,22567],{"class":81,"line":537},[79,22568,20686],{"class":2440},[79,22570,22571,22573],{"class":81,"line":543},[79,22572,20691],{"class":85},[79,22574,13017],{"class":239},[79,22576,22577,22579,22581,22583,22585],{"class":81,"line":549},[79,22578,11852],{"class":239},[79,22580,3414],{"class":243},[79,22582,22067],{"class":89},[79,22584,3681],{"class":243},[79,22586,11024],{"class":239},[79,22588,22589],{"class":81,"line":555},[79,22590,4402],{"class":239},[79,22592,22593],{"class":81,"line":561},[79,22594,16877],{"class":243},[79,22596,22597,22599],{"class":81,"line":567},[79,22598,4200],{"class":243},[79,22600,9991],{"class":239},[79,22602,22603],{"class":81,"line":573},[79,22604,6197],{"class":239},[79,22606,22607],{"class":81,"line":579},[79,22608,454],{"emptyLinePlaceholder":453},[79,22610,22611,22613,22615],{"class":81,"line":584},[79,22612,7560],{"class":243},[79,22614,7784],{"class":85},[79,22616,4191],{"class":239},[79,22618,22619],{"class":81,"line":590},[79,22620,3782],{"class":239},[79,22622,22623,22625,22627,22629,22631],{"class":81,"line":596},[79,22624,21570],{"class":239},[79,22626,9324],{"class":85},[79,22628,685],{"class":239},[79,22630,3023],{"class":96},[79,22632,4925],{"class":239},[79,22634,22635],{"class":81,"line":602},[79,22636,22637],{"class":2440},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[79,22639,22640,22642,22644],{"class":81,"line":608},[79,22641,21570],{"class":239},[79,22643,9227],{"class":85},[79,22645,19654],{"class":239},[79,22647,22648],{"class":81,"line":614},[79,22649,454],{"emptyLinePlaceholder":453},[79,22651,22652,22654,22656,22659,22661,22664,22666],{"class":81,"line":620},[79,22653,8723],{"class":239},[79,22655,3414],{"class":243},[79,22657,22658],{"class":89}," \"p2的年龄为： \"",[79,22660,3681],{"class":243},[79,22662,22663],{"class":239}," p2.age ",[79,22665,3414],{"class":243},[79,22667,11024],{"class":239},[79,22669,22670],{"class":81,"line":625},[79,22671,3801],{"class":239},[79,22673,22674],{"class":81,"line":630},[79,22675,454],{"emptyLinePlaceholder":453},[79,22677,22678,22680,22682],{"class":81,"line":648},[79,22679,7560],{"class":243},[79,22681,7853],{"class":85},[79,22683,4191],{"class":239},[79,22685,22686],{"class":81,"line":659},[79,22687,3782],{"class":239},[79,22689,22690],{"class":81,"line":676},[79,22691,22692],{"class":2440},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[79,22694,22695,22698],{"class":81,"line":708},[79,22696,22697],{"class":239},"    Person p1;",[79,22699,22700],{"class":2440}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[79,22702,22703,22705,22707,22709,22711,22713],{"class":81,"line":717},[79,22704,21570],{"class":239},[79,22706,9227],{"class":85},[79,22708,685],{"class":239},[79,22710,2820],{"class":96},[79,22712,8161],{"class":239},[79,22714,22715],{"class":2440}," \u002F\u002F用户提供的有参\n",[79,22717,22718,22720,22723,22726],{"class":81,"line":722},[79,22719,21570],{"class":239},[79,22721,22722],{"class":85},"p3",[79,22724,22725],{"class":239},"(p2);",[79,22727,22728],{"class":2440}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[79,22730,22731],{"class":81,"line":727},[79,22732,454],{"emptyLinePlaceholder":453},[79,22734,22735],{"class":81,"line":738},[79,22736,22737],{"class":2440},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[79,22739,22740,22743],{"class":81,"line":753},[79,22741,22742],{"class":239},"    Person p4;",[79,22744,22700],{"class":2440},[79,22746,22747,22749,22752,22754,22756,22758],{"class":81,"line":768},[79,22748,21570],{"class":239},[79,22750,22751],{"class":85},"p5",[79,22753,685],{"class":239},[79,22755,2820],{"class":96},[79,22757,8161],{"class":239},[79,22759,22760],{"class":2440}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[79,22762,22763,22765,22768,22771],{"class":81,"line":776},[79,22764,21570],{"class":239},[79,22766,22767],{"class":85},"p6",[79,22769,22770],{"class":239},"(p5);",[79,22772,22773],{"class":2440}," \u002F\u002F用户自己提供拷贝构造\n",[79,22775,22776],{"class":81,"line":781},[79,22777,3801],{"class":239},[79,22779,22780],{"class":81,"line":786},[79,22781,454],{"emptyLinePlaceholder":453},[79,22783,22784,22786,22788],{"class":81,"line":802},[79,22785,2390],{"class":243},[79,22787,893],{"class":85},[79,22789,13017],{"class":239},[79,22791,22792],{"class":81,"line":815},[79,22793,454],{"emptyLinePlaceholder":453},[79,22795,22796,22798],{"class":81,"line":828},[79,22797,7829],{"class":85},[79,22799,7832],{"class":239},[79,22801,22802],{"class":81,"line":842},[79,22803,454],{"emptyLinePlaceholder":453},[79,22805,22806,22808,22810,22812],{"class":81,"line":859},[79,22807,4518],{"class":85},[79,22809,685],{"class":239},[79,22811,4523],{"class":89},[79,22813,4925],{"class":239},[79,22815,22816],{"class":81,"line":878},[79,22817,454],{"emptyLinePlaceholder":453},[79,22819,22820,22822,22824],{"class":81,"line":883},[79,22821,711],{"class":243},[79,22823,670],{"class":96},[79,22825,3531],{"class":239},[79,22827,22828],{"class":81,"line":888},[79,22829,3801],{"class":239},[265,22831,22833],{"id":22832},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22835,22836],{},"浅拷贝：简单的赋值拷贝操作",[19,22838,22839],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[51,22841,22843],{"className":2376,"code":22842,"language":2378,"meta":57,"style":57},"#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",[59,22844,22845,22851,22861,22867,22871,22875,22880,22886,22890,22903,22907,22911,22918,22922,22932,22947,22960,22964,22969,22974,22990,22994,23007,23012,23017,23022,23031,23036,23051,23055,23059,23063,23069,23073,23078,23093,23097,23108,23122,23126,23135,23139,23145,23157,23161,23169,23173,23190,23221,23229,23257,23261,23265,23273,23277,23283],{"__ignoreMap":57},[79,22846,22847,22849],{"class":81,"line":82},[79,22848,4166],{"class":243},[79,22850,4169],{"class":89},[79,22852,22853,22855,22857,22859],{"class":81,"line":167},[79,22854,4174],{"class":243},[79,22856,4177],{"class":243},[79,22858,4180],{"class":85},[79,22860,3531],{"class":239},[79,22862,22863,22865],{"class":81,"line":178},[79,22864,16855],{"class":243},[79,22866,17331],{"class":85},[79,22868,22869],{"class":81,"line":457},[79,22870,3782],{"class":239},[79,22872,22873],{"class":81,"line":462},[79,22874,16877],{"class":243},[79,22876,22877],{"class":81,"line":474},[79,22878,22879],{"class":2440},"    \u002F\u002F默认构造函数\n",[79,22881,22882,22884],{"class":81,"line":480},[79,22883,20658],{"class":85},[79,22885,4191],{"class":239},[79,22887,22888],{"class":81,"line":486},[79,22889,4245],{"class":239},[79,22891,22892,22894,22896,22899,22901],{"class":81,"line":491},[79,22893,5654],{"class":239},[79,22895,3414],{"class":243},[79,22897,22898],{"class":89},"\"默认构造函数\"",[79,22900,3414],{"class":243},[79,22902,3436],{"class":239},[79,22904,22905],{"class":81,"line":497},[79,22906,4402],{"class":239},[79,22908,22909],{"class":81,"line":503},[79,22910,22482],{"class":2440},[79,22912,22913,22915],{"class":81,"line":509},[79,22914,20691],{"class":85},[79,22916,22917],{"class":239},"(int age,int height)\n",[79,22919,22920],{"class":81,"line":514},[79,22921,4245],{"class":239},[79,22923,22924,22927,22929],{"class":81,"line":520},[79,22925,22926],{"class":239},"        m_Age",[79,22928,244],{"class":243},[79,22930,22931],{"class":239},"age;\n",[79,22933,22934,22937,22939,22941,22944],{"class":81,"line":526},[79,22935,22936],{"class":239},"        m_Height",[79,22938,13881],{"class":243},[79,22940,4597],{"class":243},[79,22942,22943],{"class":239},"(height);",[79,22945,22946],{"class":2440},"\u002F\u002F放到堆区\n",[79,22948,22949,22951,22953,22956,22958],{"class":81,"line":532},[79,22950,5654],{"class":239},[79,22952,3414],{"class":243},[79,22954,22955],{"class":89},"\"有参构造函数\"",[79,22957,3414],{"class":243},[79,22959,3436],{"class":239},[79,22961,22962],{"class":81,"line":537},[79,22963,4402],{"class":239},[79,22965,22966],{"class":81,"line":543},[79,22967,22968],{"class":2440},"    \u002F\u002F深拷贝解决上述问题\n",[79,22970,22971],{"class":81,"line":549},[79,22972,22973],{"class":2440},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[79,22975,22976,22978,22980,22982,22984,22986,22988],{"class":81,"line":555},[79,22977,20658],{"class":85},[79,22979,685],{"class":239},[79,22981,8986],{"class":243},[79,22983,17729],{"class":85},[79,22985,12748],{"class":243},[79,22987,19],{"class":7412},[79,22989,253],{"class":239},[79,22991,22992],{"class":81,"line":561},[79,22993,4245],{"class":239},[79,22995,22996,22998,23000,23003,23005],{"class":81,"line":567},[79,22997,5654],{"class":239},[79,22999,3414],{"class":243},[79,23001,23002],{"class":89},"\"拷贝构造函数\"",[79,23004,3414],{"class":243},[79,23006,3436],{"class":239},[79,23008,23009],{"class":81,"line":573},[79,23010,23011],{"class":2440},"        \u002F\u002F编译器默认的写如下注释部分\n",[79,23013,23014],{"class":81,"line":579},[79,23015,23016],{"class":2440},"        \u002F\u002Fm_Age=p.m_Age;\n",[79,23018,23019],{"class":81,"line":584},[79,23020,23021],{"class":2440},"        \u002F\u002Fm_Height=p.m_Height;\n",[79,23023,23024,23026,23028],{"class":81,"line":590},[79,23025,22926],{"class":239},[79,23027,244],{"class":243},[79,23029,23030],{"class":239},"p.m_Age;\n",[79,23032,23033],{"class":81,"line":596},[79,23034,23035],{"class":2440},"        \u002F\u002F深拷贝操作\n",[79,23037,23038,23040,23042,23044,23046,23048],{"class":81,"line":602},[79,23039,22936],{"class":239},[79,23041,13881],{"class":243},[79,23043,4597],{"class":243},[79,23045,685],{"class":239},[79,23047,2829],{"class":243},[79,23049,23050],{"class":239},"p.m_Height);\n",[79,23052,23053],{"class":81,"line":608},[79,23054,4402],{"class":239},[79,23056,23057],{"class":81,"line":614},[79,23058,454],{"emptyLinePlaceholder":453},[79,23060,23061],{"class":81,"line":620},[79,23062,20686],{"class":2440},[79,23064,23065,23067],{"class":81,"line":625},[79,23066,20691],{"class":85},[79,23068,4191],{"class":239},[79,23070,23071],{"class":81,"line":630},[79,23072,4245],{"class":239},[79,23074,23075],{"class":81,"line":648},[79,23076,23077],{"class":2440},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[79,23079,23080,23082,23085,23088,23091],{"class":81,"line":659},[79,23081,1132],{"class":243},[79,23083,23084],{"class":239},"(m_Height ",[79,23086,23087],{"class":243},"!=",[79,23089,23090],{"class":96}," NULL",[79,23092,253],{"class":239},[79,23094,23095],{"class":81,"line":676},[79,23096,4723],{"class":239},[79,23098,23099,23102,23105],{"class":81,"line":708},[79,23100,23101],{"class":243},"            delete",[79,23103,23104],{"class":239}," m_Height;",[79,23106,23107],{"class":2440}," \u002F\u002F释放堆区内存\n",[79,23109,23110,23113,23115,23117,23119],{"class":81,"line":717},[79,23111,23112],{"class":239},"            m_Height",[79,23114,244],{"class":243},[79,23116,4607],{"class":96},[79,23118,2437],{"class":239},[79,23120,23121],{"class":2440}," \u002F\u002F防止野指针\n",[79,23123,23124],{"class":81,"line":722},[79,23125,4742],{"class":239},[79,23127,23128,23130,23132],{"class":81,"line":727},[79,23129,5654],{"class":239},[79,23131,3414],{"class":243},[79,23133,23134],{"class":89},"\"Person的析构函数调用\"\n",[79,23136,23137],{"class":81,"line":738},[79,23138,4402],{"class":239},[79,23140,23141,23143],{"class":81,"line":753},[79,23142,4200],{"class":243},[79,23144,17826],{"class":239},[79,23146,23147,23149,23151,23154],{"class":81,"line":768},[79,23148,4200],{"class":243},[79,23150,853],{"class":243},[79,23152,23153],{"class":239},"m_Height;",[79,23155,23156],{"class":2440}," \u002F\u002F定义一个指针，指向身高\n",[79,23158,23159],{"class":81,"line":776},[79,23160,6197],{"class":239},[79,23162,23163,23165,23167],{"class":81,"line":781},[79,23164,7560],{"class":243},[79,23166,7784],{"class":85},[79,23168,4191],{"class":239},[79,23170,23171],{"class":81,"line":786},[79,23172,3782],{"class":239},[79,23174,23175,23177,23179,23181,23183,23185,23188],{"class":81,"line":802},[79,23176,21570],{"class":239},[79,23178,9324],{"class":85},[79,23180,685],{"class":239},[79,23182,3023],{"class":96},[79,23184,2752],{"class":239},[79,23186,23187],{"class":96},"160",[79,23189,4925],{"class":239},[79,23191,23192,23194,23196,23199,23201,23204,23206,23209,23211,23214,23216,23218],{"class":81,"line":815},[79,23193,3787],{"class":239},[79,23195,3414],{"class":243},[79,23197,23198],{"class":89},"\"p1的年龄为:\"",[79,23200,3414],{"class":243},[79,23202,23203],{"class":239},"p1.m_Age",[79,23205,3414],{"class":243},[79,23207,23208],{"class":89},"\"身高为：\"",[79,23210,8614],{"class":243},[79,23212,23213],{"class":239},"p1.m_Height",[79,23215,3414],{"class":243},[79,23217,3479],{"class":239},[79,23219,23220],{"class":2440},"  \u002F\u002F18\n",[79,23222,23223,23225,23227],{"class":81,"line":828},[79,23224,21570],{"class":239},[79,23226,9227],{"class":85},[79,23228,19654],{"class":239},[79,23230,23231,23233,23235,23238,23240,23242,23244,23246,23248,23251,23253,23255],{"class":81,"line":842},[79,23232,3787],{"class":239},[79,23234,3414],{"class":243},[79,23236,23237],{"class":89},"\"p2的年龄为：\"",[79,23239,3414],{"class":243},[79,23241,21600],{"class":239},[79,23243,3414],{"class":243},[79,23245,23208],{"class":89},[79,23247,8614],{"class":243},[79,23249,23250],{"class":239},"p2.m_Height",[79,23252,3414],{"class":243},[79,23254,3479],{"class":239},[79,23256,23220],{"class":2440},[79,23258,23259],{"class":81,"line":859},[79,23260,15373],{"class":239},[79,23262,23263],{"class":81,"line":878},[79,23264,3801],{"class":239},[79,23266,23267,23269,23271],{"class":81,"line":883},[79,23268,2390],{"class":243},[79,23270,893],{"class":85},[79,23272,4191],{"class":239},[79,23274,23275],{"class":81,"line":888},[79,23276,3782],{"class":239},[79,23278,23279,23281],{"class":81,"line":904},[79,23280,7829],{"class":85},[79,23282,7832],{"class":239},[79,23284,23285],{"class":81,"line":919},[79,23286,3801],{"class":239},[19,23288,23289],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,23291,23292],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,23294,23295],{},[3699,23296],{"alt":57,"src":23297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,23299,23300],{},"浅拷贝问题要使用深拷贝来解决",[19,23302,23303],{},[3699,23304],{"alt":57,"src":23305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,23307,23308],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[265,23310,23312],{"id":23311},"_826初始化列表","8.2.6初始化列表",[19,23314,23315],{},"作用：初始化属性",[19,23317,7379],{},[51,23319,23322],{"className":23320,"code":23321,"language":56},[54],"构造函数():属性1(值1),属性2(值2).....{}\n",[59,23323,23321],{"__ignoreMap":57},[19,23325,23326],{},"例子",[51,23328,23330],{"className":2376,"code":23329,"language":2378,"meta":57,"style":57},"#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",[59,23331,23332,23338,23348,23354,23358,23363,23367,23372,23377,23382,23387,23392,23397,23401,23406,23411,23454,23463,23481,23499,23517,23521,23525,23532,23539,23546,23550,23554,23562,23566,23570,23590,23599,23603,23607,23617,23621,23629],{"__ignoreMap":57},[79,23333,23334,23336],{"class":81,"line":82},[79,23335,4166],{"class":243},[79,23337,4169],{"class":89},[79,23339,23340,23342,23344,23346],{"class":81,"line":167},[79,23341,4174],{"class":243},[79,23343,4177],{"class":243},[79,23345,4180],{"class":85},[79,23347,3531],{"class":239},[79,23349,23350,23352],{"class":81,"line":178},[79,23351,16855],{"class":243},[79,23353,17331],{"class":85},[79,23355,23356],{"class":81,"line":457},[79,23357,3782],{"class":239},[79,23359,23360],{"class":81,"line":462},[79,23361,23362],{"class":243},"    public:\n",[79,23364,23365],{"class":81,"line":474},[79,23366,454],{"emptyLinePlaceholder":453},[79,23368,23369],{"class":81,"line":480},[79,23370,23371],{"class":2440},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[79,23373,23374],{"class":81,"line":486},[79,23375,23376],{"class":2440},"    \u002F\u002FPerson(int a, int b, int c) {\n",[79,23378,23379],{"class":81,"line":491},[79,23380,23381],{"class":2440},"    \u002F\u002F  m_A = a;\n",[79,23383,23384],{"class":81,"line":497},[79,23385,23386],{"class":2440},"    \u002F\u002F  m_B = b;\n",[79,23388,23389],{"class":81,"line":503},[79,23390,23391],{"class":2440},"    \u002F\u002F  m_C = c;\n",[79,23393,23394],{"class":81,"line":509},[79,23395,23396],{"class":2440},"    \u002F\u002F}\n",[79,23398,23399],{"class":81,"line":514},[79,23400,454],{"emptyLinePlaceholder":453},[79,23402,23403],{"class":81,"line":520},[79,23404,23405],{"class":2440},"    \u002F\u002F初始化列表方式初始化\n",[79,23407,23408],{"class":81,"line":526},[79,23409,23410],{"class":2440},"    \u002F\u002F使用有参构造函数\n",[79,23412,23413,23415,23417,23419,23421,23423,23425,23427,23429,23431,23433,23436,23439,23442,23445,23448,23451],{"class":81,"line":532},[79,23414,20658],{"class":85},[79,23416,685],{"class":239},[79,23418,2390],{"class":243},[79,23420,3635],{"class":7412},[79,23422,1060],{"class":239},[79,23424,2390],{"class":243},[79,23426,5039],{"class":7412},[79,23428,1060],{"class":239},[79,23430,2390],{"class":243},[79,23432,5055],{"class":7412},[79,23434,23435],{"class":239},") :",[79,23437,23438],{"class":85},"m_A",[79,23440,23441],{"class":239},"(a), ",[79,23443,23444],{"class":85},"m_B",[79,23446,23447],{"class":239},"(b), ",[79,23449,23450],{"class":85},"m_C",[79,23452,23453],{"class":239},"(c) {}\n",[79,23455,23456,23458,23461],{"class":81,"line":537},[79,23457,17070],{"class":243},[79,23459,23460],{"class":85}," PrintPerson",[79,23462,13017],{"class":239},[79,23464,23465,23467,23469,23472,23474,23477,23479],{"class":81,"line":543},[79,23466,11852],{"class":239},[79,23468,3414],{"class":243},[79,23470,23471],{"class":89}," \"mA:\"",[79,23473,3681],{"class":243},[79,23475,23476],{"class":239}," m_A ",[79,23478,3414],{"class":243},[79,23480,11024],{"class":239},[79,23482,23483,23485,23487,23490,23492,23495,23497],{"class":81,"line":549},[79,23484,11852],{"class":239},[79,23486,3414],{"class":243},[79,23488,23489],{"class":89}," \"mB:\"",[79,23491,3681],{"class":243},[79,23493,23494],{"class":239}," m_B ",[79,23496,3414],{"class":243},[79,23498,11024],{"class":239},[79,23500,23501,23503,23505,23508,23510,23513,23515],{"class":81,"line":555},[79,23502,11852],{"class":239},[79,23504,3414],{"class":243},[79,23506,23507],{"class":89}," \"mC:\"",[79,23509,3681],{"class":243},[79,23511,23512],{"class":239}," m_C ",[79,23514,3414],{"class":243},[79,23516,11024],{"class":239},[79,23518,23519],{"class":81,"line":561},[79,23520,4402],{"class":239},[79,23522,23523],{"class":81,"line":567},[79,23524,17382],{"class":243},[79,23526,23527,23529],{"class":81,"line":573},[79,23528,4200],{"class":243},[79,23530,23531],{"class":239}," m_A;\n",[79,23533,23534,23536],{"class":81,"line":579},[79,23535,4200],{"class":243},[79,23537,23538],{"class":239}," m_B;\n",[79,23540,23541,23543],{"class":81,"line":584},[79,23542,4200],{"class":243},[79,23544,23545],{"class":239}," m_C;\n",[79,23547,23548],{"class":81,"line":590},[79,23549,6197],{"class":239},[79,23551,23552],{"class":81,"line":596},[79,23553,454],{"emptyLinePlaceholder":453},[79,23555,23556,23558,23560],{"class":81,"line":602},[79,23557,2390],{"class":243},[79,23559,893],{"class":85},[79,23561,8173],{"class":239},[79,23563,23564],{"class":81,"line":608},[79,23565,3782],{"class":239},[79,23567,23568],{"class":81,"line":614},[79,23569,454],{"emptyLinePlaceholder":453},[79,23571,23572,23574,23576,23578,23580,23582,23584,23586,23588],{"class":81,"line":620},[79,23573,21570],{"class":239},[79,23575,19],{"class":85},[79,23577,685],{"class":239},[79,23579,1072],{"class":96},[79,23581,1060],{"class":239},[79,23583,1049],{"class":96},[79,23585,1060],{"class":239},[79,23587,1188],{"class":96},[79,23589,4925],{"class":239},[79,23591,23592,23594,23597],{"class":81,"line":625},[79,23593,18026],{"class":239},[79,23595,23596],{"class":85},"PrintPerson",[79,23598,7832],{"class":239},[79,23600,23601],{"class":81,"line":630},[79,23602,454],{"emptyLinePlaceholder":453},[79,23604,23605],{"class":81,"line":648},[79,23606,454],{"emptyLinePlaceholder":453},[79,23608,23609,23611,23613,23615],{"class":81,"line":659},[79,23610,4518],{"class":85},[79,23612,685],{"class":239},[79,23614,4523],{"class":89},[79,23616,4925],{"class":239},[79,23618,23619],{"class":81,"line":676},[79,23620,454],{"emptyLinePlaceholder":453},[79,23622,23623,23625,23627],{"class":81,"line":708},[79,23624,711],{"class":243},[79,23626,670],{"class":96},[79,23628,3531],{"class":239},[79,23630,23631],{"class":81,"line":717},[79,23632,3801],{"class":239},[19,23634,23635,23636,23639,23640],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[2528,23637,23638],{},"参数名就是定义的对象属性","，",[2528,23641,23642],{},"属性后面的值为有参构造函数的形参",[51,23644,23646],{"className":2376,"code":23645,"language":2378,"meta":57,"style":57},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[59,23647,23648],{"__ignoreMap":57},[79,23649,23650,23652,23654,23656,23659,23661,23664,23666,23669,23671,23674,23676,23679,23681],{"class":81,"line":82},[79,23651,21185],{"class":85},[79,23653,685],{"class":239},[79,23655,2390],{"class":243},[79,23657,23658],{"class":239}," a.",[79,23660,2390],{"class":243},[79,23662,23663],{"class":239}," b,",[79,23665,2390],{"class":243},[79,23667,23668],{"class":239}," b):",[79,23670,23438],{"class":85},[79,23672,23673],{"class":239},"(a),",[79,23675,23444],{"class":85},[79,23677,23678],{"class":239},"(c),",[79,23680,23450],{"class":85},[79,23682,23683],{"class":239},"(b) {}\n",[265,23685,23687],{"id":23686},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23689,23690],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23692,1789],{},[51,23694,23696],{"className":2376,"code":23695,"language":2378,"meta":57,"style":57},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[59,23697,23698,23703,23708,23712,23717,23721],{"__ignoreMap":57},[79,23699,23700],{"class":81,"line":82},[79,23701,23702],{"class":239},"A{};\n",[79,23704,23705],{"class":81,"line":167},[79,23706,23707],{"class":239},"B\n",[79,23709,23710],{"class":81,"line":178},[79,23711,3782],{"class":239},[79,23713,23714],{"class":81,"line":457},[79,23715,23716],{"class":239},"    A a;\n",[79,23718,23719],{"class":81,"line":462},[79,23720,3801],{"class":239},[79,23722,23723],{"class":81,"line":474},[79,23724,23725],{"class":2440},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23727,23728],{},"案例",[51,23730,23732],{"className":2376,"code":23731,"language":2378,"meta":57,"style":57},"\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",[59,23733,23734,23739,23746,23750,23755,23760,23774,23778,23788,23799,23803,23810,23814,23827,23831,23836,23841,23845,23851,23855,23859,23863,23894,23898,23909,23913,23919,23923,23936,23940,23944,23948,23953,23958,23962,23970,23974,23991,24010,24014,24022,24026,24032],{"__ignoreMap":57},[79,23735,23736],{"class":81,"line":82},[79,23737,23738],{"class":2440},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[79,23740,23741,23743],{"class":81,"line":167},[79,23742,16855],{"class":243},[79,23744,23745],{"class":85}," Phone\n",[79,23747,23748],{"class":81,"line":178},[79,23749,3782],{"class":239},[79,23751,23752],{"class":81,"line":457},[79,23753,23754],{"class":239},"public：\n",[79,23756,23757],{"class":81,"line":462},[79,23758,23759],{"class":2440},"    \u002F\u002F 赋值(构造函数)\n",[79,23761,23762,23765,23767,23769,23772],{"class":81,"line":474},[79,23763,23764],{"class":85},"    Phone",[79,23766,685],{"class":239},[79,23768,17078],{"class":85},[79,23770,23771],{"class":7412}," pName",[79,23773,253],{"class":239},[79,23775,23776],{"class":81,"line":480},[79,23777,4245],{"class":239},[79,23779,23780,23783,23785],{"class":81,"line":486},[79,23781,23782],{"class":239},"        m_pName",[79,23784,244],{"class":243},[79,23786,23787],{"class":239},"pName;\n",[79,23789,23790,23792,23794,23797],{"class":81,"line":491},[79,23791,5654],{"class":239},[79,23793,3414],{"class":243},[79,23795,23796],{"class":89},"\"Phone的构造函数调用\"",[79,23798,3531],{"class":239},[79,23800,23801],{"class":81,"line":497},[79,23802,4402],{"class":239},[79,23804,23805,23808],{"class":81,"line":503},[79,23806,23807],{"class":85},"    ~Phone",[79,23809,4191],{"class":239},[79,23811,23812],{"class":81,"line":509},[79,23813,4245],{"class":239},[79,23815,23816,23818,23820,23823,23825],{"class":81,"line":514},[79,23817,5654],{"class":239},[79,23819,3414],{"class":243},[79,23821,23822],{"class":89},"\"Phone析构函数调用\"",[79,23824,3414],{"class":243},[79,23826,3436],{"class":239},[79,23828,23829],{"class":81,"line":520},[79,23830,4402],{"class":239},[79,23832,23833],{"class":81,"line":526},[79,23834,23835],{"class":2440},"    \u002F\u002F\n",[79,23837,23838],{"class":81,"line":532},[79,23839,23840],{"class":239},"    string m_PName;\n",[79,23842,23843],{"class":81,"line":537},[79,23844,6197],{"class":239},[79,23846,23847,23849],{"class":81,"line":543},[79,23848,16855],{"class":243},[79,23850,17331],{"class":85},[79,23852,23853],{"class":81,"line":549},[79,23854,3782],{"class":239},[79,23856,23857],{"class":81,"line":555},[79,23858,16877],{"class":243},[79,23860,23861],{"class":81,"line":561},[79,23862,19134],{"class":2440},[79,23864,23865,23867,23869,23871,23873,23875,23877,23880,23883,23885,23888,23891],{"class":81,"line":567},[79,23866,20658],{"class":85},[79,23868,685],{"class":239},[79,23870,17078],{"class":85},[79,23872,2238],{"class":7412},[79,23874,2752],{"class":239},[79,23876,17078],{"class":85},[79,23878,23879],{"class":7412}," pname",[79,23881,23882],{"class":239},"):",[79,23884,17170],{"class":85},[79,23886,23887],{"class":239},"(name),m_phone.",[79,23889,23890],{"class":85},"m_PName",[79,23892,23893],{"class":239},"(pname) \n",[79,23895,23896],{"class":81,"line":573},[79,23897,4245],{"class":239},[79,23899,23900,23902,23904,23907],{"class":81,"line":579},[79,23901,5654],{"class":239},[79,23903,3414],{"class":243},[79,23905,23906],{"class":89},"\"Person的构造函数调用\"",[79,23908,3531],{"class":239},[79,23910,23911],{"class":81,"line":584},[79,23912,4402],{"class":239},[79,23914,23915,23917],{"class":81,"line":590},[79,23916,20691],{"class":85},[79,23918,4191],{"class":239},[79,23920,23921],{"class":81,"line":596},[79,23922,4245],{"class":239},[79,23924,23925,23927,23929,23932,23934],{"class":81,"line":602},[79,23926,5654],{"class":239},[79,23928,3414],{"class":243},[79,23930,23931],{"class":89},"\"Person析构函数调用\"",[79,23933,3414],{"class":243},[79,23935,3436],{"class":239},[79,23937,23938],{"class":81,"line":608},[79,23939,4402],{"class":239},[79,23941,23942],{"class":81,"line":614},[79,23943,9974],{"class":2440},[79,23945,23946],{"class":81,"line":620},[79,23947,17053],{"class":239},[79,23949,23950],{"class":81,"line":625},[79,23951,23952],{"class":2440},"    \u002F\u002F手机\n",[79,23954,23955],{"class":81,"line":630},[79,23956,23957],{"class":239},"    Phone m_Phone;\n",[79,23959,23960],{"class":81,"line":648},[79,23961,6197],{"class":239},[79,23963,23964,23966,23968],{"class":81,"line":659},[79,23965,7560],{"class":243},[79,23967,7784],{"class":85},[79,23969,4191],{"class":239},[79,23971,23972],{"class":81,"line":676},[79,23973,3782],{"class":239},[79,23975,23976,23978,23980,23982,23984,23986,23989],{"class":81,"line":708},[79,23977,21570],{"class":239},[79,23979,19],{"class":85},[79,23981,685],{"class":239},[79,23983,10110],{"class":89},[79,23985,2752],{"class":239},[79,23987,23988],{"class":89},"\"安卓\"",[79,23990,4925],{"class":239},[79,23992,23993,23995,23997,24000,24002,24005,24007],{"class":81,"line":717},[79,23994,3787],{"class":239},[79,23996,3414],{"class":243},[79,23998,23999],{"class":239},"p.Name",[79,24001,3414],{"class":243},[79,24003,24004],{"class":89},"\"拿着：\"",[79,24006,3414],{"class":243},[79,24008,24009],{"class":239},"p.m_phone.m_PName;\n",[79,24011,24012],{"class":81,"line":722},[79,24013,3801],{"class":239},[79,24015,24016,24018,24020],{"class":81,"line":727},[79,24017,2390],{"class":243},[79,24019,893],{"class":85},[79,24021,4191],{"class":239},[79,24023,24024],{"class":81,"line":738},[79,24025,3782],{"class":239},[79,24027,24028,24030],{"class":81,"line":753},[79,24029,7829],{"class":85},[79,24031,7832],{"class":239},[79,24033,24034],{"class":81,"line":768},[79,24035,3801],{"class":239},[19,24037,11209],{},[51,24039,24041],{"className":2376,"code":24040,"language":2378,"meta":57,"style":57},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[59,24042,24043,24048],{"__ignoreMap":57},[79,24044,24045],{"class":81,"line":82},[79,24046,24047],{"class":2440},"    \u002F\u002F不需要写这个：\n",[79,24049,24050],{"class":81,"line":167},[79,24051,24052],{"class":2440},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,24054,24055],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[51,24057,24059],{"className":2376,"code":24058,"language":2378,"meta":57,"style":57},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[59,24060,24061],{"__ignoreMap":57},[79,24062,24063,24065,24068,24070,24073,24076],{"class":81,"line":82},[79,24064,21185],{"class":85},[79,24066,24067],{"class":239},"(string name.string pname):",[79,24069,17170],{"class":85},[79,24071,24072],{"class":239},"(name),",[79,24074,24075],{"class":85},"m_phone",[79,24077,24078],{"class":239},"(pname) {}\n",[19,24080,24081,24082,244,24085],{},"采用的是隐式转换法，实际为如下：\n",[59,24083,24084],{},"m_phone(pname)",[59,24086,24087],{},"Phone m_phone=pname",[19,24089,24090,24093],{},[2528,24091,24092],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,24095,24096],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[265,24098,24100],{"id":24099},"_828静态对象","8.2.8静态对象",[19,24102,24103],{},"静态对象在成员对象前static，称为静态对象",[19,24105,24106],{},"静态对象分为两类：",[26,24108,24109],{},[29,24110,24111],{},"静态成员变量",[3377,24113,24114,24117,24120],{},[29,24115,24116],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[29,24118,24119],{},"②在编译阶段分配内存",[29,24121,24122],{},"③类内声明，类外初始化",[26,24124,24125],{"start":167},[29,24126,24127],{},"静态成员函数",[3377,24129,24130,24133],{},[29,24131,24132],{},"①所有对象共享同一个函数",[29,24134,24135],{},"②静态成员函数只能访问静态成员变量",[24137,24138,24140],"h4",{"id":24139},"_8281静态成员变量","8.2.8.1静态成员变量",[51,24142,24144],{"className":2376,"code":24143,"language":2378,"meta":57,"style":57},"#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",[59,24145,24146,24152,24162,24168,24172,24176,24181,24186,24191,24199,24203,24207,24211,24219,24223,24227,24232,24245,24249,24257,24261,24267],{"__ignoreMap":57},[79,24147,24148,24150],{"class":81,"line":82},[79,24149,4166],{"class":243},[79,24151,4169],{"class":89},[79,24153,24154,24156,24158,24160],{"class":81,"line":167},[79,24155,4174],{"class":243},[79,24157,4177],{"class":243},[79,24159,4180],{"class":85},[79,24161,3531],{"class":239},[79,24163,24164,24166],{"class":81,"line":178},[79,24165,16855],{"class":243},[79,24167,17331],{"class":85},[79,24169,24170],{"class":81,"line":457},[79,24171,3782],{"class":239},[79,24173,24174],{"class":81,"line":462},[79,24175,16877],{"class":243},[79,24177,24178],{"class":81,"line":474},[79,24179,24180],{"class":2440},"    \u002F\u002F非静态成员变量\n",[79,24182,24183],{"class":81,"line":480},[79,24184,24185],{"class":2440},"    \u002F\u002F int m_A;\n",[79,24187,24188],{"class":81,"line":486},[79,24189,24190],{"class":2440},"    \u002F\u002F定义静态成员变量\n",[79,24192,24193,24195,24197],{"class":81,"line":491},[79,24194,13184],{"class":243},[79,24196,4597],{"class":243},[79,24198,23531],{"class":239},[79,24200,24201],{"class":81,"line":497},[79,24202,454],{"emptyLinePlaceholder":453},[79,24204,24205],{"class":81,"line":503},[79,24206,454],{"emptyLinePlaceholder":453},[79,24208,24209],{"class":81,"line":509},[79,24210,6197],{"class":239},[79,24212,24213,24215,24217],{"class":81,"line":514},[79,24214,7560],{"class":243},[79,24216,7784],{"class":85},[79,24218,4191],{"class":239},[79,24220,24221],{"class":81,"line":520},[79,24222,3782],{"class":239},[79,24224,24225],{"class":81,"line":526},[79,24226,17473],{"class":239},[79,24228,24229],{"class":81,"line":532},[79,24230,24231],{"class":2440},"    \u002F\u002F输出类成员变量这块内存\n",[79,24233,24234,24236,24238,24241,24243],{"class":81,"line":537},[79,24235,3787],{"class":239},[79,24237,3414],{"class":243},[79,24239,24240],{"class":239},"p.m_A",[79,24242,3414],{"class":243},[79,24244,3436],{"class":239},[79,24246,24247],{"class":81,"line":543},[79,24248,3801],{"class":239},[79,24250,24251,24253,24255],{"class":81,"line":549},[79,24252,2390],{"class":243},[79,24254,893],{"class":85},[79,24256,4191],{"class":239},[79,24258,24259],{"class":81,"line":555},[79,24260,3782],{"class":239},[79,24262,24263,24265],{"class":81,"line":561},[79,24264,7829],{"class":85},[79,24266,4191],{"class":239},[79,24268,24269],{"class":81,"line":567},[79,24270,3801],{"class":239},[19,24272,24273],{},"此时输出是报错的：无法解析外部命令",[19,24275,24276],{},"解决这一问题：必须用到类内声明，类外初始化操作",[51,24278,24280],{"className":2376,"code":24279,"language":2378,"meta":57,"style":57},"#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",[59,24281,24282,24288,24298,24304,24308,24312,24317,24325,24329,24334,24349,24357,24361,24365,24370,24375,24387,24392,24403,24408,24413,24426,24430,24438,24442,24448],{"__ignoreMap":57},[79,24283,24284,24286],{"class":81,"line":82},[79,24285,4166],{"class":243},[79,24287,4169],{"class":89},[79,24289,24290,24292,24294,24296],{"class":81,"line":167},[79,24291,4174],{"class":243},[79,24293,4177],{"class":243},[79,24295,4180],{"class":85},[79,24297,3531],{"class":239},[79,24299,24300,24302],{"class":81,"line":178},[79,24301,16855],{"class":243},[79,24303,17331],{"class":85},[79,24305,24306],{"class":81,"line":457},[79,24307,3782],{"class":239},[79,24309,24310],{"class":81,"line":462},[79,24311,16877],{"class":243},[79,24313,24314],{"class":81,"line":474},[79,24315,24316],{"class":2440},"    \u002F\u002F类内声明\n",[79,24318,24319,24321,24323],{"class":81,"line":480},[79,24320,13184],{"class":243},[79,24322,4597],{"class":243},[79,24324,23531],{"class":239},[79,24326,24327],{"class":81,"line":486},[79,24328,6197],{"class":239},[79,24330,24331],{"class":81,"line":491},[79,24332,24333],{"class":2440},"\u002F\u002F类外初始化\n",[79,24335,24336,24338,24340,24343,24345,24347],{"class":81,"line":497},[79,24337,2390],{"class":243},[79,24339,17729],{"class":85},[79,24341,24342],{"class":239},"::m_A",[79,24344,244],{"class":243},[79,24346,2820],{"class":96},[79,24348,3531],{"class":239},[79,24350,24351,24353,24355],{"class":81,"line":503},[79,24352,7560],{"class":243},[79,24354,7784],{"class":85},[79,24356,4191],{"class":239},[79,24358,24359],{"class":81,"line":509},[79,24360,3782],{"class":239},[79,24362,24363],{"class":81,"line":514},[79,24364,17473],{"class":239},[79,24366,24367],{"class":81,"line":520},[79,24368,24369],{"class":2440},"    \u002F\u002F访问变量的原内存空间\n",[79,24371,24372],{"class":81,"line":526},[79,24373,24374],{"class":2440},"    \u002F\u002F100\n",[79,24376,24377,24379,24381,24383,24385],{"class":81,"line":532},[79,24378,3787],{"class":239},[79,24380,3414],{"class":243},[79,24382,24240],{"class":239},[79,24384,3414],{"class":243},[79,24386,3436],{"class":239},[79,24388,24389],{"class":81,"line":537},[79,24390,24391],{"class":239},"    Person p2;\n",[79,24393,24394,24397,24399,24401],{"class":81,"line":543},[79,24395,24396],{"class":239},"    p2.m_A",[79,24398,244],{"class":243},[79,24400,3947],{"class":96},[79,24402,3531],{"class":239},[79,24404,24405],{"class":81,"line":549},[79,24406,24407],{"class":2440},"    \u002F\u002F继续访问这片空间\n",[79,24409,24410],{"class":81,"line":555},[79,24411,24412],{"class":2440},"    \u002F\u002F200\n",[79,24414,24415,24417,24419,24422,24424],{"class":81,"line":561},[79,24416,3787],{"class":239},[79,24418,3414],{"class":243},[79,24420,24421],{"class":239},"p2.m_A",[79,24423,3414],{"class":243},[79,24425,3436],{"class":239},[79,24427,24428],{"class":81,"line":567},[79,24429,3801],{"class":239},[79,24431,24432,24434,24436],{"class":81,"line":573},[79,24433,2390],{"class":243},[79,24435,893],{"class":85},[79,24437,4191],{"class":239},[79,24439,24440],{"class":81,"line":579},[79,24441,3782],{"class":239},[79,24443,24444,24446],{"class":81,"line":584},[79,24445,7829],{"class":85},[79,24447,7832],{"class":239},[79,24449,24450],{"class":81,"line":590},[79,24451,3801],{"class":239},[19,24453,24454],{},[2528,24455,24456],{},"静态变量的访问",[51,24458,24460],{"className":2376,"code":24459,"language":2378,"meta":57,"style":57},"#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",[59,24461,24462,24468,24478,24484,24488,24492,24496,24504,24508,24513,24521,24525,24529,24543,24558,24566,24570,24575,24580,24585,24590,24602,24607,24612,24626,24643,24647,24655,24659,24665],{"__ignoreMap":57},[79,24463,24464,24466],{"class":81,"line":82},[79,24465,4166],{"class":243},[79,24467,4169],{"class":89},[79,24469,24470,24472,24474,24476],{"class":81,"line":167},[79,24471,4174],{"class":243},[79,24473,4177],{"class":243},[79,24475,4180],{"class":85},[79,24477,3531],{"class":239},[79,24479,24480,24482],{"class":81,"line":178},[79,24481,16855],{"class":243},[79,24483,17331],{"class":85},[79,24485,24486],{"class":81,"line":457},[79,24487,3782],{"class":239},[79,24489,24490],{"class":81,"line":462},[79,24491,16877],{"class":243},[79,24493,24494],{"class":81,"line":474},[79,24495,24316],{"class":2440},[79,24497,24498,24500,24502],{"class":81,"line":480},[79,24499,13184],{"class":243},[79,24501,4597],{"class":243},[79,24503,23531],{"class":239},[79,24505,24506],{"class":81,"line":486},[79,24507,17382],{"class":243},[79,24509,24510],{"class":81,"line":491},[79,24511,24512],{"class":2440},"    \u002F\u002F静态成员变量也是有访问权限的\n",[79,24514,24515,24517,24519],{"class":81,"line":497},[79,24516,13184],{"class":243},[79,24518,4597],{"class":243},[79,24520,23538],{"class":239},[79,24522,24523],{"class":81,"line":503},[79,24524,6197],{"class":239},[79,24526,24527],{"class":81,"line":509},[79,24528,24333],{"class":2440},[79,24530,24531,24533,24535,24537,24539,24541],{"class":81,"line":514},[79,24532,2390],{"class":243},[79,24534,17729],{"class":85},[79,24536,24342],{"class":239},[79,24538,244],{"class":243},[79,24540,2820],{"class":96},[79,24542,3531],{"class":239},[79,24544,24545,24547,24549,24552,24554,24556],{"class":81,"line":520},[79,24546,2390],{"class":243},[79,24548,17729],{"class":85},[79,24550,24551],{"class":239},"::m_B",[79,24553,244],{"class":243},[79,24555,3073],{"class":96},[79,24557,3531],{"class":239},[79,24559,24560,24562,24564],{"class":81,"line":526},[79,24561,7560],{"class":243},[79,24563,7853],{"class":85},[79,24565,4191],{"class":239},[79,24567,24568],{"class":81,"line":532},[79,24569,3782],{"class":239},[79,24571,24572],{"class":81,"line":537},[79,24573,24574],{"class":2440},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[79,24576,24577],{"class":81,"line":543},[79,24578,24579],{"class":2440},"    \u002F\u002F静态成员变量有两种访问方式：\n",[79,24581,24582],{"class":81,"line":549},[79,24583,24584],{"class":2440},"    \u002F\u002F1.通过对象进行访问\n",[79,24586,24587],{"class":81,"line":555},[79,24588,24589],{"class":239},"    Person p;  \n",[79,24591,24592,24594,24596,24598,24600],{"class":81,"line":561},[79,24593,3787],{"class":239},[79,24595,3414],{"class":243},[79,24597,24240],{"class":239},[79,24599,3414],{"class":243},[79,24601,3436],{"class":239},[79,24603,24604],{"class":81,"line":567},[79,24605,24606],{"class":2440},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[79,24608,24609],{"class":81,"line":573},[79,24610,24611],{"class":2440},"    \u002F\u002F2.通过类名进行访问\n",[79,24613,24614,24616,24618,24620,24622,24624],{"class":81,"line":579},[79,24615,3787],{"class":239},[79,24617,3414],{"class":243},[79,24619,21185],{"class":85},[79,24621,24342],{"class":239},[79,24623,3414],{"class":243},[79,24625,3436],{"class":239},[79,24627,24628,24630,24632,24634,24636,24638,24640],{"class":81,"line":584},[79,24629,3787],{"class":239},[79,24631,3414],{"class":243},[79,24633,21185],{"class":85},[79,24635,24551],{"class":239},[79,24637,3414],{"class":243},[79,24639,3479],{"class":239},[79,24641,24642],{"class":2440}," \u002F\u002F没有访问权限，报错\n",[79,24644,24645],{"class":81,"line":590},[79,24646,3801],{"class":239},[79,24648,24649,24651,24653],{"class":81,"line":596},[79,24650,2390],{"class":243},[79,24652,893],{"class":85},[79,24654,4191],{"class":239},[79,24656,24657],{"class":81,"line":602},[79,24658,3782],{"class":239},[79,24660,24661,24663],{"class":81,"line":608},[79,24662,7898],{"class":85},[79,24664,7832],{"class":239},[79,24666,24667],{"class":81,"line":614},[79,24668,3801],{"class":239},[24137,24670,24672],{"id":24671},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24674,24675],{},"1.静态成员函数定义与访问",[51,24677,24679],{"className":2376,"code":24678,"language":2378,"meta":57,"style":57},"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",[59,24680,24681,24687,24691,24695,24700,24711,24715,24729,24733,24737,24745,24749,24754,24759,24763,24771,24776,24786],{"__ignoreMap":57},[79,24682,24683,24685],{"class":81,"line":82},[79,24684,16855],{"class":243},[79,24686,17331],{"class":85},[79,24688,24689],{"class":81,"line":167},[79,24690,3782],{"class":239},[79,24692,24693],{"class":81,"line":178},[79,24694,16877],{"class":243},[79,24696,24697],{"class":81,"line":457},[79,24698,24699],{"class":2440},"    \u002F\u002F在公共权限下定义静态成员函数\n",[79,24701,24702,24704,24707,24709],{"class":81,"line":462},[79,24703,13184],{"class":243},[79,24705,24706],{"class":243}," void",[79,24708,13549],{"class":85},[79,24710,4191],{"class":239},[79,24712,24713],{"class":81,"line":474},[79,24714,4245],{"class":239},[79,24716,24717,24720,24722,24725,24727],{"class":81,"line":480},[79,24718,24719],{"class":239},"        coout",[79,24721,3414],{"class":243},[79,24723,24724],{"class":89},"\"静态成员函数的调用\"",[79,24726,3414],{"class":243},[79,24728,3436],{"class":239},[79,24730,24731],{"class":81,"line":486},[79,24732,4402],{"class":239},[79,24734,24735],{"class":81,"line":491},[79,24736,6197],{"class":239},[79,24738,24739,24741,24743],{"class":81,"line":497},[79,24740,7560],{"class":243},[79,24742,7784],{"class":85},[79,24744,4191],{"class":239},[79,24746,24747],{"class":81,"line":503},[79,24748,3782],{"class":239},[79,24750,24751],{"class":81,"line":509},[79,24752,24753],{"class":2440},"    \u002F\u002F静态成员函数的调用方式:\n",[79,24755,24756],{"class":81,"line":514},[79,24757,24758],{"class":2440},"    \u002F\u002F1.通过对象访问\n",[79,24760,24761],{"class":81,"line":520},[79,24762,17473],{"class":239},[79,24764,24765,24767,24769],{"class":81,"line":526},[79,24766,18026],{"class":239},[79,24768,13715],{"class":85},[79,24770,7832],{"class":239},[79,24772,24773],{"class":81,"line":532},[79,24774,24775],{"class":2440},"    \u002F\u002F2.通过类名访问\n",[79,24777,24778,24780,24782,24784],{"class":81,"line":537},[79,24779,20658],{"class":85},[79,24781,19871],{"class":239},[79,24783,13715],{"class":85},[79,24785,7832],{"class":239},[79,24787,24788],{"class":81,"line":543},[79,24789,3801],{"class":239},[26,24791,24792],{"start":167},[29,24793,24794],{},"静态成员函数只能访问静态成员变量",[51,24796,24798],{"className":2376,"code":24797,"language":2378,"meta":57,"style":57},"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",[59,24799,24800,24806,24810,24814,24818,24828,24832,24846,24851,24863,24867,24878,24888,24892,24896,24900,24910,24914,24927,24931,24935,24939,24943,24957,24965,24969,24973,24977,24981,24989,24993,25003,25008,25012,25020,25024,25030],{"__ignoreMap":57},[79,24801,24802,24804],{"class":81,"line":82},[79,24803,16855],{"class":243},[79,24805,17331],{"class":85},[79,24807,24808],{"class":81,"line":167},[79,24809,3782],{"class":239},[79,24811,24812],{"class":81,"line":178},[79,24813,16877],{"class":243},[79,24815,24816],{"class":81,"line":457},[79,24817,24699],{"class":2440},[79,24819,24820,24822,24824,24826],{"class":81,"line":462},[79,24821,13184],{"class":243},[79,24823,24706],{"class":243},[79,24825,13549],{"class":85},[79,24827,4191],{"class":239},[79,24829,24830],{"class":81,"line":474},[79,24831,4245],{"class":239},[79,24833,24834,24837,24839,24841,24843],{"class":81,"line":480},[79,24835,24836],{"class":239},"        m_A",[79,24838,244],{"class":243},[79,24840,2686],{"class":96},[79,24842,2437],{"class":239},[79,24844,24845],{"class":2440}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[79,24847,24848],{"class":81,"line":486},[79,24849,24850],{"class":2440},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[79,24852,24853,24855,24857,24859,24861],{"class":81,"line":491},[79,24854,24719],{"class":239},[79,24856,3414],{"class":243},[79,24858,24724],{"class":89},[79,24860,3414],{"class":243},[79,24862,3436],{"class":239},[79,24864,24865],{"class":81,"line":497},[79,24866,4402],{"class":239},[79,24868,24869,24871,24873,24875],{"class":81,"line":503},[79,24870,13184],{"class":243},[79,24872,4597],{"class":243},[79,24874,17608],{"class":239},[79,24876,24877],{"class":2440}," \u002F\u002F静态成员变量\n",[79,24879,24880,24882,24885],{"class":81,"line":509},[79,24881,4200],{"class":243},[79,24883,24884],{"class":239}," m_B;",[79,24886,24887],{"class":2440}," \u002F\u002F非静态成员变量\n",[79,24889,24890],{"class":81,"line":514},[79,24891,454],{"emptyLinePlaceholder":453},[79,24893,24894],{"class":81,"line":520},[79,24895,17382],{"class":243},[79,24897,24898],{"class":81,"line":526},[79,24899,24512],{"class":2440},[79,24901,24902,24904,24906,24908],{"class":81,"line":532},[79,24903,13184],{"class":243},[79,24905,24706],{"class":243},[79,24907,15780],{"class":85},[79,24909,4191],{"class":239},[79,24911,24912],{"class":81,"line":537},[79,24913,4245],{"class":239},[79,24915,24916,24918,24920,24923,24925],{"class":81,"line":543},[79,24917,5654],{"class":239},[79,24919,3414],{"class":243},[79,24921,24922],{"class":89},"\"这是私有权限下的静态函数调用\"",[79,24924,3414],{"class":243},[79,24926,3436],{"class":239},[79,24928,24929],{"class":81,"line":549},[79,24930,4402],{"class":239},[79,24932,24933],{"class":81,"line":555},[79,24934,454],{"emptyLinePlaceholder":453},[79,24936,24937],{"class":81,"line":561},[79,24938,454],{"emptyLinePlaceholder":453},[79,24940,24941],{"class":81,"line":567},[79,24942,6197],{"class":239},[79,24944,24945,24947,24949,24951,24953,24955],{"class":81,"line":573},[79,24946,2390],{"class":243},[79,24948,17729],{"class":85},[79,24950,24342],{"class":239},[79,24952,244],{"class":243},[79,24954,1030],{"class":96},[79,24956,3531],{"class":239},[79,24958,24959,24961,24963],{"class":81,"line":579},[79,24960,7560],{"class":243},[79,24962,7784],{"class":85},[79,24964,4191],{"class":239},[79,24966,24967],{"class":81,"line":584},[79,24968,3782],{"class":239},[79,24970,24971],{"class":81,"line":590},[79,24972,24753],{"class":2440},[79,24974,24975],{"class":81,"line":596},[79,24976,24758],{"class":2440},[79,24978,24979],{"class":81,"line":602},[79,24980,17473],{"class":239},[79,24982,24983,24985,24987],{"class":81,"line":608},[79,24984,18026],{"class":239},[79,24986,13715],{"class":85},[79,24988,7832],{"class":239},[79,24990,24991],{"class":81,"line":614},[79,24992,24775],{"class":2440},[79,24994,24995,24997,24999,25001],{"class":81,"line":620},[79,24996,20658],{"class":85},[79,24998,19871],{"class":239},[79,25000,13715],{"class":85},[79,25002,7832],{"class":239},[79,25004,25005],{"class":81,"line":625},[79,25006,25007],{"class":2440},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[79,25009,25010],{"class":81,"line":630},[79,25011,3801],{"class":239},[79,25013,25014,25016,25018],{"class":81,"line":648},[79,25015,2390],{"class":243},[79,25017,893],{"class":85},[79,25019,4191],{"class":239},[79,25021,25022],{"class":81,"line":659},[79,25023,3782],{"class":239},[79,25025,25026,25028],{"class":81,"line":676},[79,25027,7829],{"class":85},[79,25029,7832],{"class":239},[79,25031,25032],{"class":81,"line":708},[79,25033,3801],{"class":239},[265,25035,25037],{"id":25036},"_83c对象模型和this指针","8.3C++对象模型和this指针",[24137,25039,25041],{"id":25040},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,25043,25044],{},"在c++中，类内的成员变量和成员函数分开存储",[19,25046,25047],{},"只有非静态成员变量才属于类的对象上",[25049,25050,25052],"h5",{"id":25051},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[51,25054,25056],{"className":2376,"code":25055,"language":2378,"meta":57,"style":57},"#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",[59,25057,25058,25065,25075,25081,25085,25089,25093,25101,25105,25109,25132,25136,25144,25148,25154],{"__ignoreMap":57},[79,25059,25060,25062],{"class":81,"line":82},[79,25061,4166],{"class":243},[79,25063,25064],{"class":89},"\u003Ciostraem>\n",[79,25066,25067,25069,25071,25073],{"class":81,"line":167},[79,25068,4174],{"class":243},[79,25070,4177],{"class":243},[79,25072,4180],{"class":85},[79,25074,3531],{"class":239},[79,25076,25077,25079],{"class":81,"line":178},[79,25078,16855],{"class":243},[79,25080,17331],{"class":85},[79,25082,25083],{"class":81,"line":457},[79,25084,3782],{"class":239},[79,25086,25087],{"class":81,"line":462},[79,25088,454],{"emptyLinePlaceholder":453},[79,25090,25091],{"class":81,"line":474},[79,25092,6197],{"class":239},[79,25094,25095,25097,25099],{"class":81,"line":480},[79,25096,7560],{"class":243},[79,25098,7784],{"class":85},[79,25100,4191],{"class":239},[79,25102,25103],{"class":81,"line":486},[79,25104,3782],{"class":239},[79,25106,25107],{"class":81,"line":491},[79,25108,17473],{"class":239},[79,25110,25111,25113,25115,25118,25120,25123,25125,25127,25129],{"class":81,"line":497},[79,25112,3787],{"class":239},[79,25114,3414],{"class":243},[79,25116,25117],{"class":89},"\"size of p=\"",[79,25119,3414],{"class":243},[79,25121,25122],{"class":85},"sizeoif",[79,25124,8733],{"class":239},[79,25126,3414],{"class":243},[79,25128,3479],{"class":239},[79,25130,25131],{"class":2440}," \u002F\u002F查看这个空类的占用的内存空间\n",[79,25133,25134],{"class":81,"line":503},[79,25135,3801],{"class":239},[79,25137,25138,25140,25142],{"class":81,"line":509},[79,25139,2390],{"class":243},[79,25141,893],{"class":85},[79,25143,4191],{"class":239},[79,25145,25146],{"class":81,"line":514},[79,25147,3782],{"class":239},[79,25149,25150,25152],{"class":81,"line":520},[79,25151,7829],{"class":85},[79,25153,7832],{"class":239},[79,25155,25156],{"class":81,"line":526},[79,25157,3801],{"class":239},[19,25159,25160],{},"输出结果为：size of p=1",[19,25162,25163],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,25165,25166],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[25049,25168,25170],{"id":25169},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[51,25172,25174],{"className":2376,"code":25173,"language":2378,"meta":57,"style":57},"#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",[59,25175,25176,25182,25192,25200,25204,25213,25217,25225,25229,25233,25252,25256,25260,25268,25272,25278],{"__ignoreMap":57},[79,25177,25178,25180],{"class":81,"line":82},[79,25179,4166],{"class":243},[79,25181,4169],{"class":89},[79,25183,25184,25186,25188,25190],{"class":81,"line":167},[79,25185,4174],{"class":243},[79,25187,4177],{"class":243},[79,25189,4180],{"class":85},[79,25191,3531],{"class":239},[79,25193,25194,25196,25198],{"class":81,"line":178},[79,25195,16855],{"class":243},[79,25197,17729],{"class":85},[79,25199,4880],{"class":239},[79,25201,25202],{"class":81,"line":457},[79,25203,3782],{"class":239},[79,25205,25206,25208,25210],{"class":81,"line":462},[79,25207,4200],{"class":243},[79,25209,17608],{"class":239},[79,25211,25212],{"class":2440},"\u002F\u002F非静态成员变量\n",[79,25214,25215],{"class":81,"line":474},[79,25216,6197],{"class":239},[79,25218,25219,25221,25223],{"class":81,"line":480},[79,25220,7560],{"class":243},[79,25222,7784],{"class":85},[79,25224,4191],{"class":239},[79,25226,25227],{"class":81,"line":486},[79,25228,3782],{"class":239},[79,25230,25231],{"class":81,"line":491},[79,25232,17473],{"class":239},[79,25234,25235,25237,25239,25241,25243,25245,25247,25249],{"class":81,"line":497},[79,25236,3787],{"class":239},[79,25238,3414],{"class":243},[79,25240,25117],{"class":89},[79,25242,3609],{"class":243},[79,25244,8733],{"class":239},[79,25246,3414],{"class":243},[79,25248,3479],{"class":239},[79,25250,25251],{"class":2440}," \u002F\u002F查看不是空对象时占用多少内存\n",[79,25253,25254],{"class":81,"line":503},[79,25255,454],{"emptyLinePlaceholder":453},[79,25257,25258],{"class":81,"line":509},[79,25259,3801],{"class":239},[79,25261,25262,25264,25266],{"class":81,"line":514},[79,25263,2390],{"class":243},[79,25265,893],{"class":85},[79,25267,4191],{"class":239},[79,25269,25270],{"class":81,"line":520},[79,25271,3782],{"class":239},[79,25273,25274,25276],{"class":81,"line":526},[79,25275,7829],{"class":85},[79,25277,7832],{"class":239},[79,25279,25280],{"class":81,"line":532},[79,25281,3801],{"class":239},[19,25283,25284],{},"输出结果：size of p=4",[19,25286,25287],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[26,25289,25290],{},[29,25291,25292],{},"如果加上非静态成员变量，Person类修改如下",[51,25294,25296],{"className":2376,"code":25295,"language":2378,"meta":57,"style":57},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[59,25297,25298,25304,25308,25314,25322,25326,25331],{"__ignoreMap":57},[79,25299,25300,25302],{"class":81,"line":82},[79,25301,16855],{"class":243},[79,25303,17331],{"class":85},[79,25305,25306],{"class":81,"line":167},[79,25307,3782],{"class":239},[79,25309,25310,25312],{"class":81,"line":178},[79,25311,4200],{"class":243},[79,25313,23531],{"class":239},[79,25315,25316,25318,25320],{"class":81,"line":457},[79,25317,13184],{"class":243},[79,25319,4597],{"class":243},[79,25321,23538],{"class":239},[79,25323,25324],{"class":81,"line":462},[79,25325,6197],{"class":239},[79,25327,25328],{"class":81,"line":474},[79,25329,25330],{"class":2440},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[79,25332,25333,25335,25337,25339,25341,25343],{"class":81,"line":480},[79,25334,2390],{"class":243},[79,25336,17729],{"class":85},[79,25338,24551],{"class":239},[79,25340,244],{"class":243},[79,25342,1030],{"class":96},[79,25344,3531],{"class":239},[19,25346,25347],{},"输出结果：4",[19,25349,25350],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[26,25352,25353],{"start":167},[29,25354,25355],{},"加上非静态成员函数",[51,25357,25359],{"className":2376,"code":25358,"language":2378,"meta":57,"style":57},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[59,25360,25361,25368,25372,25378,25386,25390,25394,25398],{"__ignoreMap":57},[79,25362,25363,25365],{"class":81,"line":82},[79,25364,16855],{"class":243},[79,25366,25367],{"class":85},"  Person\n",[79,25369,25370],{"class":81,"line":167},[79,25371,3782],{"class":239},[79,25373,25374,25376],{"class":81,"line":178},[79,25375,4200],{"class":243},[79,25377,23531],{"class":239},[79,25379,25380,25382,25384],{"class":81,"line":457},[79,25381,17070],{"class":243},[79,25383,13549],{"class":85},[79,25385,4191],{"class":239},[79,25387,25388],{"class":81,"line":462},[79,25389,4245],{"class":239},[79,25391,25392],{"class":81,"line":474},[79,25393,454],{"emptyLinePlaceholder":453},[79,25395,25396],{"class":81,"line":480},[79,25397,4402],{"class":239},[79,25399,25400],{"class":81,"line":486},[79,25401,6197],{"class":239},[19,25403,25404],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[26,25406,25407],{"start":178},[29,25408,25409],{},"加上静态成员函数",[51,25411,25413],{"className":2376,"code":25412,"language":2378,"meta":57,"style":57},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[59,25414,25415,25421,25425,25431,25439,25443,25447,25451,25462,25466,25470,25474],{"__ignoreMap":57},[79,25416,25417,25419],{"class":81,"line":82},[79,25418,16855],{"class":243},[79,25420,25367],{"class":85},[79,25422,25423],{"class":81,"line":167},[79,25424,3782],{"class":239},[79,25426,25427,25429],{"class":81,"line":178},[79,25428,4200],{"class":243},[79,25430,23531],{"class":239},[79,25432,25433,25435,25437],{"class":81,"line":457},[79,25434,17070],{"class":243},[79,25436,13549],{"class":85},[79,25438,4191],{"class":239},[79,25440,25441],{"class":81,"line":462},[79,25442,4245],{"class":239},[79,25444,25445],{"class":81,"line":474},[79,25446,454],{"emptyLinePlaceholder":453},[79,25448,25449],{"class":81,"line":480},[79,25450,4402],{"class":239},[79,25452,25453,25455,25457,25460],{"class":81,"line":486},[79,25454,13184],{"class":243},[79,25456,24706],{"class":243},[79,25458,25459],{"class":85}," func1",[79,25461,4191],{"class":239},[79,25463,25464],{"class":81,"line":491},[79,25465,4245],{"class":239},[79,25467,25468],{"class":81,"line":497},[79,25469,454],{"emptyLinePlaceholder":453},[79,25471,25472],{"class":81,"line":503},[79,25473,4402],{"class":239},[79,25475,25476],{"class":81,"line":509},[79,25477,6197],{"class":239},[19,25479,25347],{},[19,25481,25482],{},"解释：静态成员函数也不属于类上",[2287,25484,9868],{},{"title":57,"searchDepth":167,"depth":167,"links":25486},[25487,25493],{"id":16806,"depth":167,"text":16807,"children":25488},[25489,25490,25491,25492],{"id":16810,"depth":178,"text":16811},{"id":17534,"depth":178,"text":17535},{"id":17706,"depth":178,"text":17707},{"id":18165,"depth":178,"text":18166},{"id":20516,"depth":167,"text":20517,"children":25494},[25495,25496,25497,25498,25499,25500,25501,25502,25503],{"id":20528,"depth":178,"text":20529},{"id":20821,"depth":178,"text":20822},{"id":21312,"depth":178,"text":21313},{"id":22409,"depth":178,"text":22410},{"id":22832,"depth":178,"text":22833},{"id":23311,"depth":178,"text":23312},{"id":23686,"depth":178,"text":23687},{"id":24099,"depth":178,"text":24100},{"id":25036,"depth":178,"text":25037},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16772,"description":25504},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25511,"title":2378,"body":25512,"description":25516,"extension":2314,"meta":25517,"navigation":453,"path":25519,"seo":25520,"stem":25521,"__hash__":25522},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25513,"toc":25514},[],{"title":57,"searchDepth":167,"depth":167,"links":25515},[],null,{"category":25518},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":2378,"description":25516},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25524,"title":25525,"body":25526,"description":57,"extension":2314,"meta":26113,"navigation":453,"path":26114,"seo":26115,"stem":26116,"__hash__":26117},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25527,"toc":26095},[25528,25531,25535,25538,25541,25544,25562,25567,25570,25573,25576,25579,25584,25587,25592,25595,25598,25602,25605,25608,25614,25617,25635,25639,25643,25646,25651,25654,25658,25661,25674,25677,25681,25684,25687,25690,25715,25718,25727,25738,25753,25785,25789,25796,25804,25808,25811,25814,25819,25823,25826,25829,25834,25837,25841,25844,25847,25852,25855,25859,25864,25868,25935,25939,25942,25945,25948,25951,25954,25960,25977,25980,25994,26003,26007,26010,26013,26018,26021,26026,26031,26034,26037,26042,26047,26050,26055,26060,26063,26068,26073,26076,26079,26084,26087,26092],[10,25529,25525],{"id":25530},"_1强化学习基本认识",[14,25532,25534],{"id":25533},"_11什么是强化学习","1.1.什么是强化学习",[19,25536,25537],{},"强化学习有两部分组成：智能体和环境；",[19,25539,25540],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25542,25543],{},"强化学习与监督学习的区别:",[26,25545,25546,25549,25552,25555],{},[29,25547,25548],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[29,25550,25551],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[29,25553,25554],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[29,25556,25557,25558,25561],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[2528,25559,25560],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25563,25564],{},[3699,25565],{"alt":57,"src":25566},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25568,25569],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25571,25572],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25574,25575],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25577,25578],{},"获取奖励",[19,25580,25581],{},[3699,25582],{"alt":57,"src":25583},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25585,25586],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25588,25589],{},[3699,25590],{"alt":57,"src":25591},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25593,25594],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25596,25597],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25599,25601],{"id":25600},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25603,25604],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25606,25607],{},"具身智能中的应用",[19,25609,25610,25613],{},[2528,25611,25612],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25615,25616],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25618,25619,25620,25623,25624,25627,25628,25631,25632],{},"机器人是",[2528,25621,25622],{},"躯体","，深度学习是",[2528,25625,25626],{},"神经元****网络","，VLA是",[2528,25629,25630],{},"通用的行为逻辑","，而强化学习是",[2528,25633,25634],{},"教练",[14,25636,25638],{"id":25637},"_13序列决策","1.3.序列决策",[265,25640,25642],{"id":25641},"_131智能体与环境","1.3.1.智能体与环境",[19,25644,25645],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25647,25648],{},[3699,25649],{"alt":57,"src":25650},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25652,25653],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[265,25655,25657],{"id":25656},"_132奖励","1.3.2.奖励",[19,25659,25660],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25662,25663,25664,25673],{},"取某个策略的表现如何。强化学习的目的就是",[2528,25665,25666,25667,25672],{},"最大化",[2528,25668,25669],{},[2528,25670,25671],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25675,25676],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[265,25678,25680],{"id":25679},"_133序列决策","1.3.3.序列决策",[19,25682,25683],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25685,25686],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25688,25689],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25691,25692,25696,25697,25699,25700,25702,25703,25705,25706,15957,25709,15957,25712],{},[25693,25694,25695],"em",{},"Ht"," = ",[25693,25698,2969],{},"1*, a",[25693,25701,1072],{},", r",[25693,25704,1072],{},", . . . ,* ",[25693,25707,25708],{},"ot",[25693,25710,25711],{},", at ,",[25693,25713,25714],{},"rt",[19,25716,25717],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25719,25720,25696,25723,3887,25725,2803],{},[25693,25721,25722],{},"st",[25693,25724,688],{},[25693,25726,25695],{},[19,25728,25729,25730,25733,25734,25737],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[2528,25731,25732],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[2528,25735,25736],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25739,25740,25741,25744,25745,25748,25749,25752],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[2528,25742,25743],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[2528,25746,25747],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25693,25750,25751],{},"S, A, T, R, Ω, O, γ",")。",[19,25754,25755,25756,25758,25759,25761,25762,685,25764,25767,25768,25770,25771,685,25774,25777,25778,25780,25781,25784],{},"其中 ",[25693,25757,3062],{}," 表示状态空间，为隐变量，",[25693,25760,2608],{}," 为动作空间，",[25693,25763,3087],{},[25693,25765,25766],{},"s ′ |s, a",") 为状态转移概率，",[25693,25769,3037],{}," 为奖励函数，",[25693,25772,25773],{},"Ω",[25693,25775,25776],{},"o|s, a",") 为观测概率，",[25693,25779,2963],{}," 为观测空间，",[25693,25782,25783],{},"γ"," 为折扣因子。",[14,25786,25788],{"id":25787},"_14动作空间","1.4.动作空间",[19,25790,25791,25792,25795],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[2528,25793,25794],{},"动作空间"," ，动作空间分为:",[26,25797,25798,25801],{},[29,25799,25800],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[29,25802,25803],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25805,25807],{"id":25806},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25809,25810],{},"由策略、价值函数、模型三部分组成",[19,25812,25813],{},"这三者组成马尔可夫决策过程",[19,25815,25816],{},[3699,25817],{"alt":57,"src":25818},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[265,25820,25822],{"id":25821},"_151策略","1.5.1.策略",[19,25824,25825],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25827,25828],{},"策略可分为两种：",[19,25830,25831],{},[3699,25832],{"alt":57,"src":25833},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25835,25836],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[265,25838,25840],{"id":25839},"_152价值函数","1.5.2.价值函数",[19,25842,25843],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25845,25846],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25848,25849],{},[3699,25850],{"alt":57,"src":25851},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25853,25854],{},"进入某个状态采取的最优动作可以通过Q函数得到",[265,25856,25858],{"id":25857},"_153模型","1.5.3.模型",[19,25860,25861],{},[3699,25862],{"alt":57,"src":25863},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25865,25867],{"id":25866},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[2516,25869,25870,25881],{},[2519,25871,25872],{},[2522,25873,25874,25878],{},[2525,25875,25877],{"align":25876},"left","类型",[2525,25879,25880],{"align":25876},"特点",[2563,25882,25883,25893,25903,25913,25925],{},[2522,25884,25885,25890],{},[2568,25886,25887],{"align":25876},[2528,25888,25889],{},"基于价值的智能体",[2568,25891,25892],{"align":25876},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[2522,25894,25895,25900],{},[2568,25896,25897],{"align":25876},[2528,25898,25899],{},"基于策略的智能体",[2568,25901,25902],{"align":25876},"直接学习策略，没有学习价值函数",[2522,25904,25905,25910],{},[2568,25906,25907],{"align":25876},[2528,25908,25909],{},"演员-评论员智能体",[2568,25911,25912],{"align":25876},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[2522,25914,25915,25920],{},[2568,25916,25917],{"align":25876},[2528,25918,25919],{},"有模型强化学习智能体",[2568,25921,25922],{"align":25876},[3699,25923],{"alt":57,"src":25924},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[2522,25926,25927,25932],{},[2568,25928,25929],{"align":25876},[2528,25930,25931],{},"免模型强化学习智能体",[2568,25933,25934],{"align":25876},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25936,25938],{"id":25937},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25940,25941],{},"学习和规划是序列决策的两个基本问题",[19,25943,25944],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25946,25947],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25949,25950],{},"强化学习用到的库：Gym",[19,25952,25953],{},"Gym可以检验强化学习算法的优劣",[19,25955,25956,25959],{},[2528,25957,25958],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[51,25961,25963],{"className":73,"code":25962,"language":75,"meta":57,"style":57},"pip install gym==0.25.2\n",[59,25964,25965],{"__ignoreMap":57},[79,25966,25967,25969,25971,25974],{"class":81,"line":82},[79,25968,125],{"class":85},[79,25970,93],{"class":89},[79,25972,25973],{"class":89}," gym==",[79,25975,25976],{"class":96},"0.25.2\n",[19,25978,25979],{},"显示图形界面需要",[51,25981,25983],{"className":73,"code":25982,"language":75,"meta":57,"style":57},"pip install pygame\n",[59,25984,25985],{"__ignoreMap":57},[79,25986,25987,25989,25991],{"class":81,"line":82},[79,25988,125],{"class":85},[79,25990,93],{"class":89},[79,25992,25993],{"class":89}," pygame\n",[19,25995,25996,25997],{},"有关Gym库的相关文档介绍：",[2614,25998,26002],{"href":25999,"rel":26000},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[26001],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,26004,26006],{"id":26005},"_18一些补充基础概念","1.8.一些补充基础概念",[19,26008,26009],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,26011,26012],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,26014,26015],{},[3699,26016],{"alt":57,"src":26017},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,26019,26020],{},"折扣率需要自己来设定",[19,26022,26023],{},[3699,26024],{"alt":57,"src":26025},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[26,26027,26028],{},[29,26029,26030],{},"状态转移函数：",[19,26032,26033],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,26035,26036],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,26038,26039],{},[3699,26040],{"alt":57,"src":26041},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[26,26043,26044],{"start":167},[29,26045,26046],{},"动作价值函数：",[19,26048,26049],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,26051,26052],{},[3699,26053],{"alt":57,"src":26054},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[26,26056,26057],{"start":178},[29,26058,26059],{},"最优动作价值函数：",[19,26061,26062],{},"这个函数是对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,26064,26065],{},[3699,26066],{"alt":57,"src":26067},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[26,26069,26070],{"start":457},[29,26071,26072],{},"状态价值函数:",[19,26074,26075],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,26077,26078],{},"它衡量的是“一个具体动作”的长期价值",[19,26080,26081],{},[3699,26082],{"alt":57,"src":26083},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,26085,26086],{},"几个价值函数之间的比较：",[19,26088,26089],{},[3699,26090],{"alt":57,"src":26091},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[2287,26093,26094],{},"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":57,"searchDepth":167,"depth":167,"links":26096},[26097,26098,26099,26104,26105,26110,26111,26112],{"id":25533,"depth":167,"text":25534},{"id":25600,"depth":167,"text":25601},{"id":25637,"depth":167,"text":25638,"children":26100},[26101,26102,26103],{"id":25641,"depth":178,"text":25642},{"id":25656,"depth":178,"text":25657},{"id":25679,"depth":178,"text":25680},{"id":25787,"depth":167,"text":25788},{"id":25806,"depth":167,"text":25807,"children":26106},[26107,26108,26109],{"id":25821,"depth":178,"text":25822},{"id":25839,"depth":178,"text":25840},{"id":25857,"depth":178,"text":25858},{"id":25866,"depth":167,"text":25867},{"id":25937,"depth":167,"text":25938},{"id":26005,"depth":167,"text":26006},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25525,"description":57},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26119,"title":26120,"body":26121,"description":26128,"extension":2314,"meta":26139,"navigation":453,"path":26140,"seo":26141,"stem":26142,"__hash__":26143},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26122,"toc":26137},[26123,26126,26129,26134],[10,26124,26120],{"id":26125},"_2马尔可夫决策过程",[19,26127,26128],{},"这是强化学习的基本框架",[19,26130,26131],{},[3699,26132],{"alt":57,"src":26133},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,26135,26136],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":57,"searchDepth":167,"depth":167,"links":26138},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26120,"description":26128},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26145,"title":26146,"body":26147,"description":57,"extension":2314,"meta":26263,"navigation":453,"path":26264,"seo":26265,"stem":26266,"__hash__":26267},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26148,"toc":26258},[26149,26152,26156,26159,26164,26169,26172,26177,26180,26185,26188,26192,26197,26200,26205,26210,26215,26218,26222,26227,26230,26235,26240,26245,26250,26253],[10,26150,26146],{"id":26151},"_3动作价值函数",[14,26153,26155],{"id":26154},"_31dqn","3.1.DQN",[19,26157,26158],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,26160,26161],{},[3699,26162],{"alt":57,"src":26163},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,26165,26166],{},[3699,26167],{"alt":57,"src":26168},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,26170,26171],{},"DQN算法的描述：",[19,26173,26174],{},[3699,26175],{"alt":57,"src":26176},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,26178,26179],{},"这里的Dense指的是全连接层",[19,26181,26182],{},[3699,26183],{"alt":57,"src":26184},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,26186,26187],{},"当前观测的状态为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,26189,26191],{"id":26190},"_32dqn的举例","3.2.DQN的举例",[19,26193,26194],{},[3699,26195],{"alt":57,"src":26196},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,26198,26199],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,26201,26202],{},[3699,26203],{"alt":57,"src":26204},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,26206,26207],{},[3699,26208],{"alt":57,"src":26209},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,26211,26212],{},[3699,26213],{"alt":57,"src":26214},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,26216,26217],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26219,26221],{"id":26220},"_33td算法","3.3.TD算法",[19,26223,26224],{},[3699,26225],{"alt":57,"src":26226},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,26228,26229],{},"强化学习TD算法公式的粗略解释：",[19,26231,26232],{},[3699,26233],{"alt":57,"src":26234},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,26236,26237],{},[3699,26238],{"alt":57,"src":26239},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,26241,26242],{},[3699,26243],{"alt":57,"src":26244},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,26246,26247],{},[3699,26248],{"alt":57,"src":26249},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,26251,26252],{},"TD算法总结：",[19,26254,26255],{},[3699,26256],{"alt":57,"src":26257},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":57,"searchDepth":167,"depth":167,"links":26259},[26260,26261,26262],{"id":26154,"depth":167,"text":26155},{"id":26190,"depth":167,"text":26191},{"id":26220,"depth":167,"text":26221},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26146,"description":57},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26269,"title":26270,"body":26271,"description":57,"extension":2314,"meta":26504,"navigation":453,"path":26505,"seo":26506,"stem":26507,"__hash__":26508},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26272,"toc":26500},[26273,26276,26280,26283,26286,26291,26296,26299,26304,26309,26312,26317,26320,26325,26328,26333,26336,26341,26344,26349,26354,26357,26362,26365,26368,26373,26376,26381,26386,26390,26393,26396,26401,26406,26409,26414,26419,26422,26427,26430,26433,26438,26441,26446,26449,26454,26459,26462,26467,26472,26475,26480,26483,26488,26491],[10,26274,26270],{"id":26275},"_4策略学习",[14,26277,26279],{"id":26278},"_41概念描述","4.1.概念描述",[19,26281,26282],{},"用神经网络（策略网络）近似策略函数",[19,26284,26285],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,26287,26288],{},[3699,26289],{"alt":57,"src":26290},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,26292,26293],{},[3699,26294],{"alt":57,"src":26295},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,26297,26298],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,26300,26301],{},[3699,26302],{"alt":57,"src":26303},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,26305,26306],{},[3699,26307],{"alt":57,"src":26308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,26310,26311],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,26313,26314],{},[3699,26315],{"alt":57,"src":26316},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,26318,26319],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,26321,26322],{},[3699,26323],{"alt":57,"src":26324},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,26326,26327],{},"改进theta要用到策略梯度算法",[19,26329,26330],{},[3699,26331],{"alt":57,"src":26332},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,26334,26335],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,26337,26338],{},[3699,26339],{"alt":57,"src":26340},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,26342,26343],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26345,26346],{},[3699,26347],{"alt":57,"src":26348},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26350,26351],{},[3699,26352],{"alt":57,"src":26353},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26355,26356],{},"梯度公式总结：",[19,26358,26359],{},[3699,26360],{"alt":57,"src":26361},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26363,26364],{},"两个公式的分别应用场景：",[19,26366,26367],{},"对于离散的动作：",[19,26369,26370],{},[3699,26371],{"alt":57,"src":26372},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26374,26375],{},"对于连续的动作：",[19,26377,26378],{},[3699,26379],{"alt":57,"src":26380},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26382,26383],{},[3699,26384],{"alt":57,"src":26385},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26387,26389],{"id":26388},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26391,26392],{},"使用蒙特卡洛来近似计算策略梯度",[19,26394,26395],{},"蒙特卡洛法的解释如下：",[19,26397,26398],{},[3699,26399],{"alt":57,"src":26400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26402,26403],{},[3699,26404],{"alt":57,"src":26405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26407,26408],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[26,26410,26411],{},[29,26412,26413],{},"方法一：reinforce算法",[19,26415,26416],{},[3699,26417],{"alt":57,"src":26418},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26420,26421],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[26,26423,26424],{"start":167},[29,26425,26426],{},"方法二：actor-critic算法",[19,26428,26429],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26431,26432],{},"两个网络的构建：",[19,26434,26435],{},[3699,26436],{"alt":57,"src":26437},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26439,26440],{},"actor网路：",[19,26442,26443],{},[3699,26444],{"alt":57,"src":26445},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26447,26448],{},"critic网络",[19,26450,26451],{},[3699,26452],{"alt":57,"src":26453},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[26,26455,26456],{"start":178},[29,26457,26458],{},"网络的训练",[19,26460,26461],{},"网络描述",[19,26463,26464],{},[3699,26465],{"alt":57,"src":26466},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26468,26469],{},[3699,26470],{"alt":57,"src":26471},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26473,26474],{},"TD算法更新梯度：",[19,26476,26477],{},[3699,26478],{"alt":57,"src":26479},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26481,26482],{},"策略网络更新梯度：",[19,26484,26485],{},[3699,26486],{"alt":57,"src":26487},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26489,26490],{},"训练整个流程的具体描述：",[19,26492,26493,26496,26497],{},[3699,26494],{"alt":57,"src":26495},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3699,26498],{"alt":57,"src":26499},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":57,"searchDepth":167,"depth":167,"links":26501},[26502,26503],{"id":26278,"depth":167,"text":26279},{"id":26388,"depth":167,"text":26389},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26270,"description":57},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26510,"title":26511,"body":26512,"description":26519,"extension":2314,"meta":26569,"navigation":453,"path":26570,"seo":26571,"stem":26572,"__hash__":26573},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26513,"toc":26565},[26514,26517,26520,26524,26527,26532,26536,26539,26544,26547,26552,26557,26560],[10,26515,26511],{"id":26516},"_5alphago算法",[19,26518,26519],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26521,26523],{"id":26522},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26525,26526],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26528,26529],{},[3699,26530],{"alt":57,"src":26531},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26533,26535],{"id":26534},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26537,26538],{},"采用强化学习的方式训练策略网络",[19,26540,26541],{},[3699,26542],{"alt":57,"src":26543},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26545,26546],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26548,26549],{},[3699,26550],{"alt":57,"src":26551},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26553,26554],{},[3699,26555],{"alt":57,"src":26556},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26558,26559],{},"强化学习训练策略网络的总结：",[19,26561,26562],{},[3699,26563],{"alt":57,"src":26564},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":57,"searchDepth":167,"depth":167,"links":26566},[26567,26568],{"id":26522,"depth":167,"text":26523},{"id":26534,"depth":167,"text":26535},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26511,"description":26519},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26575,"title":26576,"body":26577,"description":26584,"extension":2314,"meta":26587,"navigation":453,"path":26588,"seo":26589,"stem":26590,"__hash__":26591},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26578,"toc":26585},[26579,26582],[10,26580,26576],{"id":26581},"_6价值网络",[19,26583,26584],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":57,"searchDepth":167,"depth":167,"links":26586},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26576,"description":26584},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26593,"title":26594,"body":26595,"description":26599,"extension":2314,"meta":26600,"navigation":453,"path":26601,"seo":26602,"stem":26603,"__hash__":26604},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26596,"toc":26597},[],{"title":57,"searchDepth":167,"depth":167,"links":26598},[],"记录自己的强化学习笔记。",{"category":25518},"\u002Fwiki\u002F2025-12-04",{"title":26594,"description":26599},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26606,"title":26607,"body":26608,"description":25516,"extension":2314,"meta":26647,"navigation":453,"path":26648,"seo":26649,"stem":26650,"__hash__":26651},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26609,"toc":26645},[26610,26613,26616,26622,26625,26631,26634,26639,26642],[10,26611,26607],{"id":26612},"_1-项目概览与官方资源",[19,26614,26615],{},"官方文档：",[19,26617,26618],{},[2614,26619,26620],{"href":26620,"rel":26621},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[26001],[19,26623,26624],{},"官方代码仓库：",[19,26626,26627],{},[2614,26628,26629],{"href":26629,"rel":26630},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[26001],[19,26632,26633],{},"复现大体流程：",[19,26635,26636],{},[3699,26637],{"alt":57,"src":26638},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26640,26641],{},"本教程的目标是打通这条链路：",[19,26643,26644],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":57,"searchDepth":167,"depth":167,"links":26646},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26607,"description":25516},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26653,"title":26654,"body":26655,"description":25516,"extension":2314,"meta":26770,"navigation":453,"path":26771,"seo":26772,"stem":26773,"__hash__":26774},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26656,"toc":26765},[26657,26660,26664,26667,26674,26678,26681,26690,26700,26704,26733,26736,26762],[10,26658,26654],{"id":26659},"_2-环境准备与设备连接",[14,26661,26663],{"id":26662},"_21-系统与环境","2.1 系统与环境",[19,26665,26666],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26668,26669,26670,26673],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[59,26671,26672],{},"lerobot"," 依赖。",[14,26675,26677],{"id":26676},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26679,26680],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[51,26682,26684],{"className":73,"code":26683,"language":75,"meta":57,"style":57},"lerobot-find-out\n",[59,26685,26686],{"__ignoreMap":57},[79,26687,26688],{"class":81,"line":82},[79,26689,26683],{"class":85},[19,26691,26692,26693,204,26696,26699],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[59,26694,26695],{},"\u002Fdev\u002FttyACM0",[59,26697,26698],{},"\u002Fdev\u002FttyACM1","）。",[14,26701,26703],{"id":26702},"_23-串口授权","2.3 串口授权",[51,26705,26707],{"className":73,"code":26706,"language":75,"meta":57,"style":57},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[59,26708,26709,26722],{"__ignoreMap":57},[79,26710,26711,26713,26716,26719],{"class":81,"line":82},[79,26712,86],{"class":85},[79,26714,26715],{"class":89}," chmod",[79,26717,26718],{"class":96}," 666",[79,26720,26721],{"class":89}," \u002Fdev\u002FttyACM0\n",[79,26723,26724,26726,26728,26730],{"class":81,"line":167},[79,26725,86],{"class":85},[79,26727,26715],{"class":89},[79,26729,26718],{"class":96},[79,26731,26732],{"class":89}," \u002Fdev\u002FttyACM1\n",[19,26734,26735],{},"说明：",[3377,26737,26738,26743,26749,26759],{},[29,26739,26740,26742],{},[59,26741,86],{},"：以 root 权限执行命令。",[29,26744,26745,26748],{},[59,26746,26747],{},"chmod","：修改设备节点权限。",[29,26750,26751,26754,26755,26758],{},[59,26752,26753],{},"666","：",[59,26756,26757],{},"rw-rw-rw-","，所有用户可读写。",[29,26760,26761],{},"串口号必须替换为你机器上的真实端口。",[2287,26763,26764],{},"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":57,"searchDepth":167,"depth":167,"links":26766},[26767,26768,26769],{"id":26662,"depth":167,"text":26663},{"id":26676,"depth":167,"text":26677},{"id":26702,"depth":167,"text":26703},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26654,"description":25516},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26776,"title":26777,"body":26778,"description":25516,"extension":2314,"meta":26939,"navigation":453,"path":26940,"seo":26941,"stem":26942,"__hash__":26943},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26779,"toc":26935},[26780,26784,26788,26794,26797,26854,26857,26861,26864,26932],[10,26781,26783],{"id":26782},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26785,26787],{"id":26786},"_31-配置电机-id","3.1 配置电机 ID",[19,26789,26790,26791,26793],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[59,26792,1072],{},"，需要改成机械臂链路里不冲突的编号。",[19,26795,26796],{},"方式一：用 LeRobot 命令逐步写入。",[51,26798,26800],{"className":73,"code":26799,"language":75,"meta":57,"style":57},"# 主臂舵机配置 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",[59,26801,26802,26807,26815,26822,26827,26831,26836,26842,26849],{"__ignoreMap":57},[79,26803,26804],{"class":81,"line":82},[79,26805,26806],{"class":2440},"# 主臂舵机配置 ID\n",[79,26808,26809,26812],{"class":81,"line":167},[79,26810,26811],{"class":85},"lerobot-setup-motors",[79,26813,26814],{"class":96}," \\\n",[79,26816,26817,26820],{"class":81,"line":178},[79,26818,26819],{"class":96},"  --teleop.type=so101_leader",[79,26821,26814],{"class":96},[79,26823,26824],{"class":81,"line":457},[79,26825,26826],{"class":96},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[79,26828,26829],{"class":81,"line":462},[79,26830,454],{"emptyLinePlaceholder":453},[79,26832,26833],{"class":81,"line":474},[79,26834,26835],{"class":2440},"# 从臂舵机配置 ID\n",[79,26837,26838,26840],{"class":81,"line":480},[79,26839,26811],{"class":85},[79,26841,26814],{"class":96},[79,26843,26844,26847],{"class":81,"line":486},[79,26845,26846],{"class":96},"  --robot.type=so101_follower",[79,26848,26814],{"class":96},[79,26850,26851],{"class":81,"line":491},[79,26852,26853],{"class":96},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26855,26856],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26858,26860],{"id":26859},"_32-机械臂校准","3.2 机械臂校准",[19,26862,26863],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[51,26865,26867],{"className":73,"code":26866,"language":75,"meta":57,"style":57},"# 主臂校准\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",[59,26868,26869,26874,26881,26887,26894,26899,26903,26908,26914,26920,26927],{"__ignoreMap":57},[79,26870,26871],{"class":81,"line":82},[79,26872,26873],{"class":2440},"# 主臂校准\n",[79,26875,26876,26879],{"class":81,"line":167},[79,26877,26878],{"class":85},"lerobot-calibrate",[79,26880,26814],{"class":96},[79,26882,26883,26885],{"class":81,"line":178},[79,26884,26819],{"class":96},[79,26886,26814],{"class":96},[79,26888,26889,26892],{"class":81,"line":457},[79,26890,26891],{"class":96},"  --teleop.port=\u002Fdev\u002FttyACM0",[79,26893,26814],{"class":96},[79,26895,26896],{"class":81,"line":462},[79,26897,26898],{"class":96},"  --teleop.id=my_awesome_leader_arm\n",[79,26900,26901],{"class":81,"line":474},[79,26902,454],{"emptyLinePlaceholder":453},[79,26904,26905],{"class":81,"line":480},[79,26906,26907],{"class":2440},"# 从臂校准\n",[79,26909,26910,26912],{"class":81,"line":486},[79,26911,26878],{"class":85},[79,26913,26814],{"class":96},[79,26915,26916,26918],{"class":81,"line":491},[79,26917,26846],{"class":96},[79,26919,26814],{"class":96},[79,26921,26922,26925],{"class":81,"line":497},[79,26923,26924],{"class":96},"  --robot.port=\u002Fdev\u002FttyACM1",[79,26926,26814],{"class":96},[79,26928,26929],{"class":81,"line":503},[79,26930,26931],{"class":96},"  --robot.id=my_awesome_follower_arm\n",[2287,26933,26934],{},"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":57,"searchDepth":167,"depth":167,"links":26936},[26937,26938],{"id":26786,"depth":167,"text":26787},{"id":26859,"depth":167,"text":26860},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26777,"description":25516},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26945,"title":26946,"body":26947,"description":25516,"extension":2314,"meta":27138,"navigation":453,"path":27139,"seo":27140,"stem":27141,"__hash__":27142},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26948,"toc":27134},[26949,26952,26956,27003,27007,27020,27083,27086,27131],[10,26950,26946],{"id":26951},"_4-遥操与相机接入",[14,26953,26955],{"id":26954},"_41-不带相机遥操","4.1 不带相机遥操",[51,26957,26959],{"className":73,"code":26958,"language":75,"meta":57,"style":57},"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",[59,26960,26961,26968,26974,26980,26987,26993,26999],{"__ignoreMap":57},[79,26962,26963,26966],{"class":81,"line":82},[79,26964,26965],{"class":85},"lerobot-teleoperate",[79,26967,26814],{"class":96},[79,26969,26970,26972],{"class":81,"line":167},[79,26971,26846],{"class":96},[79,26973,26814],{"class":96},[79,26975,26976,26978],{"class":81,"line":178},[79,26977,26924],{"class":96},[79,26979,26814],{"class":96},[79,26981,26982,26985],{"class":81,"line":457},[79,26983,26984],{"class":96},"  --robot.id=my_awesome_follower_arm",[79,26986,26814],{"class":96},[79,26988,26989,26991],{"class":81,"line":462},[79,26990,26819],{"class":96},[79,26992,26814],{"class":96},[79,26994,26995,26997],{"class":81,"line":474},[79,26996,26891],{"class":96},[79,26998,26814],{"class":96},[79,27000,27001],{"class":81,"line":480},[79,27002,26898],{"class":96},[14,27004,27006],{"id":27005},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[51,27008,27010],{"className":73,"code":27009,"language":75,"meta":57,"style":57},"lerobot-find-cameras opencv\n",[59,27011,27012],{"__ignoreMap":57},[79,27013,27014,27017],{"class":81,"line":82},[79,27015,27016],{"class":85},"lerobot-find-cameras",[79,27018,27019],{"class":89}," opencv\n",[51,27021,27023],{"className":73,"code":27022,"language":75,"meta":57,"style":57},"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",[59,27024,27025,27031,27037,27043,27049,27059,27065,27071,27078],{"__ignoreMap":57},[79,27026,27027,27029],{"class":81,"line":82},[79,27028,26965],{"class":85},[79,27030,26814],{"class":96},[79,27032,27033,27035],{"class":81,"line":167},[79,27034,26846],{"class":96},[79,27036,26814],{"class":96},[79,27038,27039,27041],{"class":81,"line":178},[79,27040,26924],{"class":96},[79,27042,26814],{"class":96},[79,27044,27045,27047],{"class":81,"line":457},[79,27046,26984],{"class":96},[79,27048,26814],{"class":96},[79,27050,27051,27054,27057],{"class":81,"line":462},[79,27052,27053],{"class":96},"  --robot.cameras=",[79,27055,27056],{"class":89},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[79,27058,26814],{"class":96},[79,27060,27061,27063],{"class":81,"line":474},[79,27062,26819],{"class":96},[79,27064,26814],{"class":96},[79,27066,27067,27069],{"class":81,"line":480},[79,27068,26891],{"class":96},[79,27070,26814],{"class":96},[79,27072,27073,27076],{"class":81,"line":486},[79,27074,27075],{"class":96},"  --teleop.id=my_awesome_leader_arm",[79,27077,26814],{"class":96},[79,27079,27080],{"class":81,"line":491},[79,27081,27082],{"class":96},"  --display_data=true\n",[19,27084,27085],{},"相机参数说明：",[3377,27087,27088,27094,27100,27109,27119,27125],{},[29,27089,27090,27093],{},[59,27091,27092],{},"front","：相机名称。",[29,27095,27096,27099],{},[59,27097,27098],{},"type: opencv","：相机驱动类型。",[29,27101,27102,27105,27106,26699],{},[59,27103,27104],{},"index_or_path","：设备编号或设备路径（如 ",[59,27107,27108],{},"\u002Fdev\u002Fvideo4",[29,27110,27111,27114,27115,27118],{},[59,27112,27113],{},"width"," \u002F ",[59,27116,27117],{},"height","：图像分辨率。",[29,27120,27121,27124],{},[59,27122,27123],{},"fps","：采样帧率。",[29,27126,27127,27130],{},[59,27128,27129],{},"--display_data=true","：启用实时可视化。",[2287,27132,27133],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":57,"searchDepth":167,"depth":167,"links":27135},[27136,27137],{"id":26954,"depth":167,"text":26955},{"id":27005,"depth":167,"text":27006},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26946,"description":25516},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27144,"title":27145,"body":27146,"description":25516,"extension":2314,"meta":27317,"navigation":453,"path":27318,"seo":27319,"stem":27320,"__hash__":27321},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27147,"toc":27312},[27148,27152,27156,27161,27166,27169,27211,27217,27221,27269,27274,27278,27281,27289,27294,27299,27304,27309],[10,27149,27151],{"id":27150},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27153,27155],{"id":27154},"_51-生成访问令牌","5.1 生成访问令牌",[19,27157,27158],{},[3699,27159],{"alt":57,"src":27160},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,27162,27163],{},[3699,27164],{"alt":57,"src":27165},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,27167,27168],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[51,27170,27172],{"className":73,"code":27171,"language":75,"meta":57,"style":57},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[59,27173,27174,27187],{"__ignoreMap":57},[79,27175,27176,27179,27182,27184],{"class":81,"line":82},[79,27177,27178],{"class":243},"export",[79,27180,27181],{"class":239}," HF_TOKEN",[79,27183,244],{"class":243},[79,27185,27186],{"class":89},"\"your_huggingface_token\"\n",[79,27188,27189,27192,27195,27198,27201,27203,27206,27208],{"class":81,"line":167},[79,27190,27191],{"class":85},"hf",[79,27193,27194],{"class":89}," auth",[79,27196,27197],{"class":89}," login",[79,27199,27200],{"class":96}," --token",[79,27202,11906],{"class":89},[79,27204,27205],{"class":239},"$HF_TOKEN",[79,27207,703],{"class":89},[79,27209,27210],{"class":96}," --add-to-git-credential\n",[19,27212,27213,27216],{},[59,27214,27215],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27218,27220],{"id":27219},"_52-验证登录","5.2 验证登录",[51,27222,27224],{"className":73,"code":27223,"language":75,"meta":57,"style":57},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[59,27225,27226,27256],{"__ignoreMap":57},[79,27227,27228,27231,27233,27236,27238,27240,27243,27246,27249,27251,27254],{"class":81,"line":82},[79,27229,27230],{"class":239},"HF_USER",[79,27232,244],{"class":243},[79,27234,27235],{"class":239},"$(",[79,27237,27191],{"class":85},[79,27239,27194],{"class":89},[79,27241,27242],{"class":89}," whoami",[79,27244,27245],{"class":243}," |",[79,27247,27248],{"class":85}," head",[79,27250,152],{"class":96},[79,27252,27253],{"class":96}," 1",[79,27255,253],{"class":239},[79,27257,27258,27261,27263,27266],{"class":81,"line":167},[79,27259,27260],{"class":96},"echo",[79,27262,11906],{"class":89},[79,27264,27265],{"class":239},"$HF_USER",[79,27267,27268],{"class":89},"\"\n",[19,27270,27271],{},[3699,27272],{"alt":57,"src":27273},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27275,27277],{"id":27276},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,27279,27280],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[3377,27282,27283,27286],{},[29,27284,27285],{},"Dataset Repo（用于上传演示数据）",[29,27287,27288],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,27290,27291],{},[3699,27292],{"alt":57,"src":27293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,27295,27296],{},[3699,27297],{"alt":57,"src":27298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,27300,27301],{},[3699,27302],{"alt":57,"src":27303},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,27305,27306],{},[3699,27307],{"alt":57,"src":27308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[2287,27310,27311],{},"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":57,"searchDepth":167,"depth":167,"links":27313},[27314,27315,27316],{"id":27154,"depth":167,"text":27155},{"id":27219,"depth":167,"text":27220},{"id":27276,"depth":167,"text":27277},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27145,"description":25516},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27323,"title":27324,"body":27325,"description":25516,"extension":2314,"meta":27522,"navigation":453,"path":27523,"seo":27524,"stem":27525,"__hash__":27526},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27326,"toc":27517},[27327,27331,27335,27431,27439,27444,27448,27464,27467,27471,27514],[10,27328,27330],{"id":27329},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,27332,27334],{"id":27333},"_61-录制示教数据","6.1 录制示教数据",[51,27336,27338],{"className":73,"code":27337,"language":75,"meta":57,"style":57},"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",[59,27339,27340,27347,27353,27359,27365,27374,27380,27386,27392,27399,27409,27416,27426],{"__ignoreMap":57},[79,27341,27342,27345],{"class":81,"line":82},[79,27343,27344],{"class":85},"lerobot-record",[79,27346,26814],{"class":96},[79,27348,27349,27351],{"class":81,"line":167},[79,27350,26846],{"class":96},[79,27352,26814],{"class":96},[79,27354,27355,27357],{"class":81,"line":178},[79,27356,26924],{"class":96},[79,27358,26814],{"class":96},[79,27360,27361,27363],{"class":81,"line":457},[79,27362,26984],{"class":96},[79,27364,26814],{"class":96},[79,27366,27367,27369,27372],{"class":81,"line":462},[79,27368,27053],{"class":96},[79,27370,27371],{"class":89},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[79,27373,26814],{"class":96},[79,27375,27376,27378],{"class":81,"line":474},[79,27377,26819],{"class":96},[79,27379,26814],{"class":96},[79,27381,27382,27384],{"class":81,"line":480},[79,27383,26891],{"class":96},[79,27385,26814],{"class":96},[79,27387,27388,27390],{"class":81,"line":486},[79,27389,27075],{"class":96},[79,27391,26814],{"class":96},[79,27393,27394,27397],{"class":81,"line":491},[79,27395,27396],{"class":96},"  --display_data=true",[79,27398,26814],{"class":96},[79,27400,27401,27404,27407],{"class":81,"line":497},[79,27402,27403],{"class":96},"  --dataset.repo_id=",[79,27405,27406],{"class":89},"\"Embodied-AI-6\u002Fso101_test\"",[79,27408,26814],{"class":96},[79,27410,27411,27414],{"class":81,"line":503},[79,27412,27413],{"class":96},"  --dataset.num_episodes=10",[79,27415,26814],{"class":96},[79,27417,27418,27421,27424],{"class":81,"line":509},[79,27419,27420],{"class":96},"  --dataset.single_task=",[79,27422,27423],{"class":89},"\"Grab the green cube\"",[79,27425,26814],{"class":96},[79,27427,27428],{"class":81,"line":514},[79,27429,27430],{"class":96},"  --resume=true\n",[3377,27432,27433],{},[29,27434,27435,27438],{},[59,27436,27437],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27440,27441],{},[3699,27442],{"alt":57,"src":27443},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27445,27447],{"id":27446},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[51,27449,27451],{"className":73,"code":27450,"language":75,"meta":57,"style":57},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[59,27452,27453],{"__ignoreMap":57},[79,27454,27455,27458,27461],{"class":81,"line":82},[79,27456,27457],{"class":85},"rm",[79,27459,27460],{"class":96}," -rf",[79,27462,27463],{"class":89}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27465,27466],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27468,27470],{"id":27469},"_63-回放指定-episode","6.3 回放指定 episode",[51,27472,27474],{"className":73,"code":27473,"language":75,"meta":57,"style":57},"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",[59,27475,27476,27483,27489,27495,27501,27509],{"__ignoreMap":57},[79,27477,27478,27481],{"class":81,"line":82},[79,27479,27480],{"class":85},"lerobot-replay",[79,27482,26814],{"class":96},[79,27484,27485,27487],{"class":81,"line":167},[79,27486,26846],{"class":96},[79,27488,26814],{"class":96},[79,27490,27491,27493],{"class":81,"line":178},[79,27492,26924],{"class":96},[79,27494,26814],{"class":96},[79,27496,27497,27499],{"class":81,"line":457},[79,27498,26984],{"class":96},[79,27500,26814],{"class":96},[79,27502,27503,27505,27507],{"class":81,"line":462},[79,27504,27403],{"class":96},[79,27506,27406],{"class":89},[79,27508,26814],{"class":96},[79,27510,27511],{"class":81,"line":474},[79,27512,27513],{"class":96},"  --dataset.episode=0\n",[2287,27515,27516],{},"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":57,"searchDepth":167,"depth":167,"links":27518},[27519,27520,27521],{"id":27333,"depth":167,"text":27334},{"id":27446,"depth":167,"text":27447},{"id":27469,"depth":167,"text":27470},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27324,"description":25516},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27528,"title":27529,"body":27530,"description":25516,"extension":2314,"meta":27658,"navigation":453,"path":27659,"seo":27660,"stem":27661,"__hash__":27662},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27531,"toc":27656},[27532,27536,27599,27602,27649,27654],[10,27533,27535],{"id":27534},"_7-act-模型训练","7. ACT 模型训练",[51,27537,27539],{"className":73,"code":27538,"language":75,"meta":57,"style":57},"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",[59,27540,27541,27548,27556,27563,27570,27577,27584,27591],{"__ignoreMap":57},[79,27542,27543,27546],{"class":81,"line":82},[79,27544,27545],{"class":85},"lerobot-train",[79,27547,26814],{"class":96},[79,27549,27550,27552,27554],{"class":81,"line":167},[79,27551,27403],{"class":96},[79,27553,27406],{"class":89},[79,27555,26814],{"class":96},[79,27557,27558,27561],{"class":81,"line":178},[79,27559,27560],{"class":96},"  --policy.type=act",[79,27562,26814],{"class":96},[79,27564,27565,27568],{"class":81,"line":457},[79,27566,27567],{"class":96},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[79,27569,26814],{"class":96},[79,27571,27572,27575],{"class":81,"line":462},[79,27573,27574],{"class":96},"  --job_name=act_so101_test",[79,27576,26814],{"class":96},[79,27578,27579,27582],{"class":81,"line":474},[79,27580,27581],{"class":96},"  --policy.device=cuda",[79,27583,26814],{"class":96},[79,27585,27586,27589],{"class":81,"line":480},[79,27587,27588],{"class":96},"  --wandb.enable=false",[79,27590,26814],{"class":96},[79,27592,27593,27596],{"class":81,"line":486},[79,27594,27595],{"class":96},"  --policy.repo_id=",[79,27597,27598],{"class":89},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27600,27601],{},"参数说明：",[3377,27603,27604,27610,27616,27622,27628,27637,27643],{},[29,27605,27606,27609],{},[59,27607,27608],{},"--dataset.repo_id","：训练数据集仓库。",[29,27611,27612,27615],{},[59,27613,27614],{},"--policy.type=act","：策略模型类型为 ACT。",[29,27617,27618,27621],{},[59,27619,27620],{},"--output_dir","：本地训练输出目录。",[29,27623,27624,27627],{},[59,27625,27626],{},"--job_name","：训练任务名称。",[29,27629,27630,27633,27634,26699],{},[59,27631,27632],{},"--policy.device","：训练设备（如 ",[59,27635,27636],{},"cuda",[29,27638,27639,27642],{},[59,27640,27641],{},"--wandb.enable","：是否启用 WandB 可视化。",[29,27644,27645,27648],{},[59,27646,27647],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27650,27651],{},[3699,27652],{"alt":57,"src":27653},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[2287,27655,27516],{},{"title":57,"searchDepth":167,"depth":167,"links":27657},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27529,"description":25516},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27664,"title":27665,"body":27666,"description":25516,"extension":2314,"meta":27753,"navigation":453,"path":27754,"seo":27755,"stem":27756,"__hash__":27757},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27667,"toc":27751},[27668,27671,27674,27741,27749],[10,27669,27665],{"id":27670},"_8-策略部署与自动采集",[19,27672,27673],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[51,27675,27677],{"className":73,"code":27676,"language":75,"meta":57,"style":57},"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",[59,27678,27679,27685,27691,27697,27705,27711,27718,27726,27734],{"__ignoreMap":57},[79,27680,27681,27683],{"class":81,"line":82},[79,27682,27344],{"class":85},[79,27684,26814],{"class":96},[79,27686,27687,27689],{"class":81,"line":167},[79,27688,26846],{"class":96},[79,27690,26814],{"class":96},[79,27692,27693,27695],{"class":81,"line":178},[79,27694,26924],{"class":96},[79,27696,26814],{"class":96},[79,27698,27699,27701,27703],{"class":81,"line":457},[79,27700,27053],{"class":96},[79,27702,27371],{"class":89},[79,27704,26814],{"class":96},[79,27706,27707,27709],{"class":81,"line":462},[79,27708,26984],{"class":96},[79,27710,26814],{"class":96},[79,27712,27713,27716],{"class":81,"line":474},[79,27714,27715],{"class":96},"  --display_data=false",[79,27717,26814],{"class":96},[79,27719,27720,27722,27724],{"class":81,"line":480},[79,27721,27403],{"class":96},[79,27723,27406],{"class":89},[79,27725,26814],{"class":96},[79,27727,27728,27730,27732],{"class":81,"line":486},[79,27729,27420],{"class":96},[79,27731,27423],{"class":89},[79,27733,26814],{"class":96},[79,27735,27736,27739],{"class":81,"line":491},[79,27737,27738],{"class":96},"  --policy.path=",[79,27740,27598],{"class":89},[3377,27742,27743],{},[29,27744,27745,27748],{},[59,27746,27747],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[2287,27750,27516],{},{"title":57,"searchDepth":167,"depth":167,"links":27752},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27665,"description":25516},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27759,"title":27760,"body":27761,"description":25516,"extension":2314,"meta":27790,"navigation":453,"path":27791,"seo":27792,"stem":27793,"__hash__":27794},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27762,"toc":27788},[27763,27767,27770,27776,27779,27785],[10,27764,27766],{"id":27765},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27768,27769],{},"项目地址：",[19,27771,27772],{},[2614,27773,27774],{"href":27774,"rel":27775},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[26001],[19,27777,27778],{},"参考教程：",[19,27780,27781],{},[2614,27782,27783],{"href":27783,"rel":27784},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[26001],[19,27786,27787],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":57,"searchDepth":167,"depth":167,"links":27789},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27760,"description":25516},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27796,"title":27797,"body":27798,"description":27802,"extension":2314,"meta":27803,"navigation":453,"path":27804,"seo":27805,"stem":27806,"__hash__":27807},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27799,"toc":27800},[],{"title":57,"searchDepth":167,"depth":167,"links":27801},[],"act复现",{"category":25518},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27797,"description":27802},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27809,"title":27810,"body":27811,"description":57,"extension":2314,"meta":28113,"navigation":453,"path":28114,"seo":28115,"stem":28116,"__hash__":28117},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27812,"toc":28105},[27813,27816,27820,27830,27837,27844,27847,27854,27857,27860,27864,27876,27880,27926,27929,27932,27935,27938,27941,27945,27983,27989,27993,28047,28052,28055,28058,28063,28066,28071,28074,28077,28081,28084,28087,28091],[10,27814,27810],{"id":27815},"_1简介",[265,27817,27819],{"id":27818},"_11什么是-docker","1.1什么是 Docker？",[19,27821,27822,27823,27826,27827],{},"Docker 是一个开源的 ",[2528,27824,27825],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[2528,27828,27829],{},"一次构建，到处运行。",[19,27831,27832,27833,27836],{},"“ ",[2528,27834,27835],{},"一次构建，到处运行"," ”也就是说：",[26,27838,27839],{},[29,27840,27841],{},[2528,27842,27843],{},"之前：",[19,27845,27846],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[26,27848,27849],{},[29,27850,27851],{},[2528,27852,27853],{},"使用docker后：",[19,27855,27856],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27858,27859],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[265,27861,27863],{"id":27862},"_12它是怎么工作的","1.2.它是怎么工作的？",[3377,27865,27866,27869],{},[29,27867,27868],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[29,27870,27871,27872,27875],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[2528,27873,27874],{},"无论在哪运行都一样稳定"," 。",[265,27877,27879],{"id":27878},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[2516,27881,27882,27892],{},[2519,27883,27884],{},[2522,27885,27886,27889],{},[2525,27887,27888],{"align":25876},"概念",[2525,27890,27891],{"align":25876},"解释",[2563,27893,27894,27902,27910,27918],{},[2522,27895,27896,27899],{},[2568,27897,27898],{"align":25876},"镜像",[2568,27900,27901],{"align":25876},"Image，运行容器的模板，像是一个应用快照",[2522,27903,27904,27907],{},[2568,27905,27906],{"align":25876},"容器",[2568,27908,27909],{"align":25876},"Container，运行中的镜像实例，有自己的文件系统、网络等",[2522,27911,27912,27915],{},[2568,27913,27914],{"align":25876},"Dockerfile",[2568,27916,27917],{"align":25876},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[2522,27919,27920,27923],{},[2568,27921,27922],{"align":25876},"仓库",[2568,27924,27925],{"align":25876},"Registry，存放镜像的地方，比如 Docker Hub",[19,27927,27928],{},"抽象化理解:",[19,27930,27931],{},"Docker镜像≈C++类",[19,27933,27934],{},"Docker容器≈C++类实例(即对象)",[19,27936,27937],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27939,27940],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[265,27942,27944],{"id":27943},"_14类比理解","1.4.类比理解",[2516,27946,27947,27957],{},[2519,27948,27949],{},[2522,27950,27951,27954],{},[2525,27952,27953],{"align":25876},"传统部署",[2525,27955,27956],{"align":25876},"Docker部署",[2563,27958,27959,27967,27975],{},[2522,27960,27961,27964],{},[2568,27962,27963],{"align":25876},"手动安装依赖、调试版本不一致问题",[2568,27965,27966],{"align":25876},"一次打包环境和代码",[2522,27968,27969,27972],{},[2568,27970,27971],{"align":25876},"程序“裸奔”跑在系统上",[2568,27973,27974],{"align":25876},"程序“穿着容器”隔离运行",[2522,27976,27977,27980],{},[2568,27978,27979],{"align":25876},"容易“在我电脑上能跑”",[2568,27981,27982],{"align":25876},"保证“无论在哪都能跑”",[19,27984,27985,27986],{},"就像快递包裹： ",[2528,27987,27988],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[265,27990,27992],{"id":27991},"_15docker-的核心优势","1.5.Docker 的核心优势",[2516,27994,27995,28005],{},[2519,27996,27997],{},[2522,27998,27999,28002],{},[2525,28000,28001],{"align":25876},"优势",[2525,28003,28004],{"align":25876},"说明",[2563,28006,28007,28015,28023,28031,28039],{},[2522,28008,28009,28012],{},[2568,28010,28011],{"align":25876},"轻量级",[2568,28013,28014],{"align":25876},"基于系统内核共享，启动速度快，占资源少",[2522,28016,28017,28020],{},[2568,28018,28019],{"align":25876},"跨平台",[2568,28021,28022],{"align":25876},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[2522,28024,28025,28028],{},[2568,28026,28027],{"align":25876},"易于迁移部署",[2568,28029,28030],{"align":25876},"应用和环境一起封装，不怕依赖不一致",[2522,28032,28033,28036],{},[2568,28034,28035],{"align":25876},"易于版本控制",[2568,28037,28038],{"align":25876},"镜像版本可控，支持回滚",[2522,28040,28041,28044],{},[2568,28042,28043],{"align":25876},"生态丰富",[2568,28045,28046],{"align":25876},"Docker Hub 上有成千上万的现成镜像可用",[26,28048,28049],{},[29,28050,28051],{},"在Linux上可以几乎实现无性能损失。",[19,28053,28054],{},"docker里的发行版和本机共用Linux内核。",[19,28056,28057],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[26,28059,28060],{},[29,28061,28062],{},"可以快速部署在绝大多数Linux发行版",[19,28064,28065],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[26,28067,28068],{},[29,28069,28070],{},"配置环境简单",[19,28072,28073],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,28075,28076],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[26,28078,28079],{},[29,28080,28043],{},[19,28082,28083],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,28085,28086],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[265,28088,28090],{"id":28089},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[3377,28092,28093,28096,28099,28102],{},[29,28094,28095],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[29,28097,28098],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[29,28100,28101],{},"微服务架构：每个服务一个容器，灵活组合",[29,28103,28104],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":57,"searchDepth":167,"depth":167,"links":28106},[28107,28108,28109,28110,28111,28112],{"id":27818,"depth":178,"text":27819},{"id":27862,"depth":178,"text":27863},{"id":27878,"depth":178,"text":27879},{"id":27943,"depth":178,"text":27944},{"id":27991,"depth":178,"text":27992},{"id":28089,"depth":178,"text":28090},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27810,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28119,"title":28120,"body":28121,"description":57,"extension":2314,"meta":28851,"navigation":453,"path":28852,"seo":28853,"stem":28854,"__hash__":28855},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28122,"toc":28846},[28123,28126,28130,28133,28136,28142,28148,28152,28161,28164,28220,28223,28274,28277,28360,28363,28400,28404,28415,28428,28435,28438,28517,28520,28569,28572,28595,28599,28606,28609,28625,28631,28634,28650,28656,28659,28675,28689,28695,28715,28721,28724,28736,28742,28745,28759,28765,28768,28788,28793,28796,28799,28803,28806,28809,28812,28819,28822,28825,28828,28833,28838,28843],[10,28124,28120],{"id":28125},"_2安装docker",[265,28127,28129],{"id":28128},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,28131,28132],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,28134,28135],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,28137,28138],{},[2614,28139,28140],{"href":28140,"rel":28141},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[26001],[19,28143,28144],{},[2614,28145,28146],{"href":28146,"rel":28147},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[26001],[24137,28149,28151],{"id":28150},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,28153,28154,28155,28160],{},"以下内容根据 ",[2614,28156,28159],{"href":28157,"rel":28158},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[26001],"官方文档"," 修改而来。",[19,28162,28163],{},"如果你过去安装过 docker，先删掉：",[51,28165,28167],{"className":73,"code":28166,"language":75,"meta":57,"style":57},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[59,28168,28169],{"__ignoreMap":57},[79,28170,28171,28173,28176,28178,28181,28184,28187,28190,28193,28196,28199,28202,28205,28208,28211,28214,28217],{"class":81,"line":82},[79,28172,1874],{"class":243},[79,28174,28175],{"class":239}," pkg ",[79,28177,955],{"class":243},[79,28179,28180],{"class":89}," docker.io",[79,28182,28183],{"class":89}," docker-doc",[79,28185,28186],{"class":89}," docker-compose",[79,28188,28189],{"class":89}," docker-compose-v2",[79,28191,28192],{"class":89}," podman-docker",[79,28194,28195],{"class":89}," containerd",[79,28197,28198],{"class":89}," runc",[79,28200,28201],{"class":239},"; ",[79,28203,28204],{"class":243},"do",[79,28206,28207],{"class":85}," sudo",[79,28209,28210],{"class":89}," apt-get",[79,28212,28213],{"class":89}," remove",[79,28215,28216],{"class":239}," $pkg; ",[79,28218,28219],{"class":243},"done\n",[19,28221,28222],{},"首先安装依赖和GPG：",[51,28224,28228],{"className":28225,"code":28226,"language":28227,"meta":57,"style":57},"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",[59,28229,28230,28235,28240,28245,28250,28255,28260,28264,28269],{"__ignoreMap":57},[79,28231,28232],{"class":81,"line":82},[79,28233,28234],{},"# Add Docker's official GPG key:\n",[79,28236,28237],{"class":81,"line":167},[79,28238,28239],{},"sudo apt-get update\n",[79,28241,28242],{"class":81,"line":178},[79,28243,28244],{},"sudo apt-get install ca-certificates curl\n",[79,28246,28247],{"class":81,"line":457},[79,28248,28249],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[79,28251,28252],{"class":81,"line":462},[79,28253,28254],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[79,28256,28257],{"class":81,"line":474},[79,28258,28259],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[79,28261,28262],{"class":81,"line":480},[79,28263,454],{"emptyLinePlaceholder":453},[79,28265,28266],{"class":81,"line":486},[79,28267,28268],{},"# 如果上面这行报错就弄下面这行\n",[79,28270,28271],{"class":81,"line":491},[79,28272,28273],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,28275,28276],{},"信任 Docker 的 GPG 公钥并添加仓库：",[51,28278,28280],{"className":73,"code":28279,"language":75,"meta":57,"style":57},"# 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",[59,28281,28282,28287,28293,28310,28343],{"__ignoreMap":57},[79,28283,28284],{"class":81,"line":82},[79,28285,28286],{"class":2440},"# Add the repository to Apt sources:\n",[79,28288,28289,28291],{"class":81,"line":167},[79,28290,27260],{"class":96},[79,28292,26814],{"class":96},[79,28294,28295,28298,28301,28304,28307],{"class":81,"line":178},[79,28296,28297],{"class":89},"  \"deb [arch=$(",[79,28299,28300],{"class":85},"dpkg",[79,28302,28303],{"class":96}," --print-architecture",[79,28305,28306],{"class":89},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[79,28308,28309],{"class":96},"\\\n",[79,28311,28312,28315,28317,28319,28322,28325,28327,28329,28332,28334,28336,28339,28341],{"class":81,"line":457},[79,28313,28314],{"class":89},"  \"",[79,28316,27235],{"class":239},[79,28318,2931],{"class":96},[79,28320,28321],{"class":89}," \u002Fetc\u002Fos-release",[79,28323,28324],{"class":239}," && ",[79,28326,27260],{"class":96},[79,28328,11906],{"class":89},[79,28330,28331],{"class":239},"$VERSION_CODENAME",[79,28333,703],{"class":89},[79,28335,2803],{"class":239},[79,28337,28338],{"class":89},"\" stable\"",[79,28340,27245],{"class":243},[79,28342,26814],{"class":96},[79,28344,28345,28348,28351,28354,28357],{"class":81,"line":462},[79,28346,28347],{"class":85},"  sudo",[79,28349,28350],{"class":89}," tee",[79,28352,28353],{"class":89}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[79,28355,28356],{"class":243}," >",[79,28358,28359],{"class":89}," \u002Fdev\u002Fnull\n",[19,28361,28362],{},"最后安装",[51,28364,28366],{"className":73,"code":28365,"language":75,"meta":57,"style":57},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[59,28367,28368,28377],{"__ignoreMap":57},[79,28369,28370,28372,28374],{"class":81,"line":82},[79,28371,86],{"class":85},[79,28373,28210],{"class":89},[79,28375,28376],{"class":89}," update\n",[79,28378,28379,28381,28383,28385,28388,28391,28394,28397],{"class":81,"line":167},[79,28380,86],{"class":85},[79,28382,28210],{"class":89},[79,28384,93],{"class":89},[79,28386,28387],{"class":89}," docker-ce",[79,28389,28390],{"class":89}," docker-ce-cli",[79,28392,28393],{"class":89}," containerd.io",[79,28395,28396],{"class":89}," docker-buildx-plugin",[79,28398,28399],{"class":89}," docker-compose-plugin\n",[24137,28401,28403],{"id":28402},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28405,28406,28407,28410,28411,28414],{},"查看自己自己包管理工具版本（dnf是 ",[2528,28408,28409],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[2528,28412,28413],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[51,28416,28418],{"className":73,"code":28417,"language":75,"meta":57,"style":57},"dnf --version\n",[59,28419,28420],{"__ignoreMap":57},[79,28421,28422,28425],{"class":81,"line":82},[79,28423,28424],{"class":85},"dnf",[79,28426,28427],{"class":96}," --version\n",[19,28429,28154,28430,28434],{},[2614,28431,28159],{"href":28432,"rel":28433},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[26001]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28436,28437],{},"如果你之前安装过 docker，请先删掉",[51,28439,28441],{"className":73,"code":28440,"language":75,"meta":57,"style":57},"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",[59,28442,28443,28456,28463,28470,28477,28484,28491,28498,28505,28512],{"__ignoreMap":57},[79,28444,28445,28447,28449,28451,28454],{"class":81,"line":82},[79,28446,86],{"class":85},[79,28448,90],{"class":89},[79,28450,28213],{"class":89},[79,28452,28453],{"class":89}," docker",[79,28455,26814],{"class":96},[79,28457,28458,28461],{"class":81,"line":167},[79,28459,28460],{"class":89},"                  docker-client",[79,28462,26814],{"class":96},[79,28464,28465,28468],{"class":81,"line":178},[79,28466,28467],{"class":89},"                  docker-client-latest",[79,28469,26814],{"class":96},[79,28471,28472,28475],{"class":81,"line":457},[79,28473,28474],{"class":89},"                  docker-common",[79,28476,26814],{"class":96},[79,28478,28479,28482],{"class":81,"line":462},[79,28480,28481],{"class":89},"                  docker-latest",[79,28483,26814],{"class":96},[79,28485,28486,28489],{"class":81,"line":474},[79,28487,28488],{"class":89},"                  docker-latest-logrotate",[79,28490,26814],{"class":96},[79,28492,28493,28496],{"class":81,"line":480},[79,28494,28495],{"class":89},"                  docker-logrotate",[79,28497,26814],{"class":96},[79,28499,28500,28503],{"class":81,"line":486},[79,28501,28502],{"class":89},"                  docker-selinux",[79,28504,26814],{"class":96},[79,28506,28507,28510],{"class":81,"line":491},[79,28508,28509],{"class":89},"                  docker-engine-selinux",[79,28511,26814],{"class":96},[79,28513,28514],{"class":81,"line":497},[79,28515,28516],{"class":89},"                  docker-engine\n",[19,28518,28519],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[51,28521,28523],{"className":73,"code":28522,"language":75,"meta":57,"style":57},"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",[59,28524,28525,28538,28553],{"__ignoreMap":57},[79,28526,28527,28529,28531,28533,28535],{"class":81,"line":82},[79,28528,86],{"class":85},[79,28530,90],{"class":89},[79,28532,97],{"class":96},[79,28534,93],{"class":89},[79,28536,28537],{"class":89}," dnf-plugins-core\n",[79,28539,28540,28542,28544,28547,28550],{"class":81,"line":167},[79,28541,86],{"class":85},[79,28543,90],{"class":89},[79,28545,28546],{"class":89}," config-manager",[79,28548,28549],{"class":89}," addrepo",[79,28551,28552],{"class":96}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[79,28554,28555,28557,28560,28563,28566],{"class":81,"line":178},[79,28556,86],{"class":85},[79,28558,28559],{"class":89}," sed",[79,28561,28562],{"class":96}," -i",[79,28564,28565],{"class":89}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[79,28567,28568],{"class":89}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28570,28571],{},"最后安装：",[51,28573,28575],{"className":73,"code":28574,"language":75,"meta":57,"style":57},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[59,28576,28577],{"__ignoreMap":57},[79,28578,28579,28581,28583,28585,28587,28589,28591,28593],{"class":81,"line":82},[79,28580,86],{"class":85},[79,28582,90],{"class":89},[79,28584,93],{"class":89},[79,28586,28387],{"class":89},[79,28588,28390],{"class":89},[79,28590,28393],{"class":89},[79,28592,28396],{"class":89},[79,28594,28399],{"class":89},[265,28596,28598],{"id":28597},"_22配置环境","2.2.配置环境",[24137,28600,28602,28605],{"id":28601},"_221检查-docker-服务状态",[2528,28603,28604],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28607,28608],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[51,28610,28612],{"className":73,"code":28611,"language":75,"meta":57,"style":57},"systemctl status docker\n",[59,28613,28614],{"__ignoreMap":57},[79,28615,28616,28619,28622],{"class":81,"line":82},[79,28617,28618],{"class":85},"systemctl",[79,28620,28621],{"class":89}," status",[79,28623,28624],{"class":89}," docker\n",[24137,28626,28628,28605],{"id":28627},"_222启动-docker-服务",[2528,28629,28630],{},"2.2.2.启动 Docker 服务",[19,28632,28633],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[51,28635,28637],{"className":73,"code":28636,"language":75,"meta":57,"style":57},"sudo systemctl start docker\n",[59,28638,28639],{"__ignoreMap":57},[79,28640,28641,28643,28646,28648],{"class":81,"line":82},[79,28642,86],{"class":85},[79,28644,28645],{"class":89}," systemctl",[79,28647,6384],{"class":89},[79,28649,28624],{"class":89},[24137,28651,28653,28605],{"id":28652},"_223设置-docker-开机自启",[2528,28654,28655],{},"2.2.3.设置 Docker 开机自启",[19,28657,28658],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[51,28660,28662],{"className":73,"code":28661,"language":75,"meta":57,"style":57},"sudo systemctl enable docker\n",[59,28663,28664],{"__ignoreMap":57},[79,28665,28666,28668,28670,28673],{"class":81,"line":82},[79,28667,86],{"class":85},[79,28669,28645],{"class":89},[79,28671,28672],{"class":89}," enable",[79,28674,28624],{"class":89},[24137,28676,28678,15957,28681,15957,28686,28605],{"id":28677},"_224将用户添加到-docker-组",[2528,28679,28680],{},"2.2.4.将用户添加到",[2528,28682,28683],{},[59,28684,28685],{},"docker",[2528,28687,28688],{},"组",[19,28690,28691,28692,28694],{},"使用以下命令将当前用户添加到 ",[59,28693,28685],{}," 组：",[51,28696,28698],{"className":73,"code":28697,"language":75,"meta":57,"style":57},"sudo usermod -aG docker $USER\n",[59,28699,28700],{"__ignoreMap":57},[79,28701,28702,28704,28707,28710,28712],{"class":81,"line":82},[79,28703,86],{"class":85},[79,28705,28706],{"class":89}," usermod",[79,28708,28709],{"class":96}," -aG",[79,28711,28453],{"class":89},[79,28713,28714],{"class":239}," $USER\n",[24137,28716,28718,28605],{"id":28717},"_225退出并重新登录",[2528,28719,28720],{},"2.2.5.退出并重新登录",[19,28722,28723],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[51,28725,28727],{"className":73,"code":28726,"language":75,"meta":57,"style":57},"newgrp docker\n",[59,28728,28729],{"__ignoreMap":57},[79,28730,28731,28734],{"class":81,"line":82},[79,28732,28733],{"class":85},"newgrp",[79,28735,28624],{"class":89},[24137,28737,28739,28605],{"id":28738},"_226重新启动-docker-服务如果需要",[2528,28740,28741],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28743,28744],{},"确保 Docker 服务正在运行，可以使用以下命令：",[51,28746,28747],{"className":73,"code":28636,"language":75,"meta":57,"style":57},[59,28748,28749],{"__ignoreMap":57},[79,28750,28751,28753,28755,28757],{"class":81,"line":82},[79,28752,86],{"class":85},[79,28754,28645],{"class":89},[79,28756,6384],{"class":89},[79,28758,28624],{"class":89},[24137,28760,28762,28605],{"id":28761},"_227重启电脑后检查-docker-服务状态",[2528,28763,28764],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28766,28767],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[51,28769,28771],{"className":73,"code":28770,"language":75,"meta":57,"style":57},"sudo reboot\nsystemctl status docker\n",[59,28772,28773,28780],{"__ignoreMap":57},[79,28774,28775,28777],{"class":81,"line":82},[79,28776,86],{"class":85},[79,28778,28779],{"class":89}," reboot\n",[79,28781,28782,28784,28786],{"class":81,"line":167},[79,28783,28618],{"class":85},[79,28785,28621],{"class":89},[79,28787,28624],{"class":89},[19,28789,28790],{},[3699,28791],{"alt":57,"src":28792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28794,28795],{},"第三行显示enabled说明开机自启动成功",[19,28797,28798],{},"按q退出",[265,28800,28802],{"id":28801},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28804,28805],{},"优先使用linux来使用docker是比较好的",[19,28807,28808],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28810,28811],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28813,28814,28815],{},"官方下载安装:",[2614,28816,28817],{"href":28817,"rel":28818},"https:\u002F\u002Fwww.docker.com\u002F",[26001],[19,28820,28821],{},"Windows的Docker显卡直通与USB直通:",[19,28823,28824],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28826,28827],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28829,28830],{},[3699,28831],{"alt":57,"src":28832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28834,28835],{},[3699,28836],{"alt":57,"src":28837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28839,28840],{},[3699,28841],{"alt":57,"src":28842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[2287,28844,28845],{},"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":57,"searchDepth":167,"depth":167,"links":28847},[28848,28849,28850],{"id":28128,"depth":178,"text":28129},{"id":28597,"depth":178,"text":28598},{"id":28801,"depth":178,"text":28802},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28120,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28857,"title":28858,"body":28859,"description":28866,"extension":2314,"meta":29559,"navigation":453,"path":29560,"seo":29561,"stem":29562,"__hash__":29563},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28860,"toc":29553},[28861,28864,28867,28871,28876,28881,28884,28912,28917,28926,28929,28934,28938,28945,28950,28956,28960,28963,28967,28972,29064,29069,29087,29092,29113,29118,29134,29138,29143,29172,29177,29223,29228,29272,29280,29297,29302,29318,29323,29337,29340,29343,29346,29349,29378,29381,29386,29390,29393,29396,29402,29405,29408,29411,29473,29480,29485,29488,29506,29510,29513,29530,29533,29536,29550],[10,28862,28858],{"id":28863},"_3docker直通",[19,28865,28866],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[265,28868,28870],{"id":28869},"_31usb直通","3.1.USB直通",[19,28872,28873],{},[3699,28874],{"alt":57,"src":28875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[26,28877,28878],{},[29,28879,28880],{},"方法一(不是很推荐新手)：",[19,28882,28883],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[51,28885,28887],{"className":73,"code":28886,"language":75,"meta":57,"style":57},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[59,28888,28889,28897,28902],{"__ignoreMap":57},[79,28890,28891,28894],{"class":81,"line":82},[79,28892,28893],{"class":85},"ls",[79,28895,28896],{"class":89}," \u002Fdev\n",[79,28898,28899],{"class":81,"line":167},[79,28900,28901],{"class":2440},"#例如\n",[79,28903,28904,28907,28909],{"class":81,"line":178},[79,28905,28906],{"class":239},"--device",[79,28908,244],{"class":243},[79,28910,28911],{"class":89},"\u002Fdev\u002Ftty_USB0\n",[26,28913,28914],{"start":167},[29,28915,28916],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[51,28918,28920],{"className":73,"code":28919,"language":75,"meta":57,"style":57},"--privileged\n",[59,28921,28922],{"__ignoreMap":57},[79,28923,28924],{"class":81,"line":82},[79,28925,28919],{"class":85},[19,28927,28928],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28930,28931],{},[3699,28932],{"alt":57,"src":28933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[265,28935,28937],{"id":28936},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28939,28940,28941,28944],{},"NVIDIA Container Toolkit使用户 ",[2528,28942,28943],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28946,28947],{},[3699,28948],{"alt":57,"src":28949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28951,28952],{},[2614,28953,28954],{"href":28954,"rel":28955},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[26001],[24137,28957,28959],{"id":28958},"_321安装","3.2.1.安装",[19,28961,28962],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[25049,28964,28966],{"id":28965},"_3211ubuntu","3.2.1.1.Ubuntu",[26,28968,28969],{},[29,28970,28971],{},"配置存储库 并更新",[51,28973,28975],{"className":73,"code":28974,"language":75,"meta":57,"style":57},"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",[59,28976,28977,29006,29026,29038,29050,29056],{"__ignoreMap":57},[79,28978,28979,28982,28985,28988,28990,28992,28995,28998,29001,29004],{"class":81,"line":82},[79,28980,28981],{"class":85},"curl",[79,28983,28984],{"class":96}," -fsSL",[79,28986,28987],{"class":89}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[79,28989,27245],{"class":243},[79,28991,28207],{"class":85},[79,28993,28994],{"class":89}," gpg",[79,28996,28997],{"class":96}," --dearmor",[79,28999,29000],{"class":96}," -o",[79,29002,29003],{"class":89}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[79,29005,26814],{"class":96},[79,29007,29008,29011,29013,29016,29019,29022,29024],{"class":81,"line":167},[79,29009,29010],{"class":239},"  && ",[79,29012,28981],{"class":85},[79,29014,29015],{"class":96}," -s",[79,29017,29018],{"class":96}," -L",[79,29020,29021],{"class":89}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[79,29023,27245],{"class":243},[79,29025,26814],{"class":96},[79,29027,29028,29031,29034,29036],{"class":81,"line":178},[79,29029,29030],{"class":85},"    sed",[79,29032,29033],{"class":89}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[79,29035,27245],{"class":243},[79,29037,26814],{"class":96},[79,29039,29040,29043,29045,29048],{"class":81,"line":457},[79,29041,29042],{"class":85},"    sudo",[79,29044,28350],{"class":89},[79,29046,29047],{"class":89}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[79,29049,26814],{"class":96},[79,29051,29052,29054],{"class":81,"line":462},[79,29053,29010],{"class":239},[79,29055,28309],{"class":96},[79,29057,29058,29060,29062],{"class":81,"line":474},[79,29059,29042],{"class":85},[79,29061,28210],{"class":89},[79,29063,28376],{"class":89},[26,29065,29066],{"start":167},[29,29067,29068],{},"安装nvidia-docker2",[51,29070,29072],{"className":73,"code":29071,"language":75,"meta":57,"style":57},"sudo apt-get install -y nvidia-docker2\n",[59,29073,29074],{"__ignoreMap":57},[79,29075,29076,29078,29080,29082,29084],{"class":81,"line":82},[79,29077,86],{"class":85},[79,29079,28210],{"class":89},[79,29081,93],{"class":89},[79,29083,97],{"class":96},[79,29085,29086],{"class":89}," nvidia-docker2\n",[26,29088,29089],{"start":178},[29,29090,29091],{},"使用nvidia-ctk命令配置container runtime",[51,29093,29095],{"className":73,"code":29094,"language":75,"meta":57,"style":57},"sudo nvidia-ctk runtime configure --runtime=docker\n",[59,29096,29097],{"__ignoreMap":57},[79,29098,29099,29101,29104,29107,29110],{"class":81,"line":82},[79,29100,86],{"class":85},[79,29102,29103],{"class":89}," nvidia-ctk",[79,29105,29106],{"class":89}," runtime",[79,29108,29109],{"class":89}," configure",[79,29111,29112],{"class":96}," --runtime=docker\n",[26,29114,29115],{"start":457},[29,29116,29117],{},"重启docker服务:",[51,29119,29121],{"className":73,"code":29120,"language":75,"meta":57,"style":57},"sudo systemctl restart docker\n",[59,29122,29123],{"__ignoreMap":57},[79,29124,29125,29127,29129,29132],{"class":81,"line":82},[79,29126,86],{"class":85},[79,29128,28645],{"class":89},[79,29130,29131],{"class":89}," restart",[79,29133,28624],{"class":89},[25049,29135,29137],{"id":29136},"_3212fedora","3.2.1.2.Fedora",[26,29139,29140],{},[29,29141,29142],{},"配置存储库",[51,29144,29146],{"className":73,"code":29145,"language":75,"meta":57,"style":57},"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",[59,29147,29148,29163],{"__ignoreMap":57},[79,29149,29150,29152,29154,29156,29159,29161],{"class":81,"line":82},[79,29151,28981],{"class":85},[79,29153,29015],{"class":96},[79,29155,29018],{"class":96},[79,29157,29158],{"class":89}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[79,29160,27245],{"class":243},[79,29162,26814],{"class":96},[79,29164,29165,29167,29169],{"class":81,"line":167},[79,29166,86],{"class":85},[79,29168,28350],{"class":89},[79,29170,29171],{"class":89}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[26,29173,29174],{"start":167},[29,29175,29176],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[51,29178,29180],{"className":73,"code":29179,"language":75,"meta":57,"style":57},"# 如果是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",[59,29181,29182,29187,29201,29205,29210],{"__ignoreMap":57},[79,29183,29184],{"class":81,"line":82},[79,29185,29186],{"class":2440},"# 如果是RHEL或者Rocky（DNF4）\n",[79,29188,29189,29191,29193,29195,29198],{"class":81,"line":167},[79,29190,86],{"class":85},[79,29192,90],{"class":89},[79,29194,28546],{"class":89},[79,29196,29197],{"class":96}," --add-repo",[79,29199,29200],{"class":89}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[79,29202,29203],{"class":81,"line":178},[79,29204,454],{"emptyLinePlaceholder":453},[79,29206,29207],{"class":81,"line":457},[79,29208,29209],{"class":2440},"# 如果是Feodra41+（DNF5）\n",[79,29211,29212,29214,29216,29218,29220],{"class":81,"line":462},[79,29213,86],{"class":85},[79,29215,90],{"class":89},[79,29217,28546],{"class":89},[79,29219,28549],{"class":89},[79,29221,29222],{"class":96}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[26,29224,29225],{"start":178},[29,29226,29227],{},"安装NVIDIA Container Toolki包",[51,29229,29231],{"className":73,"code":29230,"language":75,"meta":57,"style":57},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[59,29232,29233,29238,29251,29255,29260],{"__ignoreMap":57},[79,29234,29235],{"class":81,"line":82},[79,29236,29237],{"class":2440},"# 如果是RHEL或者Rocky\n",[79,29239,29240,29242,29244,29246,29248],{"class":81,"line":167},[79,29241,86],{"class":85},[79,29243,90],{"class":89},[79,29245,93],{"class":89},[79,29247,97],{"class":96},[79,29249,29250],{"class":89}," nvidia-container-toolkit\n",[79,29252,29253],{"class":81,"line":178},[79,29254,454],{"emptyLinePlaceholder":453},[79,29256,29257],{"class":81,"line":457},[79,29258,29259],{"class":2440},"# 如果是Fedora\n",[79,29261,29262,29264,29266,29268,29270],{"class":81,"line":462},[79,29263,86],{"class":85},[79,29265,90],{"class":89},[79,29267,93],{"class":89},[79,29269,97],{"class":96},[79,29271,29250],{"class":89},[26,29273,29274],{"start":457},[29,29275,29276,29277,29279],{},"安装nvidia-docker2 ： 在Fedora上使用",[59,29278,28424],{},"进行安装",[51,29281,29283],{"className":73,"code":29282,"language":75,"meta":57,"style":57},"sudo dnf install -y nvidia-docker2\n",[59,29284,29285],{"__ignoreMap":57},[79,29286,29287,29289,29291,29293,29295],{"class":81,"line":82},[79,29288,86],{"class":85},[79,29290,90],{"class":89},[79,29292,93],{"class":89},[79,29294,97],{"class":96},[79,29296,29086],{"class":89},[26,29298,29299],{"start":462},[29,29300,29301],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[51,29303,29304],{"className":73,"code":29094,"language":75,"meta":57,"style":57},[59,29305,29306],{"__ignoreMap":57},[79,29307,29308,29310,29312,29314,29316],{"class":81,"line":82},[79,29309,86],{"class":85},[79,29311,29103],{"class":89},[79,29313,29106],{"class":89},[79,29315,29109],{"class":89},[79,29317,29112],{"class":96},[26,29319,29320],{"start":474},[29,29321,29322],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[51,29324,29325],{"className":73,"code":29120,"language":75,"meta":57,"style":57},[59,29326,29327],{"__ignoreMap":57},[79,29328,29329,29331,29333,29335],{"class":81,"line":82},[79,29330,86],{"class":85},[79,29332,28645],{"class":89},[79,29334,29131],{"class":89},[79,29336,28624],{"class":89},[19,29338,29339],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,29341,29342],{},"方法：",[19,29344,29345],{},"1️⃣nvidia-smi",[19,29347,29348],{},"2️⃣运行nvidia cuda 容器进行测试",[51,29350,29352],{"className":73,"code":29351,"language":75,"meta":57,"style":57},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[59,29353,29354],{"__ignoreMap":57},[79,29355,29356,29358,29360,29363,29366,29369,29372,29375],{"class":81,"line":82},[79,29357,86],{"class":85},[79,29359,28453],{"class":89},[79,29361,29362],{"class":89}," run",[79,29364,29365],{"class":96}," --rm",[79,29367,29368],{"class":96}," --gpus",[79,29370,29371],{"class":89}," all",[79,29373,29374],{"class":89}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[79,29376,29377],{"class":89}," nvidia-smi\n",[19,29379,29380],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29382,29383],{},[3699,29384],{"alt":57,"src":29385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[265,29387,29389],{"id":29388},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29391,29392],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29394,29395],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29397,29398],{},[2614,29399,29400],{"href":29400,"rel":29401},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[26001],[19,29403,29404],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29406,29407],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29409,29410],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[2516,29412,29413,29429],{},[2519,29414,29415],{},[2522,29416,29417,29420,29423,29426],{},[2525,29418,29419],{"align":25876},"镜像类型",[2525,29421,29422],{"align":25876},"适用场景",[2525,29424,29425],{"align":25876},"示例标签",[2525,29427,29428],{"align":25876},"大小",[2563,29430,29431,29445,29459],{},[2522,29432,29433,29436,29439,29442],{},[2568,29434,29435],{"align":25876},"base",[2568,29437,29438],{"align":25876},"仅需 CUDA 运行时库",[2568,29440,29441],{"align":25876},"12.4.0-base-ubuntu22.04",[2568,29443,29444],{"align":25876},"~240MB",[2522,29446,29447,29450,29453,29456],{},[2568,29448,29449],{"align":25876},"runtime",[2568,29451,29452],{"align":25876},"部署编译后的应用（含数学库）",[2568,29454,29455],{"align":25876},"12.4.0-runtime-ubuntu22.04",[2568,29457,29458],{"align":25876},"~2GB",[2522,29460,29461,29464,29467,29470],{},[2568,29462,29463],{"align":25876},"devel",[2568,29465,29466],{"align":25876},"开发环境（含编译工具）",[2568,29468,29469],{"align":25876},"12.4.0-devel-ubuntu22.04",[2568,29471,29472],{"align":25876},"~3GB",[19,29474,29475,29476,29479],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[59,29477,29478],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29481,29482],{},[3699,29483],{"alt":57,"src":29484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29486,29487],{},"在dockerfile里就可以开头这么写：",[51,29489,29491],{"className":73,"code":29490,"language":75,"meta":57,"style":57},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[59,29492,29493,29498],{"__ignoreMap":57},[79,29494,29495],{"class":81,"line":82},[79,29496,29497],{"class":2440},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[79,29499,29500,29503],{"class":81,"line":167},[79,29501,29502],{"class":85},"FROM",[79,29504,29505],{"class":89}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[265,29507,29509],{"id":29508},"_34配置以太网","3.4.配置以太网",[19,29511,29512],{},"指定网络模式",[51,29514,29516],{"className":73,"code":29515,"language":75,"meta":57,"style":57},"--net=host \\\n",[59,29517,29518],{"__ignoreMap":57},[79,29519,29520,29523,29525,29528],{"class":81,"line":82},[79,29521,29522],{"class":239},"--net",[79,29524,244],{"class":243},[79,29526,29527],{"class":89},"host",[79,29529,26814],{"class":85},[19,29531,29532],{},"启动参数里加上这行即可。具体在下方",[19,29534,29535],{},"--net选项：指定网络模式，该选项有以下参数可选：",[3377,29537,29538,29541,29544,29547],{},[29,29539,29540],{},"--net=bridge:默认选项，表示连接到默认的网桥",[29,29542,29543],{},"--net=host:容器使用宿主机的网络",[29,29545,29546],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[29,29548,29549],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[2287,29551,29552],{},"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":57,"searchDepth":167,"depth":167,"links":29554},[29555,29556,29557,29558],{"id":28869,"depth":178,"text":28870},{"id":28936,"depth":178,"text":28937},{"id":29388,"depth":178,"text":29389},{"id":29508,"depth":178,"text":29509},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28858,"description":28866},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29565,"title":29566,"body":29567,"description":29574,"extension":2314,"meta":29580,"navigation":453,"path":29581,"seo":29582,"stem":29583,"__hash__":29584},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29568,"toc":29578},[29569,29572,29575],[10,29570,29566],{"id":29571},"_4dockerhub换源",[19,29573,29574],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29576,29577],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":57,"searchDepth":167,"depth":167,"links":29579},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29566,"description":29574},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29586,"title":29587,"body":29588,"description":57,"extension":2314,"meta":30599,"navigation":453,"path":30600,"seo":30601,"stem":30602,"__hash__":30603},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29589,"toc":30594},[29590,29593,29597,29603,29607,29610,29950,29953,29956,29959,29964,29969,29972,29975,29978,29981,30000,30003,30014,30020,30202,30212,30228,30491,30493,30517,30532,30541,30591],[10,29591,29587],{"id":29592},"_5docker命令学习",[265,29594,29596],{"id":29595},"_51参考文档","5.1.参考文档",[19,29598,29599],{},[2614,29600,29601],{"href":29601,"rel":29602},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[26001],[265,29604,29606],{"id":29605},"_52常用命令","5.2.常用命令",[19,29608,29609],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[2516,29611,29612,29625],{},[2519,29613,29614],{},[2522,29615,29616,29619,29622],{},[2525,29617,29618],{"align":25876},"命令",[2525,29620,29621],{"align":25876},"描述",[2525,29623,29624],{"align":25876},"示例",[2563,29626,29627,29638,29649,29660,29671,29682,29693,29704,29714,29725,29736,29747,29757,29768,29779,29790,29800,29810,29820,29830,29841,29852,29863,29874,29885,29896,29906,29917,29928,29939],{},[2522,29628,29629,29632,29635],{},[2568,29630,29631],{"align":25876},"docker run",[2568,29633,29634],{"align":25876},"创建并启动一个新的容器。",[2568,29636,29637],{"align":25876},"docker run -it ubuntu bash",[2522,29639,29640,29643,29646],{},[2568,29641,29642],{"align":25876},"docker build",[2568,29644,29645],{"align":25876},"通过指定的 Dockerfile 创建一个新的镜像。",[2568,29647,29648],{"align":25876},"docker build -t myimage .",[2522,29650,29651,29654,29657],{},[2568,29652,29653],{"align":25876},"docker pull",[2568,29655,29656],{"align":25876},"从 Docker 仓库拉取镜像。",[2568,29658,29659],{"align":25876},"docker pull ubuntu",[2522,29661,29662,29665,29668],{},[2568,29663,29664],{"align":25876},"docker push",[2568,29666,29667],{"align":25876},"将本地镜像推送到 Docker 仓库。",[2568,29669,29670],{"align":25876},"docker push myimage",[2522,29672,29673,29676,29679],{},[2568,29674,29675],{"align":25876},"docker stop",[2568,29677,29678],{"align":25876},"停止一个正在运行的容器。",[2568,29680,29681],{"align":25876},"docker stop container_id",[2522,29683,29684,29687,29690],{},[2568,29685,29686],{"align":25876},"docker start",[2568,29688,29689],{"align":25876},"启动一个已经存在的容器。",[2568,29691,29692],{"align":25876},"docker start container_id",[2522,29694,29695,29698,29701],{},[2568,29696,29697],{"align":25876},"docker restart",[2568,29699,29700],{"align":25876},"重新启动容器。",[2568,29702,29703],{"align":25876},"docker restart container_id",[2522,29705,29706,29709,29712],{},[2568,29707,29708],{"align":25876},"docker ps",[2568,29710,29711],{"align":25876},"列出当前正在运行的容器。",[2568,29713,29708],{"align":25876},[2522,29715,29716,29719,29722],{},[2568,29717,29718],{"align":25876},"docker rm",[2568,29720,29721],{"align":25876},"删除一个或多个停止的容器。",[2568,29723,29724],{"align":25876},"docker rm container_id",[2522,29726,29727,29730,29733],{},[2568,29728,29729],{"align":25876},"docker exec",[2568,29731,29732],{"align":25876},"在一个正在运行的容器中执行命令。",[2568,29734,29735],{"align":25876},"docker exec -it container_id bash",[2522,29737,29738,29741,29744],{},[2568,29739,29740],{"align":25876},"docker logs",[2568,29742,29743],{"align":25876},"查看容器的日志输出。",[2568,29745,29746],{"align":25876},"docker logs container_id",[2522,29748,29749,29752,29755],{},[2568,29750,29751],{"align":25876},"docker images",[2568,29753,29754],{"align":25876},"列出本地所有镜像。",[2568,29756,29751],{"align":25876},[2522,29758,29759,29762,29765],{},[2568,29760,29761],{"align":25876},"docker rmi",[2568,29763,29764],{"align":25876},"删除一个或多个镜像。",[2568,29766,29767],{"align":25876},"docker rmi myimage",[2522,29769,29770,29773,29776],{},[2568,29771,29772],{"align":25876},"docker network",[2568,29774,29775],{"align":25876},"管理 Docker 网络。",[2568,29777,29778],{"align":25876},"docker network ls",[2522,29780,29781,29784,29787],{},[2568,29782,29783],{"align":25876},"docker volume",[2568,29785,29786],{"align":25876},"管理 Docker 数据卷。",[2568,29788,29789],{"align":25876},"docker volume ls",[2522,29791,29792,29795,29798],{},[2568,29793,29794],{"align":25876},"docker-compose up",[2568,29796,29797],{"align":25876},"启动 docker-compose.yml 中定义的所有服务。",[2568,29799,29794],{"align":25876},[2522,29801,29802,29805,29808],{},[2568,29803,29804],{"align":25876},"docker-compose down",[2568,29806,29807],{"align":25876},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[2568,29809,29804],{"align":25876},[2522,29811,29812,29815,29818],{},[2568,29813,29814],{"align":25876},"docker info",[2568,29816,29817],{"align":25876},"显示 Docker 系统的详细信息。",[2568,29819,29814],{"align":25876},[2522,29821,29822,29825,29828],{},[2568,29823,29824],{"align":25876},"docker stats",[2568,29826,29827],{"align":25876},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[2568,29829,29824],{"align":25876},[2522,29831,29832,29835,29838],{},[2568,29833,29834],{"align":25876},"docker inspect",[2568,29836,29837],{"align":25876},"查看容器或镜像的详细信息（JSON 格式）。",[2568,29839,29840],{"align":25876},"docker inspect container_id",[2522,29842,29843,29846,29849],{},[2568,29844,29845],{"align":25876},"docker save",[2568,29847,29848],{"align":25876},"将一个镜像保存为 tar 文件。",[2568,29850,29851],{"align":25876},"docker save -o myimage.tar myimage",[2522,29853,29854,29857,29860],{},[2568,29855,29856],{"align":25876},"docker load",[2568,29858,29859],{"align":25876},"从 tar 文件中加载镜像。",[2568,29861,29862],{"align":25876},"docker load -i myimage.tar",[2522,29864,29865,29868,29871],{},[2568,29866,29867],{"align":25876},"docker tag",[2568,29869,29870],{"align":25876},"为镜像添加标签（tag）。",[2568,29872,29873],{"align":25876},"docker tag myimage myimage:v1",[2522,29875,29876,29879,29882],{},[2568,29877,29878],{"align":25876},"docker buildx build",[2568,29880,29881],{"align":25876},"使用 Buildx 构建多架构镜像。",[2568,29883,29884],{"align":25876},"docker buildx build -t myimage .",[2522,29886,29887,29890,29893],{},[2568,29888,29889],{"align":25876},"docker buildx create",[2568,29891,29892],{"align":25876},"创建一个新的 Buildx 构建实例。",[2568,29894,29895],{"align":25876},"docker buildx create –use",[2522,29897,29898,29901,29904],{},[2568,29899,29900],{"align":25876},"docker buildx ls",[2568,29902,29903],{"align":25876},"列出所有可用的 Buildx 构建实例。",[2568,29905,29900],{"align":25876},[2522,29907,29908,29911,29914],{},[2568,29909,29910],{"align":25876},"docker buildx use",[2568,29912,29913],{"align":25876},"设置当前的 Buildx 构建实例。",[2568,29915,29916],{"align":25876},"docker buildx use mybuilder",[2522,29918,29919,29922,29925],{},[2568,29920,29921],{"align":25876},"docker buildx bake",[2568,29923,29924],{"align":25876},"使用 Bake 文件批量构建镜像。",[2568,29926,29927],{"align":25876},"docker buildx bake -f bake.hcl",[2522,29929,29930,29933,29936],{},[2568,29931,29932],{"align":25876},"docker buildx build –push",[2568,29934,29935],{"align":25876},"构建镜像并推送到镜像仓库。",[2568,29937,29938],{"align":25876},"docker buildx build –push -t myimage .",[2522,29940,29941,29944,29947],{},[2568,29942,29943],{"align":25876},"docker buildx build –platform",[2568,29945,29946],{"align":25876},"构建镜像并为多个平台生成支持。",[2568,29948,29949],{"align":25876},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29951,29952],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29954,29955],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29957,29958],{},"docker images 可以查看已经下载的镜像",[19,29960,29961],{},[3699,29962],{"alt":57,"src":29963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29965,29966],{},[2528,29967,29968],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29970,29971],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29973,29974],{},"docker container logs 查看容器日志",[19,29976,29977],{},"docker top 查看容器里的进程",[19,29979,29980],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[51,29982,29984],{"className":73,"code":29983,"language":75,"meta":57,"style":57},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[59,29985,29986],{"__ignoreMap":57},[79,29987,29988,29991,29994,29997],{"class":81,"line":82},[79,29989,29990],{"class":85},"如：docker",[79,29992,29993],{"class":89}," cp",[79,29995,29996],{"class":89}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[79,29998,29999],{"class":89}," \u002Fmydata\u002Fnginx\n",[19,30001,30002],{},"docker run时在启动容器的时候会有几个常用的选项：",[3377,30004,30005,30008,30011],{},[29,30006,30007],{},"-d选项：表示后台运行",[29,30009,30010],{},"-P选项：随机端口映射",[29,30012,30013],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[265,30015,30017],{"id":30016},"_53run命令的参数非常重要",[2528,30018,30019],{},"5.3.run命令的参数（非常重要）",[2516,30021,30022,30035],{},[2519,30023,30024],{},[2522,30025,30026,30029,30032],{},[2525,30027,30028],{"align":25876},"参数\u002F配置",[2525,30030,30031],{"align":25876},"功能说明",[2525,30033,30034],{"align":25876},"重要性与参考依据",[2563,30036,30037,30048,30059,30070,30081,30092,30103,30114,30125,30136,30147,30158,30169,30180,30191],{},[2522,30038,30039,30042,30045],{},[2568,30040,30041],{"align":25876},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[2568,30043,30044],{"align":25876},"指定容器名称，便于后续管理",[2568,30046,30047],{"align":25876},"替代随机生成的容器名。",[2522,30049,30050,30053,30056],{},[2568,30051,30052],{"align":25876},"–gpus all",[2568,30054,30055],{"align":25876},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[2568,30057,30058],{"align":25876},"用于CUDA加速等GPU依赖任务。",[2522,30060,30061,30064,30067],{},[2568,30062,30063],{"align":25876},"-e NVIDIA_DRIVER_CAPABILITIES=all",[2568,30065,30066],{"align":25876},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[2568,30068,30069],{"align":25876},"确保容器内GPU功能完整67。",[2522,30071,30072,30075,30078],{},[2568,30073,30074],{"align":25876},"-dit",[2568,30076,30077],{"align":25876},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[2568,30079,30080],{"align":25876},"允许容器在后台运行并支持交互操作。",[2522,30082,30083,30086,30089],{},[2568,30084,30085],{"align":25876},"–privileged",[2568,30087,30088],{"align":25876},"赋予容器完全主机权限（可访问设备、内核模块等）",[2568,30090,30091],{"align":25876},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[2522,30093,30094,30097,30100],{},[2568,30095,30096],{"align":25876},"–net=host",[2568,30098,30099],{"align":25876},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[2568,30101,30102],{"align":25876},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[2522,30104,30105,30108,30111],{},[2568,30106,30107],{"align":25876},"–group-add audio–group-add video–group-add dialout",[2568,30109,30110],{"align":25876},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[2568,30112,30113],{"align":25876},"避免权限问题（如避免无法调用摄像头、麦克风）。",[2522,30115,30116,30119,30122],{},[2568,30117,30118],{"align":25876},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[2568,30120,30121],{"align":25876},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[2568,30123,30124],{"align":25876},"支持容器内运行图形界面应用（如OpenCV可视化）。",[2522,30126,30127,30130,30133],{},[2568,30128,30129],{"align":25876},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[2568,30131,30132],{"align":25876},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[2568,30134,30135],{"align":25876},"实现容器内图形显示。",[2522,30137,30138,30141,30144],{},[2568,30139,30140],{"align":25876},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[2568,30142,30143],{"align":25876},"挂载X11认证文件（只读）",[2568,30145,30146],{"align":25876},"确保容器有权连接宿主机显示服务。",[2522,30148,30149,30152,30155],{},[2568,30150,30151],{"align":25876},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[2568,30153,30154],{"align":25876},"挂载Wayland显示协议相关目录",[2568,30156,30157],{"align":25876},"支持Wayland协议的图形显示。",[2522,30159,30160,30163,30166],{},[2568,30161,30162],{"align":25876},"–ulimit nofile=1024:524288",[2568,30164,30165],{"align":25876},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[2568,30167,30168],{"align":25876},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[2522,30170,30171,30174,30177],{},[2568,30172,30173],{"align":25876},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[2568,30175,30176],{"align":25876},"挂载宿主机用户目录到容器内同名路径",[2568,30178,30179],{"align":25876},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[2522,30181,30182,30185,30188],{},[2568,30183,30184],{"align":25876},"-w \u002Fhome\u002Ftungchiahui",[2568,30186,30187],{"align":25876},"设置容器启动后的默认工作目录",[2568,30189,30190],{"align":25876},"直接进入项目路径，方便执行命令2324。",[2522,30192,30193,30196,30199],{},[2568,30194,30195],{"align":25876},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[2568,30197,30198],{"align":25876},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[2568,30200,30201],{"align":25876},"提供预配置的深度学习与机器人开发环境。",[19,30203,30204,30205,30207,30208,30211],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[59,30206,86],{},"加不加",[59,30209,30210],{},"sudo -E","都无所谓。",[19,30213,30214,30215,30217,30218,30220,30221,30224,30225,30227],{},"用户已经被加到docker组了，不用",[59,30216,86],{},"也行跑，其次，",[59,30219,86],{},"运行的话，你的",[59,30222,30223],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[59,30226,30223],{},"更不可能变了。",[51,30229,30231],{"className":73,"code":30230,"language":75,"meta":57,"style":57},"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",[59,30232,30233,30246,30256,30266,30278,30285,30292,30299,30309,30318,30327,30341,30353,30365,30374,30384,30393,30408,30441,30468,30479,30486],{"__ignoreMap":57},[79,30234,30235,30237,30239,30241,30244],{"class":81,"line":82},[79,30236,86],{"class":85},[79,30238,28453],{"class":89},[79,30240,29362],{"class":89},[79,30242,30243],{"class":96}," --name=ros_opencv_cuda",[79,30245,26814],{"class":96},[79,30247,30248,30251,30254],{"class":81,"line":167},[79,30249,30250],{"class":239},"--gpus ",[79,30252,30253],{"class":89},"all",[79,30255,26814],{"class":96},[79,30257,30258,30261,30264],{"class":81,"line":178},[79,30259,30260],{"class":239},"-e ",[79,30262,30263],{"class":89},"NVIDIA_DRIVER_CAPABILITIES=all",[79,30265,26814],{"class":96},[79,30267,30268,30270,30273,30276],{"class":81,"line":457},[79,30269,30260],{"class":239},[79,30271,30272],{"class":89},"DISPLAY=",[79,30274,30275],{"class":239},"$DISPLAY ",[79,30277,28309],{"class":96},[79,30279,30280,30283],{"class":81,"line":462},[79,30281,30282],{"class":239},"-dit ",[79,30284,28309],{"class":96},[79,30286,30287,30290],{"class":81,"line":474},[79,30288,30289],{"class":239},"--privileged ",[79,30291,28309],{"class":96},[79,30293,30294,30297],{"class":81,"line":480},[79,30295,30296],{"class":239},"--net=host ",[79,30298,28309],{"class":96},[79,30300,30301,30304,30307],{"class":81,"line":486},[79,30302,30303],{"class":239},"--group-add ",[79,30305,30306],{"class":89},"audio",[79,30308,26814],{"class":96},[79,30310,30311,30313,30316],{"class":81,"line":491},[79,30312,30303],{"class":239},[79,30314,30315],{"class":89},"video",[79,30317,26814],{"class":96},[79,30319,30320,30322,30325],{"class":81,"line":497},[79,30321,30303],{"class":239},[79,30323,30324],{"class":89},"dialout",[79,30326,26814],{"class":96},[79,30328,30329,30331,30334,30336,30339],{"class":81,"line":503},[79,30330,30260],{"class":239},[79,30332,30333],{"class":89},"XAUTHORITY=",[79,30335,30223],{"class":239},[79,30337,30338],{"class":89},"\u002F.Xauthority",[79,30340,26814],{"class":96},[79,30342,30343,30345,30348,30351],{"class":81,"line":509},[79,30344,30260],{"class":239},[79,30346,30347],{"class":89},"WAYLAND_DISPLAY=",[79,30349,30350],{"class":239},"$WAYLAND_DISPLAY ",[79,30352,28309],{"class":96},[79,30354,30355,30357,30360,30363],{"class":81,"line":514},[79,30356,30260],{"class":239},[79,30358,30359],{"class":89},"XDG_RUNTIME_DIR=",[79,30361,30362],{"class":239},"$XDG_RUNTIME_DIR ",[79,30364,28309],{"class":96},[79,30366,30367,30369,30372],{"class":81,"line":520},[79,30368,30260],{"class":239},[79,30370,30371],{"class":89},"QT_QPA_PLATFORM=xcb",[79,30373,26814],{"class":96},[79,30375,30376,30379,30382],{"class":81,"line":526},[79,30377,30378],{"class":239},"-v ",[79,30380,30381],{"class":89},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[79,30383,26814],{"class":96},[79,30385,30386,30388,30391],{"class":81,"line":532},[79,30387,30378],{"class":239},[79,30389,30390],{"class":89},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[79,30392,26814],{"class":96},[79,30394,30395,30398,30401,30403,30406],{"class":81,"line":537},[79,30396,30397],{"class":239},"-v $HOME",[79,30399,30400],{"class":89},"\u002F.Xauthority:",[79,30402,30223],{"class":239},[79,30404,30405],{"class":89},"\u002F.Xauthority:ro",[79,30407,26814],{"class":96},[79,30409,30410,30412,30415,30417,30420,30423,30425,30428,30430,30432,30434,30436,30439],{"class":81,"line":543},[79,30411,30378],{"class":239},[79,30413,30414],{"class":89},"\u002Frun\u002Fuser\u002F",[79,30416,27235],{"class":239},[79,30418,30419],{"class":85},"id",[79,30421,30422],{"class":96}," -u",[79,30424,2803],{"class":239},[79,30426,30427],{"class":89},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[79,30429,27235],{"class":239},[79,30431,30419],{"class":85},[79,30433,30422],{"class":96},[79,30435,2803],{"class":239},[79,30437,30438],{"class":89},"\u002Fwayland-0",[79,30440,26814],{"class":96},[79,30442,30443,30445,30447,30449,30451,30453,30455,30458,30460,30462,30464,30466],{"class":81,"line":549},[79,30444,30378],{"class":239},[79,30446,30414],{"class":89},[79,30448,27235],{"class":239},[79,30450,30419],{"class":85},[79,30452,30422],{"class":96},[79,30454,2803],{"class":239},[79,30456,30457],{"class":89},":\u002Frun\u002Fuser\u002F",[79,30459,27235],{"class":239},[79,30461,30419],{"class":85},[79,30463,30422],{"class":96},[79,30465,15876],{"class":239},[79,30467,28309],{"class":96},[79,30469,30470,30472,30474,30477],{"class":81,"line":555},[79,30471,30397],{"class":239},[79,30473,3232],{"class":89},[79,30475,30476],{"class":239},"$HOME ",[79,30478,28309],{"class":96},[79,30480,30481,30484],{"class":81,"line":561},[79,30482,30483],{"class":239},"-w $HOME ",[79,30485,28309],{"class":96},[79,30487,30488],{"class":81,"line":567},[79,30489,30490],{"class":239},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30492,11209],{},[26,30494,30495,30503,30506,30509],{},[29,30496,30497,15957,30499,30502],{},[59,30498,30263],{},[59,30500,30501],{},"--gpus all","没有英伟达显卡请注释。",[29,30504,30505],{},"--name后面请自己为容器起名。",[29,30507,30508],{},"最后一行仓库名称请你自己找对应的镜像填上。",[29,30510,30511,30512,1604],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25693,30513,30514],{},[2528,30515,30516],{},"请不要加",[51,30518,30520],{"className":73,"code":30519,"language":75,"meta":57,"style":57},"--ulimit nofile=1024:524288 \\\n",[59,30521,30522],{"__ignoreMap":57},[79,30523,30524,30527,30530],{"class":81,"line":82},[79,30525,30526],{"class":85},"--ulimit",[79,30528,30529],{"class":89}," nofile=1024:524288",[79,30531,26814],{"class":96},[19,30533,30534,30535,30540],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25693,30536,30537],{},[2528,30538,30539],{},"不建议","**.**",[51,30542,30544],{"className":73,"code":30543,"language":75,"meta":57,"style":57},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[59,30545,30546,30573,30582],{"__ignoreMap":57},[79,30547,30548,30551,30554,30556,30558,30560,30562,30564,30566,30569,30571],{"class":81,"line":82},[79,30549,30550],{"class":85},"--user",[79,30552,30553],{"class":239}," $(",[79,30555,30419],{"class":85},[79,30557,30422],{"class":96},[79,30559,2803],{"class":239},[79,30561,3232],{"class":89},[79,30563,27235],{"class":239},[79,30565,30419],{"class":85},[79,30567,30568],{"class":96}," -g",[79,30570,15876],{"class":239},[79,30572,28309],{"class":96},[79,30574,30575,30577,30580],{"class":81,"line":167},[79,30576,30378],{"class":239},[79,30578,30579],{"class":89},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[79,30581,26814],{"class":96},[79,30583,30584,30586,30589],{"class":81,"line":178},[79,30585,30378],{"class":239},[79,30587,30588],{"class":89},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[79,30590,26814],{"class":96},[2287,30592,30593],{},"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":57,"searchDepth":167,"depth":167,"links":30595},[30596,30597,30598],{"id":29595,"depth":178,"text":29596},{"id":29605,"depth":178,"text":29606},{"id":30016,"depth":178,"text":30019},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29587,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30605,"title":30606,"body":30607,"description":57,"extension":2314,"meta":32229,"navigation":453,"path":32230,"seo":32231,"stem":32232,"__hash__":32233},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30608,"toc":32224},[30609,30612,30616,30619,30841,30845,30849,30852,30958,30963,30966,30971,30974,30979,30982,30987,30990,31002,31005,31010,31017,31045,31052,31128,31133,31136,31159,31161,31236,31241,31244,31248,31256,31261,31266,31270,31281,31287,31290,31293,31316,31319,31322,31350,31353,31356,31821,31824,31829,31834,31838,31861,31866,31870,31874,31877,31880,31883,31910,31913,31916,31934,31937,31940,31962,31970,31975,31980,31984,31987,31990,31993,31996,32041,32044,32062,32065,32070,32073,32094,32097,32153,32156,32161,32165,32168,32175,32178,32181,32186,32189,32205,32208,32221],[10,30610,30606],{"id":30611},"_6手动创建docker镜像",[265,30613,30615],{"id":30614},"_61dockerfile","6.1.DockerFile",[19,30617,30618],{},"常用命令：",[2516,30620,30621,30632],{},[2519,30622,30623],{},[2522,30624,30625,30628,30630],{},[2525,30626,30627],{"align":25876},"指令",[2525,30629,28004],{"align":25876},[2525,30631,29624],{"align":25876},[2563,30633,30634,30644,30660,30671,30682,30693,30704,30715,30726,30740,30754,30765,30779,30790,30801,30815,30830],{},[2522,30635,30636,30638,30641],{},[2568,30637,29502],{"align":25876},[2568,30639,30640],{"align":25876},"指定基础镜像，是 Dockerfile 的起点",[2568,30642,30643],{"align":25876},"FROM ubuntu:22.04",[2522,30645,30646,30649,30652],{},[2568,30647,30648],{"align":25876},"LABEL",[2568,30650,30651],{"align":25876},"添加元数据（如作者、版本等）",[2568,30653,30654,30655,30659],{"align":25876},"LABEL maintainer=”",[2614,30656,30658],{"href":30657},"mailto:you@example.com","you@example.com","”",[2522,30661,30662,30665,30668],{},[2568,30663,30664],{"align":25876},"ENV",[2568,30666,30667],{"align":25876},"设置环境变量",[2568,30669,30670],{"align":25876},"ENV PORT=8080",[2522,30672,30673,30676,30679],{},[2568,30674,30675],{"align":25876},"ARG",[2568,30677,30678],{"align":25876},"构建参数，只在构建期间可用",[2568,30680,30681],{"align":25876},"ARG VERSION=1.0",[2522,30683,30684,30687,30690],{},[2568,30685,30686],{"align":25876},"RUN",[2568,30688,30689],{"align":25876},"构建镜像时运行命令",[2568,30691,30692],{"align":25876},"RUN apt-get update && apt-get install -y curl",[2522,30694,30695,30698,30701],{},[2568,30696,30697],{"align":25876},"COPY",[2568,30699,30700],{"align":25876},"复制文件到镜像中",[2568,30702,30703],{"align":25876},"COPY . \u002Fapp",[2522,30705,30706,30709,30712],{},[2568,30707,30708],{"align":25876},"ADD",[2568,30710,30711],{"align":25876},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[2568,30713,30714],{"align":25876},"ADD archive.tar.gz \u002Fdata\u002F",[2522,30716,30717,30720,30723],{},[2568,30718,30719],{"align":25876},"WORKDIR",[2568,30721,30722],{"align":25876},"设置工作目录",[2568,30724,30725],{"align":25876},"WORKDIR \u002Fopt",[2522,30727,30728,30731,30734],{},[2568,30729,30730],{"align":25876},"CMD",[2568,30732,30733],{"align":25876},"设置容器启动时默认命令（可被 docker run 覆盖）",[2568,30735,30736,30737],{"align":25876},"CMD ",[79,30738,30739],{},"“node”, “index.js”",[2522,30741,30742,30745,30748],{},[2568,30743,30744],{"align":25876},"ENTRYPOINT",[2568,30746,30747],{"align":25876},"设置容器启动时固定命令（通常用于 CLI 工具等）",[2568,30749,30750,30751],{"align":25876},"ENTRYPOINT ",[79,30752,30753],{},"“python3”",[2522,30755,30756,30759,30762],{},[2568,30757,30758],{"align":25876},"EXPOSE",[2568,30760,30761],{"align":25876},"声明镜像内服务监听的端口（不会自动映射）",[2568,30763,30764],{"align":25876},"EXPOSE 80",[2522,30766,30767,30770,30773],{},[2568,30768,30769],{"align":25876},"VOLUME",[2568,30771,30772],{"align":25876},"声明数据卷挂载点",[2568,30774,30775,30776],{"align":25876},"VOLUME ",[79,30777,30778],{},"“\u002Fdata”",[2522,30780,30781,30784,30787],{},[2568,30782,30783],{"align":25876},"USER",[2568,30785,30786],{"align":25876},"设置后续命令执行的用户",[2568,30788,30789],{"align":25876},"USER appuser",[2522,30791,30792,30795,30798],{},[2568,30793,30794],{"align":25876},"ONBUILD",[2568,30796,30797],{"align":25876},"当镜像作为其他镜像基础镜像时触发的构建指令",[2568,30799,30800],{"align":25876},"ONBUILD COPY . \u002Fsrc",[2522,30802,30803,30806,30809],{},[2568,30804,30805],{"align":25876},"SHELL",[2568,30807,30808],{"align":25876},"更改默认 shell，比如将 sh -c 改为 bash -c",[2568,30810,30811,30812],{"align":25876},"SHELL ",[79,30813,30814],{},"“\u002Fbin\u002Fbash”, “-c”",[2522,30816,30817,30820,30823],{},[2568,30818,30819],{"align":25876},"HEALTHCHECK",[2568,30821,30822],{"align":25876},"定义容器运行时的健康检查命令",[2568,30824,30825,30826],{"align":25876},"`HEALTHCHECK CMD curl –fail ",[2614,30827,30828],{"href":30828,"rel":30829},"http:\u002F\u002Flocalhost:8080",[26001],[2522,30831,30832,30835,30838],{},[2568,30833,30834],{"align":25876},"STOPSIGNAL",[2568,30836,30837],{"align":25876},"容器停止时发送的信号",[2568,30839,30840],{"align":25876},"STOPSIGNAL SIGKILL",[265,30842,30844],{"id":30843},"_62自己创建容器","6.2.自己创建容器",[24137,30846,30848],{"id":30847},"_621手动创建","6.2.1.手动创建",[19,30850,30851],{},"在x86电脑上编译x86的：",[51,30853,30855],{"className":73,"code":30854,"language":75,"meta":57,"style":57},"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",[59,30856,30857,30873,30877,30890,30894,30907,30911,30924,30928,30941,30945],{"__ignoreMap":57},[79,30858,30859,30861,30864,30867,30870],{"class":81,"line":82},[79,30860,28685],{"class":85},[79,30862,30863],{"class":89}," build",[79,30865,30866],{"class":96}," -t",[79,30868,30869],{"class":89}," ros-melodic-cuda118-cudnn8-bionic:latest",[79,30871,30872],{"class":89}," .\n",[79,30874,30875],{"class":81,"line":167},[79,30876,454],{"emptyLinePlaceholder":453},[79,30878,30879,30881,30883,30885,30888],{"class":81,"line":178},[79,30880,28685],{"class":85},[79,30882,30863],{"class":89},[79,30884,30866],{"class":96},[79,30886,30887],{"class":89}," ros-noetic-focal:latest",[79,30889,30872],{"class":89},[79,30891,30892],{"class":81,"line":457},[79,30893,454],{"emptyLinePlaceholder":453},[79,30895,30896,30898,30900,30902,30905],{"class":81,"line":462},[79,30897,28685],{"class":85},[79,30899,30863],{"class":89},[79,30901,30866],{"class":96},[79,30903,30904],{"class":89}," ros-humble-jammy:latest",[79,30906,30872],{"class":89},[79,30908,30909],{"class":81,"line":474},[79,30910,454],{"emptyLinePlaceholder":453},[79,30912,30913,30915,30917,30919,30922],{"class":81,"line":480},[79,30914,28685],{"class":85},[79,30916,30863],{"class":89},[79,30918,30866],{"class":96},[79,30920,30921],{"class":89}," ros-jazzy-noble:latest",[79,30923,30872],{"class":89},[79,30925,30926],{"class":81,"line":486},[79,30927,454],{"emptyLinePlaceholder":453},[79,30929,30930,30932,30934,30936,30939],{"class":81,"line":491},[79,30931,28685],{"class":85},[79,30933,30863],{"class":89},[79,30935,30866],{"class":96},[79,30937,30938],{"class":89}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[79,30940,30872],{"class":89},[79,30942,30943],{"class":81,"line":497},[79,30944,454],{"emptyLinePlaceholder":453},[79,30946,30947,30949,30951,30953,30956],{"class":81,"line":503},[79,30948,28685],{"class":85},[79,30950,30863],{"class":89},[79,30952,30866],{"class":96},[79,30954,30955],{"class":89}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[79,30957,30872],{"class":89},[19,30959,30960],{},[3699,30961],{"alt":57,"src":30962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30964,30965],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30967,30968],{},[3699,30969],{"alt":57,"src":30970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30972,30973],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[26,30975,30976],{},[29,30977,30978],{},"创建 Docker Hub 账户",[19,30980,30981],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[26,30983,30984],{"start":167},[29,30985,30986],{},"登录 Docker Hub",[19,30988,30989],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[51,30991,30993],{"className":73,"code":30992,"language":75,"meta":57,"style":57},"docker login\n",[59,30994,30995],{"__ignoreMap":57},[79,30996,30997,30999],{"class":81,"line":82},[79,30998,28685],{"class":85},[79,31000,31001],{"class":89}," login\n",[19,31003,31004],{},"输入你的 Docker Hub 用户名和密码进行验证。",[26,31006,31007],{},[29,31008,31009],{},"为你的镜像打标签",[19,31011,31012,31013,31016],{},"Docker Hub 使用 ",[59,31014,31015],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[51,31018,31020],{"className":73,"code":31019,"language":75,"meta":57,"style":57},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[59,31021,31022],{"__ignoreMap":57},[79,31023,31024,31026,31029,31031,31034,31037,31040,31042],{"class":81,"line":82},[79,31025,28685],{"class":85},[79,31027,31028],{"class":89}," tag",[79,31030,30921],{"class":89},[79,31032,31033],{"class":243}," \u003C",[79,31035,31036],{"class":89},"你的用户",[79,31038,31039],{"class":239},"名",[79,31041,3330],{"class":243},[79,31043,31044],{"class":89},"\u002Fros-jazzy-noble:latest\n",[19,31046,31047,31048,31051],{},"例如，如果你的 Docker Hub 用户名是 ",[59,31049,31050],{},"tungchiahui","，你应该执行：",[51,31053,31055],{"className":73,"code":31054,"language":75,"meta":57,"style":57},"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",[59,31056,31057,31068,31072,31083,31087,31098,31102,31113,31117],{"__ignoreMap":57},[79,31058,31059,31061,31063,31065],{"class":81,"line":82},[79,31060,28685],{"class":85},[79,31062,31028],{"class":89},[79,31064,30887],{"class":89},[79,31066,31067],{"class":89}," tungchiahui\u002Fros-noetic-focal:latest\n",[79,31069,31070],{"class":81,"line":167},[79,31071,454],{"emptyLinePlaceholder":453},[79,31073,31074,31076,31078,31080],{"class":81,"line":178},[79,31075,28685],{"class":85},[79,31077,31028],{"class":89},[79,31079,30904],{"class":89},[79,31081,31082],{"class":89}," tungchiahui\u002Fros-humble-jammy:latest\n",[79,31084,31085],{"class":81,"line":457},[79,31086,454],{"emptyLinePlaceholder":453},[79,31088,31089,31091,31093,31095],{"class":81,"line":462},[79,31090,28685],{"class":85},[79,31092,31028],{"class":89},[79,31094,30921],{"class":89},[79,31096,31097],{"class":89}," tungchiahui\u002Fros-jazzy-noble:latest\n",[79,31099,31100],{"class":81,"line":474},[79,31101,454],{"emptyLinePlaceholder":453},[79,31103,31104,31106,31108,31110],{"class":81,"line":480},[79,31105,28685],{"class":85},[79,31107,31028],{"class":89},[79,31109,30938],{"class":89},[79,31111,31112],{"class":89}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[79,31114,31115],{"class":81,"line":486},[79,31116,454],{"emptyLinePlaceholder":453},[79,31118,31119,31121,31123,31125],{"class":81,"line":491},[79,31120,28685],{"class":85},[79,31122,31028],{"class":89},[79,31124,30955],{"class":89},[79,31126,31127],{"class":89}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[26,31129,31130],{"start":167},[29,31131,31132],{},"推送镜像到 Docker Hub",[19,31134,31135],{},"使用以下命令将镜像推送到 Docker Hub：",[51,31137,31139],{"className":73,"code":31138,"language":75,"meta":57,"style":57},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[59,31140,31141],{"__ignoreMap":57},[79,31142,31143,31145,31148,31150,31152,31154,31156],{"class":81,"line":82},[79,31144,28685],{"class":85},[79,31146,31147],{"class":89}," push",[79,31149,31033],{"class":243},[79,31151,31036],{"class":89},[79,31153,31039],{"class":239},[79,31155,3330],{"class":243},[79,31157,31158],{"class":89},"\u002Fros-noetic-jazzy-noble:latest\n",[19,31160,1789],{},[51,31162,31164],{"className":73,"code":31163,"language":75,"meta":57,"style":57},"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",[59,31165,31166,31174,31178,31186,31190,31198,31202,31211,31215,31223,31227],{"__ignoreMap":57},[79,31167,31168,31170,31172],{"class":81,"line":82},[79,31169,28685],{"class":85},[79,31171,31147],{"class":89},[79,31173,31067],{"class":89},[79,31175,31176],{"class":81,"line":167},[79,31177,454],{"emptyLinePlaceholder":453},[79,31179,31180,31182,31184],{"class":81,"line":178},[79,31181,28685],{"class":85},[79,31183,31147],{"class":89},[79,31185,31082],{"class":89},[79,31187,31188],{"class":81,"line":457},[79,31189,454],{"emptyLinePlaceholder":453},[79,31191,31192,31194,31196],{"class":81,"line":462},[79,31193,28685],{"class":85},[79,31195,31147],{"class":89},[79,31197,31097],{"class":89},[79,31199,31200],{"class":81,"line":474},[79,31201,454],{"emptyLinePlaceholder":453},[79,31203,31204,31206,31208],{"class":81,"line":480},[79,31205,28685],{"class":85},[79,31207,31147],{"class":89},[79,31209,31210],{"class":89}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[79,31212,31213],{"class":81,"line":486},[79,31214,454],{"emptyLinePlaceholder":453},[79,31216,31217,31219,31221],{"class":81,"line":491},[79,31218,28685],{"class":85},[79,31220,31147],{"class":89},[79,31222,31127],{"class":89},[79,31224,31225],{"class":81,"line":497},[79,31226,454],{"emptyLinePlaceholder":453},[79,31228,31229,31231,31233],{"class":81,"line":503},[79,31230,28685],{"class":85},[79,31232,31147],{"class":89},[79,31234,31235],{"class":89}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[26,31237,31238],{"start":178},[29,31239,31240],{},"验证推送成功",[19,31242,31243],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,31245,31246],{},[2528,31247,5986],{},[3377,31249,31250,31253],{},[29,31251,31252],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[29,31254,31255],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,31257,31258],{},[3699,31259],{"alt":57,"src":31260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,31262,31263],{},[3699,31264],{"alt":57,"src":31265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[24137,31267,31269],{"id":31268},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,31271,31272,31273,31276,31277,31280],{},"如果您想在 ",[2528,31274,31275],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[2528,31278,31279],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,31282,31283,31284],{},"1. ",[2528,31285,31286],{},"启用 Docker 跨平台构建",[19,31288,31289],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,31291,31292],{},"第一步：启用 buildx（只需执行一次）",[51,31294,31296],{"className":73,"code":31295,"language":75,"meta":57,"style":57},"docker buildx create --name multiarch_builder --use\n",[59,31297,31298],{"__ignoreMap":57},[79,31299,31300,31302,31305,31307,31310,31313],{"class":81,"line":82},[79,31301,28685],{"class":85},[79,31303,31304],{"class":89}," buildx",[79,31306,149],{"class":89},[79,31308,31309],{"class":96}," --name",[79,31311,31312],{"class":89}," multiarch_builder",[79,31314,31315],{"class":96}," --use\n",[19,31317,31318],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,31320,31321],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[51,31323,31325],{"className":73,"code":31324,"language":75,"meta":57,"style":57},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[59,31326,31327],{"__ignoreMap":57},[79,31328,31329,31331,31333,31335,31338,31341,31344,31347],{"class":81,"line":82},[79,31330,28685],{"class":85},[79,31332,29362],{"class":89},[79,31334,29365],{"class":96},[79,31336,31337],{"class":96}," --privileged",[79,31339,31340],{"class":89}," multiarch\u002Fqemu-user-static",[79,31342,31343],{"class":96}," --reset",[79,31345,31346],{"class":96}," -p",[79,31348,31349],{"class":89}," yes\n",[19,31351,31352],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31354,31355],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[51,31357,31359],{"className":73,"code":31358,"language":75,"meta":57,"style":57},"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",[59,31360,31361,31403,31407,31412,31422,31432,31441,31447,31451,31455,31465,31473,31482,31488,31492,31496,31506,31514,31523,31529,31533,31537,31547,31555,31564,31570,31574,31578,31588,31596,31605,31611,31615,31619,31629,31637,31646,31652,31656,31660,31670,31678,31687,31693,31697,31701,31711,31719,31728,31734,31738,31742,31752,31760,31769,31775,31779,31783,31794,31802,31811,31817],{"__ignoreMap":57},[79,31362,31363,31365,31367,31369,31372,31375,31377,31379,31382,31384,31386,31388,31390,31393,31396,31398,31401],{"class":81,"line":82},[79,31364,28685],{"class":85},[79,31366,31304],{"class":89},[79,31368,30863],{"class":89},[79,31370,31371],{"class":96}," --platform",[79,31373,31374],{"class":89}," linux\u002Famd64,linux\u002Farm64",[79,31376,30866],{"class":96},[79,31378,31033],{"class":243},[79,31380,31381],{"class":89},"你的镜像",[79,31383,31039],{"class":239},[79,31385,3330],{"class":243},[79,31387,3232],{"class":89},[79,31389,392],{"class":243},[79,31391,31392],{"class":89},"标",[79,31394,31395],{"class":239},"签",[79,31397,3330],{"class":243},[79,31399,31400],{"class":96}," --push",[79,31402,30872],{"class":89},[79,31404,31405],{"class":81,"line":167},[79,31406,454],{"emptyLinePlaceholder":453},[79,31408,31409],{"class":81,"line":178},[79,31410,31411],{"class":2440},"# 例子：\n",[79,31413,31414,31416,31418,31420],{"class":81,"line":457},[79,31415,28685],{"class":85},[79,31417,31304],{"class":89},[79,31419,30863],{"class":89},[79,31421,26814],{"class":96},[79,31423,31424,31427,31430],{"class":81,"line":462},[79,31425,31426],{"class":239},"--platform ",[79,31428,31429],{"class":89},"linux\u002Famd64,linux\u002Farm64",[79,31431,26814],{"class":96},[79,31433,31434,31436,31439],{"class":81,"line":474},[79,31435,30866],{"class":96},[79,31437,31438],{"class":89}," tungchiahui\u002Fros:noetic-focal",[79,31440,26814],{"class":96},[79,31442,31443,31445],{"class":81,"line":480},[79,31444,31400],{"class":96},[79,31446,26814],{"class":96},[79,31448,31449],{"class":81,"line":486},[79,31450,30872],{"class":89},[79,31452,31453],{"class":81,"line":491},[79,31454,454],{"emptyLinePlaceholder":453},[79,31456,31457,31459,31461,31463],{"class":81,"line":497},[79,31458,28685],{"class":85},[79,31460,31304],{"class":89},[79,31462,30863],{"class":89},[79,31464,26814],{"class":96},[79,31466,31467,31469,31471],{"class":81,"line":503},[79,31468,31426],{"class":239},[79,31470,31429],{"class":89},[79,31472,26814],{"class":96},[79,31474,31475,31477,31480],{"class":81,"line":509},[79,31476,30866],{"class":96},[79,31478,31479],{"class":89}," tungchiahui\u002Fros:humble-jammy",[79,31481,26814],{"class":96},[79,31483,31484,31486],{"class":81,"line":514},[79,31485,31400],{"class":96},[79,31487,26814],{"class":96},[79,31489,31490],{"class":81,"line":520},[79,31491,30872],{"class":89},[79,31493,31494],{"class":81,"line":526},[79,31495,454],{"emptyLinePlaceholder":453},[79,31497,31498,31500,31502,31504],{"class":81,"line":532},[79,31499,28685],{"class":85},[79,31501,31304],{"class":89},[79,31503,30863],{"class":89},[79,31505,26814],{"class":96},[79,31507,31508,31510,31512],{"class":81,"line":537},[79,31509,31426],{"class":239},[79,31511,31429],{"class":89},[79,31513,26814],{"class":96},[79,31515,31516,31518,31521],{"class":81,"line":543},[79,31517,30866],{"class":96},[79,31519,31520],{"class":89}," tungchiahui\u002Fros:jazzy-noble",[79,31522,26814],{"class":96},[79,31524,31525,31527],{"class":81,"line":549},[79,31526,31400],{"class":96},[79,31528,26814],{"class":96},[79,31530,31531],{"class":81,"line":555},[79,31532,30872],{"class":89},[79,31534,31535],{"class":81,"line":561},[79,31536,454],{"emptyLinePlaceholder":453},[79,31538,31539,31541,31543,31545],{"class":81,"line":567},[79,31540,28453],{"class":85},[79,31542,31304],{"class":89},[79,31544,30863],{"class":89},[79,31546,26814],{"class":96},[79,31548,31549,31551,31553],{"class":81,"line":573},[79,31550,31426],{"class":239},[79,31552,31429],{"class":89},[79,31554,26814],{"class":96},[79,31556,31557,31559,31562],{"class":81,"line":579},[79,31558,30866],{"class":96},[79,31560,31561],{"class":89}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[79,31563,26814],{"class":96},[79,31565,31566,31568],{"class":81,"line":584},[79,31567,31400],{"class":96},[79,31569,26814],{"class":96},[79,31571,31572],{"class":81,"line":590},[79,31573,30872],{"class":89},[79,31575,31576],{"class":81,"line":596},[79,31577,454],{"emptyLinePlaceholder":453},[79,31579,31580,31582,31584,31586],{"class":81,"line":602},[79,31581,28685],{"class":85},[79,31583,31304],{"class":89},[79,31585,30863],{"class":89},[79,31587,26814],{"class":96},[79,31589,31590,31592,31594],{"class":81,"line":608},[79,31591,31426],{"class":239},[79,31593,31429],{"class":89},[79,31595,26814],{"class":96},[79,31597,31598,31600,31603],{"class":81,"line":614},[79,31599,30866],{"class":96},[79,31601,31602],{"class":89}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[79,31604,26814],{"class":96},[79,31606,31607,31609],{"class":81,"line":620},[79,31608,31400],{"class":96},[79,31610,26814],{"class":96},[79,31612,31613],{"class":81,"line":625},[79,31614,30872],{"class":89},[79,31616,31617],{"class":81,"line":630},[79,31618,454],{"emptyLinePlaceholder":453},[79,31620,31621,31623,31625,31627],{"class":81,"line":648},[79,31622,28453],{"class":85},[79,31624,31304],{"class":89},[79,31626,30863],{"class":89},[79,31628,26814],{"class":96},[79,31630,31631,31633,31635],{"class":81,"line":659},[79,31632,31426],{"class":239},[79,31634,31429],{"class":89},[79,31636,26814],{"class":96},[79,31638,31639,31641,31644],{"class":81,"line":676},[79,31640,30866],{"class":96},[79,31642,31643],{"class":89}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[79,31645,26814],{"class":96},[79,31647,31648,31650],{"class":81,"line":708},[79,31649,31400],{"class":96},[79,31651,26814],{"class":96},[79,31653,31654],{"class":81,"line":717},[79,31655,30872],{"class":89},[79,31657,31658],{"class":81,"line":722},[79,31659,454],{"emptyLinePlaceholder":453},[79,31661,31662,31664,31666,31668],{"class":81,"line":727},[79,31663,28685],{"class":85},[79,31665,31304],{"class":89},[79,31667,30863],{"class":89},[79,31669,26814],{"class":96},[79,31671,31672,31674,31676],{"class":81,"line":738},[79,31673,31426],{"class":239},[79,31675,31429],{"class":89},[79,31677,26814],{"class":96},[79,31679,31680,31682,31685],{"class":81,"line":753},[79,31681,30866],{"class":96},[79,31683,31684],{"class":89}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[79,31686,26814],{"class":96},[79,31688,31689,31691],{"class":81,"line":768},[79,31690,31400],{"class":96},[79,31692,26814],{"class":96},[79,31694,31695],{"class":81,"line":776},[79,31696,30872],{"class":89},[79,31698,31699],{"class":81,"line":781},[79,31700,454],{"emptyLinePlaceholder":453},[79,31702,31703,31705,31707,31709],{"class":81,"line":786},[79,31704,28685],{"class":85},[79,31706,31304],{"class":89},[79,31708,30863],{"class":89},[79,31710,26814],{"class":96},[79,31712,31713,31715,31717],{"class":81,"line":802},[79,31714,31426],{"class":239},[79,31716,31429],{"class":89},[79,31718,26814],{"class":96},[79,31720,31721,31723,31726],{"class":81,"line":815},[79,31722,30866],{"class":96},[79,31724,31725],{"class":89}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[79,31727,26814],{"class":96},[79,31729,31730,31732],{"class":81,"line":828},[79,31731,31400],{"class":96},[79,31733,26814],{"class":96},[79,31735,31736],{"class":81,"line":842},[79,31737,30872],{"class":89},[79,31739,31740],{"class":81,"line":859},[79,31741,454],{"emptyLinePlaceholder":453},[79,31743,31744,31746,31748,31750],{"class":81,"line":878},[79,31745,28453],{"class":85},[79,31747,31304],{"class":89},[79,31749,30863],{"class":89},[79,31751,26814],{"class":96},[79,31753,31754,31756,31758],{"class":81,"line":883},[79,31755,31426],{"class":239},[79,31757,31429],{"class":89},[79,31759,26814],{"class":96},[79,31761,31762,31764,31767],{"class":81,"line":888},[79,31763,30866],{"class":96},[79,31765,31766],{"class":89}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[79,31768,26814],{"class":96},[79,31770,31771,31773],{"class":81,"line":904},[79,31772,31400],{"class":96},[79,31774,26814],{"class":96},[79,31776,31777],{"class":81,"line":919},[79,31778,30872],{"class":89},[79,31780,31781],{"class":81,"line":930},[79,31782,454],{"emptyLinePlaceholder":453},[79,31784,31785,31788,31790,31792],{"class":81,"line":941},[79,31786,31787],{"class":85},"  docker",[79,31789,31304],{"class":89},[79,31791,30863],{"class":89},[79,31793,26814],{"class":96},[79,31795,31796,31798,31800],{"class":81,"line":946},[79,31797,31426],{"class":239},[79,31799,31429],{"class":89},[79,31801,26814],{"class":96},[79,31803,31804,31806,31809],{"class":81,"line":969},[79,31805,30866],{"class":96},[79,31807,31808],{"class":89}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[79,31810,26814],{"class":96},[79,31812,31813,31815],{"class":81,"line":975},[79,31814,31400],{"class":96},[79,31816,26814],{"class":96},[79,31818,31819],{"class":81,"line":989},[79,31820,30872],{"class":89},[19,31822,31823],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31825,31826],{},[3699,31827],{"alt":57,"src":31828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31830,31831],{},[3699,31832],{"alt":57,"src":31833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[24137,31835,31837],{"id":31836},"_623清除构建缓存","6.2.3.清除构建缓存",[51,31839,31841],{"className":73,"code":31840,"language":75,"meta":57,"style":57},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[59,31842,31843,31848],{"__ignoreMap":57},[79,31844,31845],{"class":81,"line":82},[79,31846,31847],{"class":2440},"# 清理BuildKit构建缓存\n",[79,31849,31850,31852,31855,31858],{"class":81,"line":167},[79,31851,28685],{"class":85},[79,31853,31854],{"class":89}," builder",[79,31856,31857],{"class":89}," prune",[79,31859,31860],{"class":96}," -f\n",[19,31862,31863],{},[3699,31864],{"alt":57,"src":31865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[265,31867,31869],{"id":31868},"_63补充","6.3.补充",[24137,31871,31873],{"id":31872},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31875,31876],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31878,31879],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31881,31882],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[51,31884,31886],{"className":73,"code":31885,"language":75,"meta":57,"style":57},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[59,31887,31888,31895],{"__ignoreMap":57},[79,31889,31890,31892],{"class":81,"line":82},[79,31891,29502],{"class":85},[79,31893,31894],{"class":89}," nginx\n",[79,31896,31897,31899,31902,31905,31907],{"class":81,"line":167},[79,31898,30686],{"class":85},[79,31900,31901],{"class":89}," echo",[79,31903,31904],{"class":89}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[79,31906,28356],{"class":243},[79,31908,31909],{"class":89}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31911,31912],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31914,31915],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[51,31917,31919],{"className":73,"code":31918,"language":75,"meta":57,"style":57},"docker build -t nginx:tuling .\n",[59,31920,31921],{"__ignoreMap":57},[79,31922,31923,31925,31927,31929,31932],{"class":81,"line":82},[79,31924,28685],{"class":85},[79,31926,30863],{"class":89},[79,31928,30866],{"class":96},[79,31930,31931],{"class":89}," nginx:tuling",[79,31933,30872],{"class":89},[19,31935,31936],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31938,31939],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[51,31941,31943],{"className":73,"code":31942,"language":75,"meta":57,"style":57},"docker run -d -p 92:80 nginx:tuling\n",[59,31944,31945],{"__ignoreMap":57},[79,31946,31947,31949,31951,31954,31956,31959],{"class":81,"line":82},[79,31948,28685],{"class":85},[79,31950,29362],{"class":89},[79,31952,31953],{"class":96}," -d",[79,31955,31346],{"class":96},[79,31957,31958],{"class":89}," 92:80",[79,31960,31961],{"class":89}," nginx:tuling\n",[19,31963,31964,31965],{},"4、访问 ",[2614,31966,31969],{"href":31967,"rel":31968},"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",[26001],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31971,31972],{},[3699,31973],{"alt":57,"src":31974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31976,31977],{},[3699,31978],{"alt":57,"src":31979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[24137,31981,31983],{"id":31982},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31985,31986],{},"只需要知道大体流程即可",[19,31988,31989],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31991,31992],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31994,31995],{},"2、在Dockerfile中添加以下内容",[51,31997,31999],{"className":28225,"code":31998,"language":28227,"meta":57,"style":57},"# 基于哪个镜像\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",[59,32000,32001,32006,32011,32016,32021,32026,32031,32036],{"__ignoreMap":57},[79,32002,32003],{"class":81,"line":82},[79,32004,32005],{},"# 基于哪个镜像\n",[79,32007,32008],{"class":81,"line":167},[79,32009,32010],{},"From java:8\n",[79,32012,32013],{"class":81,"line":178},[79,32014,32015],{},"# 复制文件到容器\n",[79,32017,32018],{"class":81,"line":457},[79,32019,32020],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[79,32022,32023],{"class":81,"line":462},[79,32024,32025],{},"# 声明需要暴露的端口\n",[79,32027,32028],{"class":81,"line":474},[79,32029,32030],{},"EXPOSE 8877\n",[79,32032,32033],{"class":81,"line":480},[79,32034,32035],{},"# 配置容器启动后执行的命令\n",[79,32037,32038],{"class":81,"line":486},[79,32039,32040],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,32042,32043],{},"3、使用docker build命令构建镜像",[51,32045,32047],{"className":73,"code":32046,"language":75,"meta":57,"style":57},"docker build -t tulingmall-member:0.0.5 .\n",[59,32048,32049],{"__ignoreMap":57},[79,32050,32051,32053,32055,32057,32060],{"class":81,"line":82},[79,32052,28685],{"class":85},[79,32054,30863],{"class":89},[79,32056,30866],{"class":96},[79,32058,32059],{"class":89}," tulingmall-member:0.0.5",[79,32061,30872],{"class":89},[19,32063,32064],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,32066,32067],{},[3699,32068],{"alt":57,"src":32069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,32071,32072],{},"4、启动镜像，加-d可在后台启动",[51,32074,32076],{"className":73,"code":32075,"language":75,"meta":57,"style":57},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[59,32077,32078],{"__ignoreMap":57},[79,32079,32080,32082,32084,32086,32088,32091],{"class":81,"line":82},[79,32081,28685],{"class":85},[79,32083,29362],{"class":89},[79,32085,31953],{"class":96},[79,32087,31346],{"class":96},[79,32089,32090],{"class":89}," 8877:8877",[79,32092,32093],{"class":89}," tulingmall-member:0.0.5\n",[19,32095,32096],{},"加上JVM参数：",[51,32098,32100],{"className":73,"code":32099,"language":75,"meta":57,"style":57},"# --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",[59,32101,32102,32107,32122,32132,32141,32148],{"__ignoreMap":57},[79,32103,32104],{"class":81,"line":82},[79,32105,32106],{"class":2440},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[79,32108,32109,32111,32113,32116,32118,32120],{"class":81,"line":167},[79,32110,28685],{"class":85},[79,32112,29362],{"class":89},[79,32114,32115],{"class":96},"  -d",[79,32117,31346],{"class":96},[79,32119,32090],{"class":89},[79,32121,26814],{"class":96},[79,32123,32124,32126,32129],{"class":81,"line":178},[79,32125,30260],{"class":239},[79,32127,32128],{"class":89},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[79,32130,32131],{"class":96},"  \\\n",[79,32133,32134,32136,32139],{"class":81,"line":457},[79,32135,30260],{"class":239},[79,32137,32138],{"class":89},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[79,32140,32131],{"class":96},[79,32142,32143,32146],{"class":81,"line":462},[79,32144,32145],{"class":239},"--cap-add=SYS_PTRACE  ",[79,32147,28309],{"class":96},[79,32149,32150],{"class":81,"line":474},[79,32151,32152],{"class":239},"tulingmall-member:0.0.5\n",[19,32154,32155],{},"5、访问会员服务接口",[19,32157,32158],{},[3699,32159],{"alt":57,"src":32160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[24137,32162,32164],{"id":32163},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,32166,32167],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,32169,32170,32171],{},"阿里云docker镜像仓库：",[2614,32172,32173],{"href":32173,"rel":32174},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[26001],[19,32176,32177],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,32179,32180],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,32182,32183],{},[3699,32184],{"alt":57,"src":32185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,32187,32188],{},"要把镜像推送到镜像仓库",[51,32190,32192],{"className":73,"code":32191,"language":75,"meta":57,"style":57},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[59,32193,32194],{"__ignoreMap":57},[79,32195,32196,32198,32200,32202],{"class":81,"line":82},[79,32197,28685],{"class":85},[79,32199,31028],{"class":89},[79,32201,32059],{"class":89},[79,32203,32204],{"class":89}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,32206,32207],{},"最后将镜像推送到远程仓库",[51,32209,32211],{"className":73,"code":32210,"language":75,"meta":57,"style":57},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[59,32212,32213],{"__ignoreMap":57},[79,32214,32215,32217,32219],{"class":81,"line":82},[79,32216,28685],{"class":85},[79,32218,31147],{"class":89},[79,32220,32204],{"class":89},[2287,32222,32223],{},"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":57,"searchDepth":167,"depth":167,"links":32225},[32226,32227,32228],{"id":30614,"depth":178,"text":30615},{"id":30843,"depth":178,"text":30844},{"id":31868,"depth":178,"text":31869},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30606,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32235,"title":32236,"body":32237,"description":57,"extension":2314,"meta":32380,"navigation":453,"path":32381,"seo":32382,"stem":32383,"__hash__":32384},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32238,"toc":32378},[32239,32242,32247,32252,32255,32260,32265,32268,32273,32278,32281,32286,32289,32292,32295,32298,32301,32304,32324,32346,32349,32352,32372,32375],[10,32240,32236],{"id":32241},"_7vscode远程开发",[26,32243,32244],{},[29,32245,32246],{},"插件1：微软Docker工具",[19,32248,32249],{},[3699,32250],{"alt":57,"src":32251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,32253,32254],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,32256,32257],{},[3699,32258],{"alt":57,"src":32259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[26,32261,32262],{"start":167},[29,32263,32264],{},"插件2：微软Docker远程开发工具",[19,32266,32267],{},"下面这是远程开发的插件。",[19,32269,32270],{},[3699,32271],{"alt":57,"src":32272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,32274,32275],{},[3699,32276],{"alt":57,"src":32277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,32279,32280],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,32282,32283],{},[3699,32284],{"alt":57,"src":32285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,32287,32288],{},"安装完拓展之后，vscode进行链接：",[19,32290,32291],{},"1.按ctrl+shift+p",[19,32293,32294],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,32296,32297],{},"3.选择目前运行的容器",[19,32299,32300],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,32302,32303],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[51,32305,32307],{"className":73,"code":32306,"language":75,"meta":57,"style":57},"docker run -v 主机目录:容器目录 image-name\n",[59,32308,32309],{"__ignoreMap":57},[79,32310,32311,32313,32315,32318,32321],{"class":81,"line":82},[79,32312,28685],{"class":85},[79,32314,29362],{"class":89},[79,32316,32317],{"class":96}," -v",[79,32319,32320],{"class":89}," 主机目录:容器目录",[79,32322,32323],{"class":89}," image-name\n",[51,32325,32327],{"className":73,"code":32326,"language":75,"meta":57,"style":57},"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",[59,32328,32329],{"__ignoreMap":57},[79,32330,32331,32333,32335,32338,32340,32343],{"class":81,"line":82},[79,32332,28685],{"class":85},[79,32334,29362],{"class":89},[79,32336,32337],{"class":96}," -it",[79,32339,32317],{"class":96},[79,32341,32342],{"class":89}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[79,32344,32345],{"class":89}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32347,32348],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32350,32351],{},"查看挂载情况：",[51,32353,32355],{"className":73,"code":32354,"language":75,"meta":57,"style":57},"mount | grep -i project\n",[59,32356,32357],{"__ignoreMap":57},[79,32358,32359,32362,32364,32367,32369],{"class":81,"line":82},[79,32360,32361],{"class":85},"mount",[79,32363,27245],{"class":243},[79,32365,32366],{"class":85}," grep",[79,32368,28562],{"class":96},[79,32370,32371],{"class":89}," project\n",[19,32373,32374],{},"也可以通过ls来进行查看",[2287,32376,32377],{},"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":57,"searchDepth":167,"depth":167,"links":32379},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32236,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32386,"title":32387,"body":32388,"description":25516,"extension":2314,"meta":32392,"navigation":453,"path":32394,"seo":32395,"stem":32396,"__hash__":32397},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32389,"toc":32390},[],{"title":57,"searchDepth":167,"depth":167,"links":32391},[],{"category":32393},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32387,"description":25516},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32399,"title":32400,"body":32401,"description":25516,"extension":2314,"meta":32405,"navigation":453,"path":32406,"seo":32407,"stem":32408,"__hash__":32409},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32402,"toc":32403},[],{"title":57,"searchDepth":167,"depth":167,"links":32404},[],{"category":32393},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32400,"description":25516},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32411,"title":32412,"body":32413,"description":25516,"extension":2314,"meta":32701,"navigation":453,"path":32702,"seo":32703,"stem":32704,"__hash__":32705},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32414,"toc":32699},[32415,32418,32426,32441,32446,32496,32499,32505,32688,32693,32696],[10,32416,32412],{"id":32417},"_1验证深度学习环境",[19,32419,32420,32421],{},"关于环境的安装，看",[2614,32422,32425],{"href":32423,"rel":32424},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[26001],"Pytorch-->深度学习",[19,32427,32428,32429,32432,32433,32436,32437,32440],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[59,32430,32431],{},"pytorch-cuda=12.4"," 是一个“ ",[2528,32434,32435],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[2528,32438,32439],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32442,32443],{},[3699,32444],{"alt":57,"src":32445},"\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",[51,32447,32449],{"className":73,"code":32448,"language":75,"meta":57,"style":57},"# 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",[59,32450,32451,32456],{"__ignoreMap":57},[79,32452,32453],{"class":81,"line":82},[79,32454,32455],{"class":2440},"# CUDA 12.4\n",[79,32457,32458,32460,32462,32465,32468,32471,32474,32477,32479,32482,32485,32488,32491,32493],{"class":81,"line":167},[79,32459,146],{"class":85},[79,32461,93],{"class":89},[79,32463,32464],{"class":89}," pytorch==",[79,32466,32467],{"class":96},"2.5.1",[79,32469,32470],{"class":89}," torchvision==",[79,32472,32473],{"class":96},"0.20.1",[79,32475,32476],{"class":89}," torchaudio==",[79,32478,32467],{"class":96},[79,32480,32481],{"class":89}," pytorch-cuda=",[79,32483,32484],{"class":96},"12.4",[79,32486,32487],{"class":96}," -c",[79,32489,32490],{"class":89}," pytorch",[79,32492,32487],{"class":96},[79,32494,32495],{"class":89}," nvidia\n",[19,32497,32498],{},"）：",[19,32500,32501],{},[2614,32502,32503],{"href":32503,"rel":32504},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[26001],[51,32506,32508],{"className":230,"code":32507,"language":232,"meta":57,"style":57},"# 对深度学习环境进行测试\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",[59,32509,32510,32515,32522,32527,32537,32553,32558,32568,32605,32612,32623,32639,32644,32654,32666,32676],{"__ignoreMap":57},[79,32511,32512],{"class":81,"line":82},[79,32513,32514],{"class":2440},"# 对深度学习环境进行测试\n",[79,32516,32517,32519],{"class":81,"line":167},[79,32518,432],{"class":243},[79,32520,32521],{"class":239}," torch\n",[79,32523,32524],{"class":81,"line":178},[79,32525,32526],{"class":2440},"# 查看cuda是否被激活\n",[79,32528,32529,32532,32534],{"class":81,"line":457},[79,32530,32531],{"class":239},"flag",[79,32533,244],{"class":243},[79,32535,32536],{"class":239},"torch.cuda.is_available()\n",[79,32538,32539,32542,32544,32547,32550],{"class":81,"line":462},[79,32540,32541],{"class":96},"print",[79,32543,685],{"class":239},[79,32545,32546],{"class":89},"\"cuda:\"",[79,32548,32549],{"class":239},", flag)   ",[79,32551,32552],{"class":2440},"#返回true的话说明被激活\n",[79,32554,32555],{"class":81,"line":474},[79,32556,32557],{"class":2440},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[79,32559,32560,32563,32565],{"class":81,"line":480},[79,32561,32562],{"class":239},"ngpu",[79,32564,244],{"class":243},[79,32566,32567],{"class":96},"1\n",[79,32569,32570,32573,32575,32578,32581,32583,32586,32589,32592,32594,32596,32598,32600,32603],{"class":81,"line":486},[79,32571,32572],{"class":239},"device",[79,32574,244],{"class":243},[79,32576,32577],{"class":239},"torch.device(",[79,32579,32580],{"class":89},"\"cuda:0\"",[79,32582,3929],{"class":243},[79,32584,32585],{"class":239},"(torch.cuda.is_available() ",[79,32587,32588],{"class":243},"and",[79,32590,32591],{"class":239}," ngpu",[79,32593,3330],{"class":243},[79,32595,1030],{"class":96},[79,32597,15876],{"class":239},[79,32599,3926],{"class":243},[79,32601,32602],{"class":89}," \"cpu\"",[79,32604,253],{"class":239},[79,32606,32607,32609],{"class":81,"line":491},[79,32608,32541],{"class":96},[79,32610,32611],{"class":239},"(device)\n",[79,32613,32614,32616,32619,32621],{"class":81,"line":497},[79,32615,32541],{"class":96},[79,32617,32618],{"class":239},"(torch.cuda.get_device_name(",[79,32620,1030],{"class":96},[79,32622,1191],{"class":239},[79,32624,32625,32627,32630,32632,32634,32636],{"class":81,"line":503},[79,32626,32541],{"class":96},[79,32628,32629],{"class":239},"(torch.rand(",[79,32631,1188],{"class":96},[79,32633,2752],{"class":239},[79,32635,1188],{"class":96},[79,32637,32638],{"class":239},").cuda())\n",[79,32640,32641],{"class":81,"line":509},[79,32642,32643],{"class":2440},"# 查看cuda和cudnn的版本\n",[79,32645,32646,32649,32651],{"class":81,"line":514},[79,32647,32648],{"class":239},"cuda_version",[79,32650,244],{"class":243},[79,32652,32653],{"class":239},"torch.version.cuda\n",[79,32655,32656,32658,32660,32663],{"class":81,"line":520},[79,32657,32541],{"class":96},[79,32659,685],{"class":239},[79,32661,32662],{"class":89},"\"cuda version\"",[79,32664,32665],{"class":239},",cuda_version)\n",[79,32667,32668,32671,32673],{"class":81,"line":526},[79,32669,32670],{"class":239},"cudnn_version",[79,32672,244],{"class":243},[79,32674,32675],{"class":239},"torch.backends.cudnn.version()\n",[79,32677,32678,32680,32682,32685],{"class":81,"line":532},[79,32679,32541],{"class":96},[79,32681,685],{"class":239},[79,32683,32684],{"class":89},"\"cudnn version\"",[79,32686,32687],{"class":239},",cudnn_version)\n",[19,32689,32690],{},[3699,32691],{"alt":57,"src":32692},"\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,32694,32695],{},"cuda:0 指的是一块显卡",[2287,32697,32698],{},"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":57,"searchDepth":167,"depth":167,"links":32700},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32412,"description":25516},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32707,"title":32708,"body":32709,"description":25516,"extension":2314,"meta":52502,"navigation":453,"path":52503,"seo":52504,"stem":52505,"__hash__":52506},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32710,"toc":52496},[32711,32714,32718,32722,32725,32730,32735,32738,32743,32748,32753,32756,32760,32765,32769,32774,32777,32782,32785,32788,32791,32794,32799,32802,32807,32812,32817,32822,32825,32829,32832,32837,33438,33443,33446,33451,33454,33457,33917,33920,33923,33926,33929,35977,35980,35985,35990,36784,36787,36792,37570,37574,39233,39237,39951,39955,39959,39964,39969,39974,39977,39982,39987,39992,39997,40002,40006,40011,41293,41298,41301,41304,41307,41462,41465,41468,42684,42689,43384,43388,43392,43397,43402,43405,43410,43415,43420,43425,43430,43435,43440,43445,43450,43455,43460,43465,43470,43475,43480,43485,43490,43495,43500,43505,43510,43515,43520,43525,43530,43535,43540,43545,43550,43555,43559,43563,43566,45044,45048,46695,46699,47393,47397,47400,47403,47947,47950,47954,47957,49354,49358,49361,49939,51726,51730,51733,52493],[10,32712,32708],{"id":32713},"_2经典神经网络",[265,32715,32717],{"id":32716},"_21lenet与alexnet","2.1.LeNet与AlexNet",[24137,32719,32721],{"id":32720},"_211原理介绍","2.1.1.原理介绍",[19,32723,32724],{},"LeNet-5",[26,32726,32727],{},[29,32728,32729],{},"原理",[19,32731,32732],{},[3699,32733],{"alt":57,"src":32734},"\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,32736,32737],{},"B是batch批次；C是channel通道",[26,32739,32740],{"start":167},[29,32741,32742],{},"网络参数详细",[19,32744,32745],{},[3699,32746],{"alt":57,"src":32747},"\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,32749,32750],{},[3699,32751],{"alt":57,"src":32752},"\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,32754,32755],{},"AlexNet",[26,32757,32758],{},[29,32759,32729],{},[19,32761,32762],{},[3699,32763],{"alt":57,"src":32764},"\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,32766,32767],{"start":167},[29,32768,32742],{},[19,32770,32771],{},[3699,32772],{"alt":57,"src":32773},"\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,32775,32776],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32778,32779],{},[3699,32780],{"alt":57,"src":32781},"\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,32783,32784],{},"数据处理中的图像增强操作:",[19,32786,32787],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32789,32790],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32792,32793],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32795,32796],{},[3699,32797],{"alt":57,"src":32798},"\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,32800,32801],{},"提升网络精确度的方法：LRN正则化",[19,32803,32804],{},[3699,32805],{"alt":57,"src":32806},"\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,32808,32809],{},[3699,32810],{"alt":57,"src":32811},"\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,32813,32814],{"start":178},[29,32815,32816],{},"AlexNet的总结",[19,32818,32819],{},[3699,32820],{"alt":57,"src":32821},"\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,32823,32824],{},"比LeNet模型要深一丢丢",[24137,32826,32828],{"id":32827},"_212代码实现","2.1.2.代码实现",[19,32830,32831],{},"（1）LeNet",[26,32833,32834],{},[29,32835,32836],{},"模型搭建",[51,32838,32840],{"className":230,"code":32839,"language":232,"meta":57,"style":57},"# 导入库\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",[59,32841,32842,32847,32853,32858,32871,32876,32888,32892,32911,32916,32921,32932,32937,32956,32960,32965,33014,33026,33031,33060,33095,33122,33127,33139,33144,33164,33183,33202,33206,33211,33221,33238,33249,33264,33275,33286,33301,33316,33327,33334,33338,33351,33356,33379,33384,33389,33394,33398,33403,33408,33418],{"__ignoreMap":57},[79,32843,32844],{"class":81,"line":82},[79,32845,32846],{"class":2440},"# 导入库\n",[79,32848,32849,32851],{"class":81,"line":167},[79,32850,432],{"class":243},[79,32852,32521],{"class":239},[79,32854,32855],{"class":81,"line":178},[79,32856,32857],{"class":2440},"# 导入神经网络层\n",[79,32859,32860,32863,32866,32868],{"class":81,"line":457},[79,32861,32862],{"class":243},"from",[79,32864,32865],{"class":239}," torch ",[79,32867,432],{"class":243},[79,32869,32870],{"class":239}," nn\n",[79,32872,32873],{"class":81,"line":462},[79,32874,32875],{"class":2440},"# 导入展示神经网络参数的包\n",[79,32877,32878,32880,32883,32885],{"class":81,"line":474},[79,32879,32862],{"class":243},[79,32881,32882],{"class":239}," torchsummary ",[79,32884,432],{"class":243},[79,32886,32887],{"class":239}," summary\n",[79,32889,32890],{"class":81,"line":480},[79,32891,454],{"emptyLinePlaceholder":453},[79,32893,32894,32896,32899,32901,32904,32906,32909],{"class":81,"line":486},[79,32895,16855],{"class":243},[79,32897,32898],{"class":85}," LeNet",[79,32900,685],{"class":239},[79,32902,32903],{"class":85},"nn",[79,32905,2931],{"class":239},[79,32907,32908],{"class":85},"Module",[79,32910,966],{"class":239},[79,32912,32913],{"class":81,"line":491},[79,32914,32915],{"class":2440},"    # 模型初始化:\n",[79,32917,32918],{"class":81,"line":497},[79,32919,32920],{"class":2440},"    # 定义一些网络层和激活函数\n",[79,32922,32923,32926,32929],{"class":81,"line":503},[79,32924,32925],{"class":243},"    def",[79,32927,32928],{"class":96}," __init__",[79,32930,32931],{"class":239},"(self):\n",[79,32933,32934],{"class":81,"line":509},[79,32935,32936],{"class":2440},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[79,32938,32939,32942,32945,32948,32951,32954],{"class":81,"line":514},[79,32940,32941],{"class":96},"        super",[79,32943,32944],{"class":239},"(LeNet,",[79,32946,32947],{"class":96},"self",[79,32949,32950],{"class":239},").",[79,32952,32953],{"class":96},"__init__",[79,32955,4191],{"class":239},[79,32957,32958],{"class":81,"line":520},[79,32959,454],{"emptyLinePlaceholder":453},[79,32961,32962],{"class":81,"line":526},[79,32963,32964],{"class":2440},"        # 定义网络层\n",[79,32966,32967,32970,32973,32975,32978,32981,32983,32985,32987,32990,32992,32994,32996,32999,33001,33003,33005,33008,33010,33012],{"class":81,"line":532},[79,32968,32969],{"class":96},"        self",[79,32971,32972],{"class":239},".c1",[79,32974,244],{"class":243},[79,32976,32977],{"class":239},"nn.Conv2d(",[79,32979,32980],{"class":7412},"in_channels",[79,32982,244],{"class":243},[79,32984,1072],{"class":96},[79,32986,2752],{"class":239},[79,32988,32989],{"class":7412},"out_channels",[79,32991,244],{"class":243},[79,32993,2718],{"class":96},[79,32995,2752],{"class":239},[79,32997,32998],{"class":7412},"kernel_size",[79,33000,244],{"class":243},[79,33002,2694],{"class":96},[79,33004,2752],{"class":239},[79,33006,33007],{"class":7412},"padding",[79,33009,244],{"class":243},[79,33011,1049],{"class":96},[79,33013,253],{"class":239},[79,33015,33016,33018,33021,33023],{"class":81,"line":537},[79,33017,32969],{"class":96},[79,33019,33020],{"class":239},".sig",[79,33022,244],{"class":243},[79,33024,33025],{"class":239},"nn.Sigmoid()\n",[79,33027,33028],{"class":81,"line":543},[79,33029,33030],{"class":2440},"        # 定义池化\n",[79,33032,33033,33035,33038,33040,33043,33045,33047,33049,33051,33054,33056,33058],{"class":81,"line":549},[79,33034,32969],{"class":96},[79,33036,33037],{"class":239},".s2",[79,33039,244],{"class":243},[79,33041,33042],{"class":239},"nn.AvgPool2d(",[79,33044,32998],{"class":7412},[79,33046,244],{"class":243},[79,33048,1049],{"class":96},[79,33050,2752],{"class":239},[79,33052,33053],{"class":7412},"stride",[79,33055,244],{"class":243},[79,33057,1049],{"class":96},[79,33059,253],{"class":239},[79,33061,33062,33064,33067,33069,33071,33073,33075,33077,33079,33081,33083,33085,33087,33089,33091,33093],{"class":81,"line":555},[79,33063,32969],{"class":96},[79,33065,33066],{"class":239},".c3",[79,33068,244],{"class":243},[79,33070,32977],{"class":239},[79,33072,32980],{"class":7412},[79,33074,244],{"class":243},[79,33076,2718],{"class":96},[79,33078,2752],{"class":239},[79,33080,32989],{"class":7412},[79,33082,244],{"class":243},[79,33084,2974],{"class":96},[79,33086,2752],{"class":239},[79,33088,32998],{"class":7412},[79,33090,244],{"class":243},[79,33092,2694],{"class":96},[79,33094,253],{"class":239},[79,33096,33097,33099,33102,33104,33106,33108,33110,33112,33114,33116,33118,33120],{"class":81,"line":561},[79,33098,32969],{"class":96},[79,33100,33101],{"class":239},".s4",[79,33103,244],{"class":243},[79,33105,33042],{"class":239},[79,33107,32998],{"class":7412},[79,33109,244],{"class":243},[79,33111,1049],{"class":96},[79,33113,2752],{"class":239},[79,33115,33053],{"class":7412},[79,33117,244],{"class":243},[79,33119,1049],{"class":96},[79,33121,253],{"class":239},[79,33123,33124],{"class":81,"line":567},[79,33125,33126],{"class":2440},"        # 定义平展层\n",[79,33128,33129,33131,33134,33136],{"class":81,"line":573},[79,33130,32969],{"class":96},[79,33132,33133],{"class":239},".flatten",[79,33135,244],{"class":243},[79,33137,33138],{"class":239},"nn.Flatten()\n",[79,33140,33141],{"class":81,"line":579},[79,33142,33143],{"class":2440},"        # 定义全连接层\n",[79,33145,33146,33148,33151,33153,33156,33158,33160,33162],{"class":81,"line":584},[79,33147,32969],{"class":96},[79,33149,33150],{"class":239},".f5",[79,33152,244],{"class":243},[79,33154,33155],{"class":239},"nn.Linear(",[79,33157,6189],{"class":96},[79,33159,2752],{"class":239},[79,33161,3190],{"class":96},[79,33163,253],{"class":239},[79,33165,33166,33168,33171,33173,33175,33177,33179,33181],{"class":81,"line":590},[79,33167,32969],{"class":96},[79,33169,33170],{"class":239},".f6",[79,33172,244],{"class":243},[79,33174,33155],{"class":239},[79,33176,3190],{"class":96},[79,33178,2752],{"class":239},[79,33180,3084],{"class":96},[79,33182,253],{"class":239},[79,33184,33185,33187,33190,33192,33194,33196,33198,33200],{"class":81,"line":596},[79,33186,32969],{"class":96},[79,33188,33189],{"class":239},".f7",[79,33191,244],{"class":243},[79,33193,33155],{"class":239},[79,33195,3084],{"class":96},[79,33197,2752],{"class":239},[79,33199,2820],{"class":96},[79,33201,253],{"class":239},[79,33203,33204],{"class":81,"line":602},[79,33205,454],{"emptyLinePlaceholder":453},[79,33207,33208],{"class":81,"line":608},[79,33209,33210],{"class":2440},"    # 写工具->写前向传播\n",[79,33212,33213,33215,33218],{"class":81,"line":614},[79,33214,32925],{"class":243},[79,33216,33217],{"class":85}," forward",[79,33219,33220],{"class":239},"(self,x):\n",[79,33222,33223,33226,33228,33230,33233,33235],{"class":81,"line":620},[79,33224,33225],{"class":239},"        x",[79,33227,244],{"class":243},[79,33229,32947],{"class":96},[79,33231,33232],{"class":239},".sig(",[79,33234,32947],{"class":96},[79,33236,33237],{"class":239},".c1(x))\n",[79,33239,33240,33242,33244,33246],{"class":81,"line":625},[79,33241,33225],{"class":239},[79,33243,244],{"class":243},[79,33245,32947],{"class":96},[79,33247,33248],{"class":239},".s2(x)\n",[79,33250,33251,33253,33255,33257,33259,33261],{"class":81,"line":630},[79,33252,33225],{"class":239},[79,33254,244],{"class":243},[79,33256,32947],{"class":96},[79,33258,33232],{"class":239},[79,33260,32947],{"class":96},[79,33262,33263],{"class":239},".c3(x))\n",[79,33265,33266,33268,33270,33272],{"class":81,"line":648},[79,33267,33225],{"class":239},[79,33269,244],{"class":243},[79,33271,32947],{"class":96},[79,33273,33274],{"class":239},".s4(x)\n",[79,33276,33277,33279,33281,33283],{"class":81,"line":659},[79,33278,33225],{"class":239},[79,33280,244],{"class":243},[79,33282,32947],{"class":96},[79,33284,33285],{"class":239},".flatten(x)\n",[79,33287,33288,33290,33292,33294,33296,33298],{"class":81,"line":676},[79,33289,33225],{"class":239},[79,33291,244],{"class":243},[79,33293,32947],{"class":96},[79,33295,33232],{"class":239},[79,33297,32947],{"class":96},[79,33299,33300],{"class":239},".f5(x))\n",[79,33302,33303,33305,33307,33309,33311,33313],{"class":81,"line":708},[79,33304,33225],{"class":239},[79,33306,244],{"class":243},[79,33308,32947],{"class":96},[79,33310,33232],{"class":239},[79,33312,32947],{"class":96},[79,33314,33315],{"class":239},".f6(x))\n",[79,33317,33318,33320,33322,33324],{"class":81,"line":717},[79,33319,33225],{"class":239},[79,33321,244],{"class":243},[79,33323,32947],{"class":96},[79,33325,33326],{"class":239},".f7(x)\n",[79,33328,33329,33331],{"class":81,"line":722},[79,33330,16913],{"class":243},[79,33332,33333],{"class":239}," x\n",[79,33335,33336],{"class":81,"line":727},[79,33337,454],{"emptyLinePlaceholder":453},[79,33339,33340,33342,33344,33346,33349],{"class":81,"line":738},[79,33341,1329],{"class":243},[79,33343,1332],{"class":96},[79,33345,5155],{"class":243},[79,33347,33348],{"class":89},"\"__main__\"",[79,33350,673],{"class":239},[79,33352,33353],{"class":81,"line":753},[79,33354,33355],{"class":2440},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[79,33357,33358,33361,33363,33365,33368,33370,33373,33375,33377],{"class":81,"line":768},[79,33359,33360],{"class":239},"    device",[79,33362,244],{"class":243},[79,33364,32577],{"class":239},[79,33366,33367],{"class":89},"\"cuda\"",[79,33369,3929],{"class":243},[79,33371,33372],{"class":239}," torch.cuda.is_available() ",[79,33374,3926],{"class":243},[79,33376,32602],{"class":89},[79,33378,253],{"class":239},[79,33380,33381],{"class":81,"line":776},[79,33382,33383],{"class":2440},"    # 如果就是想指定用cpu用下方代码:\n",[79,33385,33386],{"class":81,"line":781},[79,33387,33388],{"class":2440},"    # device=\"cpu\"\n",[79,33390,33391],{"class":81,"line":786},[79,33392,33393],{"class":2440},"    # print(device)\n",[79,33395,33396],{"class":81,"line":802},[79,33397,454],{"emptyLinePlaceholder":453},[79,33399,33400],{"class":81,"line":815},[79,33401,33402],{"class":2440},"    # 实例化模型\n",[79,33404,33405],{"class":81,"line":828},[79,33406,33407],{"class":2440},"    # 将模型放到设备中去运行\n",[79,33409,33410,33413,33415],{"class":81,"line":842},[79,33411,33412],{"class":239},"    model",[79,33414,244],{"class":243},[79,33416,33417],{"class":239},"LeNet().to(device)\n",[79,33419,33420,33422,33425,33427,33429,33431,33433,33435],{"class":81,"line":859},[79,33421,1254],{"class":96},[79,33423,33424],{"class":239},"(summary(model,(",[79,33426,1072],{"class":96},[79,33428,2752],{"class":239},[79,33430,3273],{"class":96},[79,33432,2752],{"class":239},[79,33434,3273],{"class":96},[79,33436,33437],{"class":239},")))\n",[19,33439,33440],{},[3699,33441],{"alt":57,"src":33442},"\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,33444,33445],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[26,33447,33448],{"start":167},[29,33449,33450],{},"训练",[19,33452,33453],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33455,33456],{},"在训练之前可以将数据展示看一下",[51,33458,33460],{"className":230,"code":33459,"language":232,"meta":57,"style":57},"# 建立画图的函数，用于展示数据\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",[59,33461,33462,33467,33472,33484,33496,33506,33511,33523,33528,33540,33545,33557,33561,33565,33586,33598,33603,33624,33635,33639,33644,33662,33673,33678,33689,33694,33705,33709,33714,33729,33741,33746,33751,33764,33777,33790,33795,33799,33804,33824,33841,33861,33874,33887,33897,33912],{"__ignoreMap":57},[79,33463,33464],{"class":81,"line":82},[79,33465,33466],{"class":2440},"# 建立画图的函数，用于展示数据\n",[79,33468,33469],{"class":81,"line":167},[79,33470,33471],{"class":2440},"# torchvision中包含很多内置的数据集\n",[79,33473,33474,33476,33479,33481],{"class":81,"line":178},[79,33475,32862],{"class":243},[79,33477,33478],{"class":239}," sklearn.externals.array_api_compat.torch ",[79,33480,432],{"class":243},[79,33482,33483],{"class":239}," squeeze\n",[79,33485,33486,33488,33491,33493],{"class":81,"line":457},[79,33487,32862],{"class":243},[79,33489,33490],{"class":239}," torchvision.datasets ",[79,33492,432],{"class":243},[79,33494,33495],{"class":239}," FashionMNIST\n",[79,33497,33498,33500,33502,33504],{"class":81,"line":462},[79,33499,432],{"class":243},[79,33501,442],{"class":239},[79,33503,445],{"class":243},[79,33505,448],{"class":239},[79,33507,33508],{"class":81,"line":474},[79,33509,33510],{"class":2440},"# 引入处理数据集的包\n",[79,33512,33513,33515,33518,33520],{"class":81,"line":480},[79,33514,32862],{"class":243},[79,33516,33517],{"class":239}," torchvision ",[79,33519,432],{"class":243},[79,33521,33522],{"class":239}," transforms\n",[79,33524,33525],{"class":81,"line":486},[79,33526,33527],{"class":2440},"# 从torch库中引入数据处理的包\n",[79,33529,33530,33532,33535,33537],{"class":81,"line":491},[79,33531,432],{"class":243},[79,33533,33534],{"class":239}," torch.utils.data ",[79,33536,445],{"class":243},[79,33538,33539],{"class":239}," Data\n",[79,33541,33542],{"class":81,"line":497},[79,33543,33544],{"class":2440},"# 导入画图的库\n",[79,33546,33547,33549,33552,33554],{"class":81,"line":503},[79,33548,432],{"class":243},[79,33550,33551],{"class":239}," matplotlib.pyplot ",[79,33553,445],{"class":243},[79,33555,33556],{"class":239}," plt\n",[79,33558,33559],{"class":81,"line":509},[79,33560,454],{"emptyLinePlaceholder":453},[79,33562,33563],{"class":81,"line":514},[79,33564,454],{"emptyLinePlaceholder":453},[79,33566,33567,33570,33572,33575,33578,33580,33583],{"class":81,"line":520},[79,33568,33569],{"class":239},"train_data",[79,33571,244],{"class":243},[79,33573,33574],{"class":239},"FashionMNIST(",[79,33576,33577],{"class":7412},"root",[79,33579,244],{"class":243},[79,33581,33582],{"class":89},"'.\u002Fdata'",[79,33584,33585],{"class":239},",\n",[79,33587,33588,33591,33593,33596],{"class":81,"line":526},[79,33589,33590],{"class":7412},"                        train",[79,33592,244],{"class":243},[79,33594,33595],{"class":96},"True",[79,33597,33585],{"class":239},[79,33599,33600],{"class":81,"line":532},[79,33601,33602],{"class":2440},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[79,33604,33605,33608,33610,33613,33616,33618,33621],{"class":81,"line":537},[79,33606,33607],{"class":7412},"                        transform",[79,33609,244],{"class":243},[79,33611,33612],{"class":239},"transforms.Compose([transforms.Resize(",[79,33614,33615],{"class":7412},"size",[79,33617,244],{"class":243},[79,33619,33620],{"class":96},"224",[79,33622,33623],{"class":239},"),transforms.ToTensor()]),\n",[79,33625,33626,33629,33631,33633],{"class":81,"line":543},[79,33627,33628],{"class":7412},"                        download",[79,33630,244],{"class":243},[79,33632,33595],{"class":96},[79,33634,253],{"class":239},[79,33636,33637],{"class":81,"line":549},[79,33638,454],{"emptyLinePlaceholder":453},[79,33640,33641],{"class":81,"line":555},[79,33642,33643],{"class":2440},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[79,33645,33646,33649,33651,33654,33657,33659],{"class":81,"line":561},[79,33647,33648],{"class":239},"train_loader",[79,33650,244],{"class":243},[79,33652,33653],{"class":239},"Data.DataLoader(",[79,33655,33656],{"class":7412},"dataset",[79,33658,244],{"class":243},[79,33660,33661],{"class":239},"train_data,\n",[79,33663,33664,33667,33669,33671],{"class":81,"line":567},[79,33665,33666],{"class":7412},"                             batch_size",[79,33668,244],{"class":243},[79,33670,2581],{"class":96},[79,33672,33585],{"class":239},[79,33674,33675],{"class":81,"line":573},[79,33676,33677],{"class":2440},"                             # 数据是否打乱\n",[79,33679,33680,33683,33685,33687],{"class":81,"line":579},[79,33681,33682],{"class":7412},"                             shuffle",[79,33684,244],{"class":243},[79,33686,33595],{"class":96},[79,33688,33585],{"class":239},[79,33690,33691],{"class":81,"line":584},[79,33692,33693],{"class":2440},"                             # 规定加载数据的进程\n",[79,33695,33696,33699,33701,33703],{"class":81,"line":590},[79,33697,33698],{"class":7412},"                             num_workers",[79,33700,244],{"class":243},[79,33702,1030],{"class":96},[79,33704,253],{"class":239},[79,33706,33707],{"class":81,"line":596},[79,33708,454],{"emptyLinePlaceholder":453},[79,33710,33711],{"class":81,"line":602},[79,33712,33713],{"class":2440},"# 获得一个batch的数据\n",[79,33715,33716,33718,33721,33723,33726],{"class":81,"line":608},[79,33717,1874],{"class":243},[79,33719,33720],{"class":239}," step,(b_x,b_y) ",[79,33722,955],{"class":243},[79,33724,33725],{"class":96}," enumerate",[79,33727,33728],{"class":239},"(train_loader):\n",[79,33730,33731,33733,33735,33737,33739],{"class":81,"line":614},[79,33732,662],{"class":243},[79,33734,952],{"class":239},[79,33736,3330],{"class":243},[79,33738,670],{"class":96},[79,33740,673],{"class":239},[79,33742,33743],{"class":81,"line":620},[79,33744,33745],{"class":243},"        break\n",[79,33747,33748],{"class":81,"line":625},[79,33749,33750],{"class":2440},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[79,33752,33753,33756,33758,33761],{"class":81,"line":630},[79,33754,33755],{"class":239},"batch_x",[79,33757,244],{"class":243},[79,33759,33760],{"class":239},"b_x.squeeze().numpy()  ",[79,33762,33763],{"class":2440},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[79,33765,33766,33769,33771,33774],{"class":81,"line":648},[79,33767,33768],{"class":239},"batch_y",[79,33770,244],{"class":243},[79,33772,33773],{"class":239},"b_y.numpy()   ",[79,33775,33776],{"class":2440},"#将张量转换成功numpy数组\n",[79,33778,33779,33782,33784,33787],{"class":81,"line":659},[79,33780,33781],{"class":239},"class_label",[79,33783,244],{"class":243},[79,33785,33786],{"class":239},"train_data.classes  ",[79,33788,33789],{"class":2440},"#训练集标签\n",[79,33791,33792],{"class":81,"line":676},[79,33793,33794],{"class":2440},"# print(class_label)\n",[79,33796,33797],{"class":81,"line":708},[79,33798,454],{"emptyLinePlaceholder":453},[79,33800,33801],{"class":81,"line":717},[79,33802,33803],{"class":2440},"# 可视化一个batch的图像\n",[79,33805,33806,33809,33812,33814,33816,33818,33820,33822],{"class":81,"line":722},[79,33807,33808],{"class":239},"plt.figure(",[79,33810,33811],{"class":7412},"figsize",[79,33813,244],{"class":243},[79,33815,685],{"class":239},[79,33817,2872],{"class":96},[79,33819,2752],{"class":239},[79,33821,2694],{"class":96},[79,33823,1191],{"class":239},[79,33825,33826,33828,33831,33833,33836,33838],{"class":81,"line":727},[79,33827,1874],{"class":243},[79,33829,33830],{"class":239}," ii ",[79,33832,955],{"class":243},[79,33834,33835],{"class":239}," np.arange(",[79,33837,9552],{"class":96},[79,33839,33840],{"class":239},"(batch_y)):\n",[79,33842,33843,33846,33848,33850,33852,33855,33857,33859],{"class":81,"line":738},[79,33844,33845],{"class":239},"    plt.subplot(",[79,33847,2668],{"class":96},[79,33849,2752],{"class":239},[79,33851,2974],{"class":96},[79,33853,33854],{"class":239},",ii ",[79,33856,2855],{"class":243},[79,33858,27253],{"class":96},[79,33860,253],{"class":239},[79,33862,33863,33866,33869,33871],{"class":81,"line":753},[79,33864,33865],{"class":239},"    plt.imshow(batch_x[ii,:,:],",[79,33867,33868],{"class":7412},"cmap",[79,33870,244],{"class":243},[79,33872,33873],{"class":239},"plt.cm.gray)\n",[79,33875,33876,33879,33881,33883,33885],{"class":81,"line":768},[79,33877,33878],{"class":239},"    plt.title(class_label[batch_y[ii]],",[79,33880,33615],{"class":7412},[79,33882,244],{"class":243},[79,33884,2820],{"class":96},[79,33886,253],{"class":239},[79,33888,33889,33892,33895],{"class":81,"line":776},[79,33890,33891],{"class":239},"    plt.axis(",[79,33893,33894],{"class":89},"\"off\"",[79,33896,253],{"class":239},[79,33898,33899,33902,33905,33907,33910],{"class":81,"line":781},[79,33900,33901],{"class":239},"    plt.subplots_adjust(",[79,33903,33904],{"class":7412},"wspace",[79,33906,244],{"class":243},[79,33908,33909],{"class":96},"0.05",[79,33911,253],{"class":239},[79,33913,33914],{"class":81,"line":786},[79,33915,33916],{"class":239},"plt.show()\n",[19,33918,33919],{},"用matplotlib进行展示的过程可以后续再补",[19,33921,33922],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33924,33925],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33927,33928],{},"模型训练：",[51,33930,33932],{"className":230,"code":33931,"language":232,"meta":57,"style":57},"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",[59,33933,33934,33941,33948,33952,33964,33970,33981,33991,34001,34011,34021,34026,34038,34048,34052,34056,34061,34071,34084,34095,34112,34123,34161,34177,34189,34200,34205,34216,34232,34243,34254,34265,34272,34276,34281,34286,34290,34295,34305,34326,34330,34334,34339,34344,34349,34369,34373,34378,34388,34392,34397,34406,34411,34416,34421,34431,34435,34439,34444,34449,34459,34464,34474,34479,34488,34493,34502,34507,34516,34520,34525,34535,34539,34543,34548,34562,34590,34605,34609,34614,34619,34628,34633,34642,34647,34656,34661,34670,34675,34684,34689,34698,34703,34716,34721,34731,34736,34746,34752,34758,34764,34770,34781,34787,34807,34813,34824,34830,34836,34842,34848,34854,34860,34866,34886,34892,34908,34914,34928,34934,34949,34955,34964,34970,34979,34985,34991,35000,35006,35017,35023,35042,35048,35059,35065,35085,35101,35107,35121,35127,35133,35144,35150,35156,35166,35172,35183,35189,35199,35204,35210,35259,35306,35311,35317,35336,35342,35362,35368,35374,35384,35389,35395,35411,35456,35462,35468,35474,35485,35491,35497,35503,35521,35535,35544,35553,35562,35571,35577,35583,35591,35596,35602,35613,35619,35639,35645,35651,35657,35674,35680,35686,35692,35698,35704,35731,35755,35761,35767,35773,35784,35795,35801,35818,35841,35864,35870,35875,35884,35894,35900,35905,35911,35924,35930,35941,35952,35971],{"__ignoreMap":57},[79,33935,33936,33938],{"class":81,"line":82},[79,33937,432],{"class":243},[79,33939,33940],{"class":239}," copy\n",[79,33942,33943,33945],{"class":81,"line":167},[79,33944,432],{"class":243},[79,33946,33947],{"class":239}," time\n",[79,33949,33950],{"class":81,"line":178},[79,33951,454],{"emptyLinePlaceholder":453},[79,33953,33954,33956,33959,33961],{"class":81,"line":457},[79,33955,432],{"class":243},[79,33957,33958],{"class":239}," pandas ",[79,33960,445],{"class":243},[79,33962,33963],{"class":239}," pd\n",[79,33965,33966,33968],{"class":81,"line":462},[79,33967,432],{"class":243},[79,33969,32521],{"class":239},[79,33971,33972,33974,33976,33978],{"class":81,"line":474},[79,33973,32862],{"class":243},[79,33975,33534],{"class":239},[79,33977,432],{"class":243},[79,33979,33980],{"class":239}," Dataset\n",[79,33982,33983,33985,33987,33989],{"class":81,"line":480},[79,33984,32862],{"class":243},[79,33986,33490],{"class":239},[79,33988,432],{"class":243},[79,33990,33495],{"class":239},[79,33992,33993,33995,33997,33999],{"class":81,"line":486},[79,33994,32862],{"class":243},[79,33996,33517],{"class":239},[79,33998,432],{"class":243},[79,34000,33522],{"class":239},[79,34002,34003,34005,34007,34009],{"class":81,"line":491},[79,34004,432],{"class":243},[79,34006,33534],{"class":239},[79,34008,445],{"class":243},[79,34010,33539],{"class":239},[79,34012,34013,34015,34017,34019],{"class":81,"line":497},[79,34014,432],{"class":243},[79,34016,33551],{"class":239},[79,34018,445],{"class":243},[79,34020,33556],{"class":239},[79,34022,34023],{"class":81,"line":503},[79,34024,34025],{"class":2440},"# 导入模型\n",[79,34027,34028,34030,34033,34035],{"class":81,"line":509},[79,34029,32862],{"class":243},[79,34031,34032],{"class":239}," model ",[79,34034,432],{"class":243},[79,34036,34037],{"class":239}," LeNet\n",[79,34039,34040,34042,34044,34046],{"class":81,"line":514},[79,34041,32862],{"class":243},[79,34043,32865],{"class":239},[79,34045,432],{"class":243},[79,34047,32870],{"class":239},[79,34049,34050],{"class":81,"line":520},[79,34051,454],{"emptyLinePlaceholder":453},[79,34053,34054],{"class":81,"line":526},[79,34055,454],{"emptyLinePlaceholder":453},[79,34057,34058],{"class":81,"line":532},[79,34059,34060],{"class":2440},"# 处理训练集与验证集函数--->划分数据集\n",[79,34062,34063,34065,34068],{"class":81,"line":537},[79,34064,633],{"class":243},[79,34066,34067],{"class":85}," train_val_data_process",[79,34069,34070],{"class":239},"():\n",[79,34072,34073,34076,34078,34080,34082],{"class":81,"line":543},[79,34074,34075],{"class":239},"    train_data",[79,34077,244],{"class":243},[79,34079,33574],{"class":239},[79,34081,33582],{"class":89},[79,34083,33585],{"class":239},[79,34085,34086,34089,34091,34093],{"class":81,"line":549},[79,34087,34088],{"class":7412},"                            train",[79,34090,244],{"class":243},[79,34092,33595],{"class":96},[79,34094,33585],{"class":239},[79,34096,34097,34100,34102,34104,34106,34108,34110],{"class":81,"line":555},[79,34098,34099],{"class":7412},"                            transform",[79,34101,244],{"class":243},[79,34103,33612],{"class":239},[79,34105,33615],{"class":7412},[79,34107,244],{"class":243},[79,34109,3273],{"class":96},[79,34111,33623],{"class":239},[79,34113,34114,34117,34119,34121],{"class":81,"line":561},[79,34115,34116],{"class":7412},"                            download",[79,34118,244],{"class":243},[79,34120,33595],{"class":96},[79,34122,253],{"class":239},[79,34124,34125,34128,34130,34133,34135,34137,34140,34142,34144,34147,34149,34151,34154,34156,34158],{"class":81,"line":567},[79,34126,34127],{"class":239},"    train_data,val_data",[79,34129,244],{"class":243},[79,34131,34132],{"class":239},"Data.random_split(train_data,[",[79,34134,1264],{"class":96},[79,34136,685],{"class":239},[79,34138,34139],{"class":96},"0.8",[79,34141,2829],{"class":243},[79,34143,9552],{"class":96},[79,34145,34146],{"class":239},"(train_data)),",[79,34148,1264],{"class":96},[79,34150,685],{"class":239},[79,34152,34153],{"class":96},"0.2",[79,34155,2829],{"class":243},[79,34157,9552],{"class":96},[79,34159,34160],{"class":239},"(train_data))])\n",[79,34162,34163,34166,34168,34171,34173,34175],{"class":81,"line":573},[79,34164,34165],{"class":239},"    train_dataloader ",[79,34167,244],{"class":243},[79,34169,34170],{"class":239}," Data.DataLoader(",[79,34172,33656],{"class":7412},[79,34174,244],{"class":243},[79,34176,33661],{"class":239},[79,34178,34179,34182,34184,34187],{"class":81,"line":579},[79,34180,34181],{"class":7412},"                                       batch_size",[79,34183,244],{"class":243},[79,34185,34186],{"class":96},"128",[79,34188,33585],{"class":239},[79,34190,34191,34194,34196,34198],{"class":81,"line":584},[79,34192,34193],{"class":7412},"                                       shuffle",[79,34195,244],{"class":243},[79,34197,33595],{"class":96},[79,34199,33585],{"class":239},[79,34201,34202],{"class":81,"line":590},[79,34203,34204],{"class":2440},"                                       # 规定8个进程\n",[79,34206,34207,34210,34212,34214],{"class":81,"line":596},[79,34208,34209],{"class":7412},"                                       num_workers",[79,34211,244],{"class":243},[79,34213,2769],{"class":96},[79,34215,253],{"class":239},[79,34217,34218,34221,34223,34225,34227,34229],{"class":81,"line":602},[79,34219,34220],{"class":239},"    val_dataloader",[79,34222,244],{"class":243},[79,34224,33653],{"class":239},[79,34226,33656],{"class":7412},[79,34228,244],{"class":243},[79,34230,34231],{"class":239},"val_data,\n",[79,34233,34234,34237,34239,34241],{"class":81,"line":608},[79,34235,34236],{"class":7412},"                                   batch_size",[79,34238,244],{"class":243},[79,34240,34186],{"class":96},[79,34242,33585],{"class":239},[79,34244,34245,34248,34250,34252],{"class":81,"line":614},[79,34246,34247],{"class":7412},"                                   shuffle",[79,34249,244],{"class":243},[79,34251,33595],{"class":96},[79,34253,33585],{"class":239},[79,34255,34256,34259,34261,34263],{"class":81,"line":620},[79,34257,34258],{"class":7412},"                                   num_workers",[79,34260,244],{"class":243},[79,34262,2769],{"class":96},[79,34264,253],{"class":239},[79,34266,34267,34269],{"class":81,"line":625},[79,34268,711],{"class":243},[79,34270,34271],{"class":239}," train_dataloader,val_dataloader\n",[79,34273,34274],{"class":81,"line":630},[79,34275,454],{"emptyLinePlaceholder":453},[79,34277,34278],{"class":81,"line":648},[79,34279,34280],{"class":2440},"# 验证是否出错\n",[79,34282,34283],{"class":81,"line":659},[79,34284,34285],{"class":2440},"# train_val_data_process()\n",[79,34287,34288],{"class":81,"line":676},[79,34289,454],{"emptyLinePlaceholder":453},[79,34291,34292],{"class":81,"line":708},[79,34293,34294],{"class":2440},"# 定义模型训练函数\n",[79,34296,34297,34299,34302],{"class":81,"line":717},[79,34298,633],{"class":243},[79,34300,34301],{"class":85}," train_model_process",[79,34303,34304],{"class":239},"(model,train_dataloader,val_dataloader,num_epochs):\n",[79,34306,34307,34309,34311,34313,34315,34317,34319,34321,34324],{"class":81,"line":722},[79,34308,33360],{"class":239},[79,34310,244],{"class":243},[79,34312,32577],{"class":239},[79,34314,33367],{"class":89},[79,34316,3929],{"class":243},[79,34318,33372],{"class":239},[79,34320,3926],{"class":243},[79,34322,34323],{"class":89}," 'cpu'",[79,34325,253],{"class":239},[79,34327,34328],{"class":81,"line":727},[79,34329,454],{"emptyLinePlaceholder":453},[79,34331,34332],{"class":81,"line":738},[79,34333,454],{"emptyLinePlaceholder":453},[79,34335,34336],{"class":81,"line":753},[79,34337,34338],{"class":2440},"    # 定义优化器\n",[79,34340,34341],{"class":81,"line":768},[79,34342,34343],{"class":2440},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[79,34345,34346],{"class":81,"line":776},[79,34347,34348],{"class":2440},"    # lr为学习率\n",[79,34350,34351,34354,34356,34359,34362,34364,34367],{"class":81,"line":781},[79,34352,34353],{"class":239},"    optimizer",[79,34355,244],{"class":243},[79,34357,34358],{"class":239},"torch.optim.Adam(model.parameters(),",[79,34360,34361],{"class":7412},"lr",[79,34363,244],{"class":243},[79,34365,34366],{"class":96},"0.001",[79,34368,253],{"class":239},[79,34370,34371],{"class":81,"line":786},[79,34372,454],{"emptyLinePlaceholder":453},[79,34374,34375],{"class":81,"line":802},[79,34376,34377],{"class":2440},"    # 定义损失函数使用交叉熵损失函数\n",[79,34379,34380,34383,34385],{"class":81,"line":815},[79,34381,34382],{"class":239},"    criterion",[79,34384,244],{"class":243},[79,34386,34387],{"class":239},"nn.CrossEntropyLoss()\n",[79,34389,34390],{"class":81,"line":828},[79,34391,454],{"emptyLinePlaceholder":453},[79,34393,34394],{"class":81,"line":842},[79,34395,34396],{"class":2440},"    # 将模型放到GPU中进行训练\n",[79,34398,34399,34401,34403],{"class":81,"line":859},[79,34400,33412],{"class":239},[79,34402,244],{"class":243},[79,34404,34405],{"class":239},"model.to(device)\n",[79,34407,34408],{"class":81,"line":878},[79,34409,34410],{"class":2440},"    # 复制当前模型的参数\n",[79,34412,34413],{"class":81,"line":883},[79,34414,34415],{"class":2440},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[79,34417,34418],{"class":81,"line":888},[79,34419,34420],{"class":2440},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[79,34422,34423,34426,34428],{"class":81,"line":904},[79,34424,34425],{"class":239},"    best_model_wts",[79,34427,244],{"class":243},[79,34429,34430],{"class":239},"copy.deepcopy(model.state_dict())\n",[79,34432,34433],{"class":81,"line":919},[79,34434,454],{"emptyLinePlaceholder":453},[79,34436,34437],{"class":81,"line":930},[79,34438,454],{"emptyLinePlaceholder":453},[79,34440,34441],{"class":81,"line":941},[79,34442,34443],{"class":2440},"    # 初始化参数\n",[79,34445,34446],{"class":81,"line":946},[79,34447,34448],{"class":2440},"    # 最高准确度\n",[79,34450,34451,34454,34456],{"class":81,"line":969},[79,34452,34453],{"class":239},"    best_acc",[79,34455,244],{"class":243},[79,34457,34458],{"class":96},"0.0\n",[79,34460,34461],{"class":81,"line":975},[79,34462,34463],{"class":2440},"    # 训练集损失列表\n",[79,34465,34466,34469,34471],{"class":81,"line":989},[79,34467,34468],{"class":239},"    train_loss_all",[79,34470,244],{"class":243},[79,34472,34473],{"class":239},"[]\n",[79,34475,34476],{"class":81,"line":1003},[79,34477,34478],{"class":2440},"    # 验证集函数列表\n",[79,34480,34481,34484,34486],{"class":81,"line":1019},[79,34482,34483],{"class":239},"    val_loss_all",[79,34485,244],{"class":243},[79,34487,34473],{"class":239},[79,34489,34490],{"class":81,"line":1024},[79,34491,34492],{"class":2440},"    # 训练集准确度列表\n",[79,34494,34495,34498,34500],{"class":81,"line":1067},[79,34496,34497],{"class":239},"    train_acc_all",[79,34499,244],{"class":243},[79,34501,34473],{"class":239},[79,34503,34504],{"class":81,"line":1101},[79,34505,34506],{"class":2440},"    # 验证集准确度列表\n",[79,34508,34509,34512,34514],{"class":81,"line":1106},[79,34510,34511],{"class":239},"    val_acc_all",[79,34513,244],{"class":243},[79,34515,34473],{"class":239},[79,34517,34518],{"class":81,"line":1112},[79,34519,454],{"emptyLinePlaceholder":453},[79,34521,34522],{"class":81,"line":1124},[79,34523,34524],{"class":2440},"    # 保存当前时间--->方便看每轮训练的时间\n",[79,34526,34527,34530,34532],{"class":81,"line":1129},[79,34528,34529],{"class":239},"    since",[79,34531,244],{"class":243},[79,34533,34534],{"class":239},"time.time()\n",[79,34536,34537],{"class":81,"line":1150},[79,34538,454],{"emptyLinePlaceholder":453},[79,34540,34541],{"class":81,"line":1161},[79,34542,454],{"emptyLinePlaceholder":453},[79,34544,34545],{"class":81,"line":1175},[79,34546,34547],{"class":2440},"    # 准备工作完成--->开始训练模型\n",[79,34549,34550,34552,34555,34557,34559],{"class":81,"line":1194},[79,34551,949],{"class":243},[79,34553,34554],{"class":239}," epoch ",[79,34556,955],{"class":243},[79,34558,958],{"class":96},[79,34560,34561],{"class":239},"(num_epochs):\n",[79,34563,34564,34567,34569,34572,34575,34577,34579,34581,34584,34586,34588],{"class":81,"line":1211},[79,34565,34566],{"class":96},"        print",[79,34568,685],{"class":239},[79,34570,34571],{"class":89},"\"Epoch ",[79,34573,34574],{"class":96},"{}",[79,34576,2957],{"class":89},[79,34578,34574],{"class":96},[79,34580,703],{"class":89},[79,34582,34583],{"class":239},".format(epoch,num_epochs",[79,34585,320],{"class":243},[79,34587,1072],{"class":96},[79,34589,1191],{"class":239},[79,34591,34592,34594,34596,34599,34601,34603],{"class":81,"line":1228},[79,34593,34566],{"class":96},[79,34595,685],{"class":239},[79,34597,34598],{"class":89},"\"-\"",[79,34600,2829],{"class":243},[79,34602,2820],{"class":96},[79,34604,253],{"class":239},[79,34606,34607],{"class":81,"line":1246},[79,34608,454],{"emptyLinePlaceholder":453},[79,34610,34611],{"class":81,"line":1251},[79,34612,34613],{"class":2440},"        # 初始化参数\n",[79,34615,34616],{"class":81,"line":1274},[79,34617,34618],{"class":2440},"        # 训练集损失函数\n",[79,34620,34621,34624,34626],{"class":81,"line":1296},[79,34622,34623],{"class":239},"        train_loss",[79,34625,244],{"class":243},[79,34627,34458],{"class":96},[79,34629,34630],{"class":81,"line":1316},[79,34631,34632],{"class":2440},"        # 训练集准确度\n",[79,34634,34635,34638,34640],{"class":81,"line":1321},[79,34636,34637],{"class":239},"        train_corrects",[79,34639,244],{"class":243},[79,34641,5290],{"class":96},[79,34643,34644],{"class":81,"line":1326},[79,34645,34646],{"class":2440},"        # 验证集损失函数\n",[79,34648,34649,34652,34654],{"class":81,"line":1342},[79,34650,34651],{"class":239},"        val_loss",[79,34653,244],{"class":243},[79,34655,34458],{"class":96},[79,34657,34658],{"class":81,"line":18985},[79,34659,34660],{"class":2440},"        # 验证集准确度\n",[79,34662,34663,34666,34668],{"class":81,"line":18990},[79,34664,34665],{"class":239},"        val_corrects",[79,34667,244],{"class":243},[79,34669,5290],{"class":96},[79,34671,34672],{"class":81,"line":18995},[79,34673,34674],{"class":2440},"        # 训练集样本数量\n",[79,34676,34677,34680,34682],{"class":81,"line":19009},[79,34678,34679],{"class":239},"        train_num",[79,34681,244],{"class":243},[79,34683,5290],{"class":96},[79,34685,34686],{"class":81,"line":19021},[79,34687,34688],{"class":2440},"        # 验证集样本数量\n",[79,34690,34691,34694,34696],{"class":81,"line":19026},[79,34692,34693],{"class":239},"        val_num",[79,34695,244],{"class":243},[79,34697,5290],{"class":96},[79,34699,34700],{"class":81,"line":19039},[79,34701,34702],{"class":2440},"        # 将数据放到设备,并开始训练\n",[79,34704,34705,34707,34709,34711,34713],{"class":81,"line":19044},[79,34706,5606],{"class":243},[79,34708,33720],{"class":239},[79,34710,955],{"class":243},[79,34712,33725],{"class":96},[79,34714,34715],{"class":239},"(train_dataloader):\n",[79,34717,34718],{"class":81,"line":19049},[79,34719,34720],{"class":2440},"            # 将特征放入到训练设备\n",[79,34722,34723,34726,34728],{"class":81,"line":19054},[79,34724,34725],{"class":239},"            b_x",[79,34727,244],{"class":243},[79,34729,34730],{"class":239},"b_x.to(device)\n",[79,34732,34733],{"class":81,"line":19067},[79,34734,34735],{"class":2440},"            # 将标签放入到训练设备当中\n",[79,34737,34738,34741,34743],{"class":81,"line":19072},[79,34739,34740],{"class":239},"            b_y",[79,34742,244],{"class":243},[79,34744,34745],{"class":239},"b_y.to(device)\n",[79,34747,34749],{"class":81,"line":34748},98,[79,34750,34751],{"class":2440},"            # 设置模型为训练模式\n",[79,34753,34755],{"class":81,"line":34754},99,[79,34756,34757],{"class":239},"            model.train()\n",[79,34759,34761],{"class":81,"line":34760},100,[79,34762,34763],{"class":2440},"            # 将数据放到模型当中,开始前向传播\n",[79,34765,34767],{"class":81,"line":34766},101,[79,34768,34769],{"class":2440},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[79,34771,34773,34776,34778],{"class":81,"line":34772},102,[79,34774,34775],{"class":239},"            output",[79,34777,244],{"class":243},[79,34779,34780],{"class":239},"model(b_x)\n",[79,34782,34784],{"class":81,"line":34783},103,[79,34785,34786],{"class":2440},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[79,34788,34790,34793,34795,34798,34801,34803,34805],{"class":81,"line":34789},104,[79,34791,34792],{"class":239},"            pre_lab",[79,34794,244],{"class":243},[79,34796,34797],{"class":239},"torch.argmax(output,",[79,34799,34800],{"class":7412},"dim",[79,34802,244],{"class":243},[79,34804,1072],{"class":96},[79,34806,253],{"class":239},[79,34808,34810],{"class":81,"line":34809},105,[79,34811,34812],{"class":2440},"            # 计算每一个batch的损失函数\n",[79,34814,34816,34819,34821],{"class":81,"line":34815},106,[79,34817,34818],{"class":239},"            loss",[79,34820,244],{"class":243},[79,34822,34823],{"class":239},"criterion(output,b_y)\n",[79,34825,34827],{"class":81,"line":34826},107,[79,34828,34829],{"class":2440},"            # 将梯度初始化为0\n",[79,34831,34833],{"class":81,"line":34832},108,[79,34834,34835],{"class":239},"            optimizer.zero_grad()\n",[79,34837,34839],{"class":81,"line":34838},109,[79,34840,34841],{"class":2440},"            # 梯度置为0后再进行反向传播\n",[79,34843,34845],{"class":81,"line":34844},110,[79,34846,34847],{"class":239},"            loss.backward()\n",[79,34849,34851],{"class":81,"line":34850},111,[79,34852,34853],{"class":2440},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[79,34855,34857],{"class":81,"line":34856},112,[79,34858,34859],{"class":239},"            optimizer.step()\n",[79,34861,34863],{"class":81,"line":34862},113,[79,34864,34865],{"class":2440},"            # loss.item()指的是batch的平均损失\n",[79,34867,34869,34872,34874,34877,34879,34882,34884],{"class":81,"line":34868},114,[79,34870,34871],{"class":239},"            train_loss",[79,34873,1118],{"class":243},[79,34875,34876],{"class":239},"loss.item()",[79,34878,2829],{"class":243},[79,34880,34881],{"class":239},"b_x.size(",[79,34883,1030],{"class":96},[79,34885,253],{"class":239},[79,34887,34889],{"class":81,"line":34888},115,[79,34890,34891],{"class":2440},"            # 计算每个批次中正确预测的数量\n",[79,34893,34895,34898,34900,34903,34905],{"class":81,"line":34894},116,[79,34896,34897],{"class":239},"            train_corrects",[79,34899,1118],{"class":243},[79,34901,34902],{"class":239},"torch.sum(pre_lab",[79,34904,5155],{"class":243},[79,34906,34907],{"class":239},"b_y.data)\n",[79,34909,34911],{"class":81,"line":34910},117,[79,34912,34913],{"class":2440},"            # 计算目前为止一共处理了多少样本\n",[79,34915,34917,34920,34922,34924,34926],{"class":81,"line":34916},118,[79,34918,34919],{"class":239},"            train_num",[79,34921,1118],{"class":243},[79,34923,34881],{"class":239},[79,34925,1030],{"class":96},[79,34927,253],{"class":239},[79,34929,34931],{"class":81,"line":34930},119,[79,34932,34933],{"class":2440},"        # 验证数据\n",[79,34935,34937,34939,34942,34944,34946],{"class":81,"line":34936},120,[79,34938,5606],{"class":243},[79,34940,34941],{"class":239}," step ,(b_x,b_y) ",[79,34943,955],{"class":243},[79,34945,33725],{"class":96},[79,34947,34948],{"class":239},"(val_dataloader):\n",[79,34950,34952],{"class":81,"line":34951},121,[79,34953,34954],{"class":2440},"            # 将特征放到验证设备当中\n",[79,34956,34958,34960,34962],{"class":81,"line":34957},122,[79,34959,34725],{"class":239},[79,34961,244],{"class":243},[79,34963,34730],{"class":239},[79,34965,34967],{"class":81,"line":34966},123,[79,34968,34969],{"class":2440},"            # 将标签放到放到训练设备当中\n",[79,34971,34973,34975,34977],{"class":81,"line":34972},124,[79,34974,34740],{"class":239},[79,34976,244],{"class":243},[79,34978,34745],{"class":239},[79,34980,34982],{"class":81,"line":34981},125,[79,34983,34984],{"class":2440},"            # 开启验证模式，设置模型为评估模式\n",[79,34986,34988],{"class":81,"line":34987},126,[79,34989,34990],{"class":239},"            model.eval()\n",[79,34992,34994,34997],{"class":81,"line":34993},127,[79,34995,34996],{"class":243},"            with",[79,34998,34999],{"class":239}," torch.no_grad():\n",[79,35001,35003],{"class":81,"line":35002},128,[79,35004,35005],{"class":2440},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[79,35007,35009,35012,35014],{"class":81,"line":35008},129,[79,35010,35011],{"class":239},"                output ",[79,35013,244],{"class":243},[79,35015,35016],{"class":239}," model(b_x)\n",[79,35018,35020],{"class":81,"line":35019},130,[79,35021,35022],{"class":2440},"                # 查找每一行中最大值对应的下标\n",[79,35024,35026,35029,35031,35034,35036,35038,35040],{"class":81,"line":35025},131,[79,35027,35028],{"class":239},"                pre_lab ",[79,35030,244],{"class":243},[79,35032,35033],{"class":239}," torch.argmax(output, ",[79,35035,34800],{"class":7412},[79,35037,244],{"class":243},[79,35039,1072],{"class":96},[79,35041,253],{"class":239},[79,35043,35045],{"class":81,"line":35044},132,[79,35046,35047],{"class":2440},"                # 计算验证集上的当前 batch 损失\n",[79,35049,35051,35054,35056],{"class":81,"line":35050},133,[79,35052,35053],{"class":239},"                val_batch_loss ",[79,35055,244],{"class":243},[79,35057,35058],{"class":239}," criterion(output, b_y)\n",[79,35060,35062],{"class":81,"line":35061},134,[79,35063,35064],{"class":2440},"                # 对损失函数进行累加（按样本数加权）\n",[79,35066,35068,35071,35073,35076,35078,35081,35083],{"class":81,"line":35067},135,[79,35069,35070],{"class":239},"                val_loss ",[79,35072,1118],{"class":243},[79,35074,35075],{"class":239}," val_batch_loss.item() ",[79,35077,2829],{"class":243},[79,35079,35080],{"class":239}," b_x.size(",[79,35082,1030],{"class":96},[79,35084,253],{"class":239},[79,35086,35088,35091,35093,35096,35098],{"class":81,"line":35087},136,[79,35089,35090],{"class":239},"                val_corrects ",[79,35092,1118],{"class":243},[79,35094,35095],{"class":239}," torch.sum(pre_lab ",[79,35097,5155],{"class":243},[79,35099,35100],{"class":239}," b_y.data)\n",[79,35102,35104],{"class":81,"line":35103},137,[79,35105,35106],{"class":2440},"                # 当前用于验证的样本数量\n",[79,35108,35110,35113,35115,35117,35119],{"class":81,"line":35109},138,[79,35111,35112],{"class":239},"            val_num ",[79,35114,1118],{"class":243},[79,35116,35080],{"class":239},[79,35118,1030],{"class":96},[79,35120,253],{"class":239},[79,35122,35124],{"class":81,"line":35123},139,[79,35125,35126],{"class":2440},"        # 计算并保存每一次迭代的loss值和准确率\n",[79,35128,35130],{"class":81,"line":35129},140,[79,35131,35132],{"class":2440},"        # 计算并保存训练集的loss值\n",[79,35134,35136,35139,35141],{"class":81,"line":35135},141,[79,35137,35138],{"class":239},"        train_loss_all.append(train_loss",[79,35140,2957],{"class":243},[79,35142,35143],{"class":239},"train_num)\n",[79,35145,35147],{"class":81,"line":35146},142,[79,35148,35149],{"class":2440},"        # 取双精度\n",[79,35151,35153],{"class":81,"line":35152},143,[79,35154,35155],{"class":2440},"        # 计算并保存训练集的准确率\n",[79,35157,35159,35162,35164],{"class":81,"line":35158},144,[79,35160,35161],{"class":239},"        train_acc_all.append(train_corrects.double().item()",[79,35163,2957],{"class":243},[79,35165,35143],{"class":239},[79,35167,35169],{"class":81,"line":35168},145,[79,35170,35171],{"class":2440},"        # 计算并保存验证集的loss值\n",[79,35173,35175,35178,35180],{"class":81,"line":35174},146,[79,35176,35177],{"class":239},"        val_loss_all.append(val_loss",[79,35179,2957],{"class":243},[79,35181,35182],{"class":239},"val_num)\n",[79,35184,35186],{"class":81,"line":35185},147,[79,35187,35188],{"class":2440},"        # 计算并保存验证集的准确率\n",[79,35190,35192,35195,35197],{"class":81,"line":35191},148,[79,35193,35194],{"class":239},"        val_acc_all.append(val_corrects.double().item()",[79,35196,2957],{"class":243},[79,35198,35182],{"class":239},[79,35200,35202],{"class":81,"line":35201},149,[79,35203,454],{"emptyLinePlaceholder":453},[79,35205,35207],{"class":81,"line":35206},150,[79,35208,35209],{"class":2440},"        # 打印训练一轮的loss值和准确率\n",[79,35211,35213,35215,35217,35219,35221,35224,35226,35229,35231,35234,35236,35238,35240,35242,35245,35247,35249,35252,35254,35256],{"class":81,"line":35212},151,[79,35214,34566],{"class":96},[79,35216,685],{"class":239},[79,35218,5795],{"class":89},[79,35220,34574],{"class":96},[79,35222,35223],{"class":89},"train loss:",[79,35225,694],{"class":96},[79,35227,35228],{"class":243},":.4f",[79,35230,700],{"class":96},[79,35232,35233],{"class":89}," train acc:",[79,35235,694],{"class":96},[79,35237,35228],{"class":243},[79,35239,700],{"class":96},[79,35241,5795],{"class":89},[79,35243,35244],{"class":239},".format(epoch,train_loss_all[",[79,35246,320],{"class":243},[79,35248,1072],{"class":96},[79,35250,35251],{"class":239},"],train_acc_all[",[79,35253,320],{"class":243},[79,35255,1072],{"class":96},[79,35257,35258],{"class":239},"]))\n",[79,35260,35262,35264,35266,35268,35270,35273,35275,35277,35279,35282,35284,35286,35288,35290,35293,35295,35297,35300,35302,35304],{"class":81,"line":35261},152,[79,35263,34566],{"class":96},[79,35265,685],{"class":239},[79,35267,5795],{"class":89},[79,35269,34574],{"class":96},[79,35271,35272],{"class":89},"val loss:",[79,35274,694],{"class":96},[79,35276,35228],{"class":243},[79,35278,700],{"class":96},[79,35280,35281],{"class":89}," val acc:",[79,35283,694],{"class":96},[79,35285,35228],{"class":243},[79,35287,700],{"class":96},[79,35289,5795],{"class":89},[79,35291,35292],{"class":239},".format(epoch,val_loss_all[",[79,35294,320],{"class":243},[79,35296,1072],{"class":96},[79,35298,35299],{"class":239},"],val_acc_all[",[79,35301,320],{"class":243},[79,35303,1072],{"class":96},[79,35305,35258],{"class":239},[79,35307,35309],{"class":81,"line":35308},153,[79,35310,454],{"emptyLinePlaceholder":453},[79,35312,35314],{"class":81,"line":35313},154,[79,35315,35316],{"class":2440},"        # 判断准确度--->保存最优模型\n",[79,35318,35320,35322,35325,35327,35329,35331,35333],{"class":81,"line":35319},155,[79,35321,1132],{"class":243},[79,35323,35324],{"class":239}," val_acc_all[",[79,35326,320],{"class":243},[79,35328,1072],{"class":96},[79,35330,3311],{"class":239},[79,35332,3330],{"class":243},[79,35334,35335],{"class":239},"best_acc:\n",[79,35337,35339],{"class":81,"line":35338},156,[79,35340,35341],{"class":2440},"            # 保存当前模型准确度\n",[79,35343,35345,35348,35350,35352,35355,35357,35359],{"class":81,"line":35344},157,[79,35346,35347],{"class":239},"            best_acc:",[79,35349,797],{"class":96},[79,35351,244],{"class":243},[79,35353,35354],{"class":239},"val_acc_all[",[79,35356,320],{"class":243},[79,35358,1072],{"class":96},[79,35360,35361],{"class":239},"]\n",[79,35363,35365],{"class":81,"line":35364},158,[79,35366,35367],{"class":2440},"            # 保存当前的准确度\n",[79,35369,35371],{"class":81,"line":35370},159,[79,35372,35373],{"class":2440},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[79,35375,35377,35380,35382],{"class":81,"line":35376},160,[79,35378,35379],{"class":239},"            best_model_wts",[79,35381,244],{"class":243},[79,35383,34430],{"class":239},[79,35385,35387],{"class":81,"line":35386},161,[79,35388,454],{"emptyLinePlaceholder":453},[79,35390,35392],{"class":81,"line":35391},162,[79,35393,35394],{"class":2440},"        # 计算耗时\n",[79,35396,35398,35401,35403,35406,35408],{"class":81,"line":35397},163,[79,35399,35400],{"class":239},"        time_use",[79,35402,244],{"class":243},[79,35404,35405],{"class":239},"time.time()",[79,35407,320],{"class":243},[79,35409,35410],{"class":239},"since\n",[79,35412,35414,35416,35418,35421,35423,35426,35428,35430,35432,35434,35436,35439,35442,35445,35447,35450,35452,35454],{"class":81,"line":35413},164,[79,35415,34566],{"class":96},[79,35417,685],{"class":239},[79,35419,35420],{"class":89},"'训练和验证耗费的时间",[79,35422,694],{"class":96},[79,35424,35425],{"class":243},":.0f",[79,35427,700],{"class":96},[79,35429,2917],{"class":89},[79,35431,694],{"class":96},[79,35433,35425],{"class":243},[79,35435,700],{"class":96},[79,35437,35438],{"class":89},"s'",[79,35440,35441],{"class":239},".format(time_use",[79,35443,35444],{"class":243},"\u002F\u002F",[79,35446,3279],{"class":96},[79,35448,35449],{"class":239},",time_use",[79,35451,1137],{"class":243},[79,35453,3279],{"class":96},[79,35455,1191],{"class":239},[79,35457,35459],{"class":81,"line":35458},165,[79,35460,35461],{"class":2440},"    # 选择最优参数\n",[79,35463,35465],{"class":81,"line":35464},166,[79,35466,35467],{"class":2440},"    # 加载最高准确率下的模型参数\n",[79,35469,35471],{"class":81,"line":35470},167,[79,35472,35473],{"class":2440},"    # model.load_state_dict(best_model_wts)\n",[79,35475,35477,35480,35483],{"class":81,"line":35476},168,[79,35478,35479],{"class":239},"    torch.save(model.state_dict(best_model_wts), ",[79,35481,35482],{"class":89},"'.\u002Fbest_model.pth'",[79,35484,253],{"class":239},[79,35486,35488],{"class":81,"line":35487},169,[79,35489,35490],{"class":2440},"    # 或者写成\n",[79,35492,35494],{"class":81,"line":35493},170,[79,35495,35496],{"class":2440},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[79,35498,35500],{"class":81,"line":35499},171,[79,35501,35502],{"class":2440},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[79,35504,35506,35509,35511,35514,35517,35519],{"class":81,"line":35505},172,[79,35507,35508],{"class":239},"    train_process",[79,35510,244],{"class":243},[79,35512,35513],{"class":239},"pd.DataFrame(",[79,35515,35516],{"class":7412},"data",[79,35518,244],{"class":243},[79,35520,3782],{"class":239},[79,35522,35524,35527,35529,35532],{"class":81,"line":35523},173,[79,35525,35526],{"class":89},"        \"epoch\"",[79,35528,3232],{"class":239},[79,35530,35531],{"class":96},"range",[79,35533,35534],{"class":239},"(num_epochs),\n",[79,35536,35538,35541],{"class":81,"line":35537},174,[79,35539,35540],{"class":89},"        \"train_loss_all\"",[79,35542,35543],{"class":239},":train_loss_all,\n",[79,35545,35547,35550],{"class":81,"line":35546},175,[79,35548,35549],{"class":89},"        \"val_loss_all\"",[79,35551,35552],{"class":239},":val_loss_all,\n",[79,35554,35556,35559],{"class":81,"line":35555},176,[79,35557,35558],{"class":89},"        \"train_acc_all\"",[79,35560,35561],{"class":239},":train_acc_all,\n",[79,35563,35565,35568],{"class":81,"line":35564},177,[79,35566,35567],{"class":89},"        \"val_acc_all\"",[79,35569,35570],{"class":239},":val_acc_all\n",[79,35572,35574],{"class":81,"line":35573},178,[79,35575,35576],{"class":239},"    })\n",[79,35578,35580],{"class":81,"line":35579},179,[79,35581,35582],{"class":2440},"    # 返回训练保存的过程\n",[79,35584,35586,35588],{"class":81,"line":35585},180,[79,35587,711],{"class":243},[79,35589,35590],{"class":239}," train_process\n",[79,35592,35594],{"class":81,"line":35593},181,[79,35595,454],{"emptyLinePlaceholder":453},[79,35597,35599],{"class":81,"line":35598},182,[79,35600,35601],{"class":2440},"# 将loss值和精度按照图片的形式展示出来\n",[79,35603,35605,35607,35610],{"class":81,"line":35604},183,[79,35606,633],{"class":243},[79,35608,35609],{"class":85}," matplot_acc_loss",[79,35611,35612],{"class":239},"(train_process):\n",[79,35614,35616],{"class":81,"line":35615},184,[79,35617,35618],{"class":2440},"    # 设置图的大小\n",[79,35620,35622,35625,35627,35629,35631,35633,35635,35637],{"class":81,"line":35621},185,[79,35623,35624],{"class":239},"    plt.figure(",[79,35626,33811],{"class":7412},[79,35628,244],{"class":243},[79,35630,685],{"class":239},[79,35632,2872],{"class":96},[79,35634,2752],{"class":239},[79,35636,2668],{"class":96},[79,35638,1191],{"class":239},[79,35640,35642],{"class":81,"line":35641},186,[79,35643,35644],{"class":2440},"    # 设置图中有几张图\n",[79,35646,35648],{"class":81,"line":35647},187,[79,35649,35650],{"class":2440},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[79,35652,35654],{"class":81,"line":35653},188,[79,35655,35656],{"class":2440},"    # ①loss图\n",[79,35658,35660,35662,35664,35666,35668,35670,35672],{"class":81,"line":35659},189,[79,35661,33845],{"class":239},[79,35663,1072],{"class":96},[79,35665,2752],{"class":239},[79,35667,1049],{"class":96},[79,35669,2752],{"class":239},[79,35671,1072],{"class":96},[79,35673,253],{"class":239},[79,35675,35677],{"class":81,"line":35676},190,[79,35678,35679],{"class":2440},"    # 补充:\n",[79,35681,35683],{"class":81,"line":35682},191,[79,35684,35685],{"class":2440},"    # plt.subplot(nrows, ncols, index)\n",[79,35687,35689],{"class":81,"line":35688},192,[79,35690,35691],{"class":2440},"    # nrows：行数\n",[79,35693,35695],{"class":81,"line":35694},193,[79,35696,35697],{"class":2440},"    # ncols：列数\n",[79,35699,35701],{"class":81,"line":35700},194,[79,35702,35703],{"class":2440},"    # index：目前选中第几个子图（从1开始）\n",[79,35705,35707,35710,35713,35716,35719,35721,35724,35726,35729],{"class":81,"line":35706},195,[79,35708,35709],{"class":239},"    plt.plot(train_process[",[79,35711,35712],{"class":89},"\"epoch\"",[79,35714,35715],{"class":239},"],train_process.train_loss_all,",[79,35717,35718],{"class":89},"'ro-'",[79,35720,2752],{"class":239},[79,35722,35723],{"class":7412},"label",[79,35725,244],{"class":243},[79,35727,35728],{"class":89},"'train loss'",[79,35730,253],{"class":239},[79,35732,35734,35736,35738,35741,35744,35746,35748,35750,35753],{"class":81,"line":35733},196,[79,35735,35709],{"class":239},[79,35737,35712],{"class":89},[79,35739,35740],{"class":239},"],train_process.val_loss_all,",[79,35742,35743],{"class":89},"'bs--'",[79,35745,2752],{"class":239},[79,35747,35723],{"class":7412},[79,35749,244],{"class":243},[79,35751,35752],{"class":89},"'val loss'",[79,35754,253],{"class":239},[79,35756,35758],{"class":81,"line":35757},197,[79,35759,35760],{"class":2440},"    # 添加一个图例\n",[79,35762,35764],{"class":81,"line":35763},198,[79,35765,35766],{"class":239},"    plt.legend()\n",[79,35768,35770],{"class":81,"line":35769},199,[79,35771,35772],{"class":2440},"    # 给轴添加标签\n",[79,35774,35776,35779,35782],{"class":81,"line":35775},200,[79,35777,35778],{"class":239},"    plt.xlabel(",[79,35780,35781],{"class":89},"'epoch'",[79,35783,253],{"class":239},[79,35785,35787,35790,35793],{"class":81,"line":35786},201,[79,35788,35789],{"class":239},"    plt.ylabel(",[79,35791,35792],{"class":89},"'loss'",[79,35794,253],{"class":239},[79,35796,35798],{"class":81,"line":35797},202,[79,35799,35800],{"class":2440},"    # ②准确度图\n",[79,35802,35804,35806,35808,35810,35812,35814,35816],{"class":81,"line":35803},203,[79,35805,33845],{"class":239},[79,35807,1072],{"class":96},[79,35809,2752],{"class":239},[79,35811,1049],{"class":96},[79,35813,2752],{"class":239},[79,35815,1049],{"class":96},[79,35817,253],{"class":239},[79,35819,35821,35823,35825,35828,35830,35832,35834,35836,35839],{"class":81,"line":35820},204,[79,35822,35709],{"class":239},[79,35824,35712],{"class":89},[79,35826,35827],{"class":239},"],train_process.train_acc_all,",[79,35829,35718],{"class":89},[79,35831,2752],{"class":239},[79,35833,35723],{"class":7412},[79,35835,244],{"class":243},[79,35837,35838],{"class":89},"'train acc'",[79,35840,253],{"class":239},[79,35842,35844,35846,35848,35851,35853,35855,35857,35859,35862],{"class":81,"line":35843},205,[79,35845,35709],{"class":239},[79,35847,35712],{"class":89},[79,35849,35850],{"class":239},"],train_process.val_acc_all,",[79,35852,35743],{"class":89},[79,35854,2752],{"class":239},[79,35856,35723],{"class":7412},[79,35858,244],{"class":243},[79,35860,35861],{"class":89},"'val acc'",[79,35863,253],{"class":239},[79,35865,35867],{"class":81,"line":35866},206,[79,35868,35869],{"class":2440},"    # 添加图例\n",[79,35871,35873],{"class":81,"line":35872},207,[79,35874,35766],{"class":239},[79,35876,35878,35880,35882],{"class":81,"line":35877},208,[79,35879,35778],{"class":239},[79,35881,35712],{"class":89},[79,35883,253],{"class":239},[79,35885,35887,35889,35892],{"class":81,"line":35886},209,[79,35888,35789],{"class":239},[79,35890,35891],{"class":89},"\"acc\"",[79,35893,253],{"class":239},[79,35895,35897],{"class":81,"line":35896},210,[79,35898,35899],{"class":239},"    plt.show()\n",[79,35901,35903],{"class":81,"line":35902},211,[79,35904,454],{"emptyLinePlaceholder":453},[79,35906,35908],{"class":81,"line":35907},212,[79,35909,35910],{"class":2440},"# 正式开始训练:\n",[79,35912,35914,35916,35918,35920,35922],{"class":81,"line":35913},213,[79,35915,1329],{"class":243},[79,35917,1332],{"class":96},[79,35919,5155],{"class":243},[79,35921,33348],{"class":89},[79,35923,673],{"class":239},[79,35925,35927],{"class":81,"line":35926},214,[79,35928,35929],{"class":2440},"    # 将模型实例化\n",[79,35931,35933,35936,35938],{"class":81,"line":35932},215,[79,35934,35935],{"class":239},"    LeNet",[79,35937,244],{"class":243},[79,35939,35940],{"class":239},"LeNet()\n",[79,35942,35944,35947,35949],{"class":81,"line":35943},216,[79,35945,35946],{"class":239},"    train_dataloader,val_dataloader",[79,35948,244],{"class":243},[79,35950,35951],{"class":239},"train_val_data_process()\n",[79,35953,35955,35957,35959,35962,35965,35967,35969],{"class":81,"line":35954},217,[79,35956,35508],{"class":239},[79,35958,244],{"class":243},[79,35960,35961],{"class":239},"train_model_process(LeNet,train_dataloader,val_dataloader,",[79,35963,35964],{"class":7412},"num_epochs",[79,35966,244],{"class":243},[79,35968,3073],{"class":96},[79,35970,253],{"class":239},[79,35972,35974],{"class":81,"line":35973},218,[79,35975,35976],{"class":239},"    matplot_acc_loss(train_process)\n",[19,35978,35979],{},"画图的补充点学习：",[19,35981,35982],{},[3699,35983],{"alt":57,"src":35984},"\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,35986,35987],{"start":178},[29,35988,35989],{},"测试",[51,35991,35993],{"className":230,"code":35992,"language":232,"meta":57,"style":57},"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",[59,35994,35995,36001,36011,36023,36033,36038,36048,36058,36062,36067,36076,36093,36105,36122,36133,36149,36154,36165,36176,36187,36194,36198,36203,36213,36218,36235,36243,36247,36252,36261,36270,36274,36279,36284,36289,36296,36301,36313,36323,36333,36338,36342,36347,36356,36361,36377,36382,36387,36392,36406,36411,36425,36429,36434,36449,36454,36466,36470,36475,36487,36492,36500,36505,36510,36520,36525,36534,36539,36544,36548,36553,36558,36574,36582,36587,36592,36651,36657,36662,36673,36681,36689,36693,36698,36702,36707,36715,36720,36736,36741,36751,36761],{"__ignoreMap":57},[79,35996,35997,35999],{"class":81,"line":82},[79,35998,432],{"class":243},[79,36000,32521],{"class":239},[79,36002,36003,36005,36007,36009],{"class":81,"line":167},[79,36004,432],{"class":243},[79,36006,33534],{"class":239},[79,36008,445],{"class":243},[79,36010,33539],{"class":239},[79,36012,36013,36015,36018,36020],{"class":81,"line":178},[79,36014,32862],{"class":243},[79,36016,36017],{"class":239}," jupyter_client.consoleapp ",[79,36019,432],{"class":243},[79,36021,36022],{"class":239}," classes\n",[79,36024,36025,36027,36029,36031],{"class":81,"line":457},[79,36026,32862],{"class":243},[79,36028,33517],{"class":239},[79,36030,432],{"class":243},[79,36032,33522],{"class":239},[79,36034,36035],{"class":81,"line":462},[79,36036,36037],{"class":2440},"# 导入数据集\n",[79,36039,36040,36042,36044,36046],{"class":81,"line":474},[79,36041,32862],{"class":243},[79,36043,33490],{"class":239},[79,36045,432],{"class":243},[79,36047,33495],{"class":239},[79,36049,36050,36052,36054,36056],{"class":81,"line":480},[79,36051,32862],{"class":243},[79,36053,34032],{"class":239},[79,36055,432],{"class":243},[79,36057,34037],{"class":239},[79,36059,36060],{"class":81,"line":486},[79,36061,454],{"emptyLinePlaceholder":453},[79,36063,36064],{"class":81,"line":491},[79,36065,36066],{"class":2440},"# 测试数据处理\n",[79,36068,36069,36071,36074],{"class":81,"line":497},[79,36070,633],{"class":243},[79,36072,36073],{"class":85}," test_data_process",[79,36075,34070],{"class":239},[79,36077,36078,36081,36083,36085,36087,36089,36091],{"class":81,"line":503},[79,36079,36080],{"class":239},"    test_data",[79,36082,244],{"class":243},[79,36084,33574],{"class":239},[79,36086,33577],{"class":7412},[79,36088,244],{"class":243},[79,36090,33582],{"class":89},[79,36092,33585],{"class":239},[79,36094,36095,36098,36100,36103],{"class":81,"line":509},[79,36096,36097],{"class":7412},"                           train",[79,36099,244],{"class":243},[79,36101,36102],{"class":96},"False",[79,36104,33585],{"class":239},[79,36106,36107,36110,36112,36114,36116,36118,36120],{"class":81,"line":514},[79,36108,36109],{"class":7412},"                           transform",[79,36111,244],{"class":243},[79,36113,33612],{"class":239},[79,36115,33615],{"class":7412},[79,36117,244],{"class":243},[79,36119,3273],{"class":96},[79,36121,33623],{"class":239},[79,36123,36124,36127,36129,36131],{"class":81,"line":520},[79,36125,36126],{"class":7412},"                           download",[79,36128,244],{"class":243},[79,36130,33595],{"class":96},[79,36132,253],{"class":239},[79,36134,36135,36138,36140,36142,36144,36146],{"class":81,"line":526},[79,36136,36137],{"class":239},"    test_dataloader",[79,36139,244],{"class":243},[79,36141,33653],{"class":239},[79,36143,33656],{"class":7412},[79,36145,244],{"class":243},[79,36147,36148],{"class":239},"test_data,\n",[79,36150,36151],{"class":81,"line":532},[79,36152,36153],{"class":2440},"                                    # 这里是一张一张进行测试\n",[79,36155,36156,36159,36161,36163],{"class":81,"line":537},[79,36157,36158],{"class":7412},"                                    batch_size",[79,36160,244],{"class":243},[79,36162,1072],{"class":96},[79,36164,33585],{"class":239},[79,36166,36167,36170,36172,36174],{"class":81,"line":543},[79,36168,36169],{"class":7412},"                                    shuffle",[79,36171,244],{"class":243},[79,36173,33595],{"class":96},[79,36175,33585],{"class":239},[79,36177,36178,36181,36183,36185],{"class":81,"line":549},[79,36179,36180],{"class":7412},"                                    num_workers",[79,36182,244],{"class":243},[79,36184,1030],{"class":96},[79,36186,253],{"class":239},[79,36188,36189,36191],{"class":81,"line":555},[79,36190,711],{"class":243},[79,36192,36193],{"class":239}," test_dataloader\n",[79,36195,36196],{"class":81,"line":561},[79,36197,454],{"emptyLinePlaceholder":453},[79,36199,36200],{"class":81,"line":567},[79,36201,36202],{"class":2440},"# 定义模型测试函数\n",[79,36204,36205,36207,36210],{"class":81,"line":573},[79,36206,633],{"class":243},[79,36208,36209],{"class":85}," test_model_process",[79,36211,36212],{"class":239},"(model,test_dataloader):\n",[79,36214,36215],{"class":81,"line":579},[79,36216,36217],{"class":2440},"    # 将模型放到设备当中，先进行判断\n",[79,36219,36220,36222,36224,36226,36228,36230,36232],{"class":81,"line":584},[79,36221,33360],{"class":239},[79,36223,244],{"class":243},[79,36225,33367],{"class":89},[79,36227,3929],{"class":243},[79,36229,33372],{"class":239},[79,36231,3926],{"class":243},[79,36233,36234],{"class":89}," \"cpu\"\n",[79,36236,36237,36239,36241],{"class":81,"line":590},[79,36238,33412],{"class":239},[79,36240,244],{"class":243},[79,36242,34405],{"class":239},[79,36244,36245],{"class":81,"line":596},[79,36246,454],{"emptyLinePlaceholder":453},[79,36248,36249],{"class":81,"line":602},[79,36250,36251],{"class":2440},"    # 设置初始化参数\n",[79,36253,36254,36257,36259],{"class":81,"line":608},[79,36255,36256],{"class":239},"    test_corrects",[79,36258,244],{"class":243},[79,36260,34458],{"class":96},[79,36262,36263,36266,36268],{"class":81,"line":614},[79,36264,36265],{"class":239},"    test_num",[79,36267,244],{"class":243},[79,36269,5290],{"class":96},[79,36271,36272],{"class":81,"line":620},[79,36273,454],{"emptyLinePlaceholder":453},[79,36275,36276],{"class":81,"line":625},[79,36277,36278],{"class":2440},"    # 进行模型测试\n",[79,36280,36281],{"class":81,"line":630},[79,36282,36283],{"class":2440},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[79,36285,36286],{"class":81,"line":648},[79,36287,36288],{"class":2440},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[79,36290,36291,36294],{"class":81,"line":659},[79,36292,36293],{"class":243},"    with",[79,36295,34999],{"class":239},[79,36297,36298],{"class":81,"line":676},[79,36299,36300],{"class":2440},"        # 从数据中进行\n",[79,36302,36303,36305,36308,36310],{"class":81,"line":708},[79,36304,5606],{"class":243},[79,36306,36307],{"class":239}," test_data_x,test_data_y ",[79,36309,955],{"class":243},[79,36311,36312],{"class":239}," test_dataloader:\n",[79,36314,36315,36318,36320],{"class":81,"line":717},[79,36316,36317],{"class":239},"            test_data_x",[79,36319,244],{"class":243},[79,36321,36322],{"class":239},"test_data_x.to(device)\n",[79,36324,36325,36328,36330],{"class":81,"line":722},[79,36326,36327],{"class":239},"            test_data_y",[79,36329,244],{"class":243},[79,36331,36332],{"class":239},"test_data_y.to(device)\n",[79,36334,36335],{"class":81,"line":727},[79,36336,36337],{"class":2440},"            # 设置为验证模式\n",[79,36339,36340],{"class":81,"line":738},[79,36341,34990],{"class":239},[79,36343,36344],{"class":81,"line":753},[79,36345,36346],{"class":2440},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[79,36348,36349,36351,36353],{"class":81,"line":768},[79,36350,34775],{"class":239},[79,36352,244],{"class":243},[79,36354,36355],{"class":239},"model(test_data_x)\n",[79,36357,36358],{"class":81,"line":776},[79,36359,36360],{"class":2440},"            # 查找每一行中最大值对应的下标\n",[79,36362,36363,36365,36367,36369,36371,36373,36375],{"class":81,"line":781},[79,36364,34792],{"class":239},[79,36366,244],{"class":243},[79,36368,34797],{"class":239},[79,36370,34800],{"class":7412},[79,36372,244],{"class":243},[79,36374,1072],{"class":96},[79,36376,253],{"class":239},[79,36378,36379],{"class":81,"line":786},[79,36380,36381],{"class":2440},"            # 计算正确率\n",[79,36383,36384],{"class":81,"line":802},[79,36385,36386],{"class":2440},"            # .data表示是一个不带梯度信息的tensor\n",[79,36388,36389],{"class":81,"line":815},[79,36390,36391],{"class":2440},"            # 如果预测正确，则准确度test_corrects加1\n",[79,36393,36394,36397,36399,36401,36403],{"class":81,"line":828},[79,36395,36396],{"class":239},"            test_corrects",[79,36398,1118],{"class":243},[79,36400,34902],{"class":239},[79,36402,5155],{"class":243},[79,36404,36405],{"class":239},"test_data_y.data)\n",[79,36407,36408],{"class":81,"line":842},[79,36409,36410],{"class":2440},"            # 将所有的测试样本进行累计\n",[79,36412,36413,36416,36418,36421,36423],{"class":81,"line":859},[79,36414,36415],{"class":239},"            test_num",[79,36417,1118],{"class":243},[79,36419,36420],{"class":239},"test_data_x.size(",[79,36422,1030],{"class":96},[79,36424,253],{"class":239},[79,36426,36427],{"class":81,"line":878},[79,36428,454],{"emptyLinePlaceholder":453},[79,36430,36431],{"class":81,"line":883},[79,36432,36433],{"class":2440},"        # 计算准确度\n",[79,36435,36436,36439,36441,36444,36446],{"class":81,"line":888},[79,36437,36438],{"class":239},"        test_acc",[79,36440,244],{"class":243},[79,36442,36443],{"class":239},"test_corrects.double().item()",[79,36445,2957],{"class":243},[79,36447,36448],{"class":239},"test_num\n",[79,36450,36451],{"class":81,"line":904},[79,36452,36453],{"class":2440},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[79,36455,36456,36458,36460,36463],{"class":81,"line":919},[79,36457,34566],{"class":96},[79,36459,685],{"class":239},[79,36461,36462],{"class":89},"\"测试的准确率：\"",[79,36464,36465],{"class":239},",test_acc)\n",[79,36467,36468],{"class":81,"line":930},[79,36469,454],{"emptyLinePlaceholder":453},[79,36471,36472],{"class":81,"line":941},[79,36473,36474],{"class":2440},"# 实现模型的测试功能\n",[79,36476,36477,36479,36481,36483,36485],{"class":81,"line":946},[79,36478,1329],{"class":243},[79,36480,1332],{"class":96},[79,36482,5155],{"class":243},[79,36484,33348],{"class":89},[79,36486,673],{"class":239},[79,36488,36489],{"class":81,"line":969},[79,36490,36491],{"class":2440},"    # 加载模型\n",[79,36493,36494,36496,36498],{"class":81,"line":975},[79,36495,33412],{"class":239},[79,36497,244],{"class":243},[79,36499,35940],{"class":239},[79,36501,36502],{"class":81,"line":989},[79,36503,36504],{"class":2440},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[79,36506,36507],{"class":81,"line":1003},[79,36508,36509],{"class":2440},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[79,36511,36512,36515,36518],{"class":81,"line":1019},[79,36513,36514],{"class":239},"    model.load_state_dict(torch.load(",[79,36516,36517],{"class":89},"'best_model.pth'",[79,36519,1191],{"class":239},[79,36521,36522],{"class":81,"line":1024},[79,36523,36524],{"class":2440},"    # 数据加载\n",[79,36526,36527,36529,36531],{"class":81,"line":1067},[79,36528,36137],{"class":239},[79,36530,244],{"class":243},[79,36532,36533],{"class":239},"test_data_process()\n",[79,36535,36536],{"class":81,"line":1101},[79,36537,36538],{"class":2440},"    # 加载模型测试的函数\n",[79,36540,36541],{"class":81,"line":1106},[79,36542,36543],{"class":239},"    test_model_process(model,test_dataloader)\n",[79,36545,36546],{"class":81,"line":1112},[79,36547,454],{"emptyLinePlaceholder":453},[79,36549,36550],{"class":81,"line":1124},[79,36551,36552],{"class":2440},"    # 验证集推理实现：\n",[79,36554,36555],{"class":81,"line":1129},[79,36556,36557],{"class":2440},"    # 加载数据加载的更详细一些\n",[79,36559,36560,36562,36564,36566,36568,36570,36572],{"class":81,"line":1150},[79,36561,33360],{"class":239},[79,36563,244],{"class":243},[79,36565,33367],{"class":89},[79,36567,3929],{"class":243},[79,36569,33372],{"class":239},[79,36571,3926],{"class":243},[79,36573,36234],{"class":89},[79,36575,36576,36578,36580],{"class":81,"line":1161},[79,36577,33412],{"class":239},[79,36579,244],{"class":243},[79,36581,34405],{"class":239},[79,36583,36584],{"class":81,"line":1175},[79,36585,36586],{"class":2440},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[79,36588,36589],{"class":81,"line":1194},[79,36590,36591],{"class":2440},"    # 顺序不可改变\n",[79,36593,36594,36597,36599,36601,36604,36606,36609,36611,36614,36616,36619,36621,36624,36626,36629,36631,36634,36636,36639,36641,36644,36646,36649],{"class":81,"line":1211},[79,36595,36596],{"class":239},"    classes",[79,36598,244],{"class":243},[79,36600,3263],{"class":239},[79,36602,36603],{"class":89},"'T-shirt\u002Ftop'",[79,36605,2752],{"class":239},[79,36607,36608],{"class":89},"'Trouser'",[79,36610,2752],{"class":239},[79,36612,36613],{"class":89},"'Pullover'",[79,36615,2752],{"class":239},[79,36617,36618],{"class":89},"'Dress'",[79,36620,2752],{"class":239},[79,36622,36623],{"class":89},"'Coat'",[79,36625,2752],{"class":239},[79,36627,36628],{"class":89},"'Sandal'",[79,36630,2752],{"class":239},[79,36632,36633],{"class":89},"'Shirt'",[79,36635,2752],{"class":239},[79,36637,36638],{"class":89},"'Sneaker'",[79,36640,2752],{"class":239},[79,36642,36643],{"class":89},"'Bag'",[79,36645,2752],{"class":239},[79,36647,36648],{"class":89},"'Ankle boot'",[79,36650,35361],{"class":239},[79,36652,36653,36655],{"class":81,"line":1228},[79,36654,36293],{"class":243},[79,36656,34999],{"class":239},[79,36658,36659],{"class":81,"line":1246},[79,36660,36661],{"class":2440},"        # 将数据和标签都放到设备当中\n",[79,36663,36664,36666,36669,36671],{"class":81,"line":1251},[79,36665,5606],{"class":243},[79,36667,36668],{"class":239}," b_x,b_y ",[79,36670,955],{"class":243},[79,36672,36312],{"class":239},[79,36674,36675,36677,36679],{"class":81,"line":1274},[79,36676,34725],{"class":239},[79,36678,244],{"class":243},[79,36680,34730],{"class":239},[79,36682,36683,36685,36687],{"class":81,"line":1296},[79,36684,34740],{"class":239},[79,36686,244],{"class":243},[79,36688,34745],{"class":239},[79,36690,36691],{"class":81,"line":1316},[79,36692,454],{"emptyLinePlaceholder":453},[79,36694,36695],{"class":81,"line":1321},[79,36696,36697],{"class":2440},"            # 设置模型为验证模式\n",[79,36699,36700],{"class":81,"line":1326},[79,36701,34990],{"class":239},[79,36703,36704],{"class":81,"line":1342},[79,36705,36706],{"class":2440},"            # 模型推理结果\n",[79,36708,36709,36711,36713],{"class":81,"line":18985},[79,36710,34775],{"class":239},[79,36712,244],{"class":243},[79,36714,34780],{"class":239},[79,36716,36717],{"class":81,"line":18990},[79,36718,36719],{"class":2440},"            # 获取最大下标，最大下标就是类别号\n",[79,36721,36722,36724,36726,36728,36730,36732,36734],{"class":81,"line":18995},[79,36723,34792],{"class":239},[79,36725,244],{"class":243},[79,36727,34797],{"class":239},[79,36729,34800],{"class":7412},[79,36731,244],{"class":243},[79,36733,1072],{"class":96},[79,36735,253],{"class":239},[79,36737,36738],{"class":81,"line":19009},[79,36739,36740],{"class":2440},"            # 取出张量中的数值\n",[79,36742,36743,36746,36748],{"class":81,"line":19021},[79,36744,36745],{"class":239},"            result",[79,36747,244],{"class":243},[79,36749,36750],{"class":239},"pre_lab.item()\n",[79,36752,36753,36756,36758],{"class":81,"line":19026},[79,36754,36755],{"class":239},"            label",[79,36757,244],{"class":243},[79,36759,36760],{"class":239},"b_y.item()\n",[79,36762,36763,36765,36767,36770,36773,36776,36778,36781],{"class":81,"line":19039},[79,36764,1164],{"class":96},[79,36766,685],{"class":239},[79,36768,36769],{"class":89},"\"预测值：\"",[79,36771,36772],{"class":239},",classes[result],",[79,36774,36775],{"class":89},"\"------\"",[79,36777,2752],{"class":239},[79,36779,36780],{"class":89},"\"真实值：\"",[79,36782,36783],{"class":239},",classes[label])\n",[19,36785,36786],{},"（2）AlexNet",[26,36788,36789],{},[29,36790,36791],{},"神经网络构建",[51,36793,36795],{"className":230,"code":36794,"language":232,"meta":57,"style":57},"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",[59,36796,36797,36803,36813,36823,36835,36839,36856,36864,36879,36891,36933,36960,37003,37029,37073,37116,37159,37186,37190,37200,37205,37233,37252,37271,37275,37280,37288,37303,37313,37327,37337,37352,37367,37382,37393,37397,37402,37412,37427,37432,37446,37461,37473,37478,37489,37494,37500,37505,37517,37537,37542,37551],{"__ignoreMap":57},[79,36798,36799,36801],{"class":81,"line":82},[79,36800,432],{"class":243},[79,36802,32521],{"class":239},[79,36804,36805,36807,36809,36811],{"class":81,"line":167},[79,36806,32862],{"class":243},[79,36808,32865],{"class":239},[79,36810,432],{"class":243},[79,36812,32870],{"class":239},[79,36814,36815,36817,36819,36821],{"class":81,"line":178},[79,36816,32862],{"class":243},[79,36818,32882],{"class":239},[79,36820,432],{"class":243},[79,36822,32887],{"class":239},[79,36824,36825,36827,36830,36832],{"class":81,"line":457},[79,36826,432],{"class":243},[79,36828,36829],{"class":239}," torch.nn.functional ",[79,36831,445],{"class":243},[79,36833,36834],{"class":239}," F\n",[79,36836,36837],{"class":81,"line":462},[79,36838,454],{"emptyLinePlaceholder":453},[79,36840,36841,36843,36846,36848,36850,36852,36854],{"class":81,"line":474},[79,36842,16855],{"class":243},[79,36844,36845],{"class":85}," AlexNet",[79,36847,685],{"class":239},[79,36849,32903],{"class":85},[79,36851,2931],{"class":239},[79,36853,32908],{"class":85},[79,36855,966],{"class":239},[79,36857,36858,36860,36862],{"class":81,"line":480},[79,36859,32925],{"class":243},[79,36861,32928],{"class":96},[79,36863,32931],{"class":239},[79,36865,36866,36868,36871,36873,36875,36877],{"class":81,"line":486},[79,36867,32941],{"class":96},[79,36869,36870],{"class":239},"(AlexNet,",[79,36872,32947],{"class":96},[79,36874,32950],{"class":239},[79,36876,32953],{"class":96},[79,36878,4191],{"class":239},[79,36880,36881,36883,36886,36888],{"class":81,"line":491},[79,36882,32969],{"class":96},[79,36884,36885],{"class":239},".ReLu",[79,36887,244],{"class":243},[79,36889,36890],{"class":239},"nn.ReLU()\n",[79,36892,36893,36895,36897,36899,36901,36903,36905,36907,36909,36911,36913,36915,36917,36919,36921,36923,36925,36927,36929,36931],{"class":81,"line":497},[79,36894,32969],{"class":96},[79,36896,32972],{"class":239},[79,36898,244],{"class":243},[79,36900,32977],{"class":239},[79,36902,32980],{"class":7412},[79,36904,244],{"class":243},[79,36906,1072],{"class":96},[79,36908,2752],{"class":239},[79,36910,32989],{"class":7412},[79,36912,244],{"class":243},[79,36914,2587],{"class":96},[79,36916,2752],{"class":239},[79,36918,32998],{"class":7412},[79,36920,244],{"class":243},[79,36922,2846],{"class":96},[79,36924,2752],{"class":239},[79,36926,33053],{"class":7412},[79,36928,244],{"class":243},[79,36930,2668],{"class":96},[79,36932,253],{"class":239},[79,36934,36935,36937,36939,36941,36944,36946,36948,36950,36952,36954,36956,36958],{"class":81,"line":503},[79,36936,32969],{"class":96},[79,36938,33037],{"class":239},[79,36940,244],{"class":243},[79,36942,36943],{"class":239},"nn.MaxPool2d(",[79,36945,32998],{"class":7412},[79,36947,244],{"class":243},[79,36949,1188],{"class":96},[79,36951,2752],{"class":239},[79,36953,33053],{"class":7412},[79,36955,244],{"class":243},[79,36957,1049],{"class":96},[79,36959,253],{"class":239},[79,36961,36962,36964,36966,36968,36970,36972,36974,36976,36978,36980,36982,36985,36987,36989,36991,36993,36995,36997,36999,37001],{"class":81,"line":509},[79,36963,32969],{"class":96},[79,36965,33066],{"class":239},[79,36967,244],{"class":243},[79,36969,32977],{"class":239},[79,36971,32980],{"class":7412},[79,36973,244],{"class":243},[79,36975,2587],{"class":96},[79,36977,2752],{"class":239},[79,36979,32989],{"class":7412},[79,36981,244],{"class":243},[79,36983,36984],{"class":96},"256",[79,36986,2752],{"class":239},[79,36988,32998],{"class":7412},[79,36990,244],{"class":243},[79,36992,2694],{"class":96},[79,36994,2752],{"class":239},[79,36996,33007],{"class":7412},[79,36998,244],{"class":243},[79,37000,1049],{"class":96},[79,37002,253],{"class":239},[79,37004,37005,37007,37009,37011,37013,37015,37017,37019,37021,37023,37025,37027],{"class":81,"line":514},[79,37006,32969],{"class":96},[79,37008,33101],{"class":239},[79,37010,244],{"class":243},[79,37012,36943],{"class":239},[79,37014,32998],{"class":7412},[79,37016,244],{"class":243},[79,37018,1188],{"class":96},[79,37020,2752],{"class":239},[79,37022,33053],{"class":7412},[79,37024,244],{"class":243},[79,37026,1049],{"class":96},[79,37028,253],{"class":239},[79,37030,37031,37033,37036,37038,37040,37042,37044,37046,37048,37050,37052,37055,37057,37059,37061,37063,37065,37067,37069,37071],{"class":81,"line":520},[79,37032,32969],{"class":96},[79,37034,37035],{"class":239},".c5",[79,37037,244],{"class":243},[79,37039,32977],{"class":239},[79,37041,32980],{"class":7412},[79,37043,244],{"class":243},[79,37045,36984],{"class":96},[79,37047,2752],{"class":239},[79,37049,32989],{"class":7412},[79,37051,244],{"class":243},[79,37053,37054],{"class":96},"384",[79,37056,2752],{"class":239},[79,37058,32998],{"class":7412},[79,37060,244],{"class":243},[79,37062,1188],{"class":96},[79,37064,2752],{"class":239},[79,37066,33007],{"class":7412},[79,37068,244],{"class":243},[79,37070,1072],{"class":96},[79,37072,253],{"class":239},[79,37074,37075,37077,37080,37082,37084,37086,37088,37090,37092,37094,37096,37098,37100,37102,37104,37106,37108,37110,37112,37114],{"class":81,"line":526},[79,37076,32969],{"class":96},[79,37078,37079],{"class":239},".c6",[79,37081,244],{"class":243},[79,37083,32977],{"class":239},[79,37085,32980],{"class":7412},[79,37087,244],{"class":243},[79,37089,37054],{"class":96},[79,37091,2752],{"class":239},[79,37093,32989],{"class":7412},[79,37095,244],{"class":243},[79,37097,37054],{"class":96},[79,37099,2752],{"class":239},[79,37101,32998],{"class":7412},[79,37103,244],{"class":243},[79,37105,1188],{"class":96},[79,37107,2752],{"class":239},[79,37109,33007],{"class":7412},[79,37111,244],{"class":243},[79,37113,1072],{"class":96},[79,37115,253],{"class":239},[79,37117,37118,37120,37123,37125,37127,37129,37131,37133,37135,37137,37139,37141,37143,37145,37147,37149,37151,37153,37155,37157],{"class":81,"line":532},[79,37119,32969],{"class":96},[79,37121,37122],{"class":239},".c7",[79,37124,244],{"class":243},[79,37126,32977],{"class":239},[79,37128,32980],{"class":7412},[79,37130,244],{"class":243},[79,37132,37054],{"class":96},[79,37134,2752],{"class":239},[79,37136,32989],{"class":7412},[79,37138,244],{"class":243},[79,37140,36984],{"class":96},[79,37142,2752],{"class":239},[79,37144,32998],{"class":7412},[79,37146,244],{"class":243},[79,37148,1188],{"class":96},[79,37150,2752],{"class":239},[79,37152,33007],{"class":7412},[79,37154,244],{"class":243},[79,37156,1072],{"class":96},[79,37158,253],{"class":239},[79,37160,37161,37163,37166,37168,37170,37172,37174,37176,37178,37180,37182,37184],{"class":81,"line":537},[79,37162,32969],{"class":96},[79,37164,37165],{"class":239},".s8",[79,37167,244],{"class":243},[79,37169,36943],{"class":239},[79,37171,32998],{"class":7412},[79,37173,244],{"class":243},[79,37175,1188],{"class":96},[79,37177,2752],{"class":239},[79,37179,33053],{"class":7412},[79,37181,244],{"class":243},[79,37183,1049],{"class":96},[79,37185,253],{"class":239},[79,37187,37188],{"class":81,"line":543},[79,37189,33126],{"class":2440},[79,37191,37192,37194,37196,37198],{"class":81,"line":549},[79,37193,32969],{"class":96},[79,37195,33133],{"class":239},[79,37197,244],{"class":243},[79,37199,33138],{"class":239},[79,37201,37202],{"class":81,"line":555},[79,37203,37204],{"class":2440},"       # 定义全连接层\n",[79,37206,37207,37209,37212,37214,37216,37218,37220,37222,37224,37226,37228,37231],{"class":81,"line":561},[79,37208,32969],{"class":96},[79,37210,37211],{"class":239},".f1",[79,37213,244],{"class":243},[79,37215,33155],{"class":239},[79,37217,2718],{"class":96},[79,37219,2829],{"class":243},[79,37221,2718],{"class":96},[79,37223,2829],{"class":243},[79,37225,36984],{"class":96},[79,37227,2752],{"class":239},[79,37229,37230],{"class":96},"4096",[79,37232,253],{"class":239},[79,37234,37235,37237,37240,37242,37244,37246,37248,37250],{"class":81,"line":567},[79,37236,32969],{"class":96},[79,37238,37239],{"class":239},".f2",[79,37241,244],{"class":243},[79,37243,33155],{"class":239},[79,37245,37230],{"class":96},[79,37247,2752],{"class":239},[79,37249,37230],{"class":96},[79,37251,253],{"class":239},[79,37253,37254,37256,37259,37261,37263,37265,37267,37269],{"class":81,"line":573},[79,37255,32969],{"class":96},[79,37257,37258],{"class":239},".f3",[79,37260,244],{"class":243},[79,37262,33155],{"class":239},[79,37264,37230],{"class":96},[79,37266,2752],{"class":239},[79,37268,2820],{"class":96},[79,37270,253],{"class":239},[79,37272,37273],{"class":81,"line":579},[79,37274,454],{"emptyLinePlaceholder":453},[79,37276,37277],{"class":81,"line":584},[79,37278,37279],{"class":2440},"    # 定义前向传播\n",[79,37281,37282,37284,37286],{"class":81,"line":590},[79,37283,32925],{"class":243},[79,37285,33217],{"class":85},[79,37287,33220],{"class":239},[79,37289,37290,37292,37294,37296,37299,37301],{"class":81,"line":596},[79,37291,33225],{"class":239},[79,37293,244],{"class":243},[79,37295,32947],{"class":96},[79,37297,37298],{"class":239},".ReLu(",[79,37300,32947],{"class":96},[79,37302,33237],{"class":239},[79,37304,37305,37307,37309,37311],{"class":81,"line":602},[79,37306,33225],{"class":239},[79,37308,244],{"class":243},[79,37310,32947],{"class":96},[79,37312,33248],{"class":239},[79,37314,37315,37317,37319,37321,37323,37325],{"class":81,"line":608},[79,37316,33225],{"class":239},[79,37318,244],{"class":243},[79,37320,32947],{"class":96},[79,37322,37298],{"class":239},[79,37324,32947],{"class":96},[79,37326,33263],{"class":239},[79,37328,37329,37331,37333,37335],{"class":81,"line":614},[79,37330,33225],{"class":239},[79,37332,244],{"class":243},[79,37334,32947],{"class":96},[79,37336,33274],{"class":239},[79,37338,37339,37341,37343,37345,37347,37349],{"class":81,"line":620},[79,37340,33225],{"class":239},[79,37342,244],{"class":243},[79,37344,32947],{"class":96},[79,37346,37298],{"class":239},[79,37348,32947],{"class":96},[79,37350,37351],{"class":239},".c5(x))\n",[79,37353,37354,37356,37358,37360,37362,37364],{"class":81,"line":625},[79,37355,33225],{"class":239},[79,37357,244],{"class":243},[79,37359,32947],{"class":96},[79,37361,37298],{"class":239},[79,37363,32947],{"class":96},[79,37365,37366],{"class":239},".c6(x))\n",[79,37368,37369,37371,37373,37375,37377,37379],{"class":81,"line":630},[79,37370,33225],{"class":239},[79,37372,244],{"class":243},[79,37374,32947],{"class":96},[79,37376,37298],{"class":239},[79,37378,32947],{"class":96},[79,37380,37381],{"class":239},".c7(x))\n",[79,37383,37384,37386,37388,37390],{"class":81,"line":648},[79,37385,33225],{"class":239},[79,37387,244],{"class":243},[79,37389,32947],{"class":96},[79,37391,37392],{"class":239},".s8(x)\n",[79,37394,37395],{"class":81,"line":659},[79,37396,454],{"emptyLinePlaceholder":453},[79,37398,37399],{"class":81,"line":676},[79,37400,37401],{"class":2440},"        # 展平加线性全连接层\n",[79,37403,37404,37406,37408,37410],{"class":81,"line":708},[79,37405,33225],{"class":239},[79,37407,244],{"class":243},[79,37409,32947],{"class":96},[79,37411,33285],{"class":239},[79,37413,37414,37416,37418,37420,37422,37424],{"class":81,"line":717},[79,37415,33225],{"class":239},[79,37417,244],{"class":243},[79,37419,32947],{"class":96},[79,37421,37298],{"class":239},[79,37423,32947],{"class":96},[79,37425,37426],{"class":239},".f1(x))\n",[79,37428,37429],{"class":81,"line":722},[79,37430,37431],{"class":2440},"        # 还需要dropout对神经元随机进行失活\n",[79,37433,37434,37436,37438,37441,37444],{"class":81,"line":727},[79,37435,33225],{"class":239},[79,37437,244],{"class":243},[79,37439,37440],{"class":239},"F.dropout(x,",[79,37442,37443],{"class":96},"0.5",[79,37445,253],{"class":239},[79,37447,37448,37450,37452,37454,37456,37458],{"class":81,"line":738},[79,37449,33225],{"class":239},[79,37451,244],{"class":243},[79,37453,32947],{"class":96},[79,37455,37298],{"class":239},[79,37457,32947],{"class":96},[79,37459,37460],{"class":239},".f2(x))\n",[79,37462,37463,37465,37467,37469,37471],{"class":81,"line":753},[79,37464,33225],{"class":239},[79,37466,244],{"class":243},[79,37468,37440],{"class":239},[79,37470,37443],{"class":96},[79,37472,253],{"class":239},[79,37474,37475],{"class":81,"line":768},[79,37476,37477],{"class":2440},"        # 直接输出\n",[79,37479,37480,37482,37484,37486],{"class":81,"line":776},[79,37481,33225],{"class":239},[79,37483,244],{"class":243},[79,37485,32947],{"class":96},[79,37487,37488],{"class":239},".f3(x)\n",[79,37490,37491],{"class":81,"line":781},[79,37492,37493],{"class":2440},"        # 前向传播输出\n",[79,37495,37496,37498],{"class":81,"line":786},[79,37497,16913],{"class":243},[79,37499,33333],{"class":239},[79,37501,37502],{"class":81,"line":802},[79,37503,37504],{"class":2440},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[79,37506,37507,37509,37511,37513,37515],{"class":81,"line":815},[79,37508,1329],{"class":243},[79,37510,1332],{"class":96},[79,37512,5155],{"class":243},[79,37514,33348],{"class":89},[79,37516,673],{"class":239},[79,37518,37519,37521,37523,37525,37527,37529,37531,37533,37535],{"class":81,"line":828},[79,37520,33360],{"class":239},[79,37522,244],{"class":243},[79,37524,32577],{"class":239},[79,37526,33367],{"class":89},[79,37528,3929],{"class":243},[79,37530,33372],{"class":239},[79,37532,3926],{"class":243},[79,37534,32602],{"class":89},[79,37536,253],{"class":239},[79,37538,37539],{"class":81,"line":842},[79,37540,37541],{"class":2440},"    # 模型实例化，然后将实例化的模型放到设备中\n",[79,37543,37544,37546,37548],{"class":81,"line":859},[79,37545,33412],{"class":239},[79,37547,244],{"class":243},[79,37549,37550],{"class":239},"AlexNet().to(device)\n",[79,37552,37553,37555,37557,37559,37561,37564,37566,37568],{"class":81,"line":878},[79,37554,1254],{"class":96},[79,37556,33424],{"class":239},[79,37558,1072],{"class":96},[79,37560,2752],{"class":239},[79,37562,37563],{"class":96},"227",[79,37565,2752],{"class":239},[79,37567,37563],{"class":96},[79,37569,33437],{"class":239},[26,37571,37572],{"start":167},[29,37573,33450],{},[51,37575,37577],{"className":230,"code":37576,"language":232,"meta":57,"style":57},"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",[59,37578,37579,37585,37591,37601,37607,37617,37627,37637,37647,37657,37661,37672,37682,37686,37690,37694,37702,37714,37724,37740,37750,37782,37796,37806,37816,37820,37830,37844,37854,37864,37874,37880,37884,37888,37892,37896,37900,37908,37928,37932,37936,37940,37944,37948,37964,37968,37972,37980,37984,37988,37996,38000,38004,38008,38016,38020,38024,38028,38032,38040,38044,38052,38056,38064,38068,38076,38080,38088,38092,38096,38104,38108,38112,38116,38128,38152,38166,38170,38174,38178,38186,38190,38198,38202,38210,38214,38222,38226,38234,38238,38246,38250,38262,38266,38274,38278,38286,38290,38294,38298,38302,38310,38314,38330,38334,38342,38346,38350,38354,38358,38362,38366,38370,38386,38390,38402,38406,38418,38422,38434,38438,38446,38450,38458,38462,38466,38471,38477,38481,38490,38494,38511,38515,38524,38528,38546,38559,38564,38577,38581,38585,38593,38597,38601,38609,38613,38621,38625,38633,38637,38641,38683,38725,38729,38733,38749,38753,38769,38773,38777,38785,38789,38793,38805,38843,38848,38853,38862,38866,38880,38890,38896,38902,38908,38914,38918,38922,38928,38932,38936,38944,38948,38966,38970,38974,38978,38994,38998,39002,39006,39010,39014,39034,39054,39058,39062,39066,39074,39082,39086,39102,39122,39142,39146,39150,39158,39166,39170,39174,39178,39190,39194,39204,39212,39229],{"__ignoreMap":57},[79,37580,37581,37583],{"class":81,"line":82},[79,37582,432],{"class":243},[79,37584,33940],{"class":239},[79,37586,37587,37589],{"class":81,"line":167},[79,37588,432],{"class":243},[79,37590,33947],{"class":239},[79,37592,37593,37595,37597,37599],{"class":81,"line":178},[79,37594,432],{"class":243},[79,37596,33958],{"class":239},[79,37598,445],{"class":243},[79,37600,33963],{"class":239},[79,37602,37603,37605],{"class":81,"line":457},[79,37604,432],{"class":243},[79,37606,32521],{"class":239},[79,37608,37609,37611,37613,37615],{"class":81,"line":462},[79,37610,32862],{"class":243},[79,37612,33534],{"class":239},[79,37614,432],{"class":243},[79,37616,33980],{"class":239},[79,37618,37619,37621,37623,37625],{"class":81,"line":474},[79,37620,32862],{"class":243},[79,37622,33490],{"class":239},[79,37624,432],{"class":243},[79,37626,33495],{"class":239},[79,37628,37629,37631,37633,37635],{"class":81,"line":480},[79,37630,32862],{"class":243},[79,37632,33517],{"class":239},[79,37634,432],{"class":243},[79,37636,33522],{"class":239},[79,37638,37639,37641,37643,37645],{"class":81,"line":486},[79,37640,432],{"class":243},[79,37642,33534],{"class":239},[79,37644,445],{"class":243},[79,37646,33539],{"class":239},[79,37648,37649,37651,37653,37655],{"class":81,"line":491},[79,37650,432],{"class":243},[79,37652,33551],{"class":239},[79,37654,445],{"class":243},[79,37656,33556],{"class":239},[79,37658,37659],{"class":81,"line":497},[79,37660,34025],{"class":2440},[79,37662,37663,37665,37667,37669],{"class":81,"line":503},[79,37664,32862],{"class":243},[79,37666,34032],{"class":239},[79,37668,432],{"class":243},[79,37670,37671],{"class":239}," AlexNet\n",[79,37673,37674,37676,37678,37680],{"class":81,"line":509},[79,37675,32862],{"class":243},[79,37677,32865],{"class":239},[79,37679,432],{"class":243},[79,37681,32870],{"class":239},[79,37683,37684],{"class":81,"line":514},[79,37685,454],{"emptyLinePlaceholder":453},[79,37687,37688],{"class":81,"line":520},[79,37689,454],{"emptyLinePlaceholder":453},[79,37691,37692],{"class":81,"line":526},[79,37693,34060],{"class":2440},[79,37695,37696,37698,37700],{"class":81,"line":532},[79,37697,633],{"class":243},[79,37699,34067],{"class":85},[79,37701,34070],{"class":239},[79,37703,37704,37706,37708,37710,37712],{"class":81,"line":537},[79,37705,34075],{"class":239},[79,37707,244],{"class":243},[79,37709,33574],{"class":239},[79,37711,33582],{"class":89},[79,37713,33585],{"class":239},[79,37715,37716,37718,37720,37722],{"class":81,"line":543},[79,37717,34088],{"class":7412},[79,37719,244],{"class":243},[79,37721,33595],{"class":96},[79,37723,33585],{"class":239},[79,37725,37726,37728,37730,37732,37734,37736,37738],{"class":81,"line":549},[79,37727,34099],{"class":7412},[79,37729,244],{"class":243},[79,37731,33612],{"class":239},[79,37733,33615],{"class":7412},[79,37735,244],{"class":243},[79,37737,37563],{"class":96},[79,37739,33623],{"class":239},[79,37741,37742,37744,37746,37748],{"class":81,"line":555},[79,37743,34116],{"class":7412},[79,37745,244],{"class":243},[79,37747,33595],{"class":96},[79,37749,253],{"class":239},[79,37751,37752,37754,37756,37758,37760,37762,37764,37766,37768,37770,37772,37774,37776,37778,37780],{"class":81,"line":561},[79,37753,34127],{"class":239},[79,37755,244],{"class":243},[79,37757,34132],{"class":239},[79,37759,1264],{"class":96},[79,37761,685],{"class":239},[79,37763,34139],{"class":96},[79,37765,2829],{"class":243},[79,37767,9552],{"class":96},[79,37769,34146],{"class":239},[79,37771,1264],{"class":96},[79,37773,685],{"class":239},[79,37775,34153],{"class":96},[79,37777,2829],{"class":243},[79,37779,9552],{"class":96},[79,37781,34160],{"class":239},[79,37783,37784,37786,37788,37790,37792,37794],{"class":81,"line":567},[79,37785,34165],{"class":239},[79,37787,244],{"class":243},[79,37789,34170],{"class":239},[79,37791,33656],{"class":7412},[79,37793,244],{"class":243},[79,37795,33661],{"class":239},[79,37797,37798,37800,37802,37804],{"class":81,"line":573},[79,37799,34181],{"class":7412},[79,37801,244],{"class":243},[79,37803,34186],{"class":96},[79,37805,33585],{"class":239},[79,37807,37808,37810,37812,37814],{"class":81,"line":579},[79,37809,34193],{"class":7412},[79,37811,244],{"class":243},[79,37813,33595],{"class":96},[79,37815,33585],{"class":239},[79,37817,37818],{"class":81,"line":584},[79,37819,34204],{"class":2440},[79,37821,37822,37824,37826,37828],{"class":81,"line":590},[79,37823,34209],{"class":7412},[79,37825,244],{"class":243},[79,37827,2769],{"class":96},[79,37829,253],{"class":239},[79,37831,37832,37834,37836,37838,37840,37842],{"class":81,"line":596},[79,37833,34220],{"class":239},[79,37835,244],{"class":243},[79,37837,33653],{"class":239},[79,37839,33656],{"class":7412},[79,37841,244],{"class":243},[79,37843,34231],{"class":239},[79,37845,37846,37848,37850,37852],{"class":81,"line":602},[79,37847,34236],{"class":7412},[79,37849,244],{"class":243},[79,37851,34186],{"class":96},[79,37853,33585],{"class":239},[79,37855,37856,37858,37860,37862],{"class":81,"line":608},[79,37857,34247],{"class":7412},[79,37859,244],{"class":243},[79,37861,33595],{"class":96},[79,37863,33585],{"class":239},[79,37865,37866,37868,37870,37872],{"class":81,"line":614},[79,37867,34258],{"class":7412},[79,37869,244],{"class":243},[79,37871,2769],{"class":96},[79,37873,253],{"class":239},[79,37875,37876,37878],{"class":81,"line":620},[79,37877,711],{"class":243},[79,37879,34271],{"class":239},[79,37881,37882],{"class":81,"line":625},[79,37883,454],{"emptyLinePlaceholder":453},[79,37885,37886],{"class":81,"line":630},[79,37887,34280],{"class":2440},[79,37889,37890],{"class":81,"line":648},[79,37891,34285],{"class":2440},[79,37893,37894],{"class":81,"line":659},[79,37895,454],{"emptyLinePlaceholder":453},[79,37897,37898],{"class":81,"line":676},[79,37899,34294],{"class":2440},[79,37901,37902,37904,37906],{"class":81,"line":708},[79,37903,633],{"class":243},[79,37905,34301],{"class":85},[79,37907,34304],{"class":239},[79,37909,37910,37912,37914,37916,37918,37920,37922,37924,37926],{"class":81,"line":717},[79,37911,33360],{"class":239},[79,37913,244],{"class":243},[79,37915,32577],{"class":239},[79,37917,33367],{"class":89},[79,37919,3929],{"class":243},[79,37921,33372],{"class":239},[79,37923,3926],{"class":243},[79,37925,34323],{"class":89},[79,37927,253],{"class":239},[79,37929,37930],{"class":81,"line":722},[79,37931,454],{"emptyLinePlaceholder":453},[79,37933,37934],{"class":81,"line":727},[79,37935,454],{"emptyLinePlaceholder":453},[79,37937,37938],{"class":81,"line":738},[79,37939,34338],{"class":2440},[79,37941,37942],{"class":81,"line":753},[79,37943,34343],{"class":2440},[79,37945,37946],{"class":81,"line":768},[79,37947,34348],{"class":2440},[79,37949,37950,37952,37954,37956,37958,37960,37962],{"class":81,"line":776},[79,37951,34353],{"class":239},[79,37953,244],{"class":243},[79,37955,34358],{"class":239},[79,37957,34361],{"class":7412},[79,37959,244],{"class":243},[79,37961,34366],{"class":96},[79,37963,253],{"class":239},[79,37965,37966],{"class":81,"line":781},[79,37967,454],{"emptyLinePlaceholder":453},[79,37969,37970],{"class":81,"line":786},[79,37971,34377],{"class":2440},[79,37973,37974,37976,37978],{"class":81,"line":802},[79,37975,34382],{"class":239},[79,37977,244],{"class":243},[79,37979,34387],{"class":239},[79,37981,37982],{"class":81,"line":815},[79,37983,454],{"emptyLinePlaceholder":453},[79,37985,37986],{"class":81,"line":828},[79,37987,34396],{"class":2440},[79,37989,37990,37992,37994],{"class":81,"line":842},[79,37991,33412],{"class":239},[79,37993,244],{"class":243},[79,37995,34405],{"class":239},[79,37997,37998],{"class":81,"line":859},[79,37999,34410],{"class":2440},[79,38001,38002],{"class":81,"line":878},[79,38003,34415],{"class":2440},[79,38005,38006],{"class":81,"line":883},[79,38007,34420],{"class":2440},[79,38009,38010,38012,38014],{"class":81,"line":888},[79,38011,34425],{"class":239},[79,38013,244],{"class":243},[79,38015,34430],{"class":239},[79,38017,38018],{"class":81,"line":904},[79,38019,454],{"emptyLinePlaceholder":453},[79,38021,38022],{"class":81,"line":919},[79,38023,454],{"emptyLinePlaceholder":453},[79,38025,38026],{"class":81,"line":930},[79,38027,34443],{"class":2440},[79,38029,38030],{"class":81,"line":941},[79,38031,34448],{"class":2440},[79,38033,38034,38036,38038],{"class":81,"line":946},[79,38035,34453],{"class":239},[79,38037,244],{"class":243},[79,38039,34458],{"class":96},[79,38041,38042],{"class":81,"line":969},[79,38043,34463],{"class":2440},[79,38045,38046,38048,38050],{"class":81,"line":975},[79,38047,34468],{"class":239},[79,38049,244],{"class":243},[79,38051,34473],{"class":239},[79,38053,38054],{"class":81,"line":989},[79,38055,34478],{"class":2440},[79,38057,38058,38060,38062],{"class":81,"line":1003},[79,38059,34483],{"class":239},[79,38061,244],{"class":243},[79,38063,34473],{"class":239},[79,38065,38066],{"class":81,"line":1019},[79,38067,34492],{"class":2440},[79,38069,38070,38072,38074],{"class":81,"line":1024},[79,38071,34497],{"class":239},[79,38073,244],{"class":243},[79,38075,34473],{"class":239},[79,38077,38078],{"class":81,"line":1067},[79,38079,34506],{"class":2440},[79,38081,38082,38084,38086],{"class":81,"line":1101},[79,38083,34511],{"class":239},[79,38085,244],{"class":243},[79,38087,34473],{"class":239},[79,38089,38090],{"class":81,"line":1106},[79,38091,454],{"emptyLinePlaceholder":453},[79,38093,38094],{"class":81,"line":1112},[79,38095,34524],{"class":2440},[79,38097,38098,38100,38102],{"class":81,"line":1124},[79,38099,34529],{"class":239},[79,38101,244],{"class":243},[79,38103,34534],{"class":239},[79,38105,38106],{"class":81,"line":1129},[79,38107,454],{"emptyLinePlaceholder":453},[79,38109,38110],{"class":81,"line":1150},[79,38111,454],{"emptyLinePlaceholder":453},[79,38113,38114],{"class":81,"line":1161},[79,38115,34547],{"class":2440},[79,38117,38118,38120,38122,38124,38126],{"class":81,"line":1175},[79,38119,949],{"class":243},[79,38121,34554],{"class":239},[79,38123,955],{"class":243},[79,38125,958],{"class":96},[79,38127,34561],{"class":239},[79,38129,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148,38150],{"class":81,"line":1194},[79,38131,34566],{"class":96},[79,38133,685],{"class":239},[79,38135,34571],{"class":89},[79,38137,34574],{"class":96},[79,38139,2957],{"class":89},[79,38141,34574],{"class":96},[79,38143,703],{"class":89},[79,38145,34583],{"class":239},[79,38147,320],{"class":243},[79,38149,1072],{"class":96},[79,38151,1191],{"class":239},[79,38153,38154,38156,38158,38160,38162,38164],{"class":81,"line":1211},[79,38155,34566],{"class":96},[79,38157,685],{"class":239},[79,38159,34598],{"class":89},[79,38161,2829],{"class":243},[79,38163,2820],{"class":96},[79,38165,253],{"class":239},[79,38167,38168],{"class":81,"line":1228},[79,38169,454],{"emptyLinePlaceholder":453},[79,38171,38172],{"class":81,"line":1246},[79,38173,34613],{"class":2440},[79,38175,38176],{"class":81,"line":1251},[79,38177,34618],{"class":2440},[79,38179,38180,38182,38184],{"class":81,"line":1274},[79,38181,34623],{"class":239},[79,38183,244],{"class":243},[79,38185,34458],{"class":96},[79,38187,38188],{"class":81,"line":1296},[79,38189,34632],{"class":2440},[79,38191,38192,38194,38196],{"class":81,"line":1316},[79,38193,34637],{"class":239},[79,38195,244],{"class":243},[79,38197,5290],{"class":96},[79,38199,38200],{"class":81,"line":1321},[79,38201,34646],{"class":2440},[79,38203,38204,38206,38208],{"class":81,"line":1326},[79,38205,34651],{"class":239},[79,38207,244],{"class":243},[79,38209,34458],{"class":96},[79,38211,38212],{"class":81,"line":1342},[79,38213,34660],{"class":2440},[79,38215,38216,38218,38220],{"class":81,"line":18985},[79,38217,34665],{"class":239},[79,38219,244],{"class":243},[79,38221,5290],{"class":96},[79,38223,38224],{"class":81,"line":18990},[79,38225,34674],{"class":2440},[79,38227,38228,38230,38232],{"class":81,"line":18995},[79,38229,34679],{"class":239},[79,38231,244],{"class":243},[79,38233,5290],{"class":96},[79,38235,38236],{"class":81,"line":19009},[79,38237,34688],{"class":2440},[79,38239,38240,38242,38244],{"class":81,"line":19021},[79,38241,34693],{"class":239},[79,38243,244],{"class":243},[79,38245,5290],{"class":96},[79,38247,38248],{"class":81,"line":19026},[79,38249,34702],{"class":2440},[79,38251,38252,38254,38256,38258,38260],{"class":81,"line":19039},[79,38253,5606],{"class":243},[79,38255,33720],{"class":239},[79,38257,955],{"class":243},[79,38259,33725],{"class":96},[79,38261,34715],{"class":239},[79,38263,38264],{"class":81,"line":19044},[79,38265,34720],{"class":2440},[79,38267,38268,38270,38272],{"class":81,"line":19049},[79,38269,34725],{"class":239},[79,38271,244],{"class":243},[79,38273,34730],{"class":239},[79,38275,38276],{"class":81,"line":19054},[79,38277,34735],{"class":2440},[79,38279,38280,38282,38284],{"class":81,"line":19067},[79,38281,34740],{"class":239},[79,38283,244],{"class":243},[79,38285,34745],{"class":239},[79,38287,38288],{"class":81,"line":19072},[79,38289,34751],{"class":2440},[79,38291,38292],{"class":81,"line":34748},[79,38293,34757],{"class":239},[79,38295,38296],{"class":81,"line":34754},[79,38297,34763],{"class":2440},[79,38299,38300],{"class":81,"line":34760},[79,38301,34769],{"class":2440},[79,38303,38304,38306,38308],{"class":81,"line":34766},[79,38305,34775],{"class":239},[79,38307,244],{"class":243},[79,38309,34780],{"class":239},[79,38311,38312],{"class":81,"line":34772},[79,38313,34786],{"class":2440},[79,38315,38316,38318,38320,38322,38324,38326,38328],{"class":81,"line":34783},[79,38317,34792],{"class":239},[79,38319,244],{"class":243},[79,38321,34797],{"class":239},[79,38323,34800],{"class":7412},[79,38325,244],{"class":243},[79,38327,1072],{"class":96},[79,38329,253],{"class":239},[79,38331,38332],{"class":81,"line":34789},[79,38333,34812],{"class":2440},[79,38335,38336,38338,38340],{"class":81,"line":34809},[79,38337,34818],{"class":239},[79,38339,244],{"class":243},[79,38341,34823],{"class":239},[79,38343,38344],{"class":81,"line":34815},[79,38345,34829],{"class":2440},[79,38347,38348],{"class":81,"line":34826},[79,38349,34835],{"class":239},[79,38351,38352],{"class":81,"line":34832},[79,38353,34841],{"class":2440},[79,38355,38356],{"class":81,"line":34838},[79,38357,34847],{"class":239},[79,38359,38360],{"class":81,"line":34844},[79,38361,34853],{"class":2440},[79,38363,38364],{"class":81,"line":34850},[79,38365,34859],{"class":239},[79,38367,38368],{"class":81,"line":34856},[79,38369,34865],{"class":2440},[79,38371,38372,38374,38376,38378,38380,38382,38384],{"class":81,"line":34862},[79,38373,34871],{"class":239},[79,38375,1118],{"class":243},[79,38377,34876],{"class":239},[79,38379,2829],{"class":243},[79,38381,34881],{"class":239},[79,38383,1030],{"class":96},[79,38385,253],{"class":239},[79,38387,38388],{"class":81,"line":34868},[79,38389,34891],{"class":2440},[79,38391,38392,38394,38396,38398,38400],{"class":81,"line":34888},[79,38393,34897],{"class":239},[79,38395,1118],{"class":243},[79,38397,34902],{"class":239},[79,38399,5155],{"class":243},[79,38401,34907],{"class":239},[79,38403,38404],{"class":81,"line":34894},[79,38405,34913],{"class":2440},[79,38407,38408,38410,38412,38414,38416],{"class":81,"line":34910},[79,38409,34919],{"class":239},[79,38411,1118],{"class":243},[79,38413,34881],{"class":239},[79,38415,1030],{"class":96},[79,38417,253],{"class":239},[79,38419,38420],{"class":81,"line":34916},[79,38421,34933],{"class":2440},[79,38423,38424,38426,38428,38430,38432],{"class":81,"line":34930},[79,38425,5606],{"class":243},[79,38427,34941],{"class":239},[79,38429,955],{"class":243},[79,38431,33725],{"class":96},[79,38433,34948],{"class":239},[79,38435,38436],{"class":81,"line":34936},[79,38437,34954],{"class":2440},[79,38439,38440,38442,38444],{"class":81,"line":34951},[79,38441,34725],{"class":239},[79,38443,244],{"class":243},[79,38445,34730],{"class":239},[79,38447,38448],{"class":81,"line":34957},[79,38449,34969],{"class":2440},[79,38451,38452,38454,38456],{"class":81,"line":34966},[79,38453,34740],{"class":239},[79,38455,244],{"class":243},[79,38457,34745],{"class":239},[79,38459,38460],{"class":81,"line":34972},[79,38461,34984],{"class":2440},[79,38463,38464],{"class":81,"line":34981},[79,38465,34990],{"class":239},[79,38467,38468],{"class":81,"line":34987},[79,38469,38470],{"class":2440},"            # 验证时不计算梯度以节省内存\u002F计算\n",[79,38472,38473,38475],{"class":81,"line":34993},[79,38474,34996],{"class":243},[79,38476,34999],{"class":239},[79,38478,38479],{"class":81,"line":35002},[79,38480,35005],{"class":2440},[79,38482,38483,38486,38488],{"class":81,"line":35008},[79,38484,38485],{"class":239},"                output",[79,38487,244],{"class":243},[79,38489,34780],{"class":239},[79,38491,38492],{"class":81,"line":35019},[79,38493,35022],{"class":2440},[79,38495,38496,38499,38501,38503,38505,38507,38509],{"class":81,"line":35025},[79,38497,38498],{"class":239},"                pre_lab",[79,38500,244],{"class":243},[79,38502,34797],{"class":239},[79,38504,34800],{"class":7412},[79,38506,244],{"class":243},[79,38508,1072],{"class":96},[79,38510,253],{"class":239},[79,38512,38513],{"class":81,"line":35044},[79,38514,35047],{"class":2440},[79,38516,38517,38520,38522],{"class":81,"line":35050},[79,38518,38519],{"class":239},"                val_batch_loss",[79,38521,244],{"class":243},[79,38523,34823],{"class":239},[79,38525,38526],{"class":81,"line":35061},[79,38527,35064],{"class":2440},[79,38529,38530,38533,38535,38538,38540,38542,38544],{"class":81,"line":35067},[79,38531,38532],{"class":239},"                val_loss",[79,38534,1118],{"class":243},[79,38536,38537],{"class":239},"val_batch_loss.item()",[79,38539,2829],{"class":243},[79,38541,34881],{"class":239},[79,38543,1030],{"class":96},[79,38545,253],{"class":239},[79,38547,38548,38551,38553,38555,38557],{"class":81,"line":35087},[79,38549,38550],{"class":239},"                val_corrects",[79,38552,1118],{"class":243},[79,38554,34902],{"class":239},[79,38556,5155],{"class":243},[79,38558,34907],{"class":239},[79,38560,38561],{"class":81,"line":35103},[79,38562,38563],{"class":2440},"            # 当前用于验证的样本数量\n",[79,38565,38566,38569,38571,38573,38575],{"class":81,"line":35109},[79,38567,38568],{"class":239},"            val_num",[79,38570,1118],{"class":243},[79,38572,34881],{"class":239},[79,38574,1030],{"class":96},[79,38576,253],{"class":239},[79,38578,38579],{"class":81,"line":35123},[79,38580,35126],{"class":2440},[79,38582,38583],{"class":81,"line":35129},[79,38584,35132],{"class":2440},[79,38586,38587,38589,38591],{"class":81,"line":35135},[79,38588,35138],{"class":239},[79,38590,2957],{"class":243},[79,38592,35143],{"class":239},[79,38594,38595],{"class":81,"line":35146},[79,38596,35149],{"class":2440},[79,38598,38599],{"class":81,"line":35152},[79,38600,35155],{"class":2440},[79,38602,38603,38605,38607],{"class":81,"line":35158},[79,38604,35161],{"class":239},[79,38606,2957],{"class":243},[79,38608,35143],{"class":239},[79,38610,38611],{"class":81,"line":35168},[79,38612,35171],{"class":2440},[79,38614,38615,38617,38619],{"class":81,"line":35174},[79,38616,35177],{"class":239},[79,38618,2957],{"class":243},[79,38620,35182],{"class":239},[79,38622,38623],{"class":81,"line":35185},[79,38624,35188],{"class":2440},[79,38626,38627,38629,38631],{"class":81,"line":35191},[79,38628,35194],{"class":239},[79,38630,2957],{"class":243},[79,38632,35182],{"class":239},[79,38634,38635],{"class":81,"line":35201},[79,38636,454],{"emptyLinePlaceholder":453},[79,38638,38639],{"class":81,"line":35206},[79,38640,35209],{"class":2440},[79,38642,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673,38675,38677,38679,38681],{"class":81,"line":35212},[79,38644,34566],{"class":96},[79,38646,685],{"class":239},[79,38648,5795],{"class":89},[79,38650,34574],{"class":96},[79,38652,35223],{"class":89},[79,38654,694],{"class":96},[79,38656,35228],{"class":243},[79,38658,700],{"class":96},[79,38660,35233],{"class":89},[79,38662,694],{"class":96},[79,38664,35228],{"class":243},[79,38666,700],{"class":96},[79,38668,5795],{"class":89},[79,38670,35244],{"class":239},[79,38672,320],{"class":243},[79,38674,1072],{"class":96},[79,38676,35251],{"class":239},[79,38678,320],{"class":243},[79,38680,1072],{"class":96},[79,38682,35258],{"class":239},[79,38684,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723],{"class":81,"line":35261},[79,38686,34566],{"class":96},[79,38688,685],{"class":239},[79,38690,5795],{"class":89},[79,38692,34574],{"class":96},[79,38694,35272],{"class":89},[79,38696,694],{"class":96},[79,38698,35228],{"class":243},[79,38700,700],{"class":96},[79,38702,35281],{"class":89},[79,38704,694],{"class":96},[79,38706,35228],{"class":243},[79,38708,700],{"class":96},[79,38710,5795],{"class":89},[79,38712,35292],{"class":239},[79,38714,320],{"class":243},[79,38716,1072],{"class":96},[79,38718,35299],{"class":239},[79,38720,320],{"class":243},[79,38722,1072],{"class":96},[79,38724,35258],{"class":239},[79,38726,38727],{"class":81,"line":35308},[79,38728,454],{"emptyLinePlaceholder":453},[79,38730,38731],{"class":81,"line":35313},[79,38732,35316],{"class":2440},[79,38734,38735,38737,38739,38741,38743,38745,38747],{"class":81,"line":35319},[79,38736,1132],{"class":243},[79,38738,35324],{"class":239},[79,38740,320],{"class":243},[79,38742,1072],{"class":96},[79,38744,3311],{"class":239},[79,38746,3330],{"class":243},[79,38748,35335],{"class":239},[79,38750,38751],{"class":81,"line":35338},[79,38752,35341],{"class":2440},[79,38754,38755,38757,38759,38761,38763,38765,38767],{"class":81,"line":35344},[79,38756,35347],{"class":239},[79,38758,797],{"class":96},[79,38760,244],{"class":243},[79,38762,35354],{"class":239},[79,38764,320],{"class":243},[79,38766,1072],{"class":96},[79,38768,35361],{"class":239},[79,38770,38771],{"class":81,"line":35364},[79,38772,35367],{"class":2440},[79,38774,38775],{"class":81,"line":35370},[79,38776,35373],{"class":2440},[79,38778,38779,38781,38783],{"class":81,"line":35376},[79,38780,35379],{"class":239},[79,38782,244],{"class":243},[79,38784,34430],{"class":239},[79,38786,38787],{"class":81,"line":35386},[79,38788,454],{"emptyLinePlaceholder":453},[79,38790,38791],{"class":81,"line":35391},[79,38792,35394],{"class":2440},[79,38794,38795,38797,38799,38801,38803],{"class":81,"line":35397},[79,38796,35400],{"class":239},[79,38798,244],{"class":243},[79,38800,35405],{"class":239},[79,38802,320],{"class":243},[79,38804,35410],{"class":239},[79,38806,38807,38809,38811,38813,38815,38817,38819,38821,38823,38825,38827,38829,38831,38833,38835,38837,38839,38841],{"class":81,"line":35413},[79,38808,34566],{"class":96},[79,38810,685],{"class":239},[79,38812,35420],{"class":89},[79,38814,694],{"class":96},[79,38816,35425],{"class":243},[79,38818,700],{"class":96},[79,38820,2917],{"class":89},[79,38822,694],{"class":96},[79,38824,35425],{"class":243},[79,38826,700],{"class":96},[79,38828,35438],{"class":89},[79,38830,35441],{"class":239},[79,38832,35444],{"class":243},[79,38834,3279],{"class":96},[79,38836,35449],{"class":239},[79,38838,1137],{"class":243},[79,38840,3279],{"class":96},[79,38842,1191],{"class":239},[79,38844,38845],{"class":81,"line":35458},[79,38846,38847],{"class":2440},"    # 选择最优参数并保存\n",[79,38849,38850],{"class":81,"line":35464},[79,38851,38852],{"class":2440},"    # 保存最佳模型权重字典\n",[79,38854,38855,38858,38860],{"class":81,"line":35470},[79,38856,38857],{"class":239},"    torch.save(best_model_wts,",[79,38859,35482],{"class":89},[79,38861,253],{"class":239},[79,38863,38864],{"class":81,"line":35476},[79,38865,35502],{"class":2440},[79,38867,38868,38870,38872,38874,38876,38878],{"class":81,"line":35487},[79,38869,35508],{"class":239},[79,38871,244],{"class":243},[79,38873,35513],{"class":239},[79,38875,35516],{"class":7412},[79,38877,244],{"class":243},[79,38879,3782],{"class":239},[79,38881,38882,38884,38886,38888],{"class":81,"line":35493},[79,38883,35526],{"class":89},[79,38885,3232],{"class":239},[79,38887,35531],{"class":96},[79,38889,35534],{"class":239},[79,38891,38892,38894],{"class":81,"line":35499},[79,38893,35540],{"class":89},[79,38895,35543],{"class":239},[79,38897,38898,38900],{"class":81,"line":35505},[79,38899,35549],{"class":89},[79,38901,35552],{"class":239},[79,38903,38904,38906],{"class":81,"line":35523},[79,38905,35558],{"class":89},[79,38907,35561],{"class":239},[79,38909,38910,38912],{"class":81,"line":35537},[79,38911,35567],{"class":89},[79,38913,35570],{"class":239},[79,38915,38916],{"class":81,"line":35546},[79,38917,35576],{"class":239},[79,38919,38920],{"class":81,"line":35555},[79,38921,35582],{"class":2440},[79,38923,38924,38926],{"class":81,"line":35564},[79,38925,711],{"class":243},[79,38927,35590],{"class":239},[79,38929,38930],{"class":81,"line":35573},[79,38931,454],{"emptyLinePlaceholder":453},[79,38933,38934],{"class":81,"line":35579},[79,38935,35601],{"class":2440},[79,38937,38938,38940,38942],{"class":81,"line":35585},[79,38939,633],{"class":243},[79,38941,35609],{"class":85},[79,38943,35612],{"class":239},[79,38945,38946],{"class":81,"line":35593},[79,38947,35618],{"class":2440},[79,38949,38950,38952,38954,38956,38958,38960,38962,38964],{"class":81,"line":35598},[79,38951,35624],{"class":239},[79,38953,33811],{"class":7412},[79,38955,244],{"class":243},[79,38957,685],{"class":239},[79,38959,2872],{"class":96},[79,38961,2752],{"class":239},[79,38963,2668],{"class":96},[79,38965,1191],{"class":239},[79,38967,38968],{"class":81,"line":35604},[79,38969,35644],{"class":2440},[79,38971,38972],{"class":81,"line":35615},[79,38973,35650],{"class":2440},[79,38975,38976],{"class":81,"line":35621},[79,38977,35656],{"class":2440},[79,38979,38980,38982,38984,38986,38988,38990,38992],{"class":81,"line":35641},[79,38981,33845],{"class":239},[79,38983,1072],{"class":96},[79,38985,2752],{"class":239},[79,38987,1049],{"class":96},[79,38989,2752],{"class":239},[79,38991,1072],{"class":96},[79,38993,253],{"class":239},[79,38995,38996],{"class":81,"line":35647},[79,38997,35679],{"class":2440},[79,38999,39000],{"class":81,"line":35653},[79,39001,35685],{"class":2440},[79,39003,39004],{"class":81,"line":35659},[79,39005,35691],{"class":2440},[79,39007,39008],{"class":81,"line":35676},[79,39009,35697],{"class":2440},[79,39011,39012],{"class":81,"line":35682},[79,39013,35703],{"class":2440},[79,39015,39016,39018,39020,39022,39024,39026,39028,39030,39032],{"class":81,"line":35688},[79,39017,35709],{"class":239},[79,39019,35712],{"class":89},[79,39021,35715],{"class":239},[79,39023,35718],{"class":89},[79,39025,2752],{"class":239},[79,39027,35723],{"class":7412},[79,39029,244],{"class":243},[79,39031,35728],{"class":89},[79,39033,253],{"class":239},[79,39035,39036,39038,39040,39042,39044,39046,39048,39050,39052],{"class":81,"line":35694},[79,39037,35709],{"class":239},[79,39039,35712],{"class":89},[79,39041,35740],{"class":239},[79,39043,35743],{"class":89},[79,39045,2752],{"class":239},[79,39047,35723],{"class":7412},[79,39049,244],{"class":243},[79,39051,35752],{"class":89},[79,39053,253],{"class":239},[79,39055,39056],{"class":81,"line":35700},[79,39057,35760],{"class":2440},[79,39059,39060],{"class":81,"line":35706},[79,39061,35766],{"class":239},[79,39063,39064],{"class":81,"line":35733},[79,39065,35772],{"class":2440},[79,39067,39068,39070,39072],{"class":81,"line":35757},[79,39069,35778],{"class":239},[79,39071,35781],{"class":89},[79,39073,253],{"class":239},[79,39075,39076,39078,39080],{"class":81,"line":35763},[79,39077,35789],{"class":239},[79,39079,35792],{"class":89},[79,39081,253],{"class":239},[79,39083,39084],{"class":81,"line":35769},[79,39085,35800],{"class":2440},[79,39087,39088,39090,39092,39094,39096,39098,39100],{"class":81,"line":35775},[79,39089,33845],{"class":239},[79,39091,1072],{"class":96},[79,39093,2752],{"class":239},[79,39095,1049],{"class":96},[79,39097,2752],{"class":239},[79,39099,1049],{"class":96},[79,39101,253],{"class":239},[79,39103,39104,39106,39108,39110,39112,39114,39116,39118,39120],{"class":81,"line":35786},[79,39105,35709],{"class":239},[79,39107,35712],{"class":89},[79,39109,35827],{"class":239},[79,39111,35718],{"class":89},[79,39113,2752],{"class":239},[79,39115,35723],{"class":7412},[79,39117,244],{"class":243},[79,39119,35838],{"class":89},[79,39121,253],{"class":239},[79,39123,39124,39126,39128,39130,39132,39134,39136,39138,39140],{"class":81,"line":35797},[79,39125,35709],{"class":239},[79,39127,35712],{"class":89},[79,39129,35850],{"class":239},[79,39131,35743],{"class":89},[79,39133,2752],{"class":239},[79,39135,35723],{"class":7412},[79,39137,244],{"class":243},[79,39139,35861],{"class":89},[79,39141,253],{"class":239},[79,39143,39144],{"class":81,"line":35803},[79,39145,35869],{"class":2440},[79,39147,39148],{"class":81,"line":35820},[79,39149,35766],{"class":239},[79,39151,39152,39154,39156],{"class":81,"line":35843},[79,39153,35778],{"class":239},[79,39155,35712],{"class":89},[79,39157,253],{"class":239},[79,39159,39160,39162,39164],{"class":81,"line":35866},[79,39161,35789],{"class":239},[79,39163,35891],{"class":89},[79,39165,253],{"class":239},[79,39167,39168],{"class":81,"line":35872},[79,39169,35899],{"class":239},[79,39171,39172],{"class":81,"line":35877},[79,39173,454],{"emptyLinePlaceholder":453},[79,39175,39176],{"class":81,"line":35886},[79,39177,35910],{"class":2440},[79,39179,39180,39182,39184,39186,39188],{"class":81,"line":35896},[79,39181,1329],{"class":243},[79,39183,1332],{"class":96},[79,39185,5155],{"class":243},[79,39187,33348],{"class":89},[79,39189,673],{"class":239},[79,39191,39192],{"class":81,"line":35902},[79,39193,35929],{"class":2440},[79,39195,39196,39199,39201],{"class":81,"line":35907},[79,39197,39198],{"class":239},"    AlexNet",[79,39200,244],{"class":243},[79,39202,39203],{"class":239},"AlexNet()\n",[79,39205,39206,39208,39210],{"class":81,"line":35913},[79,39207,35946],{"class":239},[79,39209,244],{"class":243},[79,39211,35951],{"class":239},[79,39213,39214,39216,39218,39221,39223,39225,39227],{"class":81,"line":35926},[79,39215,35508],{"class":239},[79,39217,244],{"class":243},[79,39219,39220],{"class":239},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[79,39222,35964],{"class":7412},[79,39224,244],{"class":243},[79,39226,3073],{"class":96},[79,39228,253],{"class":239},[79,39230,39231],{"class":81,"line":35932},[79,39232,35976],{"class":239},[26,39234,39235],{"start":178},[29,39236,35989],{},[51,39238,39240],{"className":230,"code":39239,"language":232,"meta":57,"style":57},"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",[59,39241,39242,39248,39258,39268,39278,39282,39292,39302,39313,39317,39321,39325,39333,39349,39359,39375,39385,39399,39403,39413,39423,39433,39439,39443,39447,39455,39459,39475,39483,39487,39491,39499,39507,39511,39515,39519,39523,39529,39533,39543,39551,39559,39563,39567,39571,39579,39583,39599,39603,39607,39611,39623,39627,39639,39643,39647,39659,39663,39673,39677,39681,39693,39697,39705,39709,39713,39721,39725,39733,39737,39741,39745,39749,39753,39769,39777,39781,39785,39833,39839,39843,39853,39861,39869,39873,39877,39881,39885,39893,39897,39913,39917,39925,39933],{"__ignoreMap":57},[79,39243,39244,39246],{"class":81,"line":82},[79,39245,432],{"class":243},[79,39247,32521],{"class":239},[79,39249,39250,39252,39254,39256],{"class":81,"line":167},[79,39251,432],{"class":243},[79,39253,33534],{"class":239},[79,39255,445],{"class":243},[79,39257,33539],{"class":239},[79,39259,39260,39262,39264,39266],{"class":81,"line":178},[79,39261,32862],{"class":243},[79,39263,36017],{"class":239},[79,39265,432],{"class":243},[79,39267,36022],{"class":239},[79,39269,39270,39272,39274,39276],{"class":81,"line":457},[79,39271,32862],{"class":243},[79,39273,33517],{"class":239},[79,39275,432],{"class":243},[79,39277,33522],{"class":239},[79,39279,39280],{"class":81,"line":462},[79,39281,36037],{"class":2440},[79,39283,39284,39286,39288,39290],{"class":81,"line":474},[79,39285,32862],{"class":243},[79,39287,33490],{"class":239},[79,39289,432],{"class":243},[79,39291,33495],{"class":239},[79,39293,39294,39296,39298,39300],{"class":81,"line":480},[79,39295,32862],{"class":243},[79,39297,34032],{"class":239},[79,39299,432],{"class":243},[79,39301,37671],{"class":239},[79,39303,39304,39306,39309,39311],{"class":81,"line":486},[79,39305,32862],{"class":243},[79,39307,39308],{"class":239}," 练习.AlexNet.model ",[79,39310,432],{"class":243},[79,39312,37671],{"class":239},[79,39314,39315],{"class":81,"line":491},[79,39316,454],{"emptyLinePlaceholder":453},[79,39318,39319],{"class":81,"line":497},[79,39320,454],{"emptyLinePlaceholder":453},[79,39322,39323],{"class":81,"line":503},[79,39324,36066],{"class":2440},[79,39326,39327,39329,39331],{"class":81,"line":509},[79,39328,633],{"class":243},[79,39330,36073],{"class":85},[79,39332,34070],{"class":239},[79,39334,39335,39337,39339,39341,39343,39345,39347],{"class":81,"line":514},[79,39336,36080],{"class":239},[79,39338,244],{"class":243},[79,39340,33574],{"class":239},[79,39342,33577],{"class":7412},[79,39344,244],{"class":243},[79,39346,33582],{"class":89},[79,39348,33585],{"class":239},[79,39350,39351,39353,39355,39357],{"class":81,"line":520},[79,39352,36097],{"class":7412},[79,39354,244],{"class":243},[79,39356,36102],{"class":96},[79,39358,33585],{"class":239},[79,39360,39361,39363,39365,39367,39369,39371,39373],{"class":81,"line":526},[79,39362,36109],{"class":7412},[79,39364,244],{"class":243},[79,39366,33612],{"class":239},[79,39368,33615],{"class":7412},[79,39370,244],{"class":243},[79,39372,37563],{"class":96},[79,39374,33623],{"class":239},[79,39376,39377,39379,39381,39383],{"class":81,"line":532},[79,39378,36126],{"class":7412},[79,39380,244],{"class":243},[79,39382,33595],{"class":96},[79,39384,253],{"class":239},[79,39386,39387,39389,39391,39393,39395,39397],{"class":81,"line":537},[79,39388,36137],{"class":239},[79,39390,244],{"class":243},[79,39392,33653],{"class":239},[79,39394,33656],{"class":7412},[79,39396,244],{"class":243},[79,39398,36148],{"class":239},[79,39400,39401],{"class":81,"line":543},[79,39402,36153],{"class":2440},[79,39404,39405,39407,39409,39411],{"class":81,"line":549},[79,39406,36158],{"class":7412},[79,39408,244],{"class":243},[79,39410,1072],{"class":96},[79,39412,33585],{"class":239},[79,39414,39415,39417,39419,39421],{"class":81,"line":555},[79,39416,36169],{"class":7412},[79,39418,244],{"class":243},[79,39420,33595],{"class":96},[79,39422,33585],{"class":239},[79,39424,39425,39427,39429,39431],{"class":81,"line":561},[79,39426,36180],{"class":7412},[79,39428,244],{"class":243},[79,39430,1030],{"class":96},[79,39432,253],{"class":239},[79,39434,39435,39437],{"class":81,"line":567},[79,39436,711],{"class":243},[79,39438,36193],{"class":239},[79,39440,39441],{"class":81,"line":573},[79,39442,454],{"emptyLinePlaceholder":453},[79,39444,39445],{"class":81,"line":579},[79,39446,36202],{"class":2440},[79,39448,39449,39451,39453],{"class":81,"line":584},[79,39450,633],{"class":243},[79,39452,36209],{"class":85},[79,39454,36212],{"class":239},[79,39456,39457],{"class":81,"line":590},[79,39458,36217],{"class":2440},[79,39460,39461,39463,39465,39467,39469,39471,39473],{"class":81,"line":596},[79,39462,33360],{"class":239},[79,39464,244],{"class":243},[79,39466,33367],{"class":89},[79,39468,3929],{"class":243},[79,39470,33372],{"class":239},[79,39472,3926],{"class":243},[79,39474,36234],{"class":89},[79,39476,39477,39479,39481],{"class":81,"line":602},[79,39478,33412],{"class":239},[79,39480,244],{"class":243},[79,39482,34405],{"class":239},[79,39484,39485],{"class":81,"line":608},[79,39486,454],{"emptyLinePlaceholder":453},[79,39488,39489],{"class":81,"line":614},[79,39490,36251],{"class":2440},[79,39492,39493,39495,39497],{"class":81,"line":620},[79,39494,36256],{"class":239},[79,39496,244],{"class":243},[79,39498,34458],{"class":96},[79,39500,39501,39503,39505],{"class":81,"line":625},[79,39502,36265],{"class":239},[79,39504,244],{"class":243},[79,39506,5290],{"class":96},[79,39508,39509],{"class":81,"line":630},[79,39510,454],{"emptyLinePlaceholder":453},[79,39512,39513],{"class":81,"line":648},[79,39514,36278],{"class":2440},[79,39516,39517],{"class":81,"line":659},[79,39518,36283],{"class":2440},[79,39520,39521],{"class":81,"line":676},[79,39522,36288],{"class":2440},[79,39524,39525,39527],{"class":81,"line":708},[79,39526,36293],{"class":243},[79,39528,34999],{"class":239},[79,39530,39531],{"class":81,"line":717},[79,39532,36300],{"class":2440},[79,39534,39535,39537,39539,39541],{"class":81,"line":722},[79,39536,5606],{"class":243},[79,39538,36307],{"class":239},[79,39540,955],{"class":243},[79,39542,36312],{"class":239},[79,39544,39545,39547,39549],{"class":81,"line":727},[79,39546,36317],{"class":239},[79,39548,244],{"class":243},[79,39550,36322],{"class":239},[79,39552,39553,39555,39557],{"class":81,"line":738},[79,39554,36327],{"class":239},[79,39556,244],{"class":243},[79,39558,36332],{"class":239},[79,39560,39561],{"class":81,"line":753},[79,39562,36337],{"class":2440},[79,39564,39565],{"class":81,"line":768},[79,39566,34990],{"class":239},[79,39568,39569],{"class":81,"line":776},[79,39570,36346],{"class":2440},[79,39572,39573,39575,39577],{"class":81,"line":781},[79,39574,34775],{"class":239},[79,39576,244],{"class":243},[79,39578,36355],{"class":239},[79,39580,39581],{"class":81,"line":786},[79,39582,36360],{"class":2440},[79,39584,39585,39587,39589,39591,39593,39595,39597],{"class":81,"line":802},[79,39586,34792],{"class":239},[79,39588,244],{"class":243},[79,39590,34797],{"class":239},[79,39592,34800],{"class":7412},[79,39594,244],{"class":243},[79,39596,1072],{"class":96},[79,39598,253],{"class":239},[79,39600,39601],{"class":81,"line":815},[79,39602,36381],{"class":2440},[79,39604,39605],{"class":81,"line":828},[79,39606,36386],{"class":2440},[79,39608,39609],{"class":81,"line":842},[79,39610,36391],{"class":2440},[79,39612,39613,39615,39617,39619,39621],{"class":81,"line":859},[79,39614,36396],{"class":239},[79,39616,1118],{"class":243},[79,39618,34902],{"class":239},[79,39620,5155],{"class":243},[79,39622,36405],{"class":239},[79,39624,39625],{"class":81,"line":878},[79,39626,36410],{"class":2440},[79,39628,39629,39631,39633,39635,39637],{"class":81,"line":883},[79,39630,36415],{"class":239},[79,39632,1118],{"class":243},[79,39634,36420],{"class":239},[79,39636,1030],{"class":96},[79,39638,253],{"class":239},[79,39640,39641],{"class":81,"line":888},[79,39642,454],{"emptyLinePlaceholder":453},[79,39644,39645],{"class":81,"line":904},[79,39646,36433],{"class":2440},[79,39648,39649,39651,39653,39655,39657],{"class":81,"line":919},[79,39650,36438],{"class":239},[79,39652,244],{"class":243},[79,39654,36443],{"class":239},[79,39656,2957],{"class":243},[79,39658,36448],{"class":239},[79,39660,39661],{"class":81,"line":930},[79,39662,36453],{"class":2440},[79,39664,39665,39667,39669,39671],{"class":81,"line":941},[79,39666,34566],{"class":96},[79,39668,685],{"class":239},[79,39670,36462],{"class":89},[79,39672,36465],{"class":239},[79,39674,39675],{"class":81,"line":946},[79,39676,454],{"emptyLinePlaceholder":453},[79,39678,39679],{"class":81,"line":969},[79,39680,36474],{"class":2440},[79,39682,39683,39685,39687,39689,39691],{"class":81,"line":975},[79,39684,1329],{"class":243},[79,39686,1332],{"class":96},[79,39688,5155],{"class":243},[79,39690,33348],{"class":89},[79,39692,673],{"class":239},[79,39694,39695],{"class":81,"line":989},[79,39696,36491],{"class":2440},[79,39698,39699,39701,39703],{"class":81,"line":1003},[79,39700,33412],{"class":239},[79,39702,244],{"class":243},[79,39704,39203],{"class":239},[79,39706,39707],{"class":81,"line":1019},[79,39708,36504],{"class":2440},[79,39710,39711],{"class":81,"line":1024},[79,39712,36509],{"class":2440},[79,39714,39715,39717,39719],{"class":81,"line":1067},[79,39716,36514],{"class":239},[79,39718,36517],{"class":89},[79,39720,1191],{"class":239},[79,39722,39723],{"class":81,"line":1101},[79,39724,36524],{"class":2440},[79,39726,39727,39729,39731],{"class":81,"line":1106},[79,39728,36137],{"class":239},[79,39730,244],{"class":243},[79,39732,36533],{"class":239},[79,39734,39735],{"class":81,"line":1112},[79,39736,36538],{"class":2440},[79,39738,39739],{"class":81,"line":1124},[79,39740,36543],{"class":239},[79,39742,39743],{"class":81,"line":1129},[79,39744,454],{"emptyLinePlaceholder":453},[79,39746,39747],{"class":81,"line":1150},[79,39748,36552],{"class":2440},[79,39750,39751],{"class":81,"line":1161},[79,39752,36557],{"class":2440},[79,39754,39755,39757,39759,39761,39763,39765,39767],{"class":81,"line":1175},[79,39756,33360],{"class":239},[79,39758,244],{"class":243},[79,39760,33367],{"class":89},[79,39762,3929],{"class":243},[79,39764,33372],{"class":239},[79,39766,3926],{"class":243},[79,39768,36234],{"class":89},[79,39770,39771,39773,39775],{"class":81,"line":1194},[79,39772,33412],{"class":239},[79,39774,244],{"class":243},[79,39776,34405],{"class":239},[79,39778,39779],{"class":81,"line":1211},[79,39780,36586],{"class":2440},[79,39782,39783],{"class":81,"line":1228},[79,39784,36591],{"class":2440},[79,39786,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831],{"class":81,"line":1246},[79,39788,36596],{"class":239},[79,39790,244],{"class":243},[79,39792,3263],{"class":239},[79,39794,36603],{"class":89},[79,39796,2752],{"class":239},[79,39798,36608],{"class":89},[79,39800,2752],{"class":239},[79,39802,36613],{"class":89},[79,39804,2752],{"class":239},[79,39806,36618],{"class":89},[79,39808,2752],{"class":239},[79,39810,36623],{"class":89},[79,39812,2752],{"class":239},[79,39814,36628],{"class":89},[79,39816,2752],{"class":239},[79,39818,36633],{"class":89},[79,39820,2752],{"class":239},[79,39822,36638],{"class":89},[79,39824,2752],{"class":239},[79,39826,36643],{"class":89},[79,39828,2752],{"class":239},[79,39830,36648],{"class":89},[79,39832,35361],{"class":239},[79,39834,39835,39837],{"class":81,"line":1251},[79,39836,36293],{"class":243},[79,39838,34999],{"class":239},[79,39840,39841],{"class":81,"line":1274},[79,39842,36661],{"class":2440},[79,39844,39845,39847,39849,39851],{"class":81,"line":1296},[79,39846,5606],{"class":243},[79,39848,36668],{"class":239},[79,39850,955],{"class":243},[79,39852,36312],{"class":239},[79,39854,39855,39857,39859],{"class":81,"line":1316},[79,39856,34725],{"class":239},[79,39858,244],{"class":243},[79,39860,34730],{"class":239},[79,39862,39863,39865,39867],{"class":81,"line":1321},[79,39864,34740],{"class":239},[79,39866,244],{"class":243},[79,39868,34745],{"class":239},[79,39870,39871],{"class":81,"line":1326},[79,39872,454],{"emptyLinePlaceholder":453},[79,39874,39875],{"class":81,"line":1342},[79,39876,36697],{"class":2440},[79,39878,39879],{"class":81,"line":18985},[79,39880,34990],{"class":239},[79,39882,39883],{"class":81,"line":18990},[79,39884,36706],{"class":2440},[79,39886,39887,39889,39891],{"class":81,"line":18995},[79,39888,34775],{"class":239},[79,39890,244],{"class":243},[79,39892,34780],{"class":239},[79,39894,39895],{"class":81,"line":19009},[79,39896,36719],{"class":2440},[79,39898,39899,39901,39903,39905,39907,39909,39911],{"class":81,"line":19021},[79,39900,34792],{"class":239},[79,39902,244],{"class":243},[79,39904,34797],{"class":239},[79,39906,34800],{"class":7412},[79,39908,244],{"class":243},[79,39910,1072],{"class":96},[79,39912,253],{"class":239},[79,39914,39915],{"class":81,"line":19026},[79,39916,36740],{"class":2440},[79,39918,39919,39921,39923],{"class":81,"line":19039},[79,39920,36745],{"class":239},[79,39922,244],{"class":243},[79,39924,36750],{"class":239},[79,39926,39927,39929,39931],{"class":81,"line":19044},[79,39928,36755],{"class":239},[79,39930,244],{"class":243},[79,39932,36760],{"class":239},[79,39934,39935,39937,39939,39941,39943,39945,39947,39949],{"class":81,"line":19049},[79,39936,1164],{"class":96},[79,39938,685],{"class":239},[79,39940,36769],{"class":89},[79,39942,36772],{"class":239},[79,39944,36775],{"class":89},[79,39946,2752],{"class":239},[79,39948,36780],{"class":89},[79,39950,36783],{"class":239},[265,39952,39954],{"id":39953},"_22vgg","2.2.VGG",[24137,39956,39958],{"id":39957},"_221原理","2.2.1.原理",[19,39960,39961],{},[3699,39962],{"alt":57,"src":39963},"\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,39965,39966],{},[3699,39967],{"alt":57,"src":39968},"\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,39970,39971],{},[3699,39972],{"alt":57,"src":39973},"\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,39975,39976],{},"参数详细描述：",[19,39978,39979],{},[3699,39980],{"alt":57,"src":39981},"\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,39983,39984],{},[3699,39985],{"alt":57,"src":39986},"\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,39988,39989],{},[3699,39990],{"alt":57,"src":39991},"\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,39993,39994],{},[3699,39995],{"alt":57,"src":39996},"\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,39998,39999],{},[3699,40000],{"alt":57,"src":40001},"\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",[24137,40003,40005],{"id":40004},"_222代码实现","2.2.2.代码实现",[26,40007,40008],{},[29,40009,40010],{},"网络搭建",[51,40012,40014],{"className":230,"code":40013,"language":232,"meta":57,"style":57},"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",[59,40015,40016,40022,40034,40044,40054,40058,40075,40083,40102,40107,40112,40124,40162,40167,40203,40207,40236,40241,40246,40257,40293,40297,40333,40337,40365,40369,40374,40385,40421,40425,40461,40465,40501,40505,40533,40537,40542,40553,40590,40594,40630,40634,40670,40674,40702,40706,40711,40722,40758,40762,40798,40802,40838,40842,40870,40874,40879,40890,40895,40900,40905,40926,40930,40942,40946,40958,40962,40966,40971,40976,40991,40996,41006,41011,41026,41031,41050,41055,41064,41069,41079,41084,41089,41103,41108,41122,41130,41134,41138,41146,41157,41168,41179,41190,41201,41212,41218,41222,41227,41240,41260,41266,41275],{"__ignoreMap":57},[79,40017,40018,40020],{"class":81,"line":82},[79,40019,432],{"class":243},[79,40021,32521],{"class":239},[79,40023,40024,40026,40029,40031],{"class":81,"line":167},[79,40025,32862],{"class":243},[79,40027,40028],{"class":239}," sympy.core.sympify ",[79,40030,432],{"class":243},[79,40032,40033],{"class":239}," kernS\n",[79,40035,40036,40038,40040,40042],{"class":81,"line":178},[79,40037,32862],{"class":243},[79,40039,32865],{"class":239},[79,40041,432],{"class":243},[79,40043,32870],{"class":239},[79,40045,40046,40048,40050,40052],{"class":81,"line":457},[79,40047,32862],{"class":243},[79,40049,32882],{"class":239},[79,40051,432],{"class":243},[79,40053,32887],{"class":239},[79,40055,40056],{"class":81,"line":462},[79,40057,454],{"emptyLinePlaceholder":453},[79,40059,40060,40062,40065,40067,40069,40071,40073],{"class":81,"line":474},[79,40061,16855],{"class":243},[79,40063,40064],{"class":85}," VGG16",[79,40066,685],{"class":239},[79,40068,32903],{"class":85},[79,40070,2931],{"class":239},[79,40072,32908],{"class":85},[79,40074,966],{"class":239},[79,40076,40077,40079,40081],{"class":81,"line":480},[79,40078,32925],{"class":243},[79,40080,32928],{"class":96},[79,40082,32931],{"class":239},[79,40084,40085,40087,40089,40092,40094,40096,40098,40100],{"class":81,"line":486},[79,40086,32941],{"class":96},[79,40088,685],{"class":239},[79,40090,40091],{"class":96},"VGG16",[79,40093,1060],{"class":239},[79,40095,32947],{"class":96},[79,40097,32950],{"class":239},[79,40099,32953],{"class":96},[79,40101,4191],{"class":239},[79,40103,40104],{"class":81,"line":491},[79,40105,40106],{"class":2440},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[79,40108,40109],{"class":81,"line":497},[79,40110,40111],{"class":2440},"        # 这里用的是灰度图\n",[79,40113,40114,40116,40119,40121],{"class":81,"line":503},[79,40115,32969],{"class":96},[79,40117,40118],{"class":239},".block1",[79,40120,244],{"class":243},[79,40122,40123],{"class":239},"nn.Sequential(\n",[79,40125,40126,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159],{"class":81,"line":509},[79,40127,40128],{"class":239},"            nn.Conv2d(",[79,40130,32980],{"class":7412},[79,40132,244],{"class":243},[79,40134,1072],{"class":96},[79,40136,2752],{"class":239},[79,40138,32989],{"class":7412},[79,40140,244],{"class":243},[79,40142,2581],{"class":96},[79,40144,2752],{"class":239},[79,40146,32998],{"class":7412},[79,40148,244],{"class":243},[79,40150,1188],{"class":96},[79,40152,2752],{"class":239},[79,40154,33007],{"class":7412},[79,40156,244],{"class":243},[79,40158,1072],{"class":96},[79,40160,40161],{"class":239},"),\n",[79,40163,40164],{"class":81,"line":514},[79,40165,40166],{"class":239},"            nn.ReLU(),\n",[79,40168,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195,40197,40199,40201],{"class":81,"line":520},[79,40170,40128],{"class":239},[79,40172,32980],{"class":7412},[79,40174,244],{"class":243},[79,40176,2581],{"class":96},[79,40178,2752],{"class":239},[79,40180,32989],{"class":7412},[79,40182,244],{"class":243},[79,40184,2581],{"class":96},[79,40186,2752],{"class":239},[79,40188,32998],{"class":7412},[79,40190,244],{"class":243},[79,40192,1188],{"class":96},[79,40194,2752],{"class":239},[79,40196,33007],{"class":7412},[79,40198,244],{"class":243},[79,40200,1072],{"class":96},[79,40202,40161],{"class":239},[79,40204,40205],{"class":81,"line":526},[79,40206,40166],{"class":239},[79,40208,40209,40212,40214,40216,40218,40220,40222,40224,40226,40228,40230,40232,40234],{"class":81,"line":532},[79,40210,40211],{"class":239},"            nn.MaxPool2d(",[79,40213,32998],{"class":7412},[79,40215,244],{"class":243},[79,40217,1049],{"class":96},[79,40219,2752],{"class":239},[79,40221,33053],{"class":7412},[79,40223,244],{"class":243},[79,40225,1049],{"class":96},[79,40227,2752],{"class":239},[79,40229,33007],{"class":7412},[79,40231,244],{"class":243},[79,40233,1030],{"class":96},[79,40235,253],{"class":239},[79,40237,40238],{"class":81,"line":537},[79,40239,40240],{"class":239},"        )\n",[79,40242,40243],{"class":81,"line":543},[79,40244,40245],{"class":2440},"        # 第二层\n",[79,40247,40248,40250,40253,40255],{"class":81,"line":549},[79,40249,32969],{"class":96},[79,40251,40252],{"class":239},".block2",[79,40254,244],{"class":243},[79,40256,40123],{"class":239},[79,40258,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287,40289,40291],{"class":81,"line":555},[79,40260,40128],{"class":239},[79,40262,32980],{"class":7412},[79,40264,244],{"class":243},[79,40266,2581],{"class":96},[79,40268,2752],{"class":239},[79,40270,32989],{"class":7412},[79,40272,244],{"class":243},[79,40274,34186],{"class":96},[79,40276,2752],{"class":239},[79,40278,32998],{"class":7412},[79,40280,244],{"class":243},[79,40282,1188],{"class":96},[79,40284,2752],{"class":239},[79,40286,33007],{"class":7412},[79,40288,244],{"class":243},[79,40290,1072],{"class":96},[79,40292,40161],{"class":239},[79,40294,40295],{"class":81,"line":561},[79,40296,40166],{"class":239},[79,40298,40299,40301,40303,40305,40307,40309,40311,40313,40315,40317,40319,40321,40323,40325,40327,40329,40331],{"class":81,"line":567},[79,40300,40128],{"class":239},[79,40302,32980],{"class":7412},[79,40304,244],{"class":243},[79,40306,34186],{"class":96},[79,40308,2752],{"class":239},[79,40310,32989],{"class":7412},[79,40312,244],{"class":243},[79,40314,34186],{"class":96},[79,40316,2752],{"class":239},[79,40318,32998],{"class":7412},[79,40320,244],{"class":243},[79,40322,1188],{"class":96},[79,40324,2752],{"class":239},[79,40326,33007],{"class":7412},[79,40328,244],{"class":243},[79,40330,1072],{"class":96},[79,40332,40161],{"class":239},[79,40334,40335],{"class":81,"line":573},[79,40336,40166],{"class":239},[79,40338,40339,40341,40343,40345,40347,40349,40351,40353,40355,40357,40359,40361,40363],{"class":81,"line":579},[79,40340,40211],{"class":239},[79,40342,32998],{"class":7412},[79,40344,244],{"class":243},[79,40346,1049],{"class":96},[79,40348,2752],{"class":239},[79,40350,33053],{"class":7412},[79,40352,244],{"class":243},[79,40354,1049],{"class":96},[79,40356,2752],{"class":239},[79,40358,33007],{"class":7412},[79,40360,244],{"class":243},[79,40362,1030],{"class":96},[79,40364,253],{"class":239},[79,40366,40367],{"class":81,"line":584},[79,40368,40240],{"class":239},[79,40370,40371],{"class":81,"line":590},[79,40372,40373],{"class":2440},"        # 第三层\n",[79,40375,40376,40378,40381,40383],{"class":81,"line":596},[79,40377,32969],{"class":96},[79,40379,40380],{"class":239},".block3",[79,40382,244],{"class":243},[79,40384,40123],{"class":239},[79,40386,40387,40389,40391,40393,40395,40397,40399,40401,40403,40405,40407,40409,40411,40413,40415,40417,40419],{"class":81,"line":602},[79,40388,40128],{"class":239},[79,40390,32980],{"class":7412},[79,40392,244],{"class":243},[79,40394,34186],{"class":96},[79,40396,2752],{"class":239},[79,40398,32989],{"class":7412},[79,40400,244],{"class":243},[79,40402,36984],{"class":96},[79,40404,2752],{"class":239},[79,40406,32998],{"class":7412},[79,40408,244],{"class":243},[79,40410,1188],{"class":96},[79,40412,2752],{"class":239},[79,40414,33007],{"class":7412},[79,40416,244],{"class":243},[79,40418,1072],{"class":96},[79,40420,40161],{"class":239},[79,40422,40423],{"class":81,"line":608},[79,40424,40166],{"class":239},[79,40426,40427,40429,40431,40433,40435,40437,40439,40441,40443,40445,40447,40449,40451,40453,40455,40457,40459],{"class":81,"line":614},[79,40428,40128],{"class":239},[79,40430,32980],{"class":7412},[79,40432,244],{"class":243},[79,40434,36984],{"class":96},[79,40436,2752],{"class":239},[79,40438,32989],{"class":7412},[79,40440,244],{"class":243},[79,40442,36984],{"class":96},[79,40444,2752],{"class":239},[79,40446,32998],{"class":7412},[79,40448,244],{"class":243},[79,40450,1188],{"class":96},[79,40452,2752],{"class":239},[79,40454,33007],{"class":7412},[79,40456,244],{"class":243},[79,40458,1072],{"class":96},[79,40460,40161],{"class":239},[79,40462,40463],{"class":81,"line":620},[79,40464,40166],{"class":239},[79,40466,40467,40469,40471,40473,40475,40477,40479,40481,40483,40485,40487,40489,40491,40493,40495,40497,40499],{"class":81,"line":625},[79,40468,40128],{"class":239},[79,40470,32980],{"class":7412},[79,40472,244],{"class":243},[79,40474,36984],{"class":96},[79,40476,2752],{"class":239},[79,40478,32989],{"class":7412},[79,40480,244],{"class":243},[79,40482,36984],{"class":96},[79,40484,2752],{"class":239},[79,40486,32998],{"class":7412},[79,40488,244],{"class":243},[79,40490,1188],{"class":96},[79,40492,2752],{"class":239},[79,40494,33007],{"class":7412},[79,40496,244],{"class":243},[79,40498,1072],{"class":96},[79,40500,40161],{"class":239},[79,40502,40503],{"class":81,"line":630},[79,40504,40166],{"class":239},[79,40506,40507,40509,40511,40513,40515,40517,40519,40521,40523,40525,40527,40529,40531],{"class":81,"line":648},[79,40508,40211],{"class":239},[79,40510,32998],{"class":7412},[79,40512,244],{"class":243},[79,40514,1049],{"class":96},[79,40516,2752],{"class":239},[79,40518,33053],{"class":7412},[79,40520,244],{"class":243},[79,40522,1049],{"class":96},[79,40524,2752],{"class":239},[79,40526,33007],{"class":7412},[79,40528,244],{"class":243},[79,40530,1030],{"class":96},[79,40532,253],{"class":239},[79,40534,40535],{"class":81,"line":659},[79,40536,40240],{"class":239},[79,40538,40539],{"class":81,"line":676},[79,40540,40541],{"class":2440},"        # 第四层\n",[79,40543,40544,40546,40549,40551],{"class":81,"line":708},[79,40545,32969],{"class":96},[79,40547,40548],{"class":239},".block4",[79,40550,244],{"class":243},[79,40552,40123],{"class":239},[79,40554,40555,40557,40559,40561,40563,40565,40567,40569,40572,40574,40576,40578,40580,40582,40584,40586,40588],{"class":81,"line":717},[79,40556,40128],{"class":239},[79,40558,32980],{"class":7412},[79,40560,244],{"class":243},[79,40562,36984],{"class":96},[79,40564,2752],{"class":239},[79,40566,32989],{"class":7412},[79,40568,244],{"class":243},[79,40570,40571],{"class":96},"512",[79,40573,2752],{"class":239},[79,40575,32998],{"class":7412},[79,40577,244],{"class":243},[79,40579,1188],{"class":96},[79,40581,2752],{"class":239},[79,40583,33007],{"class":7412},[79,40585,244],{"class":243},[79,40587,1072],{"class":96},[79,40589,40161],{"class":239},[79,40591,40592],{"class":81,"line":722},[79,40593,40166],{"class":239},[79,40595,40596,40598,40600,40602,40604,40606,40608,40610,40612,40614,40616,40618,40620,40622,40624,40626,40628],{"class":81,"line":727},[79,40597,40128],{"class":239},[79,40599,32980],{"class":7412},[79,40601,244],{"class":243},[79,40603,40571],{"class":96},[79,40605,2752],{"class":239},[79,40607,32989],{"class":7412},[79,40609,244],{"class":243},[79,40611,40571],{"class":96},[79,40613,2752],{"class":239},[79,40615,32998],{"class":7412},[79,40617,244],{"class":243},[79,40619,1188],{"class":96},[79,40621,2752],{"class":239},[79,40623,33007],{"class":7412},[79,40625,244],{"class":243},[79,40627,1072],{"class":96},[79,40629,40161],{"class":239},[79,40631,40632],{"class":81,"line":738},[79,40633,40166],{"class":239},[79,40635,40636,40638,40640,40642,40644,40646,40648,40650,40652,40654,40656,40658,40660,40662,40664,40666,40668],{"class":81,"line":753},[79,40637,40128],{"class":239},[79,40639,32980],{"class":7412},[79,40641,244],{"class":243},[79,40643,40571],{"class":96},[79,40645,2752],{"class":239},[79,40647,32989],{"class":7412},[79,40649,244],{"class":243},[79,40651,40571],{"class":96},[79,40653,2752],{"class":239},[79,40655,32998],{"class":7412},[79,40657,244],{"class":243},[79,40659,1188],{"class":96},[79,40661,2752],{"class":239},[79,40663,33007],{"class":7412},[79,40665,244],{"class":243},[79,40667,1072],{"class":96},[79,40669,40161],{"class":239},[79,40671,40672],{"class":81,"line":768},[79,40673,40166],{"class":239},[79,40675,40676,40678,40680,40682,40684,40686,40688,40690,40692,40694,40696,40698,40700],{"class":81,"line":776},[79,40677,40211],{"class":239},[79,40679,32998],{"class":7412},[79,40681,244],{"class":243},[79,40683,1049],{"class":96},[79,40685,2752],{"class":239},[79,40687,33053],{"class":7412},[79,40689,244],{"class":243},[79,40691,1049],{"class":96},[79,40693,2752],{"class":239},[79,40695,33007],{"class":7412},[79,40697,244],{"class":243},[79,40699,1030],{"class":96},[79,40701,253],{"class":239},[79,40703,40704],{"class":81,"line":781},[79,40705,40240],{"class":239},[79,40707,40708],{"class":81,"line":786},[79,40709,40710],{"class":2440},"        # 第五层\n",[79,40712,40713,40715,40718,40720],{"class":81,"line":802},[79,40714,32969],{"class":96},[79,40716,40717],{"class":239},".block5",[79,40719,244],{"class":243},[79,40721,40123],{"class":239},[79,40723,40724,40726,40728,40730,40732,40734,40736,40738,40740,40742,40744,40746,40748,40750,40752,40754,40756],{"class":81,"line":815},[79,40725,40128],{"class":239},[79,40727,32980],{"class":7412},[79,40729,244],{"class":243},[79,40731,40571],{"class":96},[79,40733,2752],{"class":239},[79,40735,32989],{"class":7412},[79,40737,244],{"class":243},[79,40739,40571],{"class":96},[79,40741,2752],{"class":239},[79,40743,32998],{"class":7412},[79,40745,244],{"class":243},[79,40747,1188],{"class":96},[79,40749,2752],{"class":239},[79,40751,33007],{"class":7412},[79,40753,244],{"class":243},[79,40755,1072],{"class":96},[79,40757,40161],{"class":239},[79,40759,40760],{"class":81,"line":828},[79,40761,40166],{"class":239},[79,40763,40764,40766,40768,40770,40772,40774,40776,40778,40780,40782,40784,40786,40788,40790,40792,40794,40796],{"class":81,"line":842},[79,40765,40128],{"class":239},[79,40767,32980],{"class":7412},[79,40769,244],{"class":243},[79,40771,40571],{"class":96},[79,40773,2752],{"class":239},[79,40775,32989],{"class":7412},[79,40777,244],{"class":243},[79,40779,40571],{"class":96},[79,40781,2752],{"class":239},[79,40783,32998],{"class":7412},[79,40785,244],{"class":243},[79,40787,1188],{"class":96},[79,40789,2752],{"class":239},[79,40791,33007],{"class":7412},[79,40793,244],{"class":243},[79,40795,1072],{"class":96},[79,40797,40161],{"class":239},[79,40799,40800],{"class":81,"line":859},[79,40801,40166],{"class":239},[79,40803,40804,40806,40808,40810,40812,40814,40816,40818,40820,40822,40824,40826,40828,40830,40832,40834,40836],{"class":81,"line":878},[79,40805,40128],{"class":239},[79,40807,32980],{"class":7412},[79,40809,244],{"class":243},[79,40811,40571],{"class":96},[79,40813,2752],{"class":239},[79,40815,32989],{"class":7412},[79,40817,244],{"class":243},[79,40819,40571],{"class":96},[79,40821,2752],{"class":239},[79,40823,32998],{"class":7412},[79,40825,244],{"class":243},[79,40827,1188],{"class":96},[79,40829,2752],{"class":239},[79,40831,33007],{"class":7412},[79,40833,244],{"class":243},[79,40835,1072],{"class":96},[79,40837,40161],{"class":239},[79,40839,40840],{"class":81,"line":883},[79,40841,40166],{"class":239},[79,40843,40844,40846,40848,40850,40852,40854,40856,40858,40860,40862,40864,40866,40868],{"class":81,"line":888},[79,40845,40211],{"class":239},[79,40847,32998],{"class":7412},[79,40849,244],{"class":243},[79,40851,1049],{"class":96},[79,40853,2752],{"class":239},[79,40855,33053],{"class":7412},[79,40857,244],{"class":243},[79,40859,1049],{"class":96},[79,40861,2752],{"class":239},[79,40863,33007],{"class":7412},[79,40865,244],{"class":243},[79,40867,1030],{"class":96},[79,40869,253],{"class":239},[79,40871,40872],{"class":81,"line":904},[79,40873,40240],{"class":239},[79,40875,40876],{"class":81,"line":919},[79,40877,40878],{"class":2440},"        # 全连接层\n",[79,40880,40881,40883,40886,40888],{"class":81,"line":930},[79,40882,32969],{"class":96},[79,40884,40885],{"class":239},".block6",[79,40887,244],{"class":243},[79,40889,40123],{"class":239},[79,40891,40892],{"class":81,"line":941},[79,40893,40894],{"class":2440},"            # 平展操作\n",[79,40896,40897],{"class":81,"line":946},[79,40898,40899],{"class":2440},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[79,40901,40902],{"class":81,"line":969},[79,40903,40904],{"class":239},"            nn.Flatten(),\n",[79,40906,40907,40910,40912,40914,40916,40918,40920,40922,40924],{"class":81,"line":975},[79,40908,40909],{"class":239},"            nn.Linear(",[79,40911,2743],{"class":96},[79,40913,2829],{"class":243},[79,40915,2743],{"class":96},[79,40917,2829],{"class":243},[79,40919,40571],{"class":96},[79,40921,2752],{"class":239},[79,40923,36984],{"class":96},[79,40925,40161],{"class":239},[79,40927,40928],{"class":81,"line":989},[79,40929,40166],{"class":239},[79,40931,40932,40934,40936,40938,40940],{"class":81,"line":1003},[79,40933,40909],{"class":239},[79,40935,36984],{"class":96},[79,40937,2752],{"class":239},[79,40939,34186],{"class":96},[79,40941,40161],{"class":239},[79,40943,40944],{"class":81,"line":1019},[79,40945,40166],{"class":239},[79,40947,40948,40950,40952,40954,40956],{"class":81,"line":1024},[79,40949,40909],{"class":239},[79,40951,34186],{"class":96},[79,40953,2752],{"class":239},[79,40955,2820],{"class":96},[79,40957,253],{"class":239},[79,40959,40960],{"class":81,"line":1067},[79,40961,40240],{"class":239},[79,40963,40964],{"class":81,"line":1101},[79,40965,454],{"emptyLinePlaceholder":453},[79,40967,40968],{"class":81,"line":1106},[79,40969,40970],{"class":2440},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[79,40972,40973],{"class":81,"line":1112},[79,40974,40975],{"class":2440},"        # 循环遍历模型\n",[79,40977,40978,40980,40983,40985,40988],{"class":81,"line":1124},[79,40979,5606],{"class":243},[79,40981,40982],{"class":239}," m ",[79,40984,955],{"class":243},[79,40986,40987],{"class":96}," self",[79,40989,40990],{"class":239},".modules():\n",[79,40992,40993],{"class":81,"line":1129},[79,40994,40995],{"class":2440},"            # print(m)\n",[79,40997,40998,41000,41003],{"class":81,"line":1150},[79,40999,6841],{"class":243},[79,41001,41002],{"class":96}," isinstance",[79,41004,41005],{"class":239},"(m,nn.Conv2d):\n",[79,41007,41008],{"class":81,"line":1161},[79,41009,41010],{"class":2440},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[79,41012,41013,41016,41019,41021,41024],{"class":81,"line":1175},[79,41014,41015],{"class":239},"                nn.init.kaiming_normal_(m.weight,",[79,41017,41018],{"class":7412},"nonlinearity",[79,41020,244],{"class":243},[79,41022,41023],{"class":89},"'relu'",[79,41025,253],{"class":239},[79,41027,41028],{"class":81,"line":1194},[79,41029,41030],{"class":2440},"                # 判断b参数是否存在\n",[79,41032,41033,41036,41039,41042,41045,41048],{"class":81,"line":1211},[79,41034,41035],{"class":243},"                if",[79,41037,41038],{"class":239}," m.bias ",[79,41040,41041],{"class":243},"is",[79,41043,41044],{"class":243}," not",[79,41046,41047],{"class":96}," None",[79,41049,673],{"class":239},[79,41051,41052],{"class":81,"line":1228},[79,41053,41054],{"class":2440},"                    # 如果参数不存在的化初始化b=0\n",[79,41056,41057,41060,41062],{"class":81,"line":1246},[79,41058,41059],{"class":239},"                    nn.init.constant_(m.bias,",[79,41061,1030],{"class":96},[79,41063,253],{"class":239},[79,41065,41066],{"class":81,"line":1251},[79,41067,41068],{"class":2440},"            # 全连接层初始化\n",[79,41070,41071,41074,41076],{"class":81,"line":1274},[79,41072,41073],{"class":243},"            elif",[79,41075,41002],{"class":96},[79,41077,41078],{"class":239},"(m,nn.Linear):\n",[79,41080,41081],{"class":81,"line":1296},[79,41082,41083],{"class":2440},"                # 这个初始化方法是利用的是正太分布的方式\n",[79,41085,41086],{"class":81,"line":1316},[79,41087,41088],{"class":2440},"                # 均值为0，方差为0.01\n",[79,41090,41091,41094,41096,41098,41101],{"class":81,"line":1321},[79,41092,41093],{"class":239},"                nn.init.normal_(m.weight,",[79,41095,1030],{"class":96},[79,41097,2752],{"class":239},[79,41099,41100],{"class":96},"0.01",[79,41102,253],{"class":239},[79,41104,41105],{"class":81,"line":1326},[79,41106,41107],{"class":2440},"                # 初始化b参数\n",[79,41109,41110,41112,41114,41116,41118,41120],{"class":81,"line":1342},[79,41111,41035],{"class":243},[79,41113,41038],{"class":239},[79,41115,41041],{"class":243},[79,41117,41044],{"class":243},[79,41119,41047],{"class":96},[79,41121,673],{"class":239},[79,41123,41124,41126,41128],{"class":81,"line":18985},[79,41125,41059],{"class":239},[79,41127,1030],{"class":96},[79,41129,253],{"class":239},[79,41131,41132],{"class":81,"line":18990},[79,41133,454],{"emptyLinePlaceholder":453},[79,41135,41136],{"class":81,"line":18995},[79,41137,37279],{"class":2440},[79,41139,41140,41142,41144],{"class":81,"line":19009},[79,41141,32925],{"class":243},[79,41143,33217],{"class":85},[79,41145,33220],{"class":239},[79,41147,41148,41150,41152,41154],{"class":81,"line":19021},[79,41149,33225],{"class":239},[79,41151,244],{"class":243},[79,41153,32947],{"class":96},[79,41155,41156],{"class":239},".block1(x)\n",[79,41158,41159,41161,41163,41165],{"class":81,"line":19026},[79,41160,33225],{"class":239},[79,41162,244],{"class":243},[79,41164,32947],{"class":96},[79,41166,41167],{"class":239},".block2(x)\n",[79,41169,41170,41172,41174,41176],{"class":81,"line":19039},[79,41171,33225],{"class":239},[79,41173,244],{"class":243},[79,41175,32947],{"class":96},[79,41177,41178],{"class":239},".block3(x)\n",[79,41180,41181,41183,41185,41187],{"class":81,"line":19044},[79,41182,33225],{"class":239},[79,41184,244],{"class":243},[79,41186,32947],{"class":96},[79,41188,41189],{"class":239},".block4(x)\n",[79,41191,41192,41194,41196,41198],{"class":81,"line":19049},[79,41193,33225],{"class":239},[79,41195,244],{"class":243},[79,41197,32947],{"class":96},[79,41199,41200],{"class":239},".block5(x)\n",[79,41202,41203,41205,41207,41209],{"class":81,"line":19054},[79,41204,33225],{"class":239},[79,41206,244],{"class":243},[79,41208,32947],{"class":96},[79,41210,41211],{"class":239},".block6(x)\n",[79,41213,41214,41216],{"class":81,"line":19067},[79,41215,16913],{"class":243},[79,41217,33333],{"class":239},[79,41219,41220],{"class":81,"line":19072},[79,41221,454],{"emptyLinePlaceholder":453},[79,41223,41224],{"class":81,"line":34748},[79,41225,41226],{"class":2440},"# 验证模型\n",[79,41228,41229,41231,41233,41235,41238],{"class":81,"line":34754},[79,41230,1329],{"class":243},[79,41232,1332],{"class":96},[79,41234,5155],{"class":243},[79,41236,41237],{"class":89},"'__main__'",[79,41239,673],{"class":239},[79,41241,41242,41244,41246,41248,41250,41252,41254,41256,41258],{"class":81,"line":34760},[79,41243,33360],{"class":239},[79,41245,244],{"class":243},[79,41247,32577],{"class":239},[79,41249,33367],{"class":89},[79,41251,3929],{"class":243},[79,41253,33372],{"class":239},[79,41255,3926],{"class":243},[79,41257,32602],{"class":89},[79,41259,253],{"class":239},[79,41261,41262,41264],{"class":81,"line":34766},[79,41263,1254],{"class":96},[79,41265,32611],{"class":239},[79,41267,41268,41270,41272],{"class":81,"line":34772},[79,41269,33412],{"class":239},[79,41271,244],{"class":243},[79,41273,41274],{"class":239},"VGG16().to(device)\n",[79,41276,41277,41279,41281,41283,41285,41287,41289,41291],{"class":81,"line":34783},[79,41278,1254],{"class":96},[79,41280,33424],{"class":239},[79,41282,1072],{"class":96},[79,41284,2752],{"class":239},[79,41286,33620],{"class":96},[79,41288,2752],{"class":239},[79,41290,33620],{"class":96},[79,41292,33437],{"class":239},[26,41294,41295],{"start":167},[29,41296,41297],{},"训练代码",[19,41299,41300],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,41302,41303],{},"解决方式:",[19,41305,41306],{},"①权重初始化",[51,41308,41310],{"className":230,"code":41309,"language":232,"meta":57,"style":57},"# 权重初始化,保证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",[59,41311,41312,41317,41322,41334,41339,41347,41352,41365,41370,41384,41389,41398,41403,41412,41417,41422,41435,41440,41454],{"__ignoreMap":57},[79,41313,41314],{"class":81,"line":82},[79,41315,41316],{"class":2440},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[79,41318,41319],{"class":81,"line":167},[79,41320,41321],{"class":2440},"# 循环遍历模型\n",[79,41323,41324,41326,41328,41330,41332],{"class":81,"line":178},[79,41325,1874],{"class":243},[79,41327,40982],{"class":239},[79,41329,955],{"class":243},[79,41331,40987],{"class":96},[79,41333,40990],{"class":239},[79,41335,41336],{"class":81,"line":457},[79,41337,41338],{"class":2440},"    # print(m)\n",[79,41340,41341,41343,41345],{"class":81,"line":462},[79,41342,662],{"class":243},[79,41344,41002],{"class":96},[79,41346,41005],{"class":239},[79,41348,41349],{"class":81,"line":474},[79,41350,41351],{"class":2440},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[79,41353,41354,41357,41359,41361,41363],{"class":81,"line":480},[79,41355,41356],{"class":239},"        nn.init.kaiming_normal_(m.weight,",[79,41358,41018],{"class":7412},[79,41360,244],{"class":243},[79,41362,41023],{"class":89},[79,41364,253],{"class":239},[79,41366,41367],{"class":81,"line":486},[79,41368,41369],{"class":2440},"        # 判断b参数是否存在\n",[79,41371,41372,41374,41376,41378,41380,41382],{"class":81,"line":491},[79,41373,1132],{"class":243},[79,41375,41038],{"class":239},[79,41377,41041],{"class":243},[79,41379,41044],{"class":243},[79,41381,41047],{"class":96},[79,41383,673],{"class":239},[79,41385,41386],{"class":81,"line":497},[79,41387,41388],{"class":2440},"            # 如果参数不存在的化初始化b=0\n",[79,41390,41391,41394,41396],{"class":81,"line":503},[79,41392,41393],{"class":239},"            nn.init.constant_(m.bias,",[79,41395,1030],{"class":96},[79,41397,253],{"class":239},[79,41399,41400],{"class":81,"line":509},[79,41401,41402],{"class":2440},"    # 全连接层初始化\n",[79,41404,41405,41408,41410],{"class":81,"line":514},[79,41406,41407],{"class":243},"    elif",[79,41409,41002],{"class":96},[79,41411,41078],{"class":239},[79,41413,41414],{"class":81,"line":520},[79,41415,41416],{"class":2440},"        # 这个初始化方法是利用的是正太分布的方式\n",[79,41418,41419],{"class":81,"line":526},[79,41420,41421],{"class":2440},"        # 均值为0，方差为0.01\n",[79,41423,41424,41427,41429,41431,41433],{"class":81,"line":532},[79,41425,41426],{"class":239},"        nn.init.normal_(m.weight,",[79,41428,1030],{"class":96},[79,41430,2752],{"class":239},[79,41432,41100],{"class":96},[79,41434,253],{"class":239},[79,41436,41437],{"class":81,"line":537},[79,41438,41439],{"class":2440},"        # 初始化b参数\n",[79,41441,41442,41444,41446,41448,41450,41452],{"class":81,"line":543},[79,41443,1132],{"class":243},[79,41445,41038],{"class":239},[79,41447,41041],{"class":243},[79,41449,41044],{"class":243},[79,41451,41047],{"class":96},[79,41453,673],{"class":239},[79,41455,41456,41458,41460],{"class":81,"line":549},[79,41457,41393],{"class":239},[79,41459,1030],{"class":96},[79,41461,253],{"class":239},[19,41463,41464],{},"②尽可能地增加批次",[19,41466,41467],{},"训练完整代码：",[51,41469,41470],{"className":230,"code":40013,"language":232,"meta":57,"style":57},[59,41471,41472,41478,41488,41498,41508,41512,41528,41536,41554,41558,41562,41572,41608,41612,41648,41652,41680,41684,41688,41698,41734,41738,41774,41778,41806,41810,41814,41824,41860,41864,41900,41904,41940,41944,41972,41976,41980,41990,42026,42030,42066,42070,42106,42110,42138,42142,42146,42156,42192,42196,42232,42236,42272,42276,42304,42308,42312,42322,42326,42330,42334,42354,42358,42370,42374,42386,42390,42394,42398,42402,42414,42418,42426,42430,42442,42446,42460,42464,42472,42476,42484,42488,42492,42504,42508,42522,42530,42534,42538,42546,42556,42566,42576,42586,42596,42606,42612,42616,42620,42632,42652,42658,42666],{"__ignoreMap":57},[79,41473,41474,41476],{"class":81,"line":82},[79,41475,432],{"class":243},[79,41477,32521],{"class":239},[79,41479,41480,41482,41484,41486],{"class":81,"line":167},[79,41481,32862],{"class":243},[79,41483,40028],{"class":239},[79,41485,432],{"class":243},[79,41487,40033],{"class":239},[79,41489,41490,41492,41494,41496],{"class":81,"line":178},[79,41491,32862],{"class":243},[79,41493,32865],{"class":239},[79,41495,432],{"class":243},[79,41497,32870],{"class":239},[79,41499,41500,41502,41504,41506],{"class":81,"line":457},[79,41501,32862],{"class":243},[79,41503,32882],{"class":239},[79,41505,432],{"class":243},[79,41507,32887],{"class":239},[79,41509,41510],{"class":81,"line":462},[79,41511,454],{"emptyLinePlaceholder":453},[79,41513,41514,41516,41518,41520,41522,41524,41526],{"class":81,"line":474},[79,41515,16855],{"class":243},[79,41517,40064],{"class":85},[79,41519,685],{"class":239},[79,41521,32903],{"class":85},[79,41523,2931],{"class":239},[79,41525,32908],{"class":85},[79,41527,966],{"class":239},[79,41529,41530,41532,41534],{"class":81,"line":480},[79,41531,32925],{"class":243},[79,41533,32928],{"class":96},[79,41535,32931],{"class":239},[79,41537,41538,41540,41542,41544,41546,41548,41550,41552],{"class":81,"line":486},[79,41539,32941],{"class":96},[79,41541,685],{"class":239},[79,41543,40091],{"class":96},[79,41545,1060],{"class":239},[79,41547,32947],{"class":96},[79,41549,32950],{"class":239},[79,41551,32953],{"class":96},[79,41553,4191],{"class":239},[79,41555,41556],{"class":81,"line":491},[79,41557,40106],{"class":2440},[79,41559,41560],{"class":81,"line":497},[79,41561,40111],{"class":2440},[79,41563,41564,41566,41568,41570],{"class":81,"line":503},[79,41565,32969],{"class":96},[79,41567,40118],{"class":239},[79,41569,244],{"class":243},[79,41571,40123],{"class":239},[79,41573,41574,41576,41578,41580,41582,41584,41586,41588,41590,41592,41594,41596,41598,41600,41602,41604,41606],{"class":81,"line":509},[79,41575,40128],{"class":239},[79,41577,32980],{"class":7412},[79,41579,244],{"class":243},[79,41581,1072],{"class":96},[79,41583,2752],{"class":239},[79,41585,32989],{"class":7412},[79,41587,244],{"class":243},[79,41589,2581],{"class":96},[79,41591,2752],{"class":239},[79,41593,32998],{"class":7412},[79,41595,244],{"class":243},[79,41597,1188],{"class":96},[79,41599,2752],{"class":239},[79,41601,33007],{"class":7412},[79,41603,244],{"class":243},[79,41605,1072],{"class":96},[79,41607,40161],{"class":239},[79,41609,41610],{"class":81,"line":514},[79,41611,40166],{"class":239},[79,41613,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644,41646],{"class":81,"line":520},[79,41615,40128],{"class":239},[79,41617,32980],{"class":7412},[79,41619,244],{"class":243},[79,41621,2581],{"class":96},[79,41623,2752],{"class":239},[79,41625,32989],{"class":7412},[79,41627,244],{"class":243},[79,41629,2581],{"class":96},[79,41631,2752],{"class":239},[79,41633,32998],{"class":7412},[79,41635,244],{"class":243},[79,41637,1188],{"class":96},[79,41639,2752],{"class":239},[79,41641,33007],{"class":7412},[79,41643,244],{"class":243},[79,41645,1072],{"class":96},[79,41647,40161],{"class":239},[79,41649,41650],{"class":81,"line":526},[79,41651,40166],{"class":239},[79,41653,41654,41656,41658,41660,41662,41664,41666,41668,41670,41672,41674,41676,41678],{"class":81,"line":532},[79,41655,40211],{"class":239},[79,41657,32998],{"class":7412},[79,41659,244],{"class":243},[79,41661,1049],{"class":96},[79,41663,2752],{"class":239},[79,41665,33053],{"class":7412},[79,41667,244],{"class":243},[79,41669,1049],{"class":96},[79,41671,2752],{"class":239},[79,41673,33007],{"class":7412},[79,41675,244],{"class":243},[79,41677,1030],{"class":96},[79,41679,253],{"class":239},[79,41681,41682],{"class":81,"line":537},[79,41683,40240],{"class":239},[79,41685,41686],{"class":81,"line":543},[79,41687,40245],{"class":2440},[79,41689,41690,41692,41694,41696],{"class":81,"line":549},[79,41691,32969],{"class":96},[79,41693,40252],{"class":239},[79,41695,244],{"class":243},[79,41697,40123],{"class":239},[79,41699,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732],{"class":81,"line":555},[79,41701,40128],{"class":239},[79,41703,32980],{"class":7412},[79,41705,244],{"class":243},[79,41707,2581],{"class":96},[79,41709,2752],{"class":239},[79,41711,32989],{"class":7412},[79,41713,244],{"class":243},[79,41715,34186],{"class":96},[79,41717,2752],{"class":239},[79,41719,32998],{"class":7412},[79,41721,244],{"class":243},[79,41723,1188],{"class":96},[79,41725,2752],{"class":239},[79,41727,33007],{"class":7412},[79,41729,244],{"class":243},[79,41731,1072],{"class":96},[79,41733,40161],{"class":239},[79,41735,41736],{"class":81,"line":561},[79,41737,40166],{"class":239},[79,41739,41740,41742,41744,41746,41748,41750,41752,41754,41756,41758,41760,41762,41764,41766,41768,41770,41772],{"class":81,"line":567},[79,41741,40128],{"class":239},[79,41743,32980],{"class":7412},[79,41745,244],{"class":243},[79,41747,34186],{"class":96},[79,41749,2752],{"class":239},[79,41751,32989],{"class":7412},[79,41753,244],{"class":243},[79,41755,34186],{"class":96},[79,41757,2752],{"class":239},[79,41759,32998],{"class":7412},[79,41761,244],{"class":243},[79,41763,1188],{"class":96},[79,41765,2752],{"class":239},[79,41767,33007],{"class":7412},[79,41769,244],{"class":243},[79,41771,1072],{"class":96},[79,41773,40161],{"class":239},[79,41775,41776],{"class":81,"line":573},[79,41777,40166],{"class":239},[79,41779,41780,41782,41784,41786,41788,41790,41792,41794,41796,41798,41800,41802,41804],{"class":81,"line":579},[79,41781,40211],{"class":239},[79,41783,32998],{"class":7412},[79,41785,244],{"class":243},[79,41787,1049],{"class":96},[79,41789,2752],{"class":239},[79,41791,33053],{"class":7412},[79,41793,244],{"class":243},[79,41795,1049],{"class":96},[79,41797,2752],{"class":239},[79,41799,33007],{"class":7412},[79,41801,244],{"class":243},[79,41803,1030],{"class":96},[79,41805,253],{"class":239},[79,41807,41808],{"class":81,"line":584},[79,41809,40240],{"class":239},[79,41811,41812],{"class":81,"line":590},[79,41813,40373],{"class":2440},[79,41815,41816,41818,41820,41822],{"class":81,"line":596},[79,41817,32969],{"class":96},[79,41819,40380],{"class":239},[79,41821,244],{"class":243},[79,41823,40123],{"class":239},[79,41825,41826,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854,41856,41858],{"class":81,"line":602},[79,41827,40128],{"class":239},[79,41829,32980],{"class":7412},[79,41831,244],{"class":243},[79,41833,34186],{"class":96},[79,41835,2752],{"class":239},[79,41837,32989],{"class":7412},[79,41839,244],{"class":243},[79,41841,36984],{"class":96},[79,41843,2752],{"class":239},[79,41845,32998],{"class":7412},[79,41847,244],{"class":243},[79,41849,1188],{"class":96},[79,41851,2752],{"class":239},[79,41853,33007],{"class":7412},[79,41855,244],{"class":243},[79,41857,1072],{"class":96},[79,41859,40161],{"class":239},[79,41861,41862],{"class":81,"line":608},[79,41863,40166],{"class":239},[79,41865,41866,41868,41870,41872,41874,41876,41878,41880,41882,41884,41886,41888,41890,41892,41894,41896,41898],{"class":81,"line":614},[79,41867,40128],{"class":239},[79,41869,32980],{"class":7412},[79,41871,244],{"class":243},[79,41873,36984],{"class":96},[79,41875,2752],{"class":239},[79,41877,32989],{"class":7412},[79,41879,244],{"class":243},[79,41881,36984],{"class":96},[79,41883,2752],{"class":239},[79,41885,32998],{"class":7412},[79,41887,244],{"class":243},[79,41889,1188],{"class":96},[79,41891,2752],{"class":239},[79,41893,33007],{"class":7412},[79,41895,244],{"class":243},[79,41897,1072],{"class":96},[79,41899,40161],{"class":239},[79,41901,41902],{"class":81,"line":620},[79,41903,40166],{"class":239},[79,41905,41906,41908,41910,41912,41914,41916,41918,41920,41922,41924,41926,41928,41930,41932,41934,41936,41938],{"class":81,"line":625},[79,41907,40128],{"class":239},[79,41909,32980],{"class":7412},[79,41911,244],{"class":243},[79,41913,36984],{"class":96},[79,41915,2752],{"class":239},[79,41917,32989],{"class":7412},[79,41919,244],{"class":243},[79,41921,36984],{"class":96},[79,41923,2752],{"class":239},[79,41925,32998],{"class":7412},[79,41927,244],{"class":243},[79,41929,1188],{"class":96},[79,41931,2752],{"class":239},[79,41933,33007],{"class":7412},[79,41935,244],{"class":243},[79,41937,1072],{"class":96},[79,41939,40161],{"class":239},[79,41941,41942],{"class":81,"line":630},[79,41943,40166],{"class":239},[79,41945,41946,41948,41950,41952,41954,41956,41958,41960,41962,41964,41966,41968,41970],{"class":81,"line":648},[79,41947,40211],{"class":239},[79,41949,32998],{"class":7412},[79,41951,244],{"class":243},[79,41953,1049],{"class":96},[79,41955,2752],{"class":239},[79,41957,33053],{"class":7412},[79,41959,244],{"class":243},[79,41961,1049],{"class":96},[79,41963,2752],{"class":239},[79,41965,33007],{"class":7412},[79,41967,244],{"class":243},[79,41969,1030],{"class":96},[79,41971,253],{"class":239},[79,41973,41974],{"class":81,"line":659},[79,41975,40240],{"class":239},[79,41977,41978],{"class":81,"line":676},[79,41979,40541],{"class":2440},[79,41981,41982,41984,41986,41988],{"class":81,"line":708},[79,41983,32969],{"class":96},[79,41985,40548],{"class":239},[79,41987,244],{"class":243},[79,41989,40123],{"class":239},[79,41991,41992,41994,41996,41998,42000,42002,42004,42006,42008,42010,42012,42014,42016,42018,42020,42022,42024],{"class":81,"line":717},[79,41993,40128],{"class":239},[79,41995,32980],{"class":7412},[79,41997,244],{"class":243},[79,41999,36984],{"class":96},[79,42001,2752],{"class":239},[79,42003,32989],{"class":7412},[79,42005,244],{"class":243},[79,42007,40571],{"class":96},[79,42009,2752],{"class":239},[79,42011,32998],{"class":7412},[79,42013,244],{"class":243},[79,42015,1188],{"class":96},[79,42017,2752],{"class":239},[79,42019,33007],{"class":7412},[79,42021,244],{"class":243},[79,42023,1072],{"class":96},[79,42025,40161],{"class":239},[79,42027,42028],{"class":81,"line":722},[79,42029,40166],{"class":239},[79,42031,42032,42034,42036,42038,42040,42042,42044,42046,42048,42050,42052,42054,42056,42058,42060,42062,42064],{"class":81,"line":727},[79,42033,40128],{"class":239},[79,42035,32980],{"class":7412},[79,42037,244],{"class":243},[79,42039,40571],{"class":96},[79,42041,2752],{"class":239},[79,42043,32989],{"class":7412},[79,42045,244],{"class":243},[79,42047,40571],{"class":96},[79,42049,2752],{"class":239},[79,42051,32998],{"class":7412},[79,42053,244],{"class":243},[79,42055,1188],{"class":96},[79,42057,2752],{"class":239},[79,42059,33007],{"class":7412},[79,42061,244],{"class":243},[79,42063,1072],{"class":96},[79,42065,40161],{"class":239},[79,42067,42068],{"class":81,"line":738},[79,42069,40166],{"class":239},[79,42071,42072,42074,42076,42078,42080,42082,42084,42086,42088,42090,42092,42094,42096,42098,42100,42102,42104],{"class":81,"line":753},[79,42073,40128],{"class":239},[79,42075,32980],{"class":7412},[79,42077,244],{"class":243},[79,42079,40571],{"class":96},[79,42081,2752],{"class":239},[79,42083,32989],{"class":7412},[79,42085,244],{"class":243},[79,42087,40571],{"class":96},[79,42089,2752],{"class":239},[79,42091,32998],{"class":7412},[79,42093,244],{"class":243},[79,42095,1188],{"class":96},[79,42097,2752],{"class":239},[79,42099,33007],{"class":7412},[79,42101,244],{"class":243},[79,42103,1072],{"class":96},[79,42105,40161],{"class":239},[79,42107,42108],{"class":81,"line":768},[79,42109,40166],{"class":239},[79,42111,42112,42114,42116,42118,42120,42122,42124,42126,42128,42130,42132,42134,42136],{"class":81,"line":776},[79,42113,40211],{"class":239},[79,42115,32998],{"class":7412},[79,42117,244],{"class":243},[79,42119,1049],{"class":96},[79,42121,2752],{"class":239},[79,42123,33053],{"class":7412},[79,42125,244],{"class":243},[79,42127,1049],{"class":96},[79,42129,2752],{"class":239},[79,42131,33007],{"class":7412},[79,42133,244],{"class":243},[79,42135,1030],{"class":96},[79,42137,253],{"class":239},[79,42139,42140],{"class":81,"line":781},[79,42141,40240],{"class":239},[79,42143,42144],{"class":81,"line":786},[79,42145,40710],{"class":2440},[79,42147,42148,42150,42152,42154],{"class":81,"line":802},[79,42149,32969],{"class":96},[79,42151,40717],{"class":239},[79,42153,244],{"class":243},[79,42155,40123],{"class":239},[79,42157,42158,42160,42162,42164,42166,42168,42170,42172,42174,42176,42178,42180,42182,42184,42186,42188,42190],{"class":81,"line":815},[79,42159,40128],{"class":239},[79,42161,32980],{"class":7412},[79,42163,244],{"class":243},[79,42165,40571],{"class":96},[79,42167,2752],{"class":239},[79,42169,32989],{"class":7412},[79,42171,244],{"class":243},[79,42173,40571],{"class":96},[79,42175,2752],{"class":239},[79,42177,32998],{"class":7412},[79,42179,244],{"class":243},[79,42181,1188],{"class":96},[79,42183,2752],{"class":239},[79,42185,33007],{"class":7412},[79,42187,244],{"class":243},[79,42189,1072],{"class":96},[79,42191,40161],{"class":239},[79,42193,42194],{"class":81,"line":828},[79,42195,40166],{"class":239},[79,42197,42198,42200,42202,42204,42206,42208,42210,42212,42214,42216,42218,42220,42222,42224,42226,42228,42230],{"class":81,"line":842},[79,42199,40128],{"class":239},[79,42201,32980],{"class":7412},[79,42203,244],{"class":243},[79,42205,40571],{"class":96},[79,42207,2752],{"class":239},[79,42209,32989],{"class":7412},[79,42211,244],{"class":243},[79,42213,40571],{"class":96},[79,42215,2752],{"class":239},[79,42217,32998],{"class":7412},[79,42219,244],{"class":243},[79,42221,1188],{"class":96},[79,42223,2752],{"class":239},[79,42225,33007],{"class":7412},[79,42227,244],{"class":243},[79,42229,1072],{"class":96},[79,42231,40161],{"class":239},[79,42233,42234],{"class":81,"line":859},[79,42235,40166],{"class":239},[79,42237,42238,42240,42242,42244,42246,42248,42250,42252,42254,42256,42258,42260,42262,42264,42266,42268,42270],{"class":81,"line":878},[79,42239,40128],{"class":239},[79,42241,32980],{"class":7412},[79,42243,244],{"class":243},[79,42245,40571],{"class":96},[79,42247,2752],{"class":239},[79,42249,32989],{"class":7412},[79,42251,244],{"class":243},[79,42253,40571],{"class":96},[79,42255,2752],{"class":239},[79,42257,32998],{"class":7412},[79,42259,244],{"class":243},[79,42261,1188],{"class":96},[79,42263,2752],{"class":239},[79,42265,33007],{"class":7412},[79,42267,244],{"class":243},[79,42269,1072],{"class":96},[79,42271,40161],{"class":239},[79,42273,42274],{"class":81,"line":883},[79,42275,40166],{"class":239},[79,42277,42278,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298,42300,42302],{"class":81,"line":888},[79,42279,40211],{"class":239},[79,42281,32998],{"class":7412},[79,42283,244],{"class":243},[79,42285,1049],{"class":96},[79,42287,2752],{"class":239},[79,42289,33053],{"class":7412},[79,42291,244],{"class":243},[79,42293,1049],{"class":96},[79,42295,2752],{"class":239},[79,42297,33007],{"class":7412},[79,42299,244],{"class":243},[79,42301,1030],{"class":96},[79,42303,253],{"class":239},[79,42305,42306],{"class":81,"line":904},[79,42307,40240],{"class":239},[79,42309,42310],{"class":81,"line":919},[79,42311,40878],{"class":2440},[79,42313,42314,42316,42318,42320],{"class":81,"line":930},[79,42315,32969],{"class":96},[79,42317,40885],{"class":239},[79,42319,244],{"class":243},[79,42321,40123],{"class":239},[79,42323,42324],{"class":81,"line":941},[79,42325,40894],{"class":2440},[79,42327,42328],{"class":81,"line":946},[79,42329,40899],{"class":2440},[79,42331,42332],{"class":81,"line":969},[79,42333,40904],{"class":239},[79,42335,42336,42338,42340,42342,42344,42346,42348,42350,42352],{"class":81,"line":975},[79,42337,40909],{"class":239},[79,42339,2743],{"class":96},[79,42341,2829],{"class":243},[79,42343,2743],{"class":96},[79,42345,2829],{"class":243},[79,42347,40571],{"class":96},[79,42349,2752],{"class":239},[79,42351,36984],{"class":96},[79,42353,40161],{"class":239},[79,42355,42356],{"class":81,"line":989},[79,42357,40166],{"class":239},[79,42359,42360,42362,42364,42366,42368],{"class":81,"line":1003},[79,42361,40909],{"class":239},[79,42363,36984],{"class":96},[79,42365,2752],{"class":239},[79,42367,34186],{"class":96},[79,42369,40161],{"class":239},[79,42371,42372],{"class":81,"line":1019},[79,42373,40166],{"class":239},[79,42375,42376,42378,42380,42382,42384],{"class":81,"line":1024},[79,42377,40909],{"class":239},[79,42379,34186],{"class":96},[79,42381,2752],{"class":239},[79,42383,2820],{"class":96},[79,42385,253],{"class":239},[79,42387,42388],{"class":81,"line":1067},[79,42389,40240],{"class":239},[79,42391,42392],{"class":81,"line":1101},[79,42393,454],{"emptyLinePlaceholder":453},[79,42395,42396],{"class":81,"line":1106},[79,42397,40970],{"class":2440},[79,42399,42400],{"class":81,"line":1112},[79,42401,40975],{"class":2440},[79,42403,42404,42406,42408,42410,42412],{"class":81,"line":1124},[79,42405,5606],{"class":243},[79,42407,40982],{"class":239},[79,42409,955],{"class":243},[79,42411,40987],{"class":96},[79,42413,40990],{"class":239},[79,42415,42416],{"class":81,"line":1129},[79,42417,40995],{"class":2440},[79,42419,42420,42422,42424],{"class":81,"line":1150},[79,42421,6841],{"class":243},[79,42423,41002],{"class":96},[79,42425,41005],{"class":239},[79,42427,42428],{"class":81,"line":1161},[79,42429,41010],{"class":2440},[79,42431,42432,42434,42436,42438,42440],{"class":81,"line":1175},[79,42433,41015],{"class":239},[79,42435,41018],{"class":7412},[79,42437,244],{"class":243},[79,42439,41023],{"class":89},[79,42441,253],{"class":239},[79,42443,42444],{"class":81,"line":1194},[79,42445,41030],{"class":2440},[79,42447,42448,42450,42452,42454,42456,42458],{"class":81,"line":1211},[79,42449,41035],{"class":243},[79,42451,41038],{"class":239},[79,42453,41041],{"class":243},[79,42455,41044],{"class":243},[79,42457,41047],{"class":96},[79,42459,673],{"class":239},[79,42461,42462],{"class":81,"line":1228},[79,42463,41054],{"class":2440},[79,42465,42466,42468,42470],{"class":81,"line":1246},[79,42467,41059],{"class":239},[79,42469,1030],{"class":96},[79,42471,253],{"class":239},[79,42473,42474],{"class":81,"line":1251},[79,42475,41068],{"class":2440},[79,42477,42478,42480,42482],{"class":81,"line":1274},[79,42479,41073],{"class":243},[79,42481,41002],{"class":96},[79,42483,41078],{"class":239},[79,42485,42486],{"class":81,"line":1296},[79,42487,41083],{"class":2440},[79,42489,42490],{"class":81,"line":1316},[79,42491,41088],{"class":2440},[79,42493,42494,42496,42498,42500,42502],{"class":81,"line":1321},[79,42495,41093],{"class":239},[79,42497,1030],{"class":96},[79,42499,2752],{"class":239},[79,42501,41100],{"class":96},[79,42503,253],{"class":239},[79,42505,42506],{"class":81,"line":1326},[79,42507,41107],{"class":2440},[79,42509,42510,42512,42514,42516,42518,42520],{"class":81,"line":1342},[79,42511,41035],{"class":243},[79,42513,41038],{"class":239},[79,42515,41041],{"class":243},[79,42517,41044],{"class":243},[79,42519,41047],{"class":96},[79,42521,673],{"class":239},[79,42523,42524,42526,42528],{"class":81,"line":18985},[79,42525,41059],{"class":239},[79,42527,1030],{"class":96},[79,42529,253],{"class":239},[79,42531,42532],{"class":81,"line":18990},[79,42533,454],{"emptyLinePlaceholder":453},[79,42535,42536],{"class":81,"line":18995},[79,42537,37279],{"class":2440},[79,42539,42540,42542,42544],{"class":81,"line":19009},[79,42541,32925],{"class":243},[79,42543,33217],{"class":85},[79,42545,33220],{"class":239},[79,42547,42548,42550,42552,42554],{"class":81,"line":19021},[79,42549,33225],{"class":239},[79,42551,244],{"class":243},[79,42553,32947],{"class":96},[79,42555,41156],{"class":239},[79,42557,42558,42560,42562,42564],{"class":81,"line":19026},[79,42559,33225],{"class":239},[79,42561,244],{"class":243},[79,42563,32947],{"class":96},[79,42565,41167],{"class":239},[79,42567,42568,42570,42572,42574],{"class":81,"line":19039},[79,42569,33225],{"class":239},[79,42571,244],{"class":243},[79,42573,32947],{"class":96},[79,42575,41178],{"class":239},[79,42577,42578,42580,42582,42584],{"class":81,"line":19044},[79,42579,33225],{"class":239},[79,42581,244],{"class":243},[79,42583,32947],{"class":96},[79,42585,41189],{"class":239},[79,42587,42588,42590,42592,42594],{"class":81,"line":19049},[79,42589,33225],{"class":239},[79,42591,244],{"class":243},[79,42593,32947],{"class":96},[79,42595,41200],{"class":239},[79,42597,42598,42600,42602,42604],{"class":81,"line":19054},[79,42599,33225],{"class":239},[79,42601,244],{"class":243},[79,42603,32947],{"class":96},[79,42605,41211],{"class":239},[79,42607,42608,42610],{"class":81,"line":19067},[79,42609,16913],{"class":243},[79,42611,33333],{"class":239},[79,42613,42614],{"class":81,"line":19072},[79,42615,454],{"emptyLinePlaceholder":453},[79,42617,42618],{"class":81,"line":34748},[79,42619,41226],{"class":2440},[79,42621,42622,42624,42626,42628,42630],{"class":81,"line":34754},[79,42623,1329],{"class":243},[79,42625,1332],{"class":96},[79,42627,5155],{"class":243},[79,42629,41237],{"class":89},[79,42631,673],{"class":239},[79,42633,42634,42636,42638,42640,42642,42644,42646,42648,42650],{"class":81,"line":34760},[79,42635,33360],{"class":239},[79,42637,244],{"class":243},[79,42639,32577],{"class":239},[79,42641,33367],{"class":89},[79,42643,3929],{"class":243},[79,42645,33372],{"class":239},[79,42647,3926],{"class":243},[79,42649,32602],{"class":89},[79,42651,253],{"class":239},[79,42653,42654,42656],{"class":81,"line":34766},[79,42655,1254],{"class":96},[79,42657,32611],{"class":239},[79,42659,42660,42662,42664],{"class":81,"line":34772},[79,42661,33412],{"class":239},[79,42663,244],{"class":243},[79,42665,41274],{"class":239},[79,42667,42668,42670,42672,42674,42676,42678,42680,42682],{"class":81,"line":34783},[79,42669,1254],{"class":96},[79,42671,33424],{"class":239},[79,42673,1072],{"class":96},[79,42675,2752],{"class":239},[79,42677,33620],{"class":96},[79,42679,2752],{"class":239},[79,42681,33620],{"class":96},[79,42683,33437],{"class":239},[26,42685,42686],{"start":178},[29,42687,42688],{},"测试代码",[51,42690,42692],{"className":230,"code":42691,"language":232,"meta":57,"style":57},"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",[59,42693,42694,42700,42710,42720,42724,42734,42745,42749,42753,42757,42765,42781,42791,42807,42817,42831,42835,42845,42855,42865,42871,42875,42879,42887,42891,42907,42915,42919,42923,42931,42939,42943,42947,42951,42955,42961,42965,42975,42983,42991,42995,42999,43003,43011,43015,43031,43035,43039,43043,43055,43059,43071,43075,43079,43091,43095,43105,43109,43113,43125,43129,43138,43142,43146,43154,43158,43166,43170,43174,43178,43182,43186,43202,43210,43214,43218,43266,43272,43276,43286,43294,43302,43306,43310,43314,43318,43326,43330,43346,43350,43358,43366],{"__ignoreMap":57},[79,42695,42696,42698],{"class":81,"line":82},[79,42697,432],{"class":243},[79,42699,32521],{"class":239},[79,42701,42702,42704,42706,42708],{"class":81,"line":167},[79,42703,432],{"class":243},[79,42705,33534],{"class":239},[79,42707,445],{"class":243},[79,42709,33539],{"class":239},[79,42711,42712,42714,42716,42718],{"class":81,"line":178},[79,42713,32862],{"class":243},[79,42715,33517],{"class":239},[79,42717,432],{"class":243},[79,42719,33522],{"class":239},[79,42721,42722],{"class":81,"line":457},[79,42723,36037],{"class":2440},[79,42725,42726,42728,42730,42732],{"class":81,"line":462},[79,42727,32862],{"class":243},[79,42729,33490],{"class":239},[79,42731,432],{"class":243},[79,42733,33495],{"class":239},[79,42735,42736,42738,42740,42742],{"class":81,"line":474},[79,42737,32862],{"class":243},[79,42739,34032],{"class":239},[79,42741,432],{"class":243},[79,42743,42744],{"class":96}," VGG16\n",[79,42746,42747],{"class":81,"line":480},[79,42748,454],{"emptyLinePlaceholder":453},[79,42750,42751],{"class":81,"line":486},[79,42752,454],{"emptyLinePlaceholder":453},[79,42754,42755],{"class":81,"line":491},[79,42756,36066],{"class":2440},[79,42758,42759,42761,42763],{"class":81,"line":497},[79,42760,633],{"class":243},[79,42762,36073],{"class":85},[79,42764,34070],{"class":239},[79,42766,42767,42769,42771,42773,42775,42777,42779],{"class":81,"line":503},[79,42768,36080],{"class":239},[79,42770,244],{"class":243},[79,42772,33574],{"class":239},[79,42774,33577],{"class":7412},[79,42776,244],{"class":243},[79,42778,33582],{"class":89},[79,42780,33585],{"class":239},[79,42782,42783,42785,42787,42789],{"class":81,"line":509},[79,42784,36097],{"class":7412},[79,42786,244],{"class":243},[79,42788,36102],{"class":96},[79,42790,33585],{"class":239},[79,42792,42793,42795,42797,42799,42801,42803,42805],{"class":81,"line":514},[79,42794,36109],{"class":7412},[79,42796,244],{"class":243},[79,42798,33612],{"class":239},[79,42800,33615],{"class":7412},[79,42802,244],{"class":243},[79,42804,33620],{"class":96},[79,42806,33623],{"class":239},[79,42808,42809,42811,42813,42815],{"class":81,"line":520},[79,42810,36126],{"class":7412},[79,42812,244],{"class":243},[79,42814,33595],{"class":96},[79,42816,253],{"class":239},[79,42818,42819,42821,42823,42825,42827,42829],{"class":81,"line":526},[79,42820,36137],{"class":239},[79,42822,244],{"class":243},[79,42824,33653],{"class":239},[79,42826,33656],{"class":7412},[79,42828,244],{"class":243},[79,42830,36148],{"class":239},[79,42832,42833],{"class":81,"line":532},[79,42834,36153],{"class":2440},[79,42836,42837,42839,42841,42843],{"class":81,"line":537},[79,42838,36158],{"class":7412},[79,42840,244],{"class":243},[79,42842,1072],{"class":96},[79,42844,33585],{"class":239},[79,42846,42847,42849,42851,42853],{"class":81,"line":543},[79,42848,36169],{"class":7412},[79,42850,244],{"class":243},[79,42852,33595],{"class":96},[79,42854,33585],{"class":239},[79,42856,42857,42859,42861,42863],{"class":81,"line":549},[79,42858,36180],{"class":7412},[79,42860,244],{"class":243},[79,42862,1030],{"class":96},[79,42864,253],{"class":239},[79,42866,42867,42869],{"class":81,"line":555},[79,42868,711],{"class":243},[79,42870,36193],{"class":239},[79,42872,42873],{"class":81,"line":561},[79,42874,454],{"emptyLinePlaceholder":453},[79,42876,42877],{"class":81,"line":567},[79,42878,36202],{"class":2440},[79,42880,42881,42883,42885],{"class":81,"line":573},[79,42882,633],{"class":243},[79,42884,36209],{"class":85},[79,42886,36212],{"class":239},[79,42888,42889],{"class":81,"line":579},[79,42890,36217],{"class":2440},[79,42892,42893,42895,42897,42899,42901,42903,42905],{"class":81,"line":584},[79,42894,33360],{"class":239},[79,42896,244],{"class":243},[79,42898,33367],{"class":89},[79,42900,3929],{"class":243},[79,42902,33372],{"class":239},[79,42904,3926],{"class":243},[79,42906,36234],{"class":89},[79,42908,42909,42911,42913],{"class":81,"line":590},[79,42910,33412],{"class":239},[79,42912,244],{"class":243},[79,42914,34405],{"class":239},[79,42916,42917],{"class":81,"line":596},[79,42918,454],{"emptyLinePlaceholder":453},[79,42920,42921],{"class":81,"line":602},[79,42922,36251],{"class":2440},[79,42924,42925,42927,42929],{"class":81,"line":608},[79,42926,36256],{"class":239},[79,42928,244],{"class":243},[79,42930,34458],{"class":96},[79,42932,42933,42935,42937],{"class":81,"line":614},[79,42934,36265],{"class":239},[79,42936,244],{"class":243},[79,42938,5290],{"class":96},[79,42940,42941],{"class":81,"line":620},[79,42942,454],{"emptyLinePlaceholder":453},[79,42944,42945],{"class":81,"line":625},[79,42946,36278],{"class":2440},[79,42948,42949],{"class":81,"line":630},[79,42950,36283],{"class":2440},[79,42952,42953],{"class":81,"line":648},[79,42954,36288],{"class":2440},[79,42956,42957,42959],{"class":81,"line":659},[79,42958,36293],{"class":243},[79,42960,34999],{"class":239},[79,42962,42963],{"class":81,"line":676},[79,42964,36300],{"class":2440},[79,42966,42967,42969,42971,42973],{"class":81,"line":708},[79,42968,5606],{"class":243},[79,42970,36307],{"class":239},[79,42972,955],{"class":243},[79,42974,36312],{"class":239},[79,42976,42977,42979,42981],{"class":81,"line":717},[79,42978,36317],{"class":239},[79,42980,244],{"class":243},[79,42982,36322],{"class":239},[79,42984,42985,42987,42989],{"class":81,"line":722},[79,42986,36327],{"class":239},[79,42988,244],{"class":243},[79,42990,36332],{"class":239},[79,42992,42993],{"class":81,"line":727},[79,42994,36337],{"class":2440},[79,42996,42997],{"class":81,"line":738},[79,42998,34990],{"class":239},[79,43000,43001],{"class":81,"line":753},[79,43002,36346],{"class":2440},[79,43004,43005,43007,43009],{"class":81,"line":768},[79,43006,34775],{"class":239},[79,43008,244],{"class":243},[79,43010,36355],{"class":239},[79,43012,43013],{"class":81,"line":776},[79,43014,36360],{"class":2440},[79,43016,43017,43019,43021,43023,43025,43027,43029],{"class":81,"line":781},[79,43018,34792],{"class":239},[79,43020,244],{"class":243},[79,43022,34797],{"class":239},[79,43024,34800],{"class":7412},[79,43026,244],{"class":243},[79,43028,1072],{"class":96},[79,43030,253],{"class":239},[79,43032,43033],{"class":81,"line":786},[79,43034,36381],{"class":2440},[79,43036,43037],{"class":81,"line":802},[79,43038,36386],{"class":2440},[79,43040,43041],{"class":81,"line":815},[79,43042,36391],{"class":2440},[79,43044,43045,43047,43049,43051,43053],{"class":81,"line":828},[79,43046,36396],{"class":239},[79,43048,1118],{"class":243},[79,43050,34902],{"class":239},[79,43052,5155],{"class":243},[79,43054,36405],{"class":239},[79,43056,43057],{"class":81,"line":842},[79,43058,36410],{"class":2440},[79,43060,43061,43063,43065,43067,43069],{"class":81,"line":859},[79,43062,36415],{"class":239},[79,43064,1118],{"class":243},[79,43066,36420],{"class":239},[79,43068,1030],{"class":96},[79,43070,253],{"class":239},[79,43072,43073],{"class":81,"line":878},[79,43074,454],{"emptyLinePlaceholder":453},[79,43076,43077],{"class":81,"line":883},[79,43078,36433],{"class":2440},[79,43080,43081,43083,43085,43087,43089],{"class":81,"line":888},[79,43082,36438],{"class":239},[79,43084,244],{"class":243},[79,43086,36443],{"class":239},[79,43088,2957],{"class":243},[79,43090,36448],{"class":239},[79,43092,43093],{"class":81,"line":904},[79,43094,36453],{"class":2440},[79,43096,43097,43099,43101,43103],{"class":81,"line":919},[79,43098,34566],{"class":96},[79,43100,685],{"class":239},[79,43102,36462],{"class":89},[79,43104,36465],{"class":239},[79,43106,43107],{"class":81,"line":930},[79,43108,454],{"emptyLinePlaceholder":453},[79,43110,43111],{"class":81,"line":941},[79,43112,36474],{"class":2440},[79,43114,43115,43117,43119,43121,43123],{"class":81,"line":946},[79,43116,1329],{"class":243},[79,43118,1332],{"class":96},[79,43120,5155],{"class":243},[79,43122,33348],{"class":89},[79,43124,673],{"class":239},[79,43126,43127],{"class":81,"line":969},[79,43128,36491],{"class":2440},[79,43130,43131,43133,43135],{"class":81,"line":975},[79,43132,33412],{"class":239},[79,43134,244],{"class":243},[79,43136,43137],{"class":239},"VGG16()\n",[79,43139,43140],{"class":81,"line":989},[79,43141,36504],{"class":2440},[79,43143,43144],{"class":81,"line":1003},[79,43145,36509],{"class":2440},[79,43147,43148,43150,43152],{"class":81,"line":1019},[79,43149,36514],{"class":239},[79,43151,36517],{"class":89},[79,43153,1191],{"class":239},[79,43155,43156],{"class":81,"line":1024},[79,43157,36524],{"class":2440},[79,43159,43160,43162,43164],{"class":81,"line":1067},[79,43161,36137],{"class":239},[79,43163,244],{"class":243},[79,43165,36533],{"class":239},[79,43167,43168],{"class":81,"line":1101},[79,43169,36538],{"class":2440},[79,43171,43172],{"class":81,"line":1106},[79,43173,36543],{"class":239},[79,43175,43176],{"class":81,"line":1112},[79,43177,454],{"emptyLinePlaceholder":453},[79,43179,43180],{"class":81,"line":1124},[79,43181,36552],{"class":2440},[79,43183,43184],{"class":81,"line":1129},[79,43185,36557],{"class":2440},[79,43187,43188,43190,43192,43194,43196,43198,43200],{"class":81,"line":1150},[79,43189,33360],{"class":239},[79,43191,244],{"class":243},[79,43193,33367],{"class":89},[79,43195,3929],{"class":243},[79,43197,33372],{"class":239},[79,43199,3926],{"class":243},[79,43201,36234],{"class":89},[79,43203,43204,43206,43208],{"class":81,"line":1161},[79,43205,33412],{"class":239},[79,43207,244],{"class":243},[79,43209,34405],{"class":239},[79,43211,43212],{"class":81,"line":1175},[79,43213,36586],{"class":2440},[79,43215,43216],{"class":81,"line":1194},[79,43217,36591],{"class":2440},[79,43219,43220,43222,43224,43226,43228,43230,43232,43234,43236,43238,43240,43242,43244,43246,43248,43250,43252,43254,43256,43258,43260,43262,43264],{"class":81,"line":1211},[79,43221,36596],{"class":239},[79,43223,244],{"class":243},[79,43225,3263],{"class":239},[79,43227,36603],{"class":89},[79,43229,2752],{"class":239},[79,43231,36608],{"class":89},[79,43233,2752],{"class":239},[79,43235,36613],{"class":89},[79,43237,2752],{"class":239},[79,43239,36618],{"class":89},[79,43241,2752],{"class":239},[79,43243,36623],{"class":89},[79,43245,2752],{"class":239},[79,43247,36628],{"class":89},[79,43249,2752],{"class":239},[79,43251,36633],{"class":89},[79,43253,2752],{"class":239},[79,43255,36638],{"class":89},[79,43257,2752],{"class":239},[79,43259,36643],{"class":89},[79,43261,2752],{"class":239},[79,43263,36648],{"class":89},[79,43265,35361],{"class":239},[79,43267,43268,43270],{"class":81,"line":1228},[79,43269,36293],{"class":243},[79,43271,34999],{"class":239},[79,43273,43274],{"class":81,"line":1246},[79,43275,36661],{"class":2440},[79,43277,43278,43280,43282,43284],{"class":81,"line":1251},[79,43279,5606],{"class":243},[79,43281,36668],{"class":239},[79,43283,955],{"class":243},[79,43285,36312],{"class":239},[79,43287,43288,43290,43292],{"class":81,"line":1274},[79,43289,34725],{"class":239},[79,43291,244],{"class":243},[79,43293,34730],{"class":239},[79,43295,43296,43298,43300],{"class":81,"line":1296},[79,43297,34740],{"class":239},[79,43299,244],{"class":243},[79,43301,34745],{"class":239},[79,43303,43304],{"class":81,"line":1316},[79,43305,454],{"emptyLinePlaceholder":453},[79,43307,43308],{"class":81,"line":1321},[79,43309,36697],{"class":2440},[79,43311,43312],{"class":81,"line":1326},[79,43313,34990],{"class":239},[79,43315,43316],{"class":81,"line":1342},[79,43317,36706],{"class":2440},[79,43319,43320,43322,43324],{"class":81,"line":18985},[79,43321,34775],{"class":239},[79,43323,244],{"class":243},[79,43325,34780],{"class":239},[79,43327,43328],{"class":81,"line":18990},[79,43329,36719],{"class":2440},[79,43331,43332,43334,43336,43338,43340,43342,43344],{"class":81,"line":18995},[79,43333,34792],{"class":239},[79,43335,244],{"class":243},[79,43337,34797],{"class":239},[79,43339,34800],{"class":7412},[79,43341,244],{"class":243},[79,43343,1072],{"class":96},[79,43345,253],{"class":239},[79,43347,43348],{"class":81,"line":19009},[79,43349,36740],{"class":2440},[79,43351,43352,43354,43356],{"class":81,"line":19021},[79,43353,36745],{"class":239},[79,43355,244],{"class":243},[79,43357,36750],{"class":239},[79,43359,43360,43362,43364],{"class":81,"line":19026},[79,43361,36755],{"class":239},[79,43363,244],{"class":243},[79,43365,36760],{"class":239},[79,43367,43368,43370,43372,43374,43376,43378,43380,43382],{"class":81,"line":19039},[79,43369,1164],{"class":96},[79,43371,685],{"class":239},[79,43373,36769],{"class":89},[79,43375,36772],{"class":239},[79,43377,36775],{"class":89},[79,43379,2752],{"class":239},[79,43381,36780],{"class":89},[79,43383,36783],{"class":239},[265,43385,43387],{"id":43386},"_23googlenet","2.3.GoogLeNet",[24137,43389,43391],{"id":43390},"_231原理","2.3.1.原理",[26,43393,43394],{},[29,43395,43396],{},"网络结构",[19,43398,43399],{},[3699,43400],{"alt":57,"src":43401},"\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,43403,43404],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43406,43407],{},[3699,43408],{"alt":57,"src":43409},"\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,43411,43412],{},[3699,43413],{"alt":57,"src":43414},"\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,43416,43417],{},[3699,43418],{"alt":57,"src":43419},"\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,43421,43422],{"start":167},[29,43423,43424],{},"1x1卷积的优点",[19,43426,43427],{},[3699,43428],{"alt":57,"src":43429},"\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,43431,43432],{"start":178},[29,43433,43434],{},"全局平均池化层优点",[19,43436,43437],{},[3699,43438],{"alt":57,"src":43439},"\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,43441,43442],{},[3699,43443],{"alt":57,"src":43444},"\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,43446,43447],{"start":457},[29,43448,43449],{},"参数详细描述",[19,43451,43452],{},[3699,43453],{"alt":57,"src":43454},"\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,43456,43457],{},[3699,43458],{"alt":57,"src":43459},"\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,43461,43462],{},[3699,43463],{"alt":57,"src":43464},"\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,43466,43467],{},[3699,43468],{"alt":57,"src":43469},"\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,43471,43472],{},[3699,43473],{"alt":57,"src":43474},"\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,43476,43477],{},[3699,43478],{"alt":57,"src":43479},"\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,43481,43482],{},[3699,43483],{"alt":57,"src":43484},"\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,43486,43487],{},[3699,43488],{"alt":57,"src":43489},"\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,43491,43492],{},[3699,43493],{"alt":57,"src":43494},"\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,43496,43497],{},[3699,43498],{"alt":57,"src":43499},"\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,43501,43502],{},[3699,43503],{"alt":57,"src":43504},"\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,43506,43507],{},[3699,43508],{"alt":57,"src":43509},"\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,43511,43512],{},[3699,43513],{"alt":57,"src":43514},"\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,43516,43517],{},[3699,43518],{"alt":57,"src":43519},"\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,43521,43522],{},[3699,43523],{"alt":57,"src":43524},"\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,43526,43527],{},[3699,43528],{"alt":57,"src":43529},"\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,43531,43532],{},[3699,43533],{"alt":57,"src":43534},"\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,43536,43537],{},[3699,43538],{"alt":57,"src":43539},"\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,43541,43542],{},[3699,43543],{"alt":57,"src":43544},"\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,43546,43547],{},[3699,43548],{"alt":57,"src":43549},"\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,43551,43552],{},[3699,43553],{"alt":57,"src":43554},"\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",[24137,43556,43558],{"id":43557},"_232代码实现","2.3.2.代码实现",[26,43560,43561],{},[29,43562,32836],{},[19,43564,43565],{},"根据原理一步一步搭建即可",[51,43567,43569],{"className":230,"code":43568,"language":232,"meta":57,"style":57},"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",[59,43570,43571,43577,43587,43597,43601,43618,43627,43642,43652,43657,43690,43695,43732,43779,43784,43820,43867,43872,43877,43912,43944,43948,43956,43972,43996,44021,44042,44047,44062,44066,44070,44075,44092,44097,44106,44121,44132,44176,44180,44208,44212,44223,44251,44255,44292,44296,44324,44328,44339,44375,44407,44435,44439,44450,44484,44516,44548,44581,44615,44643,44647,44658,44691,44723,44737,44741,44754,44758,44763,44775,44783,44805,44810,44815,44820,44825,44830,44835,44849,44857,44866,44879,44894,44903,44907,44915,44926,44937,44948,44959,44970,44976,44980,44985,44997,45017,45026],{"__ignoreMap":57},[79,43572,43573,43575],{"class":81,"line":82},[79,43574,432],{"class":243},[79,43576,32521],{"class":239},[79,43578,43579,43581,43583,43585],{"class":81,"line":167},[79,43580,32862],{"class":243},[79,43582,32865],{"class":239},[79,43584,432],{"class":243},[79,43586,32870],{"class":239},[79,43588,43589,43591,43593,43595],{"class":81,"line":178},[79,43590,32862],{"class":243},[79,43592,32882],{"class":239},[79,43594,432],{"class":243},[79,43596,32887],{"class":239},[79,43598,43599],{"class":81,"line":457},[79,43600,454],{"emptyLinePlaceholder":453},[79,43602,43603,43605,43608,43610,43612,43614,43616],{"class":81,"line":462},[79,43604,16855],{"class":243},[79,43606,43607],{"class":85}," Inception",[79,43609,685],{"class":239},[79,43611,32903],{"class":85},[79,43613,2931],{"class":239},[79,43615,32908],{"class":85},[79,43617,966],{"class":239},[79,43619,43620,43622,43624],{"class":81,"line":474},[79,43621,32925],{"class":243},[79,43623,32928],{"class":96},[79,43625,43626],{"class":239},"(self,in_channels,c1,c2,c3,c4):\n",[79,43628,43629,43631,43634,43636,43638,43640],{"class":81,"line":480},[79,43630,32941],{"class":96},[79,43632,43633],{"class":239},"(Inception,",[79,43635,32947],{"class":96},[79,43637,32950],{"class":239},[79,43639,32953],{"class":96},[79,43641,4191],{"class":239},[79,43643,43644,43646,43648,43650],{"class":81,"line":486},[79,43645,32969],{"class":96},[79,43647,36885],{"class":239},[79,43649,244],{"class":243},[79,43651,36890],{"class":239},[79,43653,43654],{"class":81,"line":491},[79,43655,43656],{"class":2440},"        # 路线1：定义1*1卷积\n",[79,43658,43659,43661,43664,43666,43668,43670,43672,43675,43677,43679,43682,43684,43686,43688],{"class":81,"line":497},[79,43660,32969],{"class":96},[79,43662,43663],{"class":239},".p1_1",[79,43665,244],{"class":243},[79,43667,32977],{"class":239},[79,43669,32980],{"class":7412},[79,43671,244],{"class":243},[79,43673,43674],{"class":239},"in_channels,",[79,43676,32989],{"class":7412},[79,43678,244],{"class":243},[79,43680,43681],{"class":239},"c1,",[79,43683,32998],{"class":7412},[79,43685,244],{"class":243},[79,43687,1072],{"class":96},[79,43689,253],{"class":239},[79,43691,43692],{"class":81,"line":503},[79,43693,43694],{"class":2440},"        # 路线2：定义1*1卷积和3*3\n",[79,43696,43697,43699,43702,43704,43706,43708,43710,43712,43714,43716,43719,43721,43724,43726,43728,43730],{"class":81,"line":509},[79,43698,32969],{"class":96},[79,43700,43701],{"class":239},".p2_1",[79,43703,244],{"class":243},[79,43705,32977],{"class":239},[79,43707,32980],{"class":7412},[79,43709,244],{"class":243},[79,43711,43674],{"class":239},[79,43713,32989],{"class":7412},[79,43715,244],{"class":243},[79,43717,43718],{"class":239},"c2[",[79,43720,1030],{"class":96},[79,43722,43723],{"class":239},"],",[79,43725,32998],{"class":7412},[79,43727,244],{"class":243},[79,43729,1072],{"class":96},[79,43731,253],{"class":239},[79,43733,43734,43736,43739,43741,43743,43745,43747,43749,43751,43753,43755,43757,43759,43761,43763,43765,43767,43769,43771,43773,43775,43777],{"class":81,"line":514},[79,43735,32969],{"class":96},[79,43737,43738],{"class":239},".p2_2",[79,43740,244],{"class":243},[79,43742,32977],{"class":239},[79,43744,32980],{"class":7412},[79,43746,244],{"class":243},[79,43748,43718],{"class":239},[79,43750,1030],{"class":96},[79,43752,43723],{"class":239},[79,43754,32989],{"class":7412},[79,43756,244],{"class":243},[79,43758,43718],{"class":239},[79,43760,1072],{"class":96},[79,43762,43723],{"class":239},[79,43764,32998],{"class":7412},[79,43766,244],{"class":243},[79,43768,1188],{"class":96},[79,43770,2752],{"class":239},[79,43772,33007],{"class":7412},[79,43774,244],{"class":243},[79,43776,1072],{"class":96},[79,43778,253],{"class":239},[79,43780,43781],{"class":81,"line":520},[79,43782,43783],{"class":2440},"        # 路线3：定义1*1卷积和5*5\n",[79,43785,43786,43788,43791,43793,43795,43797,43799,43801,43803,43805,43808,43810,43812,43814,43816,43818],{"class":81,"line":526},[79,43787,32969],{"class":96},[79,43789,43790],{"class":239},".p3_1",[79,43792,244],{"class":243},[79,43794,32977],{"class":239},[79,43796,32980],{"class":7412},[79,43798,244],{"class":243},[79,43800,43674],{"class":239},[79,43802,32989],{"class":7412},[79,43804,244],{"class":243},[79,43806,43807],{"class":239},"c3[",[79,43809,1030],{"class":96},[79,43811,43723],{"class":239},[79,43813,32998],{"class":7412},[79,43815,244],{"class":243},[79,43817,1072],{"class":96},[79,43819,253],{"class":239},[79,43821,43822,43824,43827,43829,43831,43833,43835,43837,43839,43841,43843,43845,43847,43849,43851,43853,43855,43857,43859,43861,43863,43865],{"class":81,"line":532},[79,43823,32969],{"class":96},[79,43825,43826],{"class":239},".p3_2",[79,43828,244],{"class":243},[79,43830,32977],{"class":239},[79,43832,32980],{"class":7412},[79,43834,244],{"class":243},[79,43836,43807],{"class":239},[79,43838,1030],{"class":96},[79,43840,43723],{"class":239},[79,43842,32989],{"class":7412},[79,43844,244],{"class":243},[79,43846,43807],{"class":239},[79,43848,1072],{"class":96},[79,43850,43723],{"class":239},[79,43852,32998],{"class":7412},[79,43854,244],{"class":243},[79,43856,2694],{"class":96},[79,43858,2752],{"class":239},[79,43860,33007],{"class":7412},[79,43862,244],{"class":243},[79,43864,1049],{"class":96},[79,43866,253],{"class":239},[79,43868,43869],{"class":81,"line":537},[79,43870,43871],{"class":2440},"        # 路线4：定义3*3最大池化和1*1卷积\n",[79,43873,43874],{"class":81,"line":543},[79,43875,43876],{"class":2440},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[79,43878,43879,43881,43884,43886,43888,43890,43892,43894,43896,43898,43900,43902,43904,43906,43908,43910],{"class":81,"line":549},[79,43880,32969],{"class":96},[79,43882,43883],{"class":239},".p4_1",[79,43885,244],{"class":243},[79,43887,36943],{"class":239},[79,43889,32998],{"class":7412},[79,43891,244],{"class":243},[79,43893,1188],{"class":96},[79,43895,2752],{"class":239},[79,43897,33053],{"class":7412},[79,43899,244],{"class":243},[79,43901,1072],{"class":96},[79,43903,2752],{"class":239},[79,43905,33007],{"class":7412},[79,43907,244],{"class":243},[79,43909,1072],{"class":96},[79,43911,253],{"class":239},[79,43913,43914,43916,43919,43921,43923,43925,43927,43929,43931,43933,43936,43938,43940,43942],{"class":81,"line":555},[79,43915,32969],{"class":96},[79,43917,43918],{"class":239},".p4_2",[79,43920,244],{"class":243},[79,43922,32977],{"class":239},[79,43924,32980],{"class":7412},[79,43926,244],{"class":243},[79,43928,43674],{"class":239},[79,43930,32989],{"class":7412},[79,43932,244],{"class":243},[79,43934,43935],{"class":239},"c4,",[79,43937,32998],{"class":7412},[79,43939,244],{"class":243},[79,43941,1072],{"class":96},[79,43943,253],{"class":239},[79,43945,43946],{"class":81,"line":561},[79,43947,454],{"emptyLinePlaceholder":453},[79,43949,43950,43952,43954],{"class":81,"line":567},[79,43951,32925],{"class":243},[79,43953,33217],{"class":85},[79,43955,33220],{"class":239},[79,43957,43958,43961,43963,43965,43967,43969],{"class":81,"line":573},[79,43959,43960],{"class":239},"        p1",[79,43962,244],{"class":243},[79,43964,32947],{"class":96},[79,43966,37298],{"class":239},[79,43968,32947],{"class":96},[79,43970,43971],{"class":239},".p1_1(x))\n",[79,43973,43974,43976,43978,43980,43982,43984,43987,43989,43991,43993],{"class":81,"line":579},[79,43975,9279],{"class":239},[79,43977,244],{"class":243},[79,43979,32947],{"class":96},[79,43981,37298],{"class":239},[79,43983,32947],{"class":96},[79,43985,43986],{"class":239},".p2_2(",[79,43988,32947],{"class":96},[79,43990,37298],{"class":239},[79,43992,32947],{"class":96},[79,43994,43995],{"class":239},".p2_1(x))))\n",[79,43997,43998,44001,44003,44005,44007,44009,44012,44014,44016,44018],{"class":81,"line":584},[79,43999,44000],{"class":239},"        p3",[79,44002,244],{"class":243},[79,44004,32947],{"class":96},[79,44006,37298],{"class":239},[79,44008,32947],{"class":96},[79,44010,44011],{"class":239},".p3_2(",[79,44013,32947],{"class":96},[79,44015,37298],{"class":239},[79,44017,32947],{"class":96},[79,44019,44020],{"class":239},".p3_1(x))))\n",[79,44022,44023,44026,44028,44030,44032,44034,44037,44039],{"class":81,"line":590},[79,44024,44025],{"class":239},"        p4",[79,44027,244],{"class":243},[79,44029,32947],{"class":96},[79,44031,37298],{"class":239},[79,44033,32947],{"class":96},[79,44035,44036],{"class":239},".p4_2(",[79,44038,32947],{"class":96},[79,44040,44041],{"class":239},".p4_1(x)))\n",[79,44043,44044],{"class":81,"line":596},[79,44045,44046],{"class":2440},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[79,44048,44049,44051,44054,44056,44058,44060],{"class":81,"line":602},[79,44050,16913],{"class":243},[79,44052,44053],{"class":239}," torch.cat((p1,p2,p3,p4),",[79,44055,34800],{"class":7412},[79,44057,244],{"class":243},[79,44059,1072],{"class":96},[79,44061,253],{"class":239},[79,44063,44064],{"class":81,"line":608},[79,44065,454],{"emptyLinePlaceholder":453},[79,44067,44068],{"class":81,"line":614},[79,44069,454],{"emptyLinePlaceholder":453},[79,44071,44072],{"class":81,"line":620},[79,44073,44074],{"class":2440},"# 搭建GoogLeNet网络\n",[79,44076,44077,44079,44082,44084,44086,44088,44090],{"class":81,"line":625},[79,44078,16855],{"class":243},[79,44080,44081],{"class":85}," GoogLeNet",[79,44083,685],{"class":239},[79,44085,32903],{"class":85},[79,44087,2931],{"class":239},[79,44089,32908],{"class":85},[79,44091,966],{"class":239},[79,44093,44094],{"class":81,"line":630},[79,44095,44096],{"class":2440},"    # 必须把Inception导入到里边\n",[79,44098,44099,44101,44103],{"class":81,"line":648},[79,44100,32925],{"class":243},[79,44102,32928],{"class":96},[79,44104,44105],{"class":239},"(self,Inception):\n",[79,44107,44108,44110,44113,44115,44117,44119],{"class":81,"line":659},[79,44109,32941],{"class":96},[79,44111,44112],{"class":239},"(GoogLeNet,",[79,44114,32947],{"class":96},[79,44116,32950],{"class":239},[79,44118,32953],{"class":96},[79,44120,4191],{"class":239},[79,44122,44123,44125,44128,44130],{"class":81,"line":676},[79,44124,32969],{"class":96},[79,44126,44127],{"class":239},".b1",[79,44129,244],{"class":243},[79,44131,40123],{"class":239},[79,44133,44134,44136,44138,44140,44142,44144,44146,44148,44150,44152,44154,44156,44158,44160,44162,44164,44166,44168,44170,44172,44174],{"class":81,"line":708},[79,44135,40128],{"class":239},[79,44137,32980],{"class":7412},[79,44139,244],{"class":243},[79,44141,1072],{"class":96},[79,44143,2752],{"class":239},[79,44145,32989],{"class":7412},[79,44147,244],{"class":243},[79,44149,2581],{"class":96},[79,44151,2752],{"class":239},[79,44153,32998],{"class":7412},[79,44155,244],{"class":243},[79,44157,2743],{"class":96},[79,44159,2752],{"class":239},[79,44161,33053],{"class":7412},[79,44163,244],{"class":243},[79,44165,1049],{"class":96},[79,44167,2752],{"class":239},[79,44169,33007],{"class":7412},[79,44171,244],{"class":243},[79,44173,1188],{"class":96},[79,44175,40161],{"class":239},[79,44177,44178],{"class":81,"line":717},[79,44179,40166],{"class":239},[79,44181,44182,44184,44186,44188,44190,44192,44194,44196,44198,44200,44202,44204,44206],{"class":81,"line":722},[79,44183,40211],{"class":239},[79,44185,32998],{"class":7412},[79,44187,244],{"class":243},[79,44189,1188],{"class":96},[79,44191,2752],{"class":239},[79,44193,33053],{"class":7412},[79,44195,244],{"class":243},[79,44197,1049],{"class":96},[79,44199,2752],{"class":239},[79,44201,33007],{"class":7412},[79,44203,244],{"class":243},[79,44205,1072],{"class":96},[79,44207,253],{"class":239},[79,44209,44210],{"class":81,"line":727},[79,44211,40240],{"class":239},[79,44213,44214,44216,44219,44221],{"class":81,"line":738},[79,44215,32969],{"class":96},[79,44217,44218],{"class":239},".b2",[79,44220,244],{"class":243},[79,44222,40123],{"class":239},[79,44224,44225,44227,44229,44231,44233,44235,44237,44239,44241,44243,44245,44247,44249],{"class":81,"line":753},[79,44226,40128],{"class":239},[79,44228,32980],{"class":7412},[79,44230,244],{"class":243},[79,44232,2581],{"class":96},[79,44234,2752],{"class":239},[79,44236,32989],{"class":7412},[79,44238,244],{"class":243},[79,44240,2581],{"class":96},[79,44242,2752],{"class":239},[79,44244,32998],{"class":7412},[79,44246,244],{"class":243},[79,44248,1072],{"class":96},[79,44250,40161],{"class":239},[79,44252,44253],{"class":81,"line":768},[79,44254,40166],{"class":239},[79,44256,44257,44259,44261,44263,44265,44267,44269,44271,44274,44276,44278,44280,44282,44284,44286,44288,44290],{"class":81,"line":776},[79,44258,40128],{"class":239},[79,44260,32980],{"class":7412},[79,44262,244],{"class":243},[79,44264,2581],{"class":96},[79,44266,2752],{"class":239},[79,44268,32989],{"class":7412},[79,44270,244],{"class":243},[79,44272,44273],{"class":96},"192",[79,44275,2752],{"class":239},[79,44277,32998],{"class":7412},[79,44279,244],{"class":243},[79,44281,1188],{"class":96},[79,44283,2752],{"class":239},[79,44285,33007],{"class":7412},[79,44287,244],{"class":243},[79,44289,1072],{"class":96},[79,44291,40161],{"class":239},[79,44293,44294],{"class":81,"line":781},[79,44295,40166],{"class":239},[79,44297,44298,44300,44302,44304,44306,44308,44310,44312,44314,44316,44318,44320,44322],{"class":81,"line":786},[79,44299,40211],{"class":239},[79,44301,32998],{"class":7412},[79,44303,244],{"class":243},[79,44305,1188],{"class":96},[79,44307,2752],{"class":239},[79,44309,33053],{"class":7412},[79,44311,244],{"class":243},[79,44313,1049],{"class":96},[79,44315,2752],{"class":239},[79,44317,33007],{"class":7412},[79,44319,244],{"class":243},[79,44321,1072],{"class":96},[79,44323,253],{"class":239},[79,44325,44326],{"class":81,"line":802},[79,44327,40240],{"class":239},[79,44329,44330,44332,44335,44337],{"class":81,"line":815},[79,44331,32969],{"class":96},[79,44333,44334],{"class":239},".b3",[79,44336,244],{"class":243},[79,44338,40123],{"class":239},[79,44340,44341,44344,44346,44348,44350,44353,44355,44357,44359,44362,44364,44366,44368,44371,44373],{"class":81,"line":828},[79,44342,44343],{"class":239},"            Inception(",[79,44345,44273],{"class":96},[79,44347,2752],{"class":239},[79,44349,2581],{"class":96},[79,44351,44352],{"class":239},",(",[79,44354,2587],{"class":96},[79,44356,2752],{"class":239},[79,44358,34186],{"class":96},[79,44360,44361],{"class":239},"),(",[79,44363,2974],{"class":96},[79,44365,2752],{"class":239},[79,44367,2575],{"class":96},[79,44369,44370],{"class":239},"),",[79,44372,2575],{"class":96},[79,44374,40161],{"class":239},[79,44376,44377,44379,44381,44383,44385,44387,44389,44391,44393,44395,44397,44399,44401,44403,44405],{"class":81,"line":842},[79,44378,44343],{"class":239},[79,44380,36984],{"class":96},[79,44382,2752],{"class":239},[79,44384,34186],{"class":96},[79,44386,44352],{"class":239},[79,44388,34186],{"class":96},[79,44390,2752],{"class":239},[79,44392,44273],{"class":96},[79,44394,44361],{"class":239},[79,44396,2575],{"class":96},[79,44398,2752],{"class":239},[79,44400,2587],{"class":96},[79,44402,44370],{"class":239},[79,44404,2581],{"class":96},[79,44406,40161],{"class":239},[79,44408,44409,44411,44413,44415,44417,44419,44421,44423,44425,44427,44429,44431,44433],{"class":81,"line":859},[79,44410,40211],{"class":239},[79,44412,32998],{"class":7412},[79,44414,244],{"class":243},[79,44416,1188],{"class":96},[79,44418,2752],{"class":239},[79,44420,33053],{"class":7412},[79,44422,244],{"class":243},[79,44424,1049],{"class":96},[79,44426,2752],{"class":239},[79,44428,33007],{"class":7412},[79,44430,244],{"class":243},[79,44432,1072],{"class":96},[79,44434,253],{"class":239},[79,44436,44437],{"class":81,"line":878},[79,44438,40240],{"class":239},[79,44440,44441,44443,44446,44448],{"class":81,"line":883},[79,44442,32969],{"class":96},[79,44444,44445],{"class":239},".b4",[79,44447,244],{"class":243},[79,44449,40123],{"class":239},[79,44451,44452,44454,44457,44459,44461,44463,44465,44467,44470,44472,44474,44476,44478,44480,44482],{"class":81,"line":888},[79,44453,44343],{"class":239},[79,44455,44456],{"class":96},"480",[79,44458,2752],{"class":239},[79,44460,44273],{"class":96},[79,44462,44352],{"class":239},[79,44464,2587],{"class":96},[79,44466,2752],{"class":239},[79,44468,44469],{"class":96},"208",[79,44471,44361],{"class":239},[79,44473,2974],{"class":96},[79,44475,2752],{"class":239},[79,44477,2980],{"class":96},[79,44479,44370],{"class":239},[79,44481,2581],{"class":96},[79,44483,40161],{"class":239},[79,44485,44486,44488,44490,44492,44494,44496,44498,44500,44502,44504,44506,44508,44510,44512,44514],{"class":81,"line":904},[79,44487,44343],{"class":239},[79,44489,40571],{"class":96},[79,44491,2752],{"class":239},[79,44493,23187],{"class":96},[79,44495,44352],{"class":239},[79,44497,2991],{"class":96},[79,44499,2752],{"class":239},[79,44501,33620],{"class":96},[79,44503,44361],{"class":239},[79,44505,3173],{"class":96},[79,44507,2752],{"class":239},[79,44509,2581],{"class":96},[79,44511,44370],{"class":239},[79,44513,2581],{"class":96},[79,44515,40161],{"class":239},[79,44517,44518,44520,44522,44524,44526,44528,44530,44532,44534,44536,44538,44540,44542,44544,44546],{"class":81,"line":919},[79,44519,44343],{"class":239},[79,44521,40571],{"class":96},[79,44523,2752],{"class":239},[79,44525,34186],{"class":96},[79,44527,44352],{"class":239},[79,44529,34186],{"class":96},[79,44531,2752],{"class":239},[79,44533,36984],{"class":96},[79,44535,44361],{"class":239},[79,44537,3173],{"class":96},[79,44539,2752],{"class":239},[79,44541,2581],{"class":96},[79,44543,44370],{"class":239},[79,44545,2581],{"class":96},[79,44547,40161],{"class":239},[79,44549,44550,44552,44554,44556,44558,44560,44562,44564,44567,44569,44571,44573,44575,44577,44579],{"class":81,"line":930},[79,44551,44343],{"class":239},[79,44553,40571],{"class":96},[79,44555,2752],{"class":239},[79,44557,2991],{"class":96},[79,44559,44352],{"class":239},[79,44561,34186],{"class":96},[79,44563,2752],{"class":239},[79,44565,44566],{"class":96},"288",[79,44568,44361],{"class":239},[79,44570,2575],{"class":96},[79,44572,2752],{"class":239},[79,44574,2581],{"class":96},[79,44576,44370],{"class":239},[79,44578,2581],{"class":96},[79,44580,40161],{"class":239},[79,44582,44583,44585,44588,44590,44592,44594,44596,44598,44601,44603,44605,44607,44609,44611,44613],{"class":81,"line":941},[79,44584,44343],{"class":239},[79,44586,44587],{"class":96},"528",[79,44589,2752],{"class":239},[79,44591,36984],{"class":96},[79,44593,44352],{"class":239},[79,44595,23187],{"class":96},[79,44597,2752],{"class":239},[79,44599,44600],{"class":96},"320",[79,44602,44361],{"class":239},[79,44604,2575],{"class":96},[79,44606,2752],{"class":239},[79,44608,34186],{"class":96},[79,44610,44370],{"class":239},[79,44612,34186],{"class":96},[79,44614,40161],{"class":239},[79,44616,44617,44619,44621,44623,44625,44627,44629,44631,44633,44635,44637,44639,44641],{"class":81,"line":946},[79,44618,40211],{"class":239},[79,44620,32998],{"class":7412},[79,44622,244],{"class":243},[79,44624,1188],{"class":96},[79,44626,2752],{"class":239},[79,44628,33053],{"class":7412},[79,44630,244],{"class":243},[79,44632,1049],{"class":96},[79,44634,2752],{"class":239},[79,44636,33007],{"class":7412},[79,44638,244],{"class":243},[79,44640,1072],{"class":96},[79,44642,253],{"class":239},[79,44644,44645],{"class":81,"line":969},[79,44646,40240],{"class":239},[79,44648,44649,44651,44654,44656],{"class":81,"line":975},[79,44650,32969],{"class":96},[79,44652,44653],{"class":239},".b5",[79,44655,244],{"class":243},[79,44657,40123],{"class":239},[79,44659,44660,44662,44665,44667,44669,44671,44673,44675,44677,44679,44681,44683,44685,44687,44689],{"class":81,"line":989},[79,44661,44343],{"class":239},[79,44663,44664],{"class":96},"832",[79,44666,2752],{"class":239},[79,44668,36984],{"class":96},[79,44670,44352],{"class":239},[79,44672,23187],{"class":96},[79,44674,2752],{"class":239},[79,44676,44600],{"class":96},[79,44678,44361],{"class":239},[79,44680,2575],{"class":96},[79,44682,2752],{"class":239},[79,44684,34186],{"class":96},[79,44686,44370],{"class":239},[79,44688,34186],{"class":96},[79,44690,40161],{"class":239},[79,44692,44693,44695,44697,44699,44701,44703,44705,44707,44709,44711,44713,44715,44717,44719,44721],{"class":81,"line":1003},[79,44694,44343],{"class":239},[79,44696,44664],{"class":96},[79,44698,2752],{"class":239},[79,44700,37054],{"class":96},[79,44702,44352],{"class":239},[79,44704,44273],{"class":96},[79,44706,2752],{"class":239},[79,44708,37054],{"class":96},[79,44710,44361],{"class":239},[79,44712,2980],{"class":96},[79,44714,2752],{"class":239},[79,44716,34186],{"class":96},[79,44718,44370],{"class":239},[79,44720,34186],{"class":96},[79,44722,40161],{"class":239},[79,44724,44725,44728,44730,44732,44734],{"class":81,"line":1019},[79,44726,44727],{"class":239},"            nn.AdaptiveAvgPool2d((",[79,44729,1072],{"class":96},[79,44731,2752],{"class":239},[79,44733,1072],{"class":96},[79,44735,44736],{"class":239},")),\n",[79,44738,44739],{"class":81,"line":1024},[79,44740,40904],{"class":239},[79,44742,44743,44745,44748,44750,44752],{"class":81,"line":1067},[79,44744,40909],{"class":239},[79,44746,44747],{"class":96},"1024",[79,44749,2752],{"class":239},[79,44751,2820],{"class":96},[79,44753,253],{"class":239},[79,44755,44756],{"class":81,"line":1101},[79,44757,40240],{"class":239},[79,44759,44760],{"class":81,"line":1106},[79,44761,44762],{"class":2440},"        # 对模型参数初始化\n",[79,44764,44765,44767,44769,44771,44773],{"class":81,"line":1112},[79,44766,5606],{"class":243},[79,44768,40982],{"class":239},[79,44770,955],{"class":243},[79,44772,40987],{"class":96},[79,44774,40990],{"class":239},[79,44776,44777,44779,44781],{"class":81,"line":1124},[79,44778,6841],{"class":243},[79,44780,41002],{"class":96},[79,44782,41005],{"class":239},[79,44784,44785,44787,44790,44792,44795,44797,44799,44801,44803],{"class":81,"line":1129},[79,44786,41015],{"class":239},[79,44788,44789],{"class":7412},"mode",[79,44791,244],{"class":243},[79,44793,44794],{"class":89},"'fan_out'",[79,44796,2752],{"class":239},[79,44798,41018],{"class":7412},[79,44800,244],{"class":243},[79,44802,41023],{"class":89},[79,44804,253],{"class":239},[79,44806,44807],{"class":81,"line":1150},[79,44808,44809],{"class":2440},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[79,44811,44812],{"class":81,"line":1161},[79,44813,44814],{"class":2440},"                # ② mode = 'fan_out'决定使用的fan值：\n",[79,44816,44817],{"class":81,"line":1175},[79,44818,44819],{"class":2440},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[79,44821,44822],{"class":81,"line":1194},[79,44823,44824],{"class":2440},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[79,44826,44827],{"class":81,"line":1211},[79,44828,44829],{"class":2440},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[79,44831,44832],{"class":81,"line":1228},[79,44833,44834],{"class":2440},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[79,44836,44837,44839,44841,44843,44845,44847],{"class":81,"line":1246},[79,44838,41035],{"class":243},[79,44840,41038],{"class":239},[79,44842,41041],{"class":243},[79,44844,41044],{"class":243},[79,44846,41047],{"class":96},[79,44848,673],{"class":239},[79,44850,44851,44853,44855],{"class":81,"line":1251},[79,44852,41059],{"class":239},[79,44854,1030],{"class":96},[79,44856,253],{"class":239},[79,44858,44859,44862,44864],{"class":81,"line":1274},[79,44860,44861],{"class":243},"                elif",[79,44863,41002],{"class":96},[79,44865,41078],{"class":239},[79,44867,44868,44871,44873,44875,44877],{"class":81,"line":1296},[79,44869,44870],{"class":239},"                    nn.init.normal_(m.weight,",[79,44872,1030],{"class":96},[79,44874,2752],{"class":239},[79,44876,41100],{"class":96},[79,44878,253],{"class":239},[79,44880,44881,44884,44886,44888,44890,44892],{"class":81,"line":1316},[79,44882,44883],{"class":243},"                    if",[79,44885,41038],{"class":239},[79,44887,41041],{"class":243},[79,44889,41044],{"class":243},[79,44891,41047],{"class":96},[79,44893,673],{"class":239},[79,44895,44896,44899,44901],{"class":81,"line":1321},[79,44897,44898],{"class":239},"                        nn.init.constant_(m.bias,",[79,44900,1030],{"class":96},[79,44902,253],{"class":239},[79,44904,44905],{"class":81,"line":1326},[79,44906,37279],{"class":2440},[79,44908,44909,44911,44913],{"class":81,"line":1342},[79,44910,32925],{"class":243},[79,44912,33217],{"class":85},[79,44914,33220],{"class":239},[79,44916,44917,44919,44921,44923],{"class":81,"line":18985},[79,44918,33225],{"class":239},[79,44920,244],{"class":243},[79,44922,32947],{"class":96},[79,44924,44925],{"class":239},".b1(x)\n",[79,44927,44928,44930,44932,44934],{"class":81,"line":18990},[79,44929,33225],{"class":239},[79,44931,244],{"class":243},[79,44933,32947],{"class":96},[79,44935,44936],{"class":239},".b2(x)\n",[79,44938,44939,44941,44943,44945],{"class":81,"line":18995},[79,44940,33225],{"class":239},[79,44942,244],{"class":243},[79,44944,32947],{"class":96},[79,44946,44947],{"class":239},".b3(x)\n",[79,44949,44950,44952,44954,44956],{"class":81,"line":19009},[79,44951,33225],{"class":239},[79,44953,244],{"class":243},[79,44955,32947],{"class":96},[79,44957,44958],{"class":239},".b4(x)\n",[79,44960,44961,44963,44965,44967],{"class":81,"line":19021},[79,44962,33225],{"class":239},[79,44964,244],{"class":243},[79,44966,32947],{"class":96},[79,44968,44969],{"class":239},".b5(x)\n",[79,44971,44972,44974],{"class":81,"line":19026},[79,44973,16913],{"class":243},[79,44975,33333],{"class":239},[79,44977,44978],{"class":81,"line":19039},[79,44979,454],{"emptyLinePlaceholder":453},[79,44981,44982],{"class":81,"line":19044},[79,44983,44984],{"class":2440},"# 模型展示\n",[79,44986,44987,44989,44991,44993,44995],{"class":81,"line":19049},[79,44988,1329],{"class":243},[79,44990,1332],{"class":96},[79,44992,5155],{"class":243},[79,44994,33348],{"class":89},[79,44996,673],{"class":239},[79,44998,44999,45001,45003,45005,45007,45009,45011,45013,45015],{"class":81,"line":19054},[79,45000,33360],{"class":239},[79,45002,244],{"class":243},[79,45004,32577],{"class":239},[79,45006,33367],{"class":89},[79,45008,3929],{"class":243},[79,45010,33372],{"class":239},[79,45012,3926],{"class":243},[79,45014,32602],{"class":89},[79,45016,253],{"class":239},[79,45018,45019,45021,45023],{"class":81,"line":19067},[79,45020,33412],{"class":239},[79,45022,244],{"class":243},[79,45024,45025],{"class":239},"GoogLeNet(Inception).to(device)\n",[79,45027,45028,45030,45032,45034,45036,45038,45040,45042],{"class":81,"line":19072},[79,45029,1254],{"class":96},[79,45031,33424],{"class":239},[79,45033,1072],{"class":96},[79,45035,2752],{"class":239},[79,45037,33620],{"class":96},[79,45039,2752],{"class":239},[79,45041,33620],{"class":96},[79,45043,33437],{"class":239},[26,45045,45046],{"start":167},[29,45047,41297],{},[51,45049,45051],{"className":230,"code":45050,"language":232,"meta":57,"style":57},"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",[59,45052,45053,45059,45065,45075,45081,45091,45101,45111,45121,45131,45135,45146,45156,45160,45164,45168,45176,45188,45198,45214,45224,45256,45270,45280,45290,45294,45304,45318,45328,45338,45348,45354,45358,45362,45366,45370,45374,45382,45402,45406,45410,45414,45418,45422,45438,45442,45446,45454,45458,45462,45470,45474,45478,45482,45490,45494,45498,45502,45506,45514,45518,45526,45530,45538,45542,45550,45554,45562,45566,45570,45578,45582,45586,45590,45602,45626,45640,45644,45648,45652,45660,45664,45672,45676,45684,45688,45696,45700,45708,45712,45720,45724,45736,45740,45748,45752,45760,45764,45768,45772,45776,45784,45788,45804,45808,45816,45820,45824,45828,45832,45836,45840,45844,45860,45864,45876,45880,45892,45896,45908,45912,45920,45924,45932,45936,45940,45944,45950,45954,45962,45966,45982,45986,45994,45998,46014,46026,46030,46042,46046,46050,46058,46062,46066,46074,46078,46086,46090,46098,46102,46106,46148,46190,46194,46198,46214,46218,46234,46238,46242,46250,46254,46258,46270,46308,46312,46316,46324,46328,46342,46352,46358,46364,46370,46376,46380,46384,46390,46394,46398,46406,46410,46428,46432,46436,46440,46456,46460,46464,46468,46472,46476,46496,46516,46520,46524,46528,46536,46544,46548,46564,46584,46604,46608,46612,46620,46628,46632,46636,46640,46652,46656,46666,46674,46691],{"__ignoreMap":57},[79,45054,45055,45057],{"class":81,"line":82},[79,45056,432],{"class":243},[79,45058,33940],{"class":239},[79,45060,45061,45063],{"class":81,"line":167},[79,45062,432],{"class":243},[79,45064,33947],{"class":239},[79,45066,45067,45069,45071,45073],{"class":81,"line":178},[79,45068,432],{"class":243},[79,45070,33958],{"class":239},[79,45072,445],{"class":243},[79,45074,33963],{"class":239},[79,45076,45077,45079],{"class":81,"line":457},[79,45078,432],{"class":243},[79,45080,32521],{"class":239},[79,45082,45083,45085,45087,45089],{"class":81,"line":462},[79,45084,32862],{"class":243},[79,45086,33534],{"class":239},[79,45088,432],{"class":243},[79,45090,33980],{"class":239},[79,45092,45093,45095,45097,45099],{"class":81,"line":474},[79,45094,32862],{"class":243},[79,45096,33490],{"class":239},[79,45098,432],{"class":243},[79,45100,33495],{"class":239},[79,45102,45103,45105,45107,45109],{"class":81,"line":480},[79,45104,32862],{"class":243},[79,45106,33517],{"class":239},[79,45108,432],{"class":243},[79,45110,33522],{"class":239},[79,45112,45113,45115,45117,45119],{"class":81,"line":486},[79,45114,432],{"class":243},[79,45116,33534],{"class":239},[79,45118,445],{"class":243},[79,45120,33539],{"class":239},[79,45122,45123,45125,45127,45129],{"class":81,"line":491},[79,45124,432],{"class":243},[79,45126,33551],{"class":239},[79,45128,445],{"class":243},[79,45130,33556],{"class":239},[79,45132,45133],{"class":81,"line":497},[79,45134,34025],{"class":2440},[79,45136,45137,45139,45141,45143],{"class":81,"line":503},[79,45138,32862],{"class":243},[79,45140,34032],{"class":239},[79,45142,432],{"class":243},[79,45144,45145],{"class":239}," GoogLeNet, Inception\n",[79,45147,45148,45150,45152,45154],{"class":81,"line":509},[79,45149,32862],{"class":243},[79,45151,32865],{"class":239},[79,45153,432],{"class":243},[79,45155,32870],{"class":239},[79,45157,45158],{"class":81,"line":514},[79,45159,454],{"emptyLinePlaceholder":453},[79,45161,45162],{"class":81,"line":520},[79,45163,454],{"emptyLinePlaceholder":453},[79,45165,45166],{"class":81,"line":526},[79,45167,34060],{"class":2440},[79,45169,45170,45172,45174],{"class":81,"line":532},[79,45171,633],{"class":243},[79,45173,34067],{"class":85},[79,45175,34070],{"class":239},[79,45177,45178,45180,45182,45184,45186],{"class":81,"line":537},[79,45179,34075],{"class":239},[79,45181,244],{"class":243},[79,45183,33574],{"class":239},[79,45185,33582],{"class":89},[79,45187,33585],{"class":239},[79,45189,45190,45192,45194,45196],{"class":81,"line":543},[79,45191,34088],{"class":7412},[79,45193,244],{"class":243},[79,45195,33595],{"class":96},[79,45197,33585],{"class":239},[79,45199,45200,45202,45204,45206,45208,45210,45212],{"class":81,"line":549},[79,45201,34099],{"class":7412},[79,45203,244],{"class":243},[79,45205,33612],{"class":239},[79,45207,33615],{"class":7412},[79,45209,244],{"class":243},[79,45211,37563],{"class":96},[79,45213,33623],{"class":239},[79,45215,45216,45218,45220,45222],{"class":81,"line":555},[79,45217,34116],{"class":7412},[79,45219,244],{"class":243},[79,45221,33595],{"class":96},[79,45223,253],{"class":239},[79,45225,45226,45228,45230,45232,45234,45236,45238,45240,45242,45244,45246,45248,45250,45252,45254],{"class":81,"line":561},[79,45227,34127],{"class":239},[79,45229,244],{"class":243},[79,45231,34132],{"class":239},[79,45233,1264],{"class":96},[79,45235,685],{"class":239},[79,45237,34139],{"class":96},[79,45239,2829],{"class":243},[79,45241,9552],{"class":96},[79,45243,34146],{"class":239},[79,45245,1264],{"class":96},[79,45247,685],{"class":239},[79,45249,34153],{"class":96},[79,45251,2829],{"class":243},[79,45253,9552],{"class":96},[79,45255,34160],{"class":239},[79,45257,45258,45260,45262,45264,45266,45268],{"class":81,"line":567},[79,45259,34165],{"class":239},[79,45261,244],{"class":243},[79,45263,34170],{"class":239},[79,45265,33656],{"class":7412},[79,45267,244],{"class":243},[79,45269,33661],{"class":239},[79,45271,45272,45274,45276,45278],{"class":81,"line":573},[79,45273,34181],{"class":7412},[79,45275,244],{"class":243},[79,45277,2575],{"class":96},[79,45279,33585],{"class":239},[79,45281,45282,45284,45286,45288],{"class":81,"line":579},[79,45283,34193],{"class":7412},[79,45285,244],{"class":243},[79,45287,33595],{"class":96},[79,45289,33585],{"class":239},[79,45291,45292],{"class":81,"line":584},[79,45293,34204],{"class":2440},[79,45295,45296,45298,45300,45302],{"class":81,"line":590},[79,45297,34209],{"class":7412},[79,45299,244],{"class":243},[79,45301,2769],{"class":96},[79,45303,253],{"class":239},[79,45305,45306,45308,45310,45312,45314,45316],{"class":81,"line":596},[79,45307,34220],{"class":239},[79,45309,244],{"class":243},[79,45311,33653],{"class":239},[79,45313,33656],{"class":7412},[79,45315,244],{"class":243},[79,45317,34231],{"class":239},[79,45319,45320,45322,45324,45326],{"class":81,"line":602},[79,45321,34236],{"class":7412},[79,45323,244],{"class":243},[79,45325,2575],{"class":96},[79,45327,33585],{"class":239},[79,45329,45330,45332,45334,45336],{"class":81,"line":608},[79,45331,34247],{"class":7412},[79,45333,244],{"class":243},[79,45335,33595],{"class":96},[79,45337,33585],{"class":239},[79,45339,45340,45342,45344,45346],{"class":81,"line":614},[79,45341,34258],{"class":7412},[79,45343,244],{"class":243},[79,45345,2769],{"class":96},[79,45347,253],{"class":239},[79,45349,45350,45352],{"class":81,"line":620},[79,45351,711],{"class":243},[79,45353,34271],{"class":239},[79,45355,45356],{"class":81,"line":625},[79,45357,454],{"emptyLinePlaceholder":453},[79,45359,45360],{"class":81,"line":630},[79,45361,34280],{"class":2440},[79,45363,45364],{"class":81,"line":648},[79,45365,34285],{"class":2440},[79,45367,45368],{"class":81,"line":659},[79,45369,454],{"emptyLinePlaceholder":453},[79,45371,45372],{"class":81,"line":676},[79,45373,34294],{"class":2440},[79,45375,45376,45378,45380],{"class":81,"line":708},[79,45377,633],{"class":243},[79,45379,34301],{"class":85},[79,45381,34304],{"class":239},[79,45383,45384,45386,45388,45390,45392,45394,45396,45398,45400],{"class":81,"line":717},[79,45385,33360],{"class":239},[79,45387,244],{"class":243},[79,45389,32577],{"class":239},[79,45391,33367],{"class":89},[79,45393,3929],{"class":243},[79,45395,33372],{"class":239},[79,45397,3926],{"class":243},[79,45399,34323],{"class":89},[79,45401,253],{"class":239},[79,45403,45404],{"class":81,"line":722},[79,45405,454],{"emptyLinePlaceholder":453},[79,45407,45408],{"class":81,"line":727},[79,45409,454],{"emptyLinePlaceholder":453},[79,45411,45412],{"class":81,"line":738},[79,45413,34338],{"class":2440},[79,45415,45416],{"class":81,"line":753},[79,45417,34343],{"class":2440},[79,45419,45420],{"class":81,"line":768},[79,45421,34348],{"class":2440},[79,45423,45424,45426,45428,45430,45432,45434,45436],{"class":81,"line":776},[79,45425,34353],{"class":239},[79,45427,244],{"class":243},[79,45429,34358],{"class":239},[79,45431,34361],{"class":7412},[79,45433,244],{"class":243},[79,45435,34366],{"class":96},[79,45437,253],{"class":239},[79,45439,45440],{"class":81,"line":781},[79,45441,454],{"emptyLinePlaceholder":453},[79,45443,45444],{"class":81,"line":786},[79,45445,34377],{"class":2440},[79,45447,45448,45450,45452],{"class":81,"line":802},[79,45449,34382],{"class":239},[79,45451,244],{"class":243},[79,45453,34387],{"class":239},[79,45455,45456],{"class":81,"line":815},[79,45457,454],{"emptyLinePlaceholder":453},[79,45459,45460],{"class":81,"line":828},[79,45461,34396],{"class":2440},[79,45463,45464,45466,45468],{"class":81,"line":842},[79,45465,33412],{"class":239},[79,45467,244],{"class":243},[79,45469,34405],{"class":239},[79,45471,45472],{"class":81,"line":859},[79,45473,34410],{"class":2440},[79,45475,45476],{"class":81,"line":878},[79,45477,34415],{"class":2440},[79,45479,45480],{"class":81,"line":883},[79,45481,34420],{"class":2440},[79,45483,45484,45486,45488],{"class":81,"line":888},[79,45485,34425],{"class":239},[79,45487,244],{"class":243},[79,45489,34430],{"class":239},[79,45491,45492],{"class":81,"line":904},[79,45493,454],{"emptyLinePlaceholder":453},[79,45495,45496],{"class":81,"line":919},[79,45497,454],{"emptyLinePlaceholder":453},[79,45499,45500],{"class":81,"line":930},[79,45501,34443],{"class":2440},[79,45503,45504],{"class":81,"line":941},[79,45505,34448],{"class":2440},[79,45507,45508,45510,45512],{"class":81,"line":946},[79,45509,34453],{"class":239},[79,45511,244],{"class":243},[79,45513,34458],{"class":96},[79,45515,45516],{"class":81,"line":969},[79,45517,34463],{"class":2440},[79,45519,45520,45522,45524],{"class":81,"line":975},[79,45521,34468],{"class":239},[79,45523,244],{"class":243},[79,45525,34473],{"class":239},[79,45527,45528],{"class":81,"line":989},[79,45529,34478],{"class":2440},[79,45531,45532,45534,45536],{"class":81,"line":1003},[79,45533,34483],{"class":239},[79,45535,244],{"class":243},[79,45537,34473],{"class":239},[79,45539,45540],{"class":81,"line":1019},[79,45541,34492],{"class":2440},[79,45543,45544,45546,45548],{"class":81,"line":1024},[79,45545,34497],{"class":239},[79,45547,244],{"class":243},[79,45549,34473],{"class":239},[79,45551,45552],{"class":81,"line":1067},[79,45553,34506],{"class":2440},[79,45555,45556,45558,45560],{"class":81,"line":1101},[79,45557,34511],{"class":239},[79,45559,244],{"class":243},[79,45561,34473],{"class":239},[79,45563,45564],{"class":81,"line":1106},[79,45565,454],{"emptyLinePlaceholder":453},[79,45567,45568],{"class":81,"line":1112},[79,45569,34524],{"class":2440},[79,45571,45572,45574,45576],{"class":81,"line":1124},[79,45573,34529],{"class":239},[79,45575,244],{"class":243},[79,45577,34534],{"class":239},[79,45579,45580],{"class":81,"line":1129},[79,45581,454],{"emptyLinePlaceholder":453},[79,45583,45584],{"class":81,"line":1150},[79,45585,454],{"emptyLinePlaceholder":453},[79,45587,45588],{"class":81,"line":1161},[79,45589,34547],{"class":2440},[79,45591,45592,45594,45596,45598,45600],{"class":81,"line":1175},[79,45593,949],{"class":243},[79,45595,34554],{"class":239},[79,45597,955],{"class":243},[79,45599,958],{"class":96},[79,45601,34561],{"class":239},[79,45603,45604,45606,45608,45610,45612,45614,45616,45618,45620,45622,45624],{"class":81,"line":1194},[79,45605,34566],{"class":96},[79,45607,685],{"class":239},[79,45609,34571],{"class":89},[79,45611,34574],{"class":96},[79,45613,2957],{"class":89},[79,45615,34574],{"class":96},[79,45617,703],{"class":89},[79,45619,34583],{"class":239},[79,45621,320],{"class":243},[79,45623,1072],{"class":96},[79,45625,1191],{"class":239},[79,45627,45628,45630,45632,45634,45636,45638],{"class":81,"line":1211},[79,45629,34566],{"class":96},[79,45631,685],{"class":239},[79,45633,34598],{"class":89},[79,45635,2829],{"class":243},[79,45637,2820],{"class":96},[79,45639,253],{"class":239},[79,45641,45642],{"class":81,"line":1228},[79,45643,454],{"emptyLinePlaceholder":453},[79,45645,45646],{"class":81,"line":1246},[79,45647,34613],{"class":2440},[79,45649,45650],{"class":81,"line":1251},[79,45651,34618],{"class":2440},[79,45653,45654,45656,45658],{"class":81,"line":1274},[79,45655,34623],{"class":239},[79,45657,244],{"class":243},[79,45659,34458],{"class":96},[79,45661,45662],{"class":81,"line":1296},[79,45663,34632],{"class":2440},[79,45665,45666,45668,45670],{"class":81,"line":1316},[79,45667,34637],{"class":239},[79,45669,244],{"class":243},[79,45671,5290],{"class":96},[79,45673,45674],{"class":81,"line":1321},[79,45675,34646],{"class":2440},[79,45677,45678,45680,45682],{"class":81,"line":1326},[79,45679,34651],{"class":239},[79,45681,244],{"class":243},[79,45683,34458],{"class":96},[79,45685,45686],{"class":81,"line":1342},[79,45687,34660],{"class":2440},[79,45689,45690,45692,45694],{"class":81,"line":18985},[79,45691,34665],{"class":239},[79,45693,244],{"class":243},[79,45695,5290],{"class":96},[79,45697,45698],{"class":81,"line":18990},[79,45699,34674],{"class":2440},[79,45701,45702,45704,45706],{"class":81,"line":18995},[79,45703,34679],{"class":239},[79,45705,244],{"class":243},[79,45707,5290],{"class":96},[79,45709,45710],{"class":81,"line":19009},[79,45711,34688],{"class":2440},[79,45713,45714,45716,45718],{"class":81,"line":19021},[79,45715,34693],{"class":239},[79,45717,244],{"class":243},[79,45719,5290],{"class":96},[79,45721,45722],{"class":81,"line":19026},[79,45723,34702],{"class":2440},[79,45725,45726,45728,45730,45732,45734],{"class":81,"line":19039},[79,45727,5606],{"class":243},[79,45729,33720],{"class":239},[79,45731,955],{"class":243},[79,45733,33725],{"class":96},[79,45735,34715],{"class":239},[79,45737,45738],{"class":81,"line":19044},[79,45739,34720],{"class":2440},[79,45741,45742,45744,45746],{"class":81,"line":19049},[79,45743,34725],{"class":239},[79,45745,244],{"class":243},[79,45747,34730],{"class":239},[79,45749,45750],{"class":81,"line":19054},[79,45751,34735],{"class":2440},[79,45753,45754,45756,45758],{"class":81,"line":19067},[79,45755,34740],{"class":239},[79,45757,244],{"class":243},[79,45759,34745],{"class":239},[79,45761,45762],{"class":81,"line":19072},[79,45763,34751],{"class":2440},[79,45765,45766],{"class":81,"line":34748},[79,45767,34757],{"class":239},[79,45769,45770],{"class":81,"line":34754},[79,45771,34763],{"class":2440},[79,45773,45774],{"class":81,"line":34760},[79,45775,34769],{"class":2440},[79,45777,45778,45780,45782],{"class":81,"line":34766},[79,45779,34775],{"class":239},[79,45781,244],{"class":243},[79,45783,34780],{"class":239},[79,45785,45786],{"class":81,"line":34772},[79,45787,34786],{"class":2440},[79,45789,45790,45792,45794,45796,45798,45800,45802],{"class":81,"line":34783},[79,45791,34792],{"class":239},[79,45793,244],{"class":243},[79,45795,34797],{"class":239},[79,45797,34800],{"class":7412},[79,45799,244],{"class":243},[79,45801,1072],{"class":96},[79,45803,253],{"class":239},[79,45805,45806],{"class":81,"line":34789},[79,45807,34812],{"class":2440},[79,45809,45810,45812,45814],{"class":81,"line":34809},[79,45811,34818],{"class":239},[79,45813,244],{"class":243},[79,45815,34823],{"class":239},[79,45817,45818],{"class":81,"line":34815},[79,45819,34829],{"class":2440},[79,45821,45822],{"class":81,"line":34826},[79,45823,34835],{"class":239},[79,45825,45826],{"class":81,"line":34832},[79,45827,34841],{"class":2440},[79,45829,45830],{"class":81,"line":34838},[79,45831,34847],{"class":239},[79,45833,45834],{"class":81,"line":34844},[79,45835,34853],{"class":2440},[79,45837,45838],{"class":81,"line":34850},[79,45839,34859],{"class":239},[79,45841,45842],{"class":81,"line":34856},[79,45843,34865],{"class":2440},[79,45845,45846,45848,45850,45852,45854,45856,45858],{"class":81,"line":34862},[79,45847,34871],{"class":239},[79,45849,1118],{"class":243},[79,45851,34876],{"class":239},[79,45853,2829],{"class":243},[79,45855,34881],{"class":239},[79,45857,1030],{"class":96},[79,45859,253],{"class":239},[79,45861,45862],{"class":81,"line":34868},[79,45863,34891],{"class":2440},[79,45865,45866,45868,45870,45872,45874],{"class":81,"line":34888},[79,45867,34897],{"class":239},[79,45869,1118],{"class":243},[79,45871,34902],{"class":239},[79,45873,5155],{"class":243},[79,45875,34907],{"class":239},[79,45877,45878],{"class":81,"line":34894},[79,45879,34913],{"class":2440},[79,45881,45882,45884,45886,45888,45890],{"class":81,"line":34910},[79,45883,34919],{"class":239},[79,45885,1118],{"class":243},[79,45887,34881],{"class":239},[79,45889,1030],{"class":96},[79,45891,253],{"class":239},[79,45893,45894],{"class":81,"line":34916},[79,45895,34933],{"class":2440},[79,45897,45898,45900,45902,45904,45906],{"class":81,"line":34930},[79,45899,5606],{"class":243},[79,45901,34941],{"class":239},[79,45903,955],{"class":243},[79,45905,33725],{"class":96},[79,45907,34948],{"class":239},[79,45909,45910],{"class":81,"line":34936},[79,45911,34954],{"class":2440},[79,45913,45914,45916,45918],{"class":81,"line":34951},[79,45915,34725],{"class":239},[79,45917,244],{"class":243},[79,45919,34730],{"class":239},[79,45921,45922],{"class":81,"line":34957},[79,45923,34969],{"class":2440},[79,45925,45926,45928,45930],{"class":81,"line":34966},[79,45927,34740],{"class":239},[79,45929,244],{"class":243},[79,45931,34745],{"class":239},[79,45933,45934],{"class":81,"line":34972},[79,45935,34984],{"class":2440},[79,45937,45938],{"class":81,"line":34981},[79,45939,34990],{"class":239},[79,45941,45942],{"class":81,"line":34987},[79,45943,38470],{"class":2440},[79,45945,45946,45948],{"class":81,"line":34993},[79,45947,34996],{"class":243},[79,45949,34999],{"class":239},[79,45951,45952],{"class":81,"line":35002},[79,45953,35005],{"class":2440},[79,45955,45956,45958,45960],{"class":81,"line":35008},[79,45957,38485],{"class":239},[79,45959,244],{"class":243},[79,45961,34780],{"class":239},[79,45963,45964],{"class":81,"line":35019},[79,45965,35022],{"class":2440},[79,45967,45968,45970,45972,45974,45976,45978,45980],{"class":81,"line":35025},[79,45969,38498],{"class":239},[79,45971,244],{"class":243},[79,45973,34797],{"class":239},[79,45975,34800],{"class":7412},[79,45977,244],{"class":243},[79,45979,1072],{"class":96},[79,45981,253],{"class":239},[79,45983,45984],{"class":81,"line":35044},[79,45985,35047],{"class":2440},[79,45987,45988,45990,45992],{"class":81,"line":35050},[79,45989,38519],{"class":239},[79,45991,244],{"class":243},[79,45993,34823],{"class":239},[79,45995,45996],{"class":81,"line":35061},[79,45997,35064],{"class":2440},[79,45999,46000,46002,46004,46006,46008,46010,46012],{"class":81,"line":35067},[79,46001,38532],{"class":239},[79,46003,1118],{"class":243},[79,46005,38537],{"class":239},[79,46007,2829],{"class":243},[79,46009,34881],{"class":239},[79,46011,1030],{"class":96},[79,46013,253],{"class":239},[79,46015,46016,46018,46020,46022,46024],{"class":81,"line":35087},[79,46017,38550],{"class":239},[79,46019,1118],{"class":243},[79,46021,34902],{"class":239},[79,46023,5155],{"class":243},[79,46025,34907],{"class":239},[79,46027,46028],{"class":81,"line":35103},[79,46029,38563],{"class":2440},[79,46031,46032,46034,46036,46038,46040],{"class":81,"line":35109},[79,46033,38568],{"class":239},[79,46035,1118],{"class":243},[79,46037,34881],{"class":239},[79,46039,1030],{"class":96},[79,46041,253],{"class":239},[79,46043,46044],{"class":81,"line":35123},[79,46045,35126],{"class":2440},[79,46047,46048],{"class":81,"line":35129},[79,46049,35132],{"class":2440},[79,46051,46052,46054,46056],{"class":81,"line":35135},[79,46053,35138],{"class":239},[79,46055,2957],{"class":243},[79,46057,35143],{"class":239},[79,46059,46060],{"class":81,"line":35146},[79,46061,35149],{"class":2440},[79,46063,46064],{"class":81,"line":35152},[79,46065,35155],{"class":2440},[79,46067,46068,46070,46072],{"class":81,"line":35158},[79,46069,35161],{"class":239},[79,46071,2957],{"class":243},[79,46073,35143],{"class":239},[79,46075,46076],{"class":81,"line":35168},[79,46077,35171],{"class":2440},[79,46079,46080,46082,46084],{"class":81,"line":35174},[79,46081,35177],{"class":239},[79,46083,2957],{"class":243},[79,46085,35182],{"class":239},[79,46087,46088],{"class":81,"line":35185},[79,46089,35188],{"class":2440},[79,46091,46092,46094,46096],{"class":81,"line":35191},[79,46093,35194],{"class":239},[79,46095,2957],{"class":243},[79,46097,35182],{"class":239},[79,46099,46100],{"class":81,"line":35201},[79,46101,454],{"emptyLinePlaceholder":453},[79,46103,46104],{"class":81,"line":35206},[79,46105,35209],{"class":2440},[79,46107,46108,46110,46112,46114,46116,46118,46120,46122,46124,46126,46128,46130,46132,46134,46136,46138,46140,46142,46144,46146],{"class":81,"line":35212},[79,46109,34566],{"class":96},[79,46111,685],{"class":239},[79,46113,5795],{"class":89},[79,46115,34574],{"class":96},[79,46117,35223],{"class":89},[79,46119,694],{"class":96},[79,46121,35228],{"class":243},[79,46123,700],{"class":96},[79,46125,35233],{"class":89},[79,46127,694],{"class":96},[79,46129,35228],{"class":243},[79,46131,700],{"class":96},[79,46133,5795],{"class":89},[79,46135,35244],{"class":239},[79,46137,320],{"class":243},[79,46139,1072],{"class":96},[79,46141,35251],{"class":239},[79,46143,320],{"class":243},[79,46145,1072],{"class":96},[79,46147,35258],{"class":239},[79,46149,46150,46152,46154,46156,46158,46160,46162,46164,46166,46168,46170,46172,46174,46176,46178,46180,46182,46184,46186,46188],{"class":81,"line":35261},[79,46151,34566],{"class":96},[79,46153,685],{"class":239},[79,46155,5795],{"class":89},[79,46157,34574],{"class":96},[79,46159,35272],{"class":89},[79,46161,694],{"class":96},[79,46163,35228],{"class":243},[79,46165,700],{"class":96},[79,46167,35281],{"class":89},[79,46169,694],{"class":96},[79,46171,35228],{"class":243},[79,46173,700],{"class":96},[79,46175,5795],{"class":89},[79,46177,35292],{"class":239},[79,46179,320],{"class":243},[79,46181,1072],{"class":96},[79,46183,35299],{"class":239},[79,46185,320],{"class":243},[79,46187,1072],{"class":96},[79,46189,35258],{"class":239},[79,46191,46192],{"class":81,"line":35308},[79,46193,454],{"emptyLinePlaceholder":453},[79,46195,46196],{"class":81,"line":35313},[79,46197,35316],{"class":2440},[79,46199,46200,46202,46204,46206,46208,46210,46212],{"class":81,"line":35319},[79,46201,1132],{"class":243},[79,46203,35324],{"class":239},[79,46205,320],{"class":243},[79,46207,1072],{"class":96},[79,46209,3311],{"class":239},[79,46211,3330],{"class":243},[79,46213,35335],{"class":239},[79,46215,46216],{"class":81,"line":35338},[79,46217,35341],{"class":2440},[79,46219,46220,46222,46224,46226,46228,46230,46232],{"class":81,"line":35344},[79,46221,35347],{"class":239},[79,46223,797],{"class":96},[79,46225,244],{"class":243},[79,46227,35354],{"class":239},[79,46229,320],{"class":243},[79,46231,1072],{"class":96},[79,46233,35361],{"class":239},[79,46235,46236],{"class":81,"line":35364},[79,46237,35367],{"class":2440},[79,46239,46240],{"class":81,"line":35370},[79,46241,35373],{"class":2440},[79,46243,46244,46246,46248],{"class":81,"line":35376},[79,46245,35379],{"class":239},[79,46247,244],{"class":243},[79,46249,34430],{"class":239},[79,46251,46252],{"class":81,"line":35386},[79,46253,454],{"emptyLinePlaceholder":453},[79,46255,46256],{"class":81,"line":35391},[79,46257,35394],{"class":2440},[79,46259,46260,46262,46264,46266,46268],{"class":81,"line":35397},[79,46261,35400],{"class":239},[79,46263,244],{"class":243},[79,46265,35405],{"class":239},[79,46267,320],{"class":243},[79,46269,35410],{"class":239},[79,46271,46272,46274,46276,46278,46280,46282,46284,46286,46288,46290,46292,46294,46296,46298,46300,46302,46304,46306],{"class":81,"line":35413},[79,46273,34566],{"class":96},[79,46275,685],{"class":239},[79,46277,35420],{"class":89},[79,46279,694],{"class":96},[79,46281,35425],{"class":243},[79,46283,700],{"class":96},[79,46285,2917],{"class":89},[79,46287,694],{"class":96},[79,46289,35425],{"class":243},[79,46291,700],{"class":96},[79,46293,35438],{"class":89},[79,46295,35441],{"class":239},[79,46297,35444],{"class":243},[79,46299,3279],{"class":96},[79,46301,35449],{"class":239},[79,46303,1137],{"class":243},[79,46305,3279],{"class":96},[79,46307,1191],{"class":239},[79,46309,46310],{"class":81,"line":35458},[79,46311,38847],{"class":2440},[79,46313,46314],{"class":81,"line":35464},[79,46315,38852],{"class":2440},[79,46317,46318,46320,46322],{"class":81,"line":35470},[79,46319,38857],{"class":239},[79,46321,35482],{"class":89},[79,46323,253],{"class":239},[79,46325,46326],{"class":81,"line":35476},[79,46327,35502],{"class":2440},[79,46329,46330,46332,46334,46336,46338,46340],{"class":81,"line":35487},[79,46331,35508],{"class":239},[79,46333,244],{"class":243},[79,46335,35513],{"class":239},[79,46337,35516],{"class":7412},[79,46339,244],{"class":243},[79,46341,3782],{"class":239},[79,46343,46344,46346,46348,46350],{"class":81,"line":35493},[79,46345,35526],{"class":89},[79,46347,3232],{"class":239},[79,46349,35531],{"class":96},[79,46351,35534],{"class":239},[79,46353,46354,46356],{"class":81,"line":35499},[79,46355,35540],{"class":89},[79,46357,35543],{"class":239},[79,46359,46360,46362],{"class":81,"line":35505},[79,46361,35549],{"class":89},[79,46363,35552],{"class":239},[79,46365,46366,46368],{"class":81,"line":35523},[79,46367,35558],{"class":89},[79,46369,35561],{"class":239},[79,46371,46372,46374],{"class":81,"line":35537},[79,46373,35567],{"class":89},[79,46375,35570],{"class":239},[79,46377,46378],{"class":81,"line":35546},[79,46379,35576],{"class":239},[79,46381,46382],{"class":81,"line":35555},[79,46383,35582],{"class":2440},[79,46385,46386,46388],{"class":81,"line":35564},[79,46387,711],{"class":243},[79,46389,35590],{"class":239},[79,46391,46392],{"class":81,"line":35573},[79,46393,454],{"emptyLinePlaceholder":453},[79,46395,46396],{"class":81,"line":35579},[79,46397,35601],{"class":2440},[79,46399,46400,46402,46404],{"class":81,"line":35585},[79,46401,633],{"class":243},[79,46403,35609],{"class":85},[79,46405,35612],{"class":239},[79,46407,46408],{"class":81,"line":35593},[79,46409,35618],{"class":2440},[79,46411,46412,46414,46416,46418,46420,46422,46424,46426],{"class":81,"line":35598},[79,46413,35624],{"class":239},[79,46415,33811],{"class":7412},[79,46417,244],{"class":243},[79,46419,685],{"class":239},[79,46421,2872],{"class":96},[79,46423,2752],{"class":239},[79,46425,2668],{"class":96},[79,46427,1191],{"class":239},[79,46429,46430],{"class":81,"line":35604},[79,46431,35644],{"class":2440},[79,46433,46434],{"class":81,"line":35615},[79,46435,35650],{"class":2440},[79,46437,46438],{"class":81,"line":35621},[79,46439,35656],{"class":2440},[79,46441,46442,46444,46446,46448,46450,46452,46454],{"class":81,"line":35641},[79,46443,33845],{"class":239},[79,46445,1072],{"class":96},[79,46447,2752],{"class":239},[79,46449,1049],{"class":96},[79,46451,2752],{"class":239},[79,46453,1072],{"class":96},[79,46455,253],{"class":239},[79,46457,46458],{"class":81,"line":35647},[79,46459,35679],{"class":2440},[79,46461,46462],{"class":81,"line":35653},[79,46463,35685],{"class":2440},[79,46465,46466],{"class":81,"line":35659},[79,46467,35691],{"class":2440},[79,46469,46470],{"class":81,"line":35676},[79,46471,35697],{"class":2440},[79,46473,46474],{"class":81,"line":35682},[79,46475,35703],{"class":2440},[79,46477,46478,46480,46482,46484,46486,46488,46490,46492,46494],{"class":81,"line":35688},[79,46479,35709],{"class":239},[79,46481,35712],{"class":89},[79,46483,35715],{"class":239},[79,46485,35718],{"class":89},[79,46487,2752],{"class":239},[79,46489,35723],{"class":7412},[79,46491,244],{"class":243},[79,46493,35728],{"class":89},[79,46495,253],{"class":239},[79,46497,46498,46500,46502,46504,46506,46508,46510,46512,46514],{"class":81,"line":35694},[79,46499,35709],{"class":239},[79,46501,35712],{"class":89},[79,46503,35740],{"class":239},[79,46505,35743],{"class":89},[79,46507,2752],{"class":239},[79,46509,35723],{"class":7412},[79,46511,244],{"class":243},[79,46513,35752],{"class":89},[79,46515,253],{"class":239},[79,46517,46518],{"class":81,"line":35700},[79,46519,35760],{"class":2440},[79,46521,46522],{"class":81,"line":35706},[79,46523,35766],{"class":239},[79,46525,46526],{"class":81,"line":35733},[79,46527,35772],{"class":2440},[79,46529,46530,46532,46534],{"class":81,"line":35757},[79,46531,35778],{"class":239},[79,46533,35781],{"class":89},[79,46535,253],{"class":239},[79,46537,46538,46540,46542],{"class":81,"line":35763},[79,46539,35789],{"class":239},[79,46541,35792],{"class":89},[79,46543,253],{"class":239},[79,46545,46546],{"class":81,"line":35769},[79,46547,35800],{"class":2440},[79,46549,46550,46552,46554,46556,46558,46560,46562],{"class":81,"line":35775},[79,46551,33845],{"class":239},[79,46553,1072],{"class":96},[79,46555,2752],{"class":239},[79,46557,1049],{"class":96},[79,46559,2752],{"class":239},[79,46561,1049],{"class":96},[79,46563,253],{"class":239},[79,46565,46566,46568,46570,46572,46574,46576,46578,46580,46582],{"class":81,"line":35786},[79,46567,35709],{"class":239},[79,46569,35712],{"class":89},[79,46571,35827],{"class":239},[79,46573,35718],{"class":89},[79,46575,2752],{"class":239},[79,46577,35723],{"class":7412},[79,46579,244],{"class":243},[79,46581,35838],{"class":89},[79,46583,253],{"class":239},[79,46585,46586,46588,46590,46592,46594,46596,46598,46600,46602],{"class":81,"line":35797},[79,46587,35709],{"class":239},[79,46589,35712],{"class":89},[79,46591,35850],{"class":239},[79,46593,35743],{"class":89},[79,46595,2752],{"class":239},[79,46597,35723],{"class":7412},[79,46599,244],{"class":243},[79,46601,35861],{"class":89},[79,46603,253],{"class":239},[79,46605,46606],{"class":81,"line":35803},[79,46607,35869],{"class":2440},[79,46609,46610],{"class":81,"line":35820},[79,46611,35766],{"class":239},[79,46613,46614,46616,46618],{"class":81,"line":35843},[79,46615,35778],{"class":239},[79,46617,35712],{"class":89},[79,46619,253],{"class":239},[79,46621,46622,46624,46626],{"class":81,"line":35866},[79,46623,35789],{"class":239},[79,46625,35891],{"class":89},[79,46627,253],{"class":239},[79,46629,46630],{"class":81,"line":35872},[79,46631,35899],{"class":239},[79,46633,46634],{"class":81,"line":35877},[79,46635,454],{"emptyLinePlaceholder":453},[79,46637,46638],{"class":81,"line":35886},[79,46639,35910],{"class":2440},[79,46641,46642,46644,46646,46648,46650],{"class":81,"line":35896},[79,46643,1329],{"class":243},[79,46645,1332],{"class":96},[79,46647,5155],{"class":243},[79,46649,33348],{"class":89},[79,46651,673],{"class":239},[79,46653,46654],{"class":81,"line":35902},[79,46655,35929],{"class":2440},[79,46657,46658,46661,46663],{"class":81,"line":35907},[79,46659,46660],{"class":239},"    GoogLeNet",[79,46662,244],{"class":243},[79,46664,46665],{"class":239},"GoogLeNet(Inception)\n",[79,46667,46668,46670,46672],{"class":81,"line":35913},[79,46669,35946],{"class":239},[79,46671,244],{"class":243},[79,46673,35951],{"class":239},[79,46675,46676,46678,46680,46683,46685,46687,46689],{"class":81,"line":35926},[79,46677,35508],{"class":239},[79,46679,244],{"class":243},[79,46681,46682],{"class":239},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[79,46684,35964],{"class":7412},[79,46686,244],{"class":243},[79,46688,3321],{"class":96},[79,46690,253],{"class":239},[79,46692,46693],{"class":81,"line":35932},[79,46694,35976],{"class":239},[26,46696,46697],{"start":178},[29,46698,42688],{},[51,46700,46702],{"className":230,"code":46701,"language":232,"meta":57,"style":57},"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",[59,46703,46704,46710,46720,46730,46734,46744,46755,46759,46763,46767,46775,46791,46801,46817,46827,46841,46845,46855,46865,46875,46881,46885,46889,46897,46901,46917,46925,46929,46933,46941,46949,46953,46957,46961,46965,46971,46975,46985,46993,47001,47005,47009,47013,47021,47025,47041,47045,47049,47053,47065,47069,47081,47085,47089,47101,47105,47115,47119,47123,47135,47139,47147,47151,47155,47163,47167,47175,47179,47183,47187,47191,47195,47211,47219,47223,47227,47275,47281,47285,47295,47303,47311,47315,47319,47323,47327,47335,47339,47355,47359,47367,47375],{"__ignoreMap":57},[79,46705,46706,46708],{"class":81,"line":82},[79,46707,432],{"class":243},[79,46709,32521],{"class":239},[79,46711,46712,46714,46716,46718],{"class":81,"line":167},[79,46713,432],{"class":243},[79,46715,33534],{"class":239},[79,46717,445],{"class":243},[79,46719,33539],{"class":239},[79,46721,46722,46724,46726,46728],{"class":81,"line":178},[79,46723,32862],{"class":243},[79,46725,33517],{"class":239},[79,46727,432],{"class":243},[79,46729,33522],{"class":239},[79,46731,46732],{"class":81,"line":457},[79,46733,36037],{"class":2440},[79,46735,46736,46738,46740,46742],{"class":81,"line":462},[79,46737,32862],{"class":243},[79,46739,33490],{"class":239},[79,46741,432],{"class":243},[79,46743,33495],{"class":239},[79,46745,46746,46748,46750,46752],{"class":81,"line":474},[79,46747,32862],{"class":243},[79,46749,34032],{"class":239},[79,46751,432],{"class":243},[79,46753,46754],{"class":239}," GoogLeNet,Inception\n",[79,46756,46757],{"class":81,"line":480},[79,46758,454],{"emptyLinePlaceholder":453},[79,46760,46761],{"class":81,"line":486},[79,46762,454],{"emptyLinePlaceholder":453},[79,46764,46765],{"class":81,"line":491},[79,46766,36066],{"class":2440},[79,46768,46769,46771,46773],{"class":81,"line":497},[79,46770,633],{"class":243},[79,46772,36073],{"class":85},[79,46774,34070],{"class":239},[79,46776,46777,46779,46781,46783,46785,46787,46789],{"class":81,"line":503},[79,46778,36080],{"class":239},[79,46780,244],{"class":243},[79,46782,33574],{"class":239},[79,46784,33577],{"class":7412},[79,46786,244],{"class":243},[79,46788,33582],{"class":89},[79,46790,33585],{"class":239},[79,46792,46793,46795,46797,46799],{"class":81,"line":509},[79,46794,36097],{"class":7412},[79,46796,244],{"class":243},[79,46798,36102],{"class":96},[79,46800,33585],{"class":239},[79,46802,46803,46805,46807,46809,46811,46813,46815],{"class":81,"line":514},[79,46804,36109],{"class":7412},[79,46806,244],{"class":243},[79,46808,33612],{"class":239},[79,46810,33615],{"class":7412},[79,46812,244],{"class":243},[79,46814,37563],{"class":96},[79,46816,33623],{"class":239},[79,46818,46819,46821,46823,46825],{"class":81,"line":520},[79,46820,36126],{"class":7412},[79,46822,244],{"class":243},[79,46824,33595],{"class":96},[79,46826,253],{"class":239},[79,46828,46829,46831,46833,46835,46837,46839],{"class":81,"line":526},[79,46830,36137],{"class":239},[79,46832,244],{"class":243},[79,46834,33653],{"class":239},[79,46836,33656],{"class":7412},[79,46838,244],{"class":243},[79,46840,36148],{"class":239},[79,46842,46843],{"class":81,"line":532},[79,46844,36153],{"class":2440},[79,46846,46847,46849,46851,46853],{"class":81,"line":537},[79,46848,36158],{"class":7412},[79,46850,244],{"class":243},[79,46852,1072],{"class":96},[79,46854,33585],{"class":239},[79,46856,46857,46859,46861,46863],{"class":81,"line":543},[79,46858,36169],{"class":7412},[79,46860,244],{"class":243},[79,46862,33595],{"class":96},[79,46864,33585],{"class":239},[79,46866,46867,46869,46871,46873],{"class":81,"line":549},[79,46868,36180],{"class":7412},[79,46870,244],{"class":243},[79,46872,1030],{"class":96},[79,46874,253],{"class":239},[79,46876,46877,46879],{"class":81,"line":555},[79,46878,711],{"class":243},[79,46880,36193],{"class":239},[79,46882,46883],{"class":81,"line":561},[79,46884,454],{"emptyLinePlaceholder":453},[79,46886,46887],{"class":81,"line":567},[79,46888,36202],{"class":2440},[79,46890,46891,46893,46895],{"class":81,"line":573},[79,46892,633],{"class":243},[79,46894,36209],{"class":85},[79,46896,36212],{"class":239},[79,46898,46899],{"class":81,"line":579},[79,46900,36217],{"class":2440},[79,46902,46903,46905,46907,46909,46911,46913,46915],{"class":81,"line":584},[79,46904,33360],{"class":239},[79,46906,244],{"class":243},[79,46908,33367],{"class":89},[79,46910,3929],{"class":243},[79,46912,33372],{"class":239},[79,46914,3926],{"class":243},[79,46916,36234],{"class":89},[79,46918,46919,46921,46923],{"class":81,"line":590},[79,46920,33412],{"class":239},[79,46922,244],{"class":243},[79,46924,34405],{"class":239},[79,46926,46927],{"class":81,"line":596},[79,46928,454],{"emptyLinePlaceholder":453},[79,46930,46931],{"class":81,"line":602},[79,46932,36251],{"class":2440},[79,46934,46935,46937,46939],{"class":81,"line":608},[79,46936,36256],{"class":239},[79,46938,244],{"class":243},[79,46940,34458],{"class":96},[79,46942,46943,46945,46947],{"class":81,"line":614},[79,46944,36265],{"class":239},[79,46946,244],{"class":243},[79,46948,5290],{"class":96},[79,46950,46951],{"class":81,"line":620},[79,46952,454],{"emptyLinePlaceholder":453},[79,46954,46955],{"class":81,"line":625},[79,46956,36278],{"class":2440},[79,46958,46959],{"class":81,"line":630},[79,46960,36283],{"class":2440},[79,46962,46963],{"class":81,"line":648},[79,46964,36288],{"class":2440},[79,46966,46967,46969],{"class":81,"line":659},[79,46968,36293],{"class":243},[79,46970,34999],{"class":239},[79,46972,46973],{"class":81,"line":676},[79,46974,36300],{"class":2440},[79,46976,46977,46979,46981,46983],{"class":81,"line":708},[79,46978,5606],{"class":243},[79,46980,36307],{"class":239},[79,46982,955],{"class":243},[79,46984,36312],{"class":239},[79,46986,46987,46989,46991],{"class":81,"line":717},[79,46988,36317],{"class":239},[79,46990,244],{"class":243},[79,46992,36322],{"class":239},[79,46994,46995,46997,46999],{"class":81,"line":722},[79,46996,36327],{"class":239},[79,46998,244],{"class":243},[79,47000,36332],{"class":239},[79,47002,47003],{"class":81,"line":727},[79,47004,36337],{"class":2440},[79,47006,47007],{"class":81,"line":738},[79,47008,34990],{"class":239},[79,47010,47011],{"class":81,"line":753},[79,47012,36346],{"class":2440},[79,47014,47015,47017,47019],{"class":81,"line":768},[79,47016,34775],{"class":239},[79,47018,244],{"class":243},[79,47020,36355],{"class":239},[79,47022,47023],{"class":81,"line":776},[79,47024,36360],{"class":2440},[79,47026,47027,47029,47031,47033,47035,47037,47039],{"class":81,"line":781},[79,47028,34792],{"class":239},[79,47030,244],{"class":243},[79,47032,34797],{"class":239},[79,47034,34800],{"class":7412},[79,47036,244],{"class":243},[79,47038,1072],{"class":96},[79,47040,253],{"class":239},[79,47042,47043],{"class":81,"line":786},[79,47044,36381],{"class":2440},[79,47046,47047],{"class":81,"line":802},[79,47048,36386],{"class":2440},[79,47050,47051],{"class":81,"line":815},[79,47052,36391],{"class":2440},[79,47054,47055,47057,47059,47061,47063],{"class":81,"line":828},[79,47056,36396],{"class":239},[79,47058,1118],{"class":243},[79,47060,34902],{"class":239},[79,47062,5155],{"class":243},[79,47064,36405],{"class":239},[79,47066,47067],{"class":81,"line":842},[79,47068,36410],{"class":2440},[79,47070,47071,47073,47075,47077,47079],{"class":81,"line":859},[79,47072,36415],{"class":239},[79,47074,1118],{"class":243},[79,47076,36420],{"class":239},[79,47078,1030],{"class":96},[79,47080,253],{"class":239},[79,47082,47083],{"class":81,"line":878},[79,47084,454],{"emptyLinePlaceholder":453},[79,47086,47087],{"class":81,"line":883},[79,47088,36433],{"class":2440},[79,47090,47091,47093,47095,47097,47099],{"class":81,"line":888},[79,47092,36438],{"class":239},[79,47094,244],{"class":243},[79,47096,36443],{"class":239},[79,47098,2957],{"class":243},[79,47100,36448],{"class":239},[79,47102,47103],{"class":81,"line":904},[79,47104,36453],{"class":2440},[79,47106,47107,47109,47111,47113],{"class":81,"line":919},[79,47108,34566],{"class":96},[79,47110,685],{"class":239},[79,47112,36462],{"class":89},[79,47114,36465],{"class":239},[79,47116,47117],{"class":81,"line":930},[79,47118,454],{"emptyLinePlaceholder":453},[79,47120,47121],{"class":81,"line":941},[79,47122,36474],{"class":2440},[79,47124,47125,47127,47129,47131,47133],{"class":81,"line":946},[79,47126,1329],{"class":243},[79,47128,1332],{"class":96},[79,47130,5155],{"class":243},[79,47132,33348],{"class":89},[79,47134,673],{"class":239},[79,47136,47137],{"class":81,"line":969},[79,47138,36491],{"class":2440},[79,47140,47141,47143,47145],{"class":81,"line":975},[79,47142,33412],{"class":239},[79,47144,244],{"class":243},[79,47146,46665],{"class":239},[79,47148,47149],{"class":81,"line":989},[79,47150,36504],{"class":2440},[79,47152,47153],{"class":81,"line":1003},[79,47154,36509],{"class":2440},[79,47156,47157,47159,47161],{"class":81,"line":1019},[79,47158,36514],{"class":239},[79,47160,36517],{"class":89},[79,47162,1191],{"class":239},[79,47164,47165],{"class":81,"line":1024},[79,47166,36524],{"class":2440},[79,47168,47169,47171,47173],{"class":81,"line":1067},[79,47170,36137],{"class":239},[79,47172,244],{"class":243},[79,47174,36533],{"class":239},[79,47176,47177],{"class":81,"line":1101},[79,47178,36538],{"class":2440},[79,47180,47181],{"class":81,"line":1106},[79,47182,36543],{"class":239},[79,47184,47185],{"class":81,"line":1112},[79,47186,454],{"emptyLinePlaceholder":453},[79,47188,47189],{"class":81,"line":1124},[79,47190,36552],{"class":2440},[79,47192,47193],{"class":81,"line":1129},[79,47194,36557],{"class":2440},[79,47196,47197,47199,47201,47203,47205,47207,47209],{"class":81,"line":1150},[79,47198,33360],{"class":239},[79,47200,244],{"class":243},[79,47202,33367],{"class":89},[79,47204,3929],{"class":243},[79,47206,33372],{"class":239},[79,47208,3926],{"class":243},[79,47210,36234],{"class":89},[79,47212,47213,47215,47217],{"class":81,"line":1161},[79,47214,33412],{"class":239},[79,47216,244],{"class":243},[79,47218,34405],{"class":239},[79,47220,47221],{"class":81,"line":1175},[79,47222,36586],{"class":2440},[79,47224,47225],{"class":81,"line":1194},[79,47226,36591],{"class":2440},[79,47228,47229,47231,47233,47235,47237,47239,47241,47243,47245,47247,47249,47251,47253,47255,47257,47259,47261,47263,47265,47267,47269,47271,47273],{"class":81,"line":1211},[79,47230,36596],{"class":239},[79,47232,244],{"class":243},[79,47234,3263],{"class":239},[79,47236,36603],{"class":89},[79,47238,2752],{"class":239},[79,47240,36608],{"class":89},[79,47242,2752],{"class":239},[79,47244,36613],{"class":89},[79,47246,2752],{"class":239},[79,47248,36618],{"class":89},[79,47250,2752],{"class":239},[79,47252,36623],{"class":89},[79,47254,2752],{"class":239},[79,47256,36628],{"class":89},[79,47258,2752],{"class":239},[79,47260,36633],{"class":89},[79,47262,2752],{"class":239},[79,47264,36638],{"class":89},[79,47266,2752],{"class":239},[79,47268,36643],{"class":89},[79,47270,2752],{"class":239},[79,47272,36648],{"class":89},[79,47274,35361],{"class":239},[79,47276,47277,47279],{"class":81,"line":1228},[79,47278,36293],{"class":243},[79,47280,34999],{"class":239},[79,47282,47283],{"class":81,"line":1246},[79,47284,36661],{"class":2440},[79,47286,47287,47289,47291,47293],{"class":81,"line":1251},[79,47288,5606],{"class":243},[79,47290,36668],{"class":239},[79,47292,955],{"class":243},[79,47294,36312],{"class":239},[79,47296,47297,47299,47301],{"class":81,"line":1274},[79,47298,34725],{"class":239},[79,47300,244],{"class":243},[79,47302,34730],{"class":239},[79,47304,47305,47307,47309],{"class":81,"line":1296},[79,47306,34740],{"class":239},[79,47308,244],{"class":243},[79,47310,34745],{"class":239},[79,47312,47313],{"class":81,"line":1316},[79,47314,454],{"emptyLinePlaceholder":453},[79,47316,47317],{"class":81,"line":1321},[79,47318,36697],{"class":2440},[79,47320,47321],{"class":81,"line":1326},[79,47322,34990],{"class":239},[79,47324,47325],{"class":81,"line":1342},[79,47326,36706],{"class":2440},[79,47328,47329,47331,47333],{"class":81,"line":18985},[79,47330,34775],{"class":239},[79,47332,244],{"class":243},[79,47334,34780],{"class":239},[79,47336,47337],{"class":81,"line":18990},[79,47338,36719],{"class":2440},[79,47340,47341,47343,47345,47347,47349,47351,47353],{"class":81,"line":18995},[79,47342,34792],{"class":239},[79,47344,244],{"class":243},[79,47346,34797],{"class":239},[79,47348,34800],{"class":7412},[79,47350,244],{"class":243},[79,47352,1072],{"class":96},[79,47354,253],{"class":239},[79,47356,47357],{"class":81,"line":19009},[79,47358,36740],{"class":2440},[79,47360,47361,47363,47365],{"class":81,"line":19021},[79,47362,36745],{"class":239},[79,47364,244],{"class":243},[79,47366,36750],{"class":239},[79,47368,47369,47371,47373],{"class":81,"line":19026},[79,47370,36755],{"class":239},[79,47372,244],{"class":243},[79,47374,36760],{"class":239},[79,47376,47377,47379,47381,47383,47385,47387,47389,47391],{"class":81,"line":19039},[79,47378,1164],{"class":96},[79,47380,685],{"class":239},[79,47382,36769],{"class":89},[79,47384,36772],{"class":239},[79,47386,36775],{"class":89},[79,47388,2752],{"class":239},[79,47390,36780],{"class":89},[79,47392,36783],{"class":239},[265,47394,47396],{"id":47395},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47398,47399],{},"猫狗分类任务",[19,47401,47402],{},"划分数据集和验证集",[51,47404,47406],{"className":230,"code":47405,"language":232,"meta":57,"style":57},"# 创建脚本，用于划分数据集和验证集\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",[59,47407,47408,47413,47420,47425,47436,47443,47447,47457,47471,47480,47484,47489,47499,47519,47523,47528,47538,47549,47562,47566,47571,47580,47590,47601,47605,47610,47620,47624,47629,47634,47639,47644,47649,47653,47663,47690,47703,47715,47742,47747,47752,47766,47771,47783,47798,47813,47821,47825,47830,47836,47848,47861,47866,47871,47876,47926,47932,47936],{"__ignoreMap":57},[79,47409,47410],{"class":81,"line":82},[79,47411,47412],{"class":2440},"# 创建脚本，用于划分数据集和验证集\n",[79,47414,47415,47417],{"class":81,"line":167},[79,47416,432],{"class":243},[79,47418,47419],{"class":239}," os\n",[79,47421,47422],{"class":81,"line":178},[79,47423,47424],{"class":2440},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[79,47426,47427,47429,47432,47434],{"class":81,"line":457},[79,47428,32862],{"class":243},[79,47430,47431],{"class":239}," shutil ",[79,47433,432],{"class":243},[79,47435,33940],{"class":239},[79,47437,47438,47440],{"class":81,"line":462},[79,47439,432],{"class":243},[79,47441,47442],{"class":239}," random\n",[79,47444,47445],{"class":81,"line":474},[79,47446,454],{"emptyLinePlaceholder":453},[79,47448,47449,47451,47454],{"class":81,"line":480},[79,47450,633],{"class":243},[79,47452,47453],{"class":85}," mkfile",[79,47455,47456],{"class":239},"(file):\n",[79,47458,47459,47461,47463,47466,47469],{"class":81,"line":486},[79,47460,662],{"class":243},[79,47462,41044],{"class":243},[79,47464,47465],{"class":239}," os.path.exists(",[79,47467,47468],{"class":7412},"file",[79,47470,966],{"class":239},[79,47472,47473,47476,47478],{"class":81,"line":491},[79,47474,47475],{"class":239},"        os.makedirs(",[79,47477,47468],{"class":7412},[79,47479,253],{"class":239},[79,47481,47482],{"class":81,"line":497},[79,47483,454],{"emptyLinePlaceholder":453},[79,47485,47486],{"class":81,"line":503},[79,47487,47488],{"class":2440},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[79,47490,47491,47494,47496],{"class":81,"line":509},[79,47492,47493],{"class":239},"file_path",[79,47495,244],{"class":243},[79,47497,47498],{"class":89},"'data_cat_dog'\n",[79,47500,47501,47504,47506,47509,47511,47514,47516],{"class":81,"line":514},[79,47502,47503],{"class":239},"flower_class",[79,47505,244],{"class":243},[79,47507,47508],{"class":239},"[cla ",[79,47510,1874],{"class":243},[79,47512,47513],{"class":239}," cla ",[79,47515,955],{"class":243},[79,47517,47518],{"class":239}," os.listdir(file_path)]\n",[79,47520,47521],{"class":81,"line":520},[79,47522,454],{"emptyLinePlaceholder":453},[79,47524,47525],{"class":81,"line":526},[79,47526,47527],{"class":2440},"# 创建训练集train文件夹\n",[79,47529,47530,47533,47536],{"class":81,"line":532},[79,47531,47532],{"class":239},"mkfile(",[79,47534,47535],{"class":89},"'data\u002Ftrain'",[79,47537,253],{"class":239},[79,47539,47540,47542,47544,47546],{"class":81,"line":537},[79,47541,1874],{"class":243},[79,47543,47513],{"class":239},[79,47545,955],{"class":243},[79,47547,47548],{"class":239}," flower_class:\n",[79,47550,47551,47554,47557,47559],{"class":81,"line":543},[79,47552,47553],{"class":239},"    mkfile(",[79,47555,47556],{"class":89},"'data\u002Ftrain\u002F'",[79,47558,2855],{"class":243},[79,47560,47561],{"class":239},"cla)\n",[79,47563,47564],{"class":81,"line":549},[79,47565,454],{"emptyLinePlaceholder":453},[79,47567,47568],{"class":81,"line":555},[79,47569,47570],{"class":2440},"# 创建验证集val文件夹\n",[79,47572,47573,47575,47578],{"class":81,"line":561},[79,47574,47532],{"class":239},[79,47576,47577],{"class":89},"'data\u002Ftest'",[79,47579,253],{"class":239},[79,47581,47582,47584,47586,47588],{"class":81,"line":567},[79,47583,1874],{"class":243},[79,47585,47513],{"class":239},[79,47587,955],{"class":243},[79,47589,47548],{"class":239},[79,47591,47592,47594,47597,47599],{"class":81,"line":573},[79,47593,47553],{"class":239},[79,47595,47596],{"class":89},"'data\u002Ftest\u002F'",[79,47598,2855],{"class":243},[79,47600,47561],{"class":239},[79,47602,47603],{"class":81,"line":579},[79,47604,454],{"emptyLinePlaceholder":453},[79,47606,47607],{"class":81,"line":584},[79,47608,47609],{"class":2440},"# 划分比例，训练集：测试集=9：1\n",[79,47611,47612,47615,47617],{"class":81,"line":590},[79,47613,47614],{"class":239},"split_rate",[79,47616,244],{"class":243},[79,47618,47619],{"class":96},"0.1\n",[79,47621,47622],{"class":81,"line":596},[79,47623,454],{"emptyLinePlaceholder":453},[79,47625,47626],{"class":81,"line":602},[79,47627,47628],{"class":2440},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[79,47630,47631],{"class":81,"line":608},[79,47632,47633],{"class":2440},"# cla_path：当前类别的原始图片路径\n",[79,47635,47636],{"class":81,"line":614},[79,47637,47638],{"class":2440},"# images：当前类别下所有图片的文件名列表\n",[79,47640,47641],{"class":81,"line":620},[79,47642,47643],{"class":2440},"# num：该类别图片总数\n",[79,47645,47646],{"class":81,"line":625},[79,47647,47648],{"class":2440},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[79,47650,47651],{"class":81,"line":630},[79,47652,454],{"emptyLinePlaceholder":453},[79,47654,47655,47657,47659,47661],{"class":81,"line":648},[79,47656,1874],{"class":243},[79,47658,47513],{"class":239},[79,47660,955],{"class":243},[79,47662,47548],{"class":239},[79,47664,47665,47668,47670,47673,47675,47678,47681,47683,47685,47687],{"class":81,"line":659},[79,47666,47667],{"class":239},"    cla_path ",[79,47669,244],{"class":243},[79,47671,47672],{"class":239}," file_path ",[79,47674,2855],{"class":243},[79,47676,47677],{"class":89}," '\u002F'",[79,47679,47680],{"class":243}," +",[79,47682,47513],{"class":239},[79,47684,2855],{"class":243},[79,47686,47677],{"class":89},[79,47688,47689],{"class":2440},"  # 某一类别的子目录\n",[79,47691,47692,47695,47697,47700],{"class":81,"line":676},[79,47693,47694],{"class":239},"    images ",[79,47696,244],{"class":243},[79,47698,47699],{"class":239}," os.listdir(cla_path)  ",[79,47701,47702],{"class":2440},"# iamges 列表存储了该目录下所有图像的名称\n",[79,47704,47705,47708,47710,47712],{"class":81,"line":708},[79,47706,47707],{"class":239},"    num ",[79,47709,244],{"class":243},[79,47711,9525],{"class":96},[79,47713,47714],{"class":239},"(images)\n",[79,47716,47717,47720,47722,47725,47727,47729,47731,47734,47736,47739],{"class":81,"line":717},[79,47718,47719],{"class":239},"    eval_index ",[79,47721,244],{"class":243},[79,47723,47724],{"class":239}," random.sample(images, ",[79,47726,2867],{"class":7412},[79,47728,244],{"class":243},[79,47730,2390],{"class":96},[79,47732,47733],{"class":239},"(num ",[79,47735,2829],{"class":243},[79,47737,47738],{"class":239}," split_rate))  ",[79,47740,47741],{"class":2440},"# 从images列表中随机抽取 k 个图像名称\n",[79,47743,47744],{"class":81,"line":722},[79,47745,47746],{"class":2440},"    # 遍历该类别下的所有图片\n",[79,47748,47749],{"class":81,"line":727},[79,47750,47751],{"class":2440},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[79,47753,47754,47756,47759,47761,47763],{"class":81,"line":738},[79,47755,949],{"class":243},[79,47757,47758],{"class":239}," index, image ",[79,47760,955],{"class":243},[79,47762,33725],{"class":96},[79,47764,47765],{"class":239},"(images):\n",[79,47767,47768],{"class":81,"line":753},[79,47769,47770],{"class":2440},"        # eval_index 中保存验证集val的图像名称\n",[79,47772,47773,47775,47778,47780],{"class":81,"line":768},[79,47774,1132],{"class":243},[79,47776,47777],{"class":239}," image ",[79,47779,955],{"class":243},[79,47781,47782],{"class":239}," eval_index:\n",[79,47784,47785,47788,47790,47793,47795],{"class":81,"line":776},[79,47786,47787],{"class":239},"            image_path ",[79,47789,244],{"class":243},[79,47791,47792],{"class":239}," cla_path ",[79,47794,2855],{"class":243},[79,47796,47797],{"class":239}," image\n",[79,47799,47800,47803,47805,47808,47810],{"class":81,"line":781},[79,47801,47802],{"class":239},"            new_path ",[79,47804,244],{"class":243},[79,47806,47807],{"class":89}," 'data\u002Ftest\u002F'",[79,47809,47680],{"class":243},[79,47811,47812],{"class":239}," cla\n",[79,47814,47815,47818],{"class":81,"line":786},[79,47816,47817],{"class":239},"            copy(image_path, new_path)  ",[79,47819,47820],{"class":2440},"# 将选中的图像复制到新路径\n",[79,47822,47823],{"class":81,"line":802},[79,47824,454],{"emptyLinePlaceholder":453},[79,47826,47827],{"class":81,"line":815},[79,47828,47829],{"class":2440},"        # 其余的图像保存在训练集train中\n",[79,47831,47832,47834],{"class":81,"line":828},[79,47833,4747],{"class":243},[79,47835,673],{"class":239},[79,47837,47838,47840,47842,47844,47846],{"class":81,"line":842},[79,47839,47787],{"class":239},[79,47841,244],{"class":243},[79,47843,47792],{"class":239},[79,47845,2855],{"class":243},[79,47847,47797],{"class":239},[79,47849,47850,47852,47854,47857,47859],{"class":81,"line":859},[79,47851,47802],{"class":239},[79,47853,244],{"class":243},[79,47855,47856],{"class":89}," 'data\u002Ftrain\u002F'",[79,47858,47680],{"class":243},[79,47860,47812],{"class":239},[79,47862,47863],{"class":81,"line":878},[79,47864,47865],{"class":239},"            copy(image_path, new_path)\n",[79,47867,47868],{"class":81,"line":883},[79,47869,47870],{"class":2440},"            # 打印进度条信息\n",[79,47872,47873],{"class":81,"line":888},[79,47874,47875],{"class":2440},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[79,47877,47878,47880,47882,47884,47887,47889,47891,47894,47896,47898,47900,47903,47906,47908,47910,47913,47916,47918,47920,47923],{"class":81,"line":904},[79,47879,34566],{"class":96},[79,47881,685],{"class":239},[79,47883,703],{"class":89},[79,47885,47886],{"class":96},"\\r",[79,47888,3263],{"class":89},[79,47890,34574],{"class":96},[79,47892,47893],{"class":89},"] processing [",[79,47895,34574],{"class":96},[79,47897,2957],{"class":89},[79,47899,34574],{"class":96},[79,47901,47902],{"class":89},"]\"",[79,47904,47905],{"class":239},".format(cla, index ",[79,47907,2855],{"class":243},[79,47909,27253],{"class":96},[79,47911,47912],{"class":239},", num), ",[79,47914,47915],{"class":7412},"end",[79,47917,244],{"class":243},[79,47919,9846],{"class":89},[79,47921,47922],{"class":239},")  ",[79,47924,47925],{"class":2440},"# processing bar\n",[79,47927,47928,47930],{"class":81,"line":919},[79,47929,1254],{"class":96},[79,47931,4191],{"class":239},[79,47933,47934],{"class":81,"line":930},[79,47935,454],{"emptyLinePlaceholder":453},[79,47937,47938,47940,47942,47945],{"class":81,"line":941},[79,47939,32541],{"class":96},[79,47941,685],{"class":239},[79,47943,47944],{"class":89},"\"processing done!\"",[79,47946,253],{"class":239},[19,47948,47949],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[24137,47951,47953],{"id":47952},"_242模型代码","2.4.2.模型代码",[19,47955,47956],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[51,47958,47960],{"className":230,"code":47959,"language":232,"meta":57,"style":57},"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",[59,47961,47962,47968,47978,47988,47992,48008,48016,48030,48040,48044,48074,48078,48112,48158,48162,48196,48242,48246,48250,48284,48314,48318,48326,48340,48362,48384,48402,48406,48420,48424,48428,48444,48448,48456,48470,48480,48524,48528,48556,48560,48570,48598,48602,48638,48642,48670,48674,48684,48716,48748,48776,48780,48790,48822,48854,48886,48918,48950,48978,48982,48992,49024,49056,49068,49072,49084,49088,49092,49104,49112,49132,49136,49140,49144,49148,49152,49156,49170,49178,49186,49198,49212,49220,49224,49232,49242,49252,49262,49272,49282,49288,49292,49296,49308,49328,49336],{"__ignoreMap":57},[79,47963,47964,47966],{"class":81,"line":82},[79,47965,432],{"class":243},[79,47967,32521],{"class":239},[79,47969,47970,47972,47974,47976],{"class":81,"line":167},[79,47971,32862],{"class":243},[79,47973,32865],{"class":239},[79,47975,432],{"class":243},[79,47977,32870],{"class":239},[79,47979,47980,47982,47984,47986],{"class":81,"line":178},[79,47981,32862],{"class":243},[79,47983,32882],{"class":239},[79,47985,432],{"class":243},[79,47987,32887],{"class":239},[79,47989,47990],{"class":81,"line":457},[79,47991,454],{"emptyLinePlaceholder":453},[79,47993,47994,47996,47998,48000,48002,48004,48006],{"class":81,"line":462},[79,47995,16855],{"class":243},[79,47997,43607],{"class":85},[79,47999,685],{"class":239},[79,48001,32903],{"class":85},[79,48003,2931],{"class":239},[79,48005,32908],{"class":85},[79,48007,966],{"class":239},[79,48009,48010,48012,48014],{"class":81,"line":474},[79,48011,32925],{"class":243},[79,48013,32928],{"class":96},[79,48015,43626],{"class":239},[79,48017,48018,48020,48022,48024,48026,48028],{"class":81,"line":480},[79,48019,32941],{"class":96},[79,48021,43633],{"class":239},[79,48023,32947],{"class":96},[79,48025,32950],{"class":239},[79,48027,32953],{"class":96},[79,48029,4191],{"class":239},[79,48031,48032,48034,48036,48038],{"class":81,"line":486},[79,48033,32969],{"class":96},[79,48035,36885],{"class":239},[79,48037,244],{"class":243},[79,48039,36890],{"class":239},[79,48041,48042],{"class":81,"line":491},[79,48043,43656],{"class":2440},[79,48045,48046,48048,48050,48052,48054,48056,48058,48060,48062,48064,48066,48068,48070,48072],{"class":81,"line":497},[79,48047,32969],{"class":96},[79,48049,43663],{"class":239},[79,48051,244],{"class":243},[79,48053,32977],{"class":239},[79,48055,32980],{"class":7412},[79,48057,244],{"class":243},[79,48059,43674],{"class":239},[79,48061,32989],{"class":7412},[79,48063,244],{"class":243},[79,48065,43681],{"class":239},[79,48067,32998],{"class":7412},[79,48069,244],{"class":243},[79,48071,1072],{"class":96},[79,48073,253],{"class":239},[79,48075,48076],{"class":81,"line":503},[79,48077,43694],{"class":2440},[79,48079,48080,48082,48084,48086,48088,48090,48092,48094,48096,48098,48100,48102,48104,48106,48108,48110],{"class":81,"line":509},[79,48081,32969],{"class":96},[79,48083,43701],{"class":239},[79,48085,244],{"class":243},[79,48087,32977],{"class":239},[79,48089,32980],{"class":7412},[79,48091,244],{"class":243},[79,48093,43674],{"class":239},[79,48095,32989],{"class":7412},[79,48097,244],{"class":243},[79,48099,43718],{"class":239},[79,48101,1030],{"class":96},[79,48103,43723],{"class":239},[79,48105,32998],{"class":7412},[79,48107,244],{"class":243},[79,48109,1072],{"class":96},[79,48111,253],{"class":239},[79,48113,48114,48116,48118,48120,48122,48124,48126,48128,48130,48132,48134,48136,48138,48140,48142,48144,48146,48148,48150,48152,48154,48156],{"class":81,"line":514},[79,48115,32969],{"class":96},[79,48117,43738],{"class":239},[79,48119,244],{"class":243},[79,48121,32977],{"class":239},[79,48123,32980],{"class":7412},[79,48125,244],{"class":243},[79,48127,43718],{"class":239},[79,48129,1030],{"class":96},[79,48131,43723],{"class":239},[79,48133,32989],{"class":7412},[79,48135,244],{"class":243},[79,48137,43718],{"class":239},[79,48139,1072],{"class":96},[79,48141,43723],{"class":239},[79,48143,32998],{"class":7412},[79,48145,244],{"class":243},[79,48147,1188],{"class":96},[79,48149,2752],{"class":239},[79,48151,33007],{"class":7412},[79,48153,244],{"class":243},[79,48155,1072],{"class":96},[79,48157,253],{"class":239},[79,48159,48160],{"class":81,"line":520},[79,48161,43783],{"class":2440},[79,48163,48164,48166,48168,48170,48172,48174,48176,48178,48180,48182,48184,48186,48188,48190,48192,48194],{"class":81,"line":526},[79,48165,32969],{"class":96},[79,48167,43790],{"class":239},[79,48169,244],{"class":243},[79,48171,32977],{"class":239},[79,48173,32980],{"class":7412},[79,48175,244],{"class":243},[79,48177,43674],{"class":239},[79,48179,32989],{"class":7412},[79,48181,244],{"class":243},[79,48183,43807],{"class":239},[79,48185,1030],{"class":96},[79,48187,43723],{"class":239},[79,48189,32998],{"class":7412},[79,48191,244],{"class":243},[79,48193,1072],{"class":96},[79,48195,253],{"class":239},[79,48197,48198,48200,48202,48204,48206,48208,48210,48212,48214,48216,48218,48220,48222,48224,48226,48228,48230,48232,48234,48236,48238,48240],{"class":81,"line":532},[79,48199,32969],{"class":96},[79,48201,43826],{"class":239},[79,48203,244],{"class":243},[79,48205,32977],{"class":239},[79,48207,32980],{"class":7412},[79,48209,244],{"class":243},[79,48211,43807],{"class":239},[79,48213,1030],{"class":96},[79,48215,43723],{"class":239},[79,48217,32989],{"class":7412},[79,48219,244],{"class":243},[79,48221,43807],{"class":239},[79,48223,1072],{"class":96},[79,48225,43723],{"class":239},[79,48227,32998],{"class":7412},[79,48229,244],{"class":243},[79,48231,2694],{"class":96},[79,48233,2752],{"class":239},[79,48235,33007],{"class":7412},[79,48237,244],{"class":243},[79,48239,1049],{"class":96},[79,48241,253],{"class":239},[79,48243,48244],{"class":81,"line":537},[79,48245,43871],{"class":2440},[79,48247,48248],{"class":81,"line":543},[79,48249,43876],{"class":2440},[79,48251,48252,48254,48256,48258,48260,48262,48264,48266,48268,48270,48272,48274,48276,48278,48280,48282],{"class":81,"line":549},[79,48253,32969],{"class":96},[79,48255,43883],{"class":239},[79,48257,244],{"class":243},[79,48259,36943],{"class":239},[79,48261,32998],{"class":7412},[79,48263,244],{"class":243},[79,48265,1188],{"class":96},[79,48267,2752],{"class":239},[79,48269,33053],{"class":7412},[79,48271,244],{"class":243},[79,48273,1072],{"class":96},[79,48275,2752],{"class":239},[79,48277,33007],{"class":7412},[79,48279,244],{"class":243},[79,48281,1072],{"class":96},[79,48283,253],{"class":239},[79,48285,48286,48288,48290,48292,48294,48296,48298,48300,48302,48304,48306,48308,48310,48312],{"class":81,"line":555},[79,48287,32969],{"class":96},[79,48289,43918],{"class":239},[79,48291,244],{"class":243},[79,48293,32977],{"class":239},[79,48295,32980],{"class":7412},[79,48297,244],{"class":243},[79,48299,43674],{"class":239},[79,48301,32989],{"class":7412},[79,48303,244],{"class":243},[79,48305,43935],{"class":239},[79,48307,32998],{"class":7412},[79,48309,244],{"class":243},[79,48311,1072],{"class":96},[79,48313,253],{"class":239},[79,48315,48316],{"class":81,"line":561},[79,48317,454],{"emptyLinePlaceholder":453},[79,48319,48320,48322,48324],{"class":81,"line":567},[79,48321,32925],{"class":243},[79,48323,33217],{"class":85},[79,48325,33220],{"class":239},[79,48327,48328,48330,48332,48334,48336,48338],{"class":81,"line":573},[79,48329,43960],{"class":239},[79,48331,244],{"class":243},[79,48333,32947],{"class":96},[79,48335,37298],{"class":239},[79,48337,32947],{"class":96},[79,48339,43971],{"class":239},[79,48341,48342,48344,48346,48348,48350,48352,48354,48356,48358,48360],{"class":81,"line":579},[79,48343,9279],{"class":239},[79,48345,244],{"class":243},[79,48347,32947],{"class":96},[79,48349,37298],{"class":239},[79,48351,32947],{"class":96},[79,48353,43986],{"class":239},[79,48355,32947],{"class":96},[79,48357,37298],{"class":239},[79,48359,32947],{"class":96},[79,48361,43995],{"class":239},[79,48363,48364,48366,48368,48370,48372,48374,48376,48378,48380,48382],{"class":81,"line":584},[79,48365,44000],{"class":239},[79,48367,244],{"class":243},[79,48369,32947],{"class":96},[79,48371,37298],{"class":239},[79,48373,32947],{"class":96},[79,48375,44011],{"class":239},[79,48377,32947],{"class":96},[79,48379,37298],{"class":239},[79,48381,32947],{"class":96},[79,48383,44020],{"class":239},[79,48385,48386,48388,48390,48392,48394,48396,48398,48400],{"class":81,"line":590},[79,48387,44025],{"class":239},[79,48389,244],{"class":243},[79,48391,32947],{"class":96},[79,48393,37298],{"class":239},[79,48395,32947],{"class":96},[79,48397,44036],{"class":239},[79,48399,32947],{"class":96},[79,48401,44041],{"class":239},[79,48403,48404],{"class":81,"line":596},[79,48405,44046],{"class":2440},[79,48407,48408,48410,48412,48414,48416,48418],{"class":81,"line":602},[79,48409,16913],{"class":243},[79,48411,44053],{"class":239},[79,48413,34800],{"class":7412},[79,48415,244],{"class":243},[79,48417,1072],{"class":96},[79,48419,253],{"class":239},[79,48421,48422],{"class":81,"line":608},[79,48423,454],{"emptyLinePlaceholder":453},[79,48425,48426],{"class":81,"line":614},[79,48427,44074],{"class":2440},[79,48429,48430,48432,48434,48436,48438,48440,48442],{"class":81,"line":620},[79,48431,16855],{"class":243},[79,48433,44081],{"class":85},[79,48435,685],{"class":239},[79,48437,32903],{"class":85},[79,48439,2931],{"class":239},[79,48441,32908],{"class":85},[79,48443,966],{"class":239},[79,48445,48446],{"class":81,"line":625},[79,48447,44096],{"class":2440},[79,48449,48450,48452,48454],{"class":81,"line":630},[79,48451,32925],{"class":243},[79,48453,32928],{"class":96},[79,48455,44105],{"class":239},[79,48457,48458,48460,48462,48464,48466,48468],{"class":81,"line":648},[79,48459,32941],{"class":96},[79,48461,44112],{"class":239},[79,48463,32947],{"class":96},[79,48465,32950],{"class":239},[79,48467,32953],{"class":96},[79,48469,4191],{"class":239},[79,48471,48472,48474,48476,48478],{"class":81,"line":659},[79,48473,32969],{"class":96},[79,48475,44127],{"class":239},[79,48477,244],{"class":243},[79,48479,40123],{"class":239},[79,48481,48482,48484,48486,48488,48490,48492,48494,48496,48498,48500,48502,48504,48506,48508,48510,48512,48514,48516,48518,48520,48522],{"class":81,"line":676},[79,48483,40128],{"class":239},[79,48485,32980],{"class":7412},[79,48487,244],{"class":243},[79,48489,1188],{"class":96},[79,48491,2752],{"class":239},[79,48493,32989],{"class":7412},[79,48495,244],{"class":243},[79,48497,2581],{"class":96},[79,48499,2752],{"class":239},[79,48501,32998],{"class":7412},[79,48503,244],{"class":243},[79,48505,2743],{"class":96},[79,48507,2752],{"class":239},[79,48509,33053],{"class":7412},[79,48511,244],{"class":243},[79,48513,1049],{"class":96},[79,48515,2752],{"class":239},[79,48517,33007],{"class":7412},[79,48519,244],{"class":243},[79,48521,1188],{"class":96},[79,48523,40161],{"class":239},[79,48525,48526],{"class":81,"line":708},[79,48527,40166],{"class":239},[79,48529,48530,48532,48534,48536,48538,48540,48542,48544,48546,48548,48550,48552,48554],{"class":81,"line":717},[79,48531,40211],{"class":239},[79,48533,32998],{"class":7412},[79,48535,244],{"class":243},[79,48537,1188],{"class":96},[79,48539,2752],{"class":239},[79,48541,33053],{"class":7412},[79,48543,244],{"class":243},[79,48545,1049],{"class":96},[79,48547,2752],{"class":239},[79,48549,33007],{"class":7412},[79,48551,244],{"class":243},[79,48553,1072],{"class":96},[79,48555,253],{"class":239},[79,48557,48558],{"class":81,"line":722},[79,48559,40240],{"class":239},[79,48561,48562,48564,48566,48568],{"class":81,"line":727},[79,48563,32969],{"class":96},[79,48565,44218],{"class":239},[79,48567,244],{"class":243},[79,48569,40123],{"class":239},[79,48571,48572,48574,48576,48578,48580,48582,48584,48586,48588,48590,48592,48594,48596],{"class":81,"line":738},[79,48573,40128],{"class":239},[79,48575,32980],{"class":7412},[79,48577,244],{"class":243},[79,48579,2581],{"class":96},[79,48581,2752],{"class":239},[79,48583,32989],{"class":7412},[79,48585,244],{"class":243},[79,48587,2581],{"class":96},[79,48589,2752],{"class":239},[79,48591,32998],{"class":7412},[79,48593,244],{"class":243},[79,48595,1072],{"class":96},[79,48597,40161],{"class":239},[79,48599,48600],{"class":81,"line":753},[79,48601,40166],{"class":239},[79,48603,48604,48606,48608,48610,48612,48614,48616,48618,48620,48622,48624,48626,48628,48630,48632,48634,48636],{"class":81,"line":768},[79,48605,40128],{"class":239},[79,48607,32980],{"class":7412},[79,48609,244],{"class":243},[79,48611,2581],{"class":96},[79,48613,2752],{"class":239},[79,48615,32989],{"class":7412},[79,48617,244],{"class":243},[79,48619,44273],{"class":96},[79,48621,2752],{"class":239},[79,48623,32998],{"class":7412},[79,48625,244],{"class":243},[79,48627,1188],{"class":96},[79,48629,2752],{"class":239},[79,48631,33007],{"class":7412},[79,48633,244],{"class":243},[79,48635,1072],{"class":96},[79,48637,40161],{"class":239},[79,48639,48640],{"class":81,"line":776},[79,48641,40166],{"class":239},[79,48643,48644,48646,48648,48650,48652,48654,48656,48658,48660,48662,48664,48666,48668],{"class":81,"line":781},[79,48645,40211],{"class":239},[79,48647,32998],{"class":7412},[79,48649,244],{"class":243},[79,48651,1188],{"class":96},[79,48653,2752],{"class":239},[79,48655,33053],{"class":7412},[79,48657,244],{"class":243},[79,48659,1049],{"class":96},[79,48661,2752],{"class":239},[79,48663,33007],{"class":7412},[79,48665,244],{"class":243},[79,48667,1072],{"class":96},[79,48669,253],{"class":239},[79,48671,48672],{"class":81,"line":786},[79,48673,40240],{"class":239},[79,48675,48676,48678,48680,48682],{"class":81,"line":802},[79,48677,32969],{"class":96},[79,48679,44334],{"class":239},[79,48681,244],{"class":243},[79,48683,40123],{"class":239},[79,48685,48686,48688,48690,48692,48694,48696,48698,48700,48702,48704,48706,48708,48710,48712,48714],{"class":81,"line":815},[79,48687,44343],{"class":239},[79,48689,44273],{"class":96},[79,48691,2752],{"class":239},[79,48693,2581],{"class":96},[79,48695,44352],{"class":239},[79,48697,2587],{"class":96},[79,48699,2752],{"class":239},[79,48701,34186],{"class":96},[79,48703,44361],{"class":239},[79,48705,2974],{"class":96},[79,48707,2752],{"class":239},[79,48709,2575],{"class":96},[79,48711,44370],{"class":239},[79,48713,2575],{"class":96},[79,48715,40161],{"class":239},[79,48717,48718,48720,48722,48724,48726,48728,48730,48732,48734,48736,48738,48740,48742,48744,48746],{"class":81,"line":828},[79,48719,44343],{"class":239},[79,48721,36984],{"class":96},[79,48723,2752],{"class":239},[79,48725,34186],{"class":96},[79,48727,44352],{"class":239},[79,48729,34186],{"class":96},[79,48731,2752],{"class":239},[79,48733,44273],{"class":96},[79,48735,44361],{"class":239},[79,48737,2575],{"class":96},[79,48739,2752],{"class":239},[79,48741,2587],{"class":96},[79,48743,44370],{"class":239},[79,48745,2581],{"class":96},[79,48747,40161],{"class":239},[79,48749,48750,48752,48754,48756,48758,48760,48762,48764,48766,48768,48770,48772,48774],{"class":81,"line":842},[79,48751,40211],{"class":239},[79,48753,32998],{"class":7412},[79,48755,244],{"class":243},[79,48757,1188],{"class":96},[79,48759,2752],{"class":239},[79,48761,33053],{"class":7412},[79,48763,244],{"class":243},[79,48765,1049],{"class":96},[79,48767,2752],{"class":239},[79,48769,33007],{"class":7412},[79,48771,244],{"class":243},[79,48773,1072],{"class":96},[79,48775,253],{"class":239},[79,48777,48778],{"class":81,"line":859},[79,48779,40240],{"class":239},[79,48781,48782,48784,48786,48788],{"class":81,"line":878},[79,48783,32969],{"class":96},[79,48785,44445],{"class":239},[79,48787,244],{"class":243},[79,48789,40123],{"class":239},[79,48791,48792,48794,48796,48798,48800,48802,48804,48806,48808,48810,48812,48814,48816,48818,48820],{"class":81,"line":883},[79,48793,44343],{"class":239},[79,48795,44456],{"class":96},[79,48797,2752],{"class":239},[79,48799,44273],{"class":96},[79,48801,44352],{"class":239},[79,48803,2587],{"class":96},[79,48805,2752],{"class":239},[79,48807,44469],{"class":96},[79,48809,44361],{"class":239},[79,48811,2974],{"class":96},[79,48813,2752],{"class":239},[79,48815,2980],{"class":96},[79,48817,44370],{"class":239},[79,48819,2581],{"class":96},[79,48821,40161],{"class":239},[79,48823,48824,48826,48828,48830,48832,48834,48836,48838,48840,48842,48844,48846,48848,48850,48852],{"class":81,"line":888},[79,48825,44343],{"class":239},[79,48827,40571],{"class":96},[79,48829,2752],{"class":239},[79,48831,23187],{"class":96},[79,48833,44352],{"class":239},[79,48835,2991],{"class":96},[79,48837,2752],{"class":239},[79,48839,33620],{"class":96},[79,48841,44361],{"class":239},[79,48843,3173],{"class":96},[79,48845,2752],{"class":239},[79,48847,2581],{"class":96},[79,48849,44370],{"class":239},[79,48851,2581],{"class":96},[79,48853,40161],{"class":239},[79,48855,48856,48858,48860,48862,48864,48866,48868,48870,48872,48874,48876,48878,48880,48882,48884],{"class":81,"line":904},[79,48857,44343],{"class":239},[79,48859,40571],{"class":96},[79,48861,2752],{"class":239},[79,48863,34186],{"class":96},[79,48865,44352],{"class":239},[79,48867,34186],{"class":96},[79,48869,2752],{"class":239},[79,48871,36984],{"class":96},[79,48873,44361],{"class":239},[79,48875,3173],{"class":96},[79,48877,2752],{"class":239},[79,48879,2581],{"class":96},[79,48881,44370],{"class":239},[79,48883,2581],{"class":96},[79,48885,40161],{"class":239},[79,48887,48888,48890,48892,48894,48896,48898,48900,48902,48904,48906,48908,48910,48912,48914,48916],{"class":81,"line":919},[79,48889,44343],{"class":239},[79,48891,40571],{"class":96},[79,48893,2752],{"class":239},[79,48895,2991],{"class":96},[79,48897,44352],{"class":239},[79,48899,34186],{"class":96},[79,48901,2752],{"class":239},[79,48903,44566],{"class":96},[79,48905,44361],{"class":239},[79,48907,2575],{"class":96},[79,48909,2752],{"class":239},[79,48911,2581],{"class":96},[79,48913,44370],{"class":239},[79,48915,2581],{"class":96},[79,48917,40161],{"class":239},[79,48919,48920,48922,48924,48926,48928,48930,48932,48934,48936,48938,48940,48942,48944,48946,48948],{"class":81,"line":930},[79,48921,44343],{"class":239},[79,48923,44587],{"class":96},[79,48925,2752],{"class":239},[79,48927,36984],{"class":96},[79,48929,44352],{"class":239},[79,48931,23187],{"class":96},[79,48933,2752],{"class":239},[79,48935,44600],{"class":96},[79,48937,44361],{"class":239},[79,48939,2575],{"class":96},[79,48941,2752],{"class":239},[79,48943,34186],{"class":96},[79,48945,44370],{"class":239},[79,48947,34186],{"class":96},[79,48949,40161],{"class":239},[79,48951,48952,48954,48956,48958,48960,48962,48964,48966,48968,48970,48972,48974,48976],{"class":81,"line":941},[79,48953,40211],{"class":239},[79,48955,32998],{"class":7412},[79,48957,244],{"class":243},[79,48959,1188],{"class":96},[79,48961,2752],{"class":239},[79,48963,33053],{"class":7412},[79,48965,244],{"class":243},[79,48967,1049],{"class":96},[79,48969,2752],{"class":239},[79,48971,33007],{"class":7412},[79,48973,244],{"class":243},[79,48975,1072],{"class":96},[79,48977,253],{"class":239},[79,48979,48980],{"class":81,"line":946},[79,48981,40240],{"class":239},[79,48983,48984,48986,48988,48990],{"class":81,"line":969},[79,48985,32969],{"class":96},[79,48987,44653],{"class":239},[79,48989,244],{"class":243},[79,48991,40123],{"class":239},[79,48993,48994,48996,48998,49000,49002,49004,49006,49008,49010,49012,49014,49016,49018,49020,49022],{"class":81,"line":975},[79,48995,44343],{"class":239},[79,48997,44664],{"class":96},[79,48999,2752],{"class":239},[79,49001,36984],{"class":96},[79,49003,44352],{"class":239},[79,49005,23187],{"class":96},[79,49007,2752],{"class":239},[79,49009,44600],{"class":96},[79,49011,44361],{"class":239},[79,49013,2575],{"class":96},[79,49015,2752],{"class":239},[79,49017,34186],{"class":96},[79,49019,44370],{"class":239},[79,49021,34186],{"class":96},[79,49023,40161],{"class":239},[79,49025,49026,49028,49030,49032,49034,49036,49038,49040,49042,49044,49046,49048,49050,49052,49054],{"class":81,"line":989},[79,49027,44343],{"class":239},[79,49029,44664],{"class":96},[79,49031,2752],{"class":239},[79,49033,37054],{"class":96},[79,49035,44352],{"class":239},[79,49037,44273],{"class":96},[79,49039,2752],{"class":239},[79,49041,37054],{"class":96},[79,49043,44361],{"class":239},[79,49045,2980],{"class":96},[79,49047,2752],{"class":239},[79,49049,34186],{"class":96},[79,49051,44370],{"class":239},[79,49053,34186],{"class":96},[79,49055,40161],{"class":239},[79,49057,49058,49060,49062,49064,49066],{"class":81,"line":1003},[79,49059,44727],{"class":239},[79,49061,1072],{"class":96},[79,49063,2752],{"class":239},[79,49065,1072],{"class":96},[79,49067,44736],{"class":239},[79,49069,49070],{"class":81,"line":1019},[79,49071,40904],{"class":239},[79,49073,49074,49076,49078,49080,49082],{"class":81,"line":1024},[79,49075,40909],{"class":239},[79,49077,44747],{"class":96},[79,49079,2752],{"class":239},[79,49081,1049],{"class":96},[79,49083,253],{"class":239},[79,49085,49086],{"class":81,"line":1067},[79,49087,40240],{"class":239},[79,49089,49090],{"class":81,"line":1101},[79,49091,44762],{"class":2440},[79,49093,49094,49096,49098,49100,49102],{"class":81,"line":1106},[79,49095,5606],{"class":243},[79,49097,40982],{"class":239},[79,49099,955],{"class":243},[79,49101,40987],{"class":96},[79,49103,40990],{"class":239},[79,49105,49106,49108,49110],{"class":81,"line":1112},[79,49107,6841],{"class":243},[79,49109,41002],{"class":96},[79,49111,41005],{"class":239},[79,49113,49114,49116,49118,49120,49122,49124,49126,49128,49130],{"class":81,"line":1124},[79,49115,41015],{"class":239},[79,49117,44789],{"class":7412},[79,49119,244],{"class":243},[79,49121,44794],{"class":89},[79,49123,2752],{"class":239},[79,49125,41018],{"class":7412},[79,49127,244],{"class":243},[79,49129,41023],{"class":89},[79,49131,253],{"class":239},[79,49133,49134],{"class":81,"line":1129},[79,49135,44809],{"class":2440},[79,49137,49138],{"class":81,"line":1150},[79,49139,44814],{"class":2440},[79,49141,49142],{"class":81,"line":1161},[79,49143,44819],{"class":2440},[79,49145,49146],{"class":81,"line":1175},[79,49147,44824],{"class":2440},[79,49149,49150],{"class":81,"line":1194},[79,49151,44829],{"class":2440},[79,49153,49154],{"class":81,"line":1211},[79,49155,44834],{"class":2440},[79,49157,49158,49160,49162,49164,49166,49168],{"class":81,"line":1228},[79,49159,41035],{"class":243},[79,49161,41038],{"class":239},[79,49163,41041],{"class":243},[79,49165,41044],{"class":243},[79,49167,41047],{"class":96},[79,49169,673],{"class":239},[79,49171,49172,49174,49176],{"class":81,"line":1246},[79,49173,41059],{"class":239},[79,49175,1030],{"class":96},[79,49177,253],{"class":239},[79,49179,49180,49182,49184],{"class":81,"line":1251},[79,49181,44861],{"class":243},[79,49183,41002],{"class":96},[79,49185,41078],{"class":239},[79,49187,49188,49190,49192,49194,49196],{"class":81,"line":1274},[79,49189,44870],{"class":239},[79,49191,1030],{"class":96},[79,49193,2752],{"class":239},[79,49195,41100],{"class":96},[79,49197,253],{"class":239},[79,49199,49200,49202,49204,49206,49208,49210],{"class":81,"line":1296},[79,49201,44883],{"class":243},[79,49203,41038],{"class":239},[79,49205,41041],{"class":243},[79,49207,41044],{"class":243},[79,49209,41047],{"class":96},[79,49211,673],{"class":239},[79,49213,49214,49216,49218],{"class":81,"line":1316},[79,49215,44898],{"class":239},[79,49217,1030],{"class":96},[79,49219,253],{"class":239},[79,49221,49222],{"class":81,"line":1321},[79,49223,37279],{"class":2440},[79,49225,49226,49228,49230],{"class":81,"line":1326},[79,49227,32925],{"class":243},[79,49229,33217],{"class":85},[79,49231,33220],{"class":239},[79,49233,49234,49236,49238,49240],{"class":81,"line":1342},[79,49235,33225],{"class":239},[79,49237,244],{"class":243},[79,49239,32947],{"class":96},[79,49241,44925],{"class":239},[79,49243,49244,49246,49248,49250],{"class":81,"line":18985},[79,49245,33225],{"class":239},[79,49247,244],{"class":243},[79,49249,32947],{"class":96},[79,49251,44936],{"class":239},[79,49253,49254,49256,49258,49260],{"class":81,"line":18990},[79,49255,33225],{"class":239},[79,49257,244],{"class":243},[79,49259,32947],{"class":96},[79,49261,44947],{"class":239},[79,49263,49264,49266,49268,49270],{"class":81,"line":18995},[79,49265,33225],{"class":239},[79,49267,244],{"class":243},[79,49269,32947],{"class":96},[79,49271,44958],{"class":239},[79,49273,49274,49276,49278,49280],{"class":81,"line":19009},[79,49275,33225],{"class":239},[79,49277,244],{"class":243},[79,49279,32947],{"class":96},[79,49281,44969],{"class":239},[79,49283,49284,49286],{"class":81,"line":19021},[79,49285,16913],{"class":243},[79,49287,33333],{"class":239},[79,49289,49290],{"class":81,"line":19026},[79,49291,454],{"emptyLinePlaceholder":453},[79,49293,49294],{"class":81,"line":19039},[79,49295,44984],{"class":2440},[79,49297,49298,49300,49302,49304,49306],{"class":81,"line":19044},[79,49299,1329],{"class":243},[79,49301,1332],{"class":96},[79,49303,5155],{"class":243},[79,49305,33348],{"class":89},[79,49307,673],{"class":239},[79,49309,49310,49312,49314,49316,49318,49320,49322,49324,49326],{"class":81,"line":19049},[79,49311,33360],{"class":239},[79,49313,244],{"class":243},[79,49315,32577],{"class":239},[79,49317,33367],{"class":89},[79,49319,3929],{"class":243},[79,49321,33372],{"class":239},[79,49323,3926],{"class":243},[79,49325,32602],{"class":89},[79,49327,253],{"class":239},[79,49329,49330,49332,49334],{"class":81,"line":19054},[79,49331,33412],{"class":239},[79,49333,244],{"class":243},[79,49335,45025],{"class":239},[79,49337,49338,49340,49342,49344,49346,49348,49350,49352],{"class":81,"line":19067},[79,49339,1254],{"class":96},[79,49341,33424],{"class":239},[79,49343,1072],{"class":96},[79,49345,2752],{"class":239},[79,49347,33620],{"class":96},[79,49349,2752],{"class":239},[79,49351,33620],{"class":96},[79,49353,33437],{"class":239},[24137,49355,49357],{"id":49356},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49359,49360],{},"计算图片的均值与方差，用于训练中归一化处理操作",[51,49362,49364],{"className":230,"code":49363,"language":232,"meta":57,"style":57},"# 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",[59,49365,49366,49371,49384,49389,49395,49400,49410,49414,49419,49429,49433,49438,49448,49465,49469,49474,49486,49498,49529,49538,49548,49558,49562,49567,49582,49586,49591,49596,49601,49611,49616,49641,49645,49650,49665,49669,49682,49686,49691,49696,49701,49706,49711,49721,49731,49754,49762,49770,49778,49782,49794,49798,49803,49807,49811,49818,49838,49862,49869,49883,49888,49893,49897,49911,49915,49927],{"__ignoreMap":57},[79,49367,49368],{"class":81,"line":82},[79,49369,49370],{"class":2440},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[79,49372,49373,49375,49378,49381],{"class":81,"line":167},[79,49374,32862],{"class":243},[79,49376,49377],{"class":96}," PIL",[79,49379,49380],{"class":243}," import",[79,49382,49383],{"class":239}," Image\n",[79,49385,49386],{"class":81,"line":178},[79,49387,49388],{"class":2440},"# os 用来处理文件夹和文件路径\n",[79,49390,49391,49393],{"class":81,"line":457},[79,49392,432],{"class":243},[79,49394,47419],{"class":239},[79,49396,49397],{"class":81,"line":462},[79,49398,49399],{"class":2440},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[79,49401,49402,49404,49406,49408],{"class":81,"line":474},[79,49403,432],{"class":243},[79,49405,442],{"class":239},[79,49407,445],{"class":243},[79,49409,448],{"class":239},[79,49411,49412],{"class":81,"line":480},[79,49413,454],{"emptyLinePlaceholder":453},[79,49415,49416],{"class":81,"line":486},[79,49417,49418],{"class":2440},"# 文件夹路径，包含所有图片文件\n",[79,49420,49421,49424,49426],{"class":81,"line":491},[79,49422,49423],{"class":239},"folder_path ",[79,49425,244],{"class":243},[79,49427,49428],{"class":89}," 'data_cat_dog'\n",[79,49430,49431],{"class":81,"line":497},[79,49432,454],{"emptyLinePlaceholder":453},[79,49434,49435],{"class":81,"line":503},[79,49436,49437],{"class":2440},"# 初始化累积变量\n",[79,49439,49440,49443,49445],{"class":81,"line":509},[79,49441,49442],{"class":239},"total_pixels ",[79,49444,244],{"class":243},[79,49446,49447],{"class":96}," 0\n",[79,49449,49450,49453,49455,49458,49460,49462],{"class":81,"line":514},[79,49451,49452],{"class":239},"sum_normalized_pixel_values ",[79,49454,244],{"class":243},[79,49456,49457],{"class":239}," np.zeros(",[79,49459,1188],{"class":96},[79,49461,47922],{"class":239},[79,49463,49464],{"class":2440},"# 如果是RGB图像，需要三个通道的均值和方差\n",[79,49466,49467],{"class":81,"line":520},[79,49468,454],{"emptyLinePlaceholder":453},[79,49470,49471],{"class":81,"line":526},[79,49472,49473],{"class":2440},"# 遍历文件夹中的图片文件\n",[79,49475,49476,49478,49481,49483],{"class":81,"line":532},[79,49477,1874],{"class":243},[79,49479,49480],{"class":239}," root, dirs, files ",[79,49482,955],{"class":243},[79,49484,49485],{"class":239}," os.walk(folder_path):\n",[79,49487,49488,49490,49493,49495],{"class":81,"line":537},[79,49489,949],{"class":243},[79,49491,49492],{"class":239}," filename ",[79,49494,955],{"class":243},[79,49496,49497],{"class":239}," files:\n",[79,49499,49500,49502,49505,49508,49510,49513,49515,49518,49520,49523,49526],{"class":81,"line":543},[79,49501,1132],{"class":243},[79,49503,49504],{"class":239}," filename.endswith((",[79,49506,49507],{"class":89},"'.jpg'",[79,49509,1060],{"class":239},[79,49511,49512],{"class":89},"'.jpeg'",[79,49514,1060],{"class":239},[79,49516,49517],{"class":89},"'.png'",[79,49519,1060],{"class":239},[79,49521,49522],{"class":89},"'.bmp'",[79,49524,49525],{"class":239},")):  ",[79,49527,49528],{"class":2440},"# 可根据实际情况添加其他格式\n",[79,49530,49531,49533,49535],{"class":81,"line":549},[79,49532,47787],{"class":239},[79,49534,244],{"class":243},[79,49536,49537],{"class":239}," os.path.join(root, filename)\n",[79,49539,49540,49543,49545],{"class":81,"line":555},[79,49541,49542],{"class":239},"            image ",[79,49544,244],{"class":243},[79,49546,49547],{"class":239}," Image.open(image_path)\n",[79,49549,49550,49553,49555],{"class":81,"line":561},[79,49551,49552],{"class":239},"            image_array ",[79,49554,244],{"class":243},[79,49556,49557],{"class":239}," np.array(image)\n",[79,49559,49560],{"class":81,"line":567},[79,49561,454],{"emptyLinePlaceholder":453},[79,49563,49564],{"class":81,"line":573},[79,49565,49566],{"class":2440},"            # 归一化像素值到0-1之间\n",[79,49568,49569,49572,49574,49577,49579],{"class":81,"line":579},[79,49570,49571],{"class":239},"            normalized_image_array ",[79,49573,244],{"class":243},[79,49575,49576],{"class":239}," image_array ",[79,49578,2957],{"class":243},[79,49580,49581],{"class":96}," 255.0\n",[79,49583,49584],{"class":81,"line":584},[79,49585,454],{"emptyLinePlaceholder":453},[79,49587,49588],{"class":81,"line":590},[79,49589,49590],{"class":2440},"            # print(image_path)\n",[79,49592,49593],{"class":81,"line":596},[79,49594,49595],{"class":2440},"            # print(normalized_image_array.shape)\n",[79,49597,49598],{"class":81,"line":602},[79,49599,49600],{"class":2440},"            # 累积归一化后的像素值和像素数量\n",[79,49602,49603,49606,49608],{"class":81,"line":608},[79,49604,49605],{"class":239},"            total_pixels ",[79,49607,1118],{"class":243},[79,49609,49610],{"class":239}," normalized_image_array.size\n",[79,49612,49613],{"class":81,"line":614},[79,49614,49615],{"class":2440},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[79,49617,49618,49621,49623,49626,49629,49631,49633,49635,49637,49639],{"class":81,"line":620},[79,49619,49620],{"class":239},"            sum_normalized_pixel_values ",[79,49622,1118],{"class":243},[79,49624,49625],{"class":239}," np.sum(normalized_image_array, ",[79,49627,49628],{"class":7412},"axis",[79,49630,244],{"class":243},[79,49632,685],{"class":239},[79,49634,1030],{"class":96},[79,49636,1060],{"class":239},[79,49638,1072],{"class":96},[79,49640,1191],{"class":239},[79,49642,49643],{"class":81,"line":625},[79,49644,454],{"emptyLinePlaceholder":453},[79,49646,49647],{"class":81,"line":630},[79,49648,49649],{"class":2440},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[79,49651,49652,49655,49657,49660,49662],{"class":81,"line":648},[79,49653,49654],{"class":239},"mean ",[79,49656,244],{"class":243},[79,49658,49659],{"class":239}," sum_normalized_pixel_values ",[79,49661,2957],{"class":243},[79,49663,49664],{"class":239}," total_pixels\n",[79,49666,49667],{"class":81,"line":659},[79,49668,454],{"emptyLinePlaceholder":453},[79,49670,49671,49674,49676,49678,49680],{"class":81,"line":676},[79,49672,49673],{"class":239},"sum_squared_diff ",[79,49675,244],{"class":243},[79,49677,49457],{"class":239},[79,49679,1188],{"class":96},[79,49681,253],{"class":239},[79,49683,49684],{"class":81,"line":708},[79,49685,454],{"emptyLinePlaceholder":453},[79,49687,49688],{"class":81,"line":717},[79,49689,49690],{"class":2440},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[79,49692,49693],{"class":81,"line":722},[79,49694,49695],{"class":2440},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[79,49697,49698],{"class":81,"line":727},[79,49699,49700],{"class":2440},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[79,49702,49703],{"class":81,"line":738},[79,49704,49705],{"class":2440},"# Image.open(image_path)：打开图片\n",[79,49707,49708],{"class":81,"line":753},[79,49709,49710],{"class":2440},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[79,49712,49713,49715,49717,49719],{"class":81,"line":768},[79,49714,1874],{"class":243},[79,49716,49480],{"class":239},[79,49718,955],{"class":243},[79,49720,49485],{"class":239},[79,49722,49723,49725,49727,49729],{"class":81,"line":776},[79,49724,949],{"class":243},[79,49726,49492],{"class":239},[79,49728,955],{"class":243},[79,49730,49497],{"class":239},[79,49732,49733,49735,49737,49739,49741,49743,49745,49747,49749,49751],{"class":81,"line":781},[79,49734,1132],{"class":243},[79,49736,49504],{"class":239},[79,49738,49507],{"class":89},[79,49740,1060],{"class":239},[79,49742,49512],{"class":89},[79,49744,1060],{"class":239},[79,49746,49517],{"class":89},[79,49748,1060],{"class":239},[79,49750,49522],{"class":89},[79,49752,49753],{"class":239},")):\n",[79,49755,49756,49758,49760],{"class":81,"line":786},[79,49757,47787],{"class":239},[79,49759,244],{"class":243},[79,49761,49537],{"class":239},[79,49763,49764,49766,49768],{"class":81,"line":802},[79,49765,49542],{"class":239},[79,49767,244],{"class":243},[79,49769,49547],{"class":239},[79,49771,49772,49774,49776],{"class":81,"line":815},[79,49773,49552],{"class":239},[79,49775,244],{"class":243},[79,49777,49557],{"class":239},[79,49779,49780],{"class":81,"line":828},[79,49781,49566],{"class":2440},[79,49783,49784,49786,49788,49790,49792],{"class":81,"line":842},[79,49785,49571],{"class":239},[79,49787,244],{"class":243},[79,49789,49576],{"class":239},[79,49791,2957],{"class":243},[79,49793,49581],{"class":96},[79,49795,49796],{"class":81,"line":859},[79,49797,49595],{"class":2440},[79,49799,49800],{"class":81,"line":878},[79,49801,49802],{"class":2440},"            # print(mean.shape)\n",[79,49804,49805],{"class":81,"line":883},[79,49806,49590],{"class":2440},[79,49808,49809],{"class":81,"line":888},[79,49810,454],{"emptyLinePlaceholder":453},[79,49812,49813,49816],{"class":81,"line":904},[79,49814,49815],{"class":243},"            try",[79,49817,673],{"class":239},[79,49819,49820,49823,49825,49828,49830,49833,49835],{"class":81,"line":919},[79,49821,49822],{"class":239},"                diff ",[79,49824,244],{"class":243},[79,49826,49827],{"class":239}," (normalized_image_array ",[79,49829,320],{"class":243},[79,49831,49832],{"class":239}," mean) ",[79,49834,12825],{"class":243},[79,49836,49837],{"class":96}," 2\n",[79,49839,49840,49843,49845,49848,49850,49852,49854,49856,49858,49860],{"class":81,"line":930},[79,49841,49842],{"class":239},"                sum_squared_diff ",[79,49844,1118],{"class":243},[79,49846,49847],{"class":239}," np.sum(diff, ",[79,49849,49628],{"class":7412},[79,49851,244],{"class":243},[79,49853,685],{"class":239},[79,49855,1030],{"class":96},[79,49857,1060],{"class":239},[79,49859,1072],{"class":96},[79,49861,1191],{"class":239},[79,49863,49864,49867],{"class":81,"line":941},[79,49865,49866],{"class":243},"            except",[79,49868,673],{"class":239},[79,49870,49871,49874,49876,49878,49881],{"class":81,"line":946},[79,49872,49873],{"class":96},"                print",[79,49875,685],{"class":239},[79,49877,688],{"class":243},[79,49879,49880],{"class":89},"\"捕获到自定义异常\"",[79,49882,253],{"class":239},[79,49884,49885],{"class":81,"line":969},[79,49886,49887],{"class":2440},"            # diff = (normalized_image_array - mean) ** 2\n",[79,49889,49890],{"class":81,"line":975},[79,49891,49892],{"class":2440},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[79,49894,49895],{"class":81,"line":989},[79,49896,454],{"emptyLinePlaceholder":453},[79,49898,49899,49902,49904,49907,49909],{"class":81,"line":1003},[79,49900,49901],{"class":239},"variance ",[79,49903,244],{"class":243},[79,49905,49906],{"class":239}," sum_squared_diff ",[79,49908,2957],{"class":243},[79,49910,49664],{"class":239},[79,49912,49913],{"class":81,"line":1019},[79,49914,454],{"emptyLinePlaceholder":453},[79,49916,49917,49919,49921,49924],{"class":81,"line":1024},[79,49918,32541],{"class":96},[79,49920,685],{"class":239},[79,49922,49923],{"class":89},"\"Mean:\"",[79,49925,49926],{"class":239},", mean)\n",[79,49928,49929,49931,49933,49936],{"class":81,"line":1067},[79,49930,32541],{"class":96},[79,49932,685],{"class":239},[79,49934,49935],{"class":89},"\"Variance:\"",[79,49937,49938],{"class":239},", variance)\n",[51,49940,49942],{"className":230,"code":49941,"language":232,"meta":57,"style":57},"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",[59,49943,49944,49950,49956,49966,49972,49982,49996,50006,50016,50026,50030,50040,50050,50054,50058,50066,50071,50076,50095,50099,50104,50109,50114,50119,50160,50165,50175,50180,50193,50198,50203,50208,50213,50218,50222,50227,50232,50254,50258,50290,50304,50314,50324,50328,50338,50352,50362,50372,50382,50388,50392,50396,50400,50404,50408,50416,50436,50440,50444,50448,50452,50468,50472,50476,50484,50488,50492,50500,50504,50508,50512,50520,50524,50528,50532,50540,50544,50552,50556,50564,50568,50576,50580,50588,50592,50596,50604,50608,50612,50624,50648,50662,50666,50670,50674,50682,50686,50694,50698,50706,50710,50718,50722,50730,50734,50742,50746,50758,50762,50770,50774,50782,50786,50790,50794,50798,50806,50810,50826,50830,50838,50842,50846,50850,50854,50858,50862,50866,50882,50886,50898,50902,50914,50918,50930,50934,50942,50946,50954,50958,50962,50966,50972,50976,50984,50988,51004,51008,51016,51020,51036,51048,51052,51064,51068,51072,51080,51084,51088,51096,51100,51108,51112,51120,51124,51128,51170,51212,51216,51220,51236,51240,51256,51260,51264,51272,51276,51280,51292,51330,51334,51338,51346,51350,51364,51374,51380,51386,51392,51398,51402,51406,51412,51416,51420,51428,51432,51450,51454,51458,51462,51478,51482,51486,51490,51494,51498,51518,51538,51542,51546,51550,51558,51566,51570,51586,51606,51626,51630,51635,51644,51653,51658,51663,51668,51681,51686,51695,51704,51721],{"__ignoreMap":57},[79,49945,49946,49948],{"class":81,"line":82},[79,49947,432],{"class":243},[79,49949,33940],{"class":239},[79,49951,49952,49954],{"class":81,"line":167},[79,49953,432],{"class":243},[79,49955,33947],{"class":239},[79,49957,49958,49960,49962,49964],{"class":81,"line":178},[79,49959,432],{"class":243},[79,49961,33958],{"class":239},[79,49963,445],{"class":243},[79,49965,33963],{"class":239},[79,49967,49968,49970],{"class":81,"line":457},[79,49969,432],{"class":243},[79,49971,32521],{"class":239},[79,49973,49974,49976,49978,49980],{"class":81,"line":462},[79,49975,32862],{"class":243},[79,49977,33534],{"class":239},[79,49979,432],{"class":243},[79,49981,33980],{"class":239},[79,49983,49984,49986,49988,49990,49993],{"class":81,"line":474},[79,49985,32862],{"class":243},[79,49987,33490],{"class":239},[79,49989,432],{"class":243},[79,49991,49992],{"class":239}," ImageFolder ",[79,49994,49995],{"class":2440},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[79,49997,49998,50000,50002,50004],{"class":81,"line":480},[79,49999,32862],{"class":243},[79,50001,33517],{"class":239},[79,50003,432],{"class":243},[79,50005,33522],{"class":239},[79,50007,50008,50010,50012,50014],{"class":81,"line":486},[79,50009,432],{"class":243},[79,50011,33534],{"class":239},[79,50013,445],{"class":243},[79,50015,33539],{"class":239},[79,50017,50018,50020,50022,50024],{"class":81,"line":491},[79,50019,432],{"class":243},[79,50021,33551],{"class":239},[79,50023,445],{"class":243},[79,50025,33556],{"class":239},[79,50027,50028],{"class":81,"line":497},[79,50029,34025],{"class":2440},[79,50031,50032,50034,50036,50038],{"class":81,"line":503},[79,50033,32862],{"class":243},[79,50035,34032],{"class":239},[79,50037,432],{"class":243},[79,50039,45145],{"class":239},[79,50041,50042,50044,50046,50048],{"class":81,"line":509},[79,50043,32862],{"class":243},[79,50045,32865],{"class":239},[79,50047,432],{"class":243},[79,50049,32870],{"class":239},[79,50051,50052],{"class":81,"line":514},[79,50053,454],{"emptyLinePlaceholder":453},[79,50055,50056],{"class":81,"line":520},[79,50057,34060],{"class":2440},[79,50059,50060,50062,50064],{"class":81,"line":526},[79,50061,633],{"class":243},[79,50063,34067],{"class":85},[79,50065,34070],{"class":239},[79,50067,50068],{"class":81,"line":532},[79,50069,50070],{"class":2440},"    # 导入自己的数据集，并进行数据处理\n",[79,50072,50073],{"class":81,"line":537},[79,50074,50075],{"class":2440},"    # 定义数据集的路径\n",[79,50077,50078,50081,50083,50085,50087,50089,50093],{"class":81,"line":543},[79,50079,50080],{"class":96},"    ROOT_PATH",[79,50082,244],{"class":243},[79,50084,3043],{"class":243},[79,50086,703],{"class":89},[79,50088,2931],{"class":96},[79,50090,50092],{"class":50091},"sA_wV","\u002Fdata\u002Ftrain",[79,50094,27268],{"class":89},[79,50096,50097],{"class":81,"line":549},[79,50098,454],{"emptyLinePlaceholder":453},[79,50100,50101],{"class":81,"line":555},[79,50102,50103],{"class":2440},"    # 定义归一化方法\n",[79,50105,50106],{"class":81,"line":561},[79,50107,50108],{"class":2440},"    # 这里需要先计算一下数据集的均值和方差\n",[79,50110,50111],{"class":81,"line":567},[79,50112,50113],{"class":2440},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[79,50115,50116],{"class":81,"line":573},[79,50117,50118],{"class":2440},"    # 第一个参数是均值，第二个参数是方差\n",[79,50120,50121,50124,50126,50129,50132,50134,50137,50139,50142,50145,50148,50150,50153,50155,50158],{"class":81,"line":579},[79,50122,50123],{"class":239},"    normalize",[79,50125,244],{"class":243},[79,50127,50128],{"class":239},"transforms.Normalize([",[79,50130,50131],{"class":96},"0.162",[79,50133,2752],{"class":239},[79,50135,50136],{"class":96},"0.151",[79,50138,2752],{"class":239},[79,50140,50141],{"class":96},"0.138",[79,50143,50144],{"class":239},"],[",[79,50146,50147],{"class":96},"0.058",[79,50149,2752],{"class":239},[79,50151,50152],{"class":96},"0.052",[79,50154,2752],{"class":239},[79,50156,50157],{"class":96},"0.048",[79,50159,1243],{"class":239},[79,50161,50162],{"class":81,"line":584},[79,50163,50164],{"class":2440},"    # 定义数据集处理方法变量\n",[79,50166,50167,50170,50172],{"class":81,"line":590},[79,50168,50169],{"class":239},"    train_transform",[79,50171,244],{"class":243},[79,50173,50174],{"class":239},"transforms.Compose([\n",[79,50176,50177],{"class":81,"line":596},[79,50178,50179],{"class":2440},"        # 调整图像大小为224*224\n",[79,50181,50182,50185,50187,50189,50191],{"class":81,"line":602},[79,50183,50184],{"class":239},"        transforms.Resize((",[79,50186,33620],{"class":96},[79,50188,2752],{"class":239},[79,50190,33620],{"class":96},[79,50192,44736],{"class":239},[79,50194,50195],{"class":81,"line":608},[79,50196,50197],{"class":2440},"        # 将图像转换为张量\n",[79,50199,50200],{"class":81,"line":614},[79,50201,50202],{"class":239},"        transforms.ToTensor(),\n",[79,50204,50205],{"class":81,"line":620},[79,50206,50207],{"class":239},"        normalize])\n",[79,50209,50210],{"class":81,"line":625},[79,50211,50212],{"class":2440},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[79,50214,50215],{"class":81,"line":630},[79,50216,50217],{"class":2440},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[79,50219,50220],{"class":81,"line":648},[79,50221,454],{"emptyLinePlaceholder":453},[79,50223,50224],{"class":81,"line":659},[79,50225,50226],{"class":2440},"    # 加载数据集\n",[79,50228,50229],{"class":81,"line":676},[79,50230,50231],{"class":2440},"    # 传入数据集路径与处理方法\n",[79,50233,50234,50236,50238,50241,50244,50246,50249,50251],{"class":81,"line":708},[79,50235,34075],{"class":239},[79,50237,244],{"class":243},[79,50239,50240],{"class":239},"ImageFolder(",[79,50242,50243],{"class":96},"ROOT_PATH",[79,50245,2752],{"class":239},[79,50247,50248],{"class":7412},"transform",[79,50250,244],{"class":243},[79,50252,50253],{"class":239},"train_transform)\n",[79,50255,50256],{"class":81,"line":717},[79,50257,454],{"emptyLinePlaceholder":453},[79,50259,50260,50262,50264,50266,50268,50270,50272,50274,50276,50278,50280,50282,50284,50286,50288],{"class":81,"line":722},[79,50261,34127],{"class":239},[79,50263,244],{"class":243},[79,50265,34132],{"class":239},[79,50267,1264],{"class":96},[79,50269,685],{"class":239},[79,50271,34139],{"class":96},[79,50273,2829],{"class":243},[79,50275,9552],{"class":96},[79,50277,34146],{"class":239},[79,50279,1264],{"class":96},[79,50281,685],{"class":239},[79,50283,34153],{"class":96},[79,50285,2829],{"class":243},[79,50287,9552],{"class":96},[79,50289,34160],{"class":239},[79,50291,50292,50294,50296,50298,50300,50302],{"class":81,"line":727},[79,50293,34165],{"class":239},[79,50295,244],{"class":243},[79,50297,34170],{"class":239},[79,50299,33656],{"class":7412},[79,50301,244],{"class":243},[79,50303,33661],{"class":239},[79,50305,50306,50308,50310,50312],{"class":81,"line":738},[79,50307,34181],{"class":7412},[79,50309,244],{"class":243},[79,50311,2575],{"class":96},[79,50313,33585],{"class":239},[79,50315,50316,50318,50320,50322],{"class":81,"line":753},[79,50317,34193],{"class":7412},[79,50319,244],{"class":243},[79,50321,33595],{"class":96},[79,50323,33585],{"class":239},[79,50325,50326],{"class":81,"line":768},[79,50327,34204],{"class":2440},[79,50329,50330,50332,50334,50336],{"class":81,"line":776},[79,50331,34209],{"class":7412},[79,50333,244],{"class":243},[79,50335,2769],{"class":96},[79,50337,253],{"class":239},[79,50339,50340,50342,50344,50346,50348,50350],{"class":81,"line":781},[79,50341,34220],{"class":239},[79,50343,244],{"class":243},[79,50345,33653],{"class":239},[79,50347,33656],{"class":7412},[79,50349,244],{"class":243},[79,50351,34231],{"class":239},[79,50353,50354,50356,50358,50360],{"class":81,"line":786},[79,50355,34236],{"class":7412},[79,50357,244],{"class":243},[79,50359,2575],{"class":96},[79,50361,33585],{"class":239},[79,50363,50364,50366,50368,50370],{"class":81,"line":802},[79,50365,34247],{"class":7412},[79,50367,244],{"class":243},[79,50369,33595],{"class":96},[79,50371,33585],{"class":239},[79,50373,50374,50376,50378,50380],{"class":81,"line":815},[79,50375,34258],{"class":7412},[79,50377,244],{"class":243},[79,50379,2769],{"class":96},[79,50381,253],{"class":239},[79,50383,50384,50386],{"class":81,"line":828},[79,50385,711],{"class":243},[79,50387,34271],{"class":239},[79,50389,50390],{"class":81,"line":842},[79,50391,454],{"emptyLinePlaceholder":453},[79,50393,50394],{"class":81,"line":859},[79,50395,34280],{"class":2440},[79,50397,50398],{"class":81,"line":878},[79,50399,34285],{"class":2440},[79,50401,50402],{"class":81,"line":883},[79,50403,454],{"emptyLinePlaceholder":453},[79,50405,50406],{"class":81,"line":888},[79,50407,34294],{"class":2440},[79,50409,50410,50412,50414],{"class":81,"line":904},[79,50411,633],{"class":243},[79,50413,34301],{"class":85},[79,50415,34304],{"class":239},[79,50417,50418,50420,50422,50424,50426,50428,50430,50432,50434],{"class":81,"line":919},[79,50419,33360],{"class":239},[79,50421,244],{"class":243},[79,50423,32577],{"class":239},[79,50425,33367],{"class":89},[79,50427,3929],{"class":243},[79,50429,33372],{"class":239},[79,50431,3926],{"class":243},[79,50433,34323],{"class":89},[79,50435,253],{"class":239},[79,50437,50438],{"class":81,"line":930},[79,50439,454],{"emptyLinePlaceholder":453},[79,50441,50442],{"class":81,"line":941},[79,50443,34338],{"class":2440},[79,50445,50446],{"class":81,"line":946},[79,50447,34343],{"class":2440},[79,50449,50450],{"class":81,"line":969},[79,50451,34348],{"class":2440},[79,50453,50454,50456,50458,50460,50462,50464,50466],{"class":81,"line":975},[79,50455,34353],{"class":239},[79,50457,244],{"class":243},[79,50459,34358],{"class":239},[79,50461,34361],{"class":7412},[79,50463,244],{"class":243},[79,50465,34366],{"class":96},[79,50467,253],{"class":239},[79,50469,50470],{"class":81,"line":989},[79,50471,454],{"emptyLinePlaceholder":453},[79,50473,50474],{"class":81,"line":1003},[79,50475,34377],{"class":2440},[79,50477,50478,50480,50482],{"class":81,"line":1019},[79,50479,34382],{"class":239},[79,50481,244],{"class":243},[79,50483,34387],{"class":239},[79,50485,50486],{"class":81,"line":1024},[79,50487,454],{"emptyLinePlaceholder":453},[79,50489,50490],{"class":81,"line":1067},[79,50491,34396],{"class":2440},[79,50493,50494,50496,50498],{"class":81,"line":1101},[79,50495,33412],{"class":239},[79,50497,244],{"class":243},[79,50499,34405],{"class":239},[79,50501,50502],{"class":81,"line":1106},[79,50503,34410],{"class":2440},[79,50505,50506],{"class":81,"line":1112},[79,50507,34415],{"class":2440},[79,50509,50510],{"class":81,"line":1124},[79,50511,34420],{"class":2440},[79,50513,50514,50516,50518],{"class":81,"line":1129},[79,50515,34425],{"class":239},[79,50517,244],{"class":243},[79,50519,34430],{"class":239},[79,50521,50522],{"class":81,"line":1150},[79,50523,454],{"emptyLinePlaceholder":453},[79,50525,50526],{"class":81,"line":1161},[79,50527,34443],{"class":2440},[79,50529,50530],{"class":81,"line":1175},[79,50531,34448],{"class":2440},[79,50533,50534,50536,50538],{"class":81,"line":1194},[79,50535,34453],{"class":239},[79,50537,244],{"class":243},[79,50539,34458],{"class":96},[79,50541,50542],{"class":81,"line":1211},[79,50543,34463],{"class":2440},[79,50545,50546,50548,50550],{"class":81,"line":1228},[79,50547,34468],{"class":239},[79,50549,244],{"class":243},[79,50551,34473],{"class":239},[79,50553,50554],{"class":81,"line":1246},[79,50555,34478],{"class":2440},[79,50557,50558,50560,50562],{"class":81,"line":1251},[79,50559,34483],{"class":239},[79,50561,244],{"class":243},[79,50563,34473],{"class":239},[79,50565,50566],{"class":81,"line":1274},[79,50567,34492],{"class":2440},[79,50569,50570,50572,50574],{"class":81,"line":1296},[79,50571,34497],{"class":239},[79,50573,244],{"class":243},[79,50575,34473],{"class":239},[79,50577,50578],{"class":81,"line":1316},[79,50579,34506],{"class":2440},[79,50581,50582,50584,50586],{"class":81,"line":1321},[79,50583,34511],{"class":239},[79,50585,244],{"class":243},[79,50587,34473],{"class":239},[79,50589,50590],{"class":81,"line":1326},[79,50591,454],{"emptyLinePlaceholder":453},[79,50593,50594],{"class":81,"line":1342},[79,50595,34524],{"class":2440},[79,50597,50598,50600,50602],{"class":81,"line":18985},[79,50599,34529],{"class":239},[79,50601,244],{"class":243},[79,50603,34534],{"class":239},[79,50605,50606],{"class":81,"line":18990},[79,50607,454],{"emptyLinePlaceholder":453},[79,50609,50610],{"class":81,"line":18995},[79,50611,34547],{"class":2440},[79,50613,50614,50616,50618,50620,50622],{"class":81,"line":19009},[79,50615,949],{"class":243},[79,50617,34554],{"class":239},[79,50619,955],{"class":243},[79,50621,958],{"class":96},[79,50623,34561],{"class":239},[79,50625,50626,50628,50630,50632,50634,50636,50638,50640,50642,50644,50646],{"class":81,"line":19021},[79,50627,34566],{"class":96},[79,50629,685],{"class":239},[79,50631,34571],{"class":89},[79,50633,34574],{"class":96},[79,50635,2957],{"class":89},[79,50637,34574],{"class":96},[79,50639,703],{"class":89},[79,50641,34583],{"class":239},[79,50643,320],{"class":243},[79,50645,1072],{"class":96},[79,50647,1191],{"class":239},[79,50649,50650,50652,50654,50656,50658,50660],{"class":81,"line":19026},[79,50651,34566],{"class":96},[79,50653,685],{"class":239},[79,50655,34598],{"class":89},[79,50657,2829],{"class":243},[79,50659,2820],{"class":96},[79,50661,253],{"class":239},[79,50663,50664],{"class":81,"line":19039},[79,50665,454],{"emptyLinePlaceholder":453},[79,50667,50668],{"class":81,"line":19044},[79,50669,34613],{"class":2440},[79,50671,50672],{"class":81,"line":19049},[79,50673,34618],{"class":2440},[79,50675,50676,50678,50680],{"class":81,"line":19054},[79,50677,34623],{"class":239},[79,50679,244],{"class":243},[79,50681,34458],{"class":96},[79,50683,50684],{"class":81,"line":19067},[79,50685,34632],{"class":2440},[79,50687,50688,50690,50692],{"class":81,"line":19072},[79,50689,34637],{"class":239},[79,50691,244],{"class":243},[79,50693,5290],{"class":96},[79,50695,50696],{"class":81,"line":34748},[79,50697,34646],{"class":2440},[79,50699,50700,50702,50704],{"class":81,"line":34754},[79,50701,34651],{"class":239},[79,50703,244],{"class":243},[79,50705,34458],{"class":96},[79,50707,50708],{"class":81,"line":34760},[79,50709,34660],{"class":2440},[79,50711,50712,50714,50716],{"class":81,"line":34766},[79,50713,34665],{"class":239},[79,50715,244],{"class":243},[79,50717,5290],{"class":96},[79,50719,50720],{"class":81,"line":34772},[79,50721,34674],{"class":2440},[79,50723,50724,50726,50728],{"class":81,"line":34783},[79,50725,34679],{"class":239},[79,50727,244],{"class":243},[79,50729,5290],{"class":96},[79,50731,50732],{"class":81,"line":34789},[79,50733,34688],{"class":2440},[79,50735,50736,50738,50740],{"class":81,"line":34809},[79,50737,34693],{"class":239},[79,50739,244],{"class":243},[79,50741,5290],{"class":96},[79,50743,50744],{"class":81,"line":34815},[79,50745,34702],{"class":2440},[79,50747,50748,50750,50752,50754,50756],{"class":81,"line":34826},[79,50749,5606],{"class":243},[79,50751,33720],{"class":239},[79,50753,955],{"class":243},[79,50755,33725],{"class":96},[79,50757,34715],{"class":239},[79,50759,50760],{"class":81,"line":34832},[79,50761,34720],{"class":2440},[79,50763,50764,50766,50768],{"class":81,"line":34838},[79,50765,34725],{"class":239},[79,50767,244],{"class":243},[79,50769,34730],{"class":239},[79,50771,50772],{"class":81,"line":34844},[79,50773,34735],{"class":2440},[79,50775,50776,50778,50780],{"class":81,"line":34850},[79,50777,34740],{"class":239},[79,50779,244],{"class":243},[79,50781,34745],{"class":239},[79,50783,50784],{"class":81,"line":34856},[79,50785,34751],{"class":2440},[79,50787,50788],{"class":81,"line":34862},[79,50789,34757],{"class":239},[79,50791,50792],{"class":81,"line":34868},[79,50793,34763],{"class":2440},[79,50795,50796],{"class":81,"line":34888},[79,50797,34769],{"class":2440},[79,50799,50800,50802,50804],{"class":81,"line":34894},[79,50801,34775],{"class":239},[79,50803,244],{"class":243},[79,50805,34780],{"class":239},[79,50807,50808],{"class":81,"line":34910},[79,50809,34786],{"class":2440},[79,50811,50812,50814,50816,50818,50820,50822,50824],{"class":81,"line":34916},[79,50813,34792],{"class":239},[79,50815,244],{"class":243},[79,50817,34797],{"class":239},[79,50819,34800],{"class":7412},[79,50821,244],{"class":243},[79,50823,1072],{"class":96},[79,50825,253],{"class":239},[79,50827,50828],{"class":81,"line":34930},[79,50829,34812],{"class":2440},[79,50831,50832,50834,50836],{"class":81,"line":34936},[79,50833,34818],{"class":239},[79,50835,244],{"class":243},[79,50837,34823],{"class":239},[79,50839,50840],{"class":81,"line":34951},[79,50841,34829],{"class":2440},[79,50843,50844],{"class":81,"line":34957},[79,50845,34835],{"class":239},[79,50847,50848],{"class":81,"line":34966},[79,50849,34841],{"class":2440},[79,50851,50852],{"class":81,"line":34972},[79,50853,34847],{"class":239},[79,50855,50856],{"class":81,"line":34981},[79,50857,34853],{"class":2440},[79,50859,50860],{"class":81,"line":34987},[79,50861,34859],{"class":239},[79,50863,50864],{"class":81,"line":34993},[79,50865,34865],{"class":2440},[79,50867,50868,50870,50872,50874,50876,50878,50880],{"class":81,"line":35002},[79,50869,34871],{"class":239},[79,50871,1118],{"class":243},[79,50873,34876],{"class":239},[79,50875,2829],{"class":243},[79,50877,34881],{"class":239},[79,50879,1030],{"class":96},[79,50881,253],{"class":239},[79,50883,50884],{"class":81,"line":35008},[79,50885,34891],{"class":2440},[79,50887,50888,50890,50892,50894,50896],{"class":81,"line":35019},[79,50889,34897],{"class":239},[79,50891,1118],{"class":243},[79,50893,34902],{"class":239},[79,50895,5155],{"class":243},[79,50897,34907],{"class":239},[79,50899,50900],{"class":81,"line":35025},[79,50901,34913],{"class":2440},[79,50903,50904,50906,50908,50910,50912],{"class":81,"line":35044},[79,50905,34919],{"class":239},[79,50907,1118],{"class":243},[79,50909,34881],{"class":239},[79,50911,1030],{"class":96},[79,50913,253],{"class":239},[79,50915,50916],{"class":81,"line":35050},[79,50917,34933],{"class":2440},[79,50919,50920,50922,50924,50926,50928],{"class":81,"line":35061},[79,50921,5606],{"class":243},[79,50923,34941],{"class":239},[79,50925,955],{"class":243},[79,50927,33725],{"class":96},[79,50929,34948],{"class":239},[79,50931,50932],{"class":81,"line":35067},[79,50933,34954],{"class":2440},[79,50935,50936,50938,50940],{"class":81,"line":35087},[79,50937,34725],{"class":239},[79,50939,244],{"class":243},[79,50941,34730],{"class":239},[79,50943,50944],{"class":81,"line":35103},[79,50945,34969],{"class":2440},[79,50947,50948,50950,50952],{"class":81,"line":35109},[79,50949,34740],{"class":239},[79,50951,244],{"class":243},[79,50953,34745],{"class":239},[79,50955,50956],{"class":81,"line":35123},[79,50957,34984],{"class":2440},[79,50959,50960],{"class":81,"line":35129},[79,50961,34990],{"class":239},[79,50963,50964],{"class":81,"line":35135},[79,50965,38470],{"class":2440},[79,50967,50968,50970],{"class":81,"line":35146},[79,50969,34996],{"class":243},[79,50971,34999],{"class":239},[79,50973,50974],{"class":81,"line":35152},[79,50975,35005],{"class":2440},[79,50977,50978,50980,50982],{"class":81,"line":35158},[79,50979,38485],{"class":239},[79,50981,244],{"class":243},[79,50983,34780],{"class":239},[79,50985,50986],{"class":81,"line":35168},[79,50987,35022],{"class":2440},[79,50989,50990,50992,50994,50996,50998,51000,51002],{"class":81,"line":35174},[79,50991,38498],{"class":239},[79,50993,244],{"class":243},[79,50995,34797],{"class":239},[79,50997,34800],{"class":7412},[79,50999,244],{"class":243},[79,51001,1072],{"class":96},[79,51003,253],{"class":239},[79,51005,51006],{"class":81,"line":35185},[79,51007,35047],{"class":2440},[79,51009,51010,51012,51014],{"class":81,"line":35191},[79,51011,38519],{"class":239},[79,51013,244],{"class":243},[79,51015,34823],{"class":239},[79,51017,51018],{"class":81,"line":35201},[79,51019,35064],{"class":2440},[79,51021,51022,51024,51026,51028,51030,51032,51034],{"class":81,"line":35206},[79,51023,38532],{"class":239},[79,51025,1118],{"class":243},[79,51027,38537],{"class":239},[79,51029,2829],{"class":243},[79,51031,34881],{"class":239},[79,51033,1030],{"class":96},[79,51035,253],{"class":239},[79,51037,51038,51040,51042,51044,51046],{"class":81,"line":35212},[79,51039,38550],{"class":239},[79,51041,1118],{"class":243},[79,51043,34902],{"class":239},[79,51045,5155],{"class":243},[79,51047,34907],{"class":239},[79,51049,51050],{"class":81,"line":35261},[79,51051,38563],{"class":2440},[79,51053,51054,51056,51058,51060,51062],{"class":81,"line":35308},[79,51055,38568],{"class":239},[79,51057,1118],{"class":243},[79,51059,34881],{"class":239},[79,51061,1030],{"class":96},[79,51063,253],{"class":239},[79,51065,51066],{"class":81,"line":35313},[79,51067,35126],{"class":2440},[79,51069,51070],{"class":81,"line":35319},[79,51071,35132],{"class":2440},[79,51073,51074,51076,51078],{"class":81,"line":35338},[79,51075,35138],{"class":239},[79,51077,2957],{"class":243},[79,51079,35143],{"class":239},[79,51081,51082],{"class":81,"line":35344},[79,51083,35149],{"class":2440},[79,51085,51086],{"class":81,"line":35364},[79,51087,35155],{"class":2440},[79,51089,51090,51092,51094],{"class":81,"line":35370},[79,51091,35161],{"class":239},[79,51093,2957],{"class":243},[79,51095,35143],{"class":239},[79,51097,51098],{"class":81,"line":35376},[79,51099,35171],{"class":2440},[79,51101,51102,51104,51106],{"class":81,"line":35386},[79,51103,35177],{"class":239},[79,51105,2957],{"class":243},[79,51107,35182],{"class":239},[79,51109,51110],{"class":81,"line":35391},[79,51111,35188],{"class":2440},[79,51113,51114,51116,51118],{"class":81,"line":35397},[79,51115,35194],{"class":239},[79,51117,2957],{"class":243},[79,51119,35182],{"class":239},[79,51121,51122],{"class":81,"line":35413},[79,51123,454],{"emptyLinePlaceholder":453},[79,51125,51126],{"class":81,"line":35458},[79,51127,35209],{"class":2440},[79,51129,51130,51132,51134,51136,51138,51140,51142,51144,51146,51148,51150,51152,51154,51156,51158,51160,51162,51164,51166,51168],{"class":81,"line":35464},[79,51131,34566],{"class":96},[79,51133,685],{"class":239},[79,51135,5795],{"class":89},[79,51137,34574],{"class":96},[79,51139,35223],{"class":89},[79,51141,694],{"class":96},[79,51143,35228],{"class":243},[79,51145,700],{"class":96},[79,51147,35233],{"class":89},[79,51149,694],{"class":96},[79,51151,35228],{"class":243},[79,51153,700],{"class":96},[79,51155,5795],{"class":89},[79,51157,35244],{"class":239},[79,51159,320],{"class":243},[79,51161,1072],{"class":96},[79,51163,35251],{"class":239},[79,51165,320],{"class":243},[79,51167,1072],{"class":96},[79,51169,35258],{"class":239},[79,51171,51172,51174,51176,51178,51180,51182,51184,51186,51188,51190,51192,51194,51196,51198,51200,51202,51204,51206,51208,51210],{"class":81,"line":35470},[79,51173,34566],{"class":96},[79,51175,685],{"class":239},[79,51177,5795],{"class":89},[79,51179,34574],{"class":96},[79,51181,35272],{"class":89},[79,51183,694],{"class":96},[79,51185,35228],{"class":243},[79,51187,700],{"class":96},[79,51189,35281],{"class":89},[79,51191,694],{"class":96},[79,51193,35228],{"class":243},[79,51195,700],{"class":96},[79,51197,5795],{"class":89},[79,51199,35292],{"class":239},[79,51201,320],{"class":243},[79,51203,1072],{"class":96},[79,51205,35299],{"class":239},[79,51207,320],{"class":243},[79,51209,1072],{"class":96},[79,51211,35258],{"class":239},[79,51213,51214],{"class":81,"line":35476},[79,51215,454],{"emptyLinePlaceholder":453},[79,51217,51218],{"class":81,"line":35487},[79,51219,35316],{"class":2440},[79,51221,51222,51224,51226,51228,51230,51232,51234],{"class":81,"line":35493},[79,51223,1132],{"class":243},[79,51225,35324],{"class":239},[79,51227,320],{"class":243},[79,51229,1072],{"class":96},[79,51231,3311],{"class":239},[79,51233,3330],{"class":243},[79,51235,35335],{"class":239},[79,51237,51238],{"class":81,"line":35499},[79,51239,35341],{"class":2440},[79,51241,51242,51244,51246,51248,51250,51252,51254],{"class":81,"line":35505},[79,51243,35347],{"class":239},[79,51245,797],{"class":96},[79,51247,244],{"class":243},[79,51249,35354],{"class":239},[79,51251,320],{"class":243},[79,51253,1072],{"class":96},[79,51255,35361],{"class":239},[79,51257,51258],{"class":81,"line":35523},[79,51259,35367],{"class":2440},[79,51261,51262],{"class":81,"line":35537},[79,51263,35373],{"class":2440},[79,51265,51266,51268,51270],{"class":81,"line":35546},[79,51267,35379],{"class":239},[79,51269,244],{"class":243},[79,51271,34430],{"class":239},[79,51273,51274],{"class":81,"line":35555},[79,51275,454],{"emptyLinePlaceholder":453},[79,51277,51278],{"class":81,"line":35564},[79,51279,35394],{"class":2440},[79,51281,51282,51284,51286,51288,51290],{"class":81,"line":35573},[79,51283,35400],{"class":239},[79,51285,244],{"class":243},[79,51287,35405],{"class":239},[79,51289,320],{"class":243},[79,51291,35410],{"class":239},[79,51293,51294,51296,51298,51300,51302,51304,51306,51308,51310,51312,51314,51316,51318,51320,51322,51324,51326,51328],{"class":81,"line":35579},[79,51295,34566],{"class":96},[79,51297,685],{"class":239},[79,51299,35420],{"class":89},[79,51301,694],{"class":96},[79,51303,35425],{"class":243},[79,51305,700],{"class":96},[79,51307,2917],{"class":89},[79,51309,694],{"class":96},[79,51311,35425],{"class":243},[79,51313,700],{"class":96},[79,51315,35438],{"class":89},[79,51317,35441],{"class":239},[79,51319,35444],{"class":243},[79,51321,3279],{"class":96},[79,51323,35449],{"class":239},[79,51325,1137],{"class":243},[79,51327,3279],{"class":96},[79,51329,1191],{"class":239},[79,51331,51332],{"class":81,"line":35585},[79,51333,38847],{"class":2440},[79,51335,51336],{"class":81,"line":35593},[79,51337,38852],{"class":2440},[79,51339,51340,51342,51344],{"class":81,"line":35598},[79,51341,38857],{"class":239},[79,51343,35482],{"class":89},[79,51345,253],{"class":239},[79,51347,51348],{"class":81,"line":35604},[79,51349,35502],{"class":2440},[79,51351,51352,51354,51356,51358,51360,51362],{"class":81,"line":35615},[79,51353,35508],{"class":239},[79,51355,244],{"class":243},[79,51357,35513],{"class":239},[79,51359,35516],{"class":7412},[79,51361,244],{"class":243},[79,51363,3782],{"class":239},[79,51365,51366,51368,51370,51372],{"class":81,"line":35621},[79,51367,35526],{"class":89},[79,51369,3232],{"class":239},[79,51371,35531],{"class":96},[79,51373,35534],{"class":239},[79,51375,51376,51378],{"class":81,"line":35641},[79,51377,35540],{"class":89},[79,51379,35543],{"class":239},[79,51381,51382,51384],{"class":81,"line":35647},[79,51383,35549],{"class":89},[79,51385,35552],{"class":239},[79,51387,51388,51390],{"class":81,"line":35653},[79,51389,35558],{"class":89},[79,51391,35561],{"class":239},[79,51393,51394,51396],{"class":81,"line":35659},[79,51395,35567],{"class":89},[79,51397,35570],{"class":239},[79,51399,51400],{"class":81,"line":35676},[79,51401,35576],{"class":239},[79,51403,51404],{"class":81,"line":35682},[79,51405,35582],{"class":2440},[79,51407,51408,51410],{"class":81,"line":35688},[79,51409,711],{"class":243},[79,51411,35590],{"class":239},[79,51413,51414],{"class":81,"line":35694},[79,51415,454],{"emptyLinePlaceholder":453},[79,51417,51418],{"class":81,"line":35700},[79,51419,35601],{"class":2440},[79,51421,51422,51424,51426],{"class":81,"line":35706},[79,51423,633],{"class":243},[79,51425,35609],{"class":85},[79,51427,35612],{"class":239},[79,51429,51430],{"class":81,"line":35733},[79,51431,35618],{"class":2440},[79,51433,51434,51436,51438,51440,51442,51444,51446,51448],{"class":81,"line":35757},[79,51435,35624],{"class":239},[79,51437,33811],{"class":7412},[79,51439,244],{"class":243},[79,51441,685],{"class":239},[79,51443,2872],{"class":96},[79,51445,2752],{"class":239},[79,51447,2668],{"class":96},[79,51449,1191],{"class":239},[79,51451,51452],{"class":81,"line":35763},[79,51453,35644],{"class":2440},[79,51455,51456],{"class":81,"line":35769},[79,51457,35650],{"class":2440},[79,51459,51460],{"class":81,"line":35775},[79,51461,35656],{"class":2440},[79,51463,51464,51466,51468,51470,51472,51474,51476],{"class":81,"line":35786},[79,51465,33845],{"class":239},[79,51467,1072],{"class":96},[79,51469,2752],{"class":239},[79,51471,1049],{"class":96},[79,51473,2752],{"class":239},[79,51475,1072],{"class":96},[79,51477,253],{"class":239},[79,51479,51480],{"class":81,"line":35797},[79,51481,35679],{"class":2440},[79,51483,51484],{"class":81,"line":35803},[79,51485,35685],{"class":2440},[79,51487,51488],{"class":81,"line":35820},[79,51489,35691],{"class":2440},[79,51491,51492],{"class":81,"line":35843},[79,51493,35697],{"class":2440},[79,51495,51496],{"class":81,"line":35866},[79,51497,35703],{"class":2440},[79,51499,51500,51502,51504,51506,51508,51510,51512,51514,51516],{"class":81,"line":35872},[79,51501,35709],{"class":239},[79,51503,35712],{"class":89},[79,51505,35715],{"class":239},[79,51507,35718],{"class":89},[79,51509,2752],{"class":239},[79,51511,35723],{"class":7412},[79,51513,244],{"class":243},[79,51515,35728],{"class":89},[79,51517,253],{"class":239},[79,51519,51520,51522,51524,51526,51528,51530,51532,51534,51536],{"class":81,"line":35877},[79,51521,35709],{"class":239},[79,51523,35712],{"class":89},[79,51525,35740],{"class":239},[79,51527,35743],{"class":89},[79,51529,2752],{"class":239},[79,51531,35723],{"class":7412},[79,51533,244],{"class":243},[79,51535,35752],{"class":89},[79,51537,253],{"class":239},[79,51539,51540],{"class":81,"line":35886},[79,51541,35760],{"class":2440},[79,51543,51544],{"class":81,"line":35896},[79,51545,35766],{"class":239},[79,51547,51548],{"class":81,"line":35902},[79,51549,35772],{"class":2440},[79,51551,51552,51554,51556],{"class":81,"line":35907},[79,51553,35778],{"class":239},[79,51555,35781],{"class":89},[79,51557,253],{"class":239},[79,51559,51560,51562,51564],{"class":81,"line":35913},[79,51561,35789],{"class":239},[79,51563,35792],{"class":89},[79,51565,253],{"class":239},[79,51567,51568],{"class":81,"line":35926},[79,51569,35800],{"class":2440},[79,51571,51572,51574,51576,51578,51580,51582,51584],{"class":81,"line":35932},[79,51573,33845],{"class":239},[79,51575,1072],{"class":96},[79,51577,2752],{"class":239},[79,51579,1049],{"class":96},[79,51581,2752],{"class":239},[79,51583,1049],{"class":96},[79,51585,253],{"class":239},[79,51587,51588,51590,51592,51594,51596,51598,51600,51602,51604],{"class":81,"line":35943},[79,51589,35709],{"class":239},[79,51591,35712],{"class":89},[79,51593,35827],{"class":239},[79,51595,35718],{"class":89},[79,51597,2752],{"class":239},[79,51599,35723],{"class":7412},[79,51601,244],{"class":243},[79,51603,35838],{"class":89},[79,51605,253],{"class":239},[79,51607,51608,51610,51612,51614,51616,51618,51620,51622,51624],{"class":81,"line":35954},[79,51609,35709],{"class":239},[79,51611,35712],{"class":89},[79,51613,35850],{"class":239},[79,51615,35743],{"class":89},[79,51617,2752],{"class":239},[79,51619,35723],{"class":7412},[79,51621,244],{"class":243},[79,51623,35861],{"class":89},[79,51625,253],{"class":239},[79,51627,51628],{"class":81,"line":35973},[79,51629,35869],{"class":2440},[79,51631,51633],{"class":81,"line":51632},219,[79,51634,35766],{"class":239},[79,51636,51638,51640,51642],{"class":81,"line":51637},220,[79,51639,35778],{"class":239},[79,51641,35712],{"class":89},[79,51643,253],{"class":239},[79,51645,51647,51649,51651],{"class":81,"line":51646},221,[79,51648,35789],{"class":239},[79,51650,35891],{"class":89},[79,51652,253],{"class":239},[79,51654,51656],{"class":81,"line":51655},222,[79,51657,35899],{"class":239},[79,51659,51661],{"class":81,"line":51660},223,[79,51662,454],{"emptyLinePlaceholder":453},[79,51664,51666],{"class":81,"line":51665},224,[79,51667,35910],{"class":2440},[79,51669,51671,51673,51675,51677,51679],{"class":81,"line":51670},225,[79,51672,1329],{"class":243},[79,51674,1332],{"class":96},[79,51676,5155],{"class":243},[79,51678,33348],{"class":89},[79,51680,673],{"class":239},[79,51682,51684],{"class":81,"line":51683},226,[79,51685,35929],{"class":2440},[79,51687,51689,51691,51693],{"class":81,"line":51688},227,[79,51690,46660],{"class":239},[79,51692,244],{"class":243},[79,51694,46665],{"class":239},[79,51696,51698,51700,51702],{"class":81,"line":51697},228,[79,51699,35946],{"class":239},[79,51701,244],{"class":243},[79,51703,35951],{"class":239},[79,51705,51707,51709,51711,51713,51715,51717,51719],{"class":81,"line":51706},229,[79,51708,35508],{"class":239},[79,51710,244],{"class":243},[79,51712,46682],{"class":239},[79,51714,35964],{"class":7412},[79,51716,244],{"class":243},[79,51718,3279],{"class":96},[79,51720,253],{"class":239},[79,51722,51724],{"class":81,"line":51723},230,[79,51725,35976],{"class":239},[24137,51727,51729],{"id":51728},"_242测试代码","2.4.2.测试代码",[19,51731,51732],{},"使用测试集进行测试与推理",[51,51734,51736],{"className":230,"code":51735,"language":232,"meta":57,"style":57},"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",[59,51737,51738,51744,51754,51764,51775,51785,51789,51793,51801,51806,51810,51827,51831,51835,51839,51843,51847,51879,51883,51891,51895,51907,51911,51915,51919,51923,51927,51931,51935,51939,51957,51971,51975,51985,51995,52005,52011,52015,52019,52027,52031,52047,52055,52059,52063,52071,52079,52083,52087,52091,52095,52101,52105,52115,52123,52131,52135,52139,52143,52151,52155,52171,52175,52179,52183,52195,52199,52211,52215,52219,52231,52235,52245,52249,52253,52265,52269,52277,52281,52285,52293,52297,52305,52309,52313,52317,52321,52325,52341,52349,52353,52357,52375,52381,52385,52395,52403,52411,52415,52419,52423,52427,52435,52439,52455,52459,52467,52475],{"__ignoreMap":57},[79,51739,51740,51742],{"class":81,"line":82},[79,51741,432],{"class":243},[79,51743,32521],{"class":239},[79,51745,51746,51748,51750,51752],{"class":81,"line":167},[79,51747,432],{"class":243},[79,51749,33534],{"class":239},[79,51751,445],{"class":243},[79,51753,33539],{"class":239},[79,51755,51756,51758,51760,51762],{"class":81,"line":178},[79,51757,32862],{"class":243},[79,51759,33517],{"class":239},[79,51761,432],{"class":243},[79,51763,33522],{"class":239},[79,51765,51766,51768,51770,51772],{"class":81,"line":457},[79,51767,32862],{"class":243},[79,51769,33490],{"class":239},[79,51771,432],{"class":243},[79,51773,51774],{"class":239}," ImageFolder\n",[79,51776,51777,51779,51781,51783],{"class":81,"line":462},[79,51778,32862],{"class":243},[79,51780,34032],{"class":239},[79,51782,432],{"class":243},[79,51784,46754],{"class":239},[79,51786,51787],{"class":81,"line":474},[79,51788,454],{"emptyLinePlaceholder":453},[79,51790,51791],{"class":81,"line":480},[79,51792,36066],{"class":2440},[79,51794,51795,51797,51799],{"class":81,"line":486},[79,51796,633],{"class":243},[79,51798,36073],{"class":85},[79,51800,34070],{"class":239},[79,51802,51803],{"class":81,"line":491},[79,51804,51805],{"class":2440},"   # 导入自己的数据集，并进行数据处理\n",[79,51807,51808],{"class":81,"line":497},[79,51809,50075],{"class":2440},[79,51811,51812,51814,51816,51818,51820,51822,51825],{"class":81,"line":503},[79,51813,50080],{"class":96},[79,51815,244],{"class":243},[79,51817,3043],{"class":243},[79,51819,703],{"class":89},[79,51821,2931],{"class":96},[79,51823,51824],{"class":50091},"\u002Fdata\u002Ftest",[79,51826,27268],{"class":89},[79,51828,51829],{"class":81,"line":509},[79,51830,454],{"emptyLinePlaceholder":453},[79,51832,51833],{"class":81,"line":514},[79,51834,50103],{"class":2440},[79,51836,51837],{"class":81,"line":520},[79,51838,50108],{"class":2440},[79,51840,51841],{"class":81,"line":526},[79,51842,50113],{"class":2440},[79,51844,51845],{"class":81,"line":532},[79,51846,50118],{"class":2440},[79,51848,51849,51851,51853,51855,51857,51859,51861,51863,51865,51867,51869,51871,51873,51875,51877],{"class":81,"line":537},[79,51850,50123],{"class":239},[79,51852,244],{"class":243},[79,51854,50128],{"class":239},[79,51856,50131],{"class":96},[79,51858,2752],{"class":239},[79,51860,50136],{"class":96},[79,51862,2752],{"class":239},[79,51864,50141],{"class":96},[79,51866,50144],{"class":239},[79,51868,50147],{"class":96},[79,51870,2752],{"class":239},[79,51872,50152],{"class":96},[79,51874,2752],{"class":239},[79,51876,50157],{"class":96},[79,51878,1243],{"class":239},[79,51880,51881],{"class":81,"line":543},[79,51882,50164],{"class":2440},[79,51884,51885,51887,51889],{"class":81,"line":549},[79,51886,50169],{"class":239},[79,51888,244],{"class":243},[79,51890,50174],{"class":239},[79,51892,51893],{"class":81,"line":555},[79,51894,50179],{"class":2440},[79,51896,51897,51899,51901,51903,51905],{"class":81,"line":561},[79,51898,50184],{"class":239},[79,51900,33620],{"class":96},[79,51902,2752],{"class":239},[79,51904,33620],{"class":96},[79,51906,44736],{"class":239},[79,51908,51909],{"class":81,"line":567},[79,51910,50197],{"class":2440},[79,51912,51913],{"class":81,"line":573},[79,51914,50202],{"class":239},[79,51916,51917],{"class":81,"line":579},[79,51918,50207],{"class":239},[79,51920,51921],{"class":81,"line":584},[79,51922,50212],{"class":2440},[79,51924,51925],{"class":81,"line":590},[79,51926,50217],{"class":2440},[79,51928,51929],{"class":81,"line":596},[79,51930,454],{"emptyLinePlaceholder":453},[79,51932,51933],{"class":81,"line":602},[79,51934,50226],{"class":2440},[79,51936,51937],{"class":81,"line":608},[79,51938,50231],{"class":2440},[79,51940,51941,51943,51945,51947,51949,51951,51953,51955],{"class":81,"line":614},[79,51942,36080],{"class":239},[79,51944,244],{"class":243},[79,51946,50240],{"class":239},[79,51948,50243],{"class":96},[79,51950,2752],{"class":239},[79,51952,50248],{"class":7412},[79,51954,244],{"class":243},[79,51956,50253],{"class":239},[79,51958,51959,51961,51963,51965,51967,51969],{"class":81,"line":620},[79,51960,36137],{"class":239},[79,51962,244],{"class":243},[79,51964,33653],{"class":239},[79,51966,33656],{"class":7412},[79,51968,244],{"class":243},[79,51970,36148],{"class":239},[79,51972,51973],{"class":81,"line":625},[79,51974,36153],{"class":2440},[79,51976,51977,51979,51981,51983],{"class":81,"line":630},[79,51978,36158],{"class":7412},[79,51980,244],{"class":243},[79,51982,1072],{"class":96},[79,51984,33585],{"class":239},[79,51986,51987,51989,51991,51993],{"class":81,"line":648},[79,51988,36169],{"class":7412},[79,51990,244],{"class":243},[79,51992,33595],{"class":96},[79,51994,33585],{"class":239},[79,51996,51997,51999,52001,52003],{"class":81,"line":659},[79,51998,36180],{"class":7412},[79,52000,244],{"class":243},[79,52002,1030],{"class":96},[79,52004,253],{"class":239},[79,52006,52007,52009],{"class":81,"line":676},[79,52008,711],{"class":243},[79,52010,36193],{"class":239},[79,52012,52013],{"class":81,"line":708},[79,52014,454],{"emptyLinePlaceholder":453},[79,52016,52017],{"class":81,"line":717},[79,52018,36202],{"class":2440},[79,52020,52021,52023,52025],{"class":81,"line":722},[79,52022,633],{"class":243},[79,52024,36209],{"class":85},[79,52026,36212],{"class":239},[79,52028,52029],{"class":81,"line":727},[79,52030,36217],{"class":2440},[79,52032,52033,52035,52037,52039,52041,52043,52045],{"class":81,"line":738},[79,52034,33360],{"class":239},[79,52036,244],{"class":243},[79,52038,33367],{"class":89},[79,52040,3929],{"class":243},[79,52042,33372],{"class":239},[79,52044,3926],{"class":243},[79,52046,36234],{"class":89},[79,52048,52049,52051,52053],{"class":81,"line":753},[79,52050,33412],{"class":239},[79,52052,244],{"class":243},[79,52054,34405],{"class":239},[79,52056,52057],{"class":81,"line":768},[79,52058,454],{"emptyLinePlaceholder":453},[79,52060,52061],{"class":81,"line":776},[79,52062,36251],{"class":2440},[79,52064,52065,52067,52069],{"class":81,"line":781},[79,52066,36256],{"class":239},[79,52068,244],{"class":243},[79,52070,34458],{"class":96},[79,52072,52073,52075,52077],{"class":81,"line":786},[79,52074,36265],{"class":239},[79,52076,244],{"class":243},[79,52078,5290],{"class":96},[79,52080,52081],{"class":81,"line":802},[79,52082,454],{"emptyLinePlaceholder":453},[79,52084,52085],{"class":81,"line":815},[79,52086,36278],{"class":2440},[79,52088,52089],{"class":81,"line":828},[79,52090,36283],{"class":2440},[79,52092,52093],{"class":81,"line":842},[79,52094,36288],{"class":2440},[79,52096,52097,52099],{"class":81,"line":859},[79,52098,36293],{"class":243},[79,52100,34999],{"class":239},[79,52102,52103],{"class":81,"line":878},[79,52104,36300],{"class":2440},[79,52106,52107,52109,52111,52113],{"class":81,"line":883},[79,52108,5606],{"class":243},[79,52110,36307],{"class":239},[79,52112,955],{"class":243},[79,52114,36312],{"class":239},[79,52116,52117,52119,52121],{"class":81,"line":888},[79,52118,36317],{"class":239},[79,52120,244],{"class":243},[79,52122,36322],{"class":239},[79,52124,52125,52127,52129],{"class":81,"line":904},[79,52126,36327],{"class":239},[79,52128,244],{"class":243},[79,52130,36332],{"class":239},[79,52132,52133],{"class":81,"line":919},[79,52134,36337],{"class":2440},[79,52136,52137],{"class":81,"line":930},[79,52138,34990],{"class":239},[79,52140,52141],{"class":81,"line":941},[79,52142,36346],{"class":2440},[79,52144,52145,52147,52149],{"class":81,"line":946},[79,52146,34775],{"class":239},[79,52148,244],{"class":243},[79,52150,36355],{"class":239},[79,52152,52153],{"class":81,"line":969},[79,52154,36360],{"class":2440},[79,52156,52157,52159,52161,52163,52165,52167,52169],{"class":81,"line":975},[79,52158,34792],{"class":239},[79,52160,244],{"class":243},[79,52162,34797],{"class":239},[79,52164,34800],{"class":7412},[79,52166,244],{"class":243},[79,52168,1072],{"class":96},[79,52170,253],{"class":239},[79,52172,52173],{"class":81,"line":989},[79,52174,36381],{"class":2440},[79,52176,52177],{"class":81,"line":1003},[79,52178,36386],{"class":2440},[79,52180,52181],{"class":81,"line":1019},[79,52182,36391],{"class":2440},[79,52184,52185,52187,52189,52191,52193],{"class":81,"line":1024},[79,52186,36396],{"class":239},[79,52188,1118],{"class":243},[79,52190,34902],{"class":239},[79,52192,5155],{"class":243},[79,52194,36405],{"class":239},[79,52196,52197],{"class":81,"line":1067},[79,52198,36410],{"class":2440},[79,52200,52201,52203,52205,52207,52209],{"class":81,"line":1101},[79,52202,36415],{"class":239},[79,52204,1118],{"class":243},[79,52206,36420],{"class":239},[79,52208,1030],{"class":96},[79,52210,253],{"class":239},[79,52212,52213],{"class":81,"line":1106},[79,52214,454],{"emptyLinePlaceholder":453},[79,52216,52217],{"class":81,"line":1112},[79,52218,36433],{"class":2440},[79,52220,52221,52223,52225,52227,52229],{"class":81,"line":1124},[79,52222,36438],{"class":239},[79,52224,244],{"class":243},[79,52226,36443],{"class":239},[79,52228,2957],{"class":243},[79,52230,36448],{"class":239},[79,52232,52233],{"class":81,"line":1129},[79,52234,36453],{"class":2440},[79,52236,52237,52239,52241,52243],{"class":81,"line":1150},[79,52238,34566],{"class":96},[79,52240,685],{"class":239},[79,52242,36462],{"class":89},[79,52244,36465],{"class":239},[79,52246,52247],{"class":81,"line":1161},[79,52248,454],{"emptyLinePlaceholder":453},[79,52250,52251],{"class":81,"line":1175},[79,52252,36474],{"class":2440},[79,52254,52255,52257,52259,52261,52263],{"class":81,"line":1194},[79,52256,1329],{"class":243},[79,52258,1332],{"class":96},[79,52260,5155],{"class":243},[79,52262,33348],{"class":89},[79,52264,673],{"class":239},[79,52266,52267],{"class":81,"line":1211},[79,52268,36491],{"class":2440},[79,52270,52271,52273,52275],{"class":81,"line":1228},[79,52272,33412],{"class":239},[79,52274,244],{"class":243},[79,52276,46665],{"class":239},[79,52278,52279],{"class":81,"line":1246},[79,52280,36504],{"class":2440},[79,52282,52283],{"class":81,"line":1251},[79,52284,36509],{"class":2440},[79,52286,52287,52289,52291],{"class":81,"line":1274},[79,52288,36514],{"class":239},[79,52290,36517],{"class":89},[79,52292,1191],{"class":239},[79,52294,52295],{"class":81,"line":1296},[79,52296,36524],{"class":2440},[79,52298,52299,52301,52303],{"class":81,"line":1316},[79,52300,36137],{"class":239},[79,52302,244],{"class":243},[79,52304,36533],{"class":239},[79,52306,52307],{"class":81,"line":1321},[79,52308,36538],{"class":2440},[79,52310,52311],{"class":81,"line":1326},[79,52312,36543],{"class":239},[79,52314,52315],{"class":81,"line":1342},[79,52316,454],{"emptyLinePlaceholder":453},[79,52318,52319],{"class":81,"line":18985},[79,52320,36552],{"class":2440},[79,52322,52323],{"class":81,"line":18990},[79,52324,36557],{"class":2440},[79,52326,52327,52329,52331,52333,52335,52337,52339],{"class":81,"line":18995},[79,52328,33360],{"class":239},[79,52330,244],{"class":243},[79,52332,33367],{"class":89},[79,52334,3929],{"class":243},[79,52336,33372],{"class":239},[79,52338,3926],{"class":243},[79,52340,36234],{"class":89},[79,52342,52343,52345,52347],{"class":81,"line":19009},[79,52344,33412],{"class":239},[79,52346,244],{"class":243},[79,52348,34405],{"class":239},[79,52350,52351],{"class":81,"line":19021},[79,52352,36586],{"class":2440},[79,52354,52355],{"class":81,"line":19026},[79,52356,36591],{"class":2440},[79,52358,52359,52361,52363,52365,52368,52370,52373],{"class":81,"line":19039},[79,52360,36596],{"class":239},[79,52362,244],{"class":243},[79,52364,3263],{"class":239},[79,52366,52367],{"class":89},"'猫'",[79,52369,2752],{"class":239},[79,52371,52372],{"class":89},"'狗'",[79,52374,35361],{"class":239},[79,52376,52377,52379],{"class":81,"line":19044},[79,52378,36293],{"class":243},[79,52380,34999],{"class":239},[79,52382,52383],{"class":81,"line":19049},[79,52384,36661],{"class":2440},[79,52386,52387,52389,52391,52393],{"class":81,"line":19054},[79,52388,5606],{"class":243},[79,52390,36668],{"class":239},[79,52392,955],{"class":243},[79,52394,36312],{"class":239},[79,52396,52397,52399,52401],{"class":81,"line":19067},[79,52398,34725],{"class":239},[79,52400,244],{"class":243},[79,52402,34730],{"class":239},[79,52404,52405,52407,52409],{"class":81,"line":19072},[79,52406,34740],{"class":239},[79,52408,244],{"class":243},[79,52410,34745],{"class":239},[79,52412,52413],{"class":81,"line":34748},[79,52414,454],{"emptyLinePlaceholder":453},[79,52416,52417],{"class":81,"line":34754},[79,52418,36697],{"class":2440},[79,52420,52421],{"class":81,"line":34760},[79,52422,34990],{"class":239},[79,52424,52425],{"class":81,"line":34766},[79,52426,36706],{"class":2440},[79,52428,52429,52431,52433],{"class":81,"line":34772},[79,52430,34775],{"class":239},[79,52432,244],{"class":243},[79,52434,34780],{"class":239},[79,52436,52437],{"class":81,"line":34783},[79,52438,36719],{"class":2440},[79,52440,52441,52443,52445,52447,52449,52451,52453],{"class":81,"line":34789},[79,52442,34792],{"class":239},[79,52444,244],{"class":243},[79,52446,34797],{"class":239},[79,52448,34800],{"class":7412},[79,52450,244],{"class":243},[79,52452,1072],{"class":96},[79,52454,253],{"class":239},[79,52456,52457],{"class":81,"line":34809},[79,52458,36740],{"class":2440},[79,52460,52461,52463,52465],{"class":81,"line":34815},[79,52462,36745],{"class":239},[79,52464,244],{"class":243},[79,52466,36750],{"class":239},[79,52468,52469,52471,52473],{"class":81,"line":34826},[79,52470,36755],{"class":239},[79,52472,244],{"class":243},[79,52474,36760],{"class":239},[79,52476,52477,52479,52481,52483,52485,52487,52489,52491],{"class":81,"line":34832},[79,52478,1164],{"class":96},[79,52480,685],{"class":239},[79,52482,36769],{"class":89},[79,52484,36772],{"class":239},[79,52486,36775],{"class":89},[79,52488,2752],{"class":239},[79,52490,36780],{"class":89},[79,52492,36783],{"class":239},[2287,52494,52495],{},"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":57,"searchDepth":167,"depth":167,"links":52497},[52498,52499,52500,52501],{"id":32716,"depth":178,"text":32717},{"id":39953,"depth":178,"text":39954},{"id":43386,"depth":178,"text":43387},{"id":47395,"depth":178,"text":47396},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32708,"description":25516},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52508,"title":52509,"body":52510,"description":25516,"extension":2314,"meta":52517,"navigation":453,"path":52518,"seo":52519,"stem":52520,"__hash__":52521},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52511,"toc":52515},[52512],[10,52513,52509],{"id":52514},"_3yolo模型学习",{"title":57,"searchDepth":167,"depth":167,"links":52516},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52509,"description":25516},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52523,"title":52524,"body":52525,"description":52532,"extension":2314,"meta":52533,"navigation":453,"path":52535,"seo":52536,"stem":52537,"__hash__":52538},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52526,"toc":52530},[52527],[19,52528,52529],{},"yolo模型还未补充",{"title":57,"searchDepth":167,"depth":167,"links":52531},[],"深度学习学习",{"category":52534},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52524,"description":52532},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52540,"title":52541,"body":52542,"description":25516,"extension":2314,"meta":52567,"navigation":453,"path":52568,"seo":52569,"stem":52570,"__hash__":52571},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52543,"toc":52565},[52544,52547,52550,52555,52562],[10,52545,52541],{"id":52546},"_1工具",[19,52548,52549],{},"提示错误插件：有问题会提前报错",[19,52551,52552],{},[3699,52553],{"alt":57,"src":52554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52556,52557],{},[2614,52558,52561],{"href":52559,"rel":52560},"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",[26001],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52563,52564],{},"alt键加上下箭头可以实现语句的移动",{"title":57,"searchDepth":167,"depth":167,"links":52566},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52541,"description":25516},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52573,"title":52574,"body":52575,"description":25516,"extension":2314,"meta":55435,"navigation":453,"path":55436,"seo":55437,"stem":55438,"__hash__":55439},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52576,"toc":55386},[52577,52580,52584,52588,52593,52596,52601,52605,52612,52617,52624,52629,52636,52641,52645,52650,52653,52657,52662,52666,52671,52674,52677,52680,52683,52686,52689,52692,52695,52700,52705,52710,52714,52717,52720,52724,52729,52732,52740,52745,52762,52770,52775,52780,52785,52790,52795,52798,52803,52808,52812,52821,52826,52831,52835,52840,52843,52847,52852,52860,52865,52870,52873,52878,52883,52888,52891,52894,52897,52902,52907,52910,52915,52918,52923,52926,52929,52932,52937,52940,52943,52958,52963,52968,52973,52976,52979,52982,52996,52999,53004,53009,53012,53015,53018,53021,53024,53027,53030,53034,53038,53043,53047,53050,53055,53060,53063,53068,53071,53075,53080,53083,53086,53089,53092,53095,53098,53101,53104,53107,53111,53116,53121,53126,53129,53132,53136,53141,53144,53148,53151,53154,53159,53162,53165,53169,53173,53176,53181,53186,53189,53218,53223,53228,53233,53238,53242,53247,53251,53256,53259,53263,53267,53272,53276,53281,53286,53290,53295,53298,53300,53303,53308,53312,53317,53321,53325,53330,53335,53340,53345,53349,53354,53359,53364,53367,53370,53375,53378,53383,53388,53393,53398,53402,54208,54212,54554,54559,54562,54565,54568,54571,54574,54577,54580,54583,54585,54588,54590,54593,54597,54602,54605,54608,54611,54615,54620,54625,54645,54648,54652,54657,54662,54679,54683,54712,54716,54738,54740,54779,54787,54793,54797,54800,54803,54808,54813,54816,54819,54822,54827,54832,54835,54838,54841,54844,54847,54850,54853,54856,54859,54862,54865,54867,54870,54873,54876,54879,54882,54885,54888,54891,54895,54900,54903,54908,54911,54914,54917,54920,54923,54926,54929,54931,54934,54937,54940,54943,54946,54949,54953,54956,54965,54968,54973,54976,54981,54984,54987,54990,54993,54996,54999,55002,55006,55010,55013,55016,55021,55026,55031,55035,55040,55045,55048,55051,55054,55057,55060,55065,55068,55073,55075,55080,55083,55087,55092,55095,55098,55103,55107,55110,55115,55118,55121,55150,55155,55158,55161,55164,55167,55170,55174,55177,55261,55265,55268,55273,55278,55285,55288,55291,55294,55297,55300,55305,55310,55313,55316,55319,55322,55325,55328,55331,55334,55337,55339,55342,55346,55351,55356,55361,55364,55369,55374,55377,55380,55383],[10,52578,52574],{"id":52579},"_2基础语法",[14,52581,52583],{"id":52582},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[265,52585,52587],{"id":52586},"_211-js组成","2.1.1 js组成",[26,52589,52590],{},[29,52591,52592],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52594,52595],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[26,52597,52598],{"start":167},[29,52599,52600],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[265,52602,52604],{"id":52603},"_212-js书写位置","2.1.2 js书写位置",[26,52606,52607],{},[29,52608,52609],{},[2528,52610,52611],{},"内部 JavaScript",[19,52613,52614],{},[3699,52615],{"alt":57,"src":52616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[26,52618,52619],{"start":167},[29,52620,52621],{},[2528,52622,52623],{},"外部 JavaScript",[19,52625,52626],{},[3699,52627],{"alt":57,"src":52628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[26,52630,52631],{"start":178},[29,52632,52633],{},[2528,52634,52635],{},"内联 JavaScript",[19,52637,52638],{},[3699,52639],{"alt":57,"src":52640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[265,52642,52644],{"id":52643},"_213-javascript注释","2.1.3 JavaScript注释",[19,52646,52647],{},[3699,52648],{"alt":57,"src":52649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52651,52652],{},"alt+shift+a一定要记住！",[265,52654,52656],{"id":52655},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52658,52659],{},[3699,52660],{"alt":57,"src":52661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[265,52663,52665],{"id":52664},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[26,52667,52668],{},[29,52669,52670],{},"输出语法：",[19,52672,52673],{},"①document.write('要出的内容')",[19,52675,52676],{},"向body内输出内容；",[19,52678,52679],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52681,52682],{},"②alert('要出的内容')",[19,52684,52685],{},"页面弹出警告对话框",[19,52687,52688],{},"③console.log('控制台打印')",[19,52690,52691],{},"控制台输出语法，程序员调试使用",[19,52693,52694],{},"输入log就行，自动生成：",[19,52696,52697],{},[3699,52698],{"alt":57,"src":52699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[26,52701,52702],{"start":167},[29,52703,52704],{},"输入语法：",[19,52706,52707],{},[3699,52708],{"alt":57,"src":52709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[265,52711,52713],{"id":52712},"_2116-字面量","21.1.6 字面量",[19,52715,52716],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52718,52719],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52721,52723],{"id":52722},"_22-变量","2.2 变量",[26,52725,52726],{},[29,52727,52728],{},"变量声明",[19,52730,52731],{},"let 变量名",[3377,52733,52734,52737],{},[29,52735,52736],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[29,52738,52739],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[26,52741,52742],{"start":167},[29,52743,52744],{},"变量赋值",[51,52746,52750],{"className":52747,"code":52748,"language":52749,"meta":57,"style":57},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[59,52751,52752,52757],{"__ignoreMap":57},[79,52753,52754],{"class":81,"line":82},[79,52755,52756],{"class":239},"let age\n",[79,52758,52759],{"class":81,"line":167},[79,52760,52761],{"class":239},"age=18\n",[26,52763,52764,52767],{"start":178},[29,52765,52766],{},"连这些（变量的初始化）：let age=18",[29,52768,52769],{},"更新变量",[19,52771,52772],{},[3699,52773],{"alt":57,"src":52774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[26,52776,52777],{"start":462},[29,52778,52779],{},"声明多个变量",[19,52781,52782],{},[3699,52783],{"alt":57,"src":52784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[26,52786,52787],{"start":474},[29,52788,52789],{},"变量命名规则与规范",[19,52791,52792],{},[3699,52793],{"alt":57,"src":52794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52796,52797],{},"遵守小驼峰！",[26,52799,52800],{"start":480},[29,52801,52802],{},"变量拓展-let和var的区别",[19,52804,52805],{},[3699,52806],{"alt":57,"src":52807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52809,52811],{"id":52810},"_23-数组","2.3 数组",[51,52813,52815],{"className":52747,"code":52814,"language":52749,"meta":57,"style":57},"let arr = []\n",[59,52816,52817],{"__ignoreMap":57},[79,52818,52819],{"class":81,"line":82},[79,52820,52814],{"class":239},[19,52822,52823],{},[3699,52824],{"alt":57,"src":52825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52827,52828],{},[3699,52829],{"alt":57,"src":52830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52832,52834],{"id":52833},"_24-常量","2.4 常量",[19,52836,52837],{},[3699,52838],{"alt":57,"src":52839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52841,52842],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52844,52846],{"id":52845},"_25-数据类型","2.5 数据类型",[19,52848,52849],{},[3699,52850],{"alt":57,"src":52851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[26,52853,52854,52857],{},[29,52855,52856],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[29,52858,52859],{},"算数运算符：",[19,52861,52862],{},[3699,52863],{"alt":57,"src":52864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[26,52866,52867],{"start":178},[29,52868,52869],{},"数字类型（Number）",[19,52871,52872],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52874,52875],{},[3699,52876],{"alt":57,"src":52877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[26,52879,52880],{"start":457},[29,52881,52882],{},"字符串类型（string）",[19,52884,52885],{},[3699,52886],{"alt":57,"src":52887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52889,52890],{},"反引号也是可以使用的",[19,52892,52893],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52895,52896],{},"例如：document.write(\"我今年\"+age+\"岁\")",[26,52898,52899],{"start":462},[29,52900,52901],{},"模板字符串",[19,52903,52904],{},[3699,52905],{"alt":57,"src":52906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52908,52909],{},"类似于python的字符串格式化",[26,52911,52912],{"start":474},[29,52913,52914],{},"布尔类型",[19,52916,52917],{},"true 和 false",[26,52919,52920],{"start":480},[29,52921,52922],{},"未定义类型（underfined）",[19,52924,52925],{},"表示没有赋值",[19,52927,52928],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52930,52931],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[26,52933,52934],{"start":486},[29,52935,52936],{},"null（空类型）",[19,52938,52939],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52941,52942],{},"赋值了，但是内容为空",[51,52944,52946],{"className":52747,"code":52945,"language":52749,"meta":57,"style":57},"typeof null\n输出的是'object'，是一个对象数据类型\n",[59,52947,52948,52953],{"__ignoreMap":57},[79,52949,52950],{"class":81,"line":82},[79,52951,52952],{"class":239},"typeof null\n",[79,52954,52955],{"class":81,"line":167},[79,52956,52957],{"class":239},"输出的是'object'，是一个对象数据类型\n",[26,52959,52960],{"start":491},[29,52961,52962],{},"控制台检测数据类型",[19,52964,52965],{},[3699,52966],{"alt":57,"src":52967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[26,52969,52970],{"start":497},[29,52971,52972],{},"类型转换",[19,52974,52975],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52977,52978],{},"转换方式：隐式转换和显示转换",[19,52980,52981],{},"①隐式转换",[3377,52983,52984,52987,52990,52993],{},[29,52985,52986],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[29,52988,52989],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[29,52991,52992],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[29,52994,52995],{},"任何数据和字符串相加结果都是字符串",[19,52997,52998],{},"②显示转换",[19,53000,53001],{},[3699,53002],{"alt":57,"src":53003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,53005,53006],{},[3699,53007],{"alt":57,"src":53008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,53010,53011],{},"在输入的时候要用好隐式转换，简单写起来",[19,53013,53014],{},"let num = +prompt(’请输入数字：‘)",[19,53016,53017],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,53019,53020],{},"console.log(parseInt('12.333px'))",[19,53022,53023],{},"输出为：12",[19,53025,53026],{},"console.log(parseInt('a'a'a12.333px'))",[19,53028,53029],{},"输出：NaN",[14,53031,53033],{"id":53032},"_26-运算符","2.6 运算符",[265,53035,53037],{"id":53036},"_261-赋值运算符","2.6.1 赋值运算符",[19,53039,53040],{},[3699,53041],{"alt":57,"src":53042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[265,53044,53046],{"id":53045},"_262-一元运算符","2.6.2 一元运算符",[19,53048,53049],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,53051,53052],{},[3699,53053],{"alt":57,"src":53054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,53056,53057],{},[3699,53058],{"alt":57,"src":53059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,53061,53062],{},"两者的区别：",[19,53064,53065],{},[3699,53066],{"alt":57,"src":53067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,53069,53070],{},"前置先自加；后置后加，代码执行完之后再加",[265,53072,53074],{"id":53073},"_263-比较运算符","2.6.3 比较运算符",[19,53076,53077],{},[3699,53078],{"alt":57,"src":53079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,53081,53082],{},"比较运算符也有隐式转换",[19,53084,53085],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,53087,53088],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,53090,53091],{},"要使用三等，开发的时候",[19,53093,53094],{},"NaN不等于任何人，包括它自己",[19,53096,53097],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,53099,53100],{},"7\u002F10=0.7",[19,53102,53103],{},"最后：0.5+0.2=0.7",[19,53105,53106],{},"字符串比较，比较的是字符对应的ASCII码",[265,53108,53110],{"id":53109},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,53112,53113],{},[3699,53114],{"alt":57,"src":53115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,53117,53118],{},[3699,53119],{"alt":57,"src":53120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,53122,53123],{},[3699,53124],{"alt":57,"src":53125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,53127,53128],{},"上述题目选D",[19,53130,53131],{},"与真2假1；或真1假2",[265,53133,53135],{"id":53134},"_265-运算符优先级","2.6.5 运算符优先级",[19,53137,53138],{},[3699,53139],{"alt":57,"src":53140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,53142,53143],{},"先算逻辑与，后算逻辑或",[14,53145,53147],{"id":53146},"_27-语句","2.7 语句",[19,53149,53150],{},"表达式：是可以被求值的代码，会有结果给我们",[19,53152,53153],{},"语句：语句是可以被执行的代码，例如prompt()",[19,53155,53156],{},[3699,53157],{"alt":57,"src":53158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,53160,53161],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,53163,53164],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[265,53166,53168],{"id":53167},"_271-分支语句","2.7.1 分支语句",[24137,53170,53172],{"id":53171},"_2711-if分支语句","2.7.1.1 if分支语句",[19,53174,53175],{},"if语句单行简单的话，可以不写{}，写在一行就行",[26,53177,53178],{},[29,53179,53180],{},"单分支语句",[19,53182,53183],{},[3699,53184],{"alt":57,"src":53185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,53187,53188],{},"除了0，所有数字都为真",[51,53190,53192],{"className":52747,"code":53191,"language":52749,"meta":57,"style":57},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[59,53193,53194,53199,53204,53209,53213],{"__ignoreMap":57},[79,53195,53196],{"class":81,"line":82},[79,53197,53198],{"class":239},"if（0) {\n",[79,53200,53201],{"class":81,"line":167},[79,53202,53203],{"class":239},"    let a=1\n",[79,53205,53206],{"class":81,"line":178},[79,53207,53208],{"class":239},"    alert(typeof a)\n",[79,53210,53211],{"class":81,"line":457},[79,53212,3801],{"class":239},[79,53214,53215],{"class":81,"line":462},[79,53216,53217],{"class":239},"不输出，括号为假\n",[26,53219,53220],{"start":167},[29,53221,53222],{},"双分支语句",[19,53224,53225],{},[3699,53226],{"alt":57,"src":53227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[26,53229,53230],{"start":178},[29,53231,53232],{},"多分支语句",[19,53234,53235],{},[3699,53236],{"alt":57,"src":53237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[24137,53239,53241],{"id":53240},"_2712-三元运算符","2.7.1.2 三元运算符",[19,53243,53244],{},[3699,53245],{"alt":57,"src":53246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[24137,53248,53250],{"id":53249},"_2713-switch语句","2.7.1.3 switch语句",[19,53252,53253],{},[3699,53254],{"alt":57,"src":53255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,53257,53258],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[265,53260,53262],{"id":53261},"_272-循环语句","2.7.2 循环语句",[24137,53264,53266],{"id":53265},"_2721-断点演示","2.7.2.1 断点演示",[19,53268,53269],{},[3699,53270],{"alt":57,"src":53271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[24137,53273,53275],{"id":53274},"_2722-while循环","2.7.2.2 while循环",[19,53277,53278],{},[3699,53279],{"alt":57,"src":53280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,53282,53283],{},[3699,53284],{"alt":57,"src":53285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[24137,53287,53289],{"id":53288},"_2723-for循环","2.7.2.3 for循环",[19,53291,53292],{},[3699,53293],{"alt":57,"src":53294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,53296,53297],{},"for(;;) {",[19,53299,700],{},[19,53301,53302],{},"表示无限循环",[19,53304,53305],{},[3699,53306],{"alt":57,"src":53307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[24137,53309,53311],{"id":53310},"_2724-循环的退出","2.7.2.4 循环的退出",[19,53313,53314],{},[3699,53315],{"alt":57,"src":53316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,53318,53320],{"id":53319},"_28-数组","2.8 数组",[265,53322,53324],{"id":53323},"_281-基础认识","2.8.1 基础认识",[19,53326,53327],{},[3699,53328],{"alt":57,"src":53329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,53331,53332],{},[3699,53333],{"alt":57,"src":53334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,53336,53337],{},[3699,53338],{"alt":57,"src":53339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,53341,53342],{},[3699,53343],{"alt":57,"src":53344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[265,53346,53348],{"id":53347},"_282-操作数组","2.8.2 操作数组",[19,53350,53351],{},[3699,53352],{"alt":57,"src":53353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[26,53355,53356],{},[29,53357,53358],{},"添加元素",[19,53360,53361],{},[3699,53362],{"alt":57,"src":53363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53365,53366],{},"console.log(arr.push('green'))",[19,53368,53369],{},"输出结果：为新数组的长度",[19,53371,53372],{},[3699,53373],{"alt":57,"src":53374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53376,53377],{},"push用的非常多，一定要记住",[26,53379,53380],{},[29,53381,53382],{},"删除元素",[19,53384,53385],{},[3699,53386],{"alt":57,"src":53387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53389,53390],{},[3699,53391],{"alt":57,"src":53392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53394,53395],{},[3699,53396],{"alt":57,"src":53397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[265,53399,53401],{"id":53400},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[51,53403,53405],{"className":52747,"code":53404,"language":52749,"meta":57,"style":57},"\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",[59,53406,53407,53421,53437,53441,53450,53468,53492,53514,53528,53536,53543,53555,53566,53570,53574,53581,53593,53608,53621,53640,53657,53672,53684,53696,53708,53712,53716,53727,53737,53749,53761,53773,53784,53788,53792,53804,53808,53822,53826,53830,53841,53855,53867,53881,53885,53894,53903,53907,53916,53920,53929,53934,53939,53952,53980,53985,53990,54015,54020,54024,54029,54034,54049,54053,54058,54088,54100,54116,54132,54146,54151,54158,54162,54167,54180,54188,54196,54200],{"__ignoreMap":57},[79,53408,53409,53412,53415,53418],{"class":81,"line":82},[79,53410,53411],{"class":239},"\u003C!",[79,53413,53414],{"class":395},"DOCTYPE",[79,53416,53417],{"class":85}," html",[79,53419,53420],{"class":239},">\n",[79,53422,53423,53425,53427,53430,53432,53435],{"class":81,"line":167},[79,53424,392],{"class":239},[79,53426,52749],{"class":395},[79,53428,53429],{"class":85}," lang",[79,53431,244],{"class":239},[79,53433,53434],{"class":89},"\"en\"",[79,53436,53420],{"class":239},[79,53438,53439],{"class":81,"line":178},[79,53440,454],{"emptyLinePlaceholder":453},[79,53442,53443,53445,53448],{"class":81,"line":457},[79,53444,392],{"class":239},[79,53446,53447],{"class":395},"head",[79,53449,53420],{"class":239},[79,53451,53452,53455,53458,53461,53463,53466],{"class":81,"line":462},[79,53453,53454],{"class":239},"    \u003C",[79,53456,53457],{"class":395},"meta",[79,53459,53460],{"class":85}," charset",[79,53462,244],{"class":239},[79,53464,53465],{"class":89},"\"UTF-8\"",[79,53467,53420],{"class":239},[79,53469,53470,53472,53474,53477,53479,53482,53485,53487,53490],{"class":81,"line":474},[79,53471,53454],{"class":239},[79,53473,53457],{"class":395},[79,53475,53476],{"class":85}," http-equiv",[79,53478,244],{"class":239},[79,53480,53481],{"class":89},"\"X-UA-Compatible\"",[79,53483,53484],{"class":85}," content",[79,53486,244],{"class":239},[79,53488,53489],{"class":89},"\"IE=edge\"",[79,53491,53420],{"class":239},[79,53493,53494,53496,53498,53500,53502,53505,53507,53509,53512],{"class":81,"line":480},[79,53495,53454],{"class":239},[79,53497,53457],{"class":395},[79,53499,2238],{"class":85},[79,53501,244],{"class":239},[79,53503,53504],{"class":89},"\"viewport\"",[79,53506,53484],{"class":85},[79,53508,244],{"class":239},[79,53510,53511],{"class":89},"\"width=device-width, initial-scale=1.0\"",[79,53513,53420],{"class":239},[79,53515,53516,53518,53521,53524,53526],{"class":81,"line":486},[79,53517,53454],{"class":239},[79,53519,53520],{"class":395},"title",[79,53522,53523],{"class":239},">Document\u003C\u002F",[79,53525,53520],{"class":395},[79,53527,53420],{"class":239},[79,53529,53530,53532,53534],{"class":81,"line":491},[79,53531,53454],{"class":239},[79,53533,2287],{"class":395},[79,53535,53420],{"class":239},[79,53537,53538,53541],{"class":81,"line":497},[79,53539,53540],{"class":395},"        *",[79,53542,17732],{"class":239},[79,53544,53545,53548,53551,53553],{"class":81,"line":503},[79,53546,53547],{"class":96},"            margin",[79,53549,53550],{"class":239},": ",[79,53552,1030],{"class":96},[79,53554,3531],{"class":239},[79,53556,53557,53560,53562,53564],{"class":81,"line":509},[79,53558,53559],{"class":96},"            padding",[79,53561,53550],{"class":239},[79,53563,1030],{"class":96},[79,53565,3531],{"class":239},[79,53567,53568],{"class":81,"line":514},[79,53569,4742],{"class":239},[79,53571,53572],{"class":81,"line":520},[79,53573,454],{"emptyLinePlaceholder":453},[79,53575,53576,53579],{"class":81,"line":526},[79,53577,53578],{"class":85},"        .box",[79,53580,17732],{"class":239},[79,53582,53583,53586,53588,53591],{"class":81,"line":532},[79,53584,53585],{"class":96},"            display",[79,53587,53550],{"class":239},[79,53589,53590],{"class":96},"flex",[79,53592,3531],{"class":239},[79,53594,53595,53598,53600,53603,53606],{"class":81,"line":537},[79,53596,53597],{"class":96},"            width",[79,53599,53550],{"class":239},[79,53601,53602],{"class":96},"700",[79,53604,53605],{"class":243},"px",[79,53607,3531],{"class":239},[79,53609,53610,53613,53615,53617,53619],{"class":81,"line":543},[79,53611,53612],{"class":96},"            height",[79,53614,53550],{"class":239},[79,53616,6175],{"class":96},[79,53618,53605],{"class":243},[79,53620,3531],{"class":239},[79,53622,53623,53626,53628,53630,53632,53635,53638],{"class":81,"line":549},[79,53624,53625],{"class":96},"            border-left",[79,53627,53550],{"class":239},[79,53629,1072],{"class":96},[79,53631,53605],{"class":243},[79,53633,53634],{"class":96}," solid",[79,53636,53637],{"class":96}," pink",[79,53639,3531],{"class":239},[79,53641,53642,53645,53647,53649,53651,53653,53655],{"class":81,"line":555},[79,53643,53644],{"class":96},"            border-bottom",[79,53646,53550],{"class":239},[79,53648,1072],{"class":96},[79,53650,53605],{"class":243},[79,53652,53634],{"class":96},[79,53654,53637],{"class":96},[79,53656,3531],{"class":239},[79,53658,53659,53661,53663,53665,53667,53670],{"class":81,"line":561},[79,53660,53547],{"class":96},[79,53662,53550],{"class":239},[79,53664,3029],{"class":96},[79,53666,53605],{"class":243},[79,53668,53669],{"class":96}," auto",[79,53671,3531],{"class":239},[79,53673,53674,53677,53679,53682],{"class":81,"line":567},[79,53675,53676],{"class":96},"            justify-content",[79,53678,53550],{"class":239},[79,53680,53681],{"class":96},"space-around",[79,53683,3531],{"class":239},[79,53685,53686,53689,53691,53694],{"class":81,"line":573},[79,53687,53688],{"class":96},"            align-items",[79,53690,53550],{"class":239},[79,53692,53693],{"class":96},"flex-end",[79,53695,3531],{"class":239},[79,53697,53698,53701,53703,53706],{"class":81,"line":579},[79,53699,53700],{"class":96},"            text-align",[79,53702,53550],{"class":239},[79,53704,53705],{"class":96},"center",[79,53707,3531],{"class":239},[79,53709,53710],{"class":81,"line":584},[79,53711,4742],{"class":239},[79,53713,53714],{"class":81,"line":590},[79,53715,454],{"emptyLinePlaceholder":453},[79,53717,53718,53720,53722,53725],{"class":81,"line":596},[79,53719,53578],{"class":85},[79,53721,3330],{"class":243},[79,53723,53724],{"class":395},"div",[79,53726,17732],{"class":239},[79,53728,53729,53731,53733,53735],{"class":81,"line":602},[79,53730,53585],{"class":96},[79,53732,53550],{"class":239},[79,53734,53590],{"class":96},[79,53736,3531],{"class":239},[79,53738,53739,53741,53743,53745,53747],{"class":81,"line":608},[79,53740,53597],{"class":96},[79,53742,53550],{"class":239},[79,53744,3029],{"class":96},[79,53746,53605],{"class":243},[79,53748,3531],{"class":239},[79,53750,53751,53754,53756,53759],{"class":81,"line":614},[79,53752,53753],{"class":96},"            background-color",[79,53755,53550],{"class":239},[79,53757,53758],{"class":96},"pink",[79,53760,3531],{"class":239},[79,53762,53763,53766,53768,53771],{"class":81,"line":620},[79,53764,53765],{"class":96},"            flex-direction",[79,53767,53550],{"class":239},[79,53769,53770],{"class":96},"column",[79,53772,3531],{"class":239},[79,53774,53775,53777,53779,53782],{"class":81,"line":625},[79,53776,53676],{"class":96},[79,53778,53550],{"class":239},[79,53780,53781],{"class":96},"space-between",[79,53783,3531],{"class":239},[79,53785,53786],{"class":81,"line":630},[79,53787,4742],{"class":239},[79,53789,53790],{"class":81,"line":648},[79,53791,454],{"emptyLinePlaceholder":453},[79,53793,53794,53796,53799,53802],{"class":81,"line":659},[79,53795,53578],{"class":85},[79,53797,53798],{"class":395}," div",[79,53800,53801],{"class":395}," span",[79,53803,17732],{"class":239},[79,53805,53806],{"class":81,"line":676},[79,53807,454],{"emptyLinePlaceholder":453},[79,53809,53810,53813,53815,53818,53820],{"class":81,"line":708},[79,53811,53812],{"class":96},"            margin-top",[79,53814,53550],{"class":239},[79,53816,53817],{"class":96},"-20",[79,53819,53605],{"class":243},[79,53821,3531],{"class":239},[79,53823,53824],{"class":81,"line":717},[79,53825,4742],{"class":239},[79,53827,53828],{"class":81,"line":722},[79,53829,454],{"emptyLinePlaceholder":453},[79,53831,53832,53834,53836,53839],{"class":81,"line":727},[79,53833,53578],{"class":85},[79,53835,53798],{"class":395},[79,53837,53838],{"class":395}," h4",[79,53840,17732],{"class":239},[79,53842,53843,53846,53848,53851,53853],{"class":81,"line":738},[79,53844,53845],{"class":96},"            margin-bottom",[79,53847,53550],{"class":239},[79,53849,53850],{"class":96},"-35",[79,53852,53605],{"class":243},[79,53854,3531],{"class":239},[79,53856,53857,53859,53861,53863,53865],{"class":81,"line":753},[79,53858,53597],{"class":96},[79,53860,53550],{"class":239},[79,53862,2730],{"class":96},[79,53864,53605],{"class":243},[79,53866,3531],{"class":239},[79,53868,53869,53872,53874,53877,53879],{"class":81,"line":768},[79,53870,53871],{"class":96},"            margin-left",[79,53873,53550],{"class":239},[79,53875,53876],{"class":96},"-10",[79,53878,53605],{"class":243},[79,53880,3531],{"class":239},[79,53882,53883],{"class":81,"line":776},[79,53884,4742],{"class":239},[79,53886,53887,53890,53892],{"class":81,"line":781},[79,53888,53889],{"class":239},"    \u003C\u002F",[79,53891,2287],{"class":395},[79,53893,53420],{"class":239},[79,53895,53896,53899,53901],{"class":81,"line":786},[79,53897,53898],{"class":239},"\u003C\u002F",[79,53900,53447],{"class":395},[79,53902,53420],{"class":239},[79,53904,53905],{"class":81,"line":802},[79,53906,454],{"emptyLinePlaceholder":453},[79,53908,53909,53911,53914],{"class":81,"line":815},[79,53910,392],{"class":239},[79,53912,53913],{"class":395},"body",[79,53915,53420],{"class":239},[79,53917,53918],{"class":81,"line":828},[79,53919,454],{"emptyLinePlaceholder":453},[79,53921,53922,53924,53927],{"class":81,"line":842},[79,53923,53454],{"class":239},[79,53925,53926],{"class":395},"script",[79,53928,53420],{"class":239},[79,53930,53931],{"class":81,"line":859},[79,53932,53933],{"class":2440},"        \u002F\u002F 1. 四次弹框效果\n",[79,53935,53936],{"class":81,"line":878},[79,53937,53938],{"class":2440},"        \u002F\u002F 声明一个新的数组\n",[79,53940,53941,53944,53947,53949],{"class":81,"line":883},[79,53942,53943],{"class":243},"        let",[79,53945,53946],{"class":239}," arr ",[79,53948,244],{"class":243},[79,53950,53951],{"class":239}," []\n",[79,53953,53954,53956,53958,53961,53963,53965,53967,53969,53971,53974,53976,53978],{"class":81,"line":888},[79,53955,5606],{"class":243},[79,53957,3887],{"class":239},[79,53959,53960],{"class":243},"let",[79,53962,11622],{"class":239},[79,53964,244],{"class":243},[79,53966,27253],{"class":96},[79,53968,11629],{"class":239},[79,53970,3824],{"class":243},[79,53972,53973],{"class":96}," 4",[79,53975,5417],{"class":239},[79,53977,4507],{"class":243},[79,53979,14605],{"class":239},[79,53981,53982],{"class":81,"line":904},[79,53983,53984],{"class":2440},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[79,53986,53987],{"class":81,"line":919},[79,53988,53989],{"class":2440},"            \u002F\u002F arr.push(num)\n",[79,53991,53992,53995,53998,54000,54003,54005,54008,54010,54013],{"class":81,"line":930},[79,53993,53994],{"class":239},"            arr.",[79,53996,53997],{"class":85},"push",[79,53999,685],{"class":239},[79,54001,54002],{"class":85},"prompt",[79,54004,685],{"class":239},[79,54006,54007],{"class":89},"`请输入第${",[79,54009,2815],{"class":239},[79,54011,54012],{"class":89},"}季度的数据:`",[79,54014,1191],{"class":239},[79,54016,54017],{"class":81,"line":941},[79,54018,54019],{"class":2440},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[79,54021,54022],{"class":81,"line":946},[79,54023,4742],{"class":239},[79,54025,54026],{"class":81,"line":969},[79,54027,54028],{"class":2440},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[79,54030,54031],{"class":81,"line":975},[79,54032,54033],{"class":2440},"        \u002F\u002F 盒子开头\n",[79,54035,54036,54039,54042,54044,54047],{"class":81,"line":989},[79,54037,54038],{"class":239},"        document.",[79,54040,54041],{"class":85},"write",[79,54043,685],{"class":239},[79,54045,54046],{"class":89},"` \u003Cdiv class=\"box\">`",[79,54048,253],{"class":239},[79,54050,54051],{"class":81,"line":1003},[79,54052,454],{"emptyLinePlaceholder":453},[79,54054,54055],{"class":81,"line":1019},[79,54056,54057],{"class":2440},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[79,54059,54060,54062,54064,54066,54068,54070,54072,54074,54076,54079,54082,54084,54086],{"class":81,"line":1024},[79,54061,5606],{"class":243},[79,54063,3887],{"class":239},[79,54065,53960],{"class":243},[79,54067,11622],{"class":239},[79,54069,244],{"class":243},[79,54071,670],{"class":96},[79,54073,11629],{"class":239},[79,54075,392],{"class":243},[79,54077,54078],{"class":239}," arr.",[79,54080,54081],{"class":96},"length",[79,54083,5417],{"class":239},[79,54085,4507],{"class":243},[79,54087,14605],{"class":239},[79,54089,54090,54093,54095,54097],{"class":81,"line":1067},[79,54091,54092],{"class":239},"            document.",[79,54094,54041],{"class":85},[79,54096,685],{"class":239},[79,54098,54099],{"class":89},"`\n",[79,54101,54102,54105,54107,54109,54111,54113],{"class":81,"line":1101},[79,54103,54104],{"class":89},"              \u003Cdiv style=\"height: ${",[79,54106,6082],{"class":239},[79,54108,3263],{"class":89},[79,54110,2815],{"class":239},[79,54112,3311],{"class":89},[79,54114,54115],{"class":89},"}px;\">\n",[79,54117,54118,54121,54123,54125,54127,54129],{"class":81,"line":1106},[79,54119,54120],{"class":89},"                \u003Cspan>${",[79,54122,6082],{"class":239},[79,54124,3263],{"class":89},[79,54126,2815],{"class":239},[79,54128,3311],{"class":89},[79,54130,54131],{"class":89},"}\u003C\u002Fspan>\n",[79,54133,54134,54137,54139,54141,54143],{"class":81,"line":1112},[79,54135,54136],{"class":89},"                \u003Ch4>第${",[79,54138,2815],{"class":239},[79,54140,47680],{"class":243},[79,54142,27253],{"class":96},[79,54144,54145],{"class":89},"}季度\u003C\u002Fh4>\n",[79,54147,54148],{"class":81,"line":1124},[79,54149,54150],{"class":89},"              \u003C\u002Fdiv>          \n",[79,54152,54153,54156],{"class":81,"line":1129},[79,54154,54155],{"class":89},"            `",[79,54157,253],{"class":239},[79,54159,54160],{"class":81,"line":1150},[79,54161,4742],{"class":239},[79,54163,54164],{"class":81,"line":1161},[79,54165,54166],{"class":2440},"        \u002F\u002F 盒子结尾\n",[79,54168,54169,54171,54173,54175,54178],{"class":81,"line":1175},[79,54170,54038],{"class":239},[79,54172,54041],{"class":85},[79,54174,685],{"class":239},[79,54176,54177],{"class":89},"` \u003C\u002Fdiv>`",[79,54179,253],{"class":239},[79,54181,54182,54184,54186],{"class":81,"line":1194},[79,54183,53889],{"class":239},[79,54185,53926],{"class":395},[79,54187,53420],{"class":239},[79,54189,54190,54192,54194],{"class":81,"line":1211},[79,54191,53898],{"class":239},[79,54193,53913],{"class":395},[79,54195,53420],{"class":239},[79,54197,54198],{"class":81,"line":1228},[79,54199,454],{"emptyLinePlaceholder":453},[79,54201,54202,54204,54206],{"class":81,"line":1246},[79,54203,53898],{"class":239},[79,54205,52749],{"class":395},[79,54207,53420],{"class":239},[265,54209,54211],{"id":54210},"_284-冒泡排序","2.8.4 冒泡排序",[51,54213,54215],{"className":52747,"code":54214,"language":52749,"meta":57,"style":57},"\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",[59,54216,54217,54227,54241,54245,54253,54268,54288,54300,54308,54312,54320,54328,54360,54392,54429,54434,54453,54458,54471,54486,54502,54506,54511,54515,54525,54534,54542,54546],{"__ignoreMap":57},[79,54218,54219,54221,54223,54225],{"class":81,"line":82},[79,54220,53411],{"class":239},[79,54222,53414],{"class":395},[79,54224,53417],{"class":85},[79,54226,53420],{"class":239},[79,54228,54229,54231,54233,54235,54237,54239],{"class":81,"line":167},[79,54230,392],{"class":239},[79,54232,52749],{"class":395},[79,54234,53429],{"class":85},[79,54236,244],{"class":239},[79,54238,53434],{"class":89},[79,54240,53420],{"class":239},[79,54242,54243],{"class":81,"line":178},[79,54244,454],{"emptyLinePlaceholder":453},[79,54246,54247,54249,54251],{"class":81,"line":457},[79,54248,392],{"class":239},[79,54250,53447],{"class":395},[79,54252,53420],{"class":239},[79,54254,54255,54258,54260,54262,54264,54266],{"class":81,"line":462},[79,54256,54257],{"class":239},"  \u003C",[79,54259,53457],{"class":395},[79,54261,53460],{"class":85},[79,54263,244],{"class":239},[79,54265,53465],{"class":89},[79,54267,53420],{"class":239},[79,54269,54270,54272,54274,54276,54278,54280,54282,54284,54286],{"class":81,"line":474},[79,54271,54257],{"class":239},[79,54273,53457],{"class":395},[79,54275,2238],{"class":85},[79,54277,244],{"class":239},[79,54279,53504],{"class":89},[79,54281,53484],{"class":85},[79,54283,244],{"class":239},[79,54285,53511],{"class":89},[79,54287,53420],{"class":239},[79,54289,54290,54292,54294,54296,54298],{"class":81,"line":480},[79,54291,54257],{"class":239},[79,54293,53520],{"class":395},[79,54295,53523],{"class":239},[79,54297,53520],{"class":395},[79,54299,53420],{"class":239},[79,54301,54302,54304,54306],{"class":81,"line":486},[79,54303,53898],{"class":239},[79,54305,53447],{"class":395},[79,54307,53420],{"class":239},[79,54309,54310],{"class":81,"line":491},[79,54311,454],{"emptyLinePlaceholder":453},[79,54313,54314,54316,54318],{"class":81,"line":497},[79,54315,392],{"class":239},[79,54317,53913],{"class":395},[79,54319,53420],{"class":239},[79,54321,54322,54324,54326],{"class":81,"line":503},[79,54323,54257],{"class":239},[79,54325,53926],{"class":395},[79,54327,53420],{"class":239},[79,54329,54330,54333,54335,54337,54340,54342,54344,54346,54348,54350,54352,54354,54356,54358],{"class":81,"line":509},[79,54331,54332],{"class":243},"    let",[79,54334,53946],{"class":239},[79,54336,244],{"class":243},[79,54338,54339],{"class":239}," [",[79,54341,2694],{"class":96},[79,54343,1060],{"class":239},[79,54345,2668],{"class":96},[79,54347,1060],{"class":239},[79,54349,1188],{"class":96},[79,54351,1060],{"class":239},[79,54353,1049],{"class":96},[79,54355,1060],{"class":239},[79,54357,1072],{"class":96},[79,54359,35361],{"class":239},[79,54361,54362,54364,54366,54368,54370,54372,54374,54376,54378,54380,54382,54384,54386,54388,54390],{"class":81,"line":514},[79,54363,949],{"class":243},[79,54365,3887],{"class":239},[79,54367,53960],{"class":243},[79,54369,11622],{"class":239},[79,54371,244],{"class":243},[79,54373,670],{"class":96},[79,54375,11629],{"class":239},[79,54377,392],{"class":243},[79,54379,54078],{"class":239},[79,54381,54081],{"class":96},[79,54383,333],{"class":243},[79,54385,27253],{"class":96},[79,54387,5417],{"class":239},[79,54389,4507],{"class":243},[79,54391,14605],{"class":239},[79,54393,54394,54397,54399,54401,54403,54405,54407,54409,54411,54413,54415,54417,54419,54421,54423,54425,54427],{"class":81,"line":520},[79,54395,54396],{"class":243},"      for",[79,54398,3887],{"class":239},[79,54400,53960],{"class":243},[79,54402,11683],{"class":239},[79,54404,244],{"class":243},[79,54406,670],{"class":96},[79,54408,11690],{"class":239},[79,54410,392],{"class":243},[79,54412,54078],{"class":239},[79,54414,54081],{"class":96},[79,54416,333],{"class":243},[79,54418,11622],{"class":239},[79,54420,320],{"class":243},[79,54422,27253],{"class":96},[79,54424,11697],{"class":239},[79,54426,4507],{"class":243},[79,54428,14605],{"class":239},[79,54430,54431],{"class":81,"line":526},[79,54432,54433],{"class":2440},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[79,54435,54436,54438,54441,54443,54446,54448,54450],{"class":81,"line":532},[79,54437,1132],{"class":243},[79,54439,54440],{"class":239}," (arr[j] ",[79,54442,3330],{"class":243},[79,54444,54445],{"class":239}," arr[j ",[79,54447,2855],{"class":243},[79,54449,27253],{"class":96},[79,54451,54452],{"class":239},"]) {\n",[79,54454,54455],{"class":81,"line":537},[79,54456,54457],{"class":2440},"          \u002F\u002F 交换两个变量\n",[79,54459,54460,54463,54466,54468],{"class":81,"line":543},[79,54461,54462],{"class":243},"          let",[79,54464,54465],{"class":239}," tmp ",[79,54467,244],{"class":243},[79,54469,54470],{"class":239}," arr[j]\n",[79,54472,54473,54476,54478,54480,54482,54484],{"class":81,"line":549},[79,54474,54475],{"class":239},"          arr[j] ",[79,54477,244],{"class":243},[79,54479,54445],{"class":239},[79,54481,2855],{"class":243},[79,54483,27253],{"class":96},[79,54485,35361],{"class":239},[79,54487,54488,54491,54493,54495,54497,54499],{"class":81,"line":555},[79,54489,54490],{"class":239},"          arr[j ",[79,54492,2855],{"class":243},[79,54494,27253],{"class":96},[79,54496,1033],{"class":239},[79,54498,244],{"class":243},[79,54500,54501],{"class":239}," tmp\n",[79,54503,54504],{"class":81,"line":561},[79,54505,4742],{"class":239},[79,54507,54508],{"class":81,"line":567},[79,54509,54510],{"class":239},"      }\n",[79,54512,54513],{"class":81,"line":573},[79,54514,4402],{"class":239},[79,54516,54517,54520,54522],{"class":81,"line":579},[79,54518,54519],{"class":239},"    document.",[79,54521,54041],{"class":85},[79,54523,54524],{"class":239},"(arr)\n",[79,54526,54527,54530,54532],{"class":81,"line":584},[79,54528,54529],{"class":239},"  \u003C\u002F",[79,54531,53926],{"class":395},[79,54533,53420],{"class":239},[79,54535,54536,54538,54540],{"class":81,"line":590},[79,54537,53898],{"class":239},[79,54539,53913],{"class":395},[79,54541,53420],{"class":239},[79,54543,54544],{"class":81,"line":596},[79,54545,454],{"emptyLinePlaceholder":453},[79,54547,54548,54550,54552],{"class":81,"line":602},[79,54549,53898],{"class":239},[79,54551,52749],{"class":395},[79,54553,53420],{"class":239},[19,54555,54556],{},[3699,54557],{"alt":57,"src":54558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54560,54561],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54563,54564],{},"let arr = [4, 2, 5, 1, 3]",[19,54566,54567],{},"\u002F\u002F 1.升序排列写法",[19,54569,54570],{},"arr.sort(function (a, b) {",[19,54572,54573],{},"return a - b",[19,54575,54576],{},"})",[19,54578,54579],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54581,54582],{},"\u002F\u002F 降序排列写法",[19,54584,54570],{},[19,54586,54587],{},"return b - a",[19,54589,54576],{},[19,54591,54592],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54594,54596],{"id":54595},"_29-函数","2.9 函数",[19,54598,54599],{},[3699,54600],{"alt":57,"src":54601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54603,54604],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54606,54607],{},"函数的声明用function",[19,54609,54610],{},"函数里边可以嵌套函数",[265,54612,54614],{"id":54613},"_291-函数传参","2.9.1 函数传参",[19,54616,54617],{},[3699,54618],{"alt":57,"src":54619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54621,54622],{},[3699,54623],{"alt":57,"src":54624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[3377,54626,54627,54630,54633,54636,54639,54642],{},[29,54628,54629],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[29,54631,54632],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[29,54634,54635],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[29,54637,54638],{},"开发中尽量保持形参和实参个数一致",[29,54640,54641],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[29,54643,54644],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54646,54647],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[265,54649,54651],{"id":54650},"_292-函数的返回值","2.9.2 函数的返回值",[19,54653,54654],{},[3699,54655],{"alt":57,"src":54656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54658,54659],{},[3699,54660],{"alt":57,"src":54661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[3377,54663,54664,54667,54670,54673,54676],{},[29,54665,54666],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[29,54668,54669],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[29,54671,54672],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[29,54674,54675],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[29,54677,54678],{},"断点调试:进入函数内部看执行过程F11",[265,54680,54682],{"id":54681},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[51,54684,54686],{"className":52747,"code":54685,"language":52749,"meta":57,"style":57},"    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",[59,54687,54688,54693,54698,54702,54707],{"__ignoreMap":57},[79,54689,54690],{"class":81,"line":82},[79,54691,54692],{"class":239},"    function fn(a, b) {\n",[79,54694,54695],{"class":81,"line":167},[79,54696,54697],{"class":239},"      console.log(a + b);\n",[79,54699,54700],{"class":81,"line":178},[79,54701,4402],{"class":239},[79,54703,54704],{"class":81,"line":457},[79,54705,54706],{"class":239},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[79,54708,54709],{"class":81,"line":462},[79,54710,54711],{"class":239},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[265,54713,54715],{"id":54714},"_294-作用域","2.9.4 作用域",[3377,54717,54718,54724,54729,54732,54735],{},[29,54719,54720,54721],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[2528,54722,54723],{},"作用域",[29,54725,54726],{},[2528,54727,54728],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[29,54730,54731],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[29,54733,54734],{},"函数内部可以直接所使用全局变量",[29,54736,54737],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54739,1789],{},[51,54741,54743],{"className":52747,"code":54742,"language":52749,"meta":57,"style":57},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[59,54744,54745,54750,54755,54759,54764,54769,54774],{"__ignoreMap":57},[79,54746,54747],{"class":81,"line":82},[79,54748,54749],{"class":239},"    function fun() {\n",[79,54751,54752],{"class":81,"line":167},[79,54753,54754],{"class":239},"      num = 10\n",[79,54756,54757],{"class":81,"line":178},[79,54758,4402],{"class":239},[79,54760,54761],{"class":81,"line":457},[79,54762,54763],{"class":239},"    fun()\n",[79,54765,54766],{"class":81,"line":462},[79,54767,54768],{"class":239},"    console.log(num)\n",[79,54770,54771],{"class":81,"line":474},[79,54772,54773],{"class":239},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[79,54775,54776],{"class":81,"line":480},[79,54777,54778],{"class":239},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[3377,54780,54781,54784],{},[29,54782,54783],{},"函数内部的形参可以看做是局部变量",[29,54785,54786],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54788,54789,54790],{},"变量访问原则： ",[2528,54791,54792],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[265,54794,54796],{"id":54795},"_295-匿名函数","2.9.5 匿名函数",[19,54798,54799],{},"函数可以分为具名函数和匿名函数",[19,54801,54802],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[26,54804,54805],{},[29,54806,54807],{},"函数表达式",[19,54809,54810],{},[3699,54811],{"alt":57,"src":54812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54814,54815],{},"里边也可以写参数",[19,54817,54818],{},"具名函数调用位置可以随意调整；",[19,54820,54821],{},"匿名函数函数表达式形式只能在声明后才可以使用",[26,54823,54824],{"start":167},[29,54825,54826],{},"立即执行函数",[19,54828,54829],{},[3699,54830],{"alt":57,"src":54831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54833,54834],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54836,54837],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54839,54840],{},"(function () {})();",[19,54842,54843],{},"不要落下最后的;",[19,54845,54846],{},"立即执行函数必须要加;",[19,54848,54849],{},"分号写前写后都没问题",[19,54851,54852],{},"写前：",[19,54854,54855],{},"(function() {})()",[19,54857,54858],{},";(function () {})();",[19,54860,54861],{},"写后:",[19,54863,54864],{},"(function() {})();",[19,54866,54840],{},[19,54868,54869],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54871,54872],{},"还有一种写法：",[19,54874,54875],{},"(function(){}());",[19,54877,54878],{},"或者:",[19,54880,54881],{},"!function(){}();",[19,54883,54884],{},"立即执行函数有时候也是可以加名字的：",[19,54886,54887],{},"(function flexible(window,document) {}(window,document));",[19,54889,54890],{},"省一些调用方法",[265,54892,54894],{"id":54893},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54896,54897],{},[3699,54898],{"alt":57,"src":54899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54901,54902],{},"这样就不用非得给x,y初始化了",[19,54904,54905],{},[3699,54906],{"alt":57,"src":54907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54909,54910],{},"代码执行时先看左边",[19,54912,54913],{},"例如：console.log(false && 3+5)",[19,54915,54916],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54918,54919],{},"&&都是真时，就返回最后一个真值",[19,54921,54922],{},"console.log(11 && 22)",[19,54924,54925],{},"输出22",[19,54927,54928],{},"逻辑与：遇真则真",[19,54930,1789],{},[19,54932,54933],{},"let age=1",[19,54935,54936],{},"console.log(11 || age++)",[19,54938,54939],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54941,54942],{},"console.log(11 || 22)",[19,54944,54945],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54947,54948],{},"||如果都是假的话，就取最后一个假的值了",[265,54950,54952],{"id":54951},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54954,54955],{},"显示转换：",[19,54957,54958,54961,54962],{},[2528,54959,54960],{},"记忆","： ",[2528,54963,54964],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54966,54967],{},"空字符串为假，其他字符串全为真",[19,54969,54970],{},[3699,54971],{"alt":57,"src":54972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54974,54975],{},"隐式转换：",[19,54977,54978],{},[3699,54979],{"alt":57,"src":54980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54982,54983],{},"隐式转换:",[19,54985,54986],{},"null+3=3",[19,54988,54989],{},"undefined+3=NaN",[19,54991,54992],{},"null==undefined 输出true,他两个都当0看",[19,54994,54995],{},"null===undefined 输出false",[19,54997,54998],{},"undefined做任何操作都是NaN",[19,55000,55001],{},"NaN不等于NaN，NaN表示计算错误",[14,55003,55005],{"id":55004},"_210-对象","2.10 对象",[265,55007,55009],{"id":55008},"_2101-对象的介绍","2.10.1 对象的介绍",[19,55011,55012],{},"对象也是一种数据类型，里边的数据是无序的",[19,55014,55015],{},"对象由属性和方法组成",[19,55017,55018],{},[3699,55019],{"alt":57,"src":55020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,55022,55023],{},[3699,55024],{"alt":57,"src":55025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,55027,55028],{},[3699,55029],{"alt":57,"src":55030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[265,55032,55034],{"id":55033},"_2102-对象属性","2.10.2 对象属性",[19,55036,55037],{},[3699,55038],{"alt":57,"src":55039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[26,55041,55042],{},[29,55043,55044],{},"查询对象",[19,55046,55047],{},"对象名.属性 goods.uname",[19,55049,55050],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,55052,55053],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,55055,55056],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,55058,55059],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[26,55061,55062],{"start":167},[29,55063,55064],{},"重新赋值",[19,55066,55067],{},"对象名.属性=新值",[26,55069,55070],{"start":178},[29,55071,55072],{},"增加新数据",[19,55074,55067],{},[26,55076,55077],{"start":457},[29,55078,55079],{},"删除对象中的属性",[19,55081,55082],{},"delete 对象名.属性",[265,55084,55086],{"id":55085},"_2103-对象方法","2.10.3 对象方法",[19,55088,55089],{},[3699,55090],{"alt":57,"src":55091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,55093,55094],{},"后边跟的是匿名函数",[19,55096,55097],{},"对象外面的叫函数；对象内部的叫方法",[19,55099,55100],{},[3699,55101],{"alt":57,"src":55102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[265,55104,55106],{"id":55105},"_2104-遍历对象","2.10.4 遍历对象",[19,55108,55109],{},"理解为加括号的python字典遍历",[19,55111,55112],{},[3699,55113],{"alt":57,"src":55114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,55116,55117],{},"k是字符串类型",[19,55119,55120],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[51,55122,55124],{"className":52747,"code":55123,"language":52749,"meta":57,"style":57},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[59,55125,55126,55131,55136,55141,55146],{"__ignoreMap":57},[79,55127,55128],{"class":81,"line":82},[79,55129,55130],{"class":239},"   let arr = [1, 2, 3]\n",[79,55132,55133],{"class":81,"line":167},[79,55134,55135],{"class":239},"    for (let k in arr) {\n",[79,55137,55138],{"class":81,"line":178},[79,55139,55140],{"class":239},"      console.log(k)\n",[79,55142,55143],{"class":81,"line":457},[79,55144,55145],{"class":239},"      console.log(arr[k])\n",[79,55147,55148],{"class":81,"line":462},[79,55149,4402],{"class":239},[19,55151,55152],{},[3699,55153],{"alt":57,"src":55154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,55156,55157],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,55159,55160],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,55162,55163],{},"for in 得到的k是属性名",[53926,55165,55166],{},"\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,55168,55169],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[265,55171,55173],{"id":55172},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,55175,55176],{},"数组中放对象信息",[51,55178,55180],{"className":383,"code":55179,"language":385,"meta":57,"style":57},"\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",[59,55181,55182,55190,55195,55200,55205,55210,55215,55220,55225,55230,55235,55240,55245,55249,55253],{"__ignoreMap":57},[79,55183,55184,55186,55188],{"class":81,"line":82},[79,55185,392],{"class":239},[79,55187,53926],{"class":395},[79,55189,53420],{"class":239},[79,55191,55192],{"class":81,"line":167},[79,55193,55194],{"class":239},"    let students = [\n",[79,55196,55197],{"class":81,"line":178},[79,55198,55199],{"class":239},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[79,55201,55202],{"class":81,"line":457},[79,55203,55204],{"class":239},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[79,55206,55207],{"class":81,"line":462},[79,55208,55209],{"class":239},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[79,55211,55212],{"class":81,"line":474},[79,55213,55214],{"class":239},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[79,55216,55217],{"class":81,"line":480},[79,55218,55219],{"class":239},"    ]\n",[79,55221,55222],{"class":81,"line":486},[79,55223,55224],{"class":239},"    for (let i = 0; i \u003C students.length; i++) {\n",[79,55226,55227],{"class":81,"line":491},[79,55228,55229],{"class":239},"      for (let k in students[i]) {\n",[79,55231,55232],{"class":81,"line":497},[79,55233,55234],{"class":239},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[79,55236,55237],{"class":81,"line":503},[79,55238,55239],{"class":239},"        \u002F\u002F输出每个人的名字：\n",[79,55241,55242],{"class":81,"line":509},[79,55243,55244],{"class":239},"        \u002F\u002Fconsole.log(students[i].name)\n",[79,55246,55247],{"class":81,"line":514},[79,55248,54510],{"class":239},[79,55250,55251],{"class":81,"line":520},[79,55252,4402],{"class":239},[79,55254,55255,55257,55259],{"class":81,"line":526},[79,55256,54529],{"class":239},[79,55258,53926],{"class":395},[79,55260,53420],{"class":239},[265,55262,55264],{"id":55263},"_2106-内置对象","2.10.6 内置对象",[19,55266,55267],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[26,55269,55270],{},[29,55271,55272],{},"数学对象Math",[19,55274,55275],{},[3699,55276],{"alt":57,"src":55277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,55279,55280],{},[2614,55281,55284],{"href":55282,"rel":55283},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[26001],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,55286,55287],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,55289,55290],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,55292,55293],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,55295,55296],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,55298,55299],{},"null属于对象数据类型",[26,55301,55302],{"start":167},[29,55303,55304],{},"生成任意范围随机数",[19,55306,55307],{},[3699,55308],{"alt":57,"src":55309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,55311,55312],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,55314,55315],{},"乘以几就取不到几",[19,55317,55318],{},"取数组中的随机元素：",[19,55320,55321],{},"let arr = ['red', 'green', 'blue']",[19,55323,55324],{},"let random = Math.floor(Math.random() * arr.length)",[19,55326,55327],{},"console.log(arr[random])",[19,55329,55330],{},"这个函数得到的是全闭区间",[19,55332,55333],{},"function getRandom(N, M) {",[19,55335,55336],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,55338,700],{},[19,55340,55341],{},"console.log(getRandom(4, 8))",[265,55343,55345],{"id":55344},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,55347,55348],{},[3699,55349],{"alt":57,"src":55350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55352,55353],{},[3699,55354],{"alt":57,"src":55355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55357,55358],{},[3699,55359],{"alt":57,"src":55360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55362,55363],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55365,55366],{},[3699,55367],{"alt":57,"src":55368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55370,55371],{},[3699,55372],{"alt":57,"src":55373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55375,55376],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55378,55379],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55381,55382],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[2287,55384,55385],{},"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":57,"searchDepth":167,"depth":167,"links":55387},[55388,55396,55397,55398,55399,55400,55407,55411,55417,55426],{"id":52582,"depth":167,"text":52583,"children":55389},[55390,55391,55392,55393,55394,55395],{"id":52586,"depth":178,"text":52587},{"id":52603,"depth":178,"text":52604},{"id":52643,"depth":178,"text":52644},{"id":52655,"depth":178,"text":52656},{"id":52664,"depth":178,"text":52665},{"id":52712,"depth":178,"text":52713},{"id":52722,"depth":167,"text":52723},{"id":52810,"depth":167,"text":52811},{"id":52833,"depth":167,"text":52834},{"id":52845,"depth":167,"text":52846},{"id":53032,"depth":167,"text":53033,"children":55401},[55402,55403,55404,55405,55406],{"id":53036,"depth":178,"text":53037},{"id":53045,"depth":178,"text":53046},{"id":53073,"depth":178,"text":53074},{"id":53109,"depth":178,"text":53110},{"id":53134,"depth":178,"text":53135},{"id":53146,"depth":167,"text":53147,"children":55408},[55409,55410],{"id":53167,"depth":178,"text":53168},{"id":53261,"depth":178,"text":53262},{"id":53319,"depth":167,"text":53320,"children":55412},[55413,55414,55415,55416],{"id":53323,"depth":178,"text":53324},{"id":53347,"depth":178,"text":53348},{"id":53400,"depth":178,"text":53401},{"id":54210,"depth":178,"text":54211},{"id":54595,"depth":167,"text":54596,"children":55418},[55419,55420,55421,55422,55423,55424,55425],{"id":54613,"depth":178,"text":54614},{"id":54650,"depth":178,"text":54651},{"id":54681,"depth":178,"text":54682},{"id":54714,"depth":178,"text":54715},{"id":54795,"depth":178,"text":54796},{"id":54893,"depth":178,"text":54894},{"id":54951,"depth":178,"text":54952},{"id":55004,"depth":167,"text":55005,"children":55427},[55428,55429,55430,55431,55432,55433,55434],{"id":55008,"depth":178,"text":55009},{"id":55033,"depth":178,"text":55034},{"id":55085,"depth":178,"text":55086},{"id":55105,"depth":178,"text":55106},{"id":55172,"depth":178,"text":55173},{"id":55263,"depth":178,"text":55264},{"id":55344,"depth":178,"text":55345},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52574,"description":25516},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55441,"title":55442,"body":55443,"description":25516,"extension":2314,"meta":78781,"navigation":453,"path":78782,"seo":78783,"stem":78784,"__hash__":78785},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55444,"toc":78721},[55445,55448,55451,55454,55459,55462,55465,55468,55472,55476,55482,55487,55495,55502,55505,55509,55514,55519,55524,55527,55530,55541,55544,55548,55551,55554,55559,55564,55569,55572,55575,55667,55670,55675,55678,55683,55686,55689,55694,55697,55702,55706,55709,55723,55727,55732,55735,55738,55742,55747,55750,55754,55758,55763,55767,55772,55775,55778,55781,55784,55787,55790,55795,55800,55828,55831,55834,55837,55842,55845,55848,55851,55854,55858,55887,55891,55896,55901,55904,55907,55910,55915,56030,56035,56040,56201,56206,56209,56213,56218,56223,56226,56229,56232,56235,56238,56241,56244,56247,56250,56253,56256,56259,56262,56265,56267,56270,56273,56276,56281,56285,56682,56685,56691,56695,56700,57982,57987,57990,57993,57996,58001,59197,59201,59207,59212,59215,59220,59225,59229,59233,59238,59241,59246,59249,59252,59256,60164,60167,60171,60392,60395,60398,60401,60627,60630,60854,60857,60861,60866,60869,60872,61100,61103,61136,61139,61143,61148,61152,61155,61158,61161,61164,61167,61170,61173,61178,62458,62462,62465,63558,63562,63565,63568,63571,63574,63578,63581,63584,63586,63594,65075,65079,65082,65085,65088,65297,65300,65304,65308,65313,65318,65321,65324,65329,65333,65338,65341,65450,65454,65459,65464,65467,65470,65474,65479,65484,65489,65492,65495,65506,65509,65514,65519,65522,65525,65598,65602,65607,65610,65612,65623,65627,65632,66958,66961,66964,66967,66969,66972,66975,66978,66981,66984,66987,66990,66993,66996,66999,67002,67005,67007,67009,67012,67016,68109,68112,68115,68131,68145,68148,68153,68159,68164,68168,68172,68177,68181,68186,68628,68633,68636,68640,68645,68648,68651,68655,68660,68664,68669,68674,68678,68683,68688,68691,68696,68701,68705,68710,68715,68819,68822,68826,68831,69197,69200,69203,69206,69209,69212,69215,69218,69221,70517,70521,70526,70531,70534,70537,70540,70543,70545,70550,70555,70558,70562,70567,70572,70577,70580,70583,70586,70589,70592,70597,70600,70604,70609,70614,70618,70623,70626,70631,70634,70637,70640,70643,70646,70651,70654,70657,70660,70663,70667,70672,70675,70679,70684,70687,70690,70694,70723,70726,70730,70734,70739,70743,70748,70751,70754,70757,70760,70763,70766,70769,70772,70775,70778,70781,70784,70787,70790,70794,70799,70804,70807,70811,70815,70820,70823,70827,70830,70833,70838,70843,70848,70853,70858,70861,70864,70869,70874,70878,70883,70886,70891,70894,70897,70900,70903,70908,70911,70920,70924,70929,70932,70935,70939,70942,70947,70951,70954,70960,70966,70970,70996,70999,72559,72562,73058,73061,73066,73071,73076,73080,73085,73090,73095,73099,73104,73107,73110,73113,73116,73120,73123,73128,73131,73136,73140,73145,73148,73153,73158,73163,73166,73169,73174,73179,73182,73185,73189,73192,73197,73200,73205,73208,73213,73218,73223,73226,73231,73296,73299,73310,73314,73319,73491,73495,73500,73503,73506,73509,73513,73524,73528,73531,73536,73541,73544,73547,73550,73553,73556,73558,73561,73564,73567,73572,73575,73580,73583,73587,73590,73593,73607,73611,73614,73669,73674,73677,73680,73685,73688,73692,73697,73827,73831,73836,73841,73922,73927,73931,73934,73939,73944,73950,73953,73956,73959,73963,73968,73971,73982,73986,74003,77050,77054,77057,77060,77063,77084,77088,77091,77099,77102,77107,77110,77113,77118,77123,77127,77148,77152,77157,77160,77163,77166,77169,77173,77178,77181,77185,77190,77193,77198,77201,77206,77209,77214,78417,78421,78426,78429,78434,78718],[10,55446,55442],{"id":55447},"_3web-apis",[19,55449,55450],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55452,55453],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55455,55456],{},[3699,55457],{"alt":57,"src":55458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55460,55461],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55463,55464],{},"建议数组和对象使用 const 来声明",[19,55466,55467],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55469,55471],{"id":55470},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[265,55473,55475],{"id":55474},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55477,55478,55481],{},[59,55479,55480],{},"document"," = HTML 文件解析后的对象化表示；",[19,55483,55484,55486],{},[59,55485,55480],{}," ≠ HTML 文件本身",[19,55488,55489,55494],{},[2528,55490,55491],{},[59,55492,55493],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55496,55497,55501],{},[2528,55498,55499],{},[59,55500,55480],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55503,55504],{},"document实际上为window.document的简写",[265,55506,55508],{"id":55507},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55510,55511],{},[3699,55512],{"alt":57,"src":55513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55515,55516],{},[3699,55517],{"alt":57,"src":55518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55520,55521],{},[3699,55522],{"alt":57,"src":55523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55525,55526],{},"console.dir()",[19,55528,55529],{},"dir用来打印对象",[3377,55531,55532,55535,55538],{},[29,55533,55534],{},"任何一个标签，都是一个对象",[29,55536,55537],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[29,55539,55540],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55542,55543],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[265,55545,55547],{"id":55546},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55549,55550],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55552,55553],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55555,55556],{},[2528,55557,55558],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[26,55560,55561],{},[29,55562,55563],{},"利用CSS选择器来获取标签元素",[19,55565,55566],{},[3699,55567],{"alt":57,"src":55568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55570,55571],{},"里边的选择器必须必须加引号！！！",[19,55573,55574],{},"只选择第一个元素",[51,55576,55578],{"className":383,"code":55577,"language":385,"meta":57,"style":57},"\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",[59,55579,55580,55588,55609,55628,55636,55641,55646,55651,55659],{"__ignoreMap":57},[79,55581,55582,55584,55586],{"class":81,"line":82},[79,55583,392],{"class":239},[79,55585,53913],{"class":395},[79,55587,53420],{"class":239},[79,55589,55590,55592,55594,55597,55599,55602,55605,55607],{"class":81,"line":167},[79,55591,54257],{"class":239},[79,55593,53724],{"class":395},[79,55595,55596],{"class":85}," class",[79,55598,244],{"class":239},[79,55600,55601],{"class":89},"\"box\"",[79,55603,55604],{"class":239},">123\u003C\u002F",[79,55606,53724],{"class":395},[79,55608,53420],{"class":239},[79,55610,55611,55613,55615,55617,55619,55621,55624,55626],{"class":81,"line":178},[79,55612,54257],{"class":239},[79,55614,53724],{"class":395},[79,55616,55596],{"class":85},[79,55618,244],{"class":239},[79,55620,55601],{"class":89},[79,55622,55623],{"class":239},">456\u003C\u002F",[79,55625,53724],{"class":395},[79,55627,53420],{"class":239},[79,55629,55630,55632,55634],{"class":81,"line":457},[79,55631,54257],{"class":239},[79,55633,53926],{"class":395},[79,55635,53420],{"class":239},[79,55637,55638],{"class":81,"line":462},[79,55639,55640],{"class":239},"    \u002F\u002F 1.获取匹配的第一个元素\n",[79,55642,55643],{"class":81,"line":474},[79,55644,55645],{"class":239},"    const box = document.querySelector('div')\n",[79,55647,55648],{"class":81,"line":480},[79,55649,55650],{"class":239},"    console.dir(box)\n",[79,55652,55653,55655,55657],{"class":81,"line":486},[79,55654,54529],{"class":239},[79,55656,53926],{"class":395},[79,55658,53420],{"class":239},[79,55660,55661,55663,55665],{"class":81,"line":491},[79,55662,53898],{"class":239},[79,55664,53913],{"class":395},[79,55666,53420],{"class":239},[19,55668,55669],{},"只选123，不选456",[19,55671,55672],{},[3699,55673],{"alt":57,"src":55674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55676,55677],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55679,55680],{},[3699,55681],{"alt":57,"src":55682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55684,55685],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55687,55688],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[26,55690,55691],{"start":167},[29,55692,55693],{},"其他方法来获取标签元素",[19,55695,55696],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55698,55699],{},[3699,55700],{"alt":57,"src":55701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[265,55703,55705],{"id":55704},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55707,55708],{},"设置修改DOM元素内容有两种方式：",[3377,55710,55711,55714,55717,55720],{},[29,55712,55713],{},"元素.innerText=''",[29,55715,55716],{},"元素.innerHTML=''",[29,55718,55719],{},"不写字符串输出数字也是可以的",[29,55721,55722],{},"元素.innerHtml=1",[24137,55724,55726],{"id":55725},"_3131-innertext","3.1.3.1 innerText",[19,55728,55729],{},[3699,55730],{"alt":57,"src":55731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55733,55734],{},"思路：实现了修改盒子中的内容！",[19,55736,55737],{},"它只显示纯文本，不解析标签",[24137,55739,55741],{"id":55740},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55743,55744],{},[3699,55745],{"alt":57,"src":55746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55748,55749],{},"相比于innerText，他的强大之处在于可以解析标签",[265,55751,55753],{"id":55752},"_314-操作元素属性","3.1.4 操作元素属性",[24137,55755,55757],{"id":55756},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55759,55760],{},[3699,55761],{"alt":57,"src":55762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[24137,55764,55766],{"id":55765},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55768,55769],{},[3699,55770],{"alt":57,"src":55771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55773,55774],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55776,55777],{},"div.style.backgroundColor = 'hotpink'",[19,55779,55780],{},"如果按照css的写法，-表示减，就会出错",[19,55782,55783],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55785,55786],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55788,55789],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55791,55792],{},[3699,55793],{"alt":57,"src":55794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55796,55797],{},[3699,55798],{"alt":57,"src":55799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[26,55801,55802,55805,55808,55811,55814,55817],{},[29,55803,55804],{},"className这个方式就是修改很多样式的时候来使用的！",[29,55806,55807],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[29,55809,55810],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[29,55812,55813],{},"className为属性名，如果还用class的话就导致与关键字冲突",[29,55815,55816],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[29,55818,55819,55820,55825],{},"解析标签的时候就变为了",[53724,55821],{"className":55822},[55823,55824],"nav","box",[55826,55827],"br",{},[19,55829,55830],{},"例子：",[53724,55832],{"className":55833},[55823],[53926,55835,55836],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55838,55839],{},[3699,55840],{"alt":57,"src":55841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55843,55844],{},"追加和删除类名用classList",[19,55846,55847],{},"常用于类似于开关的操作",[19,55849,55850],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55852,55853],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[24137,55855,55857],{"id":55856},"_3143-牢记点","3.1.4.3 牢记点",[26,55859,55860,55863,55866,55869,55872,55875,55878,55881,55884],{},[29,55861,55862],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[29,55864,55865],{},"使用style属性操作css时不要忘记引号",[29,55867,55868],{},"使用className或者classList时也不要忘记引号",[29,55870,55871],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[29,55873,55874],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[29,55876,55877],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[29,55879,55880],{},"若： let arr=['1','2',3] arr[0]=1",[29,55882,55883],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[29,55885,55886],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[265,55888,55890],{"id":55889},"_315-操作表单元素","3.1.5 操作表单元素",[26,55892,55893],{},[29,55894,55895],{},"天生的属性",[19,55897,55898],{},[3699,55899],{"alt":57,"src":55900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55902,55903],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55905,55906],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55908,55909],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55911,55912],{},[3699,55913],{"alt":57,"src":55914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[51,55916,55918],{"className":52747,"code":55917,"language":52749,"meta":57,"style":57},"在复选框中如果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",[59,55919,55920,55925,55957,55962,55967,55972,55977,55981,55986,55991,56008,56020,56025],{"__ignoreMap":57},[79,55921,55922],{"class":81,"line":82},[79,55923,55924],{"class":239},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[79,55926,55927,55929,55932,55935,55937,55940,55942,55944,55946,55948,55950,55952,55955],{"class":81,"line":167},[79,55928,392],{"class":239},[79,55930,55931],{"class":395},"input",[79,55933,55934],{"class":85}," type",[79,55936,244],{"class":239},[79,55938,55939],{"class":89},"\"checkbox\"",[79,55941,2238],{"class":85},[79,55943,244],{"class":239},[79,55945,9846],{"class":89},[79,55947,17119],{"class":85},[79,55949,244],{"class":239},[79,55951,9846],{"class":89},[79,55953,55954],{"class":85}," checked",[79,55956,53420],{"class":239},[79,55958,55959],{"class":81,"line":178},[79,55960,55961],{"class":239},"不选的话：\n",[79,55963,55964],{"class":81,"line":457},[79,55965,55966],{"class":239},"const input = document.querySelector('input')\n",[79,55968,55969],{"class":81,"line":462},[79,55970,55971],{"class":239},"input.checked=false\n",[79,55973,55974],{"class":81,"line":474},[79,55975,55976],{"class":239},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[79,55978,55979],{"class":81,"line":480},[79,55980,454],{"emptyLinePlaceholder":453},[79,55982,55983],{"class":81,"line":486},[79,55984,55985],{"class":239},"禁用按钮：\n",[79,55987,55988],{"class":81,"line":491},[79,55989,55990],{"class":239},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[79,55992,55993,55995,55998,56001,56004,56006],{"class":81,"line":497},[79,55994,392],{"class":239},[79,55996,55997],{"class":395},"button",[79,55999,56000],{"class":85}," disabled",[79,56002,56003],{"class":239},">点击\u003C\u002F",[79,56005,55997],{"class":395},[79,56007,53420],{"class":239},[79,56009,56010,56012,56014,56016,56018],{"class":81,"line":503},[79,56011,392],{"class":239},[79,56013,55997],{"class":395},[79,56015,56003],{"class":239},[79,56017,55997],{"class":395},[79,56019,53420],{"class":239},[79,56021,56022],{"class":81,"line":509},[79,56023,56024],{"class":239},"const bt = document.querySelector('button')\n",[79,56026,56027],{"class":81,"line":514},[79,56028,56029],{"class":239},"bt.disabled = false\n",[26,56031,56032],{"start":167},[29,56033,56034],{},"自定义属性",[19,56036,56037],{},[3699,56038],{"alt":57,"src":56039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[51,56041,56043],{"className":383,"code":56042,"language":385,"meta":57,"style":57},"\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",[59,56044,56045,56053,56081,56100,56119,56138,56157,56165,56170,56175,56180,56185,56193],{"__ignoreMap":57},[79,56046,56047,56049,56051],{"class":81,"line":82},[79,56048,392],{"class":239},[79,56050,53913],{"class":395},[79,56052,53420],{"class":239},[79,56054,56055,56057,56059,56062,56064,56066,56069,56071,56074,56077,56079],{"class":81,"line":167},[79,56056,54257],{"class":239},[79,56058,53724],{"class":395},[79,56060,56061],{"class":85}," data-id",[79,56063,244],{"class":239},[79,56065,5881],{"class":89},[79,56067,56068],{"class":85}," data-spm",[79,56070,244],{"class":239},[79,56072,56073],{"class":89},"\"我不知道\"",[79,56075,56076],{"class":239},">1\u003C\u002F",[79,56078,53724],{"class":395},[79,56080,53420],{"class":239},[79,56082,56083,56085,56087,56089,56091,56093,56096,56098],{"class":81,"line":178},[79,56084,54257],{"class":239},[79,56086,53724],{"class":395},[79,56088,56061],{"class":85},[79,56090,244],{"class":239},[79,56092,5904],{"class":89},[79,56094,56095],{"class":239},">2\u003C\u002F",[79,56097,53724],{"class":395},[79,56099,53420],{"class":239},[79,56101,56102,56104,56106,56108,56110,56112,56115,56117],{"class":81,"line":457},[79,56103,54257],{"class":239},[79,56105,53724],{"class":395},[79,56107,56061],{"class":85},[79,56109,244],{"class":239},[79,56111,5917],{"class":89},[79,56113,56114],{"class":239},">3\u003C\u002F",[79,56116,53724],{"class":395},[79,56118,53420],{"class":239},[79,56120,56121,56123,56125,56127,56129,56131,56134,56136],{"class":81,"line":462},[79,56122,54257],{"class":239},[79,56124,53724],{"class":395},[79,56126,56061],{"class":85},[79,56128,244],{"class":239},[79,56130,5930],{"class":89},[79,56132,56133],{"class":239},">4\u003C\u002F",[79,56135,53724],{"class":395},[79,56137,53420],{"class":239},[79,56139,56140,56142,56144,56146,56148,56150,56153,56155],{"class":81,"line":474},[79,56141,54257],{"class":239},[79,56143,53724],{"class":395},[79,56145,56061],{"class":85},[79,56147,244],{"class":239},[79,56149,5950],{"class":89},[79,56151,56152],{"class":239},">5\u003C\u002F",[79,56154,53724],{"class":395},[79,56156,53420],{"class":239},[79,56158,56159,56161,56163],{"class":81,"line":480},[79,56160,54257],{"class":239},[79,56162,53926],{"class":395},[79,56164,53420],{"class":239},[79,56166,56167],{"class":81,"line":486},[79,56168,56169],{"class":239},"    const one = document.querySelector('div')\n",[79,56171,56172],{"class":81,"line":491},[79,56173,56174],{"class":239},"    console.log(one.dataset)\n",[79,56176,56177],{"class":81,"line":497},[79,56178,56179],{"class":239},"    console.log(one.dataset.id)\n",[79,56181,56182],{"class":81,"line":503},[79,56183,56184],{"class":239},"    console.log(one.dataset.spm)\n",[79,56186,56187,56189,56191],{"class":81,"line":509},[79,56188,54529],{"class":239},[79,56190,53926],{"class":395},[79,56192,53420],{"class":239},[79,56194,56195,56197,56199],{"class":81,"line":514},[79,56196,53898],{"class":239},[79,56198,53913],{"class":395},[79,56200,53420],{"class":239},[19,56202,56203],{},[3699,56204],{"alt":57,"src":56205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,56207,56208],{},"document.querySelector选择的是第一个对象（元素）",[265,56210,56212],{"id":56211},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,56214,56215],{},[3699,56216],{"alt":57,"src":56217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,56219,56220],{},[3699,56221],{"alt":57,"src":56222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,56224,56225],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53926,56227,56228],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,56230,56231],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53926,56233,56234],{},"\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,56236,56237],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,56239,56240],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,56242,56243],{},"单位为毫秒！！！",[19,56245,56246],{},"可以搭配匿名函数来用！！！",[19,56248,56249],{},"setInterval(function () {",[19,56251,56252],{},"alert('两秒执行一次')",[19,56254,56255],{},"}, 2000)",[19,56257,56258],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,56260,56261],{},"function fn() {",[19,56263,56264],{},"document.write(1)",[19,56266,700],{},[19,56268,56269],{},"setInterval(fn, 1000)",[19,56271,56272],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,56274,56275],{},"setInterval('fn()', 1000)",[19,56277,56278],{},[3699,56279],{"alt":57,"src":56280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[24137,56282,56284],{"id":56283},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[51,56286,56288],{"className":52747,"code":56287,"language":52749,"meta":57,"style":57},"\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",[59,56289,56290,56300,56314,56318,56326,56340,56360,56372,56380,56384,56392,56429,56434,56439,56444,56452,56460,56482,56490,56495,56517,56522,56527,56538,56543,56563,56571,56586,56601,56612,56617,56627,56637,56641,56650,56654,56662,56670,56674],{"__ignoreMap":57},[79,56291,56292,56294,56296,56298],{"class":81,"line":82},[79,56293,53411],{"class":239},[79,56295,53414],{"class":395},[79,56297,53417],{"class":85},[79,56299,53420],{"class":239},[79,56301,56302,56304,56306,56308,56310,56312],{"class":81,"line":167},[79,56303,392],{"class":239},[79,56305,52749],{"class":395},[79,56307,53429],{"class":85},[79,56309,244],{"class":239},[79,56311,53434],{"class":89},[79,56313,53420],{"class":239},[79,56315,56316],{"class":81,"line":178},[79,56317,454],{"emptyLinePlaceholder":453},[79,56319,56320,56322,56324],{"class":81,"line":457},[79,56321,392],{"class":239},[79,56323,53447],{"class":395},[79,56325,53420],{"class":239},[79,56327,56328,56330,56332,56334,56336,56338],{"class":81,"line":462},[79,56329,54257],{"class":239},[79,56331,53457],{"class":395},[79,56333,53460],{"class":85},[79,56335,244],{"class":239},[79,56337,53465],{"class":89},[79,56339,53420],{"class":239},[79,56341,56342,56344,56346,56348,56350,56352,56354,56356,56358],{"class":81,"line":474},[79,56343,54257],{"class":239},[79,56345,53457],{"class":395},[79,56347,2238],{"class":85},[79,56349,244],{"class":239},[79,56351,53504],{"class":89},[79,56353,53484],{"class":85},[79,56355,244],{"class":239},[79,56357,53511],{"class":89},[79,56359,53420],{"class":239},[79,56361,56362,56364,56366,56368,56370],{"class":81,"line":480},[79,56363,54257],{"class":239},[79,56365,53520],{"class":395},[79,56367,53523],{"class":239},[79,56369,53520],{"class":395},[79,56371,53420],{"class":239},[79,56373,56374,56376,56378],{"class":81,"line":486},[79,56375,53898],{"class":239},[79,56377,53447],{"class":395},[79,56379,53420],{"class":239},[79,56381,56382],{"class":81,"line":491},[79,56383,454],{"emptyLinePlaceholder":453},[79,56385,56386,56388,56390],{"class":81,"line":497},[79,56387,392],{"class":239},[79,56389,53913],{"class":395},[79,56391,53420],{"class":239},[79,56393,56394,56396,56399,56401,56403,56405,56407,56409,56411,56414,56416,56419,56422,56424,56427],{"class":81,"line":503},[79,56395,54257],{"class":239},[79,56397,56398],{"class":395},"textarea",[79,56400,2238],{"class":85},[79,56402,244],{"class":239},[79,56404,9846],{"class":89},[79,56406,17119],{"class":85},[79,56408,244],{"class":239},[79,56410,9846],{"class":89},[79,56412,56413],{"class":85}," cols",[79,56415,244],{"class":239},[79,56417,56418],{"class":89},"\"30\"",[79,56420,56421],{"class":85}," rows",[79,56423,244],{"class":239},[79,56425,56426],{"class":89},"\"10\"",[79,56428,53420],{"class":239},[79,56430,56431],{"class":81,"line":509},[79,56432,56433],{"class":239},"        用户注册协议\n",[79,56435,56436],{"class":81,"line":514},[79,56437,56438],{"class":239},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[79,56440,56441],{"class":81,"line":520},[79,56442,56443],{"class":239},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[79,56445,56446,56448,56450],{"class":81,"line":526},[79,56447,53889],{"class":239},[79,56449,56398],{"class":395},[79,56451,53420],{"class":239},[79,56453,56454,56456,56458],{"class":81,"line":532},[79,56455,54257],{"class":239},[79,56457,55826],{"class":395},[79,56459,53420],{"class":239},[79,56461,56462,56464,56466,56468,56470,56473,56475,56478,56480],{"class":81,"line":537},[79,56463,54257],{"class":239},[79,56465,55997],{"class":395},[79,56467,55596],{"class":85},[79,56469,244],{"class":239},[79,56471,56472],{"class":89},"\"btn\"",[79,56474,56000],{"class":85},[79,56476,56477],{"class":239},">我已经阅读用户协议(5)\u003C\u002F",[79,56479,55997],{"class":395},[79,56481,53420],{"class":239},[79,56483,56484,56486,56488],{"class":81,"line":543},[79,56485,54257],{"class":239},[79,56487,53926],{"class":395},[79,56489,53420],{"class":239},[79,56491,56492],{"class":81,"line":549},[79,56493,56494],{"class":2440},"    \u002F\u002F 1. 获取元素\n",[79,56496,56497,56499,56502,56504,56507,56510,56512,56515],{"class":81,"line":555},[79,56498,13385],{"class":243},[79,56500,56501],{"class":96}," btn",[79,56503,468],{"class":243},[79,56505,56506],{"class":239}," document.",[79,56508,56509],{"class":85},"querySelector",[79,56511,685],{"class":239},[79,56513,56514],{"class":89},"'.btn'",[79,56516,253],{"class":239},[79,56518,56519],{"class":81,"line":561},[79,56520,56521],{"class":2440},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[79,56523,56524],{"class":81,"line":567},[79,56525,56526],{"class":2440},"    \u002F\u002F 2. 倒计时\n",[79,56528,56529,56531,56533,56535],{"class":81,"line":573},[79,56530,54332],{"class":243},[79,56532,11622],{"class":239},[79,56534,244],{"class":243},[79,56536,56537],{"class":96}," 5\n",[79,56539,56540],{"class":81,"line":579},[79,56541,56542],{"class":2440},"    \u002F\u002F 2.1 开启定时器\n",[79,56544,56545,56547,56550,56552,56555,56557,56560],{"class":81,"line":584},[79,56546,54332],{"class":243},[79,56548,56549],{"class":239}," n ",[79,56551,244],{"class":243},[79,56553,56554],{"class":85}," setInterval",[79,56556,685],{"class":239},[79,56558,56559],{"class":243},"function",[79,56561,56562],{"class":239}," () {\n",[79,56564,56565,56568],{"class":81,"line":590},[79,56566,56567],{"class":239},"      i",[79,56569,56570],{"class":243},"--\n",[79,56572,56573,56576,56578,56581,56583],{"class":81,"line":596},[79,56574,56575],{"class":239},"      btn.innerHTML ",[79,56577,244],{"class":243},[79,56579,56580],{"class":89}," `我已经阅读用户协议(${",[79,56582,2815],{"class":239},[79,56584,56585],{"class":89},"})`\n",[79,56587,56588,56591,56594,56597,56599],{"class":81,"line":602},[79,56589,56590],{"class":243},"      if",[79,56592,56593],{"class":239}," (i ",[79,56595,56596],{"class":243},"===",[79,56598,670],{"class":96},[79,56600,14605],{"class":239},[79,56602,56603,56606,56609],{"class":81,"line":608},[79,56604,56605],{"class":85},"        clearInterval",[79,56607,56608],{"class":239},"(n)  ",[79,56610,56611],{"class":2440},"\u002F\u002F 关闭定时器\n",[79,56613,56614],{"class":81,"line":614},[79,56615,56616],{"class":2440},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[79,56618,56619,56622,56624],{"class":81,"line":620},[79,56620,56621],{"class":239},"        btn.disabled ",[79,56623,244],{"class":243},[79,56625,56626],{"class":96}," false\n",[79,56628,56629,56632,56634],{"class":81,"line":625},[79,56630,56631],{"class":239},"        btn.innerHTML ",[79,56633,244],{"class":243},[79,56635,56636],{"class":89}," '同意'\n",[79,56638,56639],{"class":81,"line":630},[79,56640,54510],{"class":239},[79,56642,56643,56646,56648],{"class":81,"line":648},[79,56644,56645],{"class":239},"    }, ",[79,56647,8605],{"class":96},[79,56649,253],{"class":239},[79,56651,56652],{"class":81,"line":659},[79,56653,454],{"emptyLinePlaceholder":453},[79,56655,56656,56658,56660],{"class":81,"line":676},[79,56657,54529],{"class":239},[79,56659,53926],{"class":395},[79,56661,53420],{"class":239},[79,56663,56664,56666,56668],{"class":81,"line":708},[79,56665,53898],{"class":239},[79,56667,53913],{"class":395},[79,56669,53420],{"class":239},[79,56671,56672],{"class":81,"line":717},[79,56673,454],{"emptyLinePlaceholder":453},[79,56675,56676,56678,56680],{"class":81,"line":722},[79,56677,53898],{"class":239},[79,56679,52749],{"class":395},[79,56681,53420],{"class":239},[19,56683,56684],{},"不要一直想着用死循环,避免死循环",[19,56686,56687,56690],{},[59,56688,56689],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[24137,56692,56694],{"id":56693},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[26,56696,56697],{},[29,56698,56699],{},"法1",[51,56701,56703],{"className":52747,"code":56702,"language":52749,"meta":57,"style":57},"\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",[59,56704,56705,56715,56729,56733,56741,56755,56775,56787,56795,56801,56812,56823,56827,56831,56838,56850,56854,56858,56865,56877,56891,56904,56918,56922,56926,56933,56944,56955,56966,56978,56990,57002,57006,57010,57018,57028,57041,57053,57066,57070,57074,57081,57091,57103,57115,57126,57137,57147,57159,57171,57175,57179,57188,57200,57212,57240,57253,57257,57261,57268,57279,57283,57291,57299,57303,57311,57325,57340,57364,57372,57387,57400,57408,57429,57441,57453,57465,57477,57489,57501,57513,57522,57530,57538,57546,57558,57581,57600,57619,57638,57657,57676,57695,57715,57719,57739,57758,57778,57799,57810,57827,57837,57847,57857,57862,57867,57872,57877,57902,57915,57919,57942,57946,57954,57962,57970,57974],{"__ignoreMap":57},[79,56706,56707,56709,56711,56713],{"class":81,"line":82},[79,56708,53411],{"class":239},[79,56710,53414],{"class":395},[79,56712,53417],{"class":85},[79,56714,53420],{"class":239},[79,56716,56717,56719,56721,56723,56725,56727],{"class":81,"line":167},[79,56718,392],{"class":239},[79,56720,52749],{"class":395},[79,56722,53429],{"class":85},[79,56724,244],{"class":239},[79,56726,53434],{"class":89},[79,56728,53420],{"class":239},[79,56730,56731],{"class":81,"line":178},[79,56732,454],{"emptyLinePlaceholder":453},[79,56734,56735,56737,56739],{"class":81,"line":457},[79,56736,392],{"class":239},[79,56738,53447],{"class":395},[79,56740,53420],{"class":239},[79,56742,56743,56745,56747,56749,56751,56753],{"class":81,"line":462},[79,56744,54257],{"class":239},[79,56746,53457],{"class":395},[79,56748,53460],{"class":85},[79,56750,244],{"class":239},[79,56752,53465],{"class":89},[79,56754,53420],{"class":239},[79,56756,56757,56759,56761,56763,56765,56767,56769,56771,56773],{"class":81,"line":474},[79,56758,54257],{"class":239},[79,56760,53457],{"class":395},[79,56762,2238],{"class":85},[79,56764,244],{"class":239},[79,56766,53504],{"class":89},[79,56768,53484],{"class":85},[79,56770,244],{"class":239},[79,56772,53511],{"class":89},[79,56774,53420],{"class":239},[79,56776,56777,56779,56781,56783,56785],{"class":81,"line":480},[79,56778,54257],{"class":239},[79,56780,53520],{"class":395},[79,56782,53523],{"class":239},[79,56784,53520],{"class":395},[79,56786,53420],{"class":239},[79,56788,56789,56791,56793],{"class":81,"line":486},[79,56790,54257],{"class":239},[79,56792,2287],{"class":395},[79,56794,53420],{"class":239},[79,56796,56797,56799],{"class":81,"line":491},[79,56798,8598],{"class":395},[79,56800,17732],{"class":239},[79,56802,56803,56806,56808,56810],{"class":81,"line":497},[79,56804,56805],{"class":96},"      padding",[79,56807,53550],{"class":239},[79,56809,1030],{"class":96},[79,56811,3531],{"class":239},[79,56813,56814,56817,56819,56821],{"class":81,"line":503},[79,56815,56816],{"class":96},"      margin",[79,56818,53550],{"class":239},[79,56820,1030],{"class":96},[79,56822,3531],{"class":239},[79,56824,56825],{"class":81,"line":509},[79,56826,4402],{"class":239},[79,56828,56829],{"class":81,"line":514},[79,56830,454],{"emptyLinePlaceholder":453},[79,56832,56833,56836],{"class":81,"line":520},[79,56834,56835],{"class":395},"    li",[79,56837,17732],{"class":239},[79,56839,56840,56843,56845,56848],{"class":81,"line":526},[79,56841,56842],{"class":96},"      list-style",[79,56844,53550],{"class":239},[79,56846,56847],{"class":96},"none",[79,56849,3531],{"class":239},[79,56851,56852],{"class":81,"line":532},[79,56853,4402],{"class":239},[79,56855,56856],{"class":81,"line":537},[79,56857,454],{"emptyLinePlaceholder":453},[79,56859,56860,56863],{"class":81,"line":543},[79,56861,56862],{"class":85},"    .box",[79,56864,17732],{"class":239},[79,56866,56867,56870,56872,56875],{"class":81,"line":549},[79,56868,56869],{"class":96},"      position",[79,56871,53550],{"class":239},[79,56873,56874],{"class":96},"relative",[79,56876,3531],{"class":239},[79,56878,56879,56882,56884,56887,56889],{"class":81,"line":555},[79,56880,56881],{"class":96},"      width",[79,56883,53550],{"class":239},[79,56885,56886],{"class":96},"976",[79,56888,53605],{"class":243},[79,56890,3531],{"class":239},[79,56892,56893,56896,56898,56900,56902],{"class":81,"line":561},[79,56894,56895],{"class":96},"      height",[79,56897,53550],{"class":239},[79,56899,3775],{"class":96},[79,56901,53605],{"class":243},[79,56903,3531],{"class":239},[79,56905,56906,56908,56910,56912,56914,56916],{"class":81,"line":567},[79,56907,56816],{"class":96},[79,56909,53550],{"class":239},[79,56911,2686],{"class":96},[79,56913,53605],{"class":243},[79,56915,53669],{"class":96},[79,56917,3531],{"class":239},[79,56919,56920],{"class":81,"line":573},[79,56921,4402],{"class":239},[79,56923,56924],{"class":81,"line":579},[79,56925,454],{"emptyLinePlaceholder":453},[79,56927,56928,56931],{"class":81,"line":584},[79,56929,56930],{"class":85},"    .slider-footer",[79,56932,17732],{"class":239},[79,56934,56935,56937,56939,56942],{"class":81,"line":590},[79,56936,56869],{"class":96},[79,56938,53550],{"class":239},[79,56940,56941],{"class":96},"absolute",[79,56943,3531],{"class":239},[79,56945,56946,56949,56951,56953],{"class":81,"line":596},[79,56947,56948],{"class":96},"      left",[79,56950,53550],{"class":239},[79,56952,1030],{"class":96},[79,56954,3531],{"class":239},[79,56956,56957,56960,56962,56964],{"class":81,"line":602},[79,56958,56959],{"class":96},"      bottom",[79,56961,53550],{"class":239},[79,56963,1030],{"class":96},[79,56965,3531],{"class":239},[79,56967,56968,56970,56972,56974,56976],{"class":81,"line":608},[79,56969,56881],{"class":96},[79,56971,53550],{"class":239},[79,56973,2686],{"class":96},[79,56975,1137],{"class":243},[79,56977,3531],{"class":239},[79,56979,56980,56982,56984,56986,56988],{"class":81,"line":614},[79,56981,56895],{"class":96},[79,56983,53550],{"class":239},[79,56985,2948],{"class":96},[79,56987,1137],{"class":243},[79,56989,3531],{"class":239},[79,56991,56992,56995,56997,57000],{"class":81,"line":620},[79,56993,56994],{"class":96},"      background-color",[79,56996,53550],{"class":239},[79,56998,56999],{"class":96},"skyblue",[79,57001,3531],{"class":239},[79,57003,57004],{"class":81,"line":625},[79,57005,4402],{"class":239},[79,57007,57008],{"class":81,"line":630},[79,57009,454],{"emptyLinePlaceholder":453},[79,57011,57012,57014,57016],{"class":81,"line":648},[79,57013,56930],{"class":85},[79,57015,9019],{"class":395},[79,57017,17732],{"class":239},[79,57019,57020,57022,57024,57026],{"class":81,"line":659},[79,57021,56869],{"class":96},[79,57023,53550],{"class":239},[79,57025,56941],{"class":96},[79,57027,3531],{"class":239},[79,57029,57030,57033,57035,57037,57039],{"class":81,"line":676},[79,57031,57032],{"class":96},"      font-size",[79,57034,53550],{"class":239},[79,57036,3273],{"class":96},[79,57038,53605],{"class":243},[79,57040,3531],{"class":239},[79,57042,57043,57045,57047,57049,57051],{"class":81,"line":708},[79,57044,56948],{"class":96},[79,57046,53550],{"class":239},[79,57048,3073],{"class":96},[79,57050,53605],{"class":243},[79,57052,3531],{"class":239},[79,57054,57055,57058,57060,57062,57064],{"class":81,"line":717},[79,57056,57057],{"class":96},"      top",[79,57059,53550],{"class":239},[79,57061,2694],{"class":96},[79,57063,53605],{"class":243},[79,57065,3531],{"class":239},[79,57067,57068],{"class":81,"line":722},[79,57069,4402],{"class":239},[79,57071,57072],{"class":81,"line":727},[79,57073,454],{"emptyLinePlaceholder":453},[79,57075,57076,57079],{"class":81,"line":738},[79,57077,57078],{"class":395},"    ul",[79,57080,17732],{"class":239},[79,57082,57083,57085,57087,57089],{"class":81,"line":753},[79,57084,56869],{"class":96},[79,57086,53550],{"class":239},[79,57088,56941],{"class":96},[79,57090,3531],{"class":239},[79,57092,57093,57095,57097,57099,57101],{"class":81,"line":768},[79,57094,57057],{"class":96},[79,57096,53550],{"class":239},[79,57098,3154],{"class":96},[79,57100,53605],{"class":243},[79,57102,3531],{"class":239},[79,57104,57105,57107,57109,57111,57113],{"class":81,"line":776},[79,57106,56948],{"class":96},[79,57108,53550],{"class":239},[79,57110,3073],{"class":96},[79,57112,53605],{"class":243},[79,57114,3531],{"class":239},[79,57116,57117,57120,57122,57124],{"class":81,"line":781},[79,57118,57119],{"class":96},"      display",[79,57121,53550],{"class":239},[79,57123,53590],{"class":96},[79,57125,3531],{"class":239},[79,57127,57128,57131,57133,57135],{"class":81,"line":786},[79,57129,57130],{"class":96},"      justify-content",[79,57132,53550],{"class":239},[79,57134,53781],{"class":96},[79,57136,3531],{"class":239},[79,57138,57139,57141,57143,57145],{"class":81,"line":802},[79,57140,56869],{"class":96},[79,57142,53550],{"class":239},[79,57144,56941],{"class":96},[79,57146,3531],{"class":239},[79,57148,57149,57151,57153,57155,57157],{"class":81,"line":815},[79,57150,56881],{"class":96},[79,57152,53550],{"class":239},[79,57154,6194],{"class":96},[79,57156,53605],{"class":243},[79,57158,3531],{"class":239},[79,57160,57161,57163,57165,57167,57169],{"class":81,"line":828},[79,57162,56895],{"class":96},[79,57164,53550],{"class":239},[79,57166,3073],{"class":96},[79,57168,53605],{"class":243},[79,57170,3531],{"class":239},[79,57172,57173],{"class":81,"line":842},[79,57174,4402],{"class":239},[79,57176,57177],{"class":81,"line":859},[79,57178,454],{"emptyLinePlaceholder":453},[79,57180,57181,57183,57186],{"class":81,"line":878},[79,57182,57078],{"class":395},[79,57184,57185],{"class":395}," li",[79,57187,17732],{"class":239},[79,57189,57190,57192,57194,57196,57198],{"class":81,"line":883},[79,57191,56881],{"class":96},[79,57193,53550],{"class":239},[79,57195,3073],{"class":96},[79,57197,53605],{"class":243},[79,57199,3531],{"class":239},[79,57201,57202,57204,57206,57208,57210],{"class":81,"line":888},[79,57203,56895],{"class":96},[79,57205,53550],{"class":239},[79,57207,3073],{"class":96},[79,57209,53605],{"class":243},[79,57211,3531],{"class":239},[79,57213,57214,57216,57218,57221,57223,57225,57227,57229,57231,57233,57235,57238],{"class":81,"line":904},[79,57215,56994],{"class":96},[79,57217,53550],{"class":239},[79,57219,57220],{"class":96},"rgba",[79,57222,685],{"class":239},[79,57224,1030],{"class":96},[79,57226,1060],{"class":239},[79,57228,1030],{"class":96},[79,57230,1060],{"class":239},[79,57232,1030],{"class":96},[79,57234,1060],{"class":239},[79,57236,57237],{"class":96},".4",[79,57239,4925],{"class":239},[79,57241,57242,57245,57247,57249,57251],{"class":81,"line":919},[79,57243,57244],{"class":96},"      border-radius",[79,57246,53550],{"class":239},[79,57248,2820],{"class":96},[79,57250,53605],{"class":243},[79,57252,3531],{"class":239},[79,57254,57255],{"class":81,"line":930},[79,57256,4402],{"class":239},[79,57258,57259],{"class":81,"line":941},[79,57260,454],{"emptyLinePlaceholder":453},[79,57262,57263,57266],{"class":81,"line":946},[79,57264,57265],{"class":85},"    .activate",[79,57267,17732],{"class":239},[79,57269,57270,57272,57274,57277],{"class":81,"line":969},[79,57271,56994],{"class":96},[79,57273,53550],{"class":239},[79,57275,57276],{"class":96},"#f7f7f7",[79,57278,3531],{"class":239},[79,57280,57281],{"class":81,"line":975},[79,57282,4402],{"class":239},[79,57284,57285,57287,57289],{"class":81,"line":989},[79,57286,54529],{"class":239},[79,57288,2287],{"class":395},[79,57290,53420],{"class":239},[79,57292,57293,57295,57297],{"class":81,"line":1003},[79,57294,53898],{"class":239},[79,57296,53447],{"class":395},[79,57298,53420],{"class":239},[79,57300,57301],{"class":81,"line":1019},[79,57302,454],{"emptyLinePlaceholder":453},[79,57304,57305,57307,57309],{"class":81,"line":1024},[79,57306,392],{"class":239},[79,57308,53913],{"class":395},[79,57310,53420],{"class":239},[79,57312,57313,57315,57317,57319,57321,57323],{"class":81,"line":1067},[79,57314,54257],{"class":239},[79,57316,53724],{"class":395},[79,57318,55596],{"class":85},[79,57320,244],{"class":239},[79,57322,55601],{"class":89},[79,57324,53420],{"class":239},[79,57326,57327,57329,57331,57333,57335,57338],{"class":81,"line":1101},[79,57328,53454],{"class":239},[79,57330,53724],{"class":395},[79,57332,55596],{"class":85},[79,57334,244],{"class":239},[79,57336,57337],{"class":89},"\"slider-wrapper\"",[79,57339,53420],{"class":239},[79,57341,57342,57345,57347,57350,57352,57355,57358,57360,57362],{"class":81,"line":1106},[79,57343,57344],{"class":239},"      \u003C",[79,57346,3699],{"class":395},[79,57348,57349],{"class":85}," src",[79,57351,244],{"class":239},[79,57353,57354],{"class":89},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[79,57356,57357],{"class":85}," alt",[79,57359,244],{"class":239},[79,57361,9846],{"class":89},[79,57363,53420],{"class":239},[79,57365,57366,57368,57370],{"class":81,"line":1112},[79,57367,53889],{"class":239},[79,57369,53724],{"class":395},[79,57371,53420],{"class":239},[79,57373,57374,57376,57378,57380,57382,57385],{"class":81,"line":1124},[79,57375,53454],{"class":239},[79,57377,53724],{"class":395},[79,57379,55596],{"class":85},[79,57381,244],{"class":239},[79,57383,57384],{"class":89},"\"slider-footer\"",[79,57386,53420],{"class":239},[79,57388,57389,57391,57393,57396,57398],{"class":81,"line":1129},[79,57390,57344],{"class":239},[79,57392,19],{"class":395},[79,57394,57395],{"class":239},">对人类来说会不会太超前了?\u003C\u002F",[79,57397,19],{"class":395},[79,57399,53420],{"class":239},[79,57401,57402,57404,57406],{"class":81,"line":1150},[79,57403,57344],{"class":239},[79,57405,3377],{"class":395},[79,57407,53420],{"class":239},[79,57409,57410,57413,57415,57417,57419,57422,57425,57427],{"class":81,"line":1161},[79,57411,57412],{"class":239},"        \u003C",[79,57414,29],{"class":395},[79,57416,55596],{"class":85},[79,57418,244],{"class":239},[79,57420,57421],{"class":89},"\"activate\"",[79,57423,57424],{"class":239},">\u003C\u002F",[79,57426,29],{"class":395},[79,57428,53420],{"class":239},[79,57430,57431,57433,57435,57437,57439],{"class":81,"line":1175},[79,57432,57412],{"class":239},[79,57434,29],{"class":395},[79,57436,57424],{"class":239},[79,57438,29],{"class":395},[79,57440,53420],{"class":239},[79,57442,57443,57445,57447,57449,57451],{"class":81,"line":1194},[79,57444,57412],{"class":239},[79,57446,29],{"class":395},[79,57448,57424],{"class":239},[79,57450,29],{"class":395},[79,57452,53420],{"class":239},[79,57454,57455,57457,57459,57461,57463],{"class":81,"line":1211},[79,57456,57412],{"class":239},[79,57458,29],{"class":395},[79,57460,57424],{"class":239},[79,57462,29],{"class":395},[79,57464,53420],{"class":239},[79,57466,57467,57469,57471,57473,57475],{"class":81,"line":1228},[79,57468,57412],{"class":239},[79,57470,29],{"class":395},[79,57472,57424],{"class":239},[79,57474,29],{"class":395},[79,57476,53420],{"class":239},[79,57478,57479,57481,57483,57485,57487],{"class":81,"line":1246},[79,57480,57412],{"class":239},[79,57482,29],{"class":395},[79,57484,57424],{"class":239},[79,57486,29],{"class":395},[79,57488,53420],{"class":239},[79,57490,57491,57493,57495,57497,57499],{"class":81,"line":1251},[79,57492,57412],{"class":239},[79,57494,29],{"class":395},[79,57496,57424],{"class":239},[79,57498,29],{"class":395},[79,57500,53420],{"class":239},[79,57502,57503,57505,57507,57509,57511],{"class":81,"line":1274},[79,57504,57412],{"class":239},[79,57506,29],{"class":395},[79,57508,57424],{"class":239},[79,57510,29],{"class":395},[79,57512,53420],{"class":239},[79,57514,57515,57518,57520],{"class":81,"line":1296},[79,57516,57517],{"class":239},"      \u003C\u002F",[79,57519,3377],{"class":395},[79,57521,53420],{"class":239},[79,57523,57524,57526,57528],{"class":81,"line":1316},[79,57525,53889],{"class":239},[79,57527,53724],{"class":395},[79,57529,53420],{"class":239},[79,57531,57532,57534,57536],{"class":81,"line":1321},[79,57533,54529],{"class":239},[79,57535,53724],{"class":395},[79,57537,53420],{"class":239},[79,57539,57540,57542,57544],{"class":81,"line":1326},[79,57541,54257],{"class":239},[79,57543,53926],{"class":395},[79,57545,53420],{"class":239},[79,57547,57548,57550,57553,57555],{"class":81,"line":1342},[79,57549,13385],{"class":243},[79,57551,57552],{"class":96}," arrImage",[79,57554,468],{"class":243},[79,57556,57557],{"class":239}," [\n",[79,57559,57560,57563,57566,57569,57572,57575,57578],{"class":81,"line":18985},[79,57561,57562],{"class":239},"      { url: ",[79,57564,57565],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[79,57567,57568],{"class":239},", title: ",[79,57570,57571],{"class":89},"'对人类来说会不会太超前了?'",[79,57573,57574],{"class":239},", color: ",[79,57576,57577],{"class":89},"'rgba(100,67,68)'",[79,57579,57580],{"class":239}," },\n",[79,57582,57583,57585,57588,57590,57593,57595,57598],{"class":81,"line":18990},[79,57584,57562],{"class":239},[79,57586,57587],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[79,57589,57568],{"class":239},[79,57591,57592],{"class":89},"'开启剑与雪的黑暗传说!'",[79,57594,57574],{"class":239},[79,57596,57597],{"class":89},"'rgba(43,35,26)'",[79,57599,57580],{"class":239},[79,57601,57602,57604,57607,57609,57612,57614,57617],{"class":81,"line":18995},[79,57603,57562],{"class":239},[79,57605,57606],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[79,57608,57568],{"class":239},[79,57610,57611],{"class":89},"'真正的jo厨出现了!'",[79,57613,57574],{"class":239},[79,57615,57616],{"class":89},"'rgba(36,31,33)'",[79,57618,57580],{"class":239},[79,57620,57621,57623,57626,57628,57631,57633,57636],{"class":81,"line":19009},[79,57622,57562],{"class":239},[79,57624,57625],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[79,57627,57568],{"class":239},[79,57629,57630],{"class":89},"'李玉刚:让世界通过b站看到东方大国文化'",[79,57632,57574],{"class":239},[79,57634,57635],{"class":89},"'rgba(139,98,66)'",[79,57637,57580],{"class":239},[79,57639,57640,57642,57645,57647,57650,57652,57655],{"class":81,"line":19021},[79,57641,57562],{"class":239},[79,57643,57644],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[79,57646,57568],{"class":239},[79,57648,57649],{"class":89},"'快来分享你的寒假日常吧'",[79,57651,57574],{"class":239},[79,57653,57654],{"class":89},"'rgba(67,90,92)'",[79,57656,57580],{"class":239},[79,57658,57659,57661,57664,57666,57669,57671,57674],{"class":81,"line":19026},[79,57660,57562],{"class":239},[79,57662,57663],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[79,57665,57568],{"class":239},[79,57667,57668],{"class":89},"'哔哩哔哩小年YEAR'",[79,57670,57574],{"class":239},[79,57672,57673],{"class":89},"'rgba(166,131,143)'",[79,57675,57580],{"class":239},[79,57677,57678,57680,57683,57685,57688,57690,57693],{"class":81,"line":19039},[79,57679,57562],{"class":239},[79,57681,57682],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[79,57684,57568],{"class":239},[79,57686,57687],{"class":89},"'一站式解决你的电脑配置问题'",[79,57689,57574],{"class":239},[79,57691,57692],{"class":89},"'rgba(53,29,25)'",[79,57694,57580],{"class":239},[79,57696,57697,57699,57702,57704,57707,57709,57712],{"class":81,"line":19044},[79,57698,57562],{"class":239},[79,57700,57701],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[79,57703,57568],{"class":239},[79,57705,57706],{"class":89},"'谁不想和小猫咪贴贴呢?'",[79,57708,57574],{"class":239},[79,57710,57711],{"class":89},"'rgba(99,72,114)'",[79,57713,57714],{"class":239}," }\n",[79,57716,57717],{"class":81,"line":19049},[79,57718,55219],{"class":239},[79,57720,57721,57723,57726,57728,57730,57732,57734,57737],{"class":81,"line":19054},[79,57722,13385],{"class":243},[79,57724,57725],{"class":96}," img",[79,57727,468],{"class":243},[79,57729,56506],{"class":239},[79,57731,56509],{"class":85},[79,57733,685],{"class":239},[79,57735,57736],{"class":89},"'.slider-wrapper img'",[79,57738,253],{"class":239},[79,57740,57741,57743,57745,57747,57749,57751,57753,57756],{"class":81,"line":19067},[79,57742,13385],{"class":243},[79,57744,9019],{"class":96},[79,57746,468],{"class":243},[79,57748,56506],{"class":239},[79,57750,56509],{"class":85},[79,57752,685],{"class":239},[79,57754,57755],{"class":89},"'.slider-footer p'",[79,57757,253],{"class":239},[79,57759,57760,57762,57765,57767,57769,57771,57773,57776],{"class":81,"line":19072},[79,57761,13385],{"class":243},[79,57763,57764],{"class":96}," color",[79,57766,468],{"class":243},[79,57768,56506],{"class":239},[79,57770,56509],{"class":85},[79,57772,685],{"class":239},[79,57774,57775],{"class":89},"'.slider-footer'",[79,57777,253],{"class":239},[79,57779,57780,57782,57785,57787,57789,57792,57794,57797],{"class":81,"line":34748},[79,57781,13385],{"class":243},[79,57783,57784],{"class":96}," lis",[79,57786,468],{"class":243},[79,57788,56506],{"class":239},[79,57790,57791],{"class":85},"querySelectorAll",[79,57793,685],{"class":239},[79,57795,57796],{"class":89},"'.slider-footer ul li'",[79,57798,253],{"class":239},[79,57800,57801,57803,57805,57807],{"class":81,"line":34754},[79,57802,54332],{"class":243},[79,57804,11622],{"class":239},[79,57806,244],{"class":243},[79,57808,57809],{"class":96}," 1\n",[79,57811,57812,57814,57817,57819,57821,57823,57825],{"class":81,"line":34760},[79,57813,54332],{"class":243},[79,57815,57816],{"class":239}," timer ",[79,57818,244],{"class":243},[79,57820,56554],{"class":85},[79,57822,685],{"class":239},[79,57824,56559],{"class":243},[79,57826,56562],{"class":239},[79,57828,57829,57832,57834],{"class":81,"line":34766},[79,57830,57831],{"class":239},"      img.src ",[79,57833,244],{"class":243},[79,57835,57836],{"class":239}," arrImage[i].url\n",[79,57838,57839,57842,57844],{"class":81,"line":34772},[79,57840,57841],{"class":239},"      p.innerHTML ",[79,57843,244],{"class":243},[79,57845,57846],{"class":239}," arrImage[i].title\n",[79,57848,57849,57852,57854],{"class":81,"line":34783},[79,57850,57851],{"class":239},"      color.style.backgroundColor ",[79,57853,244],{"class":243},[79,57855,57856],{"class":239}," arrImage[i].color\n",[79,57858,57859],{"class":81,"line":34789},[79,57860,57861],{"class":2440},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[79,57863,57864],{"class":81,"line":34809},[79,57865,57866],{"class":2440},"      \u002F\u002F li.classList.add('activate')\n",[79,57868,57869],{"class":81,"line":34815},[79,57870,57871],{"class":2440},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[79,57873,57874],{"class":81,"line":34826},[79,57875,57876],{"class":2440},"      \u002F\u002F lis[i].classList.remove('activate')\n",[79,57878,57879,57882,57884,57886,57889,57892,57895,57897,57900],{"class":81,"line":34832},[79,57880,57881],{"class":239},"      document.",[79,57883,56509],{"class":85},[79,57885,685],{"class":239},[79,57887,57888],{"class":89},"'.activate'",[79,57890,57891],{"class":239},")?.classList.",[79,57893,57894],{"class":85},"toggle",[79,57896,685],{"class":239},[79,57898,57899],{"class":89},"'activate'",[79,57901,253],{"class":239},[79,57903,57904,57907,57909,57911,57913],{"class":81,"line":34838},[79,57905,57906],{"class":239},"      lis[i].classList.",[79,57908,7530],{"class":85},[79,57910,685],{"class":239},[79,57912,57899],{"class":89},[79,57914,253],{"class":239},[79,57916,57917],{"class":81,"line":34844},[79,57918,454],{"emptyLinePlaceholder":453},[79,57920,57921,57924,57926,57928,57930,57932,57934,57936,57939],{"class":81,"line":34850},[79,57922,57923],{"class":239},"      i ",[79,57925,244],{"class":243},[79,57927,56593],{"class":239},[79,57929,2855],{"class":243},[79,57931,27253],{"class":96},[79,57933,15876],{"class":239},[79,57935,1137],{"class":243},[79,57937,57938],{"class":239}," arrImage.",[79,57940,57941],{"class":96},"length\n",[79,57943,57944],{"class":81,"line":34856},[79,57945,454],{"emptyLinePlaceholder":453},[79,57947,57948,57950,57952],{"class":81,"line":34862},[79,57949,56645],{"class":239},[79,57951,8605],{"class":96},[79,57953,253],{"class":239},[79,57955,57956,57958,57960],{"class":81,"line":34868},[79,57957,54529],{"class":239},[79,57959,53926],{"class":395},[79,57961,53420],{"class":239},[79,57963,57964,57966,57968],{"class":81,"line":34888},[79,57965,53898],{"class":239},[79,57967,53913],{"class":395},[79,57969,53420],{"class":239},[79,57971,57972],{"class":81,"line":34894},[79,57973,454],{"emptyLinePlaceholder":453},[79,57975,57976,57978,57980],{"class":81,"line":34910},[79,57977,53898],{"class":239},[79,57979,52749],{"class":395},[79,57981,53420],{"class":239},[19,57983,57984],{},[3699,57985],{"alt":57,"src":57986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57988,57989],{},"?.就是短路保护,确保输出正常进行",[19,57991,57992],{},"不要忘记取余%,有时候可以用",[19,57994,57995],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[26,57997,57998],{"start":167},[29,57999,58000],{},"法2",[51,58002,58004],{"className":52747,"code":58003,"language":52749,"meta":57,"style":57},"\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",[59,58005,58006,58016,58030,58034,58042,58056,58076,58088,58096,58102,58112,58122,58126,58130,58136,58146,58150,58154,58160,58170,58182,58194,58208,58212,58216,58222,58232,58242,58252,58264,58276,58286,58290,58294,58302,58312,58324,58336,58348,58352,58356,58362,58372,58384,58396,58406,58416,58426,58438,58450,58454,58458,58466,58478,58490,58516,58528,58532,58536,58542,58552,58556,58564,58572,58576,58584,58598,58612,58632,58640,58654,58666,58674,58692,58704,58716,58728,58740,58752,58764,58776,58784,58792,58800,58808,58819,58835,58851,58867,58883,58899,58915,58931,58947,58951,58956,58974,58992,59002,59007,59012,59023,59029,59044,59053,59057,59062,59071,59076,59085,59090,59095,59100,59123,59153,59157,59165,59169,59177,59185,59189],{"__ignoreMap":57},[79,58007,58008,58010,58012,58014],{"class":81,"line":82},[79,58009,53411],{"class":239},[79,58011,53414],{"class":395},[79,58013,53417],{"class":85},[79,58015,53420],{"class":239},[79,58017,58018,58020,58022,58024,58026,58028],{"class":81,"line":167},[79,58019,392],{"class":239},[79,58021,52749],{"class":395},[79,58023,53429],{"class":85},[79,58025,244],{"class":239},[79,58027,53434],{"class":89},[79,58029,53420],{"class":239},[79,58031,58032],{"class":81,"line":178},[79,58033,454],{"emptyLinePlaceholder":453},[79,58035,58036,58038,58040],{"class":81,"line":457},[79,58037,392],{"class":239},[79,58039,53447],{"class":395},[79,58041,53420],{"class":239},[79,58043,58044,58046,58048,58050,58052,58054],{"class":81,"line":462},[79,58045,54257],{"class":239},[79,58047,53457],{"class":395},[79,58049,53460],{"class":85},[79,58051,244],{"class":239},[79,58053,53465],{"class":89},[79,58055,53420],{"class":239},[79,58057,58058,58060,58062,58064,58066,58068,58070,58072,58074],{"class":81,"line":474},[79,58059,54257],{"class":239},[79,58061,53457],{"class":395},[79,58063,2238],{"class":85},[79,58065,244],{"class":239},[79,58067,53504],{"class":89},[79,58069,53484],{"class":85},[79,58071,244],{"class":239},[79,58073,53511],{"class":89},[79,58075,53420],{"class":239},[79,58077,58078,58080,58082,58084,58086],{"class":81,"line":480},[79,58079,54257],{"class":239},[79,58081,53520],{"class":395},[79,58083,53523],{"class":239},[79,58085,53520],{"class":395},[79,58087,53420],{"class":239},[79,58089,58090,58092,58094],{"class":81,"line":486},[79,58091,54257],{"class":239},[79,58093,2287],{"class":395},[79,58095,53420],{"class":239},[79,58097,58098,58100],{"class":81,"line":491},[79,58099,8598],{"class":395},[79,58101,17732],{"class":239},[79,58103,58104,58106,58108,58110],{"class":81,"line":497},[79,58105,56805],{"class":96},[79,58107,53550],{"class":239},[79,58109,1030],{"class":96},[79,58111,3531],{"class":239},[79,58113,58114,58116,58118,58120],{"class":81,"line":503},[79,58115,56816],{"class":96},[79,58117,53550],{"class":239},[79,58119,1030],{"class":96},[79,58121,3531],{"class":239},[79,58123,58124],{"class":81,"line":509},[79,58125,4402],{"class":239},[79,58127,58128],{"class":81,"line":514},[79,58129,454],{"emptyLinePlaceholder":453},[79,58131,58132,58134],{"class":81,"line":520},[79,58133,56835],{"class":395},[79,58135,17732],{"class":239},[79,58137,58138,58140,58142,58144],{"class":81,"line":526},[79,58139,56842],{"class":96},[79,58141,53550],{"class":239},[79,58143,56847],{"class":96},[79,58145,3531],{"class":239},[79,58147,58148],{"class":81,"line":532},[79,58149,4402],{"class":239},[79,58151,58152],{"class":81,"line":537},[79,58153,454],{"emptyLinePlaceholder":453},[79,58155,58156,58158],{"class":81,"line":543},[79,58157,56862],{"class":85},[79,58159,17732],{"class":239},[79,58161,58162,58164,58166,58168],{"class":81,"line":549},[79,58163,56869],{"class":96},[79,58165,53550],{"class":239},[79,58167,56874],{"class":96},[79,58169,3531],{"class":239},[79,58171,58172,58174,58176,58178,58180],{"class":81,"line":555},[79,58173,56881],{"class":96},[79,58175,53550],{"class":239},[79,58177,56886],{"class":96},[79,58179,53605],{"class":243},[79,58181,3531],{"class":239},[79,58183,58184,58186,58188,58190,58192],{"class":81,"line":561},[79,58185,56895],{"class":96},[79,58187,53550],{"class":239},[79,58189,3775],{"class":96},[79,58191,53605],{"class":243},[79,58193,3531],{"class":239},[79,58195,58196,58198,58200,58202,58204,58206],{"class":81,"line":567},[79,58197,56816],{"class":96},[79,58199,53550],{"class":239},[79,58201,2686],{"class":96},[79,58203,53605],{"class":243},[79,58205,53669],{"class":96},[79,58207,3531],{"class":239},[79,58209,58210],{"class":81,"line":573},[79,58211,4402],{"class":239},[79,58213,58214],{"class":81,"line":579},[79,58215,454],{"emptyLinePlaceholder":453},[79,58217,58218,58220],{"class":81,"line":584},[79,58219,56930],{"class":85},[79,58221,17732],{"class":239},[79,58223,58224,58226,58228,58230],{"class":81,"line":590},[79,58225,56869],{"class":96},[79,58227,53550],{"class":239},[79,58229,56941],{"class":96},[79,58231,3531],{"class":239},[79,58233,58234,58236,58238,58240],{"class":81,"line":596},[79,58235,56948],{"class":96},[79,58237,53550],{"class":239},[79,58239,1030],{"class":96},[79,58241,3531],{"class":239},[79,58243,58244,58246,58248,58250],{"class":81,"line":602},[79,58245,56959],{"class":96},[79,58247,53550],{"class":239},[79,58249,1030],{"class":96},[79,58251,3531],{"class":239},[79,58253,58254,58256,58258,58260,58262],{"class":81,"line":608},[79,58255,56881],{"class":96},[79,58257,53550],{"class":239},[79,58259,2686],{"class":96},[79,58261,1137],{"class":243},[79,58263,3531],{"class":239},[79,58265,58266,58268,58270,58272,58274],{"class":81,"line":614},[79,58267,56895],{"class":96},[79,58269,53550],{"class":239},[79,58271,2948],{"class":96},[79,58273,1137],{"class":243},[79,58275,3531],{"class":239},[79,58277,58278,58280,58282,58284],{"class":81,"line":620},[79,58279,56994],{"class":96},[79,58281,53550],{"class":239},[79,58283,56999],{"class":96},[79,58285,3531],{"class":239},[79,58287,58288],{"class":81,"line":625},[79,58289,4402],{"class":239},[79,58291,58292],{"class":81,"line":630},[79,58293,454],{"emptyLinePlaceholder":453},[79,58295,58296,58298,58300],{"class":81,"line":648},[79,58297,56930],{"class":85},[79,58299,9019],{"class":395},[79,58301,17732],{"class":239},[79,58303,58304,58306,58308,58310],{"class":81,"line":659},[79,58305,56869],{"class":96},[79,58307,53550],{"class":239},[79,58309,56941],{"class":96},[79,58311,3531],{"class":239},[79,58313,58314,58316,58318,58320,58322],{"class":81,"line":676},[79,58315,57032],{"class":96},[79,58317,53550],{"class":239},[79,58319,3273],{"class":96},[79,58321,53605],{"class":243},[79,58323,3531],{"class":239},[79,58325,58326,58328,58330,58332,58334],{"class":81,"line":708},[79,58327,56948],{"class":96},[79,58329,53550],{"class":239},[79,58331,3073],{"class":96},[79,58333,53605],{"class":243},[79,58335,3531],{"class":239},[79,58337,58338,58340,58342,58344,58346],{"class":81,"line":717},[79,58339,57057],{"class":96},[79,58341,53550],{"class":239},[79,58343,2694],{"class":96},[79,58345,53605],{"class":243},[79,58347,3531],{"class":239},[79,58349,58350],{"class":81,"line":722},[79,58351,4402],{"class":239},[79,58353,58354],{"class":81,"line":727},[79,58355,454],{"emptyLinePlaceholder":453},[79,58357,58358,58360],{"class":81,"line":738},[79,58359,57078],{"class":395},[79,58361,17732],{"class":239},[79,58363,58364,58366,58368,58370],{"class":81,"line":753},[79,58365,56869],{"class":96},[79,58367,53550],{"class":239},[79,58369,56941],{"class":96},[79,58371,3531],{"class":239},[79,58373,58374,58376,58378,58380,58382],{"class":81,"line":768},[79,58375,57057],{"class":96},[79,58377,53550],{"class":239},[79,58379,3154],{"class":96},[79,58381,53605],{"class":243},[79,58383,3531],{"class":239},[79,58385,58386,58388,58390,58392,58394],{"class":81,"line":776},[79,58387,56948],{"class":96},[79,58389,53550],{"class":239},[79,58391,3073],{"class":96},[79,58393,53605],{"class":243},[79,58395,3531],{"class":239},[79,58397,58398,58400,58402,58404],{"class":81,"line":781},[79,58399,57119],{"class":96},[79,58401,53550],{"class":239},[79,58403,53590],{"class":96},[79,58405,3531],{"class":239},[79,58407,58408,58410,58412,58414],{"class":81,"line":786},[79,58409,57130],{"class":96},[79,58411,53550],{"class":239},[79,58413,53781],{"class":96},[79,58415,3531],{"class":239},[79,58417,58418,58420,58422,58424],{"class":81,"line":802},[79,58419,56869],{"class":96},[79,58421,53550],{"class":239},[79,58423,56941],{"class":96},[79,58425,3531],{"class":239},[79,58427,58428,58430,58432,58434,58436],{"class":81,"line":815},[79,58429,56881],{"class":96},[79,58431,53550],{"class":239},[79,58433,6194],{"class":96},[79,58435,53605],{"class":243},[79,58437,3531],{"class":239},[79,58439,58440,58442,58444,58446,58448],{"class":81,"line":828},[79,58441,56895],{"class":96},[79,58443,53550],{"class":239},[79,58445,3073],{"class":96},[79,58447,53605],{"class":243},[79,58449,3531],{"class":239},[79,58451,58452],{"class":81,"line":842},[79,58453,4402],{"class":239},[79,58455,58456],{"class":81,"line":859},[79,58457,454],{"emptyLinePlaceholder":453},[79,58459,58460,58462,58464],{"class":81,"line":878},[79,58461,57078],{"class":395},[79,58463,57185],{"class":395},[79,58465,17732],{"class":239},[79,58467,58468,58470,58472,58474,58476],{"class":81,"line":883},[79,58469,56881],{"class":96},[79,58471,53550],{"class":239},[79,58473,3073],{"class":96},[79,58475,53605],{"class":243},[79,58477,3531],{"class":239},[79,58479,58480,58482,58484,58486,58488],{"class":81,"line":888},[79,58481,56895],{"class":96},[79,58483,53550],{"class":239},[79,58485,3073],{"class":96},[79,58487,53605],{"class":243},[79,58489,3531],{"class":239},[79,58491,58492,58494,58496,58498,58500,58502,58504,58506,58508,58510,58512,58514],{"class":81,"line":904},[79,58493,56994],{"class":96},[79,58495,53550],{"class":239},[79,58497,57220],{"class":96},[79,58499,685],{"class":239},[79,58501,1030],{"class":96},[79,58503,1060],{"class":239},[79,58505,1030],{"class":96},[79,58507,1060],{"class":239},[79,58509,1030],{"class":96},[79,58511,1060],{"class":239},[79,58513,57237],{"class":96},[79,58515,4925],{"class":239},[79,58517,58518,58520,58522,58524,58526],{"class":81,"line":919},[79,58519,57244],{"class":96},[79,58521,53550],{"class":239},[79,58523,2820],{"class":96},[79,58525,53605],{"class":243},[79,58527,3531],{"class":239},[79,58529,58530],{"class":81,"line":930},[79,58531,4402],{"class":239},[79,58533,58534],{"class":81,"line":941},[79,58535,454],{"emptyLinePlaceholder":453},[79,58537,58538,58540],{"class":81,"line":946},[79,58539,57265],{"class":85},[79,58541,17732],{"class":239},[79,58543,58544,58546,58548,58550],{"class":81,"line":969},[79,58545,56994],{"class":96},[79,58547,53550],{"class":239},[79,58549,57276],{"class":96},[79,58551,3531],{"class":239},[79,58553,58554],{"class":81,"line":975},[79,58555,4402],{"class":239},[79,58557,58558,58560,58562],{"class":81,"line":989},[79,58559,54529],{"class":239},[79,58561,2287],{"class":395},[79,58563,53420],{"class":239},[79,58565,58566,58568,58570],{"class":81,"line":1003},[79,58567,53898],{"class":239},[79,58569,53447],{"class":395},[79,58571,53420],{"class":239},[79,58573,58574],{"class":81,"line":1019},[79,58575,454],{"emptyLinePlaceholder":453},[79,58577,58578,58580,58582],{"class":81,"line":1024},[79,58579,392],{"class":239},[79,58581,53913],{"class":395},[79,58583,53420],{"class":239},[79,58585,58586,58588,58590,58592,58594,58596],{"class":81,"line":1067},[79,58587,54257],{"class":239},[79,58589,53724],{"class":395},[79,58591,55596],{"class":85},[79,58593,244],{"class":239},[79,58595,55601],{"class":89},[79,58597,53420],{"class":239},[79,58599,58600,58602,58604,58606,58608,58610],{"class":81,"line":1101},[79,58601,53454],{"class":239},[79,58603,53724],{"class":395},[79,58605,55596],{"class":85},[79,58607,244],{"class":239},[79,58609,57337],{"class":89},[79,58611,53420],{"class":239},[79,58613,58614,58616,58618,58620,58622,58624,58626,58628,58630],{"class":81,"line":1106},[79,58615,57344],{"class":239},[79,58617,3699],{"class":395},[79,58619,57349],{"class":85},[79,58621,244],{"class":239},[79,58623,57354],{"class":89},[79,58625,57357],{"class":85},[79,58627,244],{"class":239},[79,58629,9846],{"class":89},[79,58631,53420],{"class":239},[79,58633,58634,58636,58638],{"class":81,"line":1112},[79,58635,53889],{"class":239},[79,58637,53724],{"class":395},[79,58639,53420],{"class":239},[79,58641,58642,58644,58646,58648,58650,58652],{"class":81,"line":1124},[79,58643,53454],{"class":239},[79,58645,53724],{"class":395},[79,58647,55596],{"class":85},[79,58649,244],{"class":239},[79,58651,57384],{"class":89},[79,58653,53420],{"class":239},[79,58655,58656,58658,58660,58662,58664],{"class":81,"line":1129},[79,58657,57344],{"class":239},[79,58659,19],{"class":395},[79,58661,57395],{"class":239},[79,58663,19],{"class":395},[79,58665,53420],{"class":239},[79,58667,58668,58670,58672],{"class":81,"line":1150},[79,58669,57344],{"class":239},[79,58671,3377],{"class":395},[79,58673,53420],{"class":239},[79,58675,58676,58678,58680,58682,58684,58686,58688,58690],{"class":81,"line":1161},[79,58677,57412],{"class":239},[79,58679,29],{"class":395},[79,58681,55596],{"class":85},[79,58683,244],{"class":239},[79,58685,57421],{"class":89},[79,58687,57424],{"class":239},[79,58689,29],{"class":395},[79,58691,53420],{"class":239},[79,58693,58694,58696,58698,58700,58702],{"class":81,"line":1175},[79,58695,57412],{"class":239},[79,58697,29],{"class":395},[79,58699,57424],{"class":239},[79,58701,29],{"class":395},[79,58703,53420],{"class":239},[79,58705,58706,58708,58710,58712,58714],{"class":81,"line":1194},[79,58707,57412],{"class":239},[79,58709,29],{"class":395},[79,58711,57424],{"class":239},[79,58713,29],{"class":395},[79,58715,53420],{"class":239},[79,58717,58718,58720,58722,58724,58726],{"class":81,"line":1211},[79,58719,57412],{"class":239},[79,58721,29],{"class":395},[79,58723,57424],{"class":239},[79,58725,29],{"class":395},[79,58727,53420],{"class":239},[79,58729,58730,58732,58734,58736,58738],{"class":81,"line":1228},[79,58731,57412],{"class":239},[79,58733,29],{"class":395},[79,58735,57424],{"class":239},[79,58737,29],{"class":395},[79,58739,53420],{"class":239},[79,58741,58742,58744,58746,58748,58750],{"class":81,"line":1246},[79,58743,57412],{"class":239},[79,58745,29],{"class":395},[79,58747,57424],{"class":239},[79,58749,29],{"class":395},[79,58751,53420],{"class":239},[79,58753,58754,58756,58758,58760,58762],{"class":81,"line":1251},[79,58755,57412],{"class":239},[79,58757,29],{"class":395},[79,58759,57424],{"class":239},[79,58761,29],{"class":395},[79,58763,53420],{"class":239},[79,58765,58766,58768,58770,58772,58774],{"class":81,"line":1274},[79,58767,57412],{"class":239},[79,58769,29],{"class":395},[79,58771,57424],{"class":239},[79,58773,29],{"class":395},[79,58775,53420],{"class":239},[79,58777,58778,58780,58782],{"class":81,"line":1296},[79,58779,57517],{"class":239},[79,58781,3377],{"class":395},[79,58783,53420],{"class":239},[79,58785,58786,58788,58790],{"class":81,"line":1316},[79,58787,53889],{"class":239},[79,58789,53724],{"class":395},[79,58791,53420],{"class":239},[79,58793,58794,58796,58798],{"class":81,"line":1321},[79,58795,54529],{"class":239},[79,58797,53724],{"class":395},[79,58799,53420],{"class":239},[79,58801,58802,58804,58806],{"class":81,"line":1326},[79,58803,54257],{"class":239},[79,58805,53926],{"class":395},[79,58807,53420],{"class":239},[79,58809,58810,58812,58815,58817],{"class":81,"line":1342},[79,58811,13385],{"class":243},[79,58813,58814],{"class":96}," sliderData",[79,58816,468],{"class":243},[79,58818,57557],{"class":239},[79,58820,58821,58823,58825,58827,58829,58831,58833],{"class":81,"line":18985},[79,58822,57562],{"class":239},[79,58824,57565],{"class":89},[79,58826,57568],{"class":239},[79,58828,57571],{"class":89},[79,58830,57574],{"class":239},[79,58832,57577],{"class":89},[79,58834,57580],{"class":239},[79,58836,58837,58839,58841,58843,58845,58847,58849],{"class":81,"line":18990},[79,58838,57562],{"class":239},[79,58840,57587],{"class":89},[79,58842,57568],{"class":239},[79,58844,57592],{"class":89},[79,58846,57574],{"class":239},[79,58848,57597],{"class":89},[79,58850,57580],{"class":239},[79,58852,58853,58855,58857,58859,58861,58863,58865],{"class":81,"line":18995},[79,58854,57562],{"class":239},[79,58856,57606],{"class":89},[79,58858,57568],{"class":239},[79,58860,57611],{"class":89},[79,58862,57574],{"class":239},[79,58864,57616],{"class":89},[79,58866,57580],{"class":239},[79,58868,58869,58871,58873,58875,58877,58879,58881],{"class":81,"line":19009},[79,58870,57562],{"class":239},[79,58872,57625],{"class":89},[79,58874,57568],{"class":239},[79,58876,57630],{"class":89},[79,58878,57574],{"class":239},[79,58880,57635],{"class":89},[79,58882,57580],{"class":239},[79,58884,58885,58887,58889,58891,58893,58895,58897],{"class":81,"line":19021},[79,58886,57562],{"class":239},[79,58888,57644],{"class":89},[79,58890,57568],{"class":239},[79,58892,57649],{"class":89},[79,58894,57574],{"class":239},[79,58896,57654],{"class":89},[79,58898,57580],{"class":239},[79,58900,58901,58903,58905,58907,58909,58911,58913],{"class":81,"line":19026},[79,58902,57562],{"class":239},[79,58904,57663],{"class":89},[79,58906,57568],{"class":239},[79,58908,57668],{"class":89},[79,58910,57574],{"class":239},[79,58912,57673],{"class":89},[79,58914,57580],{"class":239},[79,58916,58917,58919,58921,58923,58925,58927,58929],{"class":81,"line":19039},[79,58918,57562],{"class":239},[79,58920,57682],{"class":89},[79,58922,57568],{"class":239},[79,58924,57687],{"class":89},[79,58926,57574],{"class":239},[79,58928,57692],{"class":89},[79,58930,57580],{"class":239},[79,58932,58933,58935,58937,58939,58941,58943,58945],{"class":81,"line":19044},[79,58934,57562],{"class":239},[79,58936,57701],{"class":89},[79,58938,57568],{"class":239},[79,58940,57706],{"class":89},[79,58942,57574],{"class":239},[79,58944,57711],{"class":89},[79,58946,57714],{"class":239},[79,58948,58949],{"class":81,"line":19049},[79,58950,55219],{"class":239},[79,58952,58953],{"class":81,"line":19054},[79,58954,58955],{"class":2440},"    \u002F\u002F 1.获取元素\n",[79,58957,58958,58960,58962,58964,58966,58968,58970,58972],{"class":81,"line":19067},[79,58959,13385],{"class":243},[79,58961,57725],{"class":96},[79,58963,468],{"class":243},[79,58965,56506],{"class":239},[79,58967,56509],{"class":85},[79,58969,685],{"class":239},[79,58971,57736],{"class":89},[79,58973,253],{"class":239},[79,58975,58976,58978,58980,58982,58984,58986,58988,58990],{"class":81,"line":19072},[79,58977,13385],{"class":243},[79,58979,9019],{"class":96},[79,58981,468],{"class":243},[79,58983,56506],{"class":239},[79,58985,56509],{"class":85},[79,58987,685],{"class":239},[79,58989,57755],{"class":89},[79,58991,253],{"class":239},[79,58993,58994,58996,58998,59000],{"class":81,"line":34748},[79,58995,54332],{"class":243},[79,58997,11622],{"class":239},[79,58999,244],{"class":243},[79,59001,49447],{"class":96},[79,59003,59004],{"class":81,"line":34754},[79,59005,59006],{"class":2440},"    \u002F\u002F 2.开启定时器\n",[79,59008,59009],{"class":81,"line":34760},[79,59010,59011],{"class":2440},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[79,59013,59014,59017,59019,59021],{"class":81,"line":34766},[79,59015,59016],{"class":85},"    setInterval",[79,59018,685],{"class":239},[79,59020,56559],{"class":243},[79,59022,56562],{"class":239},[79,59024,59025,59027],{"class":81,"line":34772},[79,59026,56567],{"class":239},[79,59028,4908],{"class":243},[79,59030,59031,59033,59035,59037,59040,59042],{"class":81,"line":34783},[79,59032,56590],{"class":243},[79,59034,56593],{"class":239},[79,59036,3935],{"class":243},[79,59038,59039],{"class":239}," sliderData.",[79,59041,54081],{"class":96},[79,59043,14605],{"class":239},[79,59045,59046,59049,59051],{"class":81,"line":34789},[79,59047,59048],{"class":239},"        i ",[79,59050,244],{"class":243},[79,59052,49447],{"class":96},[79,59054,59055],{"class":81,"line":34809},[79,59056,54510],{"class":239},[79,59058,59059],{"class":81,"line":34815},[79,59060,59061],{"class":2440},"      \u002F\u002F 更换图片路径\n",[79,59063,59064,59066,59068],{"class":81,"line":34826},[79,59065,57831],{"class":239},[79,59067,244],{"class":243},[79,59069,59070],{"class":239}," sliderData[i].url\n",[79,59072,59073],{"class":81,"line":34832},[79,59074,59075],{"class":2440},"      \u002F\u002F 把文字写到p里面\n",[79,59077,59078,59080,59082],{"class":81,"line":34838},[79,59079,57841],{"class":239},[79,59081,244],{"class":243},[79,59083,59084],{"class":239}," sliderData[i].title\n",[79,59086,59087],{"class":81,"line":34844},[79,59088,59089],{"class":2440},"      \u002F\u002F 小圆点\n",[79,59091,59092],{"class":81,"line":34850},[79,59093,59094],{"class":2440},"      \u002F\u002F 先删除以前的active\n",[79,59096,59097],{"class":81,"line":34856},[79,59098,59099],{"class":2440},"      \u002F\u002F 只让当前li添加active\n",[79,59101,59102,59104,59106,59108,59111,59114,59117,59119,59121],{"class":81,"line":34862},[79,59103,57881],{"class":239},[79,59105,56509],{"class":85},[79,59107,685],{"class":239},[79,59109,59110],{"class":89},"'.slider-footer .activate'",[79,59112,59113],{"class":239},").classList.",[79,59115,59116],{"class":85},"remove",[79,59118,685],{"class":239},[79,59120,57899],{"class":89},[79,59122,253],{"class":239},[79,59124,59125,59127,59129,59131,59134,59136,59138,59140,59143,59145,59147,59149,59151],{"class":81,"line":34868},[79,59126,57881],{"class":239},[79,59128,56509],{"class":85},[79,59130,685],{"class":239},[79,59132,59133],{"class":89},"`.slider-footer ul li:nth-child(${",[79,59135,2815],{"class":239},[79,59137,47680],{"class":243},[79,59139,27253],{"class":96},[79,59141,59142],{"class":89},"})`",[79,59144,59113],{"class":239},[79,59146,7530],{"class":85},[79,59148,685],{"class":239},[79,59150,57899],{"class":89},[79,59152,253],{"class":239},[79,59154,59155],{"class":81,"line":34888},[79,59156,454],{"emptyLinePlaceholder":453},[79,59158,59159,59161,59163],{"class":81,"line":34894},[79,59160,56645],{"class":239},[79,59162,8605],{"class":96},[79,59164,253],{"class":239},[79,59166,59167],{"class":81,"line":34910},[79,59168,454],{"emptyLinePlaceholder":453},[79,59170,59171,59173,59175],{"class":81,"line":34916},[79,59172,54529],{"class":239},[79,59174,53926],{"class":395},[79,59176,53420],{"class":239},[79,59178,59179,59181,59183],{"class":81,"line":34930},[79,59180,53898],{"class":239},[79,59182,53913],{"class":395},[79,59184,53420],{"class":239},[79,59186,59187],{"class":81,"line":34936},[79,59188,454],{"emptyLinePlaceholder":453},[79,59190,59191,59193,59195],{"class":81,"line":34951},[79,59192,53898],{"class":239},[79,59194,52749],{"class":395},[79,59196,53420],{"class":239},[265,59198,59200],{"id":59199},"_317-重要知识点","3.1.7 重要知识点",[19,59202,59203,59204],{},"浏览器在渲染文本时， ",[2528,59205,59206],{},"没有空格或换行符就没有“断行点”",[19,59208,59209],{},[3699,59210],{"alt":57,"src":59211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,59213,59214],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,59216,59217],{},[3699,59218],{"alt":57,"src":59219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,59221,59222],{},[3699,59223],{"alt":57,"src":59224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59226,59228],{"id":59227},"_32-dom事件基础","3.2 DOM事件基础",[265,59230,59232],{"id":59231},"_321-事件监听","3.2.1 事件监听",[19,59234,59235],{},[3699,59236],{"alt":57,"src":59237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,59239,59240],{},"事件监听有响应的发生",[19,59242,59243],{},[3699,59244],{"alt":57,"src":59245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,59247,59248],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,59250,59251],{},"对于有名函数,要执行的函数名后边不要加()",[265,59253,59255],{"id":59254},"_322-随机点名案例","3.2.2 随机点名案例",[51,59257,59259],{"className":52747,"code":59258,"language":52749,"meta":57,"style":57},"\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",[59,59260,59261,59271,59285,59289,59297,59311,59331,59343,59351,59357,59367,59377,59381,59385,59392,59403,59407,59411,59417,59429,59443,59453,59465,59478,59482,59486,59493,59497,59510,59522,59534,59538,59542,59546,59553,59563,59567,59571,59580,59592,59604,59619,59623,59631,59639,59643,59651,59664,59678,59691,59711,59719,59734,59754,59774,59782,59786,59794,59799,59835,59855,59860,59879,59884,59895,59900,59911,59916,59935,59950,59955,59981,59991,60000,60005,60021,60026,60031,60036,60051,60055,60059,60064,60083,60100,60108,60113,60128,60132,60136,60144,60152,60156],{"__ignoreMap":57},[79,59262,59263,59265,59267,59269],{"class":81,"line":82},[79,59264,53411],{"class":239},[79,59266,53414],{"class":395},[79,59268,53417],{"class":85},[79,59270,53420],{"class":239},[79,59272,59273,59275,59277,59279,59281,59283],{"class":81,"line":167},[79,59274,392],{"class":239},[79,59276,52749],{"class":395},[79,59278,53429],{"class":85},[79,59280,244],{"class":239},[79,59282,53434],{"class":89},[79,59284,53420],{"class":239},[79,59286,59287],{"class":81,"line":178},[79,59288,454],{"emptyLinePlaceholder":453},[79,59290,59291,59293,59295],{"class":81,"line":457},[79,59292,392],{"class":239},[79,59294,53447],{"class":395},[79,59296,53420],{"class":239},[79,59298,59299,59301,59303,59305,59307,59309],{"class":81,"line":462},[79,59300,54257],{"class":239},[79,59302,53457],{"class":395},[79,59304,53460],{"class":85},[79,59306,244],{"class":239},[79,59308,53465],{"class":89},[79,59310,53420],{"class":239},[79,59312,59313,59315,59317,59319,59321,59323,59325,59327,59329],{"class":81,"line":474},[79,59314,54257],{"class":239},[79,59316,53457],{"class":395},[79,59318,2238],{"class":85},[79,59320,244],{"class":239},[79,59322,53504],{"class":89},[79,59324,53484],{"class":85},[79,59326,244],{"class":239},[79,59328,53511],{"class":89},[79,59330,53420],{"class":239},[79,59332,59333,59335,59337,59339,59341],{"class":81,"line":480},[79,59334,54257],{"class":239},[79,59336,53520],{"class":395},[79,59338,53523],{"class":239},[79,59340,53520],{"class":395},[79,59342,53420],{"class":239},[79,59344,59345,59347,59349],{"class":81,"line":486},[79,59346,54257],{"class":239},[79,59348,2287],{"class":395},[79,59350,53420],{"class":239},[79,59352,59353,59355],{"class":81,"line":491},[79,59354,8598],{"class":395},[79,59356,17732],{"class":239},[79,59358,59359,59361,59363,59365],{"class":81,"line":497},[79,59360,56816],{"class":96},[79,59362,53550],{"class":239},[79,59364,1030],{"class":96},[79,59366,3531],{"class":239},[79,59368,59369,59371,59373,59375],{"class":81,"line":503},[79,59370,56805],{"class":96},[79,59372,53550],{"class":239},[79,59374,1030],{"class":96},[79,59376,3531],{"class":239},[79,59378,59379],{"class":81,"line":509},[79,59380,4402],{"class":239},[79,59382,59383],{"class":81,"line":514},[79,59384,454],{"emptyLinePlaceholder":453},[79,59386,59387,59390],{"class":81,"line":520},[79,59388,59389],{"class":395},"    h2",[79,59391,17732],{"class":239},[79,59393,59394,59397,59399,59401],{"class":81,"line":526},[79,59395,59396],{"class":96},"      text-align",[79,59398,53550],{"class":239},[79,59400,53705],{"class":96},[79,59402,3531],{"class":239},[79,59404,59405],{"class":81,"line":532},[79,59406,4402],{"class":239},[79,59408,59409],{"class":81,"line":537},[79,59410,454],{"emptyLinePlaceholder":453},[79,59412,59413,59415],{"class":81,"line":543},[79,59414,56862],{"class":85},[79,59416,17732],{"class":239},[79,59418,59419,59421,59423,59425,59427],{"class":81,"line":549},[79,59420,56881],{"class":96},[79,59422,53550],{"class":239},[79,59424,3775],{"class":96},[79,59426,53605],{"class":243},[79,59428,3531],{"class":239},[79,59430,59431,59433,59435,59437,59439,59441],{"class":81,"line":555},[79,59432,56816],{"class":96},[79,59434,53550],{"class":239},[79,59436,3029],{"class":96},[79,59438,53605],{"class":243},[79,59440,53669],{"class":96},[79,59442,3531],{"class":239},[79,59444,59445,59447,59449,59451],{"class":81,"line":561},[79,59446,57119],{"class":96},[79,59448,53550],{"class":239},[79,59450,53590],{"class":96},[79,59452,3531],{"class":239},[79,59454,59455,59457,59459,59461,59463],{"class":81,"line":567},[79,59456,57032],{"class":96},[79,59458,53550],{"class":239},[79,59460,3198],{"class":96},[79,59462,53605],{"class":243},[79,59464,3531],{"class":239},[79,59466,59467,59470,59472,59474,59476],{"class":81,"line":573},[79,59468,59469],{"class":96},"      line-height",[79,59471,53550],{"class":239},[79,59473,2775],{"class":96},[79,59475,53605],{"class":243},[79,59477,3531],{"class":239},[79,59479,59480],{"class":81,"line":579},[79,59481,4402],{"class":239},[79,59483,59484],{"class":81,"line":584},[79,59485,454],{"emptyLinePlaceholder":453},[79,59487,59488,59491],{"class":81,"line":590},[79,59489,59490],{"class":85},"    .qs",[79,59492,17732],{"class":239},[79,59494,59495],{"class":81,"line":596},[79,59496,454],{"emptyLinePlaceholder":453},[79,59498,59499,59501,59503,59506,59508],{"class":81,"line":602},[79,59500,56881],{"class":96},[79,59502,53550],{"class":239},[79,59504,59505],{"class":96},"450",[79,59507,53605],{"class":243},[79,59509,3531],{"class":239},[79,59511,59512,59514,59516,59518,59520],{"class":81,"line":608},[79,59513,56895],{"class":96},[79,59515,53550],{"class":239},[79,59517,2775],{"class":96},[79,59519,53605],{"class":243},[79,59521,3531],{"class":239},[79,59523,59524,59527,59529,59532],{"class":81,"line":614},[79,59525,59526],{"class":96},"      color",[79,59528,53550],{"class":239},[79,59530,59531],{"class":96},"red",[79,59533,3531],{"class":239},[79,59535,59536],{"class":81,"line":620},[79,59537,454],{"emptyLinePlaceholder":453},[79,59539,59540],{"class":81,"line":625},[79,59541,4402],{"class":239},[79,59543,59544],{"class":81,"line":630},[79,59545,454],{"emptyLinePlaceholder":453},[79,59547,59548,59551],{"class":81,"line":648},[79,59549,59550],{"class":85},"    .btns",[79,59552,17732],{"class":239},[79,59554,59555,59557,59559,59561],{"class":81,"line":659},[79,59556,59396],{"class":96},[79,59558,53550],{"class":239},[79,59560,53705],{"class":96},[79,59562,3531],{"class":239},[79,59564,59565],{"class":81,"line":676},[79,59566,4402],{"class":239},[79,59568,59569],{"class":81,"line":708},[79,59570,454],{"emptyLinePlaceholder":453},[79,59572,59573,59575,59578],{"class":81,"line":717},[79,59574,59550],{"class":85},[79,59576,59577],{"class":395}," button",[79,59579,17732],{"class":239},[79,59581,59582,59584,59586,59588,59590],{"class":81,"line":722},[79,59583,56881],{"class":96},[79,59585,53550],{"class":239},[79,59587,3190],{"class":96},[79,59589,53605],{"class":243},[79,59591,3531],{"class":239},[79,59593,59594,59596,59598,59600,59602],{"class":81,"line":727},[79,59595,56895],{"class":96},[79,59597,53550],{"class":239},[79,59599,2648],{"class":96},[79,59601,53605],{"class":243},[79,59603,3531],{"class":239},[79,59605,59606,59608,59610,59612,59615,59617],{"class":81,"line":738},[79,59607,56816],{"class":96},[79,59609,53550],{"class":239},[79,59611,1030],{"class":96},[79,59613,59614],{"class":96}," 50",[79,59616,53605],{"class":243},[79,59618,3531],{"class":239},[79,59620,59621],{"class":81,"line":753},[79,59622,4402],{"class":239},[79,59624,59625,59627,59629],{"class":81,"line":768},[79,59626,54529],{"class":239},[79,59628,2287],{"class":395},[79,59630,53420],{"class":239},[79,59632,59633,59635,59637],{"class":81,"line":776},[79,59634,53898],{"class":239},[79,59636,53447],{"class":395},[79,59638,53420],{"class":239},[79,59640,59641],{"class":81,"line":781},[79,59642,454],{"emptyLinePlaceholder":453},[79,59644,59645,59647,59649],{"class":81,"line":786},[79,59646,392],{"class":239},[79,59648,53913],{"class":395},[79,59650,53420],{"class":239},[79,59652,59653,59655,59657,59660,59662],{"class":81,"line":802},[79,59654,54257],{"class":239},[79,59656,14],{"class":395},[79,59658,59659],{"class":239},">随机点名\u003C\u002F",[79,59661,14],{"class":395},[79,59663,53420],{"class":239},[79,59665,59666,59668,59670,59672,59674,59676],{"class":81,"line":815},[79,59667,54257],{"class":239},[79,59669,53724],{"class":395},[79,59671,55596],{"class":85},[79,59673,244],{"class":239},[79,59675,55601],{"class":89},[79,59677,53420],{"class":239},[79,59679,59680,59682,59684,59687,59689],{"class":81,"line":828},[79,59681,53454],{"class":239},[79,59683,79],{"class":395},[79,59685,59686],{"class":239},">名字是：\u003C\u002F",[79,59688,79],{"class":395},[79,59690,53420],{"class":239},[79,59692,59693,59695,59697,59699,59701,59704,59707,59709],{"class":81,"line":842},[79,59694,53454],{"class":239},[79,59696,53724],{"class":395},[79,59698,55596],{"class":85},[79,59700,244],{"class":239},[79,59702,59703],{"class":89},"\"qs\"",[79,59705,59706],{"class":239},">这里显示姓名\u003C\u002F",[79,59708,53724],{"class":395},[79,59710,53420],{"class":239},[79,59712,59713,59715,59717],{"class":81,"line":859},[79,59714,54529],{"class":239},[79,59716,53724],{"class":395},[79,59718,53420],{"class":239},[79,59720,59721,59723,59725,59727,59729,59732],{"class":81,"line":878},[79,59722,54257],{"class":239},[79,59724,53724],{"class":395},[79,59726,55596],{"class":85},[79,59728,244],{"class":239},[79,59730,59731],{"class":89},"\"btns\"",[79,59733,53420],{"class":239},[79,59735,59736,59738,59740,59742,59744,59747,59750,59752],{"class":81,"line":883},[79,59737,53454],{"class":239},[79,59739,55997],{"class":395},[79,59741,55596],{"class":85},[79,59743,244],{"class":239},[79,59745,59746],{"class":89},"\"start\"",[79,59748,59749],{"class":239},">开始\u003C\u002F",[79,59751,55997],{"class":395},[79,59753,53420],{"class":239},[79,59755,59756,59758,59760,59762,59764,59767,59770,59772],{"class":81,"line":888},[79,59757,53454],{"class":239},[79,59759,55997],{"class":395},[79,59761,55596],{"class":85},[79,59763,244],{"class":239},[79,59765,59766],{"class":89},"\"end\"",[79,59768,59769],{"class":239},">结束\u003C\u002F",[79,59771,55997],{"class":395},[79,59773,53420],{"class":239},[79,59775,59776,59778,59780],{"class":81,"line":904},[79,59777,54529],{"class":239},[79,59779,53724],{"class":395},[79,59781,53420],{"class":239},[79,59783,59784],{"class":81,"line":919},[79,59785,454],{"emptyLinePlaceholder":453},[79,59787,59788,59790,59792],{"class":81,"line":930},[79,59789,54257],{"class":239},[79,59791,53926],{"class":395},[79,59793,53420],{"class":239},[79,59795,59796],{"class":81,"line":941},[79,59797,59798],{"class":2440},"    \u002F\u002F 数据数组\n",[79,59800,59801,59803,59806,59808,59810,59813,59815,59818,59820,59823,59825,59828,59830,59833],{"class":81,"line":946},[79,59802,13385],{"class":243},[79,59804,59805],{"class":96}," arr",[79,59807,468],{"class":243},[79,59809,54339],{"class":239},[79,59811,59812],{"class":89},"'马超'",[79,59814,1060],{"class":239},[79,59816,59817],{"class":89},"'黄忠'",[79,59819,1060],{"class":239},[79,59821,59822],{"class":89},"'赵云'",[79,59824,1060],{"class":239},[79,59826,59827],{"class":89},"'关羽'",[79,59829,1060],{"class":239},[79,59831,59832],{"class":89},"'张飞'",[79,59834,35361],{"class":239},[79,59836,59837,59839,59842,59844,59846,59848,59850,59853],{"class":81,"line":969},[79,59838,13385],{"class":243},[79,59840,59841],{"class":96}," qs",[79,59843,468],{"class":243},[79,59845,56506],{"class":239},[79,59847,56509],{"class":85},[79,59849,685],{"class":239},[79,59851,59852],{"class":89},"'.qs'",[79,59854,253],{"class":239},[79,59856,59857],{"class":81,"line":975},[79,59858,59859],{"class":2440},"    \u002F\u002F 1.业务1.开始按钮模块\n",[79,59861,59862,59864,59866,59868,59870,59872,59874,59877],{"class":81,"line":989},[79,59863,13385],{"class":243},[79,59865,6384],{"class":96},[79,59867,468],{"class":243},[79,59869,56506],{"class":239},[79,59871,56509],{"class":85},[79,59873,685],{"class":239},[79,59875,59876],{"class":89},"'.start'",[79,59878,253],{"class":239},[79,59880,59881],{"class":81,"line":1003},[79,59882,59883],{"class":2440},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[79,59885,59886,59888,59891,59893],{"class":81,"line":1019},[79,59887,54332],{"class":243},[79,59889,59890],{"class":239}," timerId ",[79,59892,244],{"class":243},[79,59894,49447],{"class":96},[79,59896,59897],{"class":81,"line":1024},[79,59898,59899],{"class":2440},"    \u002F\u002F 随机号要全局变量\n",[79,59901,59902,59904,59907,59909],{"class":81,"line":1067},[79,59903,54332],{"class":243},[79,59905,59906],{"class":239}," random ",[79,59908,244],{"class":243},[79,59910,49447],{"class":96},[79,59912,59913],{"class":81,"line":1101},[79,59914,59915],{"class":2440},"    \u002F\u002F 1.1 添加点击事件\n",[79,59917,59918,59921,59924,59926,59929,59931,59933],{"class":81,"line":1106},[79,59919,59920],{"class":239},"    start.",[79,59922,59923],{"class":85},"addEventListener",[79,59925,685],{"class":239},[79,59927,59928],{"class":89},"'click'",[79,59930,1060],{"class":239},[79,59932,56559],{"class":243},[79,59934,56562],{"class":239},[79,59936,59937,59940,59942,59944,59946,59948],{"class":81,"line":1112},[79,59938,59939],{"class":239},"      timerId ",[79,59941,244],{"class":243},[79,59943,56554],{"class":85},[79,59945,685],{"class":239},[79,59947,56559],{"class":243},[79,59949,56562],{"class":239},[79,59951,59952],{"class":81,"line":1124},[79,59953,59954],{"class":2440},"        \u002F\u002F 随机数\n",[79,59956,59957,59960,59962,59965,59968,59971,59973,59975,59977,59979],{"class":81,"line":1129},[79,59958,59959],{"class":239},"        random ",[79,59961,244],{"class":243},[79,59963,59964],{"class":85}," parseInt",[79,59966,59967],{"class":239},"(Math.",[79,59969,59970],{"class":85},"random",[79,59972,15213],{"class":239},[79,59974,2829],{"class":243},[79,59976,54078],{"class":239},[79,59978,54081],{"class":96},[79,59980,253],{"class":239},[79,59982,59983,59986,59988],{"class":81,"line":1150},[79,59984,59985],{"class":239},"        qs.innerHTML ",[79,59987,244],{"class":243},[79,59989,59990],{"class":239}," arr[random]\n",[79,59992,59993,59996,59998],{"class":81,"line":1161},[79,59994,59995],{"class":239},"      }, ",[79,59997,2648],{"class":96},[79,59999,253],{"class":239},[79,60001,60002],{"class":81,"line":1175},[79,60003,60004],{"class":2440},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[79,60006,60007,60009,60012,60014,60017,60019],{"class":81,"line":1194},[79,60008,56590],{"class":243},[79,60010,60011],{"class":239}," (arr.",[79,60013,54081],{"class":96},[79,60015,60016],{"class":243}," ===",[79,60018,27253],{"class":96},[79,60020,14605],{"class":239},[79,60022,60023],{"class":81,"line":1211},[79,60024,60025],{"class":2440},"        \u002F\u002F start.disabled = true\n",[79,60027,60028],{"class":81,"line":1228},[79,60029,60030],{"class":2440},"        \u002F\u002F end.disabled = true\n",[79,60032,60033],{"class":81,"line":1246},[79,60034,60035],{"class":2440},"        \u002F\u002F 可以合起来写\n",[79,60037,60038,60041,60043,60046,60048],{"class":81,"line":1251},[79,60039,60040],{"class":239},"        start.disabled ",[79,60042,244],{"class":243},[79,60044,60045],{"class":239}," end.disabled ",[79,60047,244],{"class":243},[79,60049,60050],{"class":96}," true\n",[79,60052,60053],{"class":81,"line":1274},[79,60054,54510],{"class":239},[79,60056,60057],{"class":81,"line":1296},[79,60058,35576],{"class":239},[79,60060,60061],{"class":81,"line":1316},[79,60062,60063],{"class":2440},"    \u002F\u002F 1.2 关闭按钮模块\n",[79,60065,60066,60068,60070,60072,60074,60076,60078,60081],{"class":81,"line":1321},[79,60067,13385],{"class":243},[79,60069,6400],{"class":96},[79,60071,468],{"class":243},[79,60073,56506],{"class":239},[79,60075,56509],{"class":85},[79,60077,685],{"class":239},[79,60079,60080],{"class":89},"'.end'",[79,60082,253],{"class":239},[79,60084,60085,60088,60090,60092,60094,60096,60098],{"class":81,"line":1326},[79,60086,60087],{"class":239},"    end.",[79,60089,59923],{"class":85},[79,60091,685],{"class":239},[79,60093,59928],{"class":89},[79,60095,1060],{"class":239},[79,60097,56559],{"class":243},[79,60099,56562],{"class":239},[79,60101,60102,60105],{"class":81,"line":1342},[79,60103,60104],{"class":85},"      clearInterval",[79,60106,60107],{"class":239},"(timerId)\n",[79,60109,60110],{"class":81,"line":18985},[79,60111,60112],{"class":2440},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[79,60114,60115,60118,60121,60124,60126],{"class":81,"line":18990},[79,60116,60117],{"class":239},"      arr.",[79,60119,60120],{"class":85},"splice",[79,60122,60123],{"class":239},"(random, ",[79,60125,1072],{"class":96},[79,60127,253],{"class":239},[79,60129,60130],{"class":81,"line":18995},[79,60131,35576],{"class":239},[79,60133,60134],{"class":81,"line":19009},[79,60135,454],{"emptyLinePlaceholder":453},[79,60137,60138,60140,60142],{"class":81,"line":19021},[79,60139,54529],{"class":239},[79,60141,53926],{"class":395},[79,60143,53420],{"class":239},[79,60145,60146,60148,60150],{"class":81,"line":19026},[79,60147,53898],{"class":239},[79,60149,53913],{"class":395},[79,60151,53420],{"class":239},[79,60153,60154],{"class":81,"line":19039},[79,60155,454],{"emptyLinePlaceholder":453},[79,60157,60158,60160,60162],{"class":81,"line":19044},[79,60159,53898],{"class":239},[79,60161,52749],{"class":395},[79,60163,53420],{"class":239},[19,60165,60166],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[265,60168,60170],{"id":60169},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[51,60172,60174],{"className":52747,"code":60173,"language":52749,"meta":57,"style":57},"\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",[59,60175,60176,60186,60200,60204,60212,60226,60246,60258,60266,60270,60278,60290,60298,60317,60334,60350,60360,60364,60372,60380,60384],{"__ignoreMap":57},[79,60177,60178,60180,60182,60184],{"class":81,"line":82},[79,60179,53411],{"class":239},[79,60181,53414],{"class":395},[79,60183,53417],{"class":85},[79,60185,53420],{"class":239},[79,60187,60188,60190,60192,60194,60196,60198],{"class":81,"line":167},[79,60189,392],{"class":239},[79,60191,52749],{"class":395},[79,60193,53429],{"class":85},[79,60195,244],{"class":239},[79,60197,53434],{"class":89},[79,60199,53420],{"class":239},[79,60201,60202],{"class":81,"line":178},[79,60203,454],{"emptyLinePlaceholder":453},[79,60205,60206,60208,60210],{"class":81,"line":457},[79,60207,392],{"class":239},[79,60209,53447],{"class":395},[79,60211,53420],{"class":239},[79,60213,60214,60216,60218,60220,60222,60224],{"class":81,"line":462},[79,60215,54257],{"class":239},[79,60217,53457],{"class":395},[79,60219,53460],{"class":85},[79,60221,244],{"class":239},[79,60223,53465],{"class":89},[79,60225,53420],{"class":239},[79,60227,60228,60230,60232,60234,60236,60238,60240,60242,60244],{"class":81,"line":474},[79,60229,54257],{"class":239},[79,60231,53457],{"class":395},[79,60233,2238],{"class":85},[79,60235,244],{"class":239},[79,60237,53504],{"class":89},[79,60239,53484],{"class":85},[79,60241,244],{"class":239},[79,60243,53511],{"class":89},[79,60245,53420],{"class":239},[79,60247,60248,60250,60252,60254,60256],{"class":81,"line":480},[79,60249,54257],{"class":239},[79,60251,53520],{"class":395},[79,60253,53523],{"class":239},[79,60255,53520],{"class":395},[79,60257,53420],{"class":239},[79,60259,60260,60262,60264],{"class":81,"line":486},[79,60261,53898],{"class":239},[79,60263,53447],{"class":395},[79,60265,53420],{"class":239},[79,60267,60268],{"class":81,"line":491},[79,60269,454],{"emptyLinePlaceholder":453},[79,60271,60272,60274,60276],{"class":81,"line":497},[79,60273,392],{"class":239},[79,60275,53913],{"class":395},[79,60277,53420],{"class":239},[79,60279,60280,60282,60284,60286,60288],{"class":81,"line":503},[79,60281,54257],{"class":239},[79,60283,55997],{"class":395},[79,60285,56003],{"class":239},[79,60287,55997],{"class":395},[79,60289,53420],{"class":239},[79,60291,60292,60294,60296],{"class":81,"line":509},[79,60293,54257],{"class":239},[79,60295,53926],{"class":395},[79,60297,53420],{"class":239},[79,60299,60300,60302,60304,60306,60308,60310,60312,60315],{"class":81,"line":514},[79,60301,13385],{"class":243},[79,60303,56501],{"class":96},[79,60305,468],{"class":243},[79,60307,56506],{"class":239},[79,60309,56509],{"class":85},[79,60311,685],{"class":239},[79,60313,60314],{"class":89},"'button'",[79,60316,253],{"class":239},[79,60318,60319,60322,60324,60326,60328,60330,60332],{"class":81,"line":520},[79,60320,60321],{"class":239},"    btn.",[79,60323,59923],{"class":85},[79,60325,685],{"class":239},[79,60327,59928],{"class":89},[79,60329,1060],{"class":239},[79,60331,56559],{"class":243},[79,60333,56562],{"class":239},[79,60335,60336,60339,60341,60343,60346,60348],{"class":81,"line":526},[79,60337,60338],{"class":243},"      const",[79,60340,4455],{"class":96},[79,60342,468],{"class":243},[79,60344,60345],{"class":239}," Math.",[79,60347,59970],{"class":85},[79,60349,4191],{"class":239},[79,60351,60352,60355,60358],{"class":81,"line":532},[79,60353,60354],{"class":239},"      console.",[79,60356,60357],{"class":85},"log",[79,60359,2399],{"class":239},[79,60361,60362],{"class":81,"line":537},[79,60363,35576],{"class":239},[79,60365,60366,60368,60370],{"class":81,"line":543},[79,60367,54529],{"class":239},[79,60369,53926],{"class":395},[79,60371,53420],{"class":239},[79,60373,60374,60376,60378],{"class":81,"line":549},[79,60375,53898],{"class":239},[79,60377,53913],{"class":395},[79,60379,53420],{"class":239},[79,60381,60382],{"class":81,"line":555},[79,60383,454],{"emptyLinePlaceholder":453},[79,60385,60386,60388,60390],{"class":81,"line":561},[79,60387,53898],{"class":239},[79,60389,52749],{"class":395},[79,60391,53420],{"class":239},[19,60393,60394],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60396,60397],{},"常量不可以重新赋值",[19,60399,60400],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[51,60402,60404],{"className":52747,"code":60403,"language":52749,"meta":57,"style":57},"\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",[59,60405,60406,60416,60430,60434,60442,60456,60476,60488,60496,60500,60508,60520,60528,60539,60557,60573,60587,60595,60599,60607,60615,60619],{"__ignoreMap":57},[79,60407,60408,60410,60412,60414],{"class":81,"line":82},[79,60409,53411],{"class":239},[79,60411,53414],{"class":395},[79,60413,53417],{"class":85},[79,60415,53420],{"class":239},[79,60417,60418,60420,60422,60424,60426,60428],{"class":81,"line":167},[79,60419,392],{"class":239},[79,60421,52749],{"class":395},[79,60423,53429],{"class":85},[79,60425,244],{"class":239},[79,60427,53434],{"class":89},[79,60429,53420],{"class":239},[79,60431,60432],{"class":81,"line":178},[79,60433,454],{"emptyLinePlaceholder":453},[79,60435,60436,60438,60440],{"class":81,"line":457},[79,60437,392],{"class":239},[79,60439,53447],{"class":395},[79,60441,53420],{"class":239},[79,60443,60444,60446,60448,60450,60452,60454],{"class":81,"line":462},[79,60445,54257],{"class":239},[79,60447,53457],{"class":395},[79,60449,53460],{"class":85},[79,60451,244],{"class":239},[79,60453,53465],{"class":89},[79,60455,53420],{"class":239},[79,60457,60458,60460,60462,60464,60466,60468,60470,60472,60474],{"class":81,"line":474},[79,60459,54257],{"class":239},[79,60461,53457],{"class":395},[79,60463,2238],{"class":85},[79,60465,244],{"class":239},[79,60467,53504],{"class":89},[79,60469,53484],{"class":85},[79,60471,244],{"class":239},[79,60473,53511],{"class":89},[79,60475,53420],{"class":239},[79,60477,60478,60480,60482,60484,60486],{"class":81,"line":480},[79,60479,54257],{"class":239},[79,60481,53520],{"class":395},[79,60483,53523],{"class":239},[79,60485,53520],{"class":395},[79,60487,53420],{"class":239},[79,60489,60490,60492,60494],{"class":81,"line":486},[79,60491,53898],{"class":239},[79,60493,53447],{"class":395},[79,60495,53420],{"class":239},[79,60497,60498],{"class":81,"line":491},[79,60499,454],{"emptyLinePlaceholder":453},[79,60501,60502,60504,60506],{"class":81,"line":497},[79,60503,392],{"class":239},[79,60505,53913],{"class":395},[79,60507,53420],{"class":239},[79,60509,60510,60512,60514,60516,60518],{"class":81,"line":503},[79,60511,54257],{"class":239},[79,60513,55997],{"class":395},[79,60515,56003],{"class":239},[79,60517,55997],{"class":395},[79,60519,53420],{"class":239},[79,60521,60522,60524,60526],{"class":81,"line":509},[79,60523,54257],{"class":239},[79,60525,53926],{"class":395},[79,60527,53420],{"class":239},[79,60529,60530,60532,60534,60536],{"class":81,"line":514},[79,60531,13385],{"class":243},[79,60533,4455],{"class":96},[79,60535,468],{"class":243},[79,60537,60538],{"class":96}," 10\n",[79,60540,60541,60543,60545,60547,60549,60551,60553,60555],{"class":81,"line":520},[79,60542,13385],{"class":243},[79,60544,56501],{"class":96},[79,60546,468],{"class":243},[79,60548,56506],{"class":239},[79,60550,56509],{"class":85},[79,60552,685],{"class":239},[79,60554,60314],{"class":89},[79,60556,253],{"class":239},[79,60558,60559,60561,60563,60565,60567,60569,60571],{"class":81,"line":526},[79,60560,60321],{"class":239},[79,60562,59923],{"class":85},[79,60564,685],{"class":239},[79,60566,59928],{"class":89},[79,60568,1060],{"class":239},[79,60570,56559],{"class":243},[79,60572,56562],{"class":239},[79,60574,60575,60577,60579,60581,60583,60585],{"class":81,"line":532},[79,60576,60338],{"class":243},[79,60578,4455],{"class":96},[79,60580,468],{"class":243},[79,60582,60345],{"class":239},[79,60584,59970],{"class":85},[79,60586,4191],{"class":239},[79,60588,60589,60591,60593],{"class":81,"line":537},[79,60590,60354],{"class":239},[79,60592,60357],{"class":85},[79,60594,2399],{"class":239},[79,60596,60597],{"class":81,"line":543},[79,60598,35576],{"class":239},[79,60600,60601,60603,60605],{"class":81,"line":549},[79,60602,54529],{"class":239},[79,60604,53926],{"class":395},[79,60606,53420],{"class":239},[79,60608,60609,60611,60613],{"class":81,"line":555},[79,60610,53898],{"class":239},[79,60612,53913],{"class":395},[79,60614,53420],{"class":239},[79,60616,60617],{"class":81,"line":561},[79,60618,454],{"emptyLinePlaceholder":453},[79,60620,60621,60623,60625],{"class":81,"line":567},[79,60622,53898],{"class":239},[79,60624,52749],{"class":395},[79,60626,53420],{"class":239},[19,60628,60629],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[51,60631,60633],{"className":52747,"code":60632,"language":52749,"meta":57,"style":57},"\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",[59,60634,60635,60645,60659,60663,60671,60685,60705,60717,60725,60729,60737,60749,60757,60767,60785,60801,60814,60822,60826,60834,60842,60846],{"__ignoreMap":57},[79,60636,60637,60639,60641,60643],{"class":81,"line":82},[79,60638,53411],{"class":239},[79,60640,53414],{"class":395},[79,60642,53417],{"class":85},[79,60644,53420],{"class":239},[79,60646,60647,60649,60651,60653,60655,60657],{"class":81,"line":167},[79,60648,392],{"class":239},[79,60650,52749],{"class":395},[79,60652,53429],{"class":85},[79,60654,244],{"class":239},[79,60656,53434],{"class":89},[79,60658,53420],{"class":239},[79,60660,60661],{"class":81,"line":178},[79,60662,454],{"emptyLinePlaceholder":453},[79,60664,60665,60667,60669],{"class":81,"line":457},[79,60666,392],{"class":239},[79,60668,53447],{"class":395},[79,60670,53420],{"class":239},[79,60672,60673,60675,60677,60679,60681,60683],{"class":81,"line":462},[79,60674,54257],{"class":239},[79,60676,53457],{"class":395},[79,60678,53460],{"class":85},[79,60680,244],{"class":239},[79,60682,53465],{"class":89},[79,60684,53420],{"class":239},[79,60686,60687,60689,60691,60693,60695,60697,60699,60701,60703],{"class":81,"line":474},[79,60688,54257],{"class":239},[79,60690,53457],{"class":395},[79,60692,2238],{"class":85},[79,60694,244],{"class":239},[79,60696,53504],{"class":89},[79,60698,53484],{"class":85},[79,60700,244],{"class":239},[79,60702,53511],{"class":89},[79,60704,53420],{"class":239},[79,60706,60707,60709,60711,60713,60715],{"class":81,"line":480},[79,60708,54257],{"class":239},[79,60710,53520],{"class":395},[79,60712,53523],{"class":239},[79,60714,53520],{"class":395},[79,60716,53420],{"class":239},[79,60718,60719,60721,60723],{"class":81,"line":486},[79,60720,53898],{"class":239},[79,60722,53447],{"class":395},[79,60724,53420],{"class":239},[79,60726,60727],{"class":81,"line":491},[79,60728,454],{"emptyLinePlaceholder":453},[79,60730,60731,60733,60735],{"class":81,"line":497},[79,60732,392],{"class":239},[79,60734,53913],{"class":395},[79,60736,53420],{"class":239},[79,60738,60739,60741,60743,60745,60747],{"class":81,"line":503},[79,60740,54257],{"class":239},[79,60742,55997],{"class":395},[79,60744,56003],{"class":239},[79,60746,55997],{"class":395},[79,60748,53420],{"class":239},[79,60750,60751,60753,60755],{"class":81,"line":509},[79,60752,54257],{"class":239},[79,60754,53926],{"class":395},[79,60756,53420],{"class":239},[79,60758,60759,60761,60763,60765],{"class":81,"line":514},[79,60760,13385],{"class":243},[79,60762,4455],{"class":96},[79,60764,468],{"class":243},[79,60766,60538],{"class":96},[79,60768,60769,60771,60773,60775,60777,60779,60781,60783],{"class":81,"line":520},[79,60770,13385],{"class":243},[79,60772,56501],{"class":96},[79,60774,468],{"class":243},[79,60776,56506],{"class":239},[79,60778,56509],{"class":85},[79,60780,685],{"class":239},[79,60782,60314],{"class":89},[79,60784,253],{"class":239},[79,60786,60787,60789,60791,60793,60795,60797,60799],{"class":81,"line":526},[79,60788,60321],{"class":239},[79,60790,59923],{"class":85},[79,60792,685],{"class":239},[79,60794,59928],{"class":89},[79,60796,1060],{"class":239},[79,60798,56559],{"class":243},[79,60800,56562],{"class":239},[79,60802,60803,60806,60808,60810,60812],{"class":81,"line":532},[79,60804,60805],{"class":239},"      num ",[79,60807,244],{"class":243},[79,60809,60345],{"class":239},[79,60811,59970],{"class":85},[79,60813,4191],{"class":239},[79,60815,60816,60818,60820],{"class":81,"line":537},[79,60817,60354],{"class":239},[79,60819,60357],{"class":85},[79,60821,2399],{"class":239},[79,60823,60824],{"class":81,"line":543},[79,60825,35576],{"class":239},[79,60827,60828,60830,60832],{"class":81,"line":549},[79,60829,54529],{"class":239},[79,60831,53926],{"class":395},[79,60833,53420],{"class":239},[79,60835,60836,60838,60840],{"class":81,"line":555},[79,60837,53898],{"class":239},[79,60839,53913],{"class":395},[79,60841,53420],{"class":239},[79,60843,60844],{"class":81,"line":561},[79,60845,454],{"emptyLinePlaceholder":453},[79,60847,60848,60850,60852],{"class":81,"line":567},[79,60849,53898],{"class":239},[79,60851,52749],{"class":395},[79,60853,53420],{"class":239},[19,60855,60856],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[265,60858,60860],{"id":60859},"_324-事件监听版本","3.2.4 事件监听版本",[19,60862,60863],{},[3699,60864],{"alt":57,"src":60865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60867,60868],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60870,60871],{},"这种方式会覆盖前边的事件监听:",[51,60873,60875],{"className":52747,"code":60874,"language":52749,"meta":57,"style":57},"\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",[59,60876,60877,60887,60901,60905,60913,60927,60947,60959,60967,60971,60979,60991,60999,61017,61031,61042,61046,61058,61068,61072,61080,61088,61092],{"__ignoreMap":57},[79,60878,60879,60881,60883,60885],{"class":81,"line":82},[79,60880,53411],{"class":239},[79,60882,53414],{"class":395},[79,60884,53417],{"class":85},[79,60886,53420],{"class":239},[79,60888,60889,60891,60893,60895,60897,60899],{"class":81,"line":167},[79,60890,392],{"class":239},[79,60892,52749],{"class":395},[79,60894,53429],{"class":85},[79,60896,244],{"class":239},[79,60898,53434],{"class":89},[79,60900,53420],{"class":239},[79,60902,60903],{"class":81,"line":178},[79,60904,454],{"emptyLinePlaceholder":453},[79,60906,60907,60909,60911],{"class":81,"line":457},[79,60908,392],{"class":239},[79,60910,53447],{"class":395},[79,60912,53420],{"class":239},[79,60914,60915,60917,60919,60921,60923,60925],{"class":81,"line":462},[79,60916,54257],{"class":239},[79,60918,53457],{"class":395},[79,60920,53460],{"class":85},[79,60922,244],{"class":239},[79,60924,53465],{"class":89},[79,60926,53420],{"class":239},[79,60928,60929,60931,60933,60935,60937,60939,60941,60943,60945],{"class":81,"line":474},[79,60930,54257],{"class":239},[79,60932,53457],{"class":395},[79,60934,2238],{"class":85},[79,60936,244],{"class":239},[79,60938,53504],{"class":89},[79,60940,53484],{"class":85},[79,60942,244],{"class":239},[79,60944,53511],{"class":89},[79,60946,53420],{"class":239},[79,60948,60949,60951,60953,60955,60957],{"class":81,"line":480},[79,60950,54257],{"class":239},[79,60952,53520],{"class":395},[79,60954,53523],{"class":239},[79,60956,53520],{"class":395},[79,60958,53420],{"class":239},[79,60960,60961,60963,60965],{"class":81,"line":486},[79,60962,53898],{"class":239},[79,60964,53447],{"class":395},[79,60966,53420],{"class":239},[79,60968,60969],{"class":81,"line":491},[79,60970,454],{"emptyLinePlaceholder":453},[79,60972,60973,60975,60977],{"class":81,"line":497},[79,60974,392],{"class":239},[79,60976,53913],{"class":395},[79,60978,53420],{"class":239},[79,60980,60981,60983,60985,60987,60989],{"class":81,"line":503},[79,60982,54257],{"class":239},[79,60984,55997],{"class":395},[79,60986,56003],{"class":239},[79,60988,55997],{"class":395},[79,60990,53420],{"class":239},[79,60992,60993,60995,60997],{"class":81,"line":509},[79,60994,54257],{"class":239},[79,60996,53926],{"class":395},[79,60998,53420],{"class":239},[79,61000,61001,61003,61005,61007,61009,61011,61013,61015],{"class":81,"line":514},[79,61002,13385],{"class":243},[79,61004,56501],{"class":96},[79,61006,468],{"class":243},[79,61008,56506],{"class":239},[79,61010,56509],{"class":85},[79,61012,685],{"class":239},[79,61014,60314],{"class":89},[79,61016,253],{"class":239},[79,61018,61019,61021,61024,61026,61029],{"class":81,"line":520},[79,61020,60321],{"class":239},[79,61022,61023],{"class":85},"onclick",[79,61025,468],{"class":243},[79,61027,61028],{"class":243}," function",[79,61030,56562],{"class":239},[79,61032,61033,61036,61038,61040],{"class":81,"line":526},[79,61034,61035],{"class":85},"      alert",[79,61037,685],{"class":239},[79,61039,2846],{"class":96},[79,61041,253],{"class":239},[79,61043,61044],{"class":81,"line":532},[79,61045,4402],{"class":239},[79,61047,61048,61050,61052,61054,61056],{"class":81,"line":537},[79,61049,60321],{"class":239},[79,61051,61023],{"class":85},[79,61053,468],{"class":243},[79,61055,61028],{"class":243},[79,61057,56562],{"class":239},[79,61059,61060,61062,61064,61066],{"class":81,"line":543},[79,61061,61035],{"class":85},[79,61063,685],{"class":239},[79,61065,3123],{"class":96},[79,61067,253],{"class":239},[79,61069,61070],{"class":81,"line":549},[79,61071,4402],{"class":239},[79,61073,61074,61076,61078],{"class":81,"line":555},[79,61075,54529],{"class":239},[79,61077,53926],{"class":395},[79,61079,53420],{"class":239},[79,61081,61082,61084,61086],{"class":81,"line":561},[79,61083,53898],{"class":239},[79,61085,53913],{"class":395},[79,61087,53420],{"class":239},[79,61089,61090],{"class":81,"line":567},[79,61091,454],{"emptyLinePlaceholder":453},[79,61093,61094,61096,61098],{"class":81,"line":573},[79,61095,53898],{"class":239},[79,61097,52749],{"class":395},[79,61099,53420],{"class":239},[19,61101,61102],{},"只要点击就输出结果为22,前边11被覆盖了",[51,61104,61106],{"className":52747,"code":61105,"language":52749,"meta":57,"style":57},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[59,61107,61108,61113,61118,61122,61127,61132],{"__ignoreMap":57},[79,61109,61110],{"class":81,"line":82},[79,61111,61112],{"class":239},"  btn.addEventListener('click', function () {\n",[79,61114,61115],{"class":81,"line":167},[79,61116,61117],{"class":239},"      alert(11)\n",[79,61119,61120],{"class":81,"line":178},[79,61121,35576],{"class":239},[79,61123,61124],{"class":81,"line":457},[79,61125,61126],{"class":239},"    btn.addEventListener('click', function () {\n",[79,61128,61129],{"class":81,"line":462},[79,61130,61131],{"class":239},"      alert(22)\n",[79,61133,61134],{"class":81,"line":474},[79,61135,35576],{"class":239},[19,61137,61138],{},"点击第一次输出11,第二次点击为22",[265,61140,61142],{"id":61141},"_325-事件类型","3.2.5 事件类型",[19,61144,61145],{},[3699,61146],{"alt":57,"src":61147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[24137,61149,61151],{"id":61150},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,61153,61154],{},"补充知识:",[19,61156,61157],{},"轮播图自动播放模块,可以使用",[19,61159,61160],{},"let timerId = setInterval(function () {",[19,61162,61163],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,61165,61166],{},"用js方法模拟进行点击事件,click必须加()",[19,61168,61169],{},"next.click()",[19,61171,61172],{},"}, 1000)",[19,61174,61175],{},[3699,61176],{"alt":57,"src":61177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[51,61179,61181],{"className":383,"code":61180,"language":385,"meta":57,"style":57},"\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",[59,61182,61183,61187,61197,61211,61215,61223,61238,61258,61278,61291,61299,61304,61309,61313,61317,61322,61327,61332,61337,61341,61345,61350,61355,61360,61364,61368,61373,61377,61382,61387,61391,61395,61400,61405,61410,61415,61420,61424,61428,61433,61438,61443,61448,61453,61457,61461,61466,61471,61476,61481,61486,61491,61496,61501,61506,61511,61515,61519,61524,61529,61533,61537,61542,61547,61551,61556,61561,61565,61569,61574,61578,61583,61588,61592,61597,61601,61605,61610,61615,61620,61625,61630,61635,61640,61644,61648,61652,61657,61662,61667,61672,61676,61684,61692,61696,61704,61719,61733,61754,61762,61776,61789,61804,61823,61835,61847,61859,61871,61883,61895,61907,61915,61930,61954,61978,61986,61994,62002,62010,62015,62020,62025,62030,62035,62040,62045,62050,62055,62060,62064,62069,62074,62079,62084,62089,62094,62099,62104,62109,62113,62118,62123,62128,62133,62138,62143,62148,62153,62158,62163,62168,62173,62177,62181,62186,62191,62196,62200,62205,62210,62215,62220,62225,62229,62234,62238,62242,62246,62250,62254,62258,62263,62268,62273,62278,62283,62288,62293,62298,62303,62307,62311,62316,62321,62326,62331,62336,62340,62345,62350,62355,62360,62365,62370,62374,62378,62383,62387,62392,62396,62401,62406,62411,62416,62421,62426,62430,62438,62446,62450],{"__ignoreMap":57},[79,61184,61185],{"class":81,"line":82},[79,61186,454],{"emptyLinePlaceholder":453},[79,61188,61189,61191,61193,61195],{"class":81,"line":167},[79,61190,53411],{"class":239},[79,61192,53414],{"class":243},[79,61194,53417],{"class":96},[79,61196,53420],{"class":239},[79,61198,61199,61201,61203,61205,61207,61209],{"class":81,"line":178},[79,61200,392],{"class":239},[79,61202,52749],{"class":395},[79,61204,53429],{"class":85},[79,61206,244],{"class":239},[79,61208,53434],{"class":89},[79,61210,53420],{"class":239},[79,61212,61213],{"class":81,"line":457},[79,61214,454],{"emptyLinePlaceholder":453},[79,61216,61217,61219,61221],{"class":81,"line":462},[79,61218,392],{"class":239},[79,61220,53447],{"class":395},[79,61222,53420],{"class":239},[79,61224,61225,61227,61229,61231,61233,61235],{"class":81,"line":474},[79,61226,54257],{"class":239},[79,61228,53457],{"class":395},[79,61230,53460],{"class":85},[79,61232,244],{"class":239},[79,61234,53465],{"class":89},[79,61236,61237],{"class":239}," \u002F>\n",[79,61239,61240,61242,61244,61246,61248,61250,61252,61254,61256],{"class":81,"line":480},[79,61241,54257],{"class":239},[79,61243,53457],{"class":395},[79,61245,53476],{"class":85},[79,61247,244],{"class":239},[79,61249,53481],{"class":89},[79,61251,53484],{"class":85},[79,61253,244],{"class":239},[79,61255,53489],{"class":89},[79,61257,61237],{"class":239},[79,61259,61260,61262,61264,61266,61268,61270,61272,61274,61276],{"class":81,"line":486},[79,61261,54257],{"class":239},[79,61263,53457],{"class":395},[79,61265,2238],{"class":85},[79,61267,244],{"class":239},[79,61269,53504],{"class":89},[79,61271,53484],{"class":85},[79,61273,244],{"class":239},[79,61275,53511],{"class":89},[79,61277,61237],{"class":239},[79,61279,61280,61282,61284,61287,61289],{"class":81,"line":491},[79,61281,54257],{"class":239},[79,61283,53520],{"class":395},[79,61285,61286],{"class":239},">轮播图点击切换\u003C\u002F",[79,61288,53520],{"class":395},[79,61290,53420],{"class":239},[79,61292,61293,61295,61297],{"class":81,"line":497},[79,61294,54257],{"class":239},[79,61296,2287],{"class":395},[79,61298,53420],{"class":239},[79,61300,61301],{"class":81,"line":503},[79,61302,61303],{"class":239},"    * {\n",[79,61305,61306],{"class":81,"line":509},[79,61307,61308],{"class":239},"      box-sizing: border-box;\n",[79,61310,61311],{"class":81,"line":514},[79,61312,4402],{"class":239},[79,61314,61315],{"class":81,"line":520},[79,61316,454],{"emptyLinePlaceholder":453},[79,61318,61319],{"class":81,"line":526},[79,61320,61321],{"class":239},"    .slider {\n",[79,61323,61324],{"class":81,"line":532},[79,61325,61326],{"class":239},"      width: 560px;\n",[79,61328,61329],{"class":81,"line":537},[79,61330,61331],{"class":239},"      height: 400px;\n",[79,61333,61334],{"class":81,"line":543},[79,61335,61336],{"class":239},"      overflow: hidden;\n",[79,61338,61339],{"class":81,"line":549},[79,61340,4402],{"class":239},[79,61342,61343],{"class":81,"line":555},[79,61344,454],{"emptyLinePlaceholder":453},[79,61346,61347],{"class":81,"line":561},[79,61348,61349],{"class":239},"    .slider-wrapper {\n",[79,61351,61352],{"class":81,"line":567},[79,61353,61354],{"class":239},"      width: 100%;\n",[79,61356,61357],{"class":81,"line":573},[79,61358,61359],{"class":239},"      height: 320px;\n",[79,61361,61362],{"class":81,"line":579},[79,61363,4402],{"class":239},[79,61365,61366],{"class":81,"line":584},[79,61367,454],{"emptyLinePlaceholder":453},[79,61369,61370],{"class":81,"line":590},[79,61371,61372],{"class":239},"    .slider-wrapper img {\n",[79,61374,61375],{"class":81,"line":596},[79,61376,61354],{"class":239},[79,61378,61379],{"class":81,"line":602},[79,61380,61381],{"class":239},"      height: 100%;\n",[79,61383,61384],{"class":81,"line":608},[79,61385,61386],{"class":239},"      display: block;\n",[79,61388,61389],{"class":81,"line":614},[79,61390,4402],{"class":239},[79,61392,61393],{"class":81,"line":620},[79,61394,454],{"emptyLinePlaceholder":453},[79,61396,61397],{"class":81,"line":625},[79,61398,61399],{"class":239},"    .slider-footer {\n",[79,61401,61402],{"class":81,"line":630},[79,61403,61404],{"class":239},"      height: 80px;\n",[79,61406,61407],{"class":81,"line":648},[79,61408,61409],{"class":239},"      background-color: rgb(100, 67, 68);\n",[79,61411,61412],{"class":81,"line":659},[79,61413,61414],{"class":239},"      padding: 12px 12px 0 12px;\n",[79,61416,61417],{"class":81,"line":676},[79,61418,61419],{"class":239},"      position: relative;\n",[79,61421,61422],{"class":81,"line":708},[79,61423,4402],{"class":239},[79,61425,61426],{"class":81,"line":717},[79,61427,454],{"emptyLinePlaceholder":453},[79,61429,61430],{"class":81,"line":722},[79,61431,61432],{"class":239},"    .slider-footer .toggle {\n",[79,61434,61435],{"class":81,"line":727},[79,61436,61437],{"class":239},"      position: absolute;\n",[79,61439,61440],{"class":81,"line":738},[79,61441,61442],{"class":239},"      right: 0;\n",[79,61444,61445],{"class":81,"line":753},[79,61446,61447],{"class":239},"      top: 12px;\n",[79,61449,61450],{"class":81,"line":768},[79,61451,61452],{"class":239},"      display: flex;\n",[79,61454,61455],{"class":81,"line":776},[79,61456,4402],{"class":239},[79,61458,61459],{"class":81,"line":781},[79,61460,454],{"emptyLinePlaceholder":453},[79,61462,61463],{"class":81,"line":786},[79,61464,61465],{"class":239},"    .slider-footer .toggle button {\n",[79,61467,61468],{"class":81,"line":802},[79,61469,61470],{"class":239},"      margin-right: 12px;\n",[79,61472,61473],{"class":81,"line":815},[79,61474,61475],{"class":239},"      width: 28px;\n",[79,61477,61478],{"class":81,"line":828},[79,61479,61480],{"class":239},"      height: 28px;\n",[79,61482,61483],{"class":81,"line":842},[79,61484,61485],{"class":239},"      appearance: none;\n",[79,61487,61488],{"class":81,"line":859},[79,61489,61490],{"class":239},"      border: none;\n",[79,61492,61493],{"class":81,"line":878},[79,61494,61495],{"class":239},"      background: rgba(255, 255, 255, 0.1);\n",[79,61497,61498],{"class":81,"line":883},[79,61499,61500],{"class":239},"      color: #fff;\n",[79,61502,61503],{"class":81,"line":888},[79,61504,61505],{"class":239},"      border-radius: 4px;\n",[79,61507,61508],{"class":81,"line":904},[79,61509,61510],{"class":239},"      cursor: pointer;\n",[79,61512,61513],{"class":81,"line":919},[79,61514,4402],{"class":239},[79,61516,61517],{"class":81,"line":930},[79,61518,454],{"emptyLinePlaceholder":453},[79,61520,61521],{"class":81,"line":941},[79,61522,61523],{"class":239},"    .slider-footer .toggle button:hover {\n",[79,61525,61526],{"class":81,"line":946},[79,61527,61528],{"class":239},"      background: rgba(255, 255, 255, 0.2);\n",[79,61530,61531],{"class":81,"line":969},[79,61532,4402],{"class":239},[79,61534,61535],{"class":81,"line":975},[79,61536,454],{"emptyLinePlaceholder":453},[79,61538,61539],{"class":81,"line":989},[79,61540,61541],{"class":239},"    .slider-footer p {\n",[79,61543,61544],{"class":81,"line":1003},[79,61545,61546],{"class":239},"      margin: 0;\n",[79,61548,61549],{"class":81,"line":1019},[79,61550,61500],{"class":239},[79,61552,61553],{"class":81,"line":1024},[79,61554,61555],{"class":239},"      font-size: 18px;\n",[79,61557,61558],{"class":81,"line":1067},[79,61559,61560],{"class":239},"      margin-bottom: 10px;\n",[79,61562,61563],{"class":81,"line":1101},[79,61564,4402],{"class":239},[79,61566,61567],{"class":81,"line":1106},[79,61568,454],{"emptyLinePlaceholder":453},[79,61570,61571],{"class":81,"line":1112},[79,61572,61573],{"class":239},"    .slider-indicator {\n",[79,61575,61576],{"class":81,"line":1124},[79,61577,61546],{"class":239},[79,61579,61580],{"class":81,"line":1129},[79,61581,61582],{"class":239},"      padding: 0;\n",[79,61584,61585],{"class":81,"line":1150},[79,61586,61587],{"class":239},"      list-style: none;\n",[79,61589,61590],{"class":81,"line":1161},[79,61591,61452],{"class":239},[79,61593,61594],{"class":81,"line":1175},[79,61595,61596],{"class":239},"      align-items: center;\n",[79,61598,61599],{"class":81,"line":1194},[79,61600,4402],{"class":239},[79,61602,61603],{"class":81,"line":1211},[79,61604,454],{"emptyLinePlaceholder":453},[79,61606,61607],{"class":81,"line":1228},[79,61608,61609],{"class":239},"    .slider-indicator li {\n",[79,61611,61612],{"class":81,"line":1246},[79,61613,61614],{"class":239},"      width: 8px;\n",[79,61616,61617],{"class":81,"line":1251},[79,61618,61619],{"class":239},"      height: 8px;\n",[79,61621,61622],{"class":81,"line":1274},[79,61623,61624],{"class":239},"      margin: 4px;\n",[79,61626,61627],{"class":81,"line":1296},[79,61628,61629],{"class":239},"      border-radius: 50%;\n",[79,61631,61632],{"class":81,"line":1316},[79,61633,61634],{"class":239},"      background: #fff;\n",[79,61636,61637],{"class":81,"line":1321},[79,61638,61639],{"class":239},"      opacity: 0.4;\n",[79,61641,61642],{"class":81,"line":1326},[79,61643,61510],{"class":239},[79,61645,61646],{"class":81,"line":1342},[79,61647,4402],{"class":239},[79,61649,61650],{"class":81,"line":18985},[79,61651,454],{"emptyLinePlaceholder":453},[79,61653,61654],{"class":81,"line":18990},[79,61655,61656],{"class":239},"    .slider-indicator li.active {\n",[79,61658,61659],{"class":81,"line":18995},[79,61660,61661],{"class":239},"      width: 12px;\n",[79,61663,61664],{"class":81,"line":19009},[79,61665,61666],{"class":239},"      height: 12px;\n",[79,61668,61669],{"class":81,"line":19021},[79,61670,61671],{"class":239},"      opacity: 1;\n",[79,61673,61674],{"class":81,"line":19026},[79,61675,4402],{"class":239},[79,61677,61678,61680,61682],{"class":81,"line":19039},[79,61679,54529],{"class":239},[79,61681,2287],{"class":395},[79,61683,53420],{"class":239},[79,61685,61686,61688,61690],{"class":81,"line":19044},[79,61687,53898],{"class":239},[79,61689,53447],{"class":395},[79,61691,53420],{"class":239},[79,61693,61694],{"class":81,"line":19049},[79,61695,454],{"emptyLinePlaceholder":453},[79,61697,61698,61700,61702],{"class":81,"line":19054},[79,61699,392],{"class":239},[79,61701,53913],{"class":395},[79,61703,53420],{"class":239},[79,61705,61706,61708,61710,61712,61714,61717],{"class":81,"line":19067},[79,61707,54257],{"class":239},[79,61709,53724],{"class":395},[79,61711,55596],{"class":85},[79,61713,244],{"class":239},[79,61715,61716],{"class":89},"\"slider\"",[79,61718,53420],{"class":239},[79,61720,61721,61723,61725,61727,61729,61731],{"class":81,"line":19072},[79,61722,53454],{"class":239},[79,61724,53724],{"class":395},[79,61726,55596],{"class":85},[79,61728,244],{"class":239},[79,61730,57337],{"class":89},[79,61732,53420],{"class":239},[79,61734,61735,61737,61739,61741,61743,61746,61748,61750,61752],{"class":81,"line":34748},[79,61736,57344],{"class":239},[79,61738,3699],{"class":395},[79,61740,57349],{"class":85},[79,61742,244],{"class":239},[79,61744,61745],{"class":89},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[79,61747,57357],{"class":85},[79,61749,244],{"class":239},[79,61751,9846],{"class":89},[79,61753,61237],{"class":239},[79,61755,61756,61758,61760],{"class":81,"line":34754},[79,61757,53889],{"class":239},[79,61759,53724],{"class":395},[79,61761,53420],{"class":239},[79,61763,61764,61766,61768,61770,61772,61774],{"class":81,"line":34760},[79,61765,53454],{"class":239},[79,61767,53724],{"class":395},[79,61769,55596],{"class":85},[79,61771,244],{"class":239},[79,61773,57384],{"class":89},[79,61775,53420],{"class":239},[79,61777,61778,61780,61782,61785,61787],{"class":81,"line":34766},[79,61779,57344],{"class":239},[79,61781,19],{"class":395},[79,61783,61784],{"class":239},">对人类来说会不会太超前了？\u003C\u002F",[79,61786,19],{"class":395},[79,61788,53420],{"class":239},[79,61790,61791,61793,61795,61797,61799,61802],{"class":81,"line":34772},[79,61792,57344],{"class":239},[79,61794,3377],{"class":395},[79,61796,55596],{"class":85},[79,61798,244],{"class":239},[79,61800,61801],{"class":89},"\"slider-indicator\"",[79,61803,53420],{"class":239},[79,61805,61806,61808,61810,61812,61814,61817,61819,61821],{"class":81,"line":34783},[79,61807,57412],{"class":239},[79,61809,29],{"class":395},[79,61811,55596],{"class":85},[79,61813,244],{"class":239},[79,61815,61816],{"class":89},"\"active\"",[79,61818,57424],{"class":239},[79,61820,29],{"class":395},[79,61822,53420],{"class":239},[79,61824,61825,61827,61829,61831,61833],{"class":81,"line":34789},[79,61826,57412],{"class":239},[79,61828,29],{"class":395},[79,61830,57424],{"class":239},[79,61832,29],{"class":395},[79,61834,53420],{"class":239},[79,61836,61837,61839,61841,61843,61845],{"class":81,"line":34809},[79,61838,57412],{"class":239},[79,61840,29],{"class":395},[79,61842,57424],{"class":239},[79,61844,29],{"class":395},[79,61846,53420],{"class":239},[79,61848,61849,61851,61853,61855,61857],{"class":81,"line":34815},[79,61850,57412],{"class":239},[79,61852,29],{"class":395},[79,61854,57424],{"class":239},[79,61856,29],{"class":395},[79,61858,53420],{"class":239},[79,61860,61861,61863,61865,61867,61869],{"class":81,"line":34826},[79,61862,57412],{"class":239},[79,61864,29],{"class":395},[79,61866,57424],{"class":239},[79,61868,29],{"class":395},[79,61870,53420],{"class":239},[79,61872,61873,61875,61877,61879,61881],{"class":81,"line":34832},[79,61874,57412],{"class":239},[79,61876,29],{"class":395},[79,61878,57424],{"class":239},[79,61880,29],{"class":395},[79,61882,53420],{"class":239},[79,61884,61885,61887,61889,61891,61893],{"class":81,"line":34838},[79,61886,57412],{"class":239},[79,61888,29],{"class":395},[79,61890,57424],{"class":239},[79,61892,29],{"class":395},[79,61894,53420],{"class":239},[79,61896,61897,61899,61901,61903,61905],{"class":81,"line":34844},[79,61898,57412],{"class":239},[79,61900,29],{"class":395},[79,61902,57424],{"class":239},[79,61904,29],{"class":395},[79,61906,53420],{"class":239},[79,61908,61909,61911,61913],{"class":81,"line":34850},[79,61910,57517],{"class":239},[79,61912,3377],{"class":395},[79,61914,53420],{"class":239},[79,61916,61917,61919,61921,61923,61925,61928],{"class":81,"line":34856},[79,61918,57344],{"class":239},[79,61920,53724],{"class":395},[79,61922,55596],{"class":85},[79,61924,244],{"class":239},[79,61926,61927],{"class":89},"\"toggle\"",[79,61929,53420],{"class":239},[79,61931,61932,61934,61936,61938,61940,61943,61945,61948,61950,61952],{"class":81,"line":34862},[79,61933,57412],{"class":239},[79,61935,55997],{"class":395},[79,61937,55596],{"class":85},[79,61939,244],{"class":239},[79,61941,61942],{"class":89},"\"prev\"",[79,61944,3330],{"class":239},[79,61946,61947],{"class":96},"&lt;",[79,61949,53898],{"class":239},[79,61951,55997],{"class":395},[79,61953,53420],{"class":239},[79,61955,61956,61958,61960,61962,61964,61967,61969,61972,61974,61976],{"class":81,"line":34868},[79,61957,57412],{"class":239},[79,61959,55997],{"class":395},[79,61961,55596],{"class":85},[79,61963,244],{"class":239},[79,61965,61966],{"class":89},"\"next\"",[79,61968,3330],{"class":239},[79,61970,61971],{"class":96},"&gt;",[79,61973,53898],{"class":239},[79,61975,55997],{"class":395},[79,61977,53420],{"class":239},[79,61979,61980,61982,61984],{"class":81,"line":34888},[79,61981,57517],{"class":239},[79,61983,53724],{"class":395},[79,61985,53420],{"class":239},[79,61987,61988,61990,61992],{"class":81,"line":34894},[79,61989,53889],{"class":239},[79,61991,53724],{"class":395},[79,61993,53420],{"class":239},[79,61995,61996,61998,62000],{"class":81,"line":34910},[79,61997,54529],{"class":239},[79,61999,53724],{"class":395},[79,62001,53420],{"class":239},[79,62003,62004,62006,62008],{"class":81,"line":34916},[79,62005,54257],{"class":239},[79,62007,53926],{"class":395},[79,62009,53420],{"class":239},[79,62011,62012],{"class":81,"line":34930},[79,62013,62014],{"class":239},"    \u002F\u002F 1. 初始数据\n",[79,62016,62017],{"class":81,"line":34936},[79,62018,62019],{"class":239},"    const data = [\n",[79,62021,62022],{"class":81,"line":34951},[79,62023,62024],{"class":239},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[79,62026,62027],{"class":81,"line":34957},[79,62028,62029],{"class":239},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[79,62031,62032],{"class":81,"line":34966},[79,62033,62034],{"class":239},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[79,62036,62037],{"class":81,"line":34972},[79,62038,62039],{"class":239},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[79,62041,62042],{"class":81,"line":34981},[79,62043,62044],{"class":239},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[79,62046,62047],{"class":81,"line":34987},[79,62048,62049],{"class":239},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[79,62051,62052],{"class":81,"line":34993},[79,62053,62054],{"class":239},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[79,62056,62057],{"class":81,"line":35002},[79,62058,62059],{"class":239},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[79,62061,62062],{"class":81,"line":35008},[79,62063,55219],{"class":239},[79,62065,62066],{"class":81,"line":35019},[79,62067,62068],{"class":239},"    \u002F\u002F 获取元素\n",[79,62070,62071],{"class":81,"line":35025},[79,62072,62073],{"class":239},"    const img = document.querySelector('.slider-wrapper img')\n",[79,62075,62076],{"class":81,"line":35044},[79,62077,62078],{"class":239},"    const p = document.querySelector('.slider-footer p')\n",[79,62080,62081],{"class":81,"line":35050},[79,62082,62083],{"class":239},"    const footer = document.querySelector('.slider-footer')\n",[79,62085,62086],{"class":81,"line":35061},[79,62087,62088],{"class":239},"    \u002F\u002F 1. 右按钮业务\n",[79,62090,62091],{"class":81,"line":35067},[79,62092,62093],{"class":239},"    \u002F\u002F 1.1 获取右侧按钮 \n",[79,62095,62096],{"class":81,"line":35087},[79,62097,62098],{"class":239},"    const next = document.querySelector('.next')\n",[79,62100,62101],{"class":81,"line":35103},[79,62102,62103],{"class":239},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[79,62105,62106],{"class":81,"line":35109},[79,62107,62108],{"class":239},"    \u002F\u002F 1.2 注册点击事件\n",[79,62110,62111],{"class":81,"line":35123},[79,62112,454],{"emptyLinePlaceholder":453},[79,62114,62115],{"class":81,"line":35129},[79,62116,62117],{"class":239},"    next.addEventListener('click', function () {\n",[79,62119,62120],{"class":81,"line":35135},[79,62121,62122],{"class":239},"      \u002F\u002F console.log(11)\n",[79,62124,62125],{"class":81,"line":35146},[79,62126,62127],{"class":239},"      i++\n",[79,62129,62130],{"class":81,"line":35152},[79,62131,62132],{"class":239},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[79,62134,62135],{"class":81,"line":35158},[79,62136,62137],{"class":239},"      \u002F\u002F if (i >= 8) {\n",[79,62139,62140],{"class":81,"line":35168},[79,62141,62142],{"class":239},"      \u002F\u002F   i = 0\n",[79,62144,62145],{"class":81,"line":35174},[79,62146,62147],{"class":239},"      \u002F\u002F }\n",[79,62149,62150],{"class":81,"line":35185},[79,62151,62152],{"class":239},"      i = i >= data.length ? 0 : i\n",[79,62154,62155],{"class":81,"line":35191},[79,62156,62157],{"class":239},"      \u002F\u002F 1.3 得到对应的对象\n",[79,62159,62160],{"class":81,"line":35201},[79,62161,62162],{"class":239},"      \u002F\u002F console.log(data[i])\n",[79,62164,62165],{"class":81,"line":35206},[79,62166,62167],{"class":239},"      \u002F\u002F 调用函数\n",[79,62169,62170],{"class":81,"line":35212},[79,62171,62172],{"class":239},"      toggle()\n",[79,62174,62175],{"class":81,"line":35261},[79,62176,35576],{"class":239},[79,62178,62179],{"class":81,"line":35308},[79,62180,454],{"emptyLinePlaceholder":453},[79,62182,62183],{"class":81,"line":35313},[79,62184,62185],{"class":239},"    \u002F\u002F 2. 左侧按钮业务\n",[79,62187,62188],{"class":81,"line":35319},[79,62189,62190],{"class":239},"    \u002F\u002F 2.1 获取左侧按钮 \n",[79,62192,62193],{"class":81,"line":35338},[79,62194,62195],{"class":239},"    const prev = document.querySelector('.prev')\n",[79,62197,62198],{"class":81,"line":35344},[79,62199,62108],{"class":239},[79,62201,62202],{"class":81,"line":35364},[79,62203,62204],{"class":239},"    prev.addEventListener('click', function () {\n",[79,62206,62207],{"class":81,"line":35370},[79,62208,62209],{"class":239},"      i--\n",[79,62211,62212],{"class":81,"line":35376},[79,62213,62214],{"class":239},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[79,62216,62217],{"class":81,"line":35386},[79,62218,62219],{"class":239},"      \u002F\u002F if (i \u003C 0) {\n",[79,62221,62222],{"class":81,"line":35391},[79,62223,62224],{"class":239},"      \u002F\u002F   i = 7\n",[79,62226,62227],{"class":81,"line":35397},[79,62228,62147],{"class":239},[79,62230,62231],{"class":81,"line":35413},[79,62232,62233],{"class":239},"      i = i \u003C 0 ? data.length - 1 : i\n",[79,62235,62236],{"class":81,"line":35458},[79,62237,62157],{"class":239},[79,62239,62240],{"class":81,"line":35464},[79,62241,62162],{"class":239},[79,62243,62244],{"class":81,"line":35470},[79,62245,62167],{"class":239},[79,62247,62248],{"class":81,"line":35476},[79,62249,62172],{"class":239},[79,62251,62252],{"class":81,"line":35487},[79,62253,35576],{"class":239},[79,62255,62256],{"class":81,"line":35493},[79,62257,454],{"emptyLinePlaceholder":453},[79,62259,62260],{"class":81,"line":35499},[79,62261,62262],{"class":239},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[79,62264,62265],{"class":81,"line":35505},[79,62266,62267],{"class":239},"    function toggle() {\n",[79,62269,62270],{"class":81,"line":35523},[79,62271,62272],{"class":239},"      \u002F\u002F 1.4 渲染对应的数据\n",[79,62274,62275],{"class":81,"line":35537},[79,62276,62277],{"class":239},"      img.src = data[i].url\n",[79,62279,62280],{"class":81,"line":35546},[79,62281,62282],{"class":239},"      p.innerHTML = data[i].title\n",[79,62284,62285],{"class":81,"line":35555},[79,62286,62287],{"class":239},"      footer.style.backgroundColor = data[i].color\n",[79,62289,62290],{"class":81,"line":35564},[79,62291,62292],{"class":239},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[79,62294,62295],{"class":81,"line":35573},[79,62296,62297],{"class":239},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[79,62299,62300],{"class":81,"line":35579},[79,62301,62302],{"class":239},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[79,62304,62305],{"class":81,"line":35585},[79,62306,4402],{"class":239},[79,62308,62309],{"class":81,"line":35593},[79,62310,454],{"emptyLinePlaceholder":453},[79,62312,62313],{"class":81,"line":35598},[79,62314,62315],{"class":239},"    \u002F\u002F 3. 自动播放模块\n",[79,62317,62318],{"class":81,"line":35604},[79,62319,62320],{"class":239},"    let timerId = setInterval(function () {\n",[79,62322,62323],{"class":81,"line":35615},[79,62324,62325],{"class":239},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[79,62327,62328],{"class":81,"line":35621},[79,62329,62330],{"class":239},"      next.click()\n",[79,62332,62333],{"class":81,"line":35641},[79,62334,62335],{"class":239},"    }, 1000)\n",[79,62337,62338],{"class":81,"line":35647},[79,62339,454],{"emptyLinePlaceholder":453},[79,62341,62342],{"class":81,"line":35653},[79,62343,62344],{"class":239},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[79,62346,62347],{"class":81,"line":35659},[79,62348,62349],{"class":239},"    const slider = document.querySelector('.slider')\n",[79,62351,62352],{"class":81,"line":35676},[79,62353,62354],{"class":239},"    \u002F\u002F 注册事件\n",[79,62356,62357],{"class":81,"line":35682},[79,62358,62359],{"class":239},"    slider.addEventListener('mouseenter', function () {\n",[79,62361,62362],{"class":81,"line":35688},[79,62363,62364],{"class":239},"      \u002F\u002F 停止定时器\n",[79,62366,62367],{"class":81,"line":35694},[79,62368,62369],{"class":239},"      clearInterval(timerId)\n",[79,62371,62372],{"class":81,"line":35700},[79,62373,35576],{"class":239},[79,62375,62376],{"class":81,"line":35706},[79,62377,454],{"emptyLinePlaceholder":453},[79,62379,62380],{"class":81,"line":35733},[79,62381,62382],{"class":239},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[79,62384,62385],{"class":81,"line":35757},[79,62386,62354],{"class":239},[79,62388,62389],{"class":81,"line":35763},[79,62390,62391],{"class":239},"    slider.addEventListener('mouseleave', function () {\n",[79,62393,62394],{"class":81,"line":35769},[79,62395,62364],{"class":239},[79,62397,62398],{"class":81,"line":35775},[79,62399,62400],{"class":239},"      if (timerId) clearInterval(timerId)\n",[79,62402,62403],{"class":81,"line":35786},[79,62404,62405],{"class":239},"      \u002F\u002F 开启定时器\n",[79,62407,62408],{"class":81,"line":35797},[79,62409,62410],{"class":239},"      timerId = setInterval(function () {\n",[79,62412,62413],{"class":81,"line":35803},[79,62414,62415],{"class":239},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[79,62417,62418],{"class":81,"line":35820},[79,62419,62420],{"class":239},"        next.click()\n",[79,62422,62423],{"class":81,"line":35843},[79,62424,62425],{"class":239},"      }, 1000)\n",[79,62427,62428],{"class":81,"line":35866},[79,62429,35576],{"class":239},[79,62431,62432,62434,62436],{"class":81,"line":35872},[79,62433,54529],{"class":239},[79,62435,53926],{"class":395},[79,62437,53420],{"class":239},[79,62439,62440,62442,62444],{"class":81,"line":35877},[79,62441,53898],{"class":239},[79,62443,53913],{"class":395},[79,62445,53420],{"class":239},[79,62447,62448],{"class":81,"line":35886},[79,62449,454],{"emptyLinePlaceholder":453},[79,62451,62452,62454,62456],{"class":81,"line":35896},[79,62453,53898],{"class":239},[79,62455,52749],{"class":395},[79,62457,53420],{"class":239},[24137,62459,62461],{"id":62460},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62463,62464],{},"小米搜索框案例：",[51,62466,62468],{"className":52747,"code":62467,"language":52749,"meta":57,"style":57},"\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",[59,62469,62470,62480,62494,62498,62506,62520,62540,62560,62572,62580,62586,62596,62606,62618,62622,62626,62633,62637,62648,62652,62656,62663,62674,62687,62701,62705,62709,62718,62730,62742,62756,62769,62782,62800,62811,62815,62819,62828,62845,62849,62853,62860,62870,62880,62891,62904,62916,62932,62943,62955,62959,62963,62971,62982,62999,63011,63023,63034,63038,63042,63053,63064,63068,63076,63080,63088,63092,63100,63115,63138,63153,63184,63211,63238,63265,63292,63319,63346,63355,63363,63371,63376,63396,63416,63421,63426,63444,63449,63459,63464,63478,63483,63488,63505,63514,63526,63530,63538,63546,63550],{"__ignoreMap":57},[79,62471,62472,62474,62476,62478],{"class":81,"line":82},[79,62473,53411],{"class":239},[79,62475,53414],{"class":395},[79,62477,53417],{"class":85},[79,62479,53420],{"class":239},[79,62481,62482,62484,62486,62488,62490,62492],{"class":81,"line":167},[79,62483,392],{"class":239},[79,62485,52749],{"class":395},[79,62487,53429],{"class":85},[79,62489,244],{"class":239},[79,62491,53434],{"class":89},[79,62493,53420],{"class":239},[79,62495,62496],{"class":81,"line":178},[79,62497,454],{"emptyLinePlaceholder":453},[79,62499,62500,62502,62504],{"class":81,"line":457},[79,62501,392],{"class":239},[79,62503,53447],{"class":395},[79,62505,53420],{"class":239},[79,62507,62508,62510,62512,62514,62516,62518],{"class":81,"line":462},[79,62509,53454],{"class":239},[79,62511,53457],{"class":395},[79,62513,53460],{"class":85},[79,62515,244],{"class":239},[79,62517,53465],{"class":89},[79,62519,53420],{"class":239},[79,62521,62522,62524,62526,62528,62530,62532,62534,62536,62538],{"class":81,"line":474},[79,62523,53454],{"class":239},[79,62525,53457],{"class":395},[79,62527,53476],{"class":85},[79,62529,244],{"class":239},[79,62531,53481],{"class":89},[79,62533,53484],{"class":85},[79,62535,244],{"class":239},[79,62537,53489],{"class":89},[79,62539,53420],{"class":239},[79,62541,62542,62544,62546,62548,62550,62552,62554,62556,62558],{"class":81,"line":480},[79,62543,53454],{"class":239},[79,62545,53457],{"class":395},[79,62547,2238],{"class":85},[79,62549,244],{"class":239},[79,62551,53504],{"class":89},[79,62553,53484],{"class":85},[79,62555,244],{"class":239},[79,62557,53511],{"class":89},[79,62559,53420],{"class":239},[79,62561,62562,62564,62566,62568,62570],{"class":81,"line":486},[79,62563,53454],{"class":239},[79,62565,53520],{"class":395},[79,62567,53523],{"class":239},[79,62569,53520],{"class":395},[79,62571,53420],{"class":239},[79,62573,62574,62576,62578],{"class":81,"line":491},[79,62575,53454],{"class":239},[79,62577,2287],{"class":395},[79,62579,53420],{"class":239},[79,62581,62582,62584],{"class":81,"line":497},[79,62583,53540],{"class":395},[79,62585,17732],{"class":239},[79,62587,62588,62590,62592,62594],{"class":81,"line":503},[79,62589,53547],{"class":96},[79,62591,53550],{"class":239},[79,62593,1030],{"class":96},[79,62595,3531],{"class":239},[79,62597,62598,62600,62602,62604],{"class":81,"line":509},[79,62599,53559],{"class":96},[79,62601,53550],{"class":239},[79,62603,1030],{"class":96},[79,62605,3531],{"class":239},[79,62607,62608,62611,62613,62616],{"class":81,"line":514},[79,62609,62610],{"class":96},"            box-sizing",[79,62612,53550],{"class":239},[79,62614,62615],{"class":96},"border-box",[79,62617,3531],{"class":239},[79,62619,62620],{"class":81,"line":520},[79,62621,4742],{"class":239},[79,62623,62624],{"class":81,"line":526},[79,62625,454],{"emptyLinePlaceholder":453},[79,62627,62628,62631],{"class":81,"line":532},[79,62629,62630],{"class":395},"        ul",[79,62632,17732],{"class":239},[79,62634,62635],{"class":81,"line":537},[79,62636,454],{"emptyLinePlaceholder":453},[79,62638,62639,62642,62644,62646],{"class":81,"line":543},[79,62640,62641],{"class":96},"            list-style",[79,62643,53550],{"class":239},[79,62645,56847],{"class":96},[79,62647,3531],{"class":239},[79,62649,62650],{"class":81,"line":549},[79,62651,4742],{"class":239},[79,62653,62654],{"class":81,"line":555},[79,62655,454],{"emptyLinePlaceholder":453},[79,62657,62658,62661],{"class":81,"line":561},[79,62659,62660],{"class":85},"        .mi",[79,62662,17732],{"class":239},[79,62664,62665,62668,62670,62672],{"class":81,"line":567},[79,62666,62667],{"class":96},"            position",[79,62669,53550],{"class":239},[79,62671,56874],{"class":96},[79,62673,3531],{"class":239},[79,62675,62676,62678,62680,62683,62685],{"class":81,"line":573},[79,62677,53597],{"class":96},[79,62679,53550],{"class":239},[79,62681,62682],{"class":96},"223",[79,62684,53605],{"class":243},[79,62686,3531],{"class":239},[79,62688,62689,62691,62693,62695,62697,62699],{"class":81,"line":579},[79,62690,53547],{"class":96},[79,62692,53550],{"class":239},[79,62694,2686],{"class":96},[79,62696,53605],{"class":243},[79,62698,53669],{"class":96},[79,62700,3531],{"class":239},[79,62702,62703],{"class":81,"line":584},[79,62704,4742],{"class":239},[79,62706,62707],{"class":81,"line":590},[79,62708,454],{"emptyLinePlaceholder":453},[79,62710,62711,62713,62716],{"class":81,"line":596},[79,62712,62660],{"class":85},[79,62714,62715],{"class":395}," input",[79,62717,17732],{"class":239},[79,62719,62720,62722,62724,62726,62728],{"class":81,"line":602},[79,62721,53597],{"class":96},[79,62723,53550],{"class":239},[79,62725,62682],{"class":96},[79,62727,53605],{"class":243},[79,62729,3531],{"class":239},[79,62731,62732,62734,62736,62738,62740],{"class":81,"line":608},[79,62733,53612],{"class":96},[79,62735,53550],{"class":239},[79,62737,2980],{"class":96},[79,62739,53605],{"class":243},[79,62741,3531],{"class":239},[79,62743,62744,62746,62748,62750,62752,62754],{"class":81,"line":614},[79,62745,53559],{"class":96},[79,62747,53550],{"class":239},[79,62749,1030],{"class":96},[79,62751,4253],{"class":96},[79,62753,53605],{"class":243},[79,62755,3531],{"class":239},[79,62757,62758,62761,62763,62765,62767],{"class":81,"line":620},[79,62759,62760],{"class":96},"            font-size",[79,62762,53550],{"class":239},[79,62764,2922],{"class":96},[79,62766,53605],{"class":243},[79,62768,3531],{"class":239},[79,62770,62771,62774,62776,62778,62780],{"class":81,"line":625},[79,62772,62773],{"class":96},"            line-height",[79,62775,53550],{"class":239},[79,62777,2980],{"class":96},[79,62779,53605],{"class":243},[79,62781,3531],{"class":239},[79,62783,62784,62787,62789,62791,62793,62795,62798],{"class":81,"line":630},[79,62785,62786],{"class":96},"            border",[79,62788,53550],{"class":239},[79,62790,1072],{"class":96},[79,62792,53605],{"class":243},[79,62794,53634],{"class":96},[79,62796,62797],{"class":96}," #e0e0e0",[79,62799,3531],{"class":239},[79,62801,62802,62805,62807,62809],{"class":81,"line":648},[79,62803,62804],{"class":96},"            outline",[79,62806,53550],{"class":239},[79,62808,56847],{"class":96},[79,62810,3531],{"class":239},[79,62812,62813],{"class":81,"line":659},[79,62814,4742],{"class":239},[79,62816,62817],{"class":81,"line":676},[79,62818,454],{"emptyLinePlaceholder":453},[79,62820,62821,62823,62826],{"class":81,"line":708},[79,62822,62660],{"class":85},[79,62824,62825],{"class":85}," .search",[79,62827,17732],{"class":239},[79,62829,62830,62832,62834,62836,62838,62840,62843],{"class":81,"line":717},[79,62831,62786],{"class":96},[79,62833,53550],{"class":239},[79,62835,1072],{"class":96},[79,62837,53605],{"class":243},[79,62839,53634],{"class":96},[79,62841,62842],{"class":96}," #ff6700",[79,62844,3531],{"class":239},[79,62846,62847],{"class":81,"line":722},[79,62848,4742],{"class":239},[79,62850,62851],{"class":81,"line":727},[79,62852,454],{"emptyLinePlaceholder":453},[79,62854,62855,62858],{"class":81,"line":738},[79,62856,62857],{"class":85},"        .result-list",[79,62859,17732],{"class":239},[79,62861,62862,62864,62866,62868],{"class":81,"line":753},[79,62863,53585],{"class":96},[79,62865,53550],{"class":239},[79,62867,56847],{"class":96},[79,62869,3531],{"class":239},[79,62871,62872,62874,62876,62878],{"class":81,"line":768},[79,62873,62667],{"class":96},[79,62875,53550],{"class":239},[79,62877,56941],{"class":96},[79,62879,3531],{"class":239},[79,62881,62882,62885,62887,62889],{"class":81,"line":776},[79,62883,62884],{"class":96},"            left",[79,62886,53550],{"class":239},[79,62888,1030],{"class":96},[79,62890,3531],{"class":239},[79,62892,62893,62896,62898,62900,62902],{"class":81,"line":781},[79,62894,62895],{"class":96},"            top",[79,62897,53550],{"class":239},[79,62899,2980],{"class":96},[79,62901,53605],{"class":243},[79,62903,3531],{"class":239},[79,62905,62906,62908,62910,62912,62914],{"class":81,"line":786},[79,62907,53597],{"class":96},[79,62909,53550],{"class":239},[79,62911,62682],{"class":96},[79,62913,53605],{"class":243},[79,62915,3531],{"class":239},[79,62917,62918,62920,62922,62924,62926,62928,62930],{"class":81,"line":802},[79,62919,62786],{"class":96},[79,62921,53550],{"class":239},[79,62923,1072],{"class":96},[79,62925,53605],{"class":243},[79,62927,53634],{"class":96},[79,62929,62842],{"class":96},[79,62931,3531],{"class":239},[79,62933,62934,62937,62939,62941],{"class":81,"line":815},[79,62935,62936],{"class":96},"            border-top",[79,62938,53550],{"class":239},[79,62940,1030],{"class":96},[79,62942,3531],{"class":239},[79,62944,62945,62948,62950,62953],{"class":81,"line":828},[79,62946,62947],{"class":96},"            background",[79,62949,53550],{"class":239},[79,62951,62952],{"class":96},"#fff",[79,62954,3531],{"class":239},[79,62956,62957],{"class":81,"line":842},[79,62958,4742],{"class":239},[79,62960,62961],{"class":81,"line":859},[79,62962,454],{"emptyLinePlaceholder":453},[79,62964,62965,62967,62969],{"class":81,"line":878},[79,62966,62857],{"class":85},[79,62968,3635],{"class":395},[79,62970,17732],{"class":239},[79,62972,62973,62975,62977,62980],{"class":81,"line":883},[79,62974,53585],{"class":96},[79,62976,53550],{"class":239},[79,62978,62979],{"class":96},"block",[79,62981,3531],{"class":239},[79,62983,62984,62986,62988,62990,62992,62995,62997],{"class":81,"line":888},[79,62985,53559],{"class":96},[79,62987,53550],{"class":239},[79,62989,2718],{"class":96},[79,62991,53605],{"class":243},[79,62993,62994],{"class":96}," 15",[79,62996,53605],{"class":243},[79,62998,3531],{"class":239},[79,63000,63001,63003,63005,63007,63009],{"class":81,"line":904},[79,63002,62760],{"class":96},[79,63004,53550],{"class":239},[79,63006,2872],{"class":96},[79,63008,53605],{"class":243},[79,63010,3531],{"class":239},[79,63012,63013,63016,63018,63021],{"class":81,"line":919},[79,63014,63015],{"class":96},"            color",[79,63017,53550],{"class":239},[79,63019,63020],{"class":96},"#424242",[79,63022,3531],{"class":239},[79,63024,63025,63028,63030,63032],{"class":81,"line":930},[79,63026,63027],{"class":96},"            text-decoration",[79,63029,53550],{"class":239},[79,63031,56847],{"class":96},[79,63033,3531],{"class":239},[79,63035,63036],{"class":81,"line":941},[79,63037,4742],{"class":239},[79,63039,63040],{"class":81,"line":946},[79,63041,454],{"emptyLinePlaceholder":453},[79,63043,63044,63046,63048,63051],{"class":81,"line":969},[79,63045,62857],{"class":85},[79,63047,3635],{"class":395},[79,63049,63050],{"class":85},":hover",[79,63052,17732],{"class":239},[79,63054,63055,63057,63059,63062],{"class":81,"line":975},[79,63056,53753],{"class":96},[79,63058,53550],{"class":239},[79,63060,63061],{"class":96},"#eee",[79,63063,3531],{"class":239},[79,63065,63066],{"class":81,"line":989},[79,63067,4742],{"class":239},[79,63069,63070,63072,63074],{"class":81,"line":1003},[79,63071,53889],{"class":239},[79,63073,2287],{"class":395},[79,63075,53420],{"class":239},[79,63077,63078],{"class":81,"line":1019},[79,63079,454],{"emptyLinePlaceholder":453},[79,63081,63082,63084,63086],{"class":81,"line":1024},[79,63083,53898],{"class":239},[79,63085,53447],{"class":395},[79,63087,53420],{"class":239},[79,63089,63090],{"class":81,"line":1067},[79,63091,454],{"emptyLinePlaceholder":453},[79,63093,63094,63096,63098],{"class":81,"line":1101},[79,63095,392],{"class":239},[79,63097,53913],{"class":395},[79,63099,53420],{"class":239},[79,63101,63102,63104,63106,63108,63110,63113],{"class":81,"line":1106},[79,63103,53454],{"class":239},[79,63105,53724],{"class":395},[79,63107,55596],{"class":85},[79,63109,244],{"class":239},[79,63111,63112],{"class":89},"\"mi\"",[79,63114,53420],{"class":239},[79,63116,63117,63119,63121,63123,63125,63128,63131,63133,63136],{"class":81,"line":1112},[79,63118,57412],{"class":239},[79,63120,55931],{"class":395},[79,63122,55934],{"class":85},[79,63124,244],{"class":239},[79,63126,63127],{"class":89},"\"search\"",[79,63129,63130],{"class":85}," placeholder",[79,63132,244],{"class":239},[79,63134,63135],{"class":89},"\"小米笔记本\"",[79,63137,53420],{"class":239},[79,63139,63140,63142,63144,63146,63148,63151],{"class":81,"line":1124},[79,63141,57412],{"class":239},[79,63143,3377],{"class":395},[79,63145,55596],{"class":85},[79,63147,244],{"class":239},[79,63149,63150],{"class":89},"\"result-list\"",[79,63152,53420],{"class":239},[79,63154,63155,63158,63160,63163,63165,63168,63170,63173,63176,63178,63180,63182],{"class":81,"line":1129},[79,63156,63157],{"class":239},"            \u003C",[79,63159,29],{"class":395},[79,63161,63162],{"class":239},">\u003C",[79,63164,2614],{"class":395},[79,63166,63167],{"class":85}," href",[79,63169,244],{"class":239},[79,63171,63172],{"class":89},"\"#\"",[79,63174,63175],{"class":239},">全部商品\u003C\u002F",[79,63177,2614],{"class":395},[79,63179,57424],{"class":239},[79,63181,29],{"class":395},[79,63183,53420],{"class":239},[79,63185,63186,63188,63190,63192,63194,63196,63198,63200,63203,63205,63207,63209],{"class":81,"line":1150},[79,63187,63157],{"class":239},[79,63189,29],{"class":395},[79,63191,63162],{"class":239},[79,63193,2614],{"class":395},[79,63195,63167],{"class":85},[79,63197,244],{"class":239},[79,63199,63172],{"class":89},[79,63201,63202],{"class":239},">小米11\u003C\u002F",[79,63204,2614],{"class":395},[79,63206,57424],{"class":239},[79,63208,29],{"class":395},[79,63210,53420],{"class":239},[79,63212,63213,63215,63217,63219,63221,63223,63225,63227,63230,63232,63234,63236],{"class":81,"line":1161},[79,63214,63157],{"class":239},[79,63216,29],{"class":395},[79,63218,63162],{"class":239},[79,63220,2614],{"class":395},[79,63222,63167],{"class":85},[79,63224,244],{"class":239},[79,63226,63172],{"class":89},[79,63228,63229],{"class":239},">小米10S\u003C\u002F",[79,63231,2614],{"class":395},[79,63233,57424],{"class":239},[79,63235,29],{"class":395},[79,63237,53420],{"class":239},[79,63239,63240,63242,63244,63246,63248,63250,63252,63254,63257,63259,63261,63263],{"class":81,"line":1175},[79,63241,63157],{"class":239},[79,63243,29],{"class":395},[79,63245,63162],{"class":239},[79,63247,2614],{"class":395},[79,63249,63167],{"class":85},[79,63251,244],{"class":239},[79,63253,63172],{"class":89},[79,63255,63256],{"class":239},">小米笔记本\u003C\u002F",[79,63258,2614],{"class":395},[79,63260,57424],{"class":239},[79,63262,29],{"class":395},[79,63264,53420],{"class":239},[79,63266,63267,63269,63271,63273,63275,63277,63279,63281,63284,63286,63288,63290],{"class":81,"line":1194},[79,63268,63157],{"class":239},[79,63270,29],{"class":395},[79,63272,63162],{"class":239},[79,63274,2614],{"class":395},[79,63276,63167],{"class":85},[79,63278,244],{"class":239},[79,63280,63172],{"class":89},[79,63282,63283],{"class":239},">小米手机\u003C\u002F",[79,63285,2614],{"class":395},[79,63287,57424],{"class":239},[79,63289,29],{"class":395},[79,63291,53420],{"class":239},[79,63293,63294,63296,63298,63300,63302,63304,63306,63308,63311,63313,63315,63317],{"class":81,"line":1211},[79,63295,63157],{"class":239},[79,63297,29],{"class":395},[79,63299,63162],{"class":239},[79,63301,2614],{"class":395},[79,63303,63167],{"class":85},[79,63305,244],{"class":239},[79,63307,63172],{"class":89},[79,63309,63310],{"class":239},">黑鲨4\u003C\u002F",[79,63312,2614],{"class":395},[79,63314,57424],{"class":239},[79,63316,29],{"class":395},[79,63318,53420],{"class":239},[79,63320,63321,63323,63325,63327,63329,63331,63333,63335,63338,63340,63342,63344],{"class":81,"line":1228},[79,63322,63157],{"class":239},[79,63324,29],{"class":395},[79,63326,63162],{"class":239},[79,63328,2614],{"class":395},[79,63330,63167],{"class":85},[79,63332,244],{"class":239},[79,63334,63172],{"class":89},[79,63336,63337],{"class":239},">空调\u003C\u002F",[79,63339,2614],{"class":395},[79,63341,57424],{"class":239},[79,63343,29],{"class":395},[79,63345,53420],{"class":239},[79,63347,63348,63351,63353],{"class":81,"line":1246},[79,63349,63350],{"class":239},"        \u003C\u002F",[79,63352,3377],{"class":395},[79,63354,53420],{"class":239},[79,63356,63357,63359,63361],{"class":81,"line":1251},[79,63358,53889],{"class":239},[79,63360,53724],{"class":395},[79,63362,53420],{"class":239},[79,63364,63365,63367,63369],{"class":81,"line":1274},[79,63366,53454],{"class":239},[79,63368,53926],{"class":395},[79,63370,53420],{"class":239},[79,63372,63373],{"class":81,"line":1296},[79,63374,63375],{"class":2440},"        \u002F\u002F 1. 获取元素\n",[79,63377,63378,63381,63383,63385,63387,63389,63391,63394],{"class":81,"line":1316},[79,63379,63380],{"class":243},"        const",[79,63382,62715],{"class":96},[79,63384,468],{"class":243},[79,63386,56506],{"class":239},[79,63388,56509],{"class":85},[79,63390,685],{"class":239},[79,63392,63393],{"class":89},"'[type=search]'",[79,63395,253],{"class":239},[79,63397,63398,63400,63403,63405,63407,63409,63411,63414],{"class":81,"line":1321},[79,63399,63380],{"class":243},[79,63401,63402],{"class":96}," ul",[79,63404,468],{"class":243},[79,63406,56506],{"class":239},[79,63408,56509],{"class":85},[79,63410,685],{"class":239},[79,63412,63413],{"class":89},"'.result-list'",[79,63415,253],{"class":239},[79,63417,63418],{"class":81,"line":1326},[79,63419,63420],{"class":2440},"        \u002F\u002F console.log(input)\n",[79,63422,63423],{"class":81,"line":1342},[79,63424,63425],{"class":2440},"        \u002F\u002F 2. 监听事件 获得焦点\n",[79,63427,63428,63431,63433,63435,63438,63440,63442],{"class":81,"line":18985},[79,63429,63430],{"class":239},"        input.",[79,63432,59923],{"class":85},[79,63434,685],{"class":239},[79,63436,63437],{"class":89},"'focus'",[79,63439,1060],{"class":239},[79,63441,56559],{"class":243},[79,63443,56562],{"class":239},[79,63445,63446],{"class":81,"line":18990},[79,63447,63448],{"class":2440},"            \u002F\u002F ul显示\n",[79,63450,63451,63454,63456],{"class":81,"line":18995},[79,63452,63453],{"class":239},"            ul.style.display ",[79,63455,244],{"class":243},[79,63457,63458],{"class":89}," 'block'\n",[79,63460,63461],{"class":81,"line":19009},[79,63462,63463],{"class":2440},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[79,63465,63466,63469,63471,63473,63476],{"class":81,"line":19021},[79,63467,63468],{"class":239},"            input.classList.",[79,63470,7530],{"class":85},[79,63472,685],{"class":239},[79,63474,63475],{"class":89},"'search'",[79,63477,253],{"class":239},[79,63479,63480],{"class":81,"line":19026},[79,63481,63482],{"class":239},"        })\n",[79,63484,63485],{"class":81,"line":19039},[79,63486,63487],{"class":2440},"        \u002F\u002F 3. 监听事件 失去焦点\n",[79,63489,63490,63492,63494,63496,63499,63501,63503],{"class":81,"line":19044},[79,63491,63430],{"class":239},[79,63493,59923],{"class":85},[79,63495,685],{"class":239},[79,63497,63498],{"class":89},"'blur'",[79,63500,1060],{"class":239},[79,63502,56559],{"class":243},[79,63504,56562],{"class":239},[79,63506,63507,63509,63511],{"class":81,"line":19049},[79,63508,63453],{"class":239},[79,63510,244],{"class":243},[79,63512,63513],{"class":89}," 'none'\n",[79,63515,63516,63518,63520,63522,63524],{"class":81,"line":19054},[79,63517,63468],{"class":239},[79,63519,59116],{"class":85},[79,63521,685],{"class":239},[79,63523,63475],{"class":89},[79,63525,253],{"class":239},[79,63527,63528],{"class":81,"line":19067},[79,63529,63482],{"class":239},[79,63531,63532,63534,63536],{"class":81,"line":19072},[79,63533,53889],{"class":239},[79,63535,53926],{"class":395},[79,63537,53420],{"class":239},[79,63539,63540,63542,63544],{"class":81,"line":34748},[79,63541,53898],{"class":239},[79,63543,53913],{"class":395},[79,63545,53420],{"class":239},[79,63547,63548],{"class":81,"line":34754},[79,63549,454],{"emptyLinePlaceholder":453},[79,63551,63552,63554,63556],{"class":81,"line":34760},[79,63553,53898],{"class":239},[79,63555,52749],{"class":395},[79,63557,53420],{"class":239},[24137,63559,63561],{"id":63560},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63563,63564],{},"评论字数统计案例",[19,63566,63567],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63569,63570],{},"牢记focus伪类选择器",[53457,63572],{"charSet":63573},"UTF-8",[53457,63575],{"name":63576,"content":63577},"viewport","width=device-width, initial-scale=1.0",[53520,63579,63580],{},"Document",[2287,63582,63583],{},"\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",[55931,63585],{"type":56},[3377,63587,63588,63591],{},[29,63589,63590],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[29,63592,63593],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[51,63595,63597],{"className":52747,"code":63596,"language":52749,"meta":57,"style":57},"\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",[59,63598,63599,63609,63623,63627,63635,63649,63669,63689,63702,63710,63717,63730,63744,63754,63764,63768,63772,63779,63791,63803,63815,63827,63856,63869,63873,63877,63886,63897,63909,63920,63931,63943,63954,63966,63982,63994,63998,64002,64013,64024,64034,64046,64050,64054,64062,64073,64083,64094,64106,64119,64131,64143,64147,64151,64160,64172,64183,64196,64207,64221,64225,64229,64236,64248,64260,64270,64274,64278,64287,64299,64309,64313,64317,64328,64338,64357,64370,64374,64378,64388,64398,64402,64406,64417,64428,64440,64452,64456,64460,64471,64482,64496,64500,64504,64515,64525,64537,64541,64549,64557,64561,64569,64584,64603,64643,64656,64664,64678,64698,64706,64721,64744,64762,64777,64797,64817,64837,64845,64853,64861,64869,64889,64909,64914,64931,64940,64944,64949,64965,64973,64977,64982,64999,65004,65029,65033,65037,65042,65047,65055,65063,65067],{"__ignoreMap":57},[79,63600,63601,63603,63605,63607],{"class":81,"line":82},[79,63602,53411],{"class":239},[79,63604,53414],{"class":395},[79,63606,53417],{"class":85},[79,63608,53420],{"class":239},[79,63610,63611,63613,63615,63617,63619,63621],{"class":81,"line":167},[79,63612,392],{"class":239},[79,63614,52749],{"class":395},[79,63616,53429],{"class":85},[79,63618,244],{"class":239},[79,63620,53434],{"class":89},[79,63622,53420],{"class":239},[79,63624,63625],{"class":81,"line":178},[79,63626,454],{"emptyLinePlaceholder":453},[79,63628,63629,63631,63633],{"class":81,"line":457},[79,63630,392],{"class":239},[79,63632,53447],{"class":395},[79,63634,53420],{"class":239},[79,63636,63637,63639,63641,63643,63645,63647],{"class":81,"line":462},[79,63638,54257],{"class":239},[79,63640,53457],{"class":395},[79,63642,53460],{"class":85},[79,63644,244],{"class":239},[79,63646,53465],{"class":89},[79,63648,53420],{"class":239},[79,63650,63651,63653,63655,63657,63659,63661,63663,63665,63667],{"class":81,"line":474},[79,63652,54257],{"class":239},[79,63654,53457],{"class":395},[79,63656,53476],{"class":85},[79,63658,244],{"class":239},[79,63660,53481],{"class":89},[79,63662,53484],{"class":85},[79,63664,244],{"class":239},[79,63666,53489],{"class":89},[79,63668,53420],{"class":239},[79,63670,63671,63673,63675,63677,63679,63681,63683,63685,63687],{"class":81,"line":480},[79,63672,54257],{"class":239},[79,63674,53457],{"class":395},[79,63676,2238],{"class":85},[79,63678,244],{"class":239},[79,63680,53504],{"class":89},[79,63682,53484],{"class":85},[79,63684,244],{"class":239},[79,63686,53511],{"class":89},[79,63688,53420],{"class":239},[79,63690,63691,63693,63695,63698,63700],{"class":81,"line":486},[79,63692,54257],{"class":239},[79,63694,53520],{"class":395},[79,63696,63697],{"class":239},">评论回车发布\u003C\u002F",[79,63699,53520],{"class":395},[79,63701,53420],{"class":239},[79,63703,63704,63706,63708],{"class":81,"line":491},[79,63705,54257],{"class":239},[79,63707,2287],{"class":395},[79,63709,53420],{"class":239},[79,63711,63712,63715],{"class":81,"line":497},[79,63713,63714],{"class":85},"    .wrapper",[79,63716,17732],{"class":239},[79,63718,63719,63722,63724,63726,63728],{"class":81,"line":503},[79,63720,63721],{"class":96},"      min-width",[79,63723,53550],{"class":239},[79,63725,6189],{"class":96},[79,63727,53605],{"class":243},[79,63729,3531],{"class":239},[79,63731,63732,63735,63737,63740,63742],{"class":81,"line":509},[79,63733,63734],{"class":96},"      max-width",[79,63736,53550],{"class":239},[79,63738,63739],{"class":96},"800",[79,63741,53605],{"class":243},[79,63743,3531],{"class":239},[79,63745,63746,63748,63750,63752],{"class":81,"line":514},[79,63747,57119],{"class":96},[79,63749,53550],{"class":239},[79,63751,53590],{"class":96},[79,63753,3531],{"class":239},[79,63755,63756,63758,63760,63762],{"class":81,"line":520},[79,63757,57130],{"class":96},[79,63759,53550],{"class":239},[79,63761,53693],{"class":96},[79,63763,3531],{"class":239},[79,63765,63766],{"class":81,"line":526},[79,63767,4402],{"class":239},[79,63769,63770],{"class":81,"line":532},[79,63771,454],{"emptyLinePlaceholder":453},[79,63773,63774,63777],{"class":81,"line":537},[79,63775,63776],{"class":85},"    .avatar",[79,63778,17732],{"class":239},[79,63780,63781,63783,63785,63787,63789],{"class":81,"line":543},[79,63782,56881],{"class":96},[79,63784,53550],{"class":239},[79,63786,2980],{"class":96},[79,63788,53605],{"class":243},[79,63790,3531],{"class":239},[79,63792,63793,63795,63797,63799,63801],{"class":81,"line":549},[79,63794,56895],{"class":96},[79,63796,53550],{"class":239},[79,63798,2980],{"class":96},[79,63800,53605],{"class":243},[79,63802,3531],{"class":239},[79,63804,63805,63807,63809,63811,63813],{"class":81,"line":555},[79,63806,57244],{"class":96},[79,63808,53550],{"class":239},[79,63810,3029],{"class":96},[79,63812,1137],{"class":243},[79,63814,3531],{"class":239},[79,63816,63817,63820,63822,63825],{"class":81,"line":561},[79,63818,63819],{"class":96},"      overflow",[79,63821,53550],{"class":239},[79,63823,63824],{"class":96},"hidden",[79,63826,3531],{"class":239},[79,63828,63829,63832,63834,63837,63839,63842,63844,63847,63849,63851,63854],{"class":81,"line":567},[79,63830,63831],{"class":96},"      background",[79,63833,53550],{"class":239},[79,63835,63836],{"class":96},"url",[79,63838,685],{"class":239},[79,63840,63841],{"class":7412},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[79,63843,15876],{"class":239},[79,63845,63846],{"class":96},"no-repeat",[79,63848,19283],{"class":96},[79,63850,27114],{"class":239},[79,63852,63853],{"class":96},"cover",[79,63855,3531],{"class":239},[79,63857,63858,63861,63863,63865,63867],{"class":81,"line":573},[79,63859,63860],{"class":96},"      margin-right",[79,63862,53550],{"class":239},[79,63864,3073],{"class":96},[79,63866,53605],{"class":243},[79,63868,3531],{"class":239},[79,63870,63871],{"class":81,"line":579},[79,63872,4402],{"class":239},[79,63874,63875],{"class":81,"line":584},[79,63876,454],{"emptyLinePlaceholder":453},[79,63878,63879,63881,63884],{"class":81,"line":590},[79,63880,63714],{"class":85},[79,63882,63883],{"class":395}," textarea",[79,63885,17732],{"class":239},[79,63887,63888,63891,63893,63895],{"class":81,"line":596},[79,63889,63890],{"class":96},"      outline",[79,63892,53550],{"class":239},[79,63894,56847],{"class":96},[79,63896,3531],{"class":239},[79,63898,63899,63902,63904,63907],{"class":81,"line":602},[79,63900,63901],{"class":96},"      border-color",[79,63903,53550],{"class":239},[79,63905,63906],{"class":96},"transparent",[79,63908,3531],{"class":239},[79,63910,63911,63914,63916,63918],{"class":81,"line":608},[79,63912,63913],{"class":96},"      resize",[79,63915,53550],{"class":239},[79,63917,56847],{"class":96},[79,63919,3531],{"class":239},[79,63921,63922,63924,63926,63929],{"class":81,"line":614},[79,63923,63831],{"class":96},[79,63925,53550],{"class":239},[79,63927,63928],{"class":96},"#f5f5f5",[79,63930,3531],{"class":239},[79,63932,63933,63935,63937,63939,63941],{"class":81,"line":620},[79,63934,57244],{"class":96},[79,63936,53550],{"class":239},[79,63938,2668],{"class":96},[79,63940,53605],{"class":243},[79,63942,3531],{"class":239},[79,63944,63945,63948,63950,63952],{"class":81,"line":625},[79,63946,63947],{"class":96},"      flex",[79,63949,53550],{"class":239},[79,63951,1072],{"class":96},[79,63953,3531],{"class":239},[79,63955,63956,63958,63960,63962,63964],{"class":81,"line":630},[79,63957,56805],{"class":96},[79,63959,53550],{"class":239},[79,63961,2820],{"class":96},[79,63963,53605],{"class":243},[79,63965,3531],{"class":239},[79,63967,63968,63971,63973,63975,63978,63980],{"class":81,"line":648},[79,63969,63970],{"class":96},"      transition",[79,63972,53550],{"class":239},[79,63974,30253],{"class":96},[79,63976,63977],{"class":96}," 0.5",[79,63979,3068],{"class":243},[79,63981,3531],{"class":239},[79,63983,63984,63986,63988,63990,63992],{"class":81,"line":659},[79,63985,56895],{"class":96},[79,63987,53550],{"class":239},[79,63989,3321],{"class":96},[79,63991,53605],{"class":243},[79,63993,3531],{"class":239},[79,63995,63996],{"class":81,"line":676},[79,63997,4402],{"class":239},[79,63999,64000],{"class":81,"line":708},[79,64001,454],{"emptyLinePlaceholder":453},[79,64003,64004,64006,64008,64011],{"class":81,"line":717},[79,64005,63714],{"class":85},[79,64007,63883],{"class":395},[79,64009,64010],{"class":85},":focus",[79,64012,17732],{"class":239},[79,64014,64015,64017,64019,64022],{"class":81,"line":722},[79,64016,63901],{"class":96},[79,64018,53550],{"class":239},[79,64020,64021],{"class":96},"#e4e4e4",[79,64023,3531],{"class":239},[79,64025,64026,64028,64030,64032],{"class":81,"line":727},[79,64027,63831],{"class":96},[79,64029,53550],{"class":239},[79,64031,62952],{"class":96},[79,64033,3531],{"class":239},[79,64035,64036,64038,64040,64042,64044],{"class":81,"line":738},[79,64037,56895],{"class":96},[79,64039,53550],{"class":239},[79,64041,3029],{"class":96},[79,64043,53605],{"class":243},[79,64045,3531],{"class":239},[79,64047,64048],{"class":81,"line":753},[79,64049,4402],{"class":239},[79,64051,64052],{"class":81,"line":768},[79,64053,454],{"emptyLinePlaceholder":453},[79,64055,64056,64058,64060],{"class":81,"line":776},[79,64057,63714],{"class":85},[79,64059,59577],{"class":395},[79,64061,17732],{"class":239},[79,64063,64064,64066,64068,64071],{"class":81,"line":781},[79,64065,63831],{"class":96},[79,64067,53550],{"class":239},[79,64069,64070],{"class":96},"#00aeec",[79,64072,3531],{"class":239},[79,64074,64075,64077,64079,64081],{"class":81,"line":786},[79,64076,59526],{"class":96},[79,64078,53550],{"class":239},[79,64080,62952],{"class":96},[79,64082,3531],{"class":239},[79,64084,64085,64088,64090,64092],{"class":81,"line":802},[79,64086,64087],{"class":96},"      border",[79,64089,53550],{"class":239},[79,64091,56847],{"class":96},[79,64093,3531],{"class":239},[79,64095,64096,64098,64100,64102,64104],{"class":81,"line":815},[79,64097,57244],{"class":96},[79,64099,53550],{"class":239},[79,64101,2668],{"class":96},[79,64103,53605],{"class":243},[79,64105,3531],{"class":239},[79,64107,64108,64111,64113,64115,64117],{"class":81,"line":828},[79,64109,64110],{"class":96},"      margin-left",[79,64112,53550],{"class":239},[79,64114,2820],{"class":96},[79,64116,53605],{"class":243},[79,64118,3531],{"class":239},[79,64120,64121,64123,64125,64127,64129],{"class":81,"line":842},[79,64122,56881],{"class":96},[79,64124,53550],{"class":239},[79,64126,2730],{"class":96},[79,64128,53605],{"class":243},[79,64130,3531],{"class":239},[79,64132,64133,64136,64138,64141],{"class":81,"line":859},[79,64134,64135],{"class":96},"      cursor",[79,64137,53550],{"class":239},[79,64139,64140],{"class":96},"pointer",[79,64142,3531],{"class":239},[79,64144,64145],{"class":81,"line":878},[79,64146,4402],{"class":239},[79,64148,64149],{"class":81,"line":883},[79,64150,454],{"emptyLinePlaceholder":453},[79,64152,64153,64155,64158],{"class":81,"line":888},[79,64154,63714],{"class":85},[79,64156,64157],{"class":85}," .total",[79,64159,17732],{"class":239},[79,64161,64162,64164,64166,64168,64170],{"class":81,"line":904},[79,64163,63860],{"class":96},[79,64165,53550],{"class":239},[79,64167,2985],{"class":96},[79,64169,53605],{"class":243},[79,64171,3531],{"class":239},[79,64173,64174,64176,64178,64181],{"class":81,"line":919},[79,64175,59526],{"class":96},[79,64177,53550],{"class":239},[79,64179,64180],{"class":96},"#999",[79,64182,3531],{"class":239},[79,64184,64185,64188,64190,64192,64194],{"class":81,"line":930},[79,64186,64187],{"class":96},"      margin-top",[79,64189,53550],{"class":239},[79,64191,2694],{"class":96},[79,64193,53605],{"class":243},[79,64195,3531],{"class":239},[79,64197,64198,64201,64203,64205],{"class":81,"line":941},[79,64199,64200],{"class":96},"      opacity",[79,64202,53550],{"class":239},[79,64204,1030],{"class":96},[79,64206,3531],{"class":239},[79,64208,64209,64211,64213,64215,64217,64219],{"class":81,"line":946},[79,64210,63970],{"class":96},[79,64212,53550],{"class":239},[79,64214,30253],{"class":96},[79,64216,63977],{"class":96},[79,64218,3068],{"class":243},[79,64220,3531],{"class":239},[79,64222,64223],{"class":81,"line":969},[79,64224,4402],{"class":239},[79,64226,64227],{"class":81,"line":975},[79,64228,454],{"emptyLinePlaceholder":453},[79,64230,64231,64234],{"class":81,"line":989},[79,64232,64233],{"class":85},"    .list",[79,64235,17732],{"class":239},[79,64237,64238,64240,64242,64244,64246],{"class":81,"line":1003},[79,64239,63721],{"class":96},[79,64241,53550],{"class":239},[79,64243,6189],{"class":96},[79,64245,53605],{"class":243},[79,64247,3531],{"class":239},[79,64249,64250,64252,64254,64256,64258],{"class":81,"line":1019},[79,64251,63734],{"class":96},[79,64253,53550],{"class":239},[79,64255,63739],{"class":96},[79,64257,53605],{"class":243},[79,64259,3531],{"class":239},[79,64261,64262,64264,64266,64268],{"class":81,"line":1024},[79,64263,57119],{"class":96},[79,64265,53550],{"class":239},[79,64267,53590],{"class":96},[79,64269,3531],{"class":239},[79,64271,64272],{"class":81,"line":1067},[79,64273,4402],{"class":239},[79,64275,64276],{"class":81,"line":1101},[79,64277,454],{"emptyLinePlaceholder":453},[79,64279,64280,64282,64285],{"class":81,"line":1106},[79,64281,64233],{"class":85},[79,64283,64284],{"class":85}," .item",[79,64286,17732],{"class":239},[79,64288,64289,64291,64293,64295,64297],{"class":81,"line":1112},[79,64290,56881],{"class":96},[79,64292,53550],{"class":239},[79,64294,2686],{"class":96},[79,64296,1137],{"class":243},[79,64298,3531],{"class":239},[79,64300,64301,64303,64305,64307],{"class":81,"line":1124},[79,64302,57119],{"class":96},[79,64304,53550],{"class":239},[79,64306,53590],{"class":96},[79,64308,3531],{"class":239},[79,64310,64311],{"class":81,"line":1129},[79,64312,4402],{"class":239},[79,64314,64315],{"class":81,"line":1150},[79,64316,454],{"emptyLinePlaceholder":453},[79,64318,64319,64321,64323,64326],{"class":81,"line":1161},[79,64320,64233],{"class":85},[79,64322,64284],{"class":85},[79,64324,64325],{"class":85}," .info",[79,64327,17732],{"class":239},[79,64329,64330,64332,64334,64336],{"class":81,"line":1175},[79,64331,63947],{"class":96},[79,64333,53550],{"class":239},[79,64335,1072],{"class":96},[79,64337,3531],{"class":239},[79,64339,64340,64343,64345,64347,64349,64352,64355],{"class":81,"line":1194},[79,64341,64342],{"class":96},"      border-bottom",[79,64344,53550],{"class":239},[79,64346,1072],{"class":96},[79,64348,53605],{"class":243},[79,64350,64351],{"class":96}," dashed",[79,64353,64354],{"class":96}," #e4e4e4",[79,64356,3531],{"class":239},[79,64358,64359,64362,64364,64366,64368],{"class":81,"line":1211},[79,64360,64361],{"class":96},"      padding-bottom",[79,64363,53550],{"class":239},[79,64365,2820],{"class":96},[79,64367,53605],{"class":243},[79,64369,3531],{"class":239},[79,64371,64372],{"class":81,"line":1228},[79,64373,4402],{"class":239},[79,64375,64376],{"class":81,"line":1246},[79,64377,454],{"emptyLinePlaceholder":453},[79,64379,64380,64382,64384,64386],{"class":81,"line":1251},[79,64381,64233],{"class":85},[79,64383,64284],{"class":85},[79,64385,9019],{"class":395},[79,64387,17732],{"class":239},[79,64389,64390,64392,64394,64396],{"class":81,"line":1274},[79,64391,56816],{"class":96},[79,64393,53550],{"class":239},[79,64395,1030],{"class":96},[79,64397,3531],{"class":239},[79,64399,64400],{"class":81,"line":1296},[79,64401,4402],{"class":239},[79,64403,64404],{"class":81,"line":1316},[79,64405,454],{"emptyLinePlaceholder":453},[79,64407,64408,64410,64412,64415],{"class":81,"line":1321},[79,64409,64233],{"class":85},[79,64411,64284],{"class":85},[79,64413,64414],{"class":85}," .name",[79,64416,17732],{"class":239},[79,64418,64419,64421,64423,64426],{"class":81,"line":1326},[79,64420,59526],{"class":96},[79,64422,53550],{"class":239},[79,64424,64425],{"class":96},"#FB7299",[79,64427,3531],{"class":239},[79,64429,64430,64432,64434,64436,64438],{"class":81,"line":1342},[79,64431,57032],{"class":96},[79,64433,53550],{"class":239},[79,64435,2922],{"class":96},[79,64437,53605],{"class":243},[79,64439,3531],{"class":239},[79,64441,64442,64445,64447,64450],{"class":81,"line":18985},[79,64443,64444],{"class":96},"      font-weight",[79,64446,53550],{"class":239},[79,64448,64449],{"class":96},"bold",[79,64451,3531],{"class":239},[79,64453,64454],{"class":81,"line":18990},[79,64455,4402],{"class":239},[79,64457,64458],{"class":81,"line":18995},[79,64459,454],{"emptyLinePlaceholder":453},[79,64461,64462,64464,64466,64469],{"class":81,"line":19009},[79,64463,64233],{"class":85},[79,64465,64284],{"class":85},[79,64467,64468],{"class":85}," .text",[79,64470,17732],{"class":239},[79,64472,64473,64475,64477,64480],{"class":81,"line":19021},[79,64474,59526],{"class":96},[79,64476,53550],{"class":239},[79,64478,64479],{"class":96},"#333",[79,64481,3531],{"class":239},[79,64483,64484,64486,64488,64490,64492,64494],{"class":81,"line":19026},[79,64485,56805],{"class":96},[79,64487,53550],{"class":239},[79,64489,2820],{"class":96},[79,64491,53605],{"class":243},[79,64493,670],{"class":96},[79,64495,3531],{"class":239},[79,64497,64498],{"class":81,"line":19039},[79,64499,4402],{"class":239},[79,64501,64502],{"class":81,"line":19044},[79,64503,454],{"emptyLinePlaceholder":453},[79,64505,64506,64508,64510,64513],{"class":81,"line":19049},[79,64507,64233],{"class":85},[79,64509,64284],{"class":85},[79,64511,64512],{"class":85}," .time",[79,64514,17732],{"class":239},[79,64516,64517,64519,64521,64523],{"class":81,"line":19054},[79,64518,59526],{"class":96},[79,64520,53550],{"class":239},[79,64522,64180],{"class":96},[79,64524,3531],{"class":239},[79,64526,64527,64529,64531,64533,64535],{"class":81,"line":19067},[79,64528,57032],{"class":96},[79,64530,53550],{"class":239},[79,64532,2872],{"class":96},[79,64534,53605],{"class":243},[79,64536,3531],{"class":239},[79,64538,64539],{"class":81,"line":19072},[79,64540,4402],{"class":239},[79,64542,64543,64545,64547],{"class":81,"line":34748},[79,64544,54529],{"class":239},[79,64546,2287],{"class":395},[79,64548,53420],{"class":239},[79,64550,64551,64553,64555],{"class":81,"line":34754},[79,64552,53898],{"class":239},[79,64554,53447],{"class":395},[79,64556,53420],{"class":239},[79,64558,64559],{"class":81,"line":34760},[79,64560,454],{"emptyLinePlaceholder":453},[79,64562,64563,64565,64567],{"class":81,"line":34766},[79,64564,392],{"class":239},[79,64566,53913],{"class":395},[79,64568,53420],{"class":239},[79,64570,64571,64573,64575,64577,64579,64582],{"class":81,"line":34772},[79,64572,54257],{"class":239},[79,64574,53724],{"class":395},[79,64576,55596],{"class":85},[79,64578,244],{"class":239},[79,64580,64581],{"class":89},"\"wrapper\"",[79,64583,53420],{"class":239},[79,64585,64586,64588,64590,64592,64594,64597,64599,64601],{"class":81,"line":34783},[79,64587,53454],{"class":239},[79,64589,2815],{"class":395},[79,64591,55596],{"class":85},[79,64593,244],{"class":239},[79,64595,64596],{"class":89},"\"avatar\"",[79,64598,57424],{"class":239},[79,64600,2815],{"class":395},[79,64602,53420],{"class":239},[79,64604,64605,64607,64609,64611,64613,64616,64618,64620,64623,64625,64627,64629,64632,64634,64637,64639,64641],{"class":81,"line":34789},[79,64606,53454],{"class":239},[79,64608,56398],{"class":395},[79,64610,17119],{"class":85},[79,64612,244],{"class":239},[79,64614,64615],{"class":89},"\"tx\"",[79,64617,63130],{"class":85},[79,64619,244],{"class":239},[79,64621,64622],{"class":89},"\"发一条友善的评论\"",[79,64624,56421],{"class":85},[79,64626,244],{"class":239},[79,64628,5904],{"class":89},[79,64630,64631],{"class":85}," maxlength",[79,64633,244],{"class":239},[79,64635,64636],{"class":89},"\"200\"",[79,64638,57424],{"class":239},[79,64640,56398],{"class":395},[79,64642,53420],{"class":239},[79,64644,64645,64647,64649,64652,64654],{"class":81,"line":34809},[79,64646,53454],{"class":239},[79,64648,55997],{"class":395},[79,64650,64651],{"class":239},">发布\u003C\u002F",[79,64653,55997],{"class":395},[79,64655,53420],{"class":239},[79,64657,64658,64660,64662],{"class":81,"line":34815},[79,64659,54529],{"class":239},[79,64661,53724],{"class":395},[79,64663,53420],{"class":239},[79,64665,64666,64668,64670,64672,64674,64676],{"class":81,"line":34826},[79,64667,54257],{"class":239},[79,64669,53724],{"class":395},[79,64671,55596],{"class":85},[79,64673,244],{"class":239},[79,64675,64581],{"class":89},[79,64677,53420],{"class":239},[79,64679,64680,64682,64684,64686,64688,64691,64694,64696],{"class":81,"line":34832},[79,64681,53454],{"class":239},[79,64683,79],{"class":395},[79,64685,55596],{"class":85},[79,64687,244],{"class":239},[79,64689,64690],{"class":89},"\"total\"",[79,64692,64693],{"class":239},">0\u002F200字\u003C\u002F",[79,64695,79],{"class":395},[79,64697,53420],{"class":239},[79,64699,64700,64702,64704],{"class":81,"line":34838},[79,64701,54529],{"class":239},[79,64703,53724],{"class":395},[79,64705,53420],{"class":239},[79,64707,64708,64710,64712,64714,64716,64719],{"class":81,"line":34844},[79,64709,54257],{"class":239},[79,64711,53724],{"class":395},[79,64713,55596],{"class":85},[79,64715,244],{"class":239},[79,64717,64718],{"class":89},"\"list\"",[79,64720,53420],{"class":239},[79,64722,64723,64725,64727,64729,64731,64734,64737,64739,64742],{"class":81,"line":34850},[79,64724,53454],{"class":239},[79,64726,53724],{"class":395},[79,64728,55596],{"class":85},[79,64730,244],{"class":239},[79,64732,64733],{"class":89},"\"item\"",[79,64735,64736],{"class":85}," style",[79,64738,244],{"class":239},[79,64740,64741],{"class":89},"\"display: none;\"",[79,64743,53420],{"class":239},[79,64745,64746,64748,64750,64752,64754,64756,64758,64760],{"class":81,"line":34856},[79,64747,57344],{"class":239},[79,64749,2815],{"class":395},[79,64751,55596],{"class":85},[79,64753,244],{"class":239},[79,64755,64596],{"class":89},[79,64757,57424],{"class":239},[79,64759,2815],{"class":395},[79,64761,53420],{"class":239},[79,64763,64764,64766,64768,64770,64772,64775],{"class":81,"line":34862},[79,64765,57344],{"class":239},[79,64767,53724],{"class":395},[79,64769,55596],{"class":85},[79,64771,244],{"class":239},[79,64773,64774],{"class":89},"\"info\"",[79,64776,53420],{"class":239},[79,64778,64779,64781,64783,64785,64787,64790,64793,64795],{"class":81,"line":34868},[79,64780,57412],{"class":239},[79,64782,19],{"class":395},[79,64784,55596],{"class":85},[79,64786,244],{"class":239},[79,64788,64789],{"class":89},"\"name\"",[79,64791,64792],{"class":239},">清风徐来\u003C\u002F",[79,64794,19],{"class":395},[79,64796,53420],{"class":239},[79,64798,64799,64801,64803,64805,64807,64810,64813,64815],{"class":81,"line":34888},[79,64800,57412],{"class":239},[79,64802,19],{"class":395},[79,64804,55596],{"class":85},[79,64806,244],{"class":239},[79,64808,64809],{"class":89},"\"text\"",[79,64811,64812],{"class":239},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[79,64814,19],{"class":395},[79,64816,53420],{"class":239},[79,64818,64819,64821,64823,64825,64827,64830,64833,64835],{"class":81,"line":34894},[79,64820,57412],{"class":239},[79,64822,19],{"class":395},[79,64824,55596],{"class":85},[79,64826,244],{"class":239},[79,64828,64829],{"class":89},"\"time\"",[79,64831,64832],{"class":239},">2022-10-10 20:29:21\u003C\u002F",[79,64834,19],{"class":395},[79,64836,53420],{"class":239},[79,64838,64839,64841,64843],{"class":81,"line":34910},[79,64840,57517],{"class":239},[79,64842,53724],{"class":395},[79,64844,53420],{"class":239},[79,64846,64847,64849,64851],{"class":81,"line":34916},[79,64848,53889],{"class":239},[79,64850,53724],{"class":395},[79,64852,53420],{"class":239},[79,64854,64855,64857,64859],{"class":81,"line":34930},[79,64856,54529],{"class":239},[79,64858,53724],{"class":395},[79,64860,53420],{"class":239},[79,64862,64863,64865,64867],{"class":81,"line":34936},[79,64864,54257],{"class":239},[79,64866,53926],{"class":395},[79,64868,53420],{"class":239},[79,64870,64871,64873,64876,64878,64880,64882,64884,64887],{"class":81,"line":34951},[79,64872,13385],{"class":243},[79,64874,64875],{"class":96}," tx",[79,64877,468],{"class":243},[79,64879,56506],{"class":239},[79,64881,56509],{"class":85},[79,64883,685],{"class":239},[79,64885,64886],{"class":89},"'#tx'",[79,64888,253],{"class":239},[79,64890,64891,64893,64896,64898,64900,64902,64904,64907],{"class":81,"line":34957},[79,64892,13385],{"class":243},[79,64894,64895],{"class":96}," total",[79,64897,468],{"class":243},[79,64899,56506],{"class":239},[79,64901,56509],{"class":85},[79,64903,685],{"class":239},[79,64905,64906],{"class":89},"'.total'",[79,64908,253],{"class":239},[79,64910,64911],{"class":81,"line":34966},[79,64912,64913],{"class":2440},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[79,64915,64916,64919,64921,64923,64925,64927,64929],{"class":81,"line":34972},[79,64917,64918],{"class":239},"    tx.",[79,64920,59923],{"class":85},[79,64922,685],{"class":239},[79,64924,63437],{"class":89},[79,64926,1060],{"class":239},[79,64928,56559],{"class":243},[79,64930,56562],{"class":239},[79,64932,64933,64936,64938],{"class":81,"line":34981},[79,64934,64935],{"class":239},"      total.style.opacity ",[79,64937,244],{"class":243},[79,64939,57809],{"class":96},[79,64941,64942],{"class":81,"line":34987},[79,64943,35576],{"class":239},[79,64945,64946],{"class":81,"line":34993},[79,64947,64948],{"class":2440},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[79,64950,64951,64953,64955,64957,64959,64961,64963],{"class":81,"line":35002},[79,64952,64918],{"class":239},[79,64954,59923],{"class":85},[79,64956,685],{"class":239},[79,64958,63498],{"class":89},[79,64960,1060],{"class":239},[79,64962,56559],{"class":243},[79,64964,56562],{"class":239},[79,64966,64967,64969,64971],{"class":81,"line":35008},[79,64968,64935],{"class":239},[79,64970,244],{"class":243},[79,64972,49447],{"class":96},[79,64974,64975],{"class":81,"line":35019},[79,64976,35576],{"class":239},[79,64978,64979],{"class":81,"line":35025},[79,64980,64981],{"class":2440},"    \u002F\u002F 3. 检测用户输入\n",[79,64983,64984,64986,64988,64990,64993,64995,64997],{"class":81,"line":35044},[79,64985,64918],{"class":239},[79,64987,59923],{"class":85},[79,64989,685],{"class":239},[79,64991,64992],{"class":89},"'input'",[79,64994,1060],{"class":239},[79,64996,56559],{"class":243},[79,64998,56562],{"class":239},[79,65000,65001],{"class":81,"line":35050},[79,65002,65003],{"class":2440},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[79,65005,65006,65009,65011,65014,65017,65019,65022,65024,65026],{"class":81,"line":35061},[79,65007,65008],{"class":239},"      total.innerHTML ",[79,65010,244],{"class":243},[79,65012,65013],{"class":89}," `${",[79,65015,65016],{"class":239},"tx",[79,65018,2931],{"class":89},[79,65020,65021],{"class":239},"value",[79,65023,2931],{"class":89},[79,65025,54081],{"class":96},[79,65027,65028],{"class":89},"}\u002F200字`\n",[79,65030,65031],{"class":81,"line":35067},[79,65032,35576],{"class":239},[79,65034,65035],{"class":81,"line":35087},[79,65036,454],{"emptyLinePlaceholder":453},[79,65038,65039],{"class":81,"line":35103},[79,65040,65041],{"class":2440},"    \u002F\u002F const str = 'andy'\n",[79,65043,65044],{"class":81,"line":35109},[79,65045,65046],{"class":2440},"    \u002F\u002F console.log(str.length)\n",[79,65048,65049,65051,65053],{"class":81,"line":35123},[79,65050,54529],{"class":239},[79,65052,53926],{"class":395},[79,65054,53420],{"class":239},[79,65056,65057,65059,65061],{"class":81,"line":35129},[79,65058,53898],{"class":239},[79,65060,53913],{"class":395},[79,65062,53420],{"class":239},[79,65064,65065],{"class":81,"line":35135},[79,65066,454],{"emptyLinePlaceholder":453},[79,65068,65069,65071,65073],{"class":81,"line":35146},[79,65070,53898],{"class":239},[79,65072,52749],{"class":395},[79,65074,53420],{"class":239},[24137,65076,65078],{"id":65077},"_3254-change事件","3.2.5.4 change事件",[19,65080,65081],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,65083,65084],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,65086,65087],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[51,65089,65091],{"className":52747,"code":65090,"language":52749,"meta":57,"style":57},"\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",[59,65092,65093,65103,65117,65121,65129,65143,65163,65175,65183,65187,65195,65209,65217,65235,65253,65265,65269,65277,65285,65289],{"__ignoreMap":57},[79,65094,65095,65097,65099,65101],{"class":81,"line":82},[79,65096,53411],{"class":239},[79,65098,53414],{"class":395},[79,65100,53417],{"class":85},[79,65102,53420],{"class":239},[79,65104,65105,65107,65109,65111,65113,65115],{"class":81,"line":167},[79,65106,392],{"class":239},[79,65108,52749],{"class":395},[79,65110,53429],{"class":85},[79,65112,244],{"class":239},[79,65114,53434],{"class":89},[79,65116,53420],{"class":239},[79,65118,65119],{"class":81,"line":178},[79,65120,454],{"emptyLinePlaceholder":453},[79,65122,65123,65125,65127],{"class":81,"line":457},[79,65124,392],{"class":239},[79,65126,53447],{"class":395},[79,65128,53420],{"class":239},[79,65130,65131,65133,65135,65137,65139,65141],{"class":81,"line":462},[79,65132,54257],{"class":239},[79,65134,53457],{"class":395},[79,65136,53460],{"class":85},[79,65138,244],{"class":239},[79,65140,53465],{"class":89},[79,65142,53420],{"class":239},[79,65144,65145,65147,65149,65151,65153,65155,65157,65159,65161],{"class":81,"line":474},[79,65146,54257],{"class":239},[79,65148,53457],{"class":395},[79,65150,2238],{"class":85},[79,65152,244],{"class":239},[79,65154,53504],{"class":89},[79,65156,53484],{"class":85},[79,65158,244],{"class":239},[79,65160,53511],{"class":89},[79,65162,53420],{"class":239},[79,65164,65165,65167,65169,65171,65173],{"class":81,"line":480},[79,65166,54257],{"class":239},[79,65168,53520],{"class":395},[79,65170,53523],{"class":239},[79,65172,53520],{"class":395},[79,65174,53420],{"class":239},[79,65176,65177,65179,65181],{"class":81,"line":486},[79,65178,53898],{"class":239},[79,65180,53447],{"class":395},[79,65182,53420],{"class":239},[79,65184,65185],{"class":81,"line":491},[79,65186,454],{"emptyLinePlaceholder":453},[79,65188,65189,65191,65193],{"class":81,"line":497},[79,65190,392],{"class":239},[79,65192,53913],{"class":395},[79,65194,53420],{"class":239},[79,65196,65197,65199,65201,65203,65205,65207],{"class":81,"line":503},[79,65198,54257],{"class":239},[79,65200,55931],{"class":395},[79,65202,55934],{"class":85},[79,65204,244],{"class":239},[79,65206,64809],{"class":89},[79,65208,53420],{"class":239},[79,65210,65211,65213,65215],{"class":81,"line":509},[79,65212,54257],{"class":239},[79,65214,53926],{"class":395},[79,65216,53420],{"class":239},[79,65218,65219,65221,65223,65225,65227,65229,65231,65233],{"class":81,"line":514},[79,65220,13385],{"class":243},[79,65222,62715],{"class":96},[79,65224,468],{"class":243},[79,65226,56506],{"class":239},[79,65228,56509],{"class":85},[79,65230,685],{"class":239},[79,65232,64992],{"class":89},[79,65234,253],{"class":239},[79,65236,65237,65240,65242,65244,65247,65249,65251],{"class":81,"line":520},[79,65238,65239],{"class":239},"    input.",[79,65241,59923],{"class":85},[79,65243,685],{"class":239},[79,65245,65246],{"class":89},"'change'",[79,65248,1060],{"class":239},[79,65250,56559],{"class":243},[79,65252,56562],{"class":239},[79,65254,65255,65257,65259,65261,65263],{"class":81,"line":526},[79,65256,60354],{"class":239},[79,65258,60357],{"class":85},[79,65260,685],{"class":239},[79,65262,2966],{"class":96},[79,65264,253],{"class":239},[79,65266,65267],{"class":81,"line":532},[79,65268,35576],{"class":239},[79,65270,65271,65273,65275],{"class":81,"line":537},[79,65272,54529],{"class":239},[79,65274,53926],{"class":395},[79,65276,53420],{"class":239},[79,65278,65279,65281,65283],{"class":81,"line":543},[79,65280,53898],{"class":239},[79,65282,53913],{"class":395},[79,65284,53420],{"class":239},[79,65286,65287],{"class":81,"line":549},[79,65288,454],{"emptyLinePlaceholder":453},[79,65290,65291,65293,65295],{"class":81,"line":555},[79,65292,53898],{"class":239},[79,65294,52749],{"class":395},[79,65296,53420],{"class":239},[19,65298,65299],{},"总结：内容发生改变才回去触发",[265,65301,65303],{"id":65302},"_326-事件对象","3.2.6 事件对象",[24137,65305,65307],{"id":65306},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,65309,65310],{},[3699,65311],{"alt":57,"src":65312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,65314,65315],{},[3699,65316],{"alt":57,"src":65317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,65319,65320],{},"点击一次，就输出了事件对象，它是个对象",[19,65322,65323],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,65325,65326],{},[3699,65327],{"alt":57,"src":65328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[24137,65330,65332],{"id":65331},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,65334,65335],{},[3699,65336],{"alt":57,"src":65337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,65339,65340],{},"实现按特殊字符才是实现打印输出效果：",[51,65342,65344],{"className":383,"code":65343,"language":385,"meta":57,"style":57},"\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",[59,65345,65346,65354,65359,65373,65381,65386,65391,65396,65401,65406,65411,65416,65421,65426,65430,65434,65442],{"__ignoreMap":57},[79,65347,65348,65350,65352],{"class":81,"line":82},[79,65349,392],{"class":239},[79,65351,53913],{"class":395},[79,65353,53420],{"class":239},[79,65355,65356],{"class":81,"line":167},[79,65357,65358],{"class":2440},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[79,65360,65361,65363,65365,65367,65369,65371],{"class":81,"line":178},[79,65362,54257],{"class":239},[79,65364,55931],{"class":395},[79,65366,55934],{"class":85},[79,65368,244],{"class":239},[79,65370,64809],{"class":89},[79,65372,53420],{"class":239},[79,65374,65375,65377,65379],{"class":81,"line":457},[79,65376,54257],{"class":239},[79,65378,53926],{"class":395},[79,65380,53420],{"class":239},[79,65382,65383],{"class":81,"line":462},[79,65384,65385],{"class":239},"    \u002F\u002F const btn = document.querySelector('button')\n",[79,65387,65388],{"class":81,"line":474},[79,65389,65390],{"class":239},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[79,65392,65393],{"class":81,"line":480},[79,65394,65395],{"class":239},"    \u002F\u002F   console.log(e);\n",[79,65397,65398],{"class":81,"line":486},[79,65399,65400],{"class":239},"    \u002F\u002F })\n",[79,65402,65403],{"class":81,"line":491},[79,65404,65405],{"class":239},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[79,65407,65408],{"class":81,"line":497},[79,65409,65410],{"class":239},"    const input = document.querySelector('input')\n",[79,65412,65413],{"class":81,"line":503},[79,65414,65415],{"class":239},"    input.addEventListener('keyup', function (e) {\n",[79,65417,65418],{"class":81,"line":509},[79,65419,65420],{"class":239},"      if (e.key === 'Enter') {\n",[79,65422,65423],{"class":81,"line":514},[79,65424,65425],{"class":239},"        console.log('我按下了回车键')\n",[79,65427,65428],{"class":81,"line":520},[79,65429,54510],{"class":239},[79,65431,65432],{"class":81,"line":526},[79,65433,35576],{"class":239},[79,65435,65436,65438,65440],{"class":81,"line":532},[79,65437,54529],{"class":239},[79,65439,53926],{"class":395},[79,65441,53420],{"class":239},[79,65443,65444,65446,65448],{"class":81,"line":537},[79,65445,53898],{"class":239},[79,65447,53913],{"class":395},[79,65449,53420],{"class":239},[24137,65451,65453],{"id":65452},"_3263-trim方法","3.2.6.3 trim方法",[19,65455,65456],{},[3699,65457],{"alt":57,"src":65458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65460,65461],{},[3699,65462],{"alt":57,"src":65463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65465,65466],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65468,65469],{},"str.trim()",[265,65471,65473],{"id":65472},"_327-环境对象","3.2.7 环境对象",[19,65475,65476],{},[3699,65477],{"alt":57,"src":65478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65480,65481],{},[3699,65482],{"alt":57,"src":65483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65485,65486],{},[3699,65487],{"alt":57,"src":65488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65490,65491],{},"实际函数调用是window.fn()",[19,65493,65494],{},"普通函数里面this指向的是window",[3377,65496,65497,65500,65503],{},[29,65498,65499],{},"在普通函数下，this指向的是window",[29,65501,65502],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[29,65504,65505],{},"箭头函数没有this",[19,65507,65508],{},"粗略记法就是：谁调用，this就指向谁",[19,65510,65511],{},[3699,65512],{"alt":57,"src":65513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65515,65516],{},[3699,65517],{"alt":57,"src":65518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65520,65521],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65523,65524],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[51,65526,65528],{"className":383,"code":65527,"language":385,"meta":57,"style":57},"\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",[59,65529,65530,65538,65550,65558,65563,65568,65573,65578,65582,65590],{"__ignoreMap":57},[79,65531,65532,65534,65536],{"class":81,"line":82},[79,65533,392],{"class":239},[79,65535,53913],{"class":395},[79,65537,53420],{"class":239},[79,65539,65540,65542,65544,65546,65548],{"class":81,"line":167},[79,65541,54257],{"class":239},[79,65543,55997],{"class":395},[79,65545,56003],{"class":239},[79,65547,55997],{"class":395},[79,65549,53420],{"class":239},[79,65551,65552,65554,65556],{"class":81,"line":178},[79,65553,54257],{"class":239},[79,65555,53926],{"class":395},[79,65557,53420],{"class":239},[79,65559,65560],{"class":81,"line":457},[79,65561,65562],{"class":239},"    const button = document.querySelector('button')\n",[79,65564,65565],{"class":81,"line":462},[79,65566,65567],{"class":239},"    button.addEventListener('click', function () {\n",[79,65569,65570],{"class":81,"line":474},[79,65571,65572],{"class":239},"      \u002F\u002F console.log(this);\n",[79,65574,65575],{"class":81,"line":480},[79,65576,65577],{"class":239},"      this.style.color = 'pink'\n",[79,65579,65580],{"class":81,"line":486},[79,65581,35576],{"class":239},[79,65583,65584,65586,65588],{"class":81,"line":491},[79,65585,54529],{"class":239},[79,65587,53926],{"class":395},[79,65589,53420],{"class":239},[79,65591,65592,65594,65596],{"class":81,"line":497},[79,65593,53898],{"class":239},[79,65595,53913],{"class":395},[79,65597,53420],{"class":239},[265,65599,65601],{"id":65600},"_328-回调函数","3.2.8 回调函数",[19,65603,65604],{},[3699,65605],{"alt":57,"src":65606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65608,65609],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65611,13496],{},[3377,65613,65614,65617,65620],{},[29,65615,65616],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[29,65618,65619],{},"回调函数本质还是函数，只不过把它当成参数使用",[29,65621,65622],{},"使用匿名函数做为回调函数比较常见",[265,65624,65626],{"id":65625},"_329-tab栏切换","3.2.9 tab栏切换",[19,65628,65629],{},[3699,65630],{"alt":57,"src":65631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[51,65633,65635],{"className":52747,"code":65634,"language":52749,"meta":57,"style":57},"\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",[59,65636,65637,65647,65661,65665,65673,65687,65707,65727,65740,65748,65754,65764,65774,65778,65782,65789,65802,65815,65827,65843,65847,65851,65858,65870,65882,65894,65904,65914,65918,65922,65931,65943,65954,65966,65970,65974,65982,65992,66002,66012,66016,66020,66030,66044,66056,66060,66064,66076,66087,66104,66114,66118,66122,66137,66148,66158,66162,66166,66173,66188,66192,66196,66204,66214,66218,66222,66231,66241,66245,66253,66261,66265,66273,66288,66303,66316,66324,66358,66385,66412,66439,66466,66474,66482,66497,66534,66569,66604,66639,66674,66682,66690,66698,66703,66708,66728,66733,66762,66767,66772,66790,66795,66800,66805,66827,66832,66848,66852,66857,66862,66883,66888,66917,66921,66926,66930,66938,66946,66950],{"__ignoreMap":57},[79,65638,65639,65641,65643,65645],{"class":81,"line":82},[79,65640,53411],{"class":239},[79,65642,53414],{"class":395},[79,65644,53417],{"class":85},[79,65646,53420],{"class":239},[79,65648,65649,65651,65653,65655,65657,65659],{"class":81,"line":167},[79,65650,392],{"class":239},[79,65652,52749],{"class":395},[79,65654,53429],{"class":85},[79,65656,244],{"class":239},[79,65658,53434],{"class":89},[79,65660,53420],{"class":239},[79,65662,65663],{"class":81,"line":178},[79,65664,454],{"emptyLinePlaceholder":453},[79,65666,65667,65669,65671],{"class":81,"line":457},[79,65668,392],{"class":239},[79,65670,53447],{"class":395},[79,65672,53420],{"class":239},[79,65674,65675,65677,65679,65681,65683,65685],{"class":81,"line":462},[79,65676,54257],{"class":239},[79,65678,53457],{"class":395},[79,65680,53460],{"class":85},[79,65682,244],{"class":239},[79,65684,53465],{"class":89},[79,65686,61237],{"class":239},[79,65688,65689,65691,65693,65695,65697,65699,65701,65703,65705],{"class":81,"line":474},[79,65690,54257],{"class":239},[79,65692,53457],{"class":395},[79,65694,53476],{"class":85},[79,65696,244],{"class":239},[79,65698,53481],{"class":89},[79,65700,53484],{"class":85},[79,65702,244],{"class":239},[79,65704,53489],{"class":89},[79,65706,61237],{"class":239},[79,65708,65709,65711,65713,65715,65717,65719,65721,65723,65725],{"class":81,"line":480},[79,65710,54257],{"class":239},[79,65712,53457],{"class":395},[79,65714,2238],{"class":85},[79,65716,244],{"class":239},[79,65718,53504],{"class":89},[79,65720,53484],{"class":85},[79,65722,244],{"class":239},[79,65724,53511],{"class":89},[79,65726,61237],{"class":239},[79,65728,65729,65731,65733,65736,65738],{"class":81,"line":486},[79,65730,54257],{"class":239},[79,65732,53520],{"class":395},[79,65734,65735],{"class":239},">tab栏切换\u003C\u002F",[79,65737,53520],{"class":395},[79,65739,53420],{"class":239},[79,65741,65742,65744,65746],{"class":81,"line":491},[79,65743,54257],{"class":239},[79,65745,2287],{"class":395},[79,65747,53420],{"class":239},[79,65749,65750,65752],{"class":81,"line":497},[79,65751,8598],{"class":395},[79,65753,17732],{"class":239},[79,65755,65756,65758,65760,65762],{"class":81,"line":503},[79,65757,56816],{"class":96},[79,65759,53550],{"class":239},[79,65761,1030],{"class":96},[79,65763,3531],{"class":239},[79,65765,65766,65768,65770,65772],{"class":81,"line":509},[79,65767,56805],{"class":96},[79,65769,53550],{"class":239},[79,65771,1030],{"class":96},[79,65773,3531],{"class":239},[79,65775,65776],{"class":81,"line":514},[79,65777,4402],{"class":239},[79,65779,65780],{"class":81,"line":520},[79,65781,454],{"emptyLinePlaceholder":453},[79,65783,65784,65787],{"class":81,"line":526},[79,65785,65786],{"class":85},"    .tab",[79,65788,17732],{"class":239},[79,65790,65791,65793,65795,65798,65800],{"class":81,"line":532},[79,65792,56881],{"class":96},[79,65794,53550],{"class":239},[79,65796,65797],{"class":96},"590",[79,65799,53605],{"class":243},[79,65801,3531],{"class":239},[79,65803,65804,65806,65808,65811,65813],{"class":81,"line":537},[79,65805,56895],{"class":96},[79,65807,53550],{"class":239},[79,65809,65810],{"class":96},"340",[79,65812,53605],{"class":243},[79,65814,3531],{"class":239},[79,65816,65817,65819,65821,65823,65825],{"class":81,"line":543},[79,65818,56816],{"class":96},[79,65820,53550],{"class":239},[79,65822,3073],{"class":96},[79,65824,53605],{"class":243},[79,65826,3531],{"class":239},[79,65828,65829,65831,65833,65835,65837,65839,65841],{"class":81,"line":549},[79,65830,64087],{"class":96},[79,65832,53550],{"class":239},[79,65834,1072],{"class":96},[79,65836,53605],{"class":243},[79,65838,53634],{"class":96},[79,65840,64354],{"class":96},[79,65842,3531],{"class":239},[79,65844,65845],{"class":81,"line":555},[79,65846,4402],{"class":239},[79,65848,65849],{"class":81,"line":561},[79,65850,454],{"emptyLinePlaceholder":453},[79,65852,65853,65856],{"class":81,"line":567},[79,65854,65855],{"class":85},"    .tab-nav",[79,65857,17732],{"class":239},[79,65859,65860,65862,65864,65866,65868],{"class":81,"line":573},[79,65861,56881],{"class":96},[79,65863,53550],{"class":239},[79,65865,2686],{"class":96},[79,65867,1137],{"class":243},[79,65869,3531],{"class":239},[79,65871,65872,65874,65876,65878,65880],{"class":81,"line":579},[79,65873,56895],{"class":96},[79,65875,53550],{"class":239},[79,65877,3279],{"class":96},[79,65879,53605],{"class":243},[79,65881,3531],{"class":239},[79,65883,65884,65886,65888,65890,65892],{"class":81,"line":584},[79,65885,59469],{"class":96},[79,65887,53550],{"class":239},[79,65889,3279],{"class":96},[79,65891,53605],{"class":243},[79,65893,3531],{"class":239},[79,65895,65896,65898,65900,65902],{"class":81,"line":590},[79,65897,57119],{"class":96},[79,65899,53550],{"class":239},[79,65901,53590],{"class":96},[79,65903,3531],{"class":239},[79,65905,65906,65908,65910,65912],{"class":81,"line":596},[79,65907,57130],{"class":96},[79,65909,53550],{"class":239},[79,65911,53781],{"class":96},[79,65913,3531],{"class":239},[79,65915,65916],{"class":81,"line":602},[79,65917,4402],{"class":239},[79,65919,65920],{"class":81,"line":608},[79,65921,454],{"emptyLinePlaceholder":453},[79,65923,65924,65926,65929],{"class":81,"line":614},[79,65925,65855],{"class":85},[79,65927,65928],{"class":395}," h3",[79,65930,17732],{"class":239},[79,65932,65933,65935,65937,65939,65941],{"class":81,"line":620},[79,65934,57032],{"class":96},[79,65936,53550],{"class":239},[79,65938,3173],{"class":96},[79,65940,53605],{"class":243},[79,65942,3531],{"class":239},[79,65944,65945,65947,65949,65952],{"class":81,"line":625},[79,65946,64444],{"class":96},[79,65948,53550],{"class":239},[79,65950,65951],{"class":96},"normal",[79,65953,3531],{"class":239},[79,65955,65956,65958,65960,65962,65964],{"class":81,"line":630},[79,65957,64110],{"class":96},[79,65959,53550],{"class":239},[79,65961,3073],{"class":96},[79,65963,53605],{"class":243},[79,65965,3531],{"class":239},[79,65967,65968],{"class":81,"line":648},[79,65969,4402],{"class":239},[79,65971,65972],{"class":81,"line":659},[79,65973,454],{"emptyLinePlaceholder":453},[79,65975,65976,65978,65980],{"class":81,"line":676},[79,65977,65855],{"class":85},[79,65979,63402],{"class":395},[79,65981,17732],{"class":239},[79,65983,65984,65986,65988,65990],{"class":81,"line":708},[79,65985,56842],{"class":96},[79,65987,53550],{"class":239},[79,65989,56847],{"class":96},[79,65991,3531],{"class":239},[79,65993,65994,65996,65998,66000],{"class":81,"line":717},[79,65995,57119],{"class":96},[79,65997,53550],{"class":239},[79,65999,53590],{"class":96},[79,66001,3531],{"class":239},[79,66003,66004,66006,66008,66010],{"class":81,"line":722},[79,66005,57130],{"class":96},[79,66007,53550],{"class":239},[79,66009,53693],{"class":96},[79,66011,3531],{"class":239},[79,66013,66014],{"class":81,"line":727},[79,66015,4402],{"class":239},[79,66017,66018],{"class":81,"line":738},[79,66019,454],{"emptyLinePlaceholder":453},[79,66021,66022,66024,66026,66028],{"class":81,"line":753},[79,66023,65855],{"class":85},[79,66025,63402],{"class":395},[79,66027,57185],{"class":395},[79,66029,17732],{"class":239},[79,66031,66032,66034,66036,66038,66040,66042],{"class":81,"line":768},[79,66033,56816],{"class":96},[79,66035,53550],{"class":239},[79,66037,1030],{"class":96},[79,66039,11134],{"class":96},[79,66041,53605],{"class":243},[79,66043,3531],{"class":239},[79,66045,66046,66048,66050,66052,66054],{"class":81,"line":776},[79,66047,57032],{"class":96},[79,66049,53550],{"class":239},[79,66051,2922],{"class":96},[79,66053,53605],{"class":243},[79,66055,3531],{"class":239},[79,66057,66058],{"class":81,"line":781},[79,66059,4402],{"class":239},[79,66061,66062],{"class":81,"line":786},[79,66063,454],{"emptyLinePlaceholder":453},[79,66065,66066,66068,66070,66072,66074],{"class":81,"line":802},[79,66067,65855],{"class":85},[79,66069,63402],{"class":395},[79,66071,57185],{"class":395},[79,66073,3635],{"class":395},[79,66075,17732],{"class":239},[79,66077,66078,66081,66083,66085],{"class":81,"line":815},[79,66079,66080],{"class":96},"      text-decoration",[79,66082,53550],{"class":239},[79,66084,56847],{"class":96},[79,66086,3531],{"class":239},[79,66088,66089,66091,66093,66095,66097,66099,66102],{"class":81,"line":828},[79,66090,64342],{"class":96},[79,66092,53550],{"class":239},[79,66094,1049],{"class":96},[79,66096,53605],{"class":243},[79,66098,53634],{"class":96},[79,66100,66101],{"class":96}," transparent",[79,66103,3531],{"class":239},[79,66105,66106,66108,66110,66112],{"class":81,"line":842},[79,66107,59526],{"class":96},[79,66109,53550],{"class":239},[79,66111,64479],{"class":96},[79,66113,3531],{"class":239},[79,66115,66116],{"class":81,"line":859},[79,66117,4402],{"class":239},[79,66119,66120],{"class":81,"line":878},[79,66121,454],{"emptyLinePlaceholder":453},[79,66123,66124,66126,66128,66130,66132,66135],{"class":81,"line":883},[79,66125,65855],{"class":85},[79,66127,63402],{"class":395},[79,66129,57185],{"class":395},[79,66131,3635],{"class":395},[79,66133,66134],{"class":85},".active",[79,66136,17732],{"class":239},[79,66138,66139,66141,66143,66146],{"class":81,"line":888},[79,66140,63901],{"class":96},[79,66142,53550],{"class":239},[79,66144,66145],{"class":96},"#e1251b",[79,66147,3531],{"class":239},[79,66149,66150,66152,66154,66156],{"class":81,"line":904},[79,66151,59526],{"class":96},[79,66153,53550],{"class":239},[79,66155,66145],{"class":96},[79,66157,3531],{"class":239},[79,66159,66160],{"class":81,"line":919},[79,66161,4402],{"class":239},[79,66163,66164],{"class":81,"line":930},[79,66165,454],{"emptyLinePlaceholder":453},[79,66167,66168,66171],{"class":81,"line":941},[79,66169,66170],{"class":85},"    .tab-content",[79,66172,17732],{"class":239},[79,66174,66175,66177,66179,66181,66184,66186],{"class":81,"line":946},[79,66176,56805],{"class":96},[79,66178,53550],{"class":239},[79,66180,1030],{"class":96},[79,66182,66183],{"class":96}," 16",[79,66185,53605],{"class":243},[79,66187,3531],{"class":239},[79,66189,66190],{"class":81,"line":969},[79,66191,4402],{"class":239},[79,66193,66194],{"class":81,"line":975},[79,66195,454],{"emptyLinePlaceholder":453},[79,66197,66198,66200,66202],{"class":81,"line":989},[79,66199,66170],{"class":85},[79,66201,64284],{"class":85},[79,66203,17732],{"class":239},[79,66205,66206,66208,66210,66212],{"class":81,"line":1003},[79,66207,57119],{"class":96},[79,66209,53550],{"class":239},[79,66211,56847],{"class":96},[79,66213,3531],{"class":239},[79,66215,66216],{"class":81,"line":1019},[79,66217,4402],{"class":239},[79,66219,66220],{"class":81,"line":1024},[79,66221,454],{"emptyLinePlaceholder":453},[79,66223,66224,66226,66229],{"class":81,"line":1067},[79,66225,66170],{"class":85},[79,66227,66228],{"class":85}," .item.active",[79,66230,17732],{"class":239},[79,66232,66233,66235,66237,66239],{"class":81,"line":1101},[79,66234,57119],{"class":96},[79,66236,53550],{"class":239},[79,66238,62979],{"class":96},[79,66240,3531],{"class":239},[79,66242,66243],{"class":81,"line":1106},[79,66244,4402],{"class":239},[79,66246,66247,66249,66251],{"class":81,"line":1112},[79,66248,54529],{"class":239},[79,66250,2287],{"class":395},[79,66252,53420],{"class":239},[79,66254,66255,66257,66259],{"class":81,"line":1124},[79,66256,53898],{"class":239},[79,66258,53447],{"class":395},[79,66260,53420],{"class":239},[79,66262,66263],{"class":81,"line":1129},[79,66264,454],{"emptyLinePlaceholder":453},[79,66266,66267,66269,66271],{"class":81,"line":1150},[79,66268,392],{"class":239},[79,66270,53913],{"class":395},[79,66272,53420],{"class":239},[79,66274,66275,66277,66279,66281,66283,66286],{"class":81,"line":1161},[79,66276,54257],{"class":239},[79,66278,53724],{"class":395},[79,66280,55596],{"class":85},[79,66282,244],{"class":239},[79,66284,66285],{"class":89},"\"tab\"",[79,66287,53420],{"class":239},[79,66289,66290,66292,66294,66296,66298,66301],{"class":81,"line":1175},[79,66291,53454],{"class":239},[79,66293,53724],{"class":395},[79,66295,55596],{"class":85},[79,66297,244],{"class":239},[79,66299,66300],{"class":89},"\"tab-nav\"",[79,66302,53420],{"class":239},[79,66304,66305,66307,66309,66312,66314],{"class":81,"line":1194},[79,66306,57344],{"class":239},[79,66308,265],{"class":395},[79,66310,66311],{"class":239},">每日特价\u003C\u002F",[79,66313,265],{"class":395},[79,66315,53420],{"class":239},[79,66317,66318,66320,66322],{"class":81,"line":1211},[79,66319,57344],{"class":239},[79,66321,3377],{"class":395},[79,66323,53420],{"class":239},[79,66325,66326,66328,66330,66332,66334,66336,66338,66340,66342,66344,66347,66350,66352,66354,66356],{"class":81,"line":1228},[79,66327,57412],{"class":239},[79,66329,29],{"class":395},[79,66331,63162],{"class":239},[79,66333,2614],{"class":395},[79,66335,55596],{"class":85},[79,66337,244],{"class":239},[79,66339,61816],{"class":89},[79,66341,63167],{"class":85},[79,66343,244],{"class":239},[79,66345,66346],{"class":89},"\"javascript:;\"",[79,66348,66349],{"class":239},">精选\u003C\u002F",[79,66351,2614],{"class":395},[79,66353,57424],{"class":239},[79,66355,29],{"class":395},[79,66357,53420],{"class":239},[79,66359,66360,66362,66364,66366,66368,66370,66372,66374,66377,66379,66381,66383],{"class":81,"line":1246},[79,66361,57412],{"class":239},[79,66363,29],{"class":395},[79,66365,63162],{"class":239},[79,66367,2614],{"class":395},[79,66369,63167],{"class":85},[79,66371,244],{"class":239},[79,66373,66346],{"class":89},[79,66375,66376],{"class":239},">美食\u003C\u002F",[79,66378,2614],{"class":395},[79,66380,57424],{"class":239},[79,66382,29],{"class":395},[79,66384,53420],{"class":239},[79,66386,66387,66389,66391,66393,66395,66397,66399,66401,66404,66406,66408,66410],{"class":81,"line":1251},[79,66388,57412],{"class":239},[79,66390,29],{"class":395},[79,66392,63162],{"class":239},[79,66394,2614],{"class":395},[79,66396,63167],{"class":85},[79,66398,244],{"class":239},[79,66400,66346],{"class":89},[79,66402,66403],{"class":239},">百货\u003C\u002F",[79,66405,2614],{"class":395},[79,66407,57424],{"class":239},[79,66409,29],{"class":395},[79,66411,53420],{"class":239},[79,66413,66414,66416,66418,66420,66422,66424,66426,66428,66431,66433,66435,66437],{"class":81,"line":1274},[79,66415,57412],{"class":239},[79,66417,29],{"class":395},[79,66419,63162],{"class":239},[79,66421,2614],{"class":395},[79,66423,63167],{"class":85},[79,66425,244],{"class":239},[79,66427,66346],{"class":89},[79,66429,66430],{"class":239},">个护\u003C\u002F",[79,66432,2614],{"class":395},[79,66434,57424],{"class":239},[79,66436,29],{"class":395},[79,66438,53420],{"class":239},[79,66440,66441,66443,66445,66447,66449,66451,66453,66455,66458,66460,66462,66464],{"class":81,"line":1296},[79,66442,57412],{"class":239},[79,66444,29],{"class":395},[79,66446,63162],{"class":239},[79,66448,2614],{"class":395},[79,66450,63167],{"class":85},[79,66452,244],{"class":239},[79,66454,66346],{"class":89},[79,66456,66457],{"class":239},">预告\u003C\u002F",[79,66459,2614],{"class":395},[79,66461,57424],{"class":239},[79,66463,29],{"class":395},[79,66465,53420],{"class":239},[79,66467,66468,66470,66472],{"class":81,"line":1316},[79,66469,57517],{"class":239},[79,66471,3377],{"class":395},[79,66473,53420],{"class":239},[79,66475,66476,66478,66480],{"class":81,"line":1321},[79,66477,53889],{"class":239},[79,66479,53724],{"class":395},[79,66481,53420],{"class":239},[79,66483,66484,66486,66488,66490,66492,66495],{"class":81,"line":1326},[79,66485,53454],{"class":239},[79,66487,53724],{"class":395},[79,66489,55596],{"class":85},[79,66491,244],{"class":239},[79,66493,66494],{"class":89},"\"tab-content\"",[79,66496,53420],{"class":239},[79,66498,66499,66501,66503,66505,66507,66510,66512,66514,66516,66518,66521,66523,66525,66527,66530,66532],{"class":81,"line":1342},[79,66500,57344],{"class":239},[79,66502,53724],{"class":395},[79,66504,55596],{"class":85},[79,66506,244],{"class":239},[79,66508,66509],{"class":89},"\"item active\"",[79,66511,63162],{"class":239},[79,66513,3699],{"class":395},[79,66515,57349],{"class":85},[79,66517,244],{"class":239},[79,66519,66520],{"class":89},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[79,66522,57357],{"class":85},[79,66524,244],{"class":239},[79,66526,9846],{"class":89},[79,66528,66529],{"class":239}," \u002F>\u003C\u002F",[79,66531,53724],{"class":395},[79,66533,53420],{"class":239},[79,66535,66536,66538,66540,66542,66544,66546,66548,66550,66552,66554,66557,66559,66561,66563,66565,66567],{"class":81,"line":18985},[79,66537,57344],{"class":239},[79,66539,53724],{"class":395},[79,66541,55596],{"class":85},[79,66543,244],{"class":239},[79,66545,64733],{"class":89},[79,66547,63162],{"class":239},[79,66549,3699],{"class":395},[79,66551,57349],{"class":85},[79,66553,244],{"class":239},[79,66555,66556],{"class":89},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[79,66558,57357],{"class":85},[79,66560,244],{"class":239},[79,66562,9846],{"class":89},[79,66564,66529],{"class":239},[79,66566,53724],{"class":395},[79,66568,53420],{"class":239},[79,66570,66571,66573,66575,66577,66579,66581,66583,66585,66587,66589,66592,66594,66596,66598,66600,66602],{"class":81,"line":18990},[79,66572,57344],{"class":239},[79,66574,53724],{"class":395},[79,66576,55596],{"class":85},[79,66578,244],{"class":239},[79,66580,64733],{"class":89},[79,66582,63162],{"class":239},[79,66584,3699],{"class":395},[79,66586,57349],{"class":85},[79,66588,244],{"class":239},[79,66590,66591],{"class":89},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[79,66593,57357],{"class":85},[79,66595,244],{"class":239},[79,66597,9846],{"class":89},[79,66599,66529],{"class":239},[79,66601,53724],{"class":395},[79,66603,53420],{"class":239},[79,66605,66606,66608,66610,66612,66614,66616,66618,66620,66622,66624,66627,66629,66631,66633,66635,66637],{"class":81,"line":18995},[79,66607,57344],{"class":239},[79,66609,53724],{"class":395},[79,66611,55596],{"class":85},[79,66613,244],{"class":239},[79,66615,64733],{"class":89},[79,66617,63162],{"class":239},[79,66619,3699],{"class":395},[79,66621,57349],{"class":85},[79,66623,244],{"class":239},[79,66625,66626],{"class":89},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[79,66628,57357],{"class":85},[79,66630,244],{"class":239},[79,66632,9846],{"class":89},[79,66634,66529],{"class":239},[79,66636,53724],{"class":395},[79,66638,53420],{"class":239},[79,66640,66641,66643,66645,66647,66649,66651,66653,66655,66657,66659,66662,66664,66666,66668,66670,66672],{"class":81,"line":19009},[79,66642,57344],{"class":239},[79,66644,53724],{"class":395},[79,66646,55596],{"class":85},[79,66648,244],{"class":239},[79,66650,64733],{"class":89},[79,66652,63162],{"class":239},[79,66654,3699],{"class":395},[79,66656,57349],{"class":85},[79,66658,244],{"class":239},[79,66660,66661],{"class":89},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[79,66663,57357],{"class":85},[79,66665,244],{"class":239},[79,66667,9846],{"class":89},[79,66669,66529],{"class":239},[79,66671,53724],{"class":395},[79,66673,53420],{"class":239},[79,66675,66676,66678,66680],{"class":81,"line":19021},[79,66677,53889],{"class":239},[79,66679,53724],{"class":395},[79,66681,53420],{"class":239},[79,66683,66684,66686,66688],{"class":81,"line":19026},[79,66685,54529],{"class":239},[79,66687,53724],{"class":395},[79,66689,53420],{"class":239},[79,66691,66692,66694,66696],{"class":81,"line":19039},[79,66693,54257],{"class":239},[79,66695,53926],{"class":395},[79,66697,53420],{"class":239},[79,66699,66700],{"class":81,"line":19044},[79,66701,66702],{"class":2440},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[79,66704,66705],{"class":81,"line":19049},[79,66706,66707],{"class":2440},"    \u002F\u002F 1.1 获取 a 元素 \n",[79,66709,66710,66712,66715,66717,66719,66721,66723,66726],{"class":81,"line":19054},[79,66711,13385],{"class":243},[79,66713,66714],{"class":96}," as",[79,66716,468],{"class":243},[79,66718,56506],{"class":239},[79,66720,57791],{"class":85},[79,66722,685],{"class":239},[79,66724,66725],{"class":89},"'.tab-nav a'",[79,66727,253],{"class":239},[79,66729,66730],{"class":81,"line":19067},[79,66731,66732],{"class":2440},"    \u002F\u002F console.log(as) \n",[79,66734,66735,66737,66739,66741,66743,66745,66747,66749,66751,66754,66756,66758,66760],{"class":81,"line":19072},[79,66736,949],{"class":243},[79,66738,3887],{"class":239},[79,66740,53960],{"class":243},[79,66742,11622],{"class":239},[79,66744,244],{"class":243},[79,66746,670],{"class":96},[79,66748,11629],{"class":239},[79,66750,392],{"class":243},[79,66752,66753],{"class":239}," as.",[79,66755,54081],{"class":96},[79,66757,5417],{"class":239},[79,66759,4507],{"class":243},[79,66761,14605],{"class":239},[79,66763,66764],{"class":81,"line":34748},[79,66765,66766],{"class":2440},"      \u002F\u002F console.log(as[i])\n",[79,66768,66769],{"class":81,"line":34754},[79,66770,66771],{"class":2440},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[79,66773,66774,66777,66779,66781,66784,66786,66788],{"class":81,"line":34760},[79,66775,66776],{"class":239},"      as[i].",[79,66778,59923],{"class":85},[79,66780,685],{"class":239},[79,66782,66783],{"class":89},"'mouseenter'",[79,66785,1060],{"class":239},[79,66787,56559],{"class":243},[79,66789,56562],{"class":239},[79,66791,66792],{"class":81,"line":34766},[79,66793,66794],{"class":2440},"        \u002F\u002F console.log('鼠标经过')\n",[79,66796,66797],{"class":81,"line":34772},[79,66798,66799],{"class":2440},"        \u002F\u002F 排他思想  \n",[79,66801,66802],{"class":81,"line":34783},[79,66803,66804],{"class":2440},"        \u002F\u002F 干掉别人 移除类active\n",[79,66806,66807,66809,66811,66813,66816,66818,66820,66822,66825],{"class":81,"line":34789},[79,66808,54038],{"class":239},[79,66810,56509],{"class":85},[79,66812,685],{"class":239},[79,66814,66815],{"class":89},"'.tab-nav .active'",[79,66817,59113],{"class":239},[79,66819,59116],{"class":85},[79,66821,685],{"class":239},[79,66823,66824],{"class":89},"'active'",[79,66826,253],{"class":239},[79,66828,66829],{"class":81,"line":34809},[79,66830,66831],{"class":2440},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[79,66833,66834,66837,66840,66842,66844,66846],{"class":81,"line":34815},[79,66835,66836],{"class":96},"        this",[79,66838,66839],{"class":239},".classList.",[79,66841,7530],{"class":85},[79,66843,685],{"class":239},[79,66845,66824],{"class":89},[79,66847,253],{"class":239},[79,66849,66850],{"class":81,"line":34826},[79,66851,454],{"emptyLinePlaceholder":453},[79,66853,66854],{"class":81,"line":34832},[79,66855,66856],{"class":2440},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[79,66858,66859],{"class":81,"line":34838},[79,66860,66861],{"class":2440},"        \u002F\u002F 干掉别人\n",[79,66863,66864,66866,66868,66870,66873,66875,66877,66879,66881],{"class":81,"line":34844},[79,66865,54038],{"class":239},[79,66867,56509],{"class":85},[79,66869,685],{"class":239},[79,66871,66872],{"class":89},"'.tab-content .active'",[79,66874,59113],{"class":239},[79,66876,59116],{"class":85},[79,66878,685],{"class":239},[79,66880,66824],{"class":89},[79,66882,253],{"class":239},[79,66884,66885],{"class":81,"line":34850},[79,66886,66887],{"class":2440},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[79,66889,66890,66892,66894,66896,66899,66901,66903,66905,66907,66909,66911,66913,66915],{"class":81,"line":34856},[79,66891,54038],{"class":239},[79,66893,56509],{"class":85},[79,66895,685],{"class":239},[79,66897,66898],{"class":89},"`.tab-content .item:nth-child(${",[79,66900,2815],{"class":239},[79,66902,47680],{"class":243},[79,66904,27253],{"class":96},[79,66906,59142],{"class":89},[79,66908,59113],{"class":239},[79,66910,7530],{"class":85},[79,66912,685],{"class":239},[79,66914,66824],{"class":89},[79,66916,253],{"class":239},[79,66918,66919],{"class":81,"line":34862},[79,66920,454],{"emptyLinePlaceholder":453},[79,66922,66923],{"class":81,"line":34868},[79,66924,66925],{"class":239},"      })\n",[79,66927,66928],{"class":81,"line":34888},[79,66929,4402],{"class":239},[79,66931,66932,66934,66936],{"class":81,"line":34894},[79,66933,54529],{"class":239},[79,66935,53926],{"class":395},[79,66937,53420],{"class":239},[79,66939,66940,66942,66944],{"class":81,"line":34910},[79,66941,53898],{"class":239},[79,66943,53913],{"class":395},[79,66945,53420],{"class":239},[79,66947,66948],{"class":81,"line":34916},[79,66949,454],{"emptyLinePlaceholder":453},[79,66951,66952,66954,66956],{"class":81,"line":34930},[79,66953,53898],{"class":239},[79,66955,52749],{"class":395},[79,66957,53420],{"class":239},[19,66959,66960],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66962,66963],{},"在监听事件中，this指向的就是他的调用者",[19,66965,66966],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66968,55830],{},[19,66970,66971],{},"(function () {",[19,66973,66974],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66976,66977],{},"list.addEventListener('click', function (e) {",[19,66979,66980],{},"if (e.target.tagName === 'A') {",[19,66982,66983],{},"\u002F\u002F 排他思想",[19,66985,66986],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66988,66989],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66991,66992],{},"\u002F\u002F console.log(old);",[19,66994,66995],{},"\u002F\u002F 判断",[19,66997,66998],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,67000,67001],{},"if (old) old.classList.remove('active')",[19,67003,67004],{},"e.target.classList.add('active')",[19,67006,700],{},[19,67008,54576],{},[19,67010,67011],{},"})();",[265,67013,67015],{"id":67014},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[51,67017,67019],{"className":52747,"code":67018,"language":52749,"meta":57,"style":57},"\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",[59,67020,67021,67031,67035,67043,67047,67061,67075,67087,67095,67101,67111,67121,67125,67129,67136,67148,67159,67176,67188,67202,67212,67216,67220,67227,67238,67256,67266,67278,67282,67286,67293,67310,67321,67333,67337,67341,67348,67360,67364,67372,67380,67384,67392,67400,67408,67423,67467,67475,67488,67501,67514,67522,67530,67538,67566,67574,67586,67599,67612,67620,67628,67636,67662,67670,67683,67695,67708,67716,67724,67732,67758,67766,67779,67791,67804,67812,67820,67828,67833,67853,67858,67878,67883,67900,67905,67913,67918,67947,67960,67964,67968,67973,67977,68005,68010,68027,68032,68037,68042,68047,68073,68077,68081,68089,68097,68101],{"__ignoreMap":57},[79,67022,67023,67025,67027,67029],{"class":81,"line":82},[79,67024,53411],{"class":239},[79,67026,53414],{"class":395},[79,67028,53417],{"class":85},[79,67030,53420],{"class":239},[79,67032,67033],{"class":81,"line":167},[79,67034,454],{"emptyLinePlaceholder":453},[79,67036,67037,67039,67041],{"class":81,"line":178},[79,67038,392],{"class":239},[79,67040,52749],{"class":395},[79,67042,53420],{"class":239},[79,67044,67045],{"class":81,"line":457},[79,67046,454],{"emptyLinePlaceholder":453},[79,67048,67049,67051,67053,67055,67057,67059],{"class":81,"line":462},[79,67050,392],{"class":239},[79,67052,53447],{"class":395},[79,67054,53429],{"class":85},[79,67056,244],{"class":239},[79,67058,53434],{"class":89},[79,67060,53420],{"class":239},[79,67062,67063,67065,67067,67069,67071,67073],{"class":81,"line":474},[79,67064,54257],{"class":239},[79,67066,53457],{"class":395},[79,67068,53460],{"class":85},[79,67070,244],{"class":239},[79,67072,53465],{"class":89},[79,67074,53420],{"class":239},[79,67076,67077,67079,67081,67083,67085],{"class":81,"line":480},[79,67078,54257],{"class":239},[79,67080,53520],{"class":395},[79,67082,57424],{"class":239},[79,67084,53520],{"class":395},[79,67086,53420],{"class":239},[79,67088,67089,67091,67093],{"class":81,"line":486},[79,67090,54257],{"class":239},[79,67092,2287],{"class":395},[79,67094,53420],{"class":239},[79,67096,67097,67099],{"class":81,"line":491},[79,67098,8598],{"class":395},[79,67100,17732],{"class":239},[79,67102,67103,67105,67107,67109],{"class":81,"line":497},[79,67104,56816],{"class":96},[79,67106,53550],{"class":239},[79,67108,1030],{"class":96},[79,67110,3531],{"class":239},[79,67112,67113,67115,67117,67119],{"class":81,"line":503},[79,67114,56805],{"class":96},[79,67116,53550],{"class":239},[79,67118,1030],{"class":96},[79,67120,3531],{"class":239},[79,67122,67123],{"class":81,"line":509},[79,67124,4402],{"class":239},[79,67126,67127],{"class":81,"line":514},[79,67128,454],{"emptyLinePlaceholder":453},[79,67130,67131,67134],{"class":81,"line":520},[79,67132,67133],{"class":395},"    table",[79,67135,17732],{"class":239},[79,67137,67138,67141,67143,67146],{"class":81,"line":526},[79,67139,67140],{"class":96},"      border-collapse",[79,67142,53550],{"class":239},[79,67144,67145],{"class":96},"collapse",[79,67147,3531],{"class":239},[79,67149,67150,67153,67155,67157],{"class":81,"line":532},[79,67151,67152],{"class":96},"      border-spacing",[79,67154,53550],{"class":239},[79,67156,1030],{"class":96},[79,67158,3531],{"class":239},[79,67160,67161,67163,67165,67167,67169,67171,67174],{"class":81,"line":537},[79,67162,64087],{"class":96},[79,67164,53550],{"class":239},[79,67166,1072],{"class":96},[79,67168,53605],{"class":243},[79,67170,53634],{"class":96},[79,67172,67173],{"class":96}," #c0c0c0",[79,67175,3531],{"class":239},[79,67177,67178,67180,67182,67184,67186],{"class":81,"line":543},[79,67179,56881],{"class":96},[79,67181,53550],{"class":239},[79,67183,963],{"class":96},[79,67185,53605],{"class":243},[79,67187,3531],{"class":239},[79,67189,67190,67192,67194,67196,67198,67200],{"class":81,"line":549},[79,67191,56816],{"class":96},[79,67193,53550],{"class":239},[79,67195,2686],{"class":96},[79,67197,53605],{"class":243},[79,67199,53669],{"class":96},[79,67201,3531],{"class":239},[79,67203,67204,67206,67208,67210],{"class":81,"line":555},[79,67205,59396],{"class":96},[79,67207,53550],{"class":239},[79,67209,53705],{"class":96},[79,67211,3531],{"class":239},[79,67213,67214],{"class":81,"line":561},[79,67215,4402],{"class":239},[79,67217,67218],{"class":81,"line":567},[79,67219,454],{"emptyLinePlaceholder":453},[79,67221,67222,67225],{"class":81,"line":573},[79,67223,67224],{"class":395},"    th",[79,67226,17732],{"class":239},[79,67228,67229,67231,67233,67236],{"class":81,"line":579},[79,67230,56994],{"class":96},[79,67232,53550],{"class":239},[79,67234,67235],{"class":96},"#09c",[79,67237,3531],{"class":239},[79,67239,67240,67243,67245,67247,67249,67251,67254],{"class":81,"line":584},[79,67241,67242],{"class":96},"      font",[79,67244,53550],{"class":239},[79,67246,64449],{"class":96},[79,67248,66183],{"class":96},[79,67250,53605],{"class":243},[79,67252,67253],{"class":89}," \"微软雅黑\"",[79,67255,3531],{"class":239},[79,67257,67258,67260,67262,67264],{"class":81,"line":590},[79,67259,59526],{"class":96},[79,67261,53550],{"class":239},[79,67263,62952],{"class":96},[79,67265,3531],{"class":239},[79,67267,67268,67270,67272,67274,67276],{"class":81,"line":596},[79,67269,56895],{"class":96},[79,67271,53550],{"class":239},[79,67273,3173],{"class":96},[79,67275,53605],{"class":243},[79,67277,3531],{"class":239},[79,67279,67280],{"class":81,"line":602},[79,67281,4402],{"class":239},[79,67283,67284],{"class":81,"line":608},[79,67285,454],{"emptyLinePlaceholder":453},[79,67287,67288,67291],{"class":81,"line":614},[79,67289,67290],{"class":395},"    td",[79,67292,17732],{"class":239},[79,67294,67295,67297,67299,67301,67303,67305,67308],{"class":81,"line":620},[79,67296,64087],{"class":96},[79,67298,53550],{"class":239},[79,67300,1072],{"class":96},[79,67302,53605],{"class":243},[79,67304,53634],{"class":96},[79,67306,67307],{"class":96}," #d0d0d0",[79,67309,3531],{"class":239},[79,67311,67312,67314,67316,67319],{"class":81,"line":625},[79,67313,59526],{"class":96},[79,67315,53550],{"class":239},[79,67317,67318],{"class":96},"#404060",[79,67320,3531],{"class":239},[79,67322,67323,67325,67327,67329,67331],{"class":81,"line":630},[79,67324,56805],{"class":96},[79,67326,53550],{"class":239},[79,67328,2820],{"class":96},[79,67330,53605],{"class":243},[79,67332,3531],{"class":239},[79,67334,67335],{"class":81,"line":648},[79,67336,4402],{"class":239},[79,67338,67339],{"class":81,"line":659},[79,67340,454],{"emptyLinePlaceholder":453},[79,67342,67343,67346],{"class":81,"line":676},[79,67344,67345],{"class":85},"    .allCheck",[79,67347,17732],{"class":239},[79,67349,67350,67352,67354,67356,67358],{"class":81,"line":708},[79,67351,56881],{"class":96},[79,67353,53550],{"class":239},[79,67355,2985],{"class":96},[79,67357,53605],{"class":243},[79,67359,3531],{"class":239},[79,67361,67362],{"class":81,"line":717},[79,67363,4402],{"class":239},[79,67365,67366,67368,67370],{"class":81,"line":722},[79,67367,54529],{"class":239},[79,67369,2287],{"class":395},[79,67371,53420],{"class":239},[79,67373,67374,67376,67378],{"class":81,"line":727},[79,67375,53898],{"class":239},[79,67377,53447],{"class":395},[79,67379,53420],{"class":239},[79,67381,67382],{"class":81,"line":738},[79,67383,454],{"emptyLinePlaceholder":453},[79,67385,67386,67388,67390],{"class":81,"line":753},[79,67387,392],{"class":239},[79,67389,53913],{"class":395},[79,67391,53420],{"class":239},[79,67393,67394,67396,67398],{"class":81,"line":768},[79,67395,54257],{"class":239},[79,67397,2516],{"class":395},[79,67399,53420],{"class":239},[79,67401,67402,67404,67406],{"class":81,"line":776},[79,67403,53454],{"class":239},[79,67405,2522],{"class":395},[79,67407,53420],{"class":239},[79,67409,67410,67412,67414,67416,67418,67421],{"class":81,"line":781},[79,67411,57344],{"class":239},[79,67413,2525],{"class":395},[79,67415,55596],{"class":85},[79,67417,244],{"class":239},[79,67419,67420],{"class":89},"\"allCheck\"",[79,67422,53420],{"class":239},[79,67424,67425,67427,67429,67431,67433,67435,67437,67439,67441,67443,67445,67448,67451,67453,67455,67457,67460,67463,67465],{"class":81,"line":786},[79,67426,57412],{"class":239},[79,67428,55931],{"class":395},[79,67430,55934],{"class":85},[79,67432,244],{"class":239},[79,67434,55939],{"class":89},[79,67436,2238],{"class":85},[79,67438,244],{"class":239},[79,67440,9846],{"class":89},[79,67442,17119],{"class":85},[79,67444,244],{"class":239},[79,67446,67447],{"class":89},"\"checkAll\"",[79,67449,67450],{"class":239},"> \u003C",[79,67452,79],{"class":395},[79,67454,55596],{"class":85},[79,67456,244],{"class":239},[79,67458,67459],{"class":89},"\"all\"",[79,67461,67462],{"class":239},">全选\u003C\u002F",[79,67464,79],{"class":395},[79,67466,53420],{"class":239},[79,67468,67469,67471,67473],{"class":81,"line":802},[79,67470,57517],{"class":239},[79,67472,2525],{"class":395},[79,67474,53420],{"class":239},[79,67476,67477,67479,67481,67484,67486],{"class":81,"line":815},[79,67478,57344],{"class":239},[79,67480,2525],{"class":395},[79,67482,67483],{"class":239},">商品\u003C\u002F",[79,67485,2525],{"class":395},[79,67487,53420],{"class":239},[79,67489,67490,67492,67494,67497,67499],{"class":81,"line":828},[79,67491,57344],{"class":239},[79,67493,2525],{"class":395},[79,67495,67496],{"class":239},">商家\u003C\u002F",[79,67498,2525],{"class":395},[79,67500,53420],{"class":239},[79,67502,67503,67505,67507,67510,67512],{"class":81,"line":842},[79,67504,57344],{"class":239},[79,67506,2525],{"class":395},[79,67508,67509],{"class":239},">价格\u003C\u002F",[79,67511,2525],{"class":395},[79,67513,53420],{"class":239},[79,67515,67516,67518,67520],{"class":81,"line":859},[79,67517,53889],{"class":239},[79,67519,2522],{"class":395},[79,67521,53420],{"class":239},[79,67523,67524,67526,67528],{"class":81,"line":878},[79,67525,53454],{"class":239},[79,67527,2522],{"class":395},[79,67529,53420],{"class":239},[79,67531,67532,67534,67536],{"class":81,"line":883},[79,67533,57344],{"class":239},[79,67535,2568],{"class":395},[79,67537,53420],{"class":239},[79,67539,67540,67542,67544,67546,67548,67550,67552,67554,67557,67559,67561,67564],{"class":81,"line":888},[79,67541,57412],{"class":239},[79,67543,55931],{"class":395},[79,67545,55934],{"class":85},[79,67547,244],{"class":239},[79,67549,55939],{"class":89},[79,67551,2238],{"class":85},[79,67553,244],{"class":239},[79,67555,67556],{"class":89},"\"check\"",[79,67558,55596],{"class":85},[79,67560,244],{"class":239},[79,67562,67563],{"class":89},"\"ck\"",[79,67565,53420],{"class":239},[79,67567,67568,67570,67572],{"class":81,"line":904},[79,67569,57517],{"class":239},[79,67571,2568],{"class":395},[79,67573,53420],{"class":239},[79,67575,67576,67578,67580,67582,67584],{"class":81,"line":919},[79,67577,57344],{"class":239},[79,67579,2568],{"class":395},[79,67581,63283],{"class":239},[79,67583,2568],{"class":395},[79,67585,53420],{"class":239},[79,67587,67588,67590,67592,67595,67597],{"class":81,"line":930},[79,67589,57344],{"class":239},[79,67591,2568],{"class":395},[79,67593,67594],{"class":239},">小米\u003C\u002F",[79,67596,2568],{"class":395},[79,67598,53420],{"class":239},[79,67600,67601,67603,67605,67608,67610],{"class":81,"line":941},[79,67602,57344],{"class":239},[79,67604,2568],{"class":395},[79,67606,67607],{"class":239},">￥1999\u003C\u002F",[79,67609,2568],{"class":395},[79,67611,53420],{"class":239},[79,67613,67614,67616,67618],{"class":81,"line":946},[79,67615,53889],{"class":239},[79,67617,2522],{"class":395},[79,67619,53420],{"class":239},[79,67621,67622,67624,67626],{"class":81,"line":969},[79,67623,53454],{"class":239},[79,67625,2522],{"class":395},[79,67627,53420],{"class":239},[79,67629,67630,67632,67634],{"class":81,"line":975},[79,67631,57344],{"class":239},[79,67633,2568],{"class":395},[79,67635,53420],{"class":239},[79,67637,67638,67640,67642,67644,67646,67648,67650,67652,67654,67656,67658,67660],{"class":81,"line":989},[79,67639,57412],{"class":239},[79,67641,55931],{"class":395},[79,67643,55934],{"class":85},[79,67645,244],{"class":239},[79,67647,55939],{"class":89},[79,67649,2238],{"class":85},[79,67651,244],{"class":239},[79,67653,67556],{"class":89},[79,67655,55596],{"class":85},[79,67657,244],{"class":239},[79,67659,67563],{"class":89},[79,67661,53420],{"class":239},[79,67663,67664,67666,67668],{"class":81,"line":1003},[79,67665,57517],{"class":239},[79,67667,2568],{"class":395},[79,67669,53420],{"class":239},[79,67671,67672,67674,67676,67679,67681],{"class":81,"line":1019},[79,67673,57344],{"class":239},[79,67675,2568],{"class":395},[79,67677,67678],{"class":239},">小米净水器\u003C\u002F",[79,67680,2568],{"class":395},[79,67682,53420],{"class":239},[79,67684,67685,67687,67689,67691,67693],{"class":81,"line":1024},[79,67686,57344],{"class":239},[79,67688,2568],{"class":395},[79,67690,67594],{"class":239},[79,67692,2568],{"class":395},[79,67694,53420],{"class":239},[79,67696,67697,67699,67701,67704,67706],{"class":81,"line":1067},[79,67698,57344],{"class":239},[79,67700,2568],{"class":395},[79,67702,67703],{"class":239},">￥4999\u003C\u002F",[79,67705,2568],{"class":395},[79,67707,53420],{"class":239},[79,67709,67710,67712,67714],{"class":81,"line":1101},[79,67711,53889],{"class":239},[79,67713,2522],{"class":395},[79,67715,53420],{"class":239},[79,67717,67718,67720,67722],{"class":81,"line":1106},[79,67719,53454],{"class":239},[79,67721,2522],{"class":395},[79,67723,53420],{"class":239},[79,67725,67726,67728,67730],{"class":81,"line":1112},[79,67727,57344],{"class":239},[79,67729,2568],{"class":395},[79,67731,53420],{"class":239},[79,67733,67734,67736,67738,67740,67742,67744,67746,67748,67750,67752,67754,67756],{"class":81,"line":1124},[79,67735,57412],{"class":239},[79,67737,55931],{"class":395},[79,67739,55934],{"class":85},[79,67741,244],{"class":239},[79,67743,55939],{"class":89},[79,67745,2238],{"class":85},[79,67747,244],{"class":239},[79,67749,67556],{"class":89},[79,67751,55596],{"class":85},[79,67753,244],{"class":239},[79,67755,67563],{"class":89},[79,67757,53420],{"class":239},[79,67759,67760,67762,67764],{"class":81,"line":1129},[79,67761,57517],{"class":239},[79,67763,2568],{"class":395},[79,67765,53420],{"class":239},[79,67767,67768,67770,67772,67775,67777],{"class":81,"line":1150},[79,67769,57344],{"class":239},[79,67771,2568],{"class":395},[79,67773,67774],{"class":239},">小米电视\u003C\u002F",[79,67776,2568],{"class":395},[79,67778,53420],{"class":239},[79,67780,67781,67783,67785,67787,67789],{"class":81,"line":1161},[79,67782,57344],{"class":239},[79,67784,2568],{"class":395},[79,67786,67594],{"class":239},[79,67788,2568],{"class":395},[79,67790,53420],{"class":239},[79,67792,67793,67795,67797,67800,67802],{"class":81,"line":1175},[79,67794,57344],{"class":239},[79,67796,2568],{"class":395},[79,67798,67799],{"class":239},">￥5999\u003C\u002F",[79,67801,2568],{"class":395},[79,67803,53420],{"class":239},[79,67805,67806,67808,67810],{"class":81,"line":1194},[79,67807,53889],{"class":239},[79,67809,2522],{"class":395},[79,67811,53420],{"class":239},[79,67813,67814,67816,67818],{"class":81,"line":1211},[79,67815,54529],{"class":239},[79,67817,2516],{"class":395},[79,67819,53420],{"class":239},[79,67821,67822,67824,67826],{"class":81,"line":1228},[79,67823,54257],{"class":239},[79,67825,53926],{"class":395},[79,67827,53420],{"class":239},[79,67829,67830],{"class":81,"line":1246},[79,67831,67832],{"class":2440},"    \u002F\u002F 1. 获取大复选框\n",[79,67834,67835,67837,67840,67842,67844,67846,67848,67851],{"class":81,"line":1251},[79,67836,13385],{"class":243},[79,67838,67839],{"class":96}," checkAll",[79,67841,468],{"class":243},[79,67843,56506],{"class":239},[79,67845,56509],{"class":85},[79,67847,685],{"class":239},[79,67849,67850],{"class":89},"'#checkAll'",[79,67852,253],{"class":239},[79,67854,67855],{"class":81,"line":1274},[79,67856,67857],{"class":2440},"    \u002F\u002F 2. 获取所有的小复选框\n",[79,67859,67860,67862,67865,67867,67869,67871,67873,67876],{"class":81,"line":1296},[79,67861,13385],{"class":243},[79,67863,67864],{"class":96}," cks",[79,67866,468],{"class":243},[79,67868,56506],{"class":239},[79,67870,57791],{"class":85},[79,67872,685],{"class":239},[79,67874,67875],{"class":89},"'.ck'",[79,67877,253],{"class":239},[79,67879,67880],{"class":81,"line":1316},[79,67881,67882],{"class":2440},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[79,67884,67885,67888,67890,67892,67894,67896,67898],{"class":81,"line":1321},[79,67886,67887],{"class":239},"    checkAll.",[79,67889,59923],{"class":85},[79,67891,685],{"class":239},[79,67893,59928],{"class":89},[79,67895,1060],{"class":239},[79,67897,56559],{"class":243},[79,67899,56562],{"class":239},[79,67901,67902],{"class":81,"line":1326},[79,67903,67904],{"class":2440},"      \u002F\u002F 得到当前大复选框的选中状态\n",[79,67906,67907,67910],{"class":81,"line":1342},[79,67908,67909],{"class":2440},"      \u002F\u002F console.log(checkAll.checked)",[79,67911,67912],{"class":2440},"  \u002F\u002F 得到 是 true 或者是 false\n",[79,67914,67915],{"class":81,"line":18985},[79,67916,67917],{"class":2440},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[79,67919,67920,67922,67924,67926,67928,67930,67932,67934,67936,67939,67941,67943,67945],{"class":81,"line":18990},[79,67921,54396],{"class":243},[79,67923,3887],{"class":239},[79,67925,53960],{"class":243},[79,67927,11622],{"class":239},[79,67929,244],{"class":243},[79,67931,670],{"class":96},[79,67933,11629],{"class":239},[79,67935,392],{"class":243},[79,67937,67938],{"class":239}," cks.",[79,67940,54081],{"class":96},[79,67942,5417],{"class":239},[79,67944,4507],{"class":243},[79,67946,14605],{"class":239},[79,67948,67949,67952,67954,67957],{"class":81,"line":18995},[79,67950,67951],{"class":239},"        cks[i].checked ",[79,67953,244],{"class":243},[79,67955,67956],{"class":96}," this",[79,67958,67959],{"class":239},".checked\n",[79,67961,67962],{"class":81,"line":19009},[79,67963,54510],{"class":239},[79,67965,67966],{"class":81,"line":19021},[79,67967,35576],{"class":239},[79,67969,67970],{"class":81,"line":19026},[79,67971,67972],{"class":2440},"    \u002F\u002F 5. 小复选框控制大复选框\n",[79,67974,67975],{"class":81,"line":19039},[79,67976,454],{"emptyLinePlaceholder":453},[79,67978,67979,67981,67983,67985,67987,67989,67991,67993,67995,67997,67999,68001,68003],{"class":81,"line":19044},[79,67980,949],{"class":243},[79,67982,3887],{"class":239},[79,67984,53960],{"class":243},[79,67986,11622],{"class":239},[79,67988,244],{"class":243},[79,67990,670],{"class":96},[79,67992,11629],{"class":239},[79,67994,392],{"class":243},[79,67996,67938],{"class":239},[79,67998,54081],{"class":96},[79,68000,5417],{"class":239},[79,68002,4507],{"class":243},[79,68004,14605],{"class":239},[79,68006,68007],{"class":81,"line":19049},[79,68008,68009],{"class":2440},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[79,68011,68012,68015,68017,68019,68021,68023,68025],{"class":81,"line":19054},[79,68013,68014],{"class":239},"      cks[i].",[79,68016,59923],{"class":85},[79,68018,685],{"class":239},[79,68020,59928],{"class":89},[79,68022,1060],{"class":239},[79,68024,56559],{"class":243},[79,68026,56562],{"class":239},[79,68028,68029],{"class":81,"line":19067},[79,68030,68031],{"class":2440},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[79,68033,68034],{"class":81,"line":19072},[79,68035,68036],{"class":2440},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[79,68038,68039],{"class":81,"line":34748},[79,68040,68041],{"class":2440},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[79,68043,68044],{"class":81,"line":34754},[79,68045,68046],{"class":2440},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[79,68048,68049,68052,68054,68056,68058,68060,68063,68065,68067,68069,68071],{"class":81,"line":34760},[79,68050,68051],{"class":239},"        checkAll.checked ",[79,68053,244],{"class":243},[79,68055,56506],{"class":239},[79,68057,57791],{"class":85},[79,68059,685],{"class":239},[79,68061,68062],{"class":89},"'.ck:checked'",[79,68064,32950],{"class":239},[79,68066,54081],{"class":96},[79,68068,60016],{"class":243},[79,68070,67938],{"class":239},[79,68072,57941],{"class":96},[79,68074,68075],{"class":81,"line":34766},[79,68076,66925],{"class":239},[79,68078,68079],{"class":81,"line":34772},[79,68080,4402],{"class":239},[79,68082,68083,68085,68087],{"class":81,"line":34783},[79,68084,54529],{"class":239},[79,68086,53926],{"class":395},[79,68088,53420],{"class":239},[79,68090,68091,68093,68095],{"class":81,"line":34789},[79,68092,53898],{"class":239},[79,68094,53913],{"class":395},[79,68096,53420],{"class":239},[79,68098,68099],{"class":81,"line":34809},[79,68100,454],{"emptyLinePlaceholder":453},[79,68102,68103,68105,68107],{"class":81,"line":34815},[79,68104,53898],{"class":239},[79,68106,52749],{"class":395},[79,68108,53420],{"class":239},[19,68110,68111],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,68113,68114],{},"用好之间比较得到的布尔值！！！",[19,68116,68117,68118,68121,68122,3887,68125,2957,68127,68130],{},"在 JS 里访问的时候，",[59,68119,68120],{},"checkbox.checked"," 是一个 ",[2528,68123,68124],{},"布尔值",[59,68126,3599],{},[59,68128,68129],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,68132,68133,68134,68137,68138],{},"HTML 的 ",[59,68135,68136],{},"checked=\"checked\""," 只是 ",[2528,68139,68140,68141,68144],{},"初始值；JS 的 ",[59,68142,68143],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,68146,68147],{},"：checked是一个伪类选择器",[19,68149,68150],{},[3699,68151],{"alt":57,"src":68152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,68154,68155,68158],{},[68156,68157],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,68160,68161],{},[3699,68162],{"alt":57,"src":68163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68165,68167],{"id":68166},"_33-dom事件进阶","3.3 DOM事件进阶",[265,68169,68171],{"id":68170},"_331-事件流","3.3.1 事件流",[19,68173,68174],{},[3699,68175],{"alt":57,"src":68176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[24137,68178,68180],{"id":68179},"_3311-事件捕获","3.3.1.1 事件捕获",[19,68182,68183],{},[3699,68184],{"alt":57,"src":68185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[51,68187,68189],{"className":52747,"code":68188,"language":52749,"meta":57,"style":57},"\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",[59,68190,68191,68201,68215,68219,68227,68241,68261,68273,68281,68288,68300,68312,68322,68326,68330,68337,68349,68361,68371,68375,68383,68391,68395,68403,68418,68437,68445,68453,68473,68493,68509,68520,68528,68545,68556,68564,68581,68592,68600,68608,68616,68620],{"__ignoreMap":57},[79,68192,68193,68195,68197,68199],{"class":81,"line":82},[79,68194,53411],{"class":239},[79,68196,53414],{"class":395},[79,68198,53417],{"class":85},[79,68200,53420],{"class":239},[79,68202,68203,68205,68207,68209,68211,68213],{"class":81,"line":167},[79,68204,392],{"class":239},[79,68206,52749],{"class":395},[79,68208,53429],{"class":85},[79,68210,244],{"class":239},[79,68212,53434],{"class":89},[79,68214,53420],{"class":239},[79,68216,68217],{"class":81,"line":178},[79,68218,454],{"emptyLinePlaceholder":453},[79,68220,68221,68223,68225],{"class":81,"line":457},[79,68222,392],{"class":239},[79,68224,53447],{"class":395},[79,68226,53420],{"class":239},[79,68228,68229,68231,68233,68235,68237,68239],{"class":81,"line":462},[79,68230,54257],{"class":239},[79,68232,53457],{"class":395},[79,68234,53460],{"class":85},[79,68236,244],{"class":239},[79,68238,53465],{"class":89},[79,68240,53420],{"class":239},[79,68242,68243,68245,68247,68249,68251,68253,68255,68257,68259],{"class":81,"line":474},[79,68244,54257],{"class":239},[79,68246,53457],{"class":395},[79,68248,2238],{"class":85},[79,68250,244],{"class":239},[79,68252,53504],{"class":89},[79,68254,53484],{"class":85},[79,68256,244],{"class":239},[79,68258,53511],{"class":89},[79,68260,53420],{"class":239},[79,68262,68263,68265,68267,68269,68271],{"class":81,"line":480},[79,68264,54257],{"class":239},[79,68266,53520],{"class":395},[79,68268,53523],{"class":239},[79,68270,53520],{"class":395},[79,68272,53420],{"class":239},[79,68274,68275,68277,68279],{"class":81,"line":486},[79,68276,54257],{"class":239},[79,68278,2287],{"class":395},[79,68280,53420],{"class":239},[79,68282,68283,68286],{"class":81,"line":491},[79,68284,68285],{"class":85},"    .father",[79,68287,17732],{"class":239},[79,68289,68290,68292,68294,68296,68298],{"class":81,"line":497},[79,68291,56881],{"class":96},[79,68293,53550],{"class":239},[79,68295,963],{"class":96},[79,68297,53605],{"class":243},[79,68299,3531],{"class":239},[79,68301,68302,68304,68306,68308,68310],{"class":81,"line":503},[79,68303,56895],{"class":96},[79,68305,53550],{"class":239},[79,68307,963],{"class":96},[79,68309,53605],{"class":243},[79,68311,3531],{"class":239},[79,68313,68314,68316,68318,68320],{"class":81,"line":509},[79,68315,56994],{"class":96},[79,68317,53550],{"class":239},[79,68319,53758],{"class":96},[79,68321,3531],{"class":239},[79,68323,68324],{"class":81,"line":514},[79,68325,4402],{"class":239},[79,68327,68328],{"class":81,"line":520},[79,68329,454],{"emptyLinePlaceholder":453},[79,68331,68332,68335],{"class":81,"line":526},[79,68333,68334],{"class":85},"    .son",[79,68336,17732],{"class":239},[79,68338,68339,68341,68343,68345,68347],{"class":81,"line":532},[79,68340,56881],{"class":96},[79,68342,53550],{"class":239},[79,68344,3947],{"class":96},[79,68346,53605],{"class":243},[79,68348,3531],{"class":239},[79,68350,68351,68353,68355,68357,68359],{"class":81,"line":537},[79,68352,56895],{"class":96},[79,68354,53550],{"class":239},[79,68356,3947],{"class":96},[79,68358,53605],{"class":243},[79,68360,3531],{"class":239},[79,68362,68363,68365,68367,68369],{"class":81,"line":543},[79,68364,56994],{"class":96},[79,68366,53550],{"class":239},[79,68368,56999],{"class":96},[79,68370,3531],{"class":239},[79,68372,68373],{"class":81,"line":549},[79,68374,4402],{"class":239},[79,68376,68377,68379,68381],{"class":81,"line":555},[79,68378,54529],{"class":239},[79,68380,2287],{"class":395},[79,68382,53420],{"class":239},[79,68384,68385,68387,68389],{"class":81,"line":561},[79,68386,53898],{"class":239},[79,68388,53447],{"class":395},[79,68390,53420],{"class":239},[79,68392,68393],{"class":81,"line":567},[79,68394,454],{"emptyLinePlaceholder":453},[79,68396,68397,68399,68401],{"class":81,"line":573},[79,68398,392],{"class":239},[79,68400,53913],{"class":395},[79,68402,53420],{"class":239},[79,68404,68405,68407,68409,68411,68413,68416],{"class":81,"line":579},[79,68406,54257],{"class":239},[79,68408,53724],{"class":395},[79,68410,55596],{"class":85},[79,68412,244],{"class":239},[79,68414,68415],{"class":89},"\"father\"",[79,68417,53420],{"class":239},[79,68419,68420,68422,68424,68426,68428,68431,68433,68435],{"class":81,"line":584},[79,68421,53454],{"class":239},[79,68423,53724],{"class":395},[79,68425,55596],{"class":85},[79,68427,244],{"class":239},[79,68429,68430],{"class":89},"\"son\"",[79,68432,57424],{"class":239},[79,68434,53724],{"class":395},[79,68436,53420],{"class":239},[79,68438,68439,68441,68443],{"class":81,"line":590},[79,68440,54529],{"class":239},[79,68442,53724],{"class":395},[79,68444,53420],{"class":239},[79,68446,68447,68449,68451],{"class":81,"line":596},[79,68448,54257],{"class":239},[79,68450,53926],{"class":395},[79,68452,53420],{"class":239},[79,68454,68455,68457,68460,68462,68464,68466,68468,68471],{"class":81,"line":602},[79,68456,13385],{"class":243},[79,68458,68459],{"class":96}," fa",[79,68461,468],{"class":243},[79,68463,56506],{"class":239},[79,68465,56509],{"class":85},[79,68467,685],{"class":239},[79,68469,68470],{"class":89},"'.father'",[79,68472,253],{"class":239},[79,68474,68475,68477,68480,68482,68484,68486,68488,68491],{"class":81,"line":608},[79,68476,13385],{"class":243},[79,68478,68479],{"class":96}," son",[79,68481,468],{"class":243},[79,68483,56506],{"class":239},[79,68485,56509],{"class":85},[79,68487,685],{"class":239},[79,68489,68490],{"class":89},"'.son'",[79,68492,253],{"class":239},[79,68494,68495,68497,68499,68501,68503,68505,68507],{"class":81,"line":614},[79,68496,54519],{"class":239},[79,68498,59923],{"class":85},[79,68500,685],{"class":239},[79,68502,59928],{"class":89},[79,68504,1060],{"class":239},[79,68506,56559],{"class":243},[79,68508,56562],{"class":239},[79,68510,68511,68513,68515,68518],{"class":81,"line":620},[79,68512,61035],{"class":85},[79,68514,685],{"class":239},[79,68516,68517],{"class":89},"'woshiu1'",[79,68519,253],{"class":239},[79,68521,68522,68524,68526],{"class":81,"line":625},[79,68523,56645],{"class":239},[79,68525,3599],{"class":96},[79,68527,253],{"class":239},[79,68529,68530,68533,68535,68537,68539,68541,68543],{"class":81,"line":630},[79,68531,68532],{"class":239},"    fa.",[79,68534,59923],{"class":85},[79,68536,685],{"class":239},[79,68538,59928],{"class":89},[79,68540,1060],{"class":239},[79,68542,56559],{"class":243},[79,68544,56562],{"class":239},[79,68546,68547,68549,68551,68554],{"class":81,"line":648},[79,68548,61035],{"class":85},[79,68550,685],{"class":239},[79,68552,68553],{"class":89},"'1'",[79,68555,253],{"class":239},[79,68557,68558,68560,68562],{"class":81,"line":659},[79,68559,56645],{"class":239},[79,68561,3599],{"class":96},[79,68563,253],{"class":239},[79,68565,68566,68569,68571,68573,68575,68577,68579],{"class":81,"line":676},[79,68567,68568],{"class":239},"    son.",[79,68570,59923],{"class":85},[79,68572,685],{"class":239},[79,68574,59928],{"class":89},[79,68576,1060],{"class":239},[79,68578,56559],{"class":243},[79,68580,56562],{"class":239},[79,68582,68583,68585,68587,68590],{"class":81,"line":708},[79,68584,61035],{"class":85},[79,68586,685],{"class":239},[79,68588,68589],{"class":89},"'2'",[79,68591,253],{"class":239},[79,68593,68594,68596,68598],{"class":81,"line":717},[79,68595,56645],{"class":239},[79,68597,3599],{"class":96},[79,68599,253],{"class":239},[79,68601,68602,68604,68606],{"class":81,"line":722},[79,68603,54529],{"class":239},[79,68605,53926],{"class":395},[79,68607,53420],{"class":239},[79,68609,68610,68612,68614],{"class":81,"line":727},[79,68611,53898],{"class":239},[79,68613,53913],{"class":395},[79,68615,53420],{"class":239},[79,68617,68618],{"class":81,"line":738},[79,68619,454],{"emptyLinePlaceholder":453},[79,68621,68622,68624,68626],{"class":81,"line":753},[79,68623,53898],{"class":239},[79,68625,52749],{"class":395},[79,68627,53420],{"class":239},[19,68629,68630],{},[3699,68631],{"alt":57,"src":68632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68634,68635],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[24137,68637,68639],{"id":68638},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68641,68642],{},[3699,68643],{"alt":57,"src":68644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68646,68647],{},"反着来",[19,68649,68650],{},"注意是同名事件，比如都是‘click’",[24137,68652,68654],{"id":68653},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68656,68657],{},[3699,68658],{"alt":57,"src":68659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[24137,68661,68663],{"id":68662},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68665,68666],{},[3699,68667],{"alt":57,"src":68668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68670,68671],{},[3699,68672],{"alt":57,"src":68673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[24137,68675,68677],{"id":68676},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[26,68679,68680],{},[29,68681,68682],{},"事件类型的区别",[19,68684,68685],{},[3699,68686],{"alt":57,"src":68687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68689,68690],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[26,68692,68693],{"start":167},[29,68694,68695],{},"注册事件的区别",[19,68697,68698],{},[3699,68699],{"alt":57,"src":68700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[24137,68702,68704],{"id":68703},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68706,68707],{},[3699,68708],{"alt":57,"src":68709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68711,68712],{},[3699,68713],{"alt":57,"src":68714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[51,68716,68718],{"className":383,"code":68717,"language":385,"meta":57,"style":57},"\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",[59,68719,68720,68728,68745,68768,68776,68781,68786,68791,68795,68803,68811],{"__ignoreMap":57},[79,68721,68722,68724,68726],{"class":81,"line":82},[79,68723,392],{"class":239},[79,68725,53913],{"class":395},[79,68727,53420],{"class":239},[79,68729,68730,68732,68735,68738,68740,68743],{"class":81,"line":167},[79,68731,54257],{"class":239},[79,68733,68734],{"class":395},"form",[79,68736,68737],{"class":85}," action",[79,68739,244],{"class":239},[79,68741,68742],{"class":89},"\"http:\u002F\u002Fwww.itcast.cn\"",[79,68744,53420],{"class":239},[79,68746,68747,68749,68751,68753,68755,68758,68761,68763,68766],{"class":81,"line":178},[79,68748,53454],{"class":239},[79,68750,55931],{"class":395},[79,68752,55934],{"class":85},[79,68754,244],{"class":239},[79,68756,68757],{"class":89},"\"submit\"",[79,68759,68760],{"class":85}," value",[79,68762,244],{"class":239},[79,68764,68765],{"class":89},"\"免费注册\"",[79,68767,53420],{"class":239},[79,68769,68770,68772,68774],{"class":81,"line":457},[79,68771,53454],{"class":239},[79,68773,53926],{"class":395},[79,68775,53420],{"class":239},[79,68777,68778],{"class":81,"line":462},[79,68779,68780],{"class":239},"      const form = document.querySelector('form')\n",[79,68782,68783],{"class":81,"line":474},[79,68784,68785],{"class":239},"      form.addEventListener('submit', function (e) {\n",[79,68787,68788],{"class":81,"line":480},[79,68789,68790],{"class":239},"        e.preventDefault()\n",[79,68792,68793],{"class":81,"line":486},[79,68794,66925],{"class":239},[79,68796,68797,68799,68801],{"class":81,"line":491},[79,68798,53889],{"class":239},[79,68800,53926],{"class":395},[79,68802,53420],{"class":239},[79,68804,68805,68807,68809],{"class":81,"line":497},[79,68806,54529],{"class":239},[79,68808,68734],{"class":395},[79,68810,53420],{"class":239},[79,68812,68813,68815,68817],{"class":81,"line":503},[79,68814,53898],{"class":239},[79,68816,53913],{"class":395},[79,68818,53420],{"class":239},[19,68820,68821],{},"点击不在跳转！！！",[265,68823,68825],{"id":68824},"_332-事件委托","3.3.2 事件委托",[19,68827,68828],{},[3699,68829],{"alt":57,"src":68830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[51,68832,68834],{"className":52747,"code":68833,"language":52749,"meta":57,"style":57},"\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",[59,68835,68836,68846,68860,68864,68872,68886,68906,68918,68926,68930,68938,68946,68958,68970,68982,68994,69006,69019,69027,69035,69040,69059,69080,69085,69090,69095,69100,69109,69113,69123,69127,69132,69137,69151,69161,69165,69169,69177,69185,69189],{"__ignoreMap":57},[79,68837,68838,68840,68842,68844],{"class":81,"line":82},[79,68839,53411],{"class":239},[79,68841,53414],{"class":395},[79,68843,53417],{"class":85},[79,68845,53420],{"class":239},[79,68847,68848,68850,68852,68854,68856,68858],{"class":81,"line":167},[79,68849,392],{"class":239},[79,68851,52749],{"class":395},[79,68853,53429],{"class":85},[79,68855,244],{"class":239},[79,68857,53434],{"class":89},[79,68859,53420],{"class":239},[79,68861,68862],{"class":81,"line":178},[79,68863,454],{"emptyLinePlaceholder":453},[79,68865,68866,68868,68870],{"class":81,"line":457},[79,68867,392],{"class":239},[79,68869,53447],{"class":395},[79,68871,53420],{"class":239},[79,68873,68874,68876,68878,68880,68882,68884],{"class":81,"line":462},[79,68875,54257],{"class":239},[79,68877,53457],{"class":395},[79,68879,53460],{"class":85},[79,68881,244],{"class":239},[79,68883,53465],{"class":89},[79,68885,53420],{"class":239},[79,68887,68888,68890,68892,68894,68896,68898,68900,68902,68904],{"class":81,"line":474},[79,68889,54257],{"class":239},[79,68891,53457],{"class":395},[79,68893,2238],{"class":85},[79,68895,244],{"class":239},[79,68897,53504],{"class":89},[79,68899,53484],{"class":85},[79,68901,244],{"class":239},[79,68903,53511],{"class":89},[79,68905,53420],{"class":239},[79,68907,68908,68910,68912,68914,68916],{"class":81,"line":480},[79,68909,54257],{"class":239},[79,68911,53520],{"class":395},[79,68913,53523],{"class":239},[79,68915,53520],{"class":395},[79,68917,53420],{"class":239},[79,68919,68920,68922,68924],{"class":81,"line":486},[79,68921,53898],{"class":239},[79,68923,53447],{"class":395},[79,68925,53420],{"class":239},[79,68927,68928],{"class":81,"line":491},[79,68929,454],{"emptyLinePlaceholder":453},[79,68931,68932,68934,68936],{"class":81,"line":497},[79,68933,392],{"class":239},[79,68935,53913],{"class":395},[79,68937,53420],{"class":239},[79,68939,68940,68942,68944],{"class":81,"line":503},[79,68941,54257],{"class":239},[79,68943,3377],{"class":395},[79,68945,53420],{"class":239},[79,68947,68948,68950,68952,68954,68956],{"class":81,"line":509},[79,68949,53454],{"class":239},[79,68951,29],{"class":395},[79,68953,56076],{"class":239},[79,68955,29],{"class":395},[79,68957,53420],{"class":239},[79,68959,68960,68962,68964,68966,68968],{"class":81,"line":514},[79,68961,53454],{"class":239},[79,68963,29],{"class":395},[79,68965,56095],{"class":239},[79,68967,29],{"class":395},[79,68969,53420],{"class":239},[79,68971,68972,68974,68976,68978,68980],{"class":81,"line":520},[79,68973,53454],{"class":239},[79,68975,29],{"class":395},[79,68977,56114],{"class":239},[79,68979,29],{"class":395},[79,68981,53420],{"class":239},[79,68983,68984,68986,68988,68990,68992],{"class":81,"line":526},[79,68985,53454],{"class":239},[79,68987,29],{"class":395},[79,68989,56133],{"class":239},[79,68991,29],{"class":395},[79,68993,53420],{"class":239},[79,68995,68996,68998,69000,69002,69004],{"class":81,"line":532},[79,68997,53454],{"class":239},[79,68999,29],{"class":395},[79,69001,56152],{"class":239},[79,69003,29],{"class":395},[79,69005,53420],{"class":239},[79,69007,69008,69010,69012,69015,69017],{"class":81,"line":537},[79,69009,53454],{"class":239},[79,69011,19],{"class":395},[79,69013,69014],{"class":239},">我不需要变色\u003C\u002F",[79,69016,19],{"class":395},[79,69018,53420],{"class":239},[79,69020,69021,69023,69025],{"class":81,"line":543},[79,69022,54529],{"class":239},[79,69024,3377],{"class":395},[79,69026,53420],{"class":239},[79,69028,69029,69031,69033],{"class":81,"line":549},[79,69030,54257],{"class":239},[79,69032,53926],{"class":395},[79,69034,53420],{"class":239},[79,69036,69037],{"class":81,"line":555},[79,69038,69039],{"class":2440},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[79,69041,69042,69044,69046,69048,69050,69052,69054,69057],{"class":81,"line":561},[79,69043,13385],{"class":243},[79,69045,63402],{"class":96},[79,69047,468],{"class":243},[79,69049,56506],{"class":239},[79,69051,56509],{"class":85},[79,69053,685],{"class":239},[79,69055,69056],{"class":89},"'ul'",[79,69058,253],{"class":239},[79,69060,69061,69064,69066,69068,69070,69072,69074,69076,69078],{"class":81,"line":567},[79,69062,69063],{"class":239},"    ul.",[79,69065,59923],{"class":85},[79,69067,685],{"class":239},[79,69069,59928],{"class":89},[79,69071,1060],{"class":239},[79,69073,56559],{"class":243},[79,69075,3887],{"class":239},[79,69077,2455],{"class":7412},[79,69079,14605],{"class":239},[79,69081,69082],{"class":81,"line":573},[79,69083,69084],{"class":2440},"      \u002F\u002F alert(1)\n",[79,69086,69087],{"class":81,"line":579},[79,69088,69089],{"class":2440},"      \u002F\u002F e.target就是我们点击的对象\n",[79,69091,69092],{"class":81,"line":584},[79,69093,69094],{"class":2440},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[79,69096,69097],{"class":81,"line":590},[79,69098,69099],{"class":2440},"      \u002F\u002F e.target.style.color = 'red'\n",[79,69101,69102,69104,69106],{"class":81,"line":596},[79,69103,60354],{"class":239},[79,69105,60357],{"class":85},[79,69107,69108],{"class":239},"(e)\n",[79,69110,69111],{"class":81,"line":602},[79,69112,454],{"emptyLinePlaceholder":453},[79,69114,69115,69117,69120],{"class":81,"line":608},[79,69116,60354],{"class":239},[79,69118,69119],{"class":85},"dir",[79,69121,69122],{"class":239},"(e.target)\n",[79,69124,69125],{"class":81,"line":614},[79,69126,454],{"emptyLinePlaceholder":453},[79,69128,69129],{"class":81,"line":620},[79,69130,69131],{"class":2440},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[79,69133,69134],{"class":81,"line":625},[79,69135,69136],{"class":2440},"      \u002F\u002F 通过tagName来进行判断\n",[79,69138,69139,69141,69144,69146,69149],{"class":81,"line":630},[79,69140,56590],{"class":243},[79,69142,69143],{"class":239}," (e.target.tagName ",[79,69145,56596],{"class":243},[79,69147,69148],{"class":89}," 'LI'",[79,69150,14605],{"class":239},[79,69152,69153,69156,69158],{"class":81,"line":648},[79,69154,69155],{"class":239},"        e.target.style.color ",[79,69157,244],{"class":243},[79,69159,69160],{"class":89}," 'red'\n",[79,69162,69163],{"class":81,"line":659},[79,69164,54510],{"class":239},[79,69166,69167],{"class":81,"line":676},[79,69168,35576],{"class":239},[79,69170,69171,69173,69175],{"class":81,"line":708},[79,69172,54529],{"class":239},[79,69174,53926],{"class":395},[79,69176,53420],{"class":239},[79,69178,69179,69181,69183],{"class":81,"line":717},[79,69180,53898],{"class":239},[79,69182,53913],{"class":395},[79,69184,53420],{"class":239},[79,69186,69187],{"class":81,"line":722},[79,69188,454],{"emptyLinePlaceholder":453},[79,69190,69191,69193,69195],{"class":81,"line":727},[79,69192,53898],{"class":239},[79,69194,52749],{"class":395},[79,69196,53420],{"class":239},[19,69198,69199],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,69201,69202],{},"if(e.target.ragName==='P') {}",[19,69204,69205],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,69207,69208],{},"通过事件委托的方式实现tab栏切换改造：",[19,69210,69211],{},"一定要记住自定义属性！！！！！！",[19,69213,69214],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,69216,69217],{},"id是自定义的属性名",[19,69219,69220],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[51,69222,69224],{"className":52747,"code":69223,"language":52749,"meta":57,"style":57},"\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",[59,69225,69226,69236,69250,69254,69262,69276,69296,69316,69328,69336,69342,69352,69362,69366,69370,69376,69388,69400,69412,69428,69432,69436,69442,69454,69466,69478,69488,69498,69502,69506,69514,69526,69536,69548,69552,69556,69564,69574,69584,69594,69598,69602,69612,69626,69638,69642,69646,69658,69668,69684,69694,69698,69702,69716,69726,69736,69740,69744,69750,69764,69768,69772,69780,69790,69794,69798,69807,69817,69821,69829,69837,69841,69849,69863,69877,69889,69897,69936,69968,70000,70032,70064,70072,70080,70094,70128,70162,70196,70230,70264,70272,70280,70288,70293,70298,70317,70322,70342,70350,70355,70368,70389,70402,70406,70411,70416,70429,70449,70477,70481,70485,70489,70497,70505,70509],{"__ignoreMap":57},[79,69227,69228,69230,69232,69234],{"class":81,"line":82},[79,69229,53411],{"class":239},[79,69231,53414],{"class":395},[79,69233,53417],{"class":85},[79,69235,53420],{"class":239},[79,69237,69238,69240,69242,69244,69246,69248],{"class":81,"line":167},[79,69239,392],{"class":239},[79,69241,52749],{"class":395},[79,69243,53429],{"class":85},[79,69245,244],{"class":239},[79,69247,53434],{"class":89},[79,69249,53420],{"class":239},[79,69251,69252],{"class":81,"line":178},[79,69253,454],{"emptyLinePlaceholder":453},[79,69255,69256,69258,69260],{"class":81,"line":457},[79,69257,392],{"class":239},[79,69259,53447],{"class":395},[79,69261,53420],{"class":239},[79,69263,69264,69266,69268,69270,69272,69274],{"class":81,"line":462},[79,69265,54257],{"class":239},[79,69267,53457],{"class":395},[79,69269,53460],{"class":85},[79,69271,244],{"class":239},[79,69273,53465],{"class":89},[79,69275,61237],{"class":239},[79,69277,69278,69280,69282,69284,69286,69288,69290,69292,69294],{"class":81,"line":474},[79,69279,54257],{"class":239},[79,69281,53457],{"class":395},[79,69283,53476],{"class":85},[79,69285,244],{"class":239},[79,69287,53481],{"class":89},[79,69289,53484],{"class":85},[79,69291,244],{"class":239},[79,69293,53489],{"class":89},[79,69295,61237],{"class":239},[79,69297,69298,69300,69302,69304,69306,69308,69310,69312,69314],{"class":81,"line":480},[79,69299,54257],{"class":239},[79,69301,53457],{"class":395},[79,69303,2238],{"class":85},[79,69305,244],{"class":239},[79,69307,53504],{"class":89},[79,69309,53484],{"class":85},[79,69311,244],{"class":239},[79,69313,53511],{"class":89},[79,69315,61237],{"class":239},[79,69317,69318,69320,69322,69324,69326],{"class":81,"line":486},[79,69319,54257],{"class":239},[79,69321,53520],{"class":395},[79,69323,65735],{"class":239},[79,69325,53520],{"class":395},[79,69327,53420],{"class":239},[79,69329,69330,69332,69334],{"class":81,"line":491},[79,69331,54257],{"class":239},[79,69333,2287],{"class":395},[79,69335,53420],{"class":239},[79,69337,69338,69340],{"class":81,"line":497},[79,69339,8598],{"class":395},[79,69341,17732],{"class":239},[79,69343,69344,69346,69348,69350],{"class":81,"line":503},[79,69345,56816],{"class":96},[79,69347,53550],{"class":239},[79,69349,1030],{"class":96},[79,69351,3531],{"class":239},[79,69353,69354,69356,69358,69360],{"class":81,"line":509},[79,69355,56805],{"class":96},[79,69357,53550],{"class":239},[79,69359,1030],{"class":96},[79,69361,3531],{"class":239},[79,69363,69364],{"class":81,"line":514},[79,69365,4402],{"class":239},[79,69367,69368],{"class":81,"line":520},[79,69369,454],{"emptyLinePlaceholder":453},[79,69371,69372,69374],{"class":81,"line":526},[79,69373,65786],{"class":85},[79,69375,17732],{"class":239},[79,69377,69378,69380,69382,69384,69386],{"class":81,"line":532},[79,69379,56881],{"class":96},[79,69381,53550],{"class":239},[79,69383,65797],{"class":96},[79,69385,53605],{"class":243},[79,69387,3531],{"class":239},[79,69389,69390,69392,69394,69396,69398],{"class":81,"line":537},[79,69391,56895],{"class":96},[79,69393,53550],{"class":239},[79,69395,65810],{"class":96},[79,69397,53605],{"class":243},[79,69399,3531],{"class":239},[79,69401,69402,69404,69406,69408,69410],{"class":81,"line":543},[79,69403,56816],{"class":96},[79,69405,53550],{"class":239},[79,69407,3073],{"class":96},[79,69409,53605],{"class":243},[79,69411,3531],{"class":239},[79,69413,69414,69416,69418,69420,69422,69424,69426],{"class":81,"line":549},[79,69415,64087],{"class":96},[79,69417,53550],{"class":239},[79,69419,1072],{"class":96},[79,69421,53605],{"class":243},[79,69423,53634],{"class":96},[79,69425,64354],{"class":96},[79,69427,3531],{"class":239},[79,69429,69430],{"class":81,"line":555},[79,69431,4402],{"class":239},[79,69433,69434],{"class":81,"line":561},[79,69435,454],{"emptyLinePlaceholder":453},[79,69437,69438,69440],{"class":81,"line":567},[79,69439,65855],{"class":85},[79,69441,17732],{"class":239},[79,69443,69444,69446,69448,69450,69452],{"class":81,"line":573},[79,69445,56881],{"class":96},[79,69447,53550],{"class":239},[79,69449,2686],{"class":96},[79,69451,1137],{"class":243},[79,69453,3531],{"class":239},[79,69455,69456,69458,69460,69462,69464],{"class":81,"line":579},[79,69457,56895],{"class":96},[79,69459,53550],{"class":239},[79,69461,3279],{"class":96},[79,69463,53605],{"class":243},[79,69465,3531],{"class":239},[79,69467,69468,69470,69472,69474,69476],{"class":81,"line":584},[79,69469,59469],{"class":96},[79,69471,53550],{"class":239},[79,69473,3279],{"class":96},[79,69475,53605],{"class":243},[79,69477,3531],{"class":239},[79,69479,69480,69482,69484,69486],{"class":81,"line":590},[79,69481,57119],{"class":96},[79,69483,53550],{"class":239},[79,69485,53590],{"class":96},[79,69487,3531],{"class":239},[79,69489,69490,69492,69494,69496],{"class":81,"line":596},[79,69491,57130],{"class":96},[79,69493,53550],{"class":239},[79,69495,53781],{"class":96},[79,69497,3531],{"class":239},[79,69499,69500],{"class":81,"line":602},[79,69501,4402],{"class":239},[79,69503,69504],{"class":81,"line":608},[79,69505,454],{"emptyLinePlaceholder":453},[79,69507,69508,69510,69512],{"class":81,"line":614},[79,69509,65855],{"class":85},[79,69511,65928],{"class":395},[79,69513,17732],{"class":239},[79,69515,69516,69518,69520,69522,69524],{"class":81,"line":620},[79,69517,57032],{"class":96},[79,69519,53550],{"class":239},[79,69521,3173],{"class":96},[79,69523,53605],{"class":243},[79,69525,3531],{"class":239},[79,69527,69528,69530,69532,69534],{"class":81,"line":625},[79,69529,64444],{"class":96},[79,69531,53550],{"class":239},[79,69533,65951],{"class":96},[79,69535,3531],{"class":239},[79,69537,69538,69540,69542,69544,69546],{"class":81,"line":630},[79,69539,64110],{"class":96},[79,69541,53550],{"class":239},[79,69543,3073],{"class":96},[79,69545,53605],{"class":243},[79,69547,3531],{"class":239},[79,69549,69550],{"class":81,"line":648},[79,69551,4402],{"class":239},[79,69553,69554],{"class":81,"line":659},[79,69555,454],{"emptyLinePlaceholder":453},[79,69557,69558,69560,69562],{"class":81,"line":676},[79,69559,65855],{"class":85},[79,69561,63402],{"class":395},[79,69563,17732],{"class":239},[79,69565,69566,69568,69570,69572],{"class":81,"line":708},[79,69567,56842],{"class":96},[79,69569,53550],{"class":239},[79,69571,56847],{"class":96},[79,69573,3531],{"class":239},[79,69575,69576,69578,69580,69582],{"class":81,"line":717},[79,69577,57119],{"class":96},[79,69579,53550],{"class":239},[79,69581,53590],{"class":96},[79,69583,3531],{"class":239},[79,69585,69586,69588,69590,69592],{"class":81,"line":722},[79,69587,57130],{"class":96},[79,69589,53550],{"class":239},[79,69591,53693],{"class":96},[79,69593,3531],{"class":239},[79,69595,69596],{"class":81,"line":727},[79,69597,4402],{"class":239},[79,69599,69600],{"class":81,"line":738},[79,69601,454],{"emptyLinePlaceholder":453},[79,69603,69604,69606,69608,69610],{"class":81,"line":753},[79,69605,65855],{"class":85},[79,69607,63402],{"class":395},[79,69609,57185],{"class":395},[79,69611,17732],{"class":239},[79,69613,69614,69616,69618,69620,69622,69624],{"class":81,"line":768},[79,69615,56816],{"class":96},[79,69617,53550],{"class":239},[79,69619,1030],{"class":96},[79,69621,11134],{"class":96},[79,69623,53605],{"class":243},[79,69625,3531],{"class":239},[79,69627,69628,69630,69632,69634,69636],{"class":81,"line":776},[79,69629,57032],{"class":96},[79,69631,53550],{"class":239},[79,69633,2922],{"class":96},[79,69635,53605],{"class":243},[79,69637,3531],{"class":239},[79,69639,69640],{"class":81,"line":781},[79,69641,4402],{"class":239},[79,69643,69644],{"class":81,"line":786},[79,69645,454],{"emptyLinePlaceholder":453},[79,69647,69648,69650,69652,69654,69656],{"class":81,"line":802},[79,69649,65855],{"class":85},[79,69651,63402],{"class":395},[79,69653,57185],{"class":395},[79,69655,3635],{"class":395},[79,69657,17732],{"class":239},[79,69659,69660,69662,69664,69666],{"class":81,"line":815},[79,69661,66080],{"class":96},[79,69663,53550],{"class":239},[79,69665,56847],{"class":96},[79,69667,3531],{"class":239},[79,69669,69670,69672,69674,69676,69678,69680,69682],{"class":81,"line":828},[79,69671,64342],{"class":96},[79,69673,53550],{"class":239},[79,69675,1049],{"class":96},[79,69677,53605],{"class":243},[79,69679,53634],{"class":96},[79,69681,66101],{"class":96},[79,69683,3531],{"class":239},[79,69685,69686,69688,69690,69692],{"class":81,"line":842},[79,69687,59526],{"class":96},[79,69689,53550],{"class":239},[79,69691,64479],{"class":96},[79,69693,3531],{"class":239},[79,69695,69696],{"class":81,"line":859},[79,69697,4402],{"class":239},[79,69699,69700],{"class":81,"line":878},[79,69701,454],{"emptyLinePlaceholder":453},[79,69703,69704,69706,69708,69710,69712,69714],{"class":81,"line":883},[79,69705,65855],{"class":85},[79,69707,63402],{"class":395},[79,69709,57185],{"class":395},[79,69711,3635],{"class":395},[79,69713,66134],{"class":85},[79,69715,17732],{"class":239},[79,69717,69718,69720,69722,69724],{"class":81,"line":888},[79,69719,63901],{"class":96},[79,69721,53550],{"class":239},[79,69723,66145],{"class":96},[79,69725,3531],{"class":239},[79,69727,69728,69730,69732,69734],{"class":81,"line":904},[79,69729,59526],{"class":96},[79,69731,53550],{"class":239},[79,69733,66145],{"class":96},[79,69735,3531],{"class":239},[79,69737,69738],{"class":81,"line":919},[79,69739,4402],{"class":239},[79,69741,69742],{"class":81,"line":930},[79,69743,454],{"emptyLinePlaceholder":453},[79,69745,69746,69748],{"class":81,"line":941},[79,69747,66170],{"class":85},[79,69749,17732],{"class":239},[79,69751,69752,69754,69756,69758,69760,69762],{"class":81,"line":946},[79,69753,56805],{"class":96},[79,69755,53550],{"class":239},[79,69757,1030],{"class":96},[79,69759,66183],{"class":96},[79,69761,53605],{"class":243},[79,69763,3531],{"class":239},[79,69765,69766],{"class":81,"line":969},[79,69767,4402],{"class":239},[79,69769,69770],{"class":81,"line":975},[79,69771,454],{"emptyLinePlaceholder":453},[79,69773,69774,69776,69778],{"class":81,"line":989},[79,69775,66170],{"class":85},[79,69777,64284],{"class":85},[79,69779,17732],{"class":239},[79,69781,69782,69784,69786,69788],{"class":81,"line":1003},[79,69783,57119],{"class":96},[79,69785,53550],{"class":239},[79,69787,56847],{"class":96},[79,69789,3531],{"class":239},[79,69791,69792],{"class":81,"line":1019},[79,69793,4402],{"class":239},[79,69795,69796],{"class":81,"line":1024},[79,69797,454],{"emptyLinePlaceholder":453},[79,69799,69800,69802,69805],{"class":81,"line":1067},[79,69801,66170],{"class":85},[79,69803,69804],{"class":85}," .active",[79,69806,17732],{"class":239},[79,69808,69809,69811,69813,69815],{"class":81,"line":1101},[79,69810,57119],{"class":96},[79,69812,53550],{"class":239},[79,69814,62979],{"class":96},[79,69816,3531],{"class":239},[79,69818,69819],{"class":81,"line":1106},[79,69820,4402],{"class":239},[79,69822,69823,69825,69827],{"class":81,"line":1112},[79,69824,54529],{"class":239},[79,69826,2287],{"class":395},[79,69828,53420],{"class":239},[79,69830,69831,69833,69835],{"class":81,"line":1124},[79,69832,53898],{"class":239},[79,69834,53447],{"class":395},[79,69836,53420],{"class":239},[79,69838,69839],{"class":81,"line":1129},[79,69840,454],{"emptyLinePlaceholder":453},[79,69842,69843,69845,69847],{"class":81,"line":1150},[79,69844,392],{"class":239},[79,69846,53913],{"class":395},[79,69848,53420],{"class":239},[79,69850,69851,69853,69855,69857,69859,69861],{"class":81,"line":1161},[79,69852,54257],{"class":239},[79,69854,53724],{"class":395},[79,69856,55596],{"class":85},[79,69858,244],{"class":239},[79,69860,66285],{"class":89},[79,69862,53420],{"class":239},[79,69864,69865,69867,69869,69871,69873,69875],{"class":81,"line":1175},[79,69866,53454],{"class":239},[79,69868,53724],{"class":395},[79,69870,55596],{"class":85},[79,69872,244],{"class":239},[79,69874,66300],{"class":89},[79,69876,53420],{"class":239},[79,69878,69879,69881,69883,69885,69887],{"class":81,"line":1194},[79,69880,57344],{"class":239},[79,69882,265],{"class":395},[79,69884,66311],{"class":239},[79,69886,265],{"class":395},[79,69888,53420],{"class":239},[79,69890,69891,69893,69895],{"class":81,"line":1211},[79,69892,57344],{"class":239},[79,69894,3377],{"class":395},[79,69896,53420],{"class":239},[79,69898,69899,69901,69903,69905,69907,69909,69911,69913,69915,69917,69919,69921,69923,69926,69928,69930,69932,69934],{"class":81,"line":1228},[79,69900,57412],{"class":239},[79,69902,29],{"class":395},[79,69904,63162],{"class":239},[79,69906,2614],{"class":395},[79,69908,55596],{"class":85},[79,69910,244],{"class":239},[79,69912,61816],{"class":89},[79,69914,63167],{"class":85},[79,69916,244],{"class":239},[79,69918,66346],{"class":89},[79,69920,56061],{"class":85},[79,69922,244],{"class":239},[79,69924,69925],{"class":89},"\"0\"",[79,69927,66349],{"class":239},[79,69929,2614],{"class":395},[79,69931,57424],{"class":239},[79,69933,29],{"class":395},[79,69935,53420],{"class":239},[79,69937,69938,69940,69942,69944,69946,69948,69950,69952,69954,69956,69958,69960,69962,69964,69966],{"class":81,"line":1246},[79,69939,57412],{"class":239},[79,69941,29],{"class":395},[79,69943,63162],{"class":239},[79,69945,2614],{"class":395},[79,69947,63167],{"class":85},[79,69949,244],{"class":239},[79,69951,66346],{"class":89},[79,69953,56061],{"class":85},[79,69955,244],{"class":239},[79,69957,5881],{"class":89},[79,69959,66376],{"class":239},[79,69961,2614],{"class":395},[79,69963,57424],{"class":239},[79,69965,29],{"class":395},[79,69967,53420],{"class":239},[79,69969,69970,69972,69974,69976,69978,69980,69982,69984,69986,69988,69990,69992,69994,69996,69998],{"class":81,"line":1251},[79,69971,57412],{"class":239},[79,69973,29],{"class":395},[79,69975,63162],{"class":239},[79,69977,2614],{"class":395},[79,69979,63167],{"class":85},[79,69981,244],{"class":239},[79,69983,66346],{"class":89},[79,69985,56061],{"class":85},[79,69987,244],{"class":239},[79,69989,5904],{"class":89},[79,69991,66403],{"class":239},[79,69993,2614],{"class":395},[79,69995,57424],{"class":239},[79,69997,29],{"class":395},[79,69999,53420],{"class":239},[79,70001,70002,70004,70006,70008,70010,70012,70014,70016,70018,70020,70022,70024,70026,70028,70030],{"class":81,"line":1274},[79,70003,57412],{"class":239},[79,70005,29],{"class":395},[79,70007,63162],{"class":239},[79,70009,2614],{"class":395},[79,70011,63167],{"class":85},[79,70013,244],{"class":239},[79,70015,66346],{"class":89},[79,70017,56061],{"class":85},[79,70019,244],{"class":239},[79,70021,5917],{"class":89},[79,70023,66430],{"class":239},[79,70025,2614],{"class":395},[79,70027,57424],{"class":239},[79,70029,29],{"class":395},[79,70031,53420],{"class":239},[79,70033,70034,70036,70038,70040,70042,70044,70046,70048,70050,70052,70054,70056,70058,70060,70062],{"class":81,"line":1296},[79,70035,57412],{"class":239},[79,70037,29],{"class":395},[79,70039,63162],{"class":239},[79,70041,2614],{"class":395},[79,70043,63167],{"class":85},[79,70045,244],{"class":239},[79,70047,66346],{"class":89},[79,70049,56061],{"class":85},[79,70051,244],{"class":239},[79,70053,5930],{"class":89},[79,70055,66457],{"class":239},[79,70057,2614],{"class":395},[79,70059,57424],{"class":239},[79,70061,29],{"class":395},[79,70063,53420],{"class":239},[79,70065,70066,70068,70070],{"class":81,"line":1316},[79,70067,57517],{"class":239},[79,70069,3377],{"class":395},[79,70071,53420],{"class":239},[79,70073,70074,70076,70078],{"class":81,"line":1321},[79,70075,53889],{"class":239},[79,70077,53724],{"class":395},[79,70079,53420],{"class":239},[79,70081,70082,70084,70086,70088,70090,70092],{"class":81,"line":1326},[79,70083,53454],{"class":239},[79,70085,53724],{"class":395},[79,70087,55596],{"class":85},[79,70089,244],{"class":239},[79,70091,66494],{"class":89},[79,70093,53420],{"class":239},[79,70095,70096,70098,70100,70102,70104,70106,70108,70110,70112,70114,70116,70118,70120,70122,70124,70126],{"class":81,"line":1342},[79,70097,57344],{"class":239},[79,70099,53724],{"class":395},[79,70101,55596],{"class":85},[79,70103,244],{"class":239},[79,70105,66509],{"class":89},[79,70107,63162],{"class":239},[79,70109,3699],{"class":395},[79,70111,57349],{"class":85},[79,70113,244],{"class":239},[79,70115,66520],{"class":89},[79,70117,57357],{"class":85},[79,70119,244],{"class":239},[79,70121,9846],{"class":89},[79,70123,66529],{"class":239},[79,70125,53724],{"class":395},[79,70127,53420],{"class":239},[79,70129,70130,70132,70134,70136,70138,70140,70142,70144,70146,70148,70150,70152,70154,70156,70158,70160],{"class":81,"line":18985},[79,70131,57344],{"class":239},[79,70133,53724],{"class":395},[79,70135,55596],{"class":85},[79,70137,244],{"class":239},[79,70139,64733],{"class":89},[79,70141,63162],{"class":239},[79,70143,3699],{"class":395},[79,70145,57349],{"class":85},[79,70147,244],{"class":239},[79,70149,66556],{"class":89},[79,70151,57357],{"class":85},[79,70153,244],{"class":239},[79,70155,9846],{"class":89},[79,70157,66529],{"class":239},[79,70159,53724],{"class":395},[79,70161,53420],{"class":239},[79,70163,70164,70166,70168,70170,70172,70174,70176,70178,70180,70182,70184,70186,70188,70190,70192,70194],{"class":81,"line":18990},[79,70165,57344],{"class":239},[79,70167,53724],{"class":395},[79,70169,55596],{"class":85},[79,70171,244],{"class":239},[79,70173,64733],{"class":89},[79,70175,63162],{"class":239},[79,70177,3699],{"class":395},[79,70179,57349],{"class":85},[79,70181,244],{"class":239},[79,70183,66591],{"class":89},[79,70185,57357],{"class":85},[79,70187,244],{"class":239},[79,70189,9846],{"class":89},[79,70191,66529],{"class":239},[79,70193,53724],{"class":395},[79,70195,53420],{"class":239},[79,70197,70198,70200,70202,70204,70206,70208,70210,70212,70214,70216,70218,70220,70222,70224,70226,70228],{"class":81,"line":18995},[79,70199,57344],{"class":239},[79,70201,53724],{"class":395},[79,70203,55596],{"class":85},[79,70205,244],{"class":239},[79,70207,64733],{"class":89},[79,70209,63162],{"class":239},[79,70211,3699],{"class":395},[79,70213,57349],{"class":85},[79,70215,244],{"class":239},[79,70217,66626],{"class":89},[79,70219,57357],{"class":85},[79,70221,244],{"class":239},[79,70223,9846],{"class":89},[79,70225,66529],{"class":239},[79,70227,53724],{"class":395},[79,70229,53420],{"class":239},[79,70231,70232,70234,70236,70238,70240,70242,70244,70246,70248,70250,70252,70254,70256,70258,70260,70262],{"class":81,"line":19009},[79,70233,57344],{"class":239},[79,70235,53724],{"class":395},[79,70237,55596],{"class":85},[79,70239,244],{"class":239},[79,70241,64733],{"class":89},[79,70243,63162],{"class":239},[79,70245,3699],{"class":395},[79,70247,57349],{"class":85},[79,70249,244],{"class":239},[79,70251,66661],{"class":89},[79,70253,57357],{"class":85},[79,70255,244],{"class":239},[79,70257,9846],{"class":89},[79,70259,66529],{"class":239},[79,70261,53724],{"class":395},[79,70263,53420],{"class":239},[79,70265,70266,70268,70270],{"class":81,"line":19021},[79,70267,53889],{"class":239},[79,70269,53724],{"class":395},[79,70271,53420],{"class":239},[79,70273,70274,70276,70278],{"class":81,"line":19026},[79,70275,54529],{"class":239},[79,70277,53724],{"class":395},[79,70279,53420],{"class":239},[79,70281,70282,70284,70286],{"class":81,"line":19039},[79,70283,54257],{"class":239},[79,70285,53926],{"class":395},[79,70287,53420],{"class":239},[79,70289,70290],{"class":81,"line":19044},[79,70291,70292],{"class":2440},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[79,70294,70295],{"class":81,"line":19049},[79,70296,70297],{"class":2440},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[79,70299,70300,70302,70304,70306,70308,70310,70312,70315],{"class":81,"line":19054},[79,70301,13385],{"class":243},[79,70303,63402],{"class":96},[79,70305,468],{"class":243},[79,70307,56506],{"class":239},[79,70309,56509],{"class":85},[79,70311,685],{"class":239},[79,70313,70314],{"class":89},"'.tab-nav ul'",[79,70316,253],{"class":239},[79,70318,70319],{"class":81,"line":19067},[79,70320,70321],{"class":2440},"    \u002F\u002F 2.添加事件\n",[79,70323,70324,70326,70328,70330,70332,70334,70336,70338,70340],{"class":81,"line":19072},[79,70325,69063],{"class":239},[79,70327,59923],{"class":85},[79,70329,685],{"class":239},[79,70331,59928],{"class":89},[79,70333,1060],{"class":239},[79,70335,56559],{"class":243},[79,70337,3887],{"class":239},[79,70339,2455],{"class":7412},[79,70341,14605],{"class":239},[79,70343,70344,70346,70348],{"class":81,"line":34748},[79,70345,60354],{"class":239},[79,70347,69119],{"class":85},[79,70349,69122],{"class":239},[79,70351,70352],{"class":81,"line":34754},[79,70353,70354],{"class":2440},"      \u002F\u002Fe.targer是我们点击的对象\n",[79,70356,70357,70359,70361,70363,70366],{"class":81,"line":34760},[79,70358,56590],{"class":243},[79,70360,69143],{"class":239},[79,70362,56596],{"class":243},[79,70364,70365],{"class":89}," 'A'",[79,70367,14605],{"class":239},[79,70369,70370,70372,70374,70376,70379,70381,70383,70385,70387],{"class":81,"line":34766},[79,70371,54038],{"class":239},[79,70373,56509],{"class":85},[79,70375,685],{"class":239},[79,70377,70378],{"class":89},"'.active'",[79,70380,59113],{"class":239},[79,70382,59116],{"class":85},[79,70384,685],{"class":239},[79,70386,66824],{"class":89},[79,70388,253],{"class":239},[79,70390,70391,70394,70396,70398,70400],{"class":81,"line":34772},[79,70392,70393],{"class":239},"        e.target.classList.",[79,70395,7530],{"class":85},[79,70397,685],{"class":239},[79,70399,66824],{"class":89},[79,70401,253],{"class":239},[79,70403,70404],{"class":81,"line":34783},[79,70405,454],{"emptyLinePlaceholder":453},[79,70407,70408],{"class":81,"line":34789},[79,70409,70410],{"class":2440},"        \u002F\u002F 下面大盒子模块\n",[79,70412,70413],{"class":81,"line":34809},[79,70414,70415],{"class":2440},"        \u002F\u002F console.log(e.target.dataset.id)\n",[79,70417,70418,70420,70422,70424,70426],{"class":81,"line":34815},[79,70419,63380],{"class":243},[79,70421,5237],{"class":96},[79,70423,468],{"class":243},[79,70425,47680],{"class":243},[79,70427,70428],{"class":239},"e.target.dataset.id\n",[79,70430,70431,70433,70435,70437,70439,70441,70443,70445,70447],{"class":81,"line":34826},[79,70432,54038],{"class":239},[79,70434,56509],{"class":85},[79,70436,685],{"class":239},[79,70438,66872],{"class":89},[79,70440,59113],{"class":239},[79,70442,59116],{"class":85},[79,70444,685],{"class":239},[79,70446,66824],{"class":89},[79,70448,253],{"class":239},[79,70450,70451,70453,70455,70457,70459,70461,70463,70465,70467,70469,70471,70473,70475],{"class":81,"line":34832},[79,70452,54038],{"class":239},[79,70454,56509],{"class":85},[79,70456,685],{"class":239},[79,70458,66898],{"class":89},[79,70460,2815],{"class":239},[79,70462,47680],{"class":243},[79,70464,27253],{"class":96},[79,70466,59142],{"class":89},[79,70468,59113],{"class":239},[79,70470,7530],{"class":85},[79,70472,685],{"class":239},[79,70474,66824],{"class":89},[79,70476,253],{"class":239},[79,70478,70479],{"class":81,"line":34838},[79,70480,454],{"emptyLinePlaceholder":453},[79,70482,70483],{"class":81,"line":34844},[79,70484,54510],{"class":239},[79,70486,70487],{"class":81,"line":34850},[79,70488,35576],{"class":239},[79,70490,70491,70493,70495],{"class":81,"line":34856},[79,70492,54529],{"class":239},[79,70494,53926],{"class":395},[79,70496,53420],{"class":239},[79,70498,70499,70501,70503],{"class":81,"line":34862},[79,70500,53898],{"class":239},[79,70502,53913],{"class":395},[79,70504,53420],{"class":239},[79,70506,70507],{"class":81,"line":34868},[79,70508,454],{"emptyLinePlaceholder":453},[79,70510,70511,70513,70515],{"class":81,"line":34888},[79,70512,53898],{"class":239},[79,70514,52749],{"class":395},[79,70516,53420],{"class":239},[265,70518,70520],{"id":70519},"_333-页面加载事件","3.3.3 页面加载事件",[26,70522,70523],{},[29,70524,70525],{},"load",[19,70527,70528],{},[3699,70529],{"alt":57,"src":70530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70532,70533],{},"window代表整个窗口，比document还要大",[19,70535,70536],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70538,70539],{},"img.addEventListener('load', function () {",[19,70541,70542],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70544,54576],{},[26,70546,70547],{"start":167},[29,70548,70549],{},"DOMContentLoaded",[19,70551,70552],{},[3699,70553],{"alt":57,"src":70554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70556,70557],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[265,70559,70561],{"id":70560},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70563,70564],{},[3699,70565],{"alt":57,"src":70566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70568,70569],{},[3699,70570],{"alt":57,"src":70571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70573,70574],{},[3699,70575],{"alt":57,"src":70576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70578,70579],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70581,70582],{},"获得的是数字型数据，不带单位",[19,70584,70585],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70587,70588],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70590,70591],{},"它是通过document.documentElement来获取",[19,70593,70594],{},[3699,70595],{"alt":57,"src":70596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70598,70599],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[265,70601,70603],{"id":70602},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70605,70606],{},[3699,70607],{"alt":57,"src":70608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70610,70611],{},[3699,70612],{"alt":57,"src":70613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[265,70615,70617],{"id":70616},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70619,70620],{},[3699,70621],{"alt":57,"src":70622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70624,70625],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70627,70628],{},[3699,70629],{"alt":57,"src":70630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70632,70633],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70635,70636],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70638,70639],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70641,70642],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70644,70645],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70647,70648],{},[3699,70649],{"alt":57,"src":70650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70652,70653],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70655,70656],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70658,70659],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70661,70662],{},"e.pageX-box.getBoundingClientRect()",[265,70664,70666],{"id":70665},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70668,70669],{},[3699,70670],{"alt":57,"src":70671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70673,70674],{},"这个是相对于视口来说的，它是个方法，不是属性值",[265,70676,70678],{"id":70677},"_338-总结","3.3.8 总结",[19,70680,70681],{},[3699,70682],{"alt":57,"src":70683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70685,70686],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70688,70689],{},"修改盒子的宽高只能通过width和height来实现",[265,70691,70693],{"id":70692},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[51,70695,70697],{"className":52747,"code":70696,"language":52749,"meta":57,"style":57},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[59,70698,70699,70704,70709,70714,70719],{"__ignoreMap":57},[79,70700,70701],{"class":81,"line":82},[79,70702,70703],{"class":239},"\u002F* 页面滑动 *\u002F\n",[79,70705,70706],{"class":81,"line":167},[79,70707,70708],{"class":239},"html {\n",[79,70710,70711],{"class":81,"line":178},[79,70712,70713],{"class":239},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[79,70715,70716],{"class":81,"line":457},[79,70717,70718],{"class":239},"  scroll-behavior: smooth;\n",[79,70720,70721],{"class":81,"line":462},[79,70722,3801],{"class":239},[19,70724,70725],{},"默认是auto",[265,70727,70729],{"id":70728},"_3310-日期对象","3.3.10 日期对象",[24137,70731,70733],{"id":70732},"_33101-实例化","3.3.10.1 实例化",[19,70735,70736],{},[3699,70737],{"alt":57,"src":70738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[24137,70740,70742],{"id":70741},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70744,70745],{},[3699,70746],{"alt":57,"src":70747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70749,70750],{},"月份+1",[19,70752,70753],{},"老外认为第一天为0，星期天",[19,70755,70756],{},"方法使用的时候必须要跟括号",[19,70758,70759],{},"快速获得日期",[19,70761,70762],{},"\u002F\u002F 得到年月日",[19,70764,70765],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70767,70768],{},"\u002F\u002F 得到当地日期",[19,70770,70771],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70773,70774],{},"\u002F\u002F 得到当地时间",[19,70776,70777],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70779,70780],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70782,70783],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53926,70785,70786],{},"\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,70788,70789],{},"学会去封装函数！",[24137,70791,70793],{"id":70792},"_33103-时间戳","3.3.10.3 时间戳",[19,70795,70796],{},[3699,70797],{"alt":57,"src":70798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70800,70801],{},[3699,70802],{"alt":57,"src":70803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70805,70806],{},"三种方法记住一个就可以",[265,70808,70810],{"id":70809},"_3311-节点操作","3.3.11 节点操作",[24137,70812,70814],{"id":70813},"_33111-dom节点","3.3.11.1 DOM节点",[19,70816,70817],{},[3699,70818],{"alt":57,"src":70819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70821,70822],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[24137,70824,70826],{"id":70825},"_33112-查找节点","3.3.11.2 查找节点",[19,70828,70829],{},"前边的document.querySelector()是获取的元素",[19,70831,70832],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70834,70835],{},[3699,70836],{"alt":57,"src":70837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[26,70839,70840],{},[29,70841,70842],{},"父节点",[19,70844,70845],{},[3699,70846],{"alt":57,"src":70847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[26,70849,70850],{"start":167},[29,70851,70852],{},"子节点",[19,70854,70855],{},[3699,70856],{"alt":57,"src":70857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70859,70860],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70862,70863],{},"children获得的是伪数组，是亲儿子",[26,70865,70866],{"start":178},[29,70867,70868],{},"兄弟节点",[19,70870,70871],{},[3699,70872],{"alt":57,"src":70873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[24137,70875,70877],{"id":70876},"_33113-增加节点","3.3.11.3 增加节点",[19,70879,70880],{},[3699,70881],{"alt":57,"src":70882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70884,70885],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70887,70888],{},[3699,70889],{"alt":57,"src":70890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70892,70893],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70895,70896],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70898,70899],{},"例：",[53926,70901,70902],{},"\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,70904,70905],{},[3699,70906],{"alt":57,"src":70907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70909,70910],{},"false只克隆标签，里边的内容不会克隆过来",[51,70912,70914],{"className":52747,"code":70913,"language":52749,"meta":57,"style":57},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[59,70915,70916],{"__ignoreMap":57},[79,70917,70918],{"class":81,"line":82},[79,70919,70913],{"class":239},[24137,70921,70923],{"id":70922},"_33114-删除节点","3.3.11.4 删除节点",[19,70925,70926],{},[3699,70927],{"alt":57,"src":70928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70930,70931],{},"父亲删儿子",[19,70933,70934],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[265,70936,70938],{"id":70937},"_3312-m端事件","3.3.12 M端事件",[19,70940,70941],{},"M端就是移动端",[19,70943,70944],{},[3699,70945],{"alt":57,"src":70946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[265,70948,70950],{"id":70949},"_3313-插件","3.3.13 插件",[19,70952,70953],{},"要熟悉官网！！！",[19,70955,70956],{},[2614,70957,70958],{"href":70958,"rel":70959},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[26001],[19,70961,70962],{},[2614,70963,70964],{"href":70964,"rel":70965},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[26001],[265,70967,70969],{"id":70968},"_3314-学生信息表","3.3.14 学生信息表",[26,70971,70972,70975,70978,70981,70984,70987,70990,70993],{},[29,70973,70974],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[29,70976,70977],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[29,70979,70980],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[29,70982,70983],{},"用好表单元素自带的属性，value,name等",[29,70985,70986],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[29,70988,70989],{},"不要忘记事件对象",[29,70991,70992],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[29,70994,70995],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70997,70998],{},"结构：",[51,71000,71002],{"className":52747,"code":71001,"language":52749,"meta":57,"style":57},"\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",[59,71003,71004,71014,71028,71032,71040,71054,71074,71095,71108,71132,71140,71144,71152,71165,71186,71214,71242,71247,71269,71288,71307,71315,71343,71365,71385,71405,71425,71445,71465,71473,71493,71501,71505,71518,71526,71534,71542,71555,71568,71581,71594,71607,71620,71633,71641,71649,71657,71662,71667,71672,71677,71682,71687,71692,71697,71702,71707,71712,71717,71722,71730,71738,71746,71750,71770,71789,71809,71829,71849,71869,71873,71878,71898,71903,71913,71918,71923,71943,71965,71970,71980,71984,71988,71993,71998,72027,72041,72056,72060,72064,72068,72073,72084,72097,72102,72107,72112,72117,72122,72126,72131,72136,72145,72150,72155,72167,72172,72179,72183,72188,72198,72203,72213,72218,72246,72267,72277,72297,72315,72332,72349,72366,72383,72387,72397,72402,72407,72412,72423,72427,72431,72435,72440,72445,72466,72478,72483,72488,72493,72507,72512,72519,72523,72527,72535,72539,72547,72551],{"__ignoreMap":57},[79,71005,71006,71008,71010,71012],{"class":81,"line":82},[79,71007,53411],{"class":239},[79,71009,53414],{"class":395},[79,71011,53417],{"class":85},[79,71013,53420],{"class":239},[79,71015,71016,71018,71020,71022,71024,71026],{"class":81,"line":167},[79,71017,392],{"class":239},[79,71019,52749],{"class":395},[79,71021,53429],{"class":85},[79,71023,244],{"class":239},[79,71025,53434],{"class":89},[79,71027,53420],{"class":239},[79,71029,71030],{"class":81,"line":178},[79,71031,454],{"emptyLinePlaceholder":453},[79,71033,71034,71036,71038],{"class":81,"line":457},[79,71035,392],{"class":239},[79,71037,53447],{"class":395},[79,71039,53420],{"class":239},[79,71041,71042,71044,71046,71048,71050,71052],{"class":81,"line":462},[79,71043,54257],{"class":239},[79,71045,53457],{"class":395},[79,71047,53460],{"class":85},[79,71049,244],{"class":239},[79,71051,53465],{"class":89},[79,71053,61237],{"class":239},[79,71055,71056,71058,71060,71062,71064,71066,71068,71070,71072],{"class":81,"line":474},[79,71057,54257],{"class":239},[79,71059,53457],{"class":395},[79,71061,2238],{"class":85},[79,71063,244],{"class":239},[79,71065,53504],{"class":89},[79,71067,53484],{"class":85},[79,71069,244],{"class":239},[79,71071,53511],{"class":89},[79,71073,61237],{"class":239},[79,71075,71076,71078,71080,71082,71084,71086,71088,71090,71093],{"class":81,"line":480},[79,71077,54257],{"class":239},[79,71079,53457],{"class":395},[79,71081,53476],{"class":85},[79,71083,244],{"class":239},[79,71085,53481],{"class":89},[79,71087,53484],{"class":85},[79,71089,244],{"class":239},[79,71091,71092],{"class":89},"\"ie=edge\"",[79,71094,61237],{"class":239},[79,71096,71097,71099,71101,71104,71106],{"class":81,"line":486},[79,71098,54257],{"class":239},[79,71100,53520],{"class":395},[79,71102,71103],{"class":239},">学生信息管理\u003C\u002F",[79,71105,53520],{"class":395},[79,71107,53420],{"class":239},[79,71109,71110,71112,71115,71118,71120,71123,71125,71127,71130],{"class":81,"line":491},[79,71111,54257],{"class":239},[79,71113,71114],{"class":395},"link",[79,71116,71117],{"class":85}," rel",[79,71119,244],{"class":239},[79,71121,71122],{"class":89},"\"stylesheet\"",[79,71124,63167],{"class":85},[79,71126,244],{"class":239},[79,71128,71129],{"class":89},"\"css\u002Findex.css\"",[79,71131,61237],{"class":239},[79,71133,71134,71136,71138],{"class":81,"line":497},[79,71135,53898],{"class":239},[79,71137,53447],{"class":395},[79,71139,53420],{"class":239},[79,71141,71142],{"class":81,"line":503},[79,71143,454],{"emptyLinePlaceholder":453},[79,71145,71146,71148,71150],{"class":81,"line":509},[79,71147,392],{"class":239},[79,71149,53913],{"class":395},[79,71151,53420],{"class":239},[79,71153,71154,71156,71158,71161,71163],{"class":81,"line":514},[79,71155,54257],{"class":239},[79,71157,10],{"class":395},[79,71159,71160],{"class":239},">新增学员\u003C\u002F",[79,71162,10],{"class":395},[79,71164,53420],{"class":239},[79,71166,71167,71169,71171,71173,71175,71177,71180,71182,71184],{"class":81,"line":520},[79,71168,54257],{"class":239},[79,71170,68734],{"class":395},[79,71172,55596],{"class":85},[79,71174,244],{"class":239},[79,71176,64774],{"class":89},[79,71178,71179],{"class":85}," autocomplete",[79,71181,244],{"class":239},[79,71183,33894],{"class":89},[79,71185,53420],{"class":239},[79,71187,71188,71191,71193,71195,71197,71199,71201,71203,71206,71208,71210,71212],{"class":81,"line":526},[79,71189,71190],{"class":239},"    姓名：\u003C",[79,71192,55931],{"class":395},[79,71194,55934],{"class":85},[79,71196,244],{"class":239},[79,71198,64809],{"class":89},[79,71200,55596],{"class":85},[79,71202,244],{"class":239},[79,71204,71205],{"class":89},"\"uname\"",[79,71207,2238],{"class":85},[79,71209,244],{"class":239},[79,71211,71205],{"class":89},[79,71213,61237],{"class":239},[79,71215,71216,71219,71221,71223,71225,71227,71229,71231,71234,71236,71238,71240],{"class":81,"line":532},[79,71217,71218],{"class":239},"    年龄：\u003C",[79,71220,55931],{"class":395},[79,71222,55934],{"class":85},[79,71224,244],{"class":239},[79,71226,64809],{"class":89},[79,71228,55596],{"class":85},[79,71230,244],{"class":239},[79,71232,71233],{"class":89},"\"age\"",[79,71235,2238],{"class":85},[79,71237,244],{"class":239},[79,71239,71233],{"class":89},[79,71241,61237],{"class":239},[79,71243,71244],{"class":81,"line":537},[79,71245,71246],{"class":239},"    性别:\n",[79,71248,71249,71251,71254,71256,71258,71261,71263,71265,71267],{"class":81,"line":543},[79,71250,53454],{"class":239},[79,71252,71253],{"class":395},"select",[79,71255,2238],{"class":85},[79,71257,244],{"class":239},[79,71259,71260],{"class":89},"\"gender\"",[79,71262,55596],{"class":85},[79,71264,244],{"class":239},[79,71266,71260],{"class":89},[79,71268,53420],{"class":239},[79,71270,71271,71273,71275,71277,71279,71281,71284,71286],{"class":81,"line":549},[79,71272,57344],{"class":239},[79,71274,396],{"class":395},[79,71276,68760],{"class":85},[79,71278,244],{"class":239},[79,71280,12125],{"class":89},[79,71282,71283],{"class":239},">男\u003C\u002F",[79,71285,396],{"class":395},[79,71287,53420],{"class":239},[79,71289,71290,71292,71294,71296,71298,71300,71303,71305],{"class":81,"line":555},[79,71291,57344],{"class":239},[79,71293,396],{"class":395},[79,71295,68760],{"class":85},[79,71297,244],{"class":239},[79,71299,12194],{"class":89},[79,71301,71302],{"class":239},">女\u003C\u002F",[79,71304,396],{"class":395},[79,71306,53420],{"class":239},[79,71308,71309,71311,71313],{"class":81,"line":561},[79,71310,53889],{"class":239},[79,71312,71253],{"class":395},[79,71314,53420],{"class":239},[79,71316,71317,71320,71322,71324,71326,71328,71330,71332,71335,71337,71339,71341],{"class":81,"line":567},[79,71318,71319],{"class":239},"    薪资：\u003C",[79,71321,55931],{"class":395},[79,71323,55934],{"class":85},[79,71325,244],{"class":239},[79,71327,64809],{"class":89},[79,71329,55596],{"class":85},[79,71331,244],{"class":239},[79,71333,71334],{"class":89},"\"salary\"",[79,71336,2238],{"class":85},[79,71338,244],{"class":239},[79,71340,71334],{"class":89},[79,71342,61237],{"class":239},[79,71344,71345,71348,71350,71352,71354,71357,71359,71361,71363],{"class":81,"line":573},[79,71346,71347],{"class":239},"    就业城市：\u003C",[79,71349,71253],{"class":395},[79,71351,2238],{"class":85},[79,71353,244],{"class":239},[79,71355,71356],{"class":89},"\"city\"",[79,71358,55596],{"class":85},[79,71360,244],{"class":239},[79,71362,71356],{"class":89},[79,71364,53420],{"class":239},[79,71366,71367,71369,71371,71373,71375,71378,71381,71383],{"class":81,"line":579},[79,71368,57344],{"class":239},[79,71370,396],{"class":395},[79,71372,68760],{"class":85},[79,71374,244],{"class":239},[79,71376,71377],{"class":89},"\"北京\"",[79,71379,71380],{"class":239},">北京\u003C\u002F",[79,71382,396],{"class":395},[79,71384,53420],{"class":239},[79,71386,71387,71389,71391,71393,71395,71398,71401,71403],{"class":81,"line":584},[79,71388,57344],{"class":239},[79,71390,396],{"class":395},[79,71392,68760],{"class":85},[79,71394,244],{"class":239},[79,71396,71397],{"class":89},"\"上海\"",[79,71399,71400],{"class":239},">上海\u003C\u002F",[79,71402,396],{"class":395},[79,71404,53420],{"class":239},[79,71406,71407,71409,71411,71413,71415,71418,71421,71423],{"class":81,"line":590},[79,71408,57344],{"class":239},[79,71410,396],{"class":395},[79,71412,68760],{"class":85},[79,71414,244],{"class":239},[79,71416,71417],{"class":89},"\"广州\"",[79,71419,71420],{"class":239},">广州\u003C\u002F",[79,71422,396],{"class":395},[79,71424,53420],{"class":239},[79,71426,71427,71429,71431,71433,71435,71438,71441,71443],{"class":81,"line":596},[79,71428,57344],{"class":239},[79,71430,396],{"class":395},[79,71432,68760],{"class":85},[79,71434,244],{"class":239},[79,71436,71437],{"class":89},"\"深圳\"",[79,71439,71440],{"class":239},">深圳\u003C\u002F",[79,71442,396],{"class":395},[79,71444,53420],{"class":239},[79,71446,71447,71449,71451,71453,71455,71458,71461,71463],{"class":81,"line":602},[79,71448,57344],{"class":239},[79,71450,396],{"class":395},[79,71452,68760],{"class":85},[79,71454,244],{"class":239},[79,71456,71457],{"class":89},"\"曹县\"",[79,71459,71460],{"class":239},">曹县\u003C\u002F",[79,71462,396],{"class":395},[79,71464,53420],{"class":239},[79,71466,71467,71469,71471],{"class":81,"line":608},[79,71468,53889],{"class":239},[79,71470,71253],{"class":395},[79,71472,53420],{"class":239},[79,71474,71475,71477,71479,71481,71483,71486,71489,71491],{"class":81,"line":614},[79,71476,53454],{"class":239},[79,71478,55997],{"class":395},[79,71480,55596],{"class":85},[79,71482,244],{"class":239},[79,71484,71485],{"class":89},"\"add\"",[79,71487,71488],{"class":239},">录入\u003C\u002F",[79,71490,55997],{"class":395},[79,71492,53420],{"class":239},[79,71494,71495,71497,71499],{"class":81,"line":620},[79,71496,54529],{"class":239},[79,71498,68734],{"class":395},[79,71500,53420],{"class":239},[79,71502,71503],{"class":81,"line":625},[79,71504,454],{"emptyLinePlaceholder":453},[79,71506,71507,71509,71511,71514,71516],{"class":81,"line":630},[79,71508,54257],{"class":239},[79,71510,10],{"class":395},[79,71512,71513],{"class":239},">就业榜\u003C\u002F",[79,71515,10],{"class":395},[79,71517,53420],{"class":239},[79,71519,71520,71522,71524],{"class":81,"line":648},[79,71521,54257],{"class":239},[79,71523,2516],{"class":395},[79,71525,53420],{"class":239},[79,71527,71528,71530,71532],{"class":81,"line":659},[79,71529,53454],{"class":239},[79,71531,2519],{"class":395},[79,71533,53420],{"class":239},[79,71535,71536,71538,71540],{"class":81,"line":676},[79,71537,57344],{"class":239},[79,71539,2522],{"class":395},[79,71541,53420],{"class":239},[79,71543,71544,71546,71548,71551,71553],{"class":81,"line":708},[79,71545,57412],{"class":239},[79,71547,2525],{"class":395},[79,71549,71550],{"class":239},">序号\u003C\u002F",[79,71552,2525],{"class":395},[79,71554,53420],{"class":239},[79,71556,71557,71559,71561,71564,71566],{"class":81,"line":717},[79,71558,57412],{"class":239},[79,71560,2525],{"class":395},[79,71562,71563],{"class":239},">姓名\u003C\u002F",[79,71565,2525],{"class":395},[79,71567,53420],{"class":239},[79,71569,71570,71572,71574,71577,71579],{"class":81,"line":722},[79,71571,57412],{"class":239},[79,71573,2525],{"class":395},[79,71575,71576],{"class":239},">年龄\u003C\u002F",[79,71578,2525],{"class":395},[79,71580,53420],{"class":239},[79,71582,71583,71585,71587,71590,71592],{"class":81,"line":727},[79,71584,57412],{"class":239},[79,71586,2525],{"class":395},[79,71588,71589],{"class":239},">性别\u003C\u002F",[79,71591,2525],{"class":395},[79,71593,53420],{"class":239},[79,71595,71596,71598,71600,71603,71605],{"class":81,"line":738},[79,71597,57412],{"class":239},[79,71599,2525],{"class":395},[79,71601,71602],{"class":239},">薪资\u003C\u002F",[79,71604,2525],{"class":395},[79,71606,53420],{"class":239},[79,71608,71609,71611,71613,71616,71618],{"class":81,"line":753},[79,71610,57412],{"class":239},[79,71612,2525],{"class":395},[79,71614,71615],{"class":239},">就业城市\u003C\u002F",[79,71617,2525],{"class":395},[79,71619,53420],{"class":239},[79,71621,71622,71624,71626,71629,71631],{"class":81,"line":768},[79,71623,57412],{"class":239},[79,71625,2525],{"class":395},[79,71627,71628],{"class":239},">操作\u003C\u002F",[79,71630,2525],{"class":395},[79,71632,53420],{"class":239},[79,71634,71635,71637,71639],{"class":81,"line":776},[79,71636,57517],{"class":239},[79,71638,2522],{"class":395},[79,71640,53420],{"class":239},[79,71642,71643,71645,71647],{"class":81,"line":781},[79,71644,53889],{"class":239},[79,71646,2519],{"class":395},[79,71648,53420],{"class":239},[79,71650,71651,71653,71655],{"class":81,"line":786},[79,71652,53454],{"class":239},[79,71654,2563],{"class":395},[79,71656,53420],{"class":239},[79,71658,71659],{"class":81,"line":802},[79,71660,71661],{"class":2440},"      \u003C!-- \n",[79,71663,71664],{"class":81,"line":815},[79,71665,71666],{"class":2440},"        \u003Ctr>\n",[79,71668,71669],{"class":81,"line":828},[79,71670,71671],{"class":2440},"          \u003Ctd>1001\u003C\u002Ftd>\n",[79,71673,71674],{"class":81,"line":842},[79,71675,71676],{"class":2440},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[79,71678,71679],{"class":81,"line":859},[79,71680,71681],{"class":2440},"          \u003Ctd>19\u003C\u002Ftd>\n",[79,71683,71684],{"class":81,"line":878},[79,71685,71686],{"class":2440},"          \u003Ctd>男\u003C\u002Ftd>\n",[79,71688,71689],{"class":81,"line":883},[79,71690,71691],{"class":2440},"          \u003Ctd>15000\u003C\u002Ftd>\n",[79,71693,71694],{"class":81,"line":888},[79,71695,71696],{"class":2440},"          \u003Ctd>上海\u003C\u002Ftd>\n",[79,71698,71699],{"class":81,"line":904},[79,71700,71701],{"class":2440},"          \u003Ctd>\n",[79,71703,71704],{"class":81,"line":919},[79,71705,71706],{"class":2440},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[79,71708,71709],{"class":81,"line":930},[79,71710,71711],{"class":2440},"          \u003C\u002Ftd>\n",[79,71713,71714],{"class":81,"line":941},[79,71715,71716],{"class":2440},"        \u003C\u002Ftr> \n",[79,71718,71719],{"class":81,"line":946},[79,71720,71721],{"class":2440},"        -->\n",[79,71723,71724,71726,71728],{"class":81,"line":969},[79,71725,53889],{"class":239},[79,71727,2563],{"class":395},[79,71729,53420],{"class":239},[79,71731,71732,71734,71736],{"class":81,"line":975},[79,71733,54529],{"class":239},[79,71735,2516],{"class":395},[79,71737,53420],{"class":239},[79,71739,71740,71742,71744],{"class":81,"line":989},[79,71741,54257],{"class":239},[79,71743,53926],{"class":395},[79,71745,53420],{"class":239},[79,71747,71748],{"class":81,"line":1003},[79,71749,62068],{"class":2440},[79,71751,71752,71754,71757,71759,71761,71763,71765,71768],{"class":81,"line":1019},[79,71753,13385],{"class":243},[79,71755,71756],{"class":96}," uname",[79,71758,468],{"class":243},[79,71760,56506],{"class":239},[79,71762,56509],{"class":85},[79,71764,685],{"class":239},[79,71766,71767],{"class":89},"'.uname'",[79,71769,253],{"class":239},[79,71771,71772,71774,71776,71778,71780,71782,71784,71787],{"class":81,"line":1024},[79,71773,13385],{"class":243},[79,71775,17849],{"class":96},[79,71777,468],{"class":243},[79,71779,56506],{"class":239},[79,71781,56509],{"class":85},[79,71783,685],{"class":239},[79,71785,71786],{"class":89},"'.age'",[79,71788,253],{"class":239},[79,71790,71791,71793,71796,71798,71800,71802,71804,71807],{"class":81,"line":1067},[79,71792,13385],{"class":243},[79,71794,71795],{"class":96}," gender",[79,71797,468],{"class":243},[79,71799,56506],{"class":239},[79,71801,56509],{"class":85},[79,71803,685],{"class":239},[79,71805,71806],{"class":89},"'.gender'",[79,71808,253],{"class":239},[79,71810,71811,71813,71816,71818,71820,71822,71824,71827],{"class":81,"line":1101},[79,71812,13385],{"class":243},[79,71814,71815],{"class":96}," salary",[79,71817,468],{"class":243},[79,71819,56506],{"class":239},[79,71821,56509],{"class":85},[79,71823,685],{"class":239},[79,71825,71826],{"class":89},"'.salary'",[79,71828,253],{"class":239},[79,71830,71831,71833,71836,71838,71840,71842,71844,71847],{"class":81,"line":1106},[79,71832,13385],{"class":243},[79,71834,71835],{"class":96}," city",[79,71837,468],{"class":243},[79,71839,56506],{"class":239},[79,71841,56509],{"class":85},[79,71843,685],{"class":239},[79,71845,71846],{"class":89},"'.city'",[79,71848,253],{"class":239},[79,71850,71851,71853,71856,71858,71860,71862,71864,71867],{"class":81,"line":1112},[79,71852,13385],{"class":243},[79,71854,71855],{"class":96}," tbody",[79,71857,468],{"class":243},[79,71859,56506],{"class":239},[79,71861,56509],{"class":85},[79,71863,685],{"class":239},[79,71865,71866],{"class":89},"'tbody'",[79,71868,253],{"class":239},[79,71870,71871],{"class":81,"line":1124},[79,71872,454],{"emptyLinePlaceholder":453},[79,71874,71875],{"class":81,"line":1129},[79,71876,71877],{"class":2440},"    \u002F\u002F 获取所有带有name属性的元素\n",[79,71879,71880,71882,71885,71887,71889,71891,71893,71896],{"class":81,"line":1150},[79,71881,13385],{"class":243},[79,71883,71884],{"class":96}," items",[79,71886,468],{"class":243},[79,71888,56506],{"class":239},[79,71890,57791],{"class":85},[79,71892,685],{"class":239},[79,71894,71895],{"class":89},"'[name]'",[79,71897,253],{"class":239},[79,71899,71900],{"class":81,"line":1161},[79,71901,71902],{"class":2440},"    \u002F\u002F 声明一个空的数组\n",[79,71904,71905,71907,71909,71911],{"class":81,"line":1175},[79,71906,13385],{"class":243},[79,71908,59805],{"class":96},[79,71910,468],{"class":243},[79,71912,53951],{"class":239},[79,71914,71915],{"class":81,"line":1194},[79,71916,71917],{"class":2440},"    \u002F\u002F 1.录入模块\n",[79,71919,71920],{"class":81,"line":1211},[79,71921,71922],{"class":2440},"    \u002F\u002F 1.1这是一个表单提交事件\n",[79,71924,71925,71927,71930,71932,71934,71936,71938,71941],{"class":81,"line":1228},[79,71926,13385],{"class":243},[79,71928,71929],{"class":96}," info",[79,71931,468],{"class":243},[79,71933,56506],{"class":239},[79,71935,56509],{"class":85},[79,71937,685],{"class":239},[79,71939,71940],{"class":89},"'.info'",[79,71942,253],{"class":239},[79,71944,71945,71948,71950,71952,71955,71957,71959,71961,71963],{"class":81,"line":1246},[79,71946,71947],{"class":239},"    info.",[79,71949,59923],{"class":85},[79,71951,685],{"class":239},[79,71953,71954],{"class":89},"'submit'",[79,71956,1060],{"class":239},[79,71958,56559],{"class":243},[79,71960,3887],{"class":239},[79,71962,2455],{"class":7412},[79,71964,14605],{"class":239},[79,71966,71967],{"class":81,"line":1251},[79,71968,71969],{"class":2440},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[79,71971,71972,71975,71978],{"class":81,"line":1274},[79,71973,71974],{"class":239},"      e.",[79,71976,71977],{"class":85},"preventDefault",[79,71979,4191],{"class":239},[79,71981,71982],{"class":81,"line":1296},[79,71983,62122],{"class":2440},[79,71985,71986],{"class":81,"line":1316},[79,71987,454],{"emptyLinePlaceholder":453},[79,71989,71990],{"class":81,"line":1321},[79,71991,71992],{"class":2440},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[79,71994,71995],{"class":81,"line":1326},[79,71996,71997],{"class":2440},"      \u002F\u002F 先遍历循环\n",[79,71999,72000,72002,72004,72006,72008,72010,72012,72014,72016,72019,72021,72023,72025],{"class":81,"line":1342},[79,72001,54396],{"class":243},[79,72003,3887],{"class":239},[79,72005,53960],{"class":243},[79,72007,11622],{"class":239},[79,72009,244],{"class":243},[79,72011,670],{"class":96},[79,72013,11629],{"class":239},[79,72015,392],{"class":243},[79,72017,72018],{"class":239}," items.",[79,72020,54081],{"class":96},[79,72022,5417],{"class":239},[79,72024,4507],{"class":243},[79,72026,14605],{"class":239},[79,72028,72029,72031,72034,72036,72039],{"class":81,"line":18985},[79,72030,1132],{"class":243},[79,72032,72033],{"class":239}," (items[i].value ",[79,72035,56596],{"class":243},[79,72037,72038],{"class":89}," ''",[79,72040,14605],{"class":239},[79,72042,72043,72046,72049,72051,72054],{"class":81,"line":18990},[79,72044,72045],{"class":243},"          return",[79,72047,72048],{"class":85}," alert",[79,72050,685],{"class":239},[79,72052,72053],{"class":89},"'输入内容不能为空'",[79,72055,253],{"class":239},[79,72057,72058],{"class":81,"line":18995},[79,72059,4742],{"class":239},[79,72061,72062],{"class":81,"line":19009},[79,72063,54510],{"class":239},[79,72065,72066],{"class":81,"line":19021},[79,72067,454],{"emptyLinePlaceholder":453},[79,72069,72070],{"class":81,"line":19026},[79,72071,72072],{"class":2440},"      \u002F\u002F 创建新的对象\n",[79,72074,72075,72077,72080,72082],{"class":81,"line":19039},[79,72076,60338],{"class":243},[79,72078,72079],{"class":96}," obj",[79,72081,468],{"class":243},[79,72083,17732],{"class":239},[79,72085,72086,72089,72091,72093,72095],{"class":81,"line":19044},[79,72087,72088],{"class":239},"        stuID: arr.",[79,72090,54081],{"class":96},[79,72092,47680],{"class":243},[79,72094,27253],{"class":96},[79,72096,33585],{"class":239},[79,72098,72099],{"class":81,"line":19049},[79,72100,72101],{"class":239},"        uname: uname.value,\n",[79,72103,72104],{"class":81,"line":19054},[79,72105,72106],{"class":239},"        age: age.value,\n",[79,72108,72109],{"class":81,"line":19067},[79,72110,72111],{"class":239},"        gender: gender.value,\n",[79,72113,72114],{"class":81,"line":19072},[79,72115,72116],{"class":239},"        salary: salary.value,\n",[79,72118,72119],{"class":81,"line":34748},[79,72120,72121],{"class":239},"        city: city.value\n",[79,72123,72124],{"class":81,"line":34754},[79,72125,54510],{"class":239},[79,72127,72128],{"class":81,"line":34760},[79,72129,72130],{"class":2440},"      \u002F\u002F console.log(obj);\n",[79,72132,72133],{"class":81,"line":34766},[79,72134,72135],{"class":2440},"      \u002F\u002F 追加到数组里面\n",[79,72137,72138,72140,72142],{"class":81,"line":34772},[79,72139,60117],{"class":239},[79,72141,53997],{"class":85},[79,72143,72144],{"class":239},"(obj)\n",[79,72146,72147],{"class":81,"line":34783},[79,72148,72149],{"class":2440},"      \u002F\u002F console.log(arr);\n",[79,72151,72152],{"class":81,"line":34789},[79,72153,72154],{"class":2440},"      \u002F\u002F 清空表单  reset重置表单\n",[79,72156,72157,72160,72162,72165],{"class":81,"line":34809},[79,72158,72159],{"class":96},"      this",[79,72161,2931],{"class":239},[79,72163,72164],{"class":85},"reset",[79,72166,4191],{"class":239},[79,72168,72169],{"class":81,"line":34815},[79,72170,72171],{"class":2440},"      \u002F\u002F 调用渲染函数\n",[79,72173,72174,72177],{"class":81,"line":34826},[79,72175,72176],{"class":85},"      render",[79,72178,4191],{"class":239},[79,72180,72181],{"class":81,"line":34832},[79,72182,35576],{"class":239},[79,72184,72185],{"class":81,"line":34838},[79,72186,72187],{"class":2440},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[79,72189,72190,72193,72196],{"class":81,"line":34844},[79,72191,72192],{"class":243},"    function",[79,72194,72195],{"class":85}," render",[79,72197,13017],{"class":239},[79,72199,72200],{"class":81,"line":34850},[79,72201,72202],{"class":2440},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[79,72204,72205,72208,72210],{"class":81,"line":34856},[79,72206,72207],{"class":239},"      tbody.innerHTML ",[79,72209,244],{"class":243},[79,72211,72212],{"class":89}," ''\n",[79,72214,72215],{"class":81,"line":34862},[79,72216,72217],{"class":2440},"      \u002F\u002F 遍历数组\n",[79,72219,72220,72222,72224,72226,72228,72230,72232,72234,72236,72238,72240,72242,72244],{"class":81,"line":34868},[79,72221,54396],{"class":243},[79,72223,3887],{"class":239},[79,72225,53960],{"class":243},[79,72227,11622],{"class":239},[79,72229,244],{"class":243},[79,72231,670],{"class":96},[79,72233,11629],{"class":239},[79,72235,392],{"class":243},[79,72237,54078],{"class":239},[79,72239,54081],{"class":96},[79,72241,5417],{"class":239},[79,72243,4507],{"class":243},[79,72245,14605],{"class":239},[79,72247,72248,72250,72253,72255,72257,72260,72262,72265],{"class":81,"line":34888},[79,72249,63380],{"class":243},[79,72251,72252],{"class":96}," tr",[79,72254,468],{"class":243},[79,72256,56506],{"class":239},[79,72258,72259],{"class":85},"createElement",[79,72261,685],{"class":239},[79,72263,72264],{"class":89},"'tr'",[79,72266,253],{"class":239},[79,72268,72269,72272,72274],{"class":81,"line":34894},[79,72270,72271],{"class":239},"        tr.innerHTML ",[79,72273,244],{"class":243},[79,72275,72276],{"class":89}," `\n",[79,72278,72279,72282,72284,72286,72288,72291,72294],{"class":81,"line":34910},[79,72280,72281],{"class":89},"        \u003Ctd>${",[79,72283,6082],{"class":239},[79,72285,3263],{"class":89},[79,72287,2815],{"class":239},[79,72289,72290],{"class":89},"].",[79,72292,72293],{"class":239},"stuID",[79,72295,72296],{"class":89},"}\u003C\u002Ftd>\n",[79,72298,72299,72302,72304,72306,72308,72310,72313],{"class":81,"line":34916},[79,72300,72301],{"class":89},"          \u003Ctd>${",[79,72303,6082],{"class":239},[79,72305,3263],{"class":89},[79,72307,2815],{"class":239},[79,72309,72290],{"class":89},[79,72311,72312],{"class":239},"uname",[79,72314,72296],{"class":89},[79,72316,72317,72319,72321,72323,72325,72327,72330],{"class":81,"line":34930},[79,72318,72301],{"class":89},[79,72320,6082],{"class":239},[79,72322,3263],{"class":89},[79,72324,2815],{"class":239},[79,72326,72290],{"class":89},[79,72328,72329],{"class":239},"age",[79,72331,72296],{"class":89},[79,72333,72334,72336,72338,72340,72342,72344,72347],{"class":81,"line":34936},[79,72335,72301],{"class":89},[79,72337,6082],{"class":239},[79,72339,3263],{"class":89},[79,72341,2815],{"class":239},[79,72343,72290],{"class":89},[79,72345,72346],{"class":239},"gender",[79,72348,72296],{"class":89},[79,72350,72351,72353,72355,72357,72359,72361,72364],{"class":81,"line":34951},[79,72352,72301],{"class":89},[79,72354,6082],{"class":239},[79,72356,3263],{"class":89},[79,72358,2815],{"class":239},[79,72360,72290],{"class":89},[79,72362,72363],{"class":239},"salary",[79,72365,72296],{"class":89},[79,72367,72368,72370,72372,72374,72376,72378,72381],{"class":81,"line":34957},[79,72369,72301],{"class":89},[79,72371,6082],{"class":239},[79,72373,3263],{"class":89},[79,72375,2815],{"class":239},[79,72377,72290],{"class":89},[79,72379,72380],{"class":239},"city",[79,72382,72296],{"class":89},[79,72384,72385],{"class":81,"line":34966},[79,72386,71701],{"class":89},[79,72388,72389,72392,72394],{"class":81,"line":34972},[79,72390,72391],{"class":89},"            \u003Ca href=\"javascript:\" data-id=${",[79,72393,2815],{"class":239},[79,72395,72396],{"class":89},"}>删除\u003C\u002Fa>\n",[79,72398,72399],{"class":81,"line":34981},[79,72400,72401],{"class":89},"          \u003C\u002Ftd> \n",[79,72403,72404],{"class":81,"line":34987},[79,72405,72406],{"class":89},"          `\n",[79,72408,72409],{"class":81,"line":34993},[79,72410,72411],{"class":2440},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[79,72413,72414,72417,72420],{"class":81,"line":35002},[79,72415,72416],{"class":239},"        tbody.",[79,72418,72419],{"class":85},"appendChild",[79,72421,72422],{"class":239},"(tr)\n",[79,72424,72425],{"class":81,"line":35008},[79,72426,54510],{"class":239},[79,72428,72429],{"class":81,"line":35019},[79,72430,4402],{"class":239},[79,72432,72433],{"class":81,"line":35025},[79,72434,454],{"emptyLinePlaceholder":453},[79,72436,72437],{"class":81,"line":35044},[79,72438,72439],{"class":2440},"    \u002F\u002F 3.删除委托\n",[79,72441,72442],{"class":81,"line":35050},[79,72443,72444],{"class":2440},"    \u002F\u002F 3.1 事件委托 tbody\n",[79,72446,72447,72450,72452,72454,72456,72458,72460,72462,72464],{"class":81,"line":35061},[79,72448,72449],{"class":239},"    tbody.",[79,72451,59923],{"class":85},[79,72453,685],{"class":239},[79,72455,59928],{"class":89},[79,72457,1060],{"class":239},[79,72459,56559],{"class":243},[79,72461,3887],{"class":239},[79,72463,2455],{"class":7412},[79,72465,14605],{"class":239},[79,72467,72468,72470,72472,72474,72476],{"class":81,"line":35067},[79,72469,56590],{"class":243},[79,72471,69143],{"class":239},[79,72473,56596],{"class":243},[79,72475,70365],{"class":89},[79,72477,14605],{"class":239},[79,72479,72480],{"class":81,"line":35087},[79,72481,72482],{"class":2440},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[79,72484,72485],{"class":81,"line":35103},[79,72486,72487],{"class":2440},"        \u002F\u002F console.log(e.target.dataset.id);\n",[79,72489,72490],{"class":81,"line":35109},[79,72491,72492],{"class":2440},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[79,72494,72495,72498,72500,72503,72505],{"class":81,"line":35123},[79,72496,72497],{"class":239},"        arr.",[79,72499,60120],{"class":85},[79,72501,72502],{"class":239},"(e.target.dataset.id, ",[79,72504,1072],{"class":96},[79,72506,253],{"class":239},[79,72508,72509],{"class":81,"line":35129},[79,72510,72511],{"class":2440},"        \u002F\u002F 重新渲染一次\n",[79,72513,72514,72517],{"class":81,"line":35135},[79,72515,72516],{"class":85},"        render",[79,72518,4191],{"class":239},[79,72520,72521],{"class":81,"line":35146},[79,72522,54510],{"class":239},[79,72524,72525],{"class":81,"line":35152},[79,72526,35576],{"class":239},[79,72528,72529,72531,72533],{"class":81,"line":35158},[79,72530,54529],{"class":239},[79,72532,53926],{"class":395},[79,72534,53420],{"class":239},[79,72536,72537],{"class":81,"line":35168},[79,72538,454],{"emptyLinePlaceholder":453},[79,72540,72541,72543,72545],{"class":81,"line":35174},[79,72542,53898],{"class":239},[79,72544,53913],{"class":395},[79,72546,53420],{"class":239},[79,72548,72549],{"class":81,"line":35185},[79,72550,454],{"emptyLinePlaceholder":453},[79,72552,72553,72555,72557],{"class":81,"line":35191},[79,72554,53898],{"class":239},[79,72556,52749],{"class":395},[79,72558,53420],{"class":239},[19,72560,72561],{},"样式：",[51,72563,72567],{"className":72564,"code":72565,"language":72566,"meta":57,"style":57},"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",[59,72568,72569,72574,72584,72593,72597,72601,72606,72616,72621,72625,72630,72640,72645,72654,72658,72662,72667,72672,72682,72692,72697,72701,72706,72715,72725,72730,72740,72750,72754,72759,72767,72771,72776,72781,72786,72794,72803,72807,72812,72821,72825,72830,72839,72843,72848,72857,72866,72874,72878,72883,72892,72902,72911,72921,72927,72936,72946,72956,72960,72965,72974,72982,72992,73000,73009,73018,73028,73036,73040,73045,73054],{"__ignoreMap":57},[79,72570,72571],{"class":81,"line":82},[79,72572,72573],{"class":239},"* {\n",[79,72575,72576,72579,72581],{"class":81,"line":167},[79,72577,72578],{"class":395},"  margin",[79,72580,53550],{"class":239},[79,72582,72583],{"class":89},"0;\n",[79,72585,72586,72589,72591],{"class":81,"line":178},[79,72587,72588],{"class":89},"  padding",[79,72590,53550],{"class":239},[79,72592,72583],{"class":89},[79,72594,72595],{"class":81,"line":457},[79,72596,3801],{"class":239},[79,72598,72599],{"class":81,"line":462},[79,72600,454],{"emptyLinePlaceholder":453},[79,72602,72603],{"class":81,"line":474},[79,72604,72605],{"class":89},"a {\n",[79,72607,72608,72611,72613],{"class":81,"line":480},[79,72609,72610],{"class":395},"  text-decoration",[79,72612,53550],{"class":239},[79,72614,72615],{"class":89},"none;\n",[79,72617,72618],{"class":81,"line":486},[79,72619,72620],{"class":89},"  color:#721c24;\n",[79,72622,72623],{"class":81,"line":491},[79,72624,3801],{"class":239},[79,72626,72627],{"class":81,"line":497},[79,72628,72629],{"class":89},"h1 {\n",[79,72631,72632,72635,72637],{"class":81,"line":503},[79,72633,72634],{"class":395},"  text-align",[79,72636,53550],{"class":239},[79,72638,72639],{"class":89},"center;\n",[79,72641,72642],{"class":81,"line":509},[79,72643,72644],{"class":89},"  color:#333;\n",[79,72646,72647,72649,72651],{"class":81,"line":514},[79,72648,72578],{"class":395},[79,72650,53550],{"class":239},[79,72652,72653],{"class":89},"20px 0;\n",[79,72655,72656],{"class":81,"line":520},[79,72657,4880],{"class":239},[79,72659,72660],{"class":81,"line":526},[79,72661,3801],{"class":239},[79,72663,72664],{"class":81,"line":532},[79,72665,72666],{"class":89},"table {\n",[79,72668,72669],{"class":81,"line":537},[79,72670,72671],{"class":89},"  margin:0 auto;\n",[79,72673,72674,72677,72679],{"class":81,"line":543},[79,72675,72676],{"class":395},"  width",[79,72678,53550],{"class":239},[79,72680,72681],{"class":89},"800px;\n",[79,72683,72684,72687,72689],{"class":81,"line":549},[79,72685,72686],{"class":395},"  border-collapse",[79,72688,53550],{"class":239},[79,72690,72691],{"class":89},"collapse;\n",[79,72693,72694],{"class":81,"line":555},[79,72695,72696],{"class":89},"  color:#004085;\n",[79,72698,72699],{"class":81,"line":561},[79,72700,3801],{"class":239},[79,72702,72703],{"class":81,"line":567},[79,72704,72705],{"class":89},"th {\n",[79,72707,72708,72710,72712],{"class":81,"line":573},[79,72709,72588],{"class":395},[79,72711,53550],{"class":239},[79,72713,72714],{"class":89},"10px;\n",[79,72716,72717,72720,72722],{"class":81,"line":579},[79,72718,72719],{"class":395},"  background",[79,72721,53550],{"class":239},[79,72723,72724],{"class":2440},"#cfe5ff;\n",[79,72726,72727],{"class":81,"line":584},[79,72728,72729],{"class":239},"  \n",[79,72731,72732,72735,72737],{"class":81,"line":590},[79,72733,72734],{"class":395},"  font-size",[79,72736,53550],{"class":239},[79,72738,72739],{"class":89},"20px;\n",[79,72741,72742,72745,72747],{"class":81,"line":596},[79,72743,72744],{"class":395},"  font-weight",[79,72746,53550],{"class":239},[79,72748,72749],{"class":89},"400;\n",[79,72751,72752],{"class":81,"line":602},[79,72753,3801],{"class":239},[79,72755,72756],{"class":81,"line":608},[79,72757,72758],{"class":89},"td,th {\n",[79,72760,72761,72764],{"class":81,"line":614},[79,72762,72763],{"class":89},"  border:1px solid",[79,72765,72766],{"class":2440}," #b8daff;\n",[79,72768,72769],{"class":81,"line":620},[79,72770,3801],{"class":239},[79,72772,72773],{"class":81,"line":625},[79,72774,72775],{"class":89},"td {\n",[79,72777,72778],{"class":81,"line":630},[79,72779,72780],{"class":89},"  padding:10px;\n",[79,72782,72783],{"class":81,"line":648},[79,72784,72785],{"class":89},"  color:#666;\n",[79,72787,72788,72790,72792],{"class":81,"line":659},[79,72789,72634],{"class":395},[79,72791,53550],{"class":239},[79,72793,72639],{"class":89},[79,72795,72796,72798,72800],{"class":81,"line":676},[79,72797,72734],{"class":395},[79,72799,53550],{"class":239},[79,72801,72802],{"class":89},"16px;\n",[79,72804,72805],{"class":81,"line":708},[79,72806,3801],{"class":239},[79,72808,72809],{"class":81,"line":717},[79,72810,72811],{"class":89},"tbody tr {\n",[79,72813,72814,72816,72818],{"class":81,"line":722},[79,72815,72719],{"class":395},[79,72817,53550],{"class":239},[79,72819,72820],{"class":2440},"#fff;\n",[79,72822,72823],{"class":81,"line":727},[79,72824,3801],{"class":239},[79,72826,72827],{"class":81,"line":738},[79,72828,72829],{"class":89},"tbody tr:hover {\n",[79,72831,72832,72834,72836],{"class":81,"line":753},[79,72833,72719],{"class":395},[79,72835,53550],{"class":239},[79,72837,72838],{"class":2440},"#e1ecf8;\n",[79,72840,72841],{"class":81,"line":768},[79,72842,3801],{"class":239},[79,72844,72845],{"class":81,"line":776},[79,72846,72847],{"class":89},".info {\n",[79,72849,72850,72852,72854],{"class":81,"line":781},[79,72851,72676],{"class":395},[79,72853,53550],{"class":239},[79,72855,72856],{"class":89},"900px;\n",[79,72858,72859,72861,72863],{"class":81,"line":786},[79,72860,72578],{"class":395},[79,72862,53550],{"class":239},[79,72864,72865],{"class":89},"50px auto;\n",[79,72867,72868,72870,72872],{"class":81,"line":802},[79,72869,72634],{"class":395},[79,72871,53550],{"class":239},[79,72873,72639],{"class":89},[79,72875,72876],{"class":81,"line":815},[79,72877,3801],{"class":239},[79,72879,72880],{"class":81,"line":828},[79,72881,72882],{"class":89},".info  input, .info select {\n",[79,72884,72885,72887,72889],{"class":81,"line":842},[79,72886,72676],{"class":395},[79,72888,53550],{"class":239},[79,72890,72891],{"class":89},"80px;\n",[79,72893,72894,72897,72899],{"class":81,"line":859},[79,72895,72896],{"class":395},"  height",[79,72898,53550],{"class":239},[79,72900,72901],{"class":89},"27px;\n",[79,72903,72904,72907,72909],{"class":81,"line":878},[79,72905,72906],{"class":395},"  outline",[79,72908,53550],{"class":239},[79,72910,72615],{"class":89},[79,72912,72913,72916,72918],{"class":81,"line":883},[79,72914,72915],{"class":395},"  border-radius",[79,72917,53550],{"class":239},[79,72919,72920],{"class":89},"5px;\n",[79,72922,72923,72925],{"class":81,"line":888},[79,72924,72763],{"class":89},[79,72926,72766],{"class":2440},[79,72928,72929,72932,72934],{"class":81,"line":904},[79,72930,72931],{"class":395},"  padding-left",[79,72933,53550],{"class":239},[79,72935,72920],{"class":89},[79,72937,72938,72941,72943],{"class":81,"line":919},[79,72939,72940],{"class":395},"  box-sizing",[79,72942,53550],{"class":239},[79,72944,72945],{"class":89},"border-box;\n",[79,72947,72948,72951,72953],{"class":81,"line":930},[79,72949,72950],{"class":395},"  margin-right",[79,72952,53550],{"class":239},[79,72954,72955],{"class":89},"15px;\n",[79,72957,72958],{"class":81,"line":941},[79,72959,3801],{"class":239},[79,72961,72962],{"class":81,"line":946},[79,72963,72964],{"class":89},".info button {\n",[79,72966,72967,72969,72971],{"class":81,"line":969},[79,72968,72676],{"class":395},[79,72970,53550],{"class":239},[79,72972,72973],{"class":89},"60px;\n",[79,72975,72976,72978,72980],{"class":81,"line":975},[79,72977,72896],{"class":395},[79,72979,53550],{"class":239},[79,72981,72901],{"class":89},[79,72983,72984,72987,72989],{"class":81,"line":989},[79,72985,72986],{"class":395},"  background-color",[79,72988,53550],{"class":239},[79,72990,72991],{"class":2440},"#004085;\n",[79,72993,72994,72996,72998],{"class":81,"line":1003},[79,72995,72906],{"class":395},[79,72997,53550],{"class":239},[79,72999,72615],{"class":89},[79,73001,73002,73005,73007],{"class":81,"line":1019},[79,73003,73004],{"class":395},"  border",[79,73006,53550],{"class":239},[79,73008,72583],{"class":89},[79,73010,73011,73014,73016],{"class":81,"line":1024},[79,73012,73013],{"class":395},"  color",[79,73015,53550],{"class":239},[79,73017,72820],{"class":2440},[79,73019,73020,73023,73025],{"class":81,"line":1067},[79,73021,73022],{"class":395},"  cursor",[79,73024,53550],{"class":239},[79,73026,73027],{"class":89},"pointer;\n",[79,73029,73030,73032,73034],{"class":81,"line":1101},[79,73031,72915],{"class":395},[79,73033,53550],{"class":239},[79,73035,72920],{"class":89},[79,73037,73038],{"class":81,"line":1106},[79,73039,3801],{"class":239},[79,73041,73042],{"class":81,"line":1112},[79,73043,73044],{"class":89},".info .age {\n",[79,73046,73047,73049,73051],{"class":81,"line":1124},[79,73048,72676],{"class":395},[79,73050,53550],{"class":239},[79,73052,73053],{"class":89},"50px;\n",[79,73055,73056],{"class":81,"line":1129},[79,73057,3801],{"class":239},[19,73059,73060],{},"思路：",[19,73062,73063],{},[3699,73064],{"alt":57,"src":73065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,73067,73068],{},[3699,73069],{"alt":57,"src":73070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,73072,73073],{},[3699,73074],{"alt":57,"src":73075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[265,73077,73079],{"id":73078},"_3315-重绘回流","3.3.15 重绘回流",[19,73081,73082],{},[3699,73083],{"alt":57,"src":73084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,73086,73087],{},[3699,73088],{"alt":57,"src":73089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,73091,73092],{},[3699,73093],{"alt":57,"src":73094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,73096,73098],{"id":73097},"_34-bom","3.4 BOM",[19,73100,73101],{},[3699,73102],{"alt":57,"src":73103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,73105,73106],{},"平时写的document省略了window而已，实际上是window.document",[19,73108,73109],{},"函数也是这样，调用的时候实际为window.fn()",[19,73111,73112],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,73114,73115],{},"window大部分情况下可以省略",[265,73117,73119],{"id":73118},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,73121,73122],{},"只执行一次",[19,73124,73125],{},[3699,73126],{"alt":57,"src":73127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,73129,73130],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,73132,73133],{},[3699,73134],{"alt":57,"src":73135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[265,73137,73139],{"id":73138},"_342-js执行机制","3.4.2 JS执行机制",[19,73141,73142],{},[3699,73143],{"alt":57,"src":73144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,73146,73147],{},"两个的结果都是1111 3333 2222",[19,73149,73150],{},[3699,73151],{"alt":57,"src":73152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,73154,73155],{},[3699,73156],{"alt":57,"src":73157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,73159,73160],{},[3699,73161],{"alt":57,"src":73162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,73164,73165],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,73167,73168],{},"工作流程：",[19,73170,73171],{},[3699,73172],{"alt":57,"src":73173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,73175,73176],{},[3699,73177],{"alt":57,"src":73178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,73180,73181],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,73183,73184],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[265,73186,73188],{"id":73187},"_343-location对象","3.4.3 location对象",[19,73190,73191],{},"location对象属于window这个全局对象下的，可以 省略window",[19,73193,73194],{},[3699,73195],{"alt":57,"src":73196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,73198,73199],{},"href可以跳转页面",[26,73201,73202],{},[29,73203,73204],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,73206,73207],{},"search得到提交信息之后网站后边的地址",[19,73209,73210],{},[3699,73211],{"alt":57,"src":73212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,73214,73215],{},[3699,73216],{"alt":57,"src":73217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[26,73219,73220],{"start":167},[29,73221,73222],{},"hash:这个获取单页面应用#后边的地址",[19,73224,73225],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,73227,73228],{},[3699,73229],{"alt":57,"src":73230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[51,73232,73234],{"className":383,"code":73233,"language":385,"meta":57,"style":57},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[59,73235,73236,73256,73276],{"__ignoreMap":57},[79,73237,73238,73240,73242,73244,73246,73249,73252,73254],{"class":81,"line":82},[79,73239,54257],{"class":239},[79,73241,2614],{"class":395},[79,73243,63167],{"class":85},[79,73245,244],{"class":239},[79,73247,73248],{"class":89},"\"#\u002Fmy\"",[79,73250,73251],{"class":239},">我的\u003C\u002F",[79,73253,2614],{"class":395},[79,73255,53420],{"class":239},[79,73257,73258,73260,73262,73264,73266,73269,73272,73274],{"class":81,"line":167},[79,73259,54257],{"class":239},[79,73261,2614],{"class":395},[79,73263,63167],{"class":85},[79,73265,244],{"class":239},[79,73267,73268],{"class":89},"\"#\u002Ffriend\"",[79,73270,73271],{"class":239},">关注\u003C\u002F",[79,73273,2614],{"class":395},[79,73275,53420],{"class":239},[79,73277,73278,73280,73282,73284,73286,73289,73292,73294],{"class":81,"line":178},[79,73279,54257],{"class":239},[79,73281,2614],{"class":395},[79,73283,63167],{"class":85},[79,73285,244],{"class":239},[79,73287,73288],{"class":89},"\"#\u002Fdownload\"",[79,73290,73291],{"class":239},">下载\u003C\u002F",[79,73293,2614],{"class":395},[79,73295,53420],{"class":239},[19,73297,73298],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[26,73300,73301],{"start":178},[29,73302,73303,73304,73306,73307,73309],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55826,73305],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55826,73308],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[265,73311,73313],{"id":73312},"_345-navigator对象","3.4.5 navigator对象",[19,73315,73316],{},[3699,73317],{"alt":57,"src":73318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[51,73320,73324],{"className":73321,"code":73322,"language":73323,"meta":57,"style":57},"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",[59,73325,73326,73331,73342,73354,73359,73410,73451,73456,73469,73481,73486],{"__ignoreMap":57},[79,73327,73328],{"class":81,"line":82},[79,73329,73330],{"class":2440},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[79,73332,73333,73335,73337,73339],{"class":81,"line":167},[79,73334,2602],{"class":243},[79,73336,685],{"class":239},[79,73338,56559],{"class":243},[79,73340,73341],{"class":239}," () { \n",[79,73343,73344,73346,73349,73351],{"class":81,"line":178},[79,73345,8986],{"class":243},[79,73347,73348],{"class":96}," userAgent",[79,73350,468],{"class":243},[79,73352,73353],{"class":239}," navigator.userAgent \n",[79,73355,73356],{"class":81,"line":457},[79,73357,73358],{"class":2440},"\u002F\u002F 验证是否为Android或iPhone \n",[79,73360,73361,73363,73366,73368,73371,73374,73376,73378,73381,73383,73386,73390,73392,73394,73396,73399,73401,73403,73405,73407],{"class":81,"line":462},[79,73362,8986],{"class":243},[79,73364,73365],{"class":96}," android",[79,73367,468],{"class":243},[79,73369,73370],{"class":239}," userAgent.",[79,73372,73373],{"class":85},"match",[79,73375,685],{"class":239},[79,73377,2957],{"class":89},[79,73379,73380],{"class":50091},"(Android);",[79,73382,3356],{"class":243},[79,73384,73385],{"class":96},"[\\s",[79,73387,73389],{"class":73388},"snhLl","\\\u002F",[79,73391,3311],{"class":96},[79,73393,2855],{"class":243},[79,73395,685],{"class":50091},[79,73397,73398],{"class":96},"[\\d.]",[79,73400,2855],{"class":243},[79,73402,2803],{"class":50091},[79,73404,3356],{"class":243},[79,73406,2957],{"class":89},[79,73408,73409],{"class":239},") \n",[79,73411,73412,73414,73417,73419,73421,73423,73425,73427,73430,73433,73436,73438,73440,73443,73445,73447,73449],{"class":81,"line":474},[79,73413,8986],{"class":243},[79,73415,73416],{"class":96}," iphone",[79,73418,468],{"class":243},[79,73420,73370],{"class":239},[79,73422,73373],{"class":85},[79,73424,685],{"class":239},[79,73426,2957],{"class":89},[79,73428,73429],{"class":50091},"(iPhone",[79,73431,73432],{"class":96},"\\s",[79,73434,73435],{"class":50091},"OS)",[79,73437,73432],{"class":96},[79,73439,685],{"class":50091},[79,73441,73442],{"class":96},"[\\d_]",[79,73444,2855],{"class":243},[79,73446,2803],{"class":50091},[79,73448,2957],{"class":89},[79,73450,73409],{"class":239},[79,73452,73453],{"class":81,"line":480},[79,73454,73455],{"class":2440},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[79,73457,73458,73460,73463,73466],{"class":81,"line":486},[79,73459,1329],{"class":243},[79,73461,73462],{"class":239}," (android ",[79,73464,73465],{"class":243},"||",[79,73467,73468],{"class":239}," iphone) { \n",[79,73470,73471,73474,73476,73479],{"class":81,"line":491},[79,73472,73473],{"class":239},"location.href ",[79,73475,244],{"class":243},[79,73477,73478],{"class":89}," 'http:\u002F\u002Fm.itcast.cn'",[79,73480,4880],{"class":239},[79,73482,73483],{"class":81,"line":497},[79,73484,73485],{"class":239},"} \n",[79,73487,73488],{"class":81,"line":503},[79,73489,73490],{"class":239},"})()\n",[265,73492,73494],{"id":73493},"_346-histroy对象","3.4.6 histroy对象",[19,73496,73497],{},[3699,73498],{"alt":57,"src":73499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73501,73502],{},"浏览器地址的前进与后退!!!",[19,73504,73505],{},"history.back() 等效于 history.go(-1)",[19,73507,73508],{},"history.forward() 等效于 history.go(1)",[14,73510,73512],{"id":73511},"_35-本地存储","3.5 本地存储",[26,73514,73515,73518,73521],{},[29,73516,73517],{},"数据存储在用户浏览器中",[29,73519,73520],{},"设置、读取方便、甚至页面刷新不丢失数据",[29,73522,73523],{},"容量较大，sessionStorage和localStorage约 5M 左右",[265,73525,73527],{"id":73526},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73529,73530],{},"只能存储字符串",[19,73532,73533],{},[3699,73534],{"alt":57,"src":73535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73537,73538],{},[3699,73539],{"alt":57,"src":73540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73542,73543],{},"键值对要加引号,不然就会当变量来看了",[19,73545,73546],{},"localStorage.setItem('uname', 'pink')",[19,73548,73549],{},"刷新之后信息不再丢失",[19,73551,73552],{},"操作key,value会跟着变",[19,73554,73555],{},"删除只删除键就可以,即名字",[19,73557,73546],{},[19,73559,73560],{},"改:",[19,73562,73563],{},"localStorage.setItem('uname','red')",[19,73565,73566],{},"有这个键就是改,没有这个键就是改",[19,73568,73569],{},[3699,73570],{"alt":57,"src":73571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73573,73574],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73576,73577],{},[3699,73578],{"alt":57,"src":73579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73581,73582],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[265,73584,73586],{"id":73585},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73588,73589],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73591,73592],{},"特性:",[26,73594,73595,73598,73601,73604],{},[29,73596,73597],{},"生命周期为关闭浏览器窗口",[29,73599,73600],{},"在同一个窗口(页面)下数据可以共享",[29,73602,73603],{},"以键值对的形式存储使用",[29,73605,73606],{},"用法跟localStorage 基本相同",[265,73608,73610],{"id":73609},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73612,73613],{},"本地只能存储字符串,无法直接存储复杂数据类型",[51,73615,73617],{"className":383,"code":73616,"language":385,"meta":57,"style":57},"\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",[59,73618,73619,73627,73632,73637,73642,73647,73651,73656,73661],{"__ignoreMap":57},[79,73620,73621,73623,73625],{"class":81,"line":82},[79,73622,392],{"class":239},[79,73624,53926],{"class":395},[79,73626,53420],{"class":239},[79,73628,73629],{"class":81,"line":167},[79,73630,73631],{"class":239},"    const obj = {\n",[79,73633,73634],{"class":81,"line":178},[79,73635,73636],{"class":239},"      uname: 'pink老师',\n",[79,73638,73639],{"class":81,"line":457},[79,73640,73641],{"class":239},"      age: 18,\n",[79,73643,73644],{"class":81,"line":462},[79,73645,73646],{"class":239},"      gender: '女'\n",[79,73648,73649],{"class":81,"line":474},[79,73650,4402],{"class":239},[79,73652,73653],{"class":81,"line":480},[79,73654,73655],{"class":239},"    \u002F\u002F 存储复杂数据类型\n",[79,73657,73658],{"class":81,"line":486},[79,73659,73660],{"class":239},"    localStorage.setItem('obj', obj)\n",[79,73662,73663,73665,73667],{"class":81,"line":491},[79,73664,54529],{"class":239},[79,73666,53926],{"class":395},[79,73668,53420],{"class":239},[19,73670,73671],{},[3699,73672],{"alt":57,"src":73673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73675,73676],{},"如果获取一下数据:",[19,73678,73679],{},"log(localStorage.getItem('obj'))",[19,73681,73682],{},[3699,73683],{"alt":57,"src":73684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73686,73687],{},"发现直接存对象是使用不了的!!!",[24137,73689,73691],{"id":73690},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73693,73694],{},[3699,73695],{"alt":57,"src":73696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[51,73698,73700],{"className":52747,"code":73699,"language":52749,"meta":57,"style":57},"\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",[59,73701,73702,73710,73720,73730,73739,73747,73751,73755,73781,73800,73808,73812,73817,73822],{"__ignoreMap":57},[79,73703,73704,73706,73708],{"class":81,"line":82},[79,73705,392],{"class":239},[79,73707,53926],{"class":395},[79,73709,53420],{"class":239},[79,73711,73712,73714,73716,73718],{"class":81,"line":167},[79,73713,13385],{"class":243},[79,73715,72079],{"class":96},[79,73717,468],{"class":243},[79,73719,17732],{"class":239},[79,73721,73722,73725,73728],{"class":81,"line":178},[79,73723,73724],{"class":239},"      uname: ",[79,73726,73727],{"class":89},"'pink老师'",[79,73729,33585],{"class":239},[79,73731,73732,73735,73737],{"class":81,"line":457},[79,73733,73734],{"class":239},"      age: ",[79,73736,3023],{"class":96},[79,73738,33585],{"class":239},[79,73740,73741,73744],{"class":81,"line":462},[79,73742,73743],{"class":239},"      gender: ",[79,73745,73746],{"class":89},"'女'\n",[79,73748,73749],{"class":81,"line":474},[79,73750,4402],{"class":239},[79,73752,73753],{"class":81,"line":480},[79,73754,73655],{"class":2440},[79,73756,73757,73760,73763,73765,73768,73770,73773,73775,73778],{"class":81,"line":486},[79,73758,73759],{"class":239},"  localStorage.",[79,73761,73762],{"class":85},"setItem",[79,73764,685],{"class":239},[79,73766,73767],{"class":89},"'obj'",[79,73769,1060],{"class":239},[79,73771,73772],{"class":96},"JSON",[79,73774,2931],{"class":239},[79,73776,73777],{"class":85},"stringify",[79,73779,73780],{"class":239},"(obj))\n",[79,73782,73783,73786,73788,73791,73794,73796,73798],{"class":81,"line":491},[79,73784,73785],{"class":239},"  console.",[79,73787,60357],{"class":85},[79,73789,73790],{"class":239},"(localStorage.",[79,73792,73793],{"class":85},"getItem",[79,73795,685],{"class":239},[79,73797,73767],{"class":89},[79,73799,1191],{"class":239},[79,73801,73802,73804,73806],{"class":81,"line":497},[79,73803,54529],{"class":239},[79,73805,53926],{"class":395},[79,73807,53420],{"class":239},[79,73809,73810],{"class":81,"line":503},[79,73811,72729],{"class":239},[79,73813,73814],{"class":81,"line":509},[79,73815,73816],{"class":239},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[79,73818,73819],{"class":81,"line":514},[79,73820,73821],{"class":239},"  类型是字符串的\n",[79,73823,73824],{"class":81,"line":520},[79,73825,73826],{"class":239},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[24137,73828,73830],{"id":73829},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73832,73833],{},[3699,73834],{"alt":57,"src":73835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73837,73838],{},[3699,73839],{"alt":57,"src":73840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[51,73842,73844],{"className":383,"code":73843,"language":385,"meta":57,"style":57},"  \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",[59,73845,73846,73854,73858,73862,73866,73870,73874,73879,73884,73889,73894,73899,73904,73909,73914],{"__ignoreMap":57},[79,73847,73848,73850,73852],{"class":81,"line":82},[79,73849,54257],{"class":239},[79,73851,53926],{"class":395},[79,73853,53420],{"class":239},[79,73855,73856],{"class":81,"line":167},[79,73857,73631],{"class":239},[79,73859,73860],{"class":81,"line":178},[79,73861,73636],{"class":239},[79,73863,73864],{"class":81,"line":457},[79,73865,73641],{"class":239},[79,73867,73868],{"class":81,"line":462},[79,73869,73646],{"class":239},[79,73871,73872],{"class":81,"line":474},[79,73873,4402],{"class":239},[79,73875,73876],{"class":81,"line":480},[79,73877,73878],{"class":239},"    \u002F\u002F 1.存储复杂数据类型\n",[79,73880,73881],{"class":81,"line":486},[79,73882,73883],{"class":239},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[79,73885,73886],{"class":81,"line":491},[79,73887,73888],{"class":239},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[79,73890,73891],{"class":81,"line":497},[79,73892,73893],{"class":239},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[79,73895,73896],{"class":81,"line":503},[79,73897,73898],{"class":239},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[79,73900,73901],{"class":81,"line":509},[79,73902,73903],{"class":239},"    \u002F\u002F 取\n",[79,73905,73906],{"class":81,"line":514},[79,73907,73908],{"class":239},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[79,73910,73911],{"class":81,"line":520},[79,73912,73913],{"class":239},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[79,73915,73916,73918,73920],{"class":81,"line":526},[79,73917,54529],{"class":239},[79,73919,53926],{"class":395},[79,73921,53420],{"class":239},[19,73923,73924],{},[3699,73925],{"alt":57,"src":73926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[265,73928,73930],{"id":73929},"_356-数组map方法","3.5.6 数组map方法",[19,73932,73933],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73935,73936],{},[3699,73937],{"alt":57,"src":73938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73940,73941],{},[3699,73942],{"alt":57,"src":73943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73945,73946,73949],{},[2528,73947,73948],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73951,73952],{},"map有返回值，但是forEach没有返回值",[19,73954,73955],{},"map是个方法。用的时候要加 ()",[19,73957,73958],{},"map返回的是一个数组",[265,73960,73962],{"id":73961},"_357-数组中join方法","3.5.7 数组中join方法",[19,73964,73965],{},[3699,73966],{"alt":57,"src":73967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73969,73970],{},"类似于python中拼接字符串一样！",[26,73972,73973,73976,73979],{},[29,73974,73975],{},"小括号为空则逗号分开",[29,73977,73978],{},"小括号为空字符串 ''，则元素之间没有分隔符",[29,73980,73981],{},"小括号用啥符号就用进行分割",[265,73983,73985],{"id":73984},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[26,73987,73988,73991,73994,73997,74000],{},[29,73989,73990],{},"记住本地时间获取快速方式：new Date().toDateString()",[29,73992,73993],{},"尽量减少DOM操作，用好map+join的渲染方式",[29,73995,73996],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[29,73998,73999],{},"return可以实现函数的结束",[29,74001,74002],{},"禁止跳转是 preventDefault() 不要忘记",[51,74004,74006],{"className":52747,"code":74005,"language":52749,"meta":57,"style":57},"\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",[59,74007,74008,74018,74032,74036,74044,74058,74078,74090,74098,74104,74114,74124,74128,74132,74138,74148,74160,74164,74168,74175,74187,74201,74211,74215,74219,74226,74233,74240,74252,74264,74274,74286,74290,74294,74301,74308,74320,74332,74342,74354,74384,74388,74392,74399,74411,74423,74447,74457,74467,74471,74475,74483,74494,74506,74518,74530,74547,74559,74571,74575,74579,74586,74598,74610,74622,74633,74651,74664,74676,74700,74711,74715,74719,74727,74737,74741,74745,74751,74763,74774,74784,74788,74792,74798,74820,74824,74828,74834,74840,74852,74862,74874,74904,74917,74934,74938,74942,74953,74975,74985,74989,74993,75006,75016,75028,75040,75052,75064,75074,75084,75094,75105,75118,75122,75130,75138,75142,75150,75163,75183,75216,75249,75282,75308,75326,75344,75352,75378,75396,75414,75432,75450,75468,75476,75484,75502,75510,75539,75547,75555,75563,75576,75588,75600,75612,75624,75636,75649,75661,75669,75677,75685,75690,75695,75699,75703,75707,75711,75715,75719,75724,75729,75734,75739,75747,75755,75763,75768,75773,75778,75783,75788,75793,75798,75803,75808,75813,75818,75823,75828,75833,75837,75842,75847,75857,75866,75870,75875,75884,75900,75942,75982,76021,76086,76094,76098,76103,76121,76129,76134,76139,76169,76175,76180,76193,76205,76217,76229,76241,76253,76265,76269,76279,76283,76288,76293,76297,76306,76310,76315,76320,76339,76344,76364,76368,76373,76377,76382,76400,76418,76436,76455,76474,76493,76498,76504,76525,76531,76540,76546,76552,76558,76585,76598,76603,76613,76619,76625,76631,76637,76642,76648,76654,76660,76666,76699,76704,76709,76714,76719,76725,76731,76737,76748,76753,76759,76766,76780,76786,76810,76815,76820,76826,76832,76853,76859,76872,76878,76884,76890,76896,76901,76907,76913,76919,76937,76951,76957,76965,76971,76993,76998,77003,77008,77013,77018,77027,77036,77041],{"__ignoreMap":57},[79,74009,74010,74012,74014,74016],{"class":81,"line":82},[79,74011,53411],{"class":239},[79,74013,53414],{"class":395},[79,74015,53417],{"class":85},[79,74017,53420],{"class":239},[79,74019,74020,74022,74024,74026,74028,74030],{"class":81,"line":167},[79,74021,392],{"class":239},[79,74023,52749],{"class":395},[79,74025,53429],{"class":85},[79,74027,244],{"class":239},[79,74029,53434],{"class":89},[79,74031,53420],{"class":239},[79,74033,74034],{"class":81,"line":178},[79,74035,454],{"emptyLinePlaceholder":453},[79,74037,74038,74040,74042],{"class":81,"line":457},[79,74039,392],{"class":239},[79,74041,53447],{"class":395},[79,74043,53420],{"class":239},[79,74045,74046,74048,74050,74052,74054,74056],{"class":81,"line":462},[79,74047,54257],{"class":239},[79,74049,53457],{"class":395},[79,74051,53460],{"class":85},[79,74053,244],{"class":239},[79,74055,53465],{"class":89},[79,74057,53420],{"class":239},[79,74059,74060,74062,74064,74066,74068,74070,74072,74074,74076],{"class":81,"line":474},[79,74061,54257],{"class":239},[79,74063,53457],{"class":395},[79,74065,2238],{"class":85},[79,74067,244],{"class":239},[79,74069,53504],{"class":89},[79,74071,53484],{"class":85},[79,74073,244],{"class":239},[79,74075,53511],{"class":89},[79,74077,53420],{"class":239},[79,74079,74080,74082,74084,74086,74088],{"class":81,"line":480},[79,74081,54257],{"class":239},[79,74083,53520],{"class":395},[79,74085,53523],{"class":239},[79,74087,53520],{"class":395},[79,74089,53420],{"class":239},[79,74091,74092,74094,74096],{"class":81,"line":486},[79,74093,54257],{"class":239},[79,74095,2287],{"class":395},[79,74097,53420],{"class":239},[79,74099,74100,74102],{"class":81,"line":491},[79,74101,8598],{"class":395},[79,74103,17732],{"class":239},[79,74105,74106,74108,74110,74112],{"class":81,"line":497},[79,74107,56805],{"class":96},[79,74109,53550],{"class":239},[79,74111,1030],{"class":96},[79,74113,3531],{"class":239},[79,74115,74116,74118,74120,74122],{"class":81,"line":503},[79,74117,56816],{"class":96},[79,74119,53550],{"class":239},[79,74121,1030],{"class":96},[79,74123,3531],{"class":239},[79,74125,74126],{"class":81,"line":509},[79,74127,4402],{"class":239},[79,74129,74130],{"class":81,"line":514},[79,74131,454],{"emptyLinePlaceholder":453},[79,74133,74134,74136],{"class":81,"line":520},[79,74135,59389],{"class":395},[79,74137,17732],{"class":239},[79,74139,74140,74142,74144,74146],{"class":81,"line":526},[79,74141,59396],{"class":96},[79,74143,53550],{"class":239},[79,74145,53705],{"class":96},[79,74147,3531],{"class":239},[79,74149,74150,74152,74154,74156,74158],{"class":81,"line":532},[79,74151,64187],{"class":96},[79,74153,53550],{"class":239},[79,74155,3073],{"class":96},[79,74157,53605],{"class":243},[79,74159,3531],{"class":239},[79,74161,74162],{"class":81,"line":537},[79,74163,4402],{"class":239},[79,74165,74166],{"class":81,"line":543},[79,74167,454],{"emptyLinePlaceholder":453},[79,74169,74170,74173],{"class":81,"line":549},[79,74171,74172],{"class":85},"    .info",[79,74174,17732],{"class":239},[79,74176,74177,74179,74181,74183,74185],{"class":81,"line":555},[79,74178,56881],{"class":96},[79,74180,53550],{"class":239},[79,74182,53602],{"class":96},[79,74184,53605],{"class":243},[79,74186,3531],{"class":239},[79,74188,74189,74191,74193,74195,74197,74199],{"class":81,"line":561},[79,74190,56816],{"class":96},[79,74192,53550],{"class":239},[79,74194,2820],{"class":96},[79,74196,53605],{"class":243},[79,74198,53669],{"class":96},[79,74200,3531],{"class":239},[79,74202,74203,74205,74207,74209],{"class":81,"line":567},[79,74204,59396],{"class":96},[79,74206,53550],{"class":239},[79,74208,53705],{"class":96},[79,74210,3531],{"class":239},[79,74212,74213],{"class":81,"line":573},[79,74214,4402],{"class":239},[79,74216,74217],{"class":81,"line":579},[79,74218,454],{"emptyLinePlaceholder":453},[79,74220,74221,74224],{"class":81,"line":584},[79,74222,74223],{"class":85},"    .uname",[79,74225,33585],{"class":239},[79,74227,74228,74231],{"class":81,"line":590},[79,74229,74230],{"class":85},"    .age",[79,74232,33585],{"class":239},[79,74234,74235,74238],{"class":81,"line":596},[79,74236,74237],{"class":85},"    .salary",[79,74239,17732],{"class":239},[79,74241,74242,74244,74246,74248,74250],{"class":81,"line":602},[79,74243,56881],{"class":96},[79,74245,53550],{"class":239},[79,74247,2686],{"class":96},[79,74249,53605],{"class":243},[79,74251,3531],{"class":239},[79,74253,74254,74256,74258,74260,74262],{"class":81,"line":608},[79,74255,56895],{"class":96},[79,74257,53550],{"class":239},[79,74259,3073],{"class":96},[79,74261,53605],{"class":243},[79,74263,3531],{"class":239},[79,74265,74266,74268,74270,74272],{"class":81,"line":614},[79,74267,63890],{"class":96},[79,74269,53550],{"class":239},[79,74271,56847],{"class":96},[79,74273,3531],{"class":239},[79,74275,74276,74278,74280,74282,74284],{"class":81,"line":620},[79,74277,63860],{"class":96},[79,74279,53550],{"class":239},[79,74281,2948],{"class":96},[79,74283,53605],{"class":243},[79,74285,3531],{"class":239},[79,74287,74288],{"class":81,"line":625},[79,74289,4402],{"class":239},[79,74291,74292],{"class":81,"line":630},[79,74293,454],{"emptyLinePlaceholder":453},[79,74295,74296,74299],{"class":81,"line":648},[79,74297,74298],{"class":85},"    .gender",[79,74300,33585],{"class":239},[79,74302,74303,74306],{"class":81,"line":659},[79,74304,74305],{"class":85},"    .city",[79,74307,17732],{"class":239},[79,74309,74310,74312,74314,74316,74318],{"class":81,"line":676},[79,74311,56881],{"class":96},[79,74313,53550],{"class":239},[79,74315,2686],{"class":96},[79,74317,53605],{"class":243},[79,74319,3531],{"class":239},[79,74321,74322,74324,74326,74328,74330],{"class":81,"line":708},[79,74323,56895],{"class":96},[79,74325,53550],{"class":239},[79,74327,3198],{"class":96},[79,74329,53605],{"class":243},[79,74331,3531],{"class":239},[79,74333,74334,74336,74338,74340],{"class":81,"line":717},[79,74335,63890],{"class":96},[79,74337,53550],{"class":239},[79,74339,56847],{"class":96},[79,74341,3531],{"class":239},[79,74343,74344,74346,74348,74350,74352],{"class":81,"line":722},[79,74345,63860],{"class":96},[79,74347,53550],{"class":239},[79,74349,2948],{"class":96},[79,74351,53605],{"class":243},[79,74353,3531],{"class":239},[79,74355,74356,74358,74360,74362,74364,74366,74369,74371,74373,74375,74378,74380,74382],{"class":81,"line":727},[79,74357,64087],{"class":96},[79,74359,53550],{"class":239},[79,74361,1072],{"class":96},[79,74363,53605],{"class":243},[79,74365,53634],{"class":96},[79,74367,74368],{"class":96}," rgb",[79,74370,685],{"class":239},[79,74372,3947],{"class":96},[79,74374,1060],{"class":239},[79,74376,74377],{"class":96},"197",[79,74379,1060],{"class":239},[79,74381,74377],{"class":96},[79,74383,4925],{"class":239},[79,74385,74386],{"class":81,"line":738},[79,74387,4402],{"class":239},[79,74389,74390],{"class":81,"line":753},[79,74391,454],{"emptyLinePlaceholder":453},[79,74393,74394,74397],{"class":81,"line":768},[79,74395,74396],{"class":395},"    button",[79,74398,17732],{"class":239},[79,74400,74401,74403,74405,74407,74409],{"class":81,"line":776},[79,74402,56895],{"class":96},[79,74404,53550],{"class":239},[79,74406,3198],{"class":96},[79,74408,53605],{"class":243},[79,74410,3531],{"class":239},[79,74412,74413,74415,74417,74419,74421],{"class":81,"line":781},[79,74414,56881],{"class":96},[79,74416,53550],{"class":239},[79,74418,2858],{"class":96},[79,74420,53605],{"class":243},[79,74422,3531],{"class":239},[79,74424,74425,74427,74429,74432,74434,74436,74438,74441,74443,74445],{"class":81,"line":786},[79,74426,56994],{"class":96},[79,74428,53550],{"class":239},[79,74430,74431],{"class":96},"rgb",[79,74433,685],{"class":239},[79,74435,3339],{"class":96},[79,74437,1060],{"class":239},[79,74439,74440],{"class":96},"187",[79,74442,1060],{"class":239},[79,74444,2674],{"class":96},[79,74446,4925],{"class":239},[79,74448,74449,74451,74453,74455],{"class":81,"line":802},[79,74450,59526],{"class":96},[79,74452,53550],{"class":239},[79,74454,62952],{"class":96},[79,74456,3531],{"class":239},[79,74458,74459,74461,74463,74465],{"class":81,"line":815},[79,74460,64087],{"class":96},[79,74462,53550],{"class":239},[79,74464,1030],{"class":96},[79,74466,3531],{"class":239},[79,74468,74469],{"class":81,"line":828},[79,74470,4402],{"class":239},[79,74472,74473],{"class":81,"line":842},[79,74474,454],{"emptyLinePlaceholder":453},[79,74476,74477,74479,74481],{"class":81,"line":859},[79,74478,74396],{"class":395},[79,74480,53801],{"class":395},[79,74482,17732],{"class":239},[79,74484,74485,74487,74489,74492],{"class":81,"line":878},[79,74486,57119],{"class":96},[79,74488,53550],{"class":239},[79,74490,74491],{"class":96},"inline-block",[79,74493,3531],{"class":239},[79,74495,74496,74498,74500,74502,74504],{"class":81,"line":883},[79,74497,56881],{"class":96},[79,74499,53550],{"class":239},[79,74501,2820],{"class":96},[79,74503,53605],{"class":243},[79,74505,3531],{"class":239},[79,74507,74508,74510,74512,74514,74516],{"class":81,"line":888},[79,74509,56895],{"class":96},[79,74511,53550],{"class":239},[79,74513,2820],{"class":96},[79,74515,53605],{"class":243},[79,74517,3531],{"class":239},[79,74519,74520,74522,74524,74526,74528],{"class":81,"line":904},[79,74521,59469],{"class":96},[79,74523,53550],{"class":239},[79,74525,2846],{"class":96},[79,74527,53605],{"class":243},[79,74529,3531],{"class":239},[79,74531,74532,74534,74536,74538,74540,74542,74545],{"class":81,"line":919},[79,74533,64087],{"class":96},[79,74535,53550],{"class":239},[79,74537,1072],{"class":96},[79,74539,53605],{"class":243},[79,74541,53634],{"class":96},[79,74543,74544],{"class":96}," #fff",[79,74546,3531],{"class":239},[79,74548,74549,74551,74553,74555,74557],{"class":81,"line":930},[79,74550,57244],{"class":96},[79,74552,53550],{"class":239},[79,74554,2694],{"class":96},[79,74556,53605],{"class":243},[79,74558,3531],{"class":239},[79,74560,74561,74563,74565,74567,74569],{"class":81,"line":941},[79,74562,63860],{"class":96},[79,74564,53550],{"class":239},[79,74566,1072],{"class":96},[79,74568,53605],{"class":243},[79,74570,3531],{"class":239},[79,74572,74573],{"class":81,"line":946},[79,74574,4402],{"class":239},[79,74576,74577],{"class":81,"line":969},[79,74578,454],{"emptyLinePlaceholder":453},[79,74580,74581,74584],{"class":81,"line":975},[79,74582,74583],{"class":85},"    .total",[79,74585,17732],{"class":239},[79,74587,74588,74590,74592,74594,74596],{"class":81,"line":989},[79,74589,56881],{"class":96},[79,74591,53550],{"class":239},[79,74593,63739],{"class":96},[79,74595,53605],{"class":243},[79,74597,3531],{"class":239},[79,74599,74600,74602,74604,74606,74608],{"class":81,"line":1003},[79,74601,56895],{"class":96},[79,74603,53550],{"class":239},[79,74605,2775],{"class":96},[79,74607,53605],{"class":243},[79,74609,3531],{"class":239},[79,74611,74612,74614,74616,74618,74620],{"class":81,"line":1019},[79,74613,59469],{"class":96},[79,74615,53550],{"class":239},[79,74617,2775],{"class":96},[79,74619,53605],{"class":243},[79,74621,3531],{"class":239},[79,74623,74624,74626,74628,74631],{"class":81,"line":1024},[79,74625,59396],{"class":96},[79,74627,53550],{"class":239},[79,74629,74630],{"class":96},"right",[79,74632,3531],{"class":239},[79,74634,74635,74637,74639,74641,74643,74645,74647,74649],{"class":81,"line":1067},[79,74636,56816],{"class":96},[79,74638,53550],{"class":239},[79,74640,2775],{"class":96},[79,74642,53605],{"class":243},[79,74644,53669],{"class":96},[79,74646,4253],{"class":96},[79,74648,53605],{"class":243},[79,74650,3531],{"class":239},[79,74652,74653,74656,74658,74660,74662],{"class":81,"line":1101},[79,74654,74655],{"class":96},"      padding-right",[79,74657,53550],{"class":239},[79,74659,2820],{"class":96},[79,74661,53605],{"class":243},[79,74663,3531],{"class":239},[79,74665,74666,74668,74670,74672,74674],{"class":81,"line":1106},[79,74667,57032],{"class":96},[79,74669,53550],{"class":239},[79,74671,2897],{"class":96},[79,74673,53605],{"class":243},[79,74675,3531],{"class":239},[79,74677,74678,74680,74682,74684,74686,74689,74691,74694,74696,74698],{"class":81,"line":1112},[79,74679,56994],{"class":96},[79,74681,53550],{"class":239},[79,74683,74431],{"class":96},[79,74685,685],{"class":239},[79,74687,74688],{"class":96},"237",[79,74690,1060],{"class":239},[79,74692,74693],{"class":96},"235",[79,74695,1060],{"class":239},[79,74697,74693],{"class":96},[79,74699,4925],{"class":239},[79,74701,74702,74705,74707,74709],{"class":81,"line":1124},[79,74703,74704],{"class":96},"      box-sizing",[79,74706,53550],{"class":239},[79,74708,62615],{"class":96},[79,74710,3531],{"class":239},[79,74712,74713],{"class":81,"line":1129},[79,74714,4402],{"class":239},[79,74716,74717],{"class":81,"line":1150},[79,74718,454],{"emptyLinePlaceholder":453},[79,74720,74721,74723,74725],{"class":81,"line":1161},[79,74722,74583],{"class":85},[79,74724,53801],{"class":395},[79,74726,17732],{"class":239},[79,74728,74729,74731,74733,74735],{"class":81,"line":1175},[79,74730,59526],{"class":96},[79,74732,53550],{"class":239},[79,74734,59531],{"class":96},[79,74736,3531],{"class":239},[79,74738,74739],{"class":81,"line":1194},[79,74740,4402],{"class":239},[79,74742,74743],{"class":81,"line":1211},[79,74744,454],{"emptyLinePlaceholder":453},[79,74746,74747,74749],{"class":81,"line":1228},[79,74748,67133],{"class":395},[79,74750,17732],{"class":239},[79,74752,74753,74755,74757,74759,74761],{"class":81,"line":1246},[79,74754,56881],{"class":96},[79,74756,53550],{"class":239},[79,74758,63739],{"class":96},[79,74760,53605],{"class":243},[79,74762,3531],{"class":239},[79,74764,74765,74767,74769,74772],{"class":81,"line":1251},[79,74766,56816],{"class":96},[79,74768,53550],{"class":239},[79,74770,74771],{"class":96},"auto",[79,74773,3531],{"class":239},[79,74775,74776,74778,74780,74782],{"class":81,"line":1274},[79,74777,67140],{"class":96},[79,74779,53550],{"class":239},[79,74781,67145],{"class":96},[79,74783,3531],{"class":239},[79,74785,74786],{"class":81,"line":1296},[79,74787,4402],{"class":239},[79,74789,74790],{"class":81,"line":1316},[79,74791,454],{"emptyLinePlaceholder":453},[79,74793,74794,74796],{"class":81,"line":1321},[79,74795,67224],{"class":395},[79,74797,17732],{"class":239},[79,74799,74800,74802,74804,74806,74808,74810,74812,74814,74816,74818],{"class":81,"line":1326},[79,74801,56994],{"class":96},[79,74803,53550],{"class":239},[79,74805,74431],{"class":96},[79,74807,685],{"class":239},[79,74809,74688],{"class":96},[79,74811,1060],{"class":239},[79,74813,74693],{"class":96},[79,74815,1060],{"class":239},[79,74817,74693],{"class":96},[79,74819,4925],{"class":239},[79,74821,74822],{"class":81,"line":1342},[79,74823,4402],{"class":239},[79,74825,74826],{"class":81,"line":18985},[79,74827,454],{"emptyLinePlaceholder":453},[79,74829,74830,74832],{"class":81,"line":18990},[79,74831,67224],{"class":395},[79,74833,33585],{"class":239},[79,74835,74836,74838],{"class":81,"line":18995},[79,74837,67290],{"class":395},[79,74839,17732],{"class":239},[79,74841,74842,74844,74846,74848,74850],{"class":81,"line":19009},[79,74843,56895],{"class":96},[79,74845,53550],{"class":239},[79,74847,2648],{"class":96},[79,74849,53605],{"class":243},[79,74851,3531],{"class":239},[79,74853,74854,74856,74858,74860],{"class":81,"line":19021},[79,74855,59396],{"class":96},[79,74857,53550],{"class":239},[79,74859,25876],{"class":96},[79,74861,3531],{"class":239},[79,74863,74864,74866,74868,74870,74872],{"class":81,"line":19026},[79,74865,57032],{"class":96},[79,74867,53550],{"class":239},[79,74869,2922],{"class":96},[79,74871,53605],{"class":243},[79,74873,3531],{"class":239},[79,74875,74876,74878,74880,74882,74884,74886,74888,74890,74893,74895,74898,74900,74902],{"class":81,"line":19039},[79,74877,64087],{"class":96},[79,74879,53550],{"class":239},[79,74881,1072],{"class":96},[79,74883,53605],{"class":243},[79,74885,53634],{"class":96},[79,74887,74368],{"class":96},[79,74889,685],{"class":239},[79,74891,74892],{"class":96},"228",[79,74894,1060],{"class":239},[79,74896,74897],{"class":96},"225",[79,74899,1060],{"class":239},[79,74901,74897],{"class":96},[79,74903,4925],{"class":239},[79,74905,74906,74909,74911,74913,74915],{"class":81,"line":19044},[79,74907,74908],{"class":96},"      padding-left",[79,74910,53550],{"class":239},[79,74912,2694],{"class":96},[79,74914,53605],{"class":243},[79,74916,3531],{"class":239},[79,74918,74919,74921,74923,74925,74928,74930,74932],{"class":81,"line":19049},[79,74920,63970],{"class":96},[79,74922,53550],{"class":239},[79,74924,30253],{"class":96},[79,74926,74927],{"class":96}," linear",[79,74929,63977],{"class":96},[79,74931,3068],{"class":243},[79,74933,3531],{"class":239},[79,74935,74936],{"class":81,"line":19054},[79,74937,4402],{"class":239},[79,74939,74940],{"class":81,"line":19067},[79,74941,454],{"emptyLinePlaceholder":453},[79,74943,74944,74947,74949,74951],{"class":81,"line":19072},[79,74945,74946],{"class":395},"    tbody",[79,74948,72252],{"class":395},[79,74950,63050],{"class":85},[79,74952,17732],{"class":239},[79,74954,74955,74957,74959,74961,74963,74965,74967,74969,74971,74973],{"class":81,"line":34748},[79,74956,56994],{"class":96},[79,74958,53550],{"class":239},[79,74960,74431],{"class":96},[79,74962,685],{"class":239},[79,74964,74688],{"class":96},[79,74966,1060],{"class":239},[79,74968,74693],{"class":96},[79,74970,1060],{"class":239},[79,74972,74693],{"class":96},[79,74974,4925],{"class":239},[79,74976,74977,74979,74981,74983],{"class":81,"line":34754},[79,74978,64135],{"class":96},[79,74980,53550],{"class":239},[79,74982,64140],{"class":96},[79,74984,3531],{"class":239},[79,74986,74987],{"class":81,"line":34760},[79,74988,4402],{"class":239},[79,74990,74991],{"class":81,"line":34766},[79,74992,454],{"emptyLinePlaceholder":453},[79,74994,74995,74997,74999,75002,75004],{"class":81,"line":34772},[79,74996,74946],{"class":395},[79,74998,72252],{"class":395},[79,75000,75001],{"class":395}," td",[79,75003,3635],{"class":395},[79,75005,17732],{"class":239},[79,75007,75008,75010,75012,75014],{"class":81,"line":34783},[79,75009,57119],{"class":96},[79,75011,53550],{"class":239},[79,75013,62979],{"class":96},[79,75015,3531],{"class":239},[79,75017,75018,75020,75022,75024,75026],{"class":81,"line":34789},[79,75019,56881],{"class":96},[79,75021,53550],{"class":239},[79,75023,3279],{"class":96},[79,75025,53605],{"class":243},[79,75027,3531],{"class":239},[79,75029,75030,75032,75034,75036,75038],{"class":81,"line":34809},[79,75031,56895],{"class":96},[79,75033,53550],{"class":239},[79,75035,3198],{"class":96},[79,75037,53605],{"class":243},[79,75039,3531],{"class":239},[79,75041,75042,75044,75046,75048,75050],{"class":81,"line":34815},[79,75043,59469],{"class":96},[79,75045,53550],{"class":239},[79,75047,3198],{"class":96},[79,75049,53605],{"class":243},[79,75051,3531],{"class":239},[79,75053,75054,75056,75058,75060,75062],{"class":81,"line":34826},[79,75055,64187],{"class":96},[79,75057,53550],{"class":239},[79,75059,1049],{"class":96},[79,75061,53605],{"class":243},[79,75063,3531],{"class":239},[79,75065,75066,75068,75070,75072],{"class":81,"line":34832},[79,75067,59526],{"class":96},[79,75069,53550],{"class":239},[79,75071,62952],{"class":96},[79,75073,3531],{"class":239},[79,75075,75076,75078,75080,75082],{"class":81,"line":34838},[79,75077,59396],{"class":96},[79,75079,53550],{"class":239},[79,75081,53705],{"class":96},[79,75083,3531],{"class":239},[79,75085,75086,75088,75090,75092],{"class":81,"line":34844},[79,75087,66080],{"class":96},[79,75089,53550],{"class":239},[79,75091,56847],{"class":96},[79,75093,3531],{"class":239},[79,75095,75096,75098,75100,75103],{"class":81,"line":34850},[79,75097,56994],{"class":96},[79,75099,53550],{"class":239},[79,75101,75102],{"class":96},"orange",[79,75104,3531],{"class":239},[79,75106,75107,75109,75111,75114,75116],{"class":81,"line":34856},[79,75108,57244],{"class":96},[79,75110,53550],{"class":239},[79,75112,75113],{"class":96},"12.5",[79,75115,53605],{"class":243},[79,75117,3531],{"class":239},[79,75119,75120],{"class":81,"line":34862},[79,75121,4402],{"class":239},[79,75123,75124,75126,75128],{"class":81,"line":34868},[79,75125,54529],{"class":239},[79,75127,2287],{"class":395},[79,75129,53420],{"class":239},[79,75131,75132,75134,75136],{"class":81,"line":34888},[79,75133,53898],{"class":239},[79,75135,53447],{"class":395},[79,75137,53420],{"class":239},[79,75139,75140],{"class":81,"line":34894},[79,75141,454],{"emptyLinePlaceholder":453},[79,75143,75144,75146,75148],{"class":81,"line":34910},[79,75145,392],{"class":239},[79,75147,53913],{"class":395},[79,75149,53420],{"class":239},[79,75151,75152,75154,75156,75159,75161],{"class":81,"line":34916},[79,75153,54257],{"class":239},[79,75155,14],{"class":395},[79,75157,75158],{"class":239},">学生就业统计表\u003C\u002F",[79,75160,14],{"class":395},[79,75162,53420],{"class":239},[79,75164,75165,75167,75169,75171,75173,75175,75177,75179,75181],{"class":81,"line":34930},[79,75166,54257],{"class":239},[79,75168,68734],{"class":395},[79,75170,55596],{"class":85},[79,75172,244],{"class":239},[79,75174,64774],{"class":89},[79,75176,71179],{"class":85},[79,75178,244],{"class":239},[79,75180,33894],{"class":89},[79,75182,53420],{"class":239},[79,75184,75185,75187,75189,75191,75193,75195,75197,75199,75201,75203,75205,75208,75210,75212,75214],{"class":81,"line":34936},[79,75186,53454],{"class":239},[79,75188,55931],{"class":395},[79,75190,55934],{"class":85},[79,75192,244],{"class":239},[79,75194,64809],{"class":89},[79,75196,2238],{"class":85},[79,75198,244],{"class":239},[79,75200,71205],{"class":89},[79,75202,63130],{"class":85},[79,75204,244],{"class":239},[79,75206,75207],{"class":89},"\"姓名\"",[79,75209,55596],{"class":85},[79,75211,244],{"class":239},[79,75213,71205],{"class":89},[79,75215,53420],{"class":239},[79,75217,75218,75220,75222,75224,75226,75228,75230,75232,75234,75236,75238,75241,75243,75245,75247],{"class":81,"line":34951},[79,75219,53454],{"class":239},[79,75221,55931],{"class":395},[79,75223,55934],{"class":85},[79,75225,244],{"class":239},[79,75227,64809],{"class":89},[79,75229,2238],{"class":85},[79,75231,244],{"class":239},[79,75233,71233],{"class":89},[79,75235,63130],{"class":85},[79,75237,244],{"class":239},[79,75239,75240],{"class":89},"\"年龄\"",[79,75242,55596],{"class":85},[79,75244,244],{"class":239},[79,75246,71233],{"class":89},[79,75248,53420],{"class":239},[79,75250,75251,75253,75255,75257,75259,75261,75263,75265,75267,75269,75271,75274,75276,75278,75280],{"class":81,"line":34957},[79,75252,53454],{"class":239},[79,75254,55931],{"class":395},[79,75256,55934],{"class":85},[79,75258,244],{"class":239},[79,75260,64809],{"class":89},[79,75262,2238],{"class":85},[79,75264,244],{"class":239},[79,75266,71334],{"class":89},[79,75268,63130],{"class":85},[79,75270,244],{"class":239},[79,75272,75273],{"class":89},"\"薪资\"",[79,75275,55596],{"class":85},[79,75277,244],{"class":239},[79,75279,71334],{"class":89},[79,75281,53420],{"class":239},[79,75283,75284,75286,75288,75290,75292,75294,75296,75298,75300,75302,75304,75306],{"class":81,"line":34966},[79,75285,53454],{"class":239},[79,75287,71253],{"class":395},[79,75289,2238],{"class":85},[79,75291,244],{"class":239},[79,75293,71260],{"class":89},[79,75295,17119],{"class":85},[79,75297,244],{"class":239},[79,75299,9846],{"class":89},[79,75301,55596],{"class":85},[79,75303,244],{"class":239},[79,75305,71260],{"class":89},[79,75307,53420],{"class":239},[79,75309,75310,75312,75314,75316,75318,75320,75322,75324],{"class":81,"line":34972},[79,75311,57344],{"class":239},[79,75313,396],{"class":395},[79,75315,68760],{"class":85},[79,75317,244],{"class":239},[79,75319,12125],{"class":89},[79,75321,71283],{"class":239},[79,75323,396],{"class":395},[79,75325,53420],{"class":239},[79,75327,75328,75330,75332,75334,75336,75338,75340,75342],{"class":81,"line":34981},[79,75329,57344],{"class":239},[79,75331,396],{"class":395},[79,75333,68760],{"class":85},[79,75335,244],{"class":239},[79,75337,12194],{"class":89},[79,75339,71302],{"class":239},[79,75341,396],{"class":395},[79,75343,53420],{"class":239},[79,75345,75346,75348,75350],{"class":81,"line":34987},[79,75347,53889],{"class":239},[79,75349,71253],{"class":395},[79,75351,53420],{"class":239},[79,75353,75354,75356,75358,75360,75362,75364,75366,75368,75370,75372,75374,75376],{"class":81,"line":34993},[79,75355,53454],{"class":239},[79,75357,71253],{"class":395},[79,75359,2238],{"class":85},[79,75361,244],{"class":239},[79,75363,71356],{"class":89},[79,75365,17119],{"class":85},[79,75367,244],{"class":239},[79,75369,9846],{"class":89},[79,75371,55596],{"class":85},[79,75373,244],{"class":239},[79,75375,71356],{"class":89},[79,75377,53420],{"class":239},[79,75379,75380,75382,75384,75386,75388,75390,75392,75394],{"class":81,"line":35002},[79,75381,57344],{"class":239},[79,75383,396],{"class":395},[79,75385,68760],{"class":85},[79,75387,244],{"class":239},[79,75389,71377],{"class":89},[79,75391,71380],{"class":239},[79,75393,396],{"class":395},[79,75395,53420],{"class":239},[79,75397,75398,75400,75402,75404,75406,75408,75410,75412],{"class":81,"line":35008},[79,75399,57344],{"class":239},[79,75401,396],{"class":395},[79,75403,68760],{"class":85},[79,75405,244],{"class":239},[79,75407,71397],{"class":89},[79,75409,71400],{"class":239},[79,75411,396],{"class":395},[79,75413,53420],{"class":239},[79,75415,75416,75418,75420,75422,75424,75426,75428,75430],{"class":81,"line":35019},[79,75417,57344],{"class":239},[79,75419,396],{"class":395},[79,75421,68760],{"class":85},[79,75423,244],{"class":239},[79,75425,71417],{"class":89},[79,75427,71420],{"class":239},[79,75429,396],{"class":395},[79,75431,53420],{"class":239},[79,75433,75434,75436,75438,75440,75442,75444,75446,75448],{"class":81,"line":35025},[79,75435,57344],{"class":239},[79,75437,396],{"class":395},[79,75439,68760],{"class":85},[79,75441,244],{"class":239},[79,75443,71437],{"class":89},[79,75445,71440],{"class":239},[79,75447,396],{"class":395},[79,75449,53420],{"class":239},[79,75451,75452,75454,75456,75458,75460,75462,75464,75466],{"class":81,"line":35044},[79,75453,57344],{"class":239},[79,75455,396],{"class":395},[79,75457,68760],{"class":85},[79,75459,244],{"class":239},[79,75461,71457],{"class":89},[79,75463,71460],{"class":239},[79,75465,396],{"class":395},[79,75467,53420],{"class":239},[79,75469,75470,75472,75474],{"class":81,"line":35050},[79,75471,53889],{"class":239},[79,75473,71253],{"class":395},[79,75475,53420],{"class":239},[79,75477,75478,75480,75482],{"class":81,"line":35061},[79,75479,53454],{"class":239},[79,75481,55997],{"class":395},[79,75483,53420],{"class":239},[79,75485,75486,75488,75490,75493,75495,75498,75500],{"class":81,"line":35067},[79,75487,57344],{"class":239},[79,75489,79],{"class":395},[79,75491,75492],{"class":239},">+\u003C\u002F",[79,75494,79],{"class":395},[79,75496,75497],{"class":239},">添加\u003C\u002F",[79,75499,55997],{"class":395},[79,75501,53420],{"class":239},[79,75503,75504,75506,75508],{"class":81,"line":35087},[79,75505,54529],{"class":239},[79,75507,68734],{"class":395},[79,75509,53420],{"class":239},[79,75511,75512,75514,75516,75518,75520,75522,75525,75527,75530,75532,75535,75537],{"class":81,"line":35103},[79,75513,54257],{"class":239},[79,75515,53724],{"class":395},[79,75517,55596],{"class":85},[79,75519,244],{"class":239},[79,75521,64690],{"class":89},[79,75523,75524],{"class":239},">共有数据 \u003C",[79,75526,79],{"class":395},[79,75528,75529],{"class":239},">0\u003C\u002F",[79,75531,79],{"class":395},[79,75533,75534],{"class":239},"> 条\u003C\u002F",[79,75536,53724],{"class":395},[79,75538,53420],{"class":239},[79,75540,75541,75543,75545],{"class":81,"line":35109},[79,75542,54257],{"class":239},[79,75544,2516],{"class":395},[79,75546,53420],{"class":239},[79,75548,75549,75551,75553],{"class":81,"line":35123},[79,75550,53454],{"class":239},[79,75552,2519],{"class":395},[79,75554,53420],{"class":239},[79,75556,75557,75559,75561],{"class":81,"line":35129},[79,75558,57344],{"class":239},[79,75560,2522],{"class":395},[79,75562,53420],{"class":239},[79,75564,75565,75567,75569,75572,75574],{"class":81,"line":35135},[79,75566,57412],{"class":239},[79,75568,2525],{"class":395},[79,75570,75571],{"class":239},">ID\u003C\u002F",[79,75573,2525],{"class":395},[79,75575,53420],{"class":239},[79,75577,75578,75580,75582,75584,75586],{"class":81,"line":35146},[79,75579,57412],{"class":239},[79,75581,2525],{"class":395},[79,75583,71563],{"class":239},[79,75585,2525],{"class":395},[79,75587,53420],{"class":239},[79,75589,75590,75592,75594,75596,75598],{"class":81,"line":35152},[79,75591,57412],{"class":239},[79,75593,2525],{"class":395},[79,75595,71576],{"class":239},[79,75597,2525],{"class":395},[79,75599,53420],{"class":239},[79,75601,75602,75604,75606,75608,75610],{"class":81,"line":35158},[79,75603,57412],{"class":239},[79,75605,2525],{"class":395},[79,75607,71589],{"class":239},[79,75609,2525],{"class":395},[79,75611,53420],{"class":239},[79,75613,75614,75616,75618,75620,75622],{"class":81,"line":35168},[79,75615,57412],{"class":239},[79,75617,2525],{"class":395},[79,75619,71602],{"class":239},[79,75621,2525],{"class":395},[79,75623,53420],{"class":239},[79,75625,75626,75628,75630,75632,75634],{"class":81,"line":35174},[79,75627,57412],{"class":239},[79,75629,2525],{"class":395},[79,75631,71615],{"class":239},[79,75633,2525],{"class":395},[79,75635,53420],{"class":239},[79,75637,75638,75640,75642,75645,75647],{"class":81,"line":35185},[79,75639,57412],{"class":239},[79,75641,2525],{"class":395},[79,75643,75644],{"class":239},">录入时间\u003C\u002F",[79,75646,2525],{"class":395},[79,75648,53420],{"class":239},[79,75650,75651,75653,75655,75657,75659],{"class":81,"line":35191},[79,75652,57412],{"class":239},[79,75654,2525],{"class":395},[79,75656,71628],{"class":239},[79,75658,2525],{"class":395},[79,75660,53420],{"class":239},[79,75662,75663,75665,75667],{"class":81,"line":35201},[79,75664,57517],{"class":239},[79,75666,2522],{"class":395},[79,75668,53420],{"class":239},[79,75670,75671,75673,75675],{"class":81,"line":35206},[79,75672,53889],{"class":239},[79,75674,2519],{"class":395},[79,75676,53420],{"class":239},[79,75678,75679,75681,75683],{"class":81,"line":35212},[79,75680,53454],{"class":239},[79,75682,2563],{"class":395},[79,75684,53420],{"class":239},[79,75686,75687],{"class":81,"line":35261},[79,75688,75689],{"class":2440},"      \u003C!-- \u003Ctr>\n",[79,75691,75692],{"class":81,"line":35308},[79,75693,75694],{"class":2440},"        \u003Ctd>1\u003C\u002Ftd>\n",[79,75696,75697],{"class":81,"line":35313},[79,75698,75694],{"class":2440},[79,75700,75701],{"class":81,"line":35319},[79,75702,75694],{"class":2440},[79,75704,75705],{"class":81,"line":35338},[79,75706,75694],{"class":2440},[79,75708,75709],{"class":81,"line":35344},[79,75710,75694],{"class":2440},[79,75712,75713],{"class":81,"line":35364},[79,75714,75694],{"class":2440},[79,75716,75717],{"class":81,"line":35370},[79,75718,75694],{"class":2440},[79,75720,75721],{"class":81,"line":35376},[79,75722,75723],{"class":2440},"        \u003Ctd>\n",[79,75725,75726],{"class":81,"line":35386},[79,75727,75728],{"class":2440},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[79,75730,75731],{"class":81,"line":35391},[79,75732,75733],{"class":2440},"        \u003C\u002Ftd>\n",[79,75735,75736],{"class":81,"line":35397},[79,75737,75738],{"class":2440},"      \u003C\u002Ftr> -->\n",[79,75740,75741,75743,75745],{"class":81,"line":35413},[79,75742,53889],{"class":239},[79,75744,2563],{"class":395},[79,75746,53420],{"class":239},[79,75748,75749,75751,75753],{"class":81,"line":35458},[79,75750,54529],{"class":239},[79,75752,2516],{"class":395},[79,75754,53420],{"class":239},[79,75756,75757,75759,75761],{"class":81,"line":35464},[79,75758,54257],{"class":239},[79,75760,53926],{"class":395},[79,75762,53420],{"class":239},[79,75764,75765],{"class":81,"line":35470},[79,75766,75767],{"class":2440},"    \u002F\u002F const initData = [{\n",[79,75769,75770],{"class":81,"line":35476},[79,75771,75772],{"class":2440},"    \u002F\u002F   unameId: 1,\n",[79,75774,75775],{"class":81,"line":35487},[79,75776,75777],{"class":2440},"    \u002F\u002F   uname: '华晨宇',\n",[79,75779,75780],{"class":81,"line":35493},[79,75781,75782],{"class":2440},"    \u002F\u002F   age: 22,\n",[79,75784,75785],{"class":81,"line":35499},[79,75786,75787],{"class":2440},"    \u002F\u002F   salary: 12000,\n",[79,75789,75790],{"class":81,"line":35505},[79,75791,75792],{"class":2440},"    \u002F\u002F   gender: '男',\n",[79,75794,75795],{"class":81,"line":35523},[79,75796,75797],{"class":2440},"    \u002F\u002F   city: '北京',\n",[79,75799,75800],{"class":81,"line":35537},[79,75801,75802],{"class":2440},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[79,75804,75805],{"class":81,"line":35546},[79,75806,75807],{"class":2440},"    \u002F\u002F }]\n",[79,75809,75810],{"class":81,"line":35555},[79,75811,75812],{"class":2440},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[79,75814,75815],{"class":81,"line":35564},[79,75816,75817],{"class":2440},"    \u002F\u002F 1.渲染业务\n",[79,75819,75820],{"class":81,"line":35573},[79,75821,75822],{"class":2440},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[79,75824,75825],{"class":81,"line":35579},[79,75826,75827],{"class":2440},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[79,75829,75830],{"class":81,"line":35585},[79,75831,75832],{"class":2440},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[79,75834,75835],{"class":81,"line":35593},[79,75836,454],{"emptyLinePlaceholder":453},[79,75838,75839],{"class":81,"line":35598},[79,75840,75841],{"class":2440},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[79,75843,75844],{"class":81,"line":35604},[79,75845,75846],{"class":2440},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[79,75848,75849,75851,75853,75855],{"class":81,"line":35615},[79,75850,13385],{"class":243},[79,75852,59805],{"class":96},[79,75854,468],{"class":243},[79,75856,53951],{"class":239},[79,75858,75859,75862,75864],{"class":81,"line":35621},[79,75860,75861],{"class":239},"    console.",[79,75863,60357],{"class":85},[79,75865,54524],{"class":239},[79,75867,75868],{"class":81,"line":35641},[79,75869,454],{"emptyLinePlaceholder":453},[79,75871,75872],{"class":81,"line":35647},[79,75873,75874],{"class":2440},"    \u002F\u002F 时间函数\n",[79,75876,75877,75879,75882],{"class":81,"line":35653},[79,75878,72192],{"class":243},[79,75880,75881],{"class":85}," getTime",[79,75883,13017],{"class":239},[79,75885,75886,75888,75891,75893,75895,75898],{"class":81,"line":35659},[79,75887,60338],{"class":243},[79,75889,75890],{"class":96}," date",[79,75892,468],{"class":243},[79,75894,13742],{"class":243},[79,75896,75897],{"class":85}," Date",[79,75899,4191],{"class":239},[79,75901,75902,75904,75906,75908,75911,75914,75916,75918,75920,75923,75926,75928,75930,75932,75934,75936,75938,75940],{"class":81,"line":35676},[79,75903,60338],{"class":243},[79,75905,18251],{"class":96},[79,75907,468],{"class":243},[79,75909,75910],{"class":239}," date.",[79,75912,75913],{"class":85},"getHours",[79,75915,15213],{"class":239},[79,75917,392],{"class":243},[79,75919,4253],{"class":96},[79,75921,75922],{"class":243}," ?",[79,75924,75925],{"class":89}," '0'",[79,75927,47680],{"class":243},[79,75929,75910],{"class":239},[79,75931,75913],{"class":85},[79,75933,15213],{"class":239},[79,75935,3232],{"class":243},[79,75937,75910],{"class":239},[79,75939,75913],{"class":85},[79,75941,4191],{"class":239},[79,75943,75944,75946,75949,75951,75953,75956,75958,75960,75962,75964,75966,75968,75970,75972,75974,75976,75978,75980],{"class":81,"line":35682},[79,75945,60338],{"class":243},[79,75947,75948],{"class":96}," m",[79,75950,468],{"class":243},[79,75952,75910],{"class":239},[79,75954,75955],{"class":85},"getMinutes",[79,75957,15213],{"class":239},[79,75959,392],{"class":243},[79,75961,4253],{"class":96},[79,75963,75922],{"class":243},[79,75965,75925],{"class":89},[79,75967,47680],{"class":243},[79,75969,75910],{"class":239},[79,75971,75955],{"class":85},[79,75973,15213],{"class":239},[79,75975,3232],{"class":243},[79,75977,75910],{"class":239},[79,75979,75955],{"class":85},[79,75981,4191],{"class":239},[79,75983,75984,75986,75988,75990,75992,75995,75997,75999,76001,76003,76005,76007,76009,76011,76013,76015,76017,76019],{"class":81,"line":35688},[79,75985,60338],{"class":243},[79,75987,10612],{"class":96},[79,75989,468],{"class":243},[79,75991,75910],{"class":239},[79,75993,75994],{"class":85},"getSeconds",[79,75996,15213],{"class":239},[79,75998,392],{"class":243},[79,76000,4253],{"class":96},[79,76002,75922],{"class":243},[79,76004,75925],{"class":89},[79,76006,47680],{"class":243},[79,76008,75910],{"class":239},[79,76010,75994],{"class":85},[79,76012,15213],{"class":239},[79,76014,3232],{"class":243},[79,76016,75910],{"class":239},[79,76018,75994],{"class":85},[79,76020,4191],{"class":239},[79,76022,76023,76025,76028,76030,76032,76035,76037,76040,76042,76045,76047,76049,76052,76054,76056,76058,76060,76062,76064,76067,76069,76072,76074,76077,76079,76081,76083],{"class":81,"line":35694},[79,76024,60338],{"class":243},[79,76026,76027],{"class":96}," str",[79,76029,468],{"class":243},[79,76031,65013],{"class":89},[79,76033,76034],{"class":239},"date",[79,76036,2931],{"class":89},[79,76038,76039],{"class":85},"getFullYear",[79,76041,4641],{"class":89},[79,76043,76044],{"class":89},"}\u002F${",[79,76046,76034],{"class":239},[79,76048,2931],{"class":89},[79,76050,76051],{"class":85},"getMonth",[79,76053,15213],{"class":89},[79,76055,2855],{"class":243},[79,76057,27253],{"class":96},[79,76059,76044],{"class":89},[79,76061,76034],{"class":239},[79,76063,2931],{"class":89},[79,76065,76066],{"class":85},"getDate",[79,76068,4641],{"class":89},[79,76070,76071],{"class":89},"} ${",[79,76073,2789],{"class":239},[79,76075,76076],{"class":89},"}:${",[79,76078,2917],{"class":239},[79,76080,76076],{"class":89},[79,76082,3068],{"class":239},[79,76084,76085],{"class":89},"}`\n",[79,76087,76088,76091],{"class":81,"line":35700},[79,76089,76090],{"class":243},"      return",[79,76092,76093],{"class":239}," str\n",[79,76095,76096],{"class":81,"line":35706},[79,76097,4402],{"class":239},[79,76099,76100],{"class":81,"line":35733},[79,76101,76102],{"class":2440},"    \u002F\u002F 渲染函数\n",[79,76104,76105,76107,76109,76111,76113,76115,76117,76119],{"class":81,"line":35757},[79,76106,13385],{"class":243},[79,76108,71855],{"class":96},[79,76110,468],{"class":243},[79,76112,56506],{"class":239},[79,76114,56509],{"class":85},[79,76116,685],{"class":239},[79,76118,71866],{"class":89},[79,76120,253],{"class":239},[79,76122,76123,76125,76127],{"class":81,"line":35763},[79,76124,72192],{"class":243},[79,76126,72195],{"class":85},[79,76128,13017],{"class":239},[79,76130,76131],{"class":81,"line":35769},[79,76132,76133],{"class":2440},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[79,76135,76136],{"class":81,"line":35775},[79,76137,76138],{"class":2440},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[79,76140,76141,76143,76146,76148,76150,76153,76155,76157,76159,76162,76164,76167],{"class":81,"line":35786},[79,76142,60338],{"class":243},[79,76144,76145],{"class":96}," trArr",[79,76147,468],{"class":243},[79,76149,54078],{"class":239},[79,76151,76152],{"class":85},"map",[79,76154,685],{"class":239},[79,76156,56559],{"class":243},[79,76158,3887],{"class":239},[79,76160,76161],{"class":7412},"ele",[79,76163,1060],{"class":239},[79,76165,76166],{"class":7412},"index",[79,76168,14605],{"class":239},[79,76170,76171,76173],{"class":81,"line":35797},[79,76172,16913],{"class":243},[79,76174,72276],{"class":89},[79,76176,76177],{"class":81,"line":35803},[79,76178,76179],{"class":89},"      \u003Ctr>\n",[79,76181,76182,76184,76186,76188,76191],{"class":81,"line":35820},[79,76183,72281],{"class":89},[79,76185,76161],{"class":239},[79,76187,2931],{"class":89},[79,76189,76190],{"class":239},"unameId",[79,76192,72296],{"class":89},[79,76194,76195,76197,76199,76201,76203],{"class":81,"line":35843},[79,76196,72281],{"class":89},[79,76198,76161],{"class":239},[79,76200,2931],{"class":89},[79,76202,72312],{"class":239},[79,76204,72296],{"class":89},[79,76206,76207,76209,76211,76213,76215],{"class":81,"line":35866},[79,76208,72281],{"class":89},[79,76210,76161],{"class":239},[79,76212,2931],{"class":89},[79,76214,72329],{"class":239},[79,76216,72296],{"class":89},[79,76218,76219,76221,76223,76225,76227],{"class":81,"line":35872},[79,76220,72281],{"class":89},[79,76222,76161],{"class":239},[79,76224,2931],{"class":89},[79,76226,72346],{"class":239},[79,76228,72296],{"class":89},[79,76230,76231,76233,76235,76237,76239],{"class":81,"line":35877},[79,76232,72281],{"class":89},[79,76234,76161],{"class":239},[79,76236,2931],{"class":89},[79,76238,72363],{"class":239},[79,76240,72296],{"class":89},[79,76242,76243,76245,76247,76249,76251],{"class":81,"line":35886},[79,76244,72281],{"class":89},[79,76246,76161],{"class":239},[79,76248,2931],{"class":89},[79,76250,72380],{"class":239},[79,76252,72296],{"class":89},[79,76254,76255,76257,76259,76261,76263],{"class":81,"line":35896},[79,76256,72281],{"class":89},[79,76258,76161],{"class":239},[79,76260,2931],{"class":89},[79,76262,4602],{"class":239},[79,76264,72296],{"class":89},[79,76266,76267],{"class":81,"line":35902},[79,76268,75723],{"class":89},[79,76270,76271,76274,76276],{"class":81,"line":35907},[79,76272,76273],{"class":89},"          \u003Ca href=\"#\" data-id=\"${",[79,76275,76166],{"class":239},[79,76277,76278],{"class":89},"}\">删除\u003C\u002Fa>\n",[79,76280,76281],{"class":81,"line":35913},[79,76282,75733],{"class":89},[79,76284,76285],{"class":81,"line":35926},[79,76286,76287],{"class":89},"      \u003C\u002Ftr>\n",[79,76289,76290],{"class":81,"line":35932},[79,76291,76292],{"class":89},"  `\n",[79,76294,76295],{"class":81,"line":35943},[79,76296,66925],{"class":239},[79,76298,76299,76301,76303],{"class":81,"line":35954},[79,76300,60354],{"class":239},[79,76302,60357],{"class":85},[79,76304,76305],{"class":239},"(trArr)\n",[79,76307,76308],{"class":81,"line":35973},[79,76309,454],{"emptyLinePlaceholder":453},[79,76311,76312],{"class":81,"line":51632},[79,76313,76314],{"class":2440},"      \u002F\u002F (2) 把数组转换为字符串join\n",[79,76316,76317],{"class":81,"line":51637},[79,76318,76319],{"class":2440},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[79,76321,76322,76324,76326,76329,76332,76334,76337],{"class":81,"line":51646},[79,76323,72207],{"class":239},[79,76325,244],{"class":243},[79,76327,76328],{"class":239}," trArr.",[79,76330,76331],{"class":85},"join",[79,76333,685],{"class":239},[79,76335,76336],{"class":89},"''",[79,76338,253],{"class":239},[79,76340,76341],{"class":81,"line":51655},[79,76342,76343],{"class":2440},"      \u002F\u002F 显示共有几条\n",[79,76345,76346,76348,76350,76352,76355,76358,76360,76362],{"class":81,"line":51660},[79,76347,57881],{"class":239},[79,76349,56509],{"class":85},[79,76351,685],{"class":239},[79,76353,76354],{"class":89},"'.total span'",[79,76356,76357],{"class":239},").innerHTML ",[79,76359,244],{"class":243},[79,76361,54078],{"class":239},[79,76363,57941],{"class":96},[79,76365,76366],{"class":81,"line":51665},[79,76367,4402],{"class":239},[79,76369,76370],{"class":81,"line":51670},[79,76371,76372],{"class":2440},"    \u002F\u002F render()\n",[79,76374,76375],{"class":81,"line":51683},[79,76376,454],{"emptyLinePlaceholder":453},[79,76378,76379],{"class":81,"line":51688},[79,76380,76381],{"class":2440},"    \u002F\u002F 获取DOM对象\n",[79,76383,76384,76386,76388,76390,76392,76394,76396,76398],{"class":81,"line":51697},[79,76385,13385],{"class":243},[79,76387,71929],{"class":96},[79,76389,468],{"class":243},[79,76391,56506],{"class":239},[79,76393,56509],{"class":85},[79,76395,685],{"class":239},[79,76397,71940],{"class":89},[79,76399,253],{"class":239},[79,76401,76402,76404,76406,76408,76410,76412,76414,76416],{"class":81,"line":51706},[79,76403,13385],{"class":243},[79,76405,71756],{"class":96},[79,76407,468],{"class":243},[79,76409,56506],{"class":239},[79,76411,56509],{"class":85},[79,76413,685],{"class":239},[79,76415,71767],{"class":89},[79,76417,253],{"class":239},[79,76419,76420,76422,76424,76426,76428,76430,76432,76434],{"class":81,"line":51723},[79,76421,13385],{"class":243},[79,76423,17849],{"class":96},[79,76425,468],{"class":243},[79,76427,56506],{"class":239},[79,76429,56509],{"class":85},[79,76431,685],{"class":239},[79,76433,71786],{"class":89},[79,76435,253],{"class":239},[79,76437,76439,76441,76443,76445,76447,76449,76451,76453],{"class":81,"line":76438},231,[79,76440,13385],{"class":243},[79,76442,71815],{"class":96},[79,76444,468],{"class":243},[79,76446,56506],{"class":239},[79,76448,56509],{"class":85},[79,76450,685],{"class":239},[79,76452,71826],{"class":89},[79,76454,253],{"class":239},[79,76456,76458,76460,76462,76464,76466,76468,76470,76472],{"class":81,"line":76457},232,[79,76459,13385],{"class":243},[79,76461,71795],{"class":96},[79,76463,468],{"class":243},[79,76465,56506],{"class":239},[79,76467,56509],{"class":85},[79,76469,685],{"class":239},[79,76471,71806],{"class":89},[79,76473,253],{"class":239},[79,76475,76477,76479,76481,76483,76485,76487,76489,76491],{"class":81,"line":76476},233,[79,76478,13385],{"class":243},[79,76480,71835],{"class":96},[79,76482,468],{"class":243},[79,76484,56506],{"class":239},[79,76486,56509],{"class":85},[79,76488,685],{"class":239},[79,76490,71846],{"class":89},[79,76492,253],{"class":239},[79,76494,76496],{"class":81,"line":76495},234,[79,76497,454],{"emptyLinePlaceholder":453},[79,76499,76501],{"class":81,"line":76500},235,[79,76502,76503],{"class":2440},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[79,76505,76507,76509,76511,76513,76515,76517,76519,76521,76523],{"class":81,"line":76506},236,[79,76508,71947],{"class":239},[79,76510,59923],{"class":85},[79,76512,685],{"class":239},[79,76514,71954],{"class":89},[79,76516,1060],{"class":239},[79,76518,56559],{"class":243},[79,76520,3887],{"class":239},[79,76522,2455],{"class":7412},[79,76524,14605],{"class":239},[79,76526,76528],{"class":81,"line":76527},237,[79,76529,76530],{"class":2440},"      \u002F\u002F 禁止浏览器跳转\n",[79,76532,76534,76536,76538],{"class":81,"line":76533},238,[79,76535,71974],{"class":239},[79,76537,71977],{"class":85},[79,76539,4191],{"class":239},[79,76541,76543],{"class":81,"line":76542},239,[79,76544,76545],{"class":2440},"      \u002F\u002F 非空判断\n",[79,76547,76549],{"class":81,"line":76548},240,[79,76550,76551],{"class":2440},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[79,76553,76555],{"class":81,"line":76554},241,[79,76556,76557],{"class":2440},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[79,76559,76561,76563,76565,76567,76570,76572,76575,76578,76580,76582],{"class":81,"line":76560},242,[79,76562,56590],{"class":243},[79,76564,3887],{"class":239},[79,76566,2602],{"class":243},[79,76568,76569],{"class":239},"uname.value ",[79,76571,73465],{"class":243},[79,76573,76574],{"class":243}," !",[79,76576,76577],{"class":239},"age.value ",[79,76579,73465],{"class":243},[79,76581,76574],{"class":243},[79,76583,76584],{"class":239},"salary.value) {\n",[79,76586,76588,76590,76592,76594,76596],{"class":81,"line":76587},243,[79,76589,16913],{"class":243},[79,76591,72048],{"class":85},[79,76593,685],{"class":239},[79,76595,72053],{"class":89},[79,76597,253],{"class":239},[79,76599,76601],{"class":81,"line":76600},244,[79,76602,54510],{"class":239},[79,76604,76606,76608,76610],{"class":81,"line":76605},245,[79,76607,60117],{"class":239},[79,76609,53997],{"class":85},[79,76611,76612],{"class":239},"({\n",[79,76614,76616],{"class":81,"line":76615},246,[79,76617,76618],{"class":2440},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[79,76620,76622],{"class":81,"line":76621},247,[79,76623,76624],{"class":2440},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[79,76626,76628],{"class":81,"line":76627},248,[79,76629,76630],{"class":2440},"        \u002F\u002F 对象的序号应为数组长度+1\n",[79,76632,76634],{"class":81,"line":76633},249,[79,76635,76636],{"class":2440},"        \u002F\u002F unameId: arr.length + 1,\n",[79,76638,76640],{"class":81,"line":76639},250,[79,76641,454],{"emptyLinePlaceholder":453},[79,76643,76645],{"class":81,"line":76644},251,[79,76646,76647],{"class":2440},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[79,76649,76651],{"class":81,"line":76650},252,[79,76652,76653],{"class":2440},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[79,76655,76657],{"class":81,"line":76656},253,[79,76658,76659],{"class":2440},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[79,76661,76663],{"class":81,"line":76662},254,[79,76664,76665],{"class":2440},"        \u002F\u002F 0当假看\n",[79,76667,76669,76672,76674,76676,76679,76681,76683,76685,76688,76690,76692,76695,76697],{"class":81,"line":76668},255,[79,76670,76671],{"class":239},"        unameId: arr.",[79,76673,54081],{"class":96},[79,76675,75922],{"class":243},[79,76677,76678],{"class":239}," arr[arr.",[79,76680,54081],{"class":96},[79,76682,333],{"class":243},[79,76684,27253],{"class":96},[79,76686,76687],{"class":239},"].unameId ",[79,76689,2855],{"class":243},[79,76691,27253],{"class":96},[79,76693,76694],{"class":243}," :",[79,76696,27253],{"class":96},[79,76698,33585],{"class":239},[79,76700,76702],{"class":81,"line":76701},256,[79,76703,72101],{"class":239},[79,76705,76707],{"class":81,"line":76706},257,[79,76708,72106],{"class":239},[79,76710,76712],{"class":81,"line":76711},258,[79,76713,72116],{"class":239},[79,76715,76717],{"class":81,"line":76716},259,[79,76718,72111],{"class":239},[79,76720,76722],{"class":81,"line":76721},260,[79,76723,76724],{"class":239},"        city: city.value,\n",[79,76726,76728],{"class":81,"line":76727},261,[79,76729,76730],{"class":2440},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[79,76732,76734],{"class":81,"line":76733},262,[79,76735,76736],{"class":2440},"        \u002F\u002F time: new Date().toDateString()\n",[79,76738,76740,76743,76746],{"class":81,"line":76739},263,[79,76741,76742],{"class":239},"        time: ",[79,76744,76745],{"class":85},"getTime",[79,76747,4191],{"class":239},[79,76749,76751],{"class":81,"line":76750},264,[79,76752,66925],{"class":239},[79,76754,76756],{"class":81,"line":76755},265,[79,76757,76758],{"class":2440},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[79,76760,76762,76764],{"class":81,"line":76761},266,[79,76763,72176],{"class":85},[79,76765,4191],{"class":239},[79,76767,76769,76771,76773,76775,76777],{"class":81,"line":76768},267,[79,76770,72159],{"class":96},[79,76772,2931],{"class":239},[79,76774,72164],{"class":85},[79,76776,15213],{"class":239},[79,76778,76779],{"class":2440},"\u002F\u002F重置表单\n",[79,76781,76783],{"class":81,"line":76782},268,[79,76784,76785],{"class":2440},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[79,76787,76789,76792,76794,76796,76799,76801,76803,76805,76807],{"class":81,"line":76788},269,[79,76790,76791],{"class":239},"      localStorage.",[79,76793,73762],{"class":85},[79,76795,685],{"class":239},[79,76797,76798],{"class":89},"'data'",[79,76800,1060],{"class":239},[79,76802,73772],{"class":96},[79,76804,2931],{"class":239},[79,76806,73777],{"class":85},[79,76808,76809],{"class":239},"(arr))\n",[79,76811,76813],{"class":81,"line":76812},270,[79,76814,35576],{"class":239},[79,76816,76818],{"class":81,"line":76817},271,[79,76819,454],{"emptyLinePlaceholder":453},[79,76821,76823],{"class":81,"line":76822},272,[79,76824,76825],{"class":2440},"    \u002F\u002F 3.删除业务\n",[79,76827,76829],{"class":81,"line":76828},273,[79,76830,76831],{"class":2440},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[79,76833,76835,76837,76839,76841,76843,76845,76847,76849,76851],{"class":81,"line":76834},274,[79,76836,72449],{"class":239},[79,76838,59923],{"class":85},[79,76840,685],{"class":239},[79,76842,59928],{"class":89},[79,76844,1060],{"class":239},[79,76846,56559],{"class":243},[79,76848,3887],{"class":239},[79,76850,2455],{"class":7412},[79,76852,14605],{"class":239},[79,76854,76856],{"class":81,"line":76855},275,[79,76857,76858],{"class":2440},"      \u002F\u002F 判断是否点击的是删除按钮\n",[79,76860,76862,76864,76866,76868,76870],{"class":81,"line":76861},276,[79,76863,56590],{"class":243},[79,76865,69143],{"class":239},[79,76867,56596],{"class":243},[79,76869,70365],{"class":89},[79,76871,14605],{"class":239},[79,76873,76875],{"class":81,"line":76874},277,[79,76876,76877],{"class":2440},"        \u002F\u002F alert(1)\n",[79,76879,76881],{"class":81,"line":76880},278,[79,76882,76883],{"class":2440},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[79,76885,76887],{"class":81,"line":76886},279,[79,76888,76889],{"class":2440},"        \u002F\u002F console.log(e.target)\n",[79,76891,76893],{"class":81,"line":76892},280,[79,76894,76895],{"class":2440},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[79,76897,76899],{"class":81,"line":76898},281,[79,76900,454],{"emptyLinePlaceholder":453},[79,76902,76904],{"class":81,"line":76903},282,[79,76905,76906],{"class":2440},"        \u002F\u002F 确认框，确然是否真的要删除\n",[79,76908,76910],{"class":81,"line":76909},283,[79,76911,76912],{"class":2440},"        \u002F\u002F confirm()为确认框\n",[79,76914,76916],{"class":81,"line":76915},284,[79,76917,76918],{"class":2440},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[79,76920,76922,76924,76926,76929,76931,76934],{"class":81,"line":76921},285,[79,76923,1132],{"class":243},[79,76925,3887],{"class":239},[79,76927,76928],{"class":85},"confirm",[79,76930,685],{"class":239},[79,76932,76933],{"class":89},"'您确定要删除这条数据吗？'",[79,76935,76936],{"class":239},")) {\n",[79,76938,76940,76943,76945,76947,76949],{"class":81,"line":76939},286,[79,76941,76942],{"class":239},"          arr.",[79,76944,60120],{"class":85},[79,76946,72502],{"class":239},[79,76948,1072],{"class":96},[79,76950,253],{"class":239},[79,76952,76954],{"class":81,"line":76953},287,[79,76955,76956],{"class":2440},"          \u002F\u002F 3.4 重新渲染页面\n",[79,76958,76960,76963],{"class":81,"line":76959},288,[79,76961,76962],{"class":85},"          render",[79,76964,4191],{"class":239},[79,76966,76968],{"class":81,"line":76967},289,[79,76969,76970],{"class":2440},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[79,76972,76974,76977,76979,76981,76983,76985,76987,76989,76991],{"class":81,"line":76973},290,[79,76975,76976],{"class":239},"          localStorage.",[79,76978,73762],{"class":85},[79,76980,685],{"class":239},[79,76982,76798],{"class":89},[79,76984,1060],{"class":239},[79,76986,73772],{"class":96},[79,76988,2931],{"class":239},[79,76990,73777],{"class":85},[79,76992,76809],{"class":239},[79,76994,76996],{"class":81,"line":76995},291,[79,76997,4742],{"class":239},[79,76999,77001],{"class":81,"line":77000},292,[79,77002,54510],{"class":239},[79,77004,77006],{"class":81,"line":77005},293,[79,77007,454],{"emptyLinePlaceholder":453},[79,77009,77011],{"class":81,"line":77010},294,[79,77012,35576],{"class":239},[79,77014,77016],{"class":81,"line":77015},295,[79,77017,454],{"emptyLinePlaceholder":453},[79,77019,77021,77023,77025],{"class":81,"line":77020},296,[79,77022,54529],{"class":239},[79,77024,53926],{"class":395},[79,77026,53420],{"class":239},[79,77028,77030,77032,77034],{"class":81,"line":77029},297,[79,77031,53898],{"class":239},[79,77033,53913],{"class":395},[79,77035,53420],{"class":239},[79,77037,77039],{"class":81,"line":77038},298,[79,77040,454],{"emptyLinePlaceholder":453},[79,77042,77044,77046,77048],{"class":81,"line":77043},299,[79,77045,53898],{"class":239},[79,77047,52749],{"class":395},[79,77049,53420],{"class":239},[14,77051,77053],{"id":77052},"_36-正则表达式","3.6 正则表达式",[19,77055,77056],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,77058,77059],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,77061,77062],{},"正则表达式的作用：",[3377,77064,77065,77072,77078],{},[29,77066,77067,77068,77071],{},"表单验证（ ",[2528,77069,77070],{},"匹配"," ）",[29,77073,77074,77075,77071],{},"过滤敏感词（ ",[2528,77076,77077],{},"替换",[29,77079,77080,77081,77071],{},"字符串中提取我们想要的部分（ ",[2528,77082,77083],{},"提取",[265,77085,77087],{"id":77086},"_361-语法","3.6.1 语法",[19,77089,77090],{},"正则表达式使用步骤：",[26,77092,77093,77096],{},[29,77094,77095],{},"定义规则",[29,77097,77098],{},"查找是否匹配",[19,77100,77101],{},"正则表达式里边不需要写引号",[19,77103,77104],{},[3699,77105],{"alt":57,"src":77106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,77108,77109],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,77111,77112],{},"reg.test(str)",[19,77114,77115],{},[3699,77116],{"alt":57,"src":77117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,77119,77120],{},[3699,77121],{"alt":57,"src":77122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[265,77124,77126],{"id":77125},"_362-元字符","3.6.2 元字符",[26,77128,77129,77132,77135,77138,77145],{},[29,77130,77131],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[29,77133,77134],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[29,77136,77137],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[29,77139,77140,77141],{},"正则验证工具：",[2614,77142,77143],{"href":77143,"rel":77144},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[26001],[29,77146,77147],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[24137,77149,77151],{"id":77150},"_3621-边界符","3.6.2.1 边界符",[19,77153,77154],{},[3699,77155],{"alt":57,"src":77156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,77158,77159],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,77161,77162],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,77164,77165],{},"只匹配一次",[19,77167,77168],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[24137,77170,77172],{"id":77171},"_3622-量词","3.6.2.2 量词",[19,77174,77175],{},[3699,77176],{"alt":57,"src":77177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,77179,77180],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[24137,77182,77184],{"id":77183},"_3623-元字符","3.6.2.3 元字符",[19,77186,77187],{},[3699,77188],{"alt":57,"src":77189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,77191,77192],{},"匹配的是a或b或c []只选一个",[19,77194,77195],{},[3699,77196],{"alt":57,"src":77197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,77199,77200],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,77202,77203],{},[3699,77204],{"alt":57,"src":77205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,77207,77208],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,77210,77211],{},[3699,77212],{"alt":57,"src":77213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[51,77215,77217],{"className":52747,"code":77216,"language":52749,"meta":57,"style":57},"\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",[59,77218,77219,77229,77243,77247,77255,77269,77289,77301,77309,77313,77321,77329,77334,77365,77392,77420,77424,77429,77457,77488,77493,77498,77529,77561,77593,77597,77602,77633,77663,77693,77697,77702,77733,77764,77794,77824,77828,77833,77866,77870,77875,77906,77937,77941,77946,77977,78007,78038,78042,78047,78079,78110,78141,78168,78199,78231,78264,78295,78326,78358,78389,78397,78405,78409],{"__ignoreMap":57},[79,77220,77221,77223,77225,77227],{"class":81,"line":82},[79,77222,53411],{"class":239},[79,77224,53414],{"class":395},[79,77226,53417],{"class":85},[79,77228,53420],{"class":239},[79,77230,77231,77233,77235,77237,77239,77241],{"class":81,"line":167},[79,77232,392],{"class":239},[79,77234,52749],{"class":395},[79,77236,53429],{"class":85},[79,77238,244],{"class":239},[79,77240,53434],{"class":89},[79,77242,53420],{"class":239},[79,77244,77245],{"class":81,"line":178},[79,77246,454],{"emptyLinePlaceholder":453},[79,77248,77249,77251,77253],{"class":81,"line":457},[79,77250,392],{"class":239},[79,77252,53447],{"class":395},[79,77254,53420],{"class":239},[79,77256,77257,77259,77261,77263,77265,77267],{"class":81,"line":462},[79,77258,54257],{"class":239},[79,77260,53457],{"class":395},[79,77262,53460],{"class":85},[79,77264,244],{"class":239},[79,77266,53465],{"class":89},[79,77268,53420],{"class":239},[79,77270,77271,77273,77275,77277,77279,77281,77283,77285,77287],{"class":81,"line":474},[79,77272,54257],{"class":239},[79,77274,53457],{"class":395},[79,77276,2238],{"class":85},[79,77278,244],{"class":239},[79,77280,53504],{"class":89},[79,77282,53484],{"class":85},[79,77284,244],{"class":239},[79,77286,53511],{"class":89},[79,77288,53420],{"class":239},[79,77290,77291,77293,77295,77297,77299],{"class":81,"line":480},[79,77292,54257],{"class":239},[79,77294,53520],{"class":395},[79,77296,53523],{"class":239},[79,77298,53520],{"class":395},[79,77300,53420],{"class":239},[79,77302,77303,77305,77307],{"class":81,"line":486},[79,77304,53898],{"class":239},[79,77306,53447],{"class":395},[79,77308,53420],{"class":239},[79,77310,77311],{"class":81,"line":491},[79,77312,454],{"emptyLinePlaceholder":453},[79,77314,77315,77317,77319],{"class":81,"line":497},[79,77316,392],{"class":239},[79,77318,53913],{"class":395},[79,77320,53420],{"class":239},[79,77322,77323,77325,77327],{"class":81,"line":503},[79,77324,54257],{"class":239},[79,77326,53926],{"class":395},[79,77328,53420],{"class":239},[79,77330,77331],{"class":81,"line":509},[79,77332,77333],{"class":2440},"    \u002F\u002F 元字符中\n",[79,77335,77336,77338,77340,77342,77344,77347,77349,77351,77354,77356,77359,77362],{"class":81,"line":514},[79,77337,75861],{"class":239},[79,77339,60357],{"class":85},[79,77341,685],{"class":239},[79,77343,2957],{"class":89},[79,77345,77346],{"class":50091},"哈",[79,77348,2957],{"class":89},[79,77350,2931],{"class":239},[79,77352,77353],{"class":85},"test",[79,77355,685],{"class":239},[79,77357,77358],{"class":89},"'哈'",[79,77360,77361],{"class":239},"))  ",[79,77363,77364],{"class":2440},"\u002F\u002Ftrue\n",[79,77366,77367,77369,77371,77373,77375,77377,77379,77381,77383,77385,77388,77390],{"class":81,"line":520},[79,77368,75861],{"class":239},[79,77370,60357],{"class":85},[79,77372,685],{"class":239},[79,77374,2957],{"class":89},[79,77376,77346],{"class":50091},[79,77378,2957],{"class":89},[79,77380,2931],{"class":239},[79,77382,77353],{"class":85},[79,77384,685],{"class":239},[79,77386,77387],{"class":89},"'哈哈'",[79,77389,77361],{"class":239},[79,77391,77364],{"class":2440},[79,77393,77394,77396,77398,77400,77402,77404,77406,77408,77410,77412,77415,77418],{"class":81,"line":526},[79,77395,75861],{"class":239},[79,77397,60357],{"class":85},[79,77399,685],{"class":239},[79,77401,2957],{"class":89},[79,77403,77346],{"class":50091},[79,77405,2957],{"class":89},[79,77407,2931],{"class":239},[79,77409,77353],{"class":85},[79,77411,685],{"class":239},[79,77413,77414],{"class":89},"'二哈'",[79,77416,77417],{"class":239},"))   ",[79,77419,77364],{"class":2440},[79,77421,77422],{"class":81,"line":532},[79,77423,454],{"emptyLinePlaceholder":453},[79,77425,77426],{"class":81,"line":537},[79,77427,77428],{"class":2440},"    \u002F\u002F 1.边界符\n",[79,77430,77431,77433,77435,77437,77439,77441,77443,77445,77447,77449,77451,77453,77455],{"class":81,"line":543},[79,77432,75861],{"class":239},[79,77434,60357],{"class":85},[79,77436,685],{"class":239},[79,77438,2957],{"class":89},[79,77440,3336],{"class":243},[79,77442,77346],{"class":50091},[79,77444,2957],{"class":89},[79,77446,2931],{"class":239},[79,77448,77353],{"class":85},[79,77450,685],{"class":239},[79,77452,77358],{"class":89},[79,77454,77361],{"class":239},[79,77456,77364],{"class":2440},[79,77458,77459,77461,77463,77465,77467,77469,77471,77473,77475,77477,77479,77481,77483,77485],{"class":81,"line":549},[79,77460,75861],{"class":239},[79,77462,60357],{"class":85},[79,77464,685],{"class":239},[79,77466,2957],{"class":89},[79,77468,3336],{"class":243},[79,77470,77346],{"class":50091},[79,77472,2677],{"class":243},[79,77474,2957],{"class":89},[79,77476,2931],{"class":239},[79,77478,77353],{"class":85},[79,77480,685],{"class":239},[79,77482,77387],{"class":89},[79,77484,77361],{"class":239},[79,77486,77487],{"class":2440},"\u002F\u002Ffalse\n",[79,77489,77490],{"class":81,"line":555},[79,77491,77492],{"class":2440},"    \u002F\u002F 2.量词\n",[79,77494,77495],{"class":81,"line":561},[79,77496,77497],{"class":2440},"    \u002F\u002F 量词 * 类似于 >= 0\n",[79,77499,77500,77502,77504,77506,77508,77510,77512,77515,77517,77519,77521,77523,77525,77527],{"class":81,"line":567},[79,77501,75861],{"class":239},[79,77503,60357],{"class":85},[79,77505,685],{"class":239},[79,77507,2957],{"class":89},[79,77509,3336],{"class":243},[79,77511,77346],{"class":50091},[79,77513,77514],{"class":243},"*$",[79,77516,2957],{"class":89},[79,77518,2931],{"class":239},[79,77520,77353],{"class":85},[79,77522,685],{"class":239},[79,77524,77387],{"class":89},[79,77526,77361],{"class":239},[79,77528,77364],{"class":2440},[79,77530,77531,77533,77535,77537,77539,77541,77543,77545,77547,77549,77551,77553,77556,77558],{"class":81,"line":573},[79,77532,75861],{"class":239},[79,77534,60357],{"class":85},[79,77536,685],{"class":239},[79,77538,2957],{"class":89},[79,77540,3336],{"class":243},[79,77542,77346],{"class":50091},[79,77544,77514],{"class":243},[79,77546,2957],{"class":89},[79,77548,2931],{"class":239},[79,77550,77353],{"class":85},[79,77552,685],{"class":239},[79,77554,77555],{"class":89},"'二哈好傻'",[79,77557,77361],{"class":239},[79,77559,77560],{"class":2440},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[79,77562,77563,77565,77567,77569,77571,77573,77575,77577,77579,77581,77583,77585,77588,77590],{"class":81,"line":579},[79,77564,75861],{"class":239},[79,77566,60357],{"class":85},[79,77568,685],{"class":239},[79,77570,2957],{"class":89},[79,77572,3336],{"class":243},[79,77574,77346],{"class":50091},[79,77576,77514],{"class":243},[79,77578,2957],{"class":89},[79,77580,2931],{"class":239},[79,77582,77353],{"class":85},[79,77584,685],{"class":239},[79,77586,77587],{"class":89},"'哈好哈'",[79,77589,77417],{"class":239},[79,77591,77592],{"class":2440},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[79,77594,77595],{"class":81,"line":584},[79,77596,454],{"emptyLinePlaceholder":453},[79,77598,77599],{"class":81,"line":590},[79,77600,77601],{"class":2440},"    \u002F\u002F +类似于>=1\n",[79,77603,77604,77606,77608,77610,77612,77614,77616,77619,77621,77623,77625,77627,77629,77631],{"class":81,"line":596},[79,77605,75861],{"class":239},[79,77607,60357],{"class":85},[79,77609,685],{"class":239},[79,77611,2957],{"class":89},[79,77613,3336],{"class":243},[79,77615,77346],{"class":50091},[79,77617,77618],{"class":243},"+$",[79,77620,2957],{"class":89},[79,77622,2931],{"class":239},[79,77624,77353],{"class":85},[79,77626,685],{"class":239},[79,77628,77387],{"class":89},[79,77630,77361],{"class":239},[79,77632,77364],{"class":2440},[79,77634,77635,77637,77639,77641,77643,77645,77647,77649,77651,77653,77655,77657,77659,77661],{"class":81,"line":602},[79,77636,75861],{"class":239},[79,77638,60357],{"class":85},[79,77640,685],{"class":239},[79,77642,2957],{"class":89},[79,77644,3336],{"class":243},[79,77646,77346],{"class":50091},[79,77648,77618],{"class":243},[79,77650,2957],{"class":89},[79,77652,2931],{"class":239},[79,77654,77353],{"class":85},[79,77656,685],{"class":239},[79,77658,77555],{"class":89},[79,77660,77361],{"class":239},[79,77662,77560],{"class":2440},[79,77664,77665,77667,77669,77671,77673,77675,77677,77679,77681,77683,77685,77687,77689,77691],{"class":81,"line":608},[79,77666,75861],{"class":239},[79,77668,60357],{"class":85},[79,77670,685],{"class":239},[79,77672,2957],{"class":89},[79,77674,3336],{"class":243},[79,77676,77346],{"class":50091},[79,77678,77618],{"class":243},[79,77680,2957],{"class":89},[79,77682,2931],{"class":239},[79,77684,77353],{"class":85},[79,77686,685],{"class":239},[79,77688,77587],{"class":89},[79,77690,77417],{"class":239},[79,77692,77487],{"class":2440},[79,77694,77695],{"class":81,"line":614},[79,77696,454],{"emptyLinePlaceholder":453},[79,77698,77699],{"class":81,"line":620},[79,77700,77701],{"class":2440},"    \u002F\u002F ?类似于0次或一次\n",[79,77703,77704,77706,77708,77710,77712,77714,77717,77719,77721,77723,77725,77727,77729,77731],{"class":81,"line":625},[79,77705,75861],{"class":239},[79,77707,60357],{"class":85},[79,77709,685],{"class":239},[79,77711,2957],{"class":89},[79,77713,3336],{"class":243},[79,77715,77716],{"class":50091},"哈？",[79,77718,2677],{"class":243},[79,77720,2957],{"class":89},[79,77722,2931],{"class":239},[79,77724,77353],{"class":85},[79,77726,685],{"class":239},[79,77728,76336],{"class":89},[79,77730,77417],{"class":239},[79,77732,77364],{"class":2440},[79,77734,77735,77737,77739,77741,77743,77745,77747,77750,77752,77754,77756,77758,77760,77762],{"class":81,"line":630},[79,77736,75861],{"class":239},[79,77738,60357],{"class":85},[79,77740,685],{"class":239},[79,77742,2957],{"class":89},[79,77744,3336],{"class":243},[79,77746,77346],{"class":50091},[79,77748,77749],{"class":243},"?$",[79,77751,2957],{"class":89},[79,77753,2931],{"class":239},[79,77755,77353],{"class":85},[79,77757,685],{"class":239},[79,77759,77387],{"class":89},[79,77761,77361],{"class":239},[79,77763,77487],{"class":2440},[79,77765,77766,77768,77770,77772,77774,77776,77778,77780,77782,77784,77786,77788,77790,77792],{"class":81,"line":648},[79,77767,75861],{"class":239},[79,77769,60357],{"class":85},[79,77771,685],{"class":239},[79,77773,2957],{"class":89},[79,77775,3336],{"class":243},[79,77777,77346],{"class":50091},[79,77779,77749],{"class":243},[79,77781,2957],{"class":89},[79,77783,2931],{"class":239},[79,77785,77353],{"class":85},[79,77787,685],{"class":239},[79,77789,77555],{"class":89},[79,77791,77361],{"class":239},[79,77793,77560],{"class":2440},[79,77795,77796,77798,77800,77802,77804,77806,77808,77810,77812,77814,77816,77818,77820,77822],{"class":81,"line":659},[79,77797,75861],{"class":239},[79,77799,60357],{"class":85},[79,77801,685],{"class":239},[79,77803,2957],{"class":89},[79,77805,3336],{"class":243},[79,77807,77346],{"class":50091},[79,77809,77749],{"class":243},[79,77811,2957],{"class":89},[79,77813,2931],{"class":239},[79,77815,77353],{"class":85},[79,77817,685],{"class":239},[79,77819,77587],{"class":89},[79,77821,77361],{"class":239},[79,77823,77487],{"class":2440},[79,77825,77826],{"class":81,"line":676},[79,77827,454],{"emptyLinePlaceholder":453},[79,77829,77830],{"class":81,"line":708},[79,77831,77832],{"class":2440},"    \u002F\u002F {n}写几，就必须出现几次\n",[79,77834,77835,77837,77839,77841,77843,77845,77847,77850,77852,77854,77856,77858,77861,77864],{"class":81,"line":717},[79,77836,75861],{"class":239},[79,77838,60357],{"class":85},[79,77840,685],{"class":239},[79,77842,2957],{"class":89},[79,77844,3336],{"class":243},[79,77846,77346],{"class":50091},[79,77848,77849],{"class":243},"{4}$",[79,77851,2957],{"class":89},[79,77853,2931],{"class":239},[79,77855,77353],{"class":85},[79,77857,685],{"class":239},[79,77859,77860],{"class":89},"'哈哈哈哈'",[79,77862,77863],{"class":239},")) ",[79,77865,77364],{"class":2440},[79,77867,77868],{"class":81,"line":722},[79,77869,454],{"emptyLinePlaceholder":453},[79,77871,77872],{"class":81,"line":727},[79,77873,77874],{"class":2440},"    \u002F\u002F {n,}大于等于n次\n",[79,77876,77877,77879,77881,77883,77885,77887,77889,77892,77894,77896,77898,77900,77902,77904],{"class":81,"line":738},[79,77878,75861],{"class":239},[79,77880,60357],{"class":85},[79,77882,685],{"class":239},[79,77884,2957],{"class":89},[79,77886,3336],{"class":243},[79,77888,77346],{"class":50091},[79,77890,77891],{"class":243},"{4,}$",[79,77893,2957],{"class":89},[79,77895,2931],{"class":239},[79,77897,77353],{"class":85},[79,77899,685],{"class":239},[79,77901,77860],{"class":89},[79,77903,77863],{"class":239},[79,77905,77364],{"class":2440},[79,77907,77908,77910,77912,77914,77916,77918,77920,77922,77924,77926,77928,77930,77933,77935],{"class":81,"line":753},[79,77909,75861],{"class":239},[79,77911,60357],{"class":85},[79,77913,685],{"class":239},[79,77915,2957],{"class":89},[79,77917,3336],{"class":243},[79,77919,77346],{"class":50091},[79,77921,77891],{"class":243},[79,77923,2957],{"class":89},[79,77925,2931],{"class":239},[79,77927,77353],{"class":85},[79,77929,685],{"class":239},[79,77931,77932],{"class":89},"'哈哈哈哈哈'",[79,77934,77863],{"class":239},[79,77936,77364],{"class":2440},[79,77938,77939],{"class":81,"line":768},[79,77940,454],{"emptyLinePlaceholder":453},[79,77942,77943],{"class":81,"line":776},[79,77944,77945],{"class":2440},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[79,77947,77948,77950,77952,77954,77956,77958,77960,77963,77965,77967,77969,77971,77973,77975],{"class":81,"line":781},[79,77949,75861],{"class":239},[79,77951,60357],{"class":85},[79,77953,685],{"class":239},[79,77955,2957],{"class":89},[79,77957,3336],{"class":243},[79,77959,77346],{"class":50091},[79,77961,77962],{"class":243},"{4,6}$",[79,77964,2957],{"class":89},[79,77966,2931],{"class":239},[79,77968,77353],{"class":85},[79,77970,685],{"class":239},[79,77972,77860],{"class":89},[79,77974,77863],{"class":239},[79,77976,77364],{"class":2440},[79,77978,77979,77981,77983,77985,77987,77989,77991,77993,77995,77997,77999,78001,78003,78005],{"class":81,"line":786},[79,77980,75861],{"class":239},[79,77982,60357],{"class":85},[79,77984,685],{"class":239},[79,77986,2957],{"class":89},[79,77988,3336],{"class":243},[79,77990,77346],{"class":50091},[79,77992,77962],{"class":243},[79,77994,2957],{"class":89},[79,77996,2931],{"class":239},[79,77998,77353],{"class":85},[79,78000,685],{"class":239},[79,78002,77932],{"class":89},[79,78004,77863],{"class":239},[79,78006,77364],{"class":2440},[79,78008,78009,78011,78013,78015,78017,78019,78021,78023,78025,78027,78029,78031,78034,78036],{"class":81,"line":802},[79,78010,75861],{"class":239},[79,78012,60357],{"class":85},[79,78014,685],{"class":239},[79,78016,2957],{"class":89},[79,78018,3336],{"class":243},[79,78020,77346],{"class":50091},[79,78022,77962],{"class":243},[79,78024,2957],{"class":89},[79,78026,2931],{"class":239},[79,78028,77353],{"class":85},[79,78030,685],{"class":239},[79,78032,78033],{"class":89},"'哈哈哈哈哈哈哈'",[79,78035,77863],{"class":239},[79,78037,77487],{"class":2440},[79,78039,78040],{"class":81,"line":815},[79,78041,454],{"emptyLinePlaceholder":453},[79,78043,78044],{"class":81,"line":828},[79,78045,78046],{"class":2440},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[79,78048,78049,78051,78053,78055,78057,78059,78062,78064,78066,78068,78070,78072,78075,78077],{"class":81,"line":842},[79,78050,75861],{"class":239},[79,78052,60357],{"class":85},[79,78054,685],{"class":239},[79,78056,2957],{"class":89},[79,78058,3336],{"class":243},[79,78060,78061],{"class":96},"[abc]",[79,78063,2677],{"class":243},[79,78065,2957],{"class":89},[79,78067,2931],{"class":239},[79,78069,77353],{"class":85},[79,78071,685],{"class":239},[79,78073,78074],{"class":89},"'a'",[79,78076,77361],{"class":239},[79,78078,77364],{"class":2440},[79,78080,78081,78083,78085,78087,78089,78091,78093,78095,78097,78099,78101,78103,78106,78108],{"class":81,"line":859},[79,78082,75861],{"class":239},[79,78084,60357],{"class":85},[79,78086,685],{"class":239},[79,78088,2957],{"class":89},[79,78090,3336],{"class":243},[79,78092,78061],{"class":96},[79,78094,2677],{"class":243},[79,78096,2957],{"class":89},[79,78098,2931],{"class":239},[79,78100,77353],{"class":85},[79,78102,685],{"class":239},[79,78104,78105],{"class":89},"'b'",[79,78107,77361],{"class":239},[79,78109,77364],{"class":2440},[79,78111,78112,78114,78116,78118,78120,78122,78124,78126,78128,78130,78132,78134,78137,78139],{"class":81,"line":878},[79,78113,75861],{"class":239},[79,78115,60357],{"class":85},[79,78117,685],{"class":239},[79,78119,2957],{"class":89},[79,78121,3336],{"class":243},[79,78123,78061],{"class":96},[79,78125,2677],{"class":243},[79,78127,2957],{"class":89},[79,78129,2931],{"class":239},[79,78131,77353],{"class":85},[79,78133,685],{"class":239},[79,78135,78136],{"class":89},"'c'",[79,78138,77361],{"class":239},[79,78140,77364],{"class":2440},[79,78142,78143,78145,78147,78149,78151,78153,78155,78157,78159,78161,78164,78166],{"class":81,"line":883},[79,78144,75861],{"class":239},[79,78146,60357],{"class":85},[79,78148,685],{"class":239},[79,78150,2957],{"class":89},[79,78152,78061],{"class":96},[79,78154,2957],{"class":89},[79,78156,2931],{"class":239},[79,78158,77353],{"class":85},[79,78160,685],{"class":239},[79,78162,78163],{"class":89},"'ab'",[79,78165,77361],{"class":239},[79,78167,77364],{"class":2440},[79,78169,78170,78172,78174,78176,78178,78180,78182,78184,78186,78188,78190,78192,78194,78196],{"class":81,"line":888},[79,78171,75861],{"class":239},[79,78173,60357],{"class":85},[79,78175,685],{"class":239},[79,78177,2957],{"class":89},[79,78179,3336],{"class":243},[79,78181,78061],{"class":96},[79,78183,2677],{"class":243},[79,78185,2957],{"class":89},[79,78187,2931],{"class":239},[79,78189,77353],{"class":85},[79,78191,685],{"class":239},[79,78193,78163],{"class":89},[79,78195,77361],{"class":239},[79,78197,78198],{"class":2440},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[79,78200,78201,78203,78205,78207,78209,78211,78213,78216,78218,78220,78222,78224,78226,78228],{"class":81,"line":904},[79,78202,75861],{"class":239},[79,78204,60357],{"class":85},[79,78206,685],{"class":239},[79,78208,2957],{"class":89},[79,78210,3336],{"class":243},[79,78212,78061],{"class":96},[79,78214,78215],{"class":243},"{2}$",[79,78217,2957],{"class":89},[79,78219,2931],{"class":239},[79,78221,77353],{"class":85},[79,78223,685],{"class":239},[79,78225,78163],{"class":89},[79,78227,77361],{"class":239},[79,78229,78230],{"class":2440},"\u002F\u002Ftrue   可以选两个\n",[79,78232,78233,78235,78237,78239,78241,78243,78246,78248,78250,78252,78254,78256,78259,78261],{"class":81,"line":919},[79,78234,75861],{"class":239},[79,78236,60357],{"class":85},[79,78238,685],{"class":239},[79,78240,2957],{"class":89},[79,78242,3336],{"class":243},[79,78244,78245],{"class":96},"[a-z]",[79,78247,2677],{"class":243},[79,78249,2957],{"class":89},[79,78251,2931],{"class":239},[79,78253,77353],{"class":85},[79,78255,685],{"class":239},[79,78257,78258],{"class":89},"'p'",[79,78260,77417],{"class":239},[79,78262,78263],{"class":2440},"\u002F\u002Ftrue   依然只能选一个\n",[79,78265,78266,78268,78270,78272,78274,78276,78279,78281,78283,78285,78287,78289,78291,78293],{"class":81,"line":930},[79,78267,75861],{"class":239},[79,78269,60357],{"class":85},[79,78271,685],{"class":239},[79,78273,2957],{"class":89},[79,78275,3336],{"class":243},[79,78277,78278],{"class":96},"[A-Z]",[79,78280,2677],{"class":243},[79,78282,2957],{"class":89},[79,78284,2931],{"class":239},[79,78286,77353],{"class":85},[79,78288,685],{"class":239},[79,78290,78258],{"class":89},[79,78292,77417],{"class":239},[79,78294,77487],{"class":2440},[79,78296,78297,78299,78301,78303,78305,78307,78309,78311,78313,78315,78317,78319,78322,78324],{"class":81,"line":941},[79,78298,75861],{"class":239},[79,78300,60357],{"class":85},[79,78302,685],{"class":239},[79,78304,2957],{"class":89},[79,78306,3336],{"class":243},[79,78308,78278],{"class":96},[79,78310,2677],{"class":243},[79,78312,2957],{"class":89},[79,78314,2931],{"class":239},[79,78316,77353],{"class":85},[79,78318,685],{"class":239},[79,78320,78321],{"class":89},"'P'",[79,78323,77417],{"class":239},[79,78325,77364],{"class":2440},[79,78327,78328,78330,78332,78334,78336,78338,78341,78343,78345,78347,78349,78351,78354,78356],{"class":81,"line":946},[79,78329,75861],{"class":239},[79,78331,60357],{"class":85},[79,78333,685],{"class":239},[79,78335,2957],{"class":89},[79,78337,3336],{"class":243},[79,78339,78340],{"class":96},"[0-9]",[79,78342,2677],{"class":243},[79,78344,2957],{"class":89},[79,78346,2931],{"class":239},[79,78348,77353],{"class":85},[79,78350,685],{"class":239},[79,78352,78353],{"class":89},"'0'",[79,78355,77417],{"class":239},[79,78357,77364],{"class":2440},[79,78359,78360,78362,78364,78366,78368,78370,78373,78375,78377,78379,78381,78383,78385,78387],{"class":81,"line":969},[79,78361,75861],{"class":239},[79,78363,60357],{"class":85},[79,78365,685],{"class":239},[79,78367,2957],{"class":89},[79,78369,3336],{"class":243},[79,78371,78372],{"class":96},"[a-zA-Z0-9]",[79,78374,2677],{"class":243},[79,78376,2957],{"class":89},[79,78378,2931],{"class":239},[79,78380,77353],{"class":85},[79,78382,685],{"class":239},[79,78384,78258],{"class":89},[79,78386,77361],{"class":239},[79,78388,77364],{"class":2440},[79,78390,78391,78393,78395],{"class":81,"line":975},[79,78392,54529],{"class":239},[79,78394,53926],{"class":395},[79,78396,53420],{"class":239},[79,78398,78399,78401,78403],{"class":81,"line":989},[79,78400,53898],{"class":239},[79,78402,53913],{"class":395},[79,78404,53420],{"class":239},[79,78406,78407],{"class":81,"line":1003},[79,78408,454],{"emptyLinePlaceholder":453},[79,78410,78411,78413,78415],{"class":81,"line":1019},[79,78412,53898],{"class":239},[79,78414,52749],{"class":395},[79,78416,53420],{"class":239},[24137,78418,78420],{"id":78419},"_3624-修饰符","3.6.2.4 修饰符",[19,78422,78423],{},[3699,78424],{"alt":57,"src":78425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78427,78428],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78430,78431],{},[3699,78432],{"alt":57,"src":78433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[51,78435,78437],{"className":52747,"code":78436,"language":52749,"meta":57,"style":57},"\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",[59,78438,78439,78449,78463,78471,78485,78505,78517,78525,78533,78541,78573,78604,78609,78641,78652,78685,78694,78702,78710],{"__ignoreMap":57},[79,78440,78441,78443,78445,78447],{"class":81,"line":82},[79,78442,53411],{"class":239},[79,78444,53414],{"class":395},[79,78446,53417],{"class":85},[79,78448,53420],{"class":239},[79,78450,78451,78453,78455,78457,78459,78461],{"class":81,"line":167},[79,78452,392],{"class":239},[79,78454,52749],{"class":395},[79,78456,53429],{"class":85},[79,78458,244],{"class":239},[79,78460,53434],{"class":89},[79,78462,53420],{"class":239},[79,78464,78465,78467,78469],{"class":81,"line":178},[79,78466,392],{"class":239},[79,78468,53447],{"class":395},[79,78470,53420],{"class":239},[79,78472,78473,78475,78477,78479,78481,78483],{"class":81,"line":457},[79,78474,54257],{"class":239},[79,78476,53457],{"class":395},[79,78478,53460],{"class":85},[79,78480,244],{"class":239},[79,78482,53465],{"class":89},[79,78484,53420],{"class":239},[79,78486,78487,78489,78491,78493,78495,78497,78499,78501,78503],{"class":81,"line":462},[79,78488,54257],{"class":239},[79,78490,53457],{"class":395},[79,78492,2238],{"class":85},[79,78494,244],{"class":239},[79,78496,53504],{"class":89},[79,78498,53484],{"class":85},[79,78500,244],{"class":239},[79,78502,53511],{"class":89},[79,78504,53420],{"class":239},[79,78506,78507,78509,78511,78513,78515],{"class":81,"line":474},[79,78508,54257],{"class":239},[79,78510,53520],{"class":395},[79,78512,53523],{"class":239},[79,78514,53520],{"class":395},[79,78516,53420],{"class":239},[79,78518,78519,78521,78523],{"class":81,"line":480},[79,78520,53898],{"class":239},[79,78522,53447],{"class":395},[79,78524,53420],{"class":239},[79,78526,78527,78529,78531],{"class":81,"line":486},[79,78528,392],{"class":239},[79,78530,53913],{"class":395},[79,78532,53420],{"class":239},[79,78534,78535,78537,78539],{"class":81,"line":491},[79,78536,54257],{"class":239},[79,78538,53926],{"class":395},[79,78540,53420],{"class":239},[79,78542,78543,78545,78547,78549,78551,78553,78556,78558,78560,78562,78564,78566,78569,78571],{"class":81,"line":497},[79,78544,75861],{"class":239},[79,78546,60357],{"class":85},[79,78548,685],{"class":239},[79,78550,2957],{"class":89},[79,78552,3336],{"class":243},[79,78554,78555],{"class":50091},"java",[79,78557,2677],{"class":243},[79,78559,2957],{"class":89},[79,78561,2931],{"class":239},[79,78563,77353],{"class":85},[79,78565,685],{"class":239},[79,78567,78568],{"class":89},"'java'",[79,78570,77863],{"class":239},[79,78572,77364],{"class":2440},[79,78574,78575,78577,78579,78581,78583,78585,78587,78589,78591,78593,78595,78597,78600,78602],{"class":81,"line":503},[79,78576,75861],{"class":239},[79,78578,60357],{"class":85},[79,78580,685],{"class":239},[79,78582,2957],{"class":89},[79,78584,3336],{"class":243},[79,78586,78555],{"class":50091},[79,78588,2677],{"class":243},[79,78590,2957],{"class":89},[79,78592,2931],{"class":239},[79,78594,77353],{"class":85},[79,78596,685],{"class":239},[79,78598,78599],{"class":89},"'Java'",[79,78601,77863],{"class":239},[79,78603,77487],{"class":2440},[79,78605,78606],{"class":81,"line":509},[79,78607,78608],{"class":2440},"    \u002F\u002F 不区分大小写、\n",[79,78610,78611,78613,78615,78617,78619,78621,78623,78625,78627,78629,78631,78633,78635,78637,78639],{"class":81,"line":514},[79,78612,75861],{"class":239},[79,78614,60357],{"class":85},[79,78616,685],{"class":239},[79,78618,2957],{"class":89},[79,78620,3336],{"class":243},[79,78622,78555],{"class":50091},[79,78624,2677],{"class":243},[79,78626,2957],{"class":89},[79,78628,2815],{"class":243},[79,78630,2931],{"class":239},[79,78632,77353],{"class":85},[79,78634,685],{"class":239},[79,78636,78599],{"class":89},[79,78638,77863],{"class":239},[79,78640,77364],{"class":2440},[79,78642,78643,78645,78647,78649],{"class":81,"line":520},[79,78644,13385],{"class":243},[79,78646,76027],{"class":96},[79,78648,468],{"class":243},[79,78650,78651],{"class":89}," 'java是一门编程语言，学完java工资很高'\n",[79,78653,78654,78656,78659,78661,78664,78667,78669,78671,78673,78675,78678,78680,78683],{"class":81,"line":526},[79,78655,13385],{"class":243},[79,78657,78658],{"class":96}," result",[79,78660,468],{"class":243},[79,78662,78663],{"class":239}," str.",[79,78665,78666],{"class":85},"replace",[79,78668,685],{"class":239},[79,78670,2957],{"class":89},[79,78672,78555],{"class":50091},[79,78674,2957],{"class":89},[79,78676,78677],{"class":243},"ig",[79,78679,1060],{"class":239},[79,78681,78682],{"class":89},"'前端'",[79,78684,253],{"class":239},[79,78686,78687,78689,78691],{"class":81,"line":532},[79,78688,75861],{"class":239},[79,78690,60357],{"class":85},[79,78692,78693],{"class":239},"(result)\n",[79,78695,78696,78698,78700],{"class":81,"line":537},[79,78697,54529],{"class":239},[79,78699,53926],{"class":395},[79,78701,53420],{"class":239},[79,78703,78704,78706,78708],{"class":81,"line":543},[79,78705,53898],{"class":239},[79,78707,53913],{"class":395},[79,78709,53420],{"class":239},[79,78711,78712,78714,78716],{"class":81,"line":549},[79,78713,53898],{"class":239},[79,78715,52749],{"class":395},[79,78717,53420],{"class":239},[2287,78719,78720],{},"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":57,"searchDepth":167,"depth":167,"links":78722},[78723,78733,78745,78762,78769,78777],{"id":55470,"depth":167,"text":55471,"children":78724},[78725,78726,78727,78728,78729,78730,78731,78732],{"id":55474,"depth":178,"text":55475},{"id":55507,"depth":178,"text":55508},{"id":55546,"depth":178,"text":55547},{"id":55704,"depth":178,"text":55705},{"id":55752,"depth":178,"text":55753},{"id":55889,"depth":178,"text":55890},{"id":56211,"depth":178,"text":56212},{"id":59199,"depth":178,"text":59200},{"id":59227,"depth":167,"text":59228,"children":78734},[78735,78736,78737,78738,78739,78740,78741,78742,78743,78744],{"id":59231,"depth":178,"text":59232},{"id":59254,"depth":178,"text":59255},{"id":60169,"depth":178,"text":60170},{"id":60859,"depth":178,"text":60860},{"id":61141,"depth":178,"text":61142},{"id":65302,"depth":178,"text":65303},{"id":65472,"depth":178,"text":65473},{"id":65600,"depth":178,"text":65601},{"id":65625,"depth":178,"text":65626},{"id":67014,"depth":178,"text":67015},{"id":68166,"depth":167,"text":68167,"children":78746},[78747,78748,78749,78750,78751,78752,78753,78754,78755,78756,78757,78758,78759,78760,78761],{"id":68170,"depth":178,"text":68171},{"id":68824,"depth":178,"text":68825},{"id":70519,"depth":178,"text":70520},{"id":70560,"depth":178,"text":70561},{"id":70602,"depth":178,"text":70603},{"id":70616,"depth":178,"text":70617},{"id":70665,"depth":178,"text":70666},{"id":70677,"depth":178,"text":70678},{"id":70692,"depth":178,"text":70693},{"id":70728,"depth":178,"text":70729},{"id":70809,"depth":178,"text":70810},{"id":70937,"depth":178,"text":70938},{"id":70949,"depth":178,"text":70950},{"id":70968,"depth":178,"text":70969},{"id":73078,"depth":178,"text":73079},{"id":73097,"depth":167,"text":73098,"children":78763},[78764,78765,78766,78767,78768],{"id":73118,"depth":178,"text":73119},{"id":73138,"depth":178,"text":73139},{"id":73187,"depth":178,"text":73188},{"id":73312,"depth":178,"text":73313},{"id":73493,"depth":178,"text":73494},{"id":73511,"depth":167,"text":73512,"children":78770},[78771,78772,78773,78774,78775,78776],{"id":73526,"depth":178,"text":73527},{"id":73585,"depth":178,"text":73586},{"id":73609,"depth":178,"text":73610},{"id":73929,"depth":178,"text":73930},{"id":73961,"depth":178,"text":73962},{"id":73984,"depth":178,"text":73985},{"id":77052,"depth":167,"text":77053,"children":78778},[78779,78780],{"id":77086,"depth":178,"text":77087},{"id":77125,"depth":178,"text":77126},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55442,"description":25516},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78787,"title":78788,"body":78789,"description":25516,"extension":2314,"meta":94923,"navigation":453,"path":94924,"seo":94925,"stem":94926,"__hash__":94927},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78790,"toc":94859},[78791,78794,78797,78801,78805,78810,78815,78826,78830,78835,78838,78842,78845,78850,78854,78858,78861,78866,78869,78873,78876,78884,78887,78891,78896,78901,78904,78908,78913,78918,78921,78925,78930,78933,78938,78941,78946,78949,78954,78959,78962,78965,78969,78974,78979,78982,78986,78990,78993,78996,78999,79003,79007,79012,79017,79020,79024,79029,79034,79037,79040,79043,79046,79049,79052,79055,79058,79061,79066,79070,79075,79080,79083,79086,79089,79092,79095,79098,79101,79104,79108,79112,79115,79118,79121,79126,79128,79131,79134,79137,79140,79143,79146,79149,79152,79155,79158,79161,79164,79167,79172,79177,79182,79185,79189,79192,79197,79201,79203,79214,79219,79320,79323,79326,79329,79332,79335,79338,79341,79344,79346,79349,79352,79355,79358,79361,79363,79366,79369,79372,79375,79378,79381,79383,79386,79388,79390,79393,79397,79401,79404,79407,79410,79413,79416,79419,79422,79425,79428,79433,79553,79556,79559,79564,79567,79570,79573,79576,79581,79584,79587,79590,79593,79598,79601,79701,79766,79840,79844,79847,79850,79854,79857,79871,79900,79903,79906,79909,79912,79915,79918,79921,79923,79926,79929,79932,79935,79939,79944,79948,79953,80028,80031,80214,80217,80220,80223,80226,80229,80231,80234,80237,80240,80243,80246,80249,80251,80255,80258,80263,80266,80269,80272,80275,80277,80282,80285,80288,80291,80294,80296,80301,80304,80307,80309,80311,80314,80318,80321,80324,80329,80332,80335,80338,80388,80393,80397,80402,80405,80474,80477,80486,80490,80495,80498,80501,80509,80512,80529,82330,82334,82338,82343,82346,82350,82356,82362,82514,82519,82524,82527,82530,82533,82536,82539,82542,82545,82548,82551,82554,82557,82560,82565,82569,82572,82583,82587,82592,82595,82598,82601,82604,82607,82609,82612,82615,82618,82621,82623,82640,82643,82647,82650,82655,82660,82663,82666,82670,82673,82676,82685,82688,82692,82695,82700,82705,82772,82776,82779,82782,82787,82792,82878,82883,82887,82890,82893,82908,82911,82916,82920,82925,83034,83037,83048,83198,83202,83207,83316,83320,83325,83330,83335,83338,83345,83365,83401,83565,83570,83573,83578,83585,83588,83591,83594,83653,83709,83765,83769,83774,84089,84092,84096,84099,84104,84213,84218,84222,84227,84231,84302,84306,84308,84311,84314,84352,84628,84632,84647,84713,84747,84751,84754,84759,84788,84795,84804,84809,84824,84829,84838,84841,84978,84982,85044,85048,85053,85298,85302,85307,85310,85313,85316,85319,85323,85328,86909,86913,86917,86923,86926,86931,86935,86938,86943,86946,86957,86961,86966,86970,86975,86980,86983,86988,86992,86996,86999,87004,87009,87012,87015,87018,87140,87145,87247,87250,87253,87257,87262,87434,87439,87443,87446,87451,87517,87522,87525,87656,87659,87664,87667,87670,87761,87766,87769,87772,87775,87778,87783,87788,87791,87796,87801,87806,87810,87813,87816,87821,87826,87831,87836,87890,87893,87896,87901,87904,87907,87912,87917,87922,87926,87931,87945,87950,87953,87958,87962,87967,87972,87977,87982,87987,87992,87997,88002,88005,88009,88014,88017,88020,88023,88028,88033,88036,88039,88043,88046,88049,88054,88059,88064,88069,88072,88077,88082,88143,88148,88151,88156,89397,89402,89406,89410,89415,89418,89423,89428,89431,89436,89438,89443,89447,89450,89453,89464,89468,89473,89478,89533,89538,89543,89548,89759,89764,89768,89773,89776,89778,89781,89784,90231,90236,90243,90249,90252,90255,90519,90524,90528,90793,90798,90802,90807,90812,90817,90822,91153,91156,91161,91166,91169,91173,91177,91182,91187,91192,91197,91202,91207,91211,91214,91219,91224,91227,91301,91306,91311,91316,91318,91321,91691,91696,91701,91706,91709,91712,91814,91819,91824,91927,91931,91936,91940,91944,91949,91954,91957,91962,91965,91968,92361,92366,92369,92372,92375,92378,92898,92902,92907,92912,92917,92920,92925,92928,92931,93313,93318,93320,93322,93325,93328,93840,93844,93905,93908,93911,93914,93918,93921,93926,93931,94856],[10,78792,78788],{"id":78793},"_4js进阶",[19,78795,78796],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78798,78800],{"id":78799},"_41-作用域","4.1 作用域",[265,78802,78804],{"id":78803},"_411-局部作用域","4.1.1 局部作用域",[19,78806,78807],{},[3699,78808],{"alt":57,"src":78809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78811,78812],{},[3699,78813],{"alt":57,"src":78814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[3377,78816,78817,78820,78823],{},[29,78818,78819],{},"函数作用域在函数内部",[29,78821,78822],{},"块级作用域在{}",[29,78824,78825],{},"对象的那个{}不是作用域，不是块作用域",[265,78827,78829],{"id":78828},"_412-全局作用域","4.1.2 全局作用域",[19,78831,78832],{},[3699,78833],{"alt":57,"src":78834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78836,78837],{},"window.a=10不要这样写",[265,78839,78841],{"id":78840},"_413-作用域链","4.1.3 作用域链",[19,78843,78844],{},"变量查找机制",[19,78846,78847],{},[3699,78848],{"alt":57,"src":78849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78851,78853],{"id":78852},"_42-垃圾回收机制","4.2 垃圾回收机制",[265,78855,78857],{"id":78856},"_421-大体介绍","4.2.1 大体介绍",[19,78859,78860],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78862,78863],{},[3699,78864],{"alt":57,"src":78865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78867,78868],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[265,78870,78872],{"id":78871},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78874,78875],{},"堆栈空间分配区别：",[26,78877,78878,78881],{},[29,78879,78880],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[29,78882,78883],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78885,78886],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[24137,78888,78890],{"id":78889},"_4221-引用计数","4.2.2.1 引用计数",[19,78892,78893],{},[3699,78894],{"alt":57,"src":78895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78897,78898],{},[3699,78899],{"alt":57,"src":78900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78902,78903],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[24137,78905,78907],{"id":78906},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78909,78910],{},[3699,78911],{"alt":57,"src":78912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78914,78915],{},[3699,78916],{"alt":57,"src":78917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78919,78920],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78922,78924],{"id":78923},"_43-闭包","4.3 闭包",[19,78926,78927],{},[3699,78928],{"alt":57,"src":78929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78931,78932],{},"闭包：内层函数+外层函数的变量",[19,78934,78935],{},[3699,78936],{"alt":57,"src":78937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78939,78940],{},"closure就是闭包",[19,78942,78943],{},[3699,78944],{"alt":57,"src":78945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78947,78948],{},"内层函数必须包含外层函数的变量才是闭包",[19,78950,78951],{},[3699,78952],{"alt":57,"src":78953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78955,78956],{},[3699,78957],{"alt":57,"src":78958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78960,78961],{},"闭包可能会引起内存泄漏",[19,78963,78964],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78966,78968],{"id":78967},"_44-变量提升","4.4 变量提升",[19,78970,78971],{},[3699,78972],{"alt":57,"src":78973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78975,78976],{},[3699,78977],{"alt":57,"src":78978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78980,78981],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78983,78985],{"id":78984},"_45-函数进阶","4.5 函数进阶",[265,78987,78989],{"id":78988},"_451-函数提升","4.5.1 函数提升",[19,78991,78992],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78994,78995],{},"只提升函数声明，不提升函数调用",[53926,78997,78998],{},"\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",[265,79000,79002],{"id":79001},"_452-函数参数","4.5.2 函数参数",[24137,79004,79006],{"id":79005},"_4521-动态参数","4.5.2.1 动态参数",[19,79008,79009],{},[3699,79010],{"alt":57,"src":79011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,79013,79014],{},[3699,79015],{"alt":57,"src":79016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,79018,79019],{},"箭头函数里边没有arguments",[24137,79021,79023],{"id":79022},"_4522-剩余参数","4.5.2.2 剩余参数",[19,79025,79026],{},[3699,79027],{"alt":57,"src":79028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,79030,79031],{},[3699,79032],{"alt":57,"src":79033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,79035,79036],{},"剩余参数使用的时候不需要写...",[19,79038,79039],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,79041,79042],{},"  function getSum(a,b,...arr) {",[19,79044,79045],{},"  console.log(11)",[19,79047,79048],{},"  }",[19,79050,79051],{},"  getSum(1,2,3,4)",[19,79053,79054],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,79056,79057],{},"  getSum(1,2)",[19,79059,79060],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,79062,79063],{},[3699,79064],{"alt":57,"src":79065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[24137,79067,79069],{"id":79068},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,79071,79072],{},[3699,79073],{"alt":57,"src":79074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,79076,79077],{},[3699,79078],{"alt":57,"src":79079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,79081,79082],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,79084,79085],{},"展开运算符可以用于数组之间的合并：",[19,79087,79088],{},"const arr1 = [1, 2, 3]",[19,79090,79091],{},"const arr2 = [3, 4, 5]",[19,79093,79094],{},"const arr = [...arr1, ...arr2]",[19,79096,79097],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,79099,79100],{},"剩余参数：函数参数使用，得到真数组",[19,79102,79103],{},"展开运算符：数组中使用，数组展开",[265,79105,79107],{"id":79106},"_453-箭头函数","4.5.3 箭头函数",[24137,79109,79111],{"id":79110},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,79113,79114],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,79116,79117],{},"它不是万能的！！！",[19,79119,79120],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,79122,79123],{},[3699,79124],{"alt":57,"src":79125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,79127,2415],{},[19,79129,79130],{},"① 只有一个形参的时候，可以省略小括号：",[19,79132,79133],{},"const fn=x=>{console.log(x)}",[19,79135,79136],{},"② 只有一行代码时可以省略大括号：",[19,79138,79139],{},"const fn=x=>console.log(11)",[19,79141,79142],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,79144,79145],{},"const fn=x=>x+x",[19,79147,79148],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,79150,79151],{},"⑤ 阻止表单默认提交：",[19,79153,79154],{},"const form = document.querySelector('form')",[19,79156,79157],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,79159,79160],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,79162,79163],{},"const fn=uname=>({uname:uname})",[19,79165,79166],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,79168,79169],{},[3699,79170],{"alt":57,"src":79171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,79173,79174],{},[3699,79175],{"alt":57,"src":79176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,79178,79179],{},[3699,79180],{"alt":57,"src":79181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,79183,79184],{},"一定不要忘记用()，有()就理解为自带return",[24137,79186,79188],{"id":79187},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,79190,79191],{},"箭头函数是没有动态参数的arguments",[19,79193,79194],{},[3699,79195],{"alt":57,"src":79196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[24137,79198,79200],{"id":79199},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,79202,13496],{},[26,79204,79205,79208,79211],{},[29,79206,79207],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[29,79209,79210],{},"事件回调函数使用箭头函数时，this 为全局的 window",[29,79212,79213],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,79215,79216],{},[3699,79217],{"alt":57,"src":79218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[51,79220,79222],{"className":383,"code":79221,"language":385,"meta":57,"style":57},"  \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",[59,79223,79224,79232,79237,79242,79247,79252,79257,79261,79266,79270,79274,79279,79284,79289,79293,79297,79302,79307,79312],{"__ignoreMap":57},[79,79225,79226,79228,79230],{"class":81,"line":82},[79,79227,54257],{"class":239},[79,79229,53926],{"class":395},[79,79231,53420],{"class":239},[79,79233,79234],{"class":81,"line":167},[79,79235,79236],{"class":239},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[79,79238,79239],{"class":81,"line":178},[79,79240,79241],{"class":239},"    console.log(this) \u002F\u002F指向window\n",[79,79243,79244],{"class":81,"line":457},[79,79245,79246],{"class":239},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[79,79248,79249],{"class":81,"line":462},[79,79250,79251],{"class":239},"    function fn() {\n",[79,79253,79254],{"class":81,"line":474},[79,79255,79256],{"class":239},"      console.log(this)  \u002F\u002F指向window\n",[79,79258,79259],{"class":81,"line":480},[79,79260,4402],{"class":239},[79,79262,79263],{"class":81,"line":486},[79,79264,79265],{"class":239},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[79,79267,79268],{"class":81,"line":491},[79,79269,454],{"emptyLinePlaceholder":453},[79,79271,79272],{"class":81,"line":497},[79,79273,73631],{"class":239},[79,79275,79276],{"class":81,"line":503},[79,79277,79278],{"class":239},"      name: 'andy',\n",[79,79280,79281],{"class":81,"line":509},[79,79282,79283],{"class":239},"      sayHai: function () {\n",[79,79285,79286],{"class":81,"line":514},[79,79287,79288],{"class":239},"        console.log(this)\n",[79,79290,79291],{"class":81,"line":520},[79,79292,54510],{"class":239},[79,79294,79295],{"class":81,"line":526},[79,79296,4402],{"class":239},[79,79298,79299],{"class":81,"line":532},[79,79300,79301],{"class":239},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[79,79303,79304],{"class":81,"line":537},[79,79305,79306],{"class":239},"    \u002F\u002F 2.箭头函数的this\n",[79,79308,79309],{"class":81,"line":543},[79,79310,79311],{"class":239},"    const fn = () => console.log(this)\n",[79,79313,79314,79316,79318],{"class":81,"line":549},[79,79315,54529],{"class":239},[79,79317,53926],{"class":395},[79,79319,53420],{"class":239},[19,79321,79322],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,79324,79325],{},"const fn = () => console.log(this)",[19,79327,79328],{},"fn() \u002F\u002F指向window",[19,79330,79331],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,79333,79334],{},"①",[19,79336,79337],{},"const obj = {",[19,79339,79340],{},"uname: 'pink老师',",[19,79342,79343],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,79345,700],{},[19,79347,79348],{},"调用对象里边的函数",[19,79350,79351],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79353,79354],{},"obj.sayHai()",[19,79356,79357],{},"②",[19,79359,79360],{},"const obj1 = {",[19,79362,79340],{},[19,79364,79365],{},"sayHai: function () {",[19,79367,79368],{},"let i = 10",[19,79370,79371],{},"const count = () => {",[19,79373,79374],{},"console.log(this)",[19,79376,79377],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79379,79380],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79382,700],{},[19,79384,79385],{},"count()",[19,79387,700],{},[19,79389,700],{},[19,79391,79392],{},"obj1.sayHai()",[14,79394,79396],{"id":79395},"_46-解构赋值","4.6 解构赋值",[265,79398,79400],{"id":79399},"_461-数组解构","4.6.1 数组解构",[19,79402,79403],{},"以前要是使用数组中的值的话：",[19,79405,79406],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79408,79409],{},"const arr=[100,60,80]",[19,79411,79412],{},"const max=arr[0]",[19,79414,79415],{},"const min=arr[1]",[19,79417,79418],{},"const avg=arr[2]",[19,79420,79421],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79423,79424],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79426,79427],{},"这个写法就类似于上边的那种用很多const的方法",[19,79429,79430],{},[3699,79431],{"alt":57,"src":79432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[51,79434,79436],{"className":52747,"code":79435,"language":52749,"meta":57,"style":57},"①变量之间交换值:\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",[59,79437,79438,79443,79448,79453,79458,79463,79467,79471,79476,79480,79485,79490,79494,79499,79504,79515,79525,79530,79535,79540,79544,79548],{"__ignoreMap":57},[79,79439,79440],{"class":81,"line":82},[79,79441,79442],{"class":239},"①变量之间交换值:\n",[79,79444,79445],{"class":81,"line":167},[79,79446,79447],{"class":239},"let a=1\n",[79,79449,79450],{"class":81,"line":178},[79,79451,79452],{"class":239},"let b=2;\n",[79,79454,79455],{"class":81,"line":457},[79,79456,79457],{"class":239},"必须加这行代码，不然就会报错\n",[79,79459,79460],{"class":81,"line":462},[79,79461,79462],{"class":239},"[b,a]=[a,b]\n",[79,79464,79465],{"class":81,"line":474},[79,79466,454],{"emptyLinePlaceholder":453},[79,79468,79469],{"class":81,"line":480},[79,79470,454],{"emptyLinePlaceholder":453},[79,79472,79473],{"class":81,"line":486},[79,79474,79475],{"class":239},"可以写成下面的方式：\n",[79,79477,79478],{"class":81,"line":491},[79,79479,79447],{"class":239},[79,79481,79482],{"class":81,"line":497},[79,79483,79484],{"class":239},"let b=2\n",[79,79486,79487],{"class":81,"line":503},[79,79488,79489],{"class":239},";[b,a]=[a,b]\n",[79,79491,79492],{"class":81,"line":509},[79,79493,454],{"emptyLinePlaceholder":453},[79,79495,79496],{"class":81,"line":514},[79,79497,79498],{"class":239},"②排序\n",[79,79500,79501],{"class":81,"line":520},[79,79502,79503],{"class":239},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[79,79505,79506,79509,79512],{"class":81,"line":526},[79,79507,79508],{"class":239},"for (let i = 0; i ",[79,79510,392],{"class":79511},"s7hpK",[79,79513,79514],{"class":239}," arr1.length; i++) {\n",[79,79516,79517,79520,79522],{"class":81,"line":532},[79,79518,79519],{"class":239},"   for (let j = 0; j ",[79,79521,392],{"class":79511},[79,79523,79524],{"class":239}," arr1.length - 1; j++) {\n",[79,79526,79527],{"class":81,"line":537},[79,79528,79529],{"class":239},"      if (arr1[j] > arr1[j + 1]) {\n",[79,79531,79532],{"class":81,"line":543},[79,79533,79534],{"class":239},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[79,79536,79537],{"class":81,"line":549},[79,79538,79539],{"class":239},"       }\n",[79,79541,79542],{"class":81,"line":555},[79,79543,6509],{"class":239},[79,79545,79546],{"class":81,"line":561},[79,79547,3801],{"class":239},[79,79549,79550],{"class":81,"line":567},[79,79551,79552],{"class":239},"console.log(arr1)\n",[19,79554,79555],{},"数组解构的细节：",[19,79557,79558],{},"①变量多，单元值少",[19,79560,79561],{},[3699,79562],{"alt":57,"src":79563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79565,79566],{},"防止出现undefined的方法：",[19,79568,79569],{},"const [a=0,b=0] =[1]",[19,79571,79572],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79574,79575],{},"②变量少，单元值多",[19,79577,79578],{},[3699,79579],{"alt":57,"src":79580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79582,79583],{},"此时可以使用剩余参数来接收多余的值",[19,79585,79586],{},"const [a,b,...c]=[1,2,3,4]",[19,79588,79589],{},"console.log(c) 输出[3,4]",[19,79591,79592],{},"③可以按需导入，忽略某些返回值",[19,79594,79595],{},[3699,79596],{"alt":57,"src":79597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79599,79600],{},"④支持多维数组的结构",[51,79602,79606],{"className":79603,"code":79604,"language":79605,"meta":57,"style":57},"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",[59,79607,79608,79636,79652,79667,79682],{"__ignoreMap":57},[79,79609,79610,79612,79614,79616,79618,79620,79622,79624,79627,79629,79631,79633],{"class":81,"line":82},[79,79611,8986],{"class":243},[79,79613,53946],{"class":239},[79,79615,244],{"class":243},[79,79617,54339],{"class":239},[79,79619,1072],{"class":96},[79,79621,1060],{"class":239},[79,79623,1049],{"class":96},[79,79625,79626],{"class":239},", [",[79,79628,1188],{"class":96},[79,79630,1060],{"class":239},[79,79632,2668],{"class":96},[79,79634,79635],{"class":239},"]]\n",[79,79637,79638,79641,79643,79645,79647,79649],{"class":81,"line":167},[79,79639,79640],{"class":239},"console.",[79,79642,60357],{"class":85},[79,79644,6053],{"class":239},[79,79646,1030],{"class":96},[79,79648,6416],{"class":239},[79,79650,79651],{"class":2440},"  \u002F\u002F1\n",[79,79653,79654,79656,79658,79660,79662,79664],{"class":81,"line":178},[79,79655,79640],{"class":239},[79,79657,60357],{"class":85},[79,79659,6053],{"class":239},[79,79661,1072],{"class":96},[79,79663,6416],{"class":239},[79,79665,79666],{"class":2440},"  \u002F\u002F2\n",[79,79668,79669,79671,79673,79675,79677,79679],{"class":81,"line":457},[79,79670,79640],{"class":239},[79,79672,60357],{"class":85},[79,79674,6053],{"class":239},[79,79676,1049],{"class":96},[79,79678,6416],{"class":239},[79,79680,79681],{"class":2440},"  \u002F\u002F[3,4]\n",[79,79683,79684,79686,79688,79690,79692,79694,79696,79698],{"class":81,"line":462},[79,79685,79640],{"class":239},[79,79687,60357],{"class":85},[79,79689,6053],{"class":239},[79,79691,1049],{"class":96},[79,79693,7099],{"class":239},[79,79695,1030],{"class":96},[79,79697,6416],{"class":239},[79,79699,79700],{"class":2440},"  \u002F\u002F3\n",[51,79702,79704],{"className":79603,"code":79703,"language":79605,"meta":57,"style":57},"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",[59,79705,79706,79733,79744,79755],{"__ignoreMap":57},[79,79707,79708,79710,79713,79715,79717,79719,79721,79723,79725,79727,79729,79731],{"class":81,"line":82},[79,79709,8986],{"class":243},[79,79711,79712],{"class":239}," [a, b, c] ",[79,79714,244],{"class":243},[79,79716,54339],{"class":239},[79,79718,1072],{"class":96},[79,79720,1060],{"class":239},[79,79722,1049],{"class":96},[79,79724,79626],{"class":239},[79,79726,1188],{"class":96},[79,79728,1060],{"class":239},[79,79730,2668],{"class":96},[79,79732,79635],{"class":239},[79,79734,79735,79737,79739,79742],{"class":81,"line":167},[79,79736,79640],{"class":239},[79,79738,60357],{"class":85},[79,79740,79741],{"class":239},"(a)",[79,79743,79651],{"class":2440},[79,79745,79746,79748,79750,79753],{"class":81,"line":178},[79,79747,79640],{"class":239},[79,79749,60357],{"class":85},[79,79751,79752],{"class":239},"(b)",[79,79754,79666],{"class":2440},[79,79756,79757,79759,79761,79764],{"class":81,"line":457},[79,79758,79640],{"class":239},[79,79760,60357],{"class":85},[79,79762,79763],{"class":239},"(c)",[79,79765,79681],{"class":2440},[51,79767,79769],{"className":79603,"code":79768,"language":79605,"meta":57,"style":57},"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",[59,79770,79771,79798,79808,79818,79828],{"__ignoreMap":57},[79,79772,79773,79775,79778,79780,79782,79784,79786,79788,79790,79792,79794,79796],{"class":81,"line":82},[79,79774,8986],{"class":243},[79,79776,79777],{"class":239}," [a, b, [c, d]] ",[79,79779,244],{"class":243},[79,79781,54339],{"class":239},[79,79783,1072],{"class":96},[79,79785,1060],{"class":239},[79,79787,1049],{"class":96},[79,79789,79626],{"class":239},[79,79791,1188],{"class":96},[79,79793,1060],{"class":239},[79,79795,2668],{"class":96},[79,79797,79635],{"class":239},[79,79799,79800,79802,79804,79806],{"class":81,"line":167},[79,79801,79640],{"class":239},[79,79803,60357],{"class":85},[79,79805,79741],{"class":239},[79,79807,79651],{"class":2440},[79,79809,79810,79812,79814,79816],{"class":81,"line":178},[79,79811,79640],{"class":239},[79,79813,60357],{"class":85},[79,79815,79752],{"class":239},[79,79817,79666],{"class":2440},[79,79819,79820,79822,79824,79826],{"class":81,"line":457},[79,79821,79640],{"class":239},[79,79823,60357],{"class":85},[79,79825,79763],{"class":239},[79,79827,79700],{"class":2440},[79,79829,79830,79832,79834,79837],{"class":81,"line":462},[79,79831,79640],{"class":239},[79,79833,60357],{"class":85},[79,79835,79836],{"class":239},"(d)",[79,79838,79839],{"class":2440},"  \u002F\u002F4\n",[265,79841,79843],{"id":79842},"_462-对象解构","4.6.2 对象解构",[19,79845,79846],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79848,79849],{},"用的非常非常多！！！！！！",[24137,79851,79853],{"id":79852},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79855,79856],{},"基本语法：",[26,79858,79859,79862,79865,79868],{},[29,79860,79861],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[29,79863,79864],{},"对象属性的值将被赋值给与属性名相同的变量",[29,79866,79867],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[29,79869,79870],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[51,79872,79874],{"className":52747,"code":79873,"language":52749,"meta":57,"style":57},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[59,79875,79876,79881,79886,79891,79895],{"__ignoreMap":57},[79,79877,79878],{"class":81,"line":82},[79,79879,79880],{"class":239},"const obj = {\n",[79,79882,79883],{"class":81,"line":167},[79,79884,79885],{"class":239},"   uname: 'pink老师',\n",[79,79887,79888],{"class":81,"line":178},[79,79889,79890],{"class":239},"   age: 18,\n",[79,79892,79893],{"class":81,"line":457},[79,79894,3801],{"class":239},[79,79896,79897],{"class":81,"line":462},[79,79898,79899],{"class":239},"const { uname, age } = obj\n",[19,79901,79902],{},"上方代码这样写等价于：",[19,79904,79905],{},"const uname等价于obj.uname",[19,79907,79908],{},"变量名可以重新改名：",[19,79910,79911],{},"const uname='red老师'",[19,79913,79914],{},"const user={",[19,79916,79917],{},"  uname:'pink老师',",[19,79919,79920],{},"  age:18",[19,79922,700],{},[19,79924,79925],{},"const {uname,age}=user",[19,79927,79928],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79930,79931],{},"const {旧变量名：新变量名}=对象",[19,79933,79934],{},"const {uname:username,age}=user",[24137,79936,79938],{"id":79937},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79940,79941],{},[3699,79942],{"alt":57,"src":79943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[24137,79945,79947],{"id":79946},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79949,79950],{},[3699,79951],{"alt":57,"src":79952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[51,79954,79956],{"className":383,"code":79955,"language":385,"meta":57,"style":57},"  \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",[59,79957,79958,79966,79971,79976,79981,79986,79991,79996,80001,80006,80010,80015,80020],{"__ignoreMap":57},[79,79959,79960,79962,79964],{"class":81,"line":82},[79,79961,54257],{"class":239},[79,79963,53926],{"class":395},[79,79965,53420],{"class":239},[79,79967,79968],{"class":81,"line":167},[79,79969,79970],{"class":239},"    const pig = {\n",[79,79972,79973],{"class":81,"line":178},[79,79974,79975],{"class":239},"      name: '佩奇',\n",[79,79977,79978],{"class":81,"line":457},[79,79979,79980],{"class":239},"      family: {\n",[79,79982,79983],{"class":81,"line":462},[79,79984,79985],{"class":239},"        mother: '猪妈妈',\n",[79,79987,79988],{"class":81,"line":474},[79,79989,79990],{"class":239},"        father: '猪爸爸',\n",[79,79992,79993],{"class":81,"line":480},[79,79994,79995],{"class":239},"        sister: '乔治'\n",[79,79997,79998],{"class":81,"line":486},[79,79999,80000],{"class":239},"      },\n",[79,80002,80003],{"class":81,"line":491},[79,80004,80005],{"class":239},"      age: 6\n",[79,80007,80008],{"class":81,"line":497},[79,80009,4402],{"class":239},[79,80011,80012],{"class":81,"line":503},[79,80013,80014],{"class":239},"    \u002F\u002F 多级对象解构\n",[79,80016,80017],{"class":81,"line":509},[79,80018,80019],{"class":239},"    const { name, family: { mother, father, sister }, age } = pig\n",[79,80021,80022,80024,80026],{"class":81,"line":514},[79,80023,54529],{"class":239},[79,80025,53926],{"class":395},[79,80027,53420],{"class":239},[19,80029,80030],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[51,80032,80035],{"className":80033,"code":80034,"language":78555,"meta":57,"style":57},"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",[59,80036,80037,80042,80053,80065,80077,80086,80090,80101,80113,80123,80128,80132,80142,80153,80162,80166,80170,80181,80192,80201,80205,80210],{"__ignoreMap":57},[79,80038,80039],{"class":81,"line":82},[79,80040,80041],{"class":2440},"    \u002F\u002F 这是后台传递过来的数据\n",[79,80043,80044,80046,80049,80051],{"class":81,"line":167},[79,80045,13385],{"class":243},[79,80047,80048],{"class":239}," msg ",[79,80050,244],{"class":243},[79,80052,17732],{"class":239},[79,80054,80055,80058,80060,80063],{"class":81,"line":178},[79,80056,80057],{"class":89},"      \"code\"",[79,80059,3232],{"class":243},[79,80061,80062],{"class":96}," 200",[79,80064,33585],{"class":239},[79,80066,80067,80070,80072,80075],{"class":81,"line":457},[79,80068,80069],{"class":89},"      \"msg\"",[79,80071,3232],{"class":243},[79,80073,80074],{"class":89}," \"获取新闻列表成功\"",[79,80076,33585],{"class":239},[79,80078,80079,80082,80084],{"class":81,"line":462},[79,80080,80081],{"class":89},"      \"data\"",[79,80083,3232],{"class":243},[79,80085,57557],{"class":239},[79,80087,80088],{"class":81,"line":474},[79,80089,4723],{"class":239},[79,80091,80092,80095,80097,80099],{"class":81,"line":480},[79,80093,80094],{"class":89},"          \"id\"",[79,80096,3232],{"class":243},[79,80098,27253],{"class":96},[79,80100,33585],{"class":239},[79,80102,80103,80106,80108,80111],{"class":81,"line":486},[79,80104,80105],{"class":89},"          \"title\"",[79,80107,3232],{"class":243},[79,80109,80110],{"class":89}," \"5G商用自己，三大运用商收入下降\"",[79,80112,33585],{"class":239},[79,80114,80115,80118,80120],{"class":81,"line":491},[79,80116,80117],{"class":89},"          \"count\"",[79,80119,3232],{"class":243},[79,80121,80122],{"class":96}," 58\n",[79,80124,80125],{"class":81,"line":497},[79,80126,80127],{"class":239},"        },\n",[79,80129,80130],{"class":81,"line":503},[79,80131,4723],{"class":239},[79,80133,80134,80136,80138,80140],{"class":81,"line":509},[79,80135,80094],{"class":89},[79,80137,3232],{"class":243},[79,80139,16916],{"class":96},[79,80141,33585],{"class":239},[79,80143,80144,80146,80148,80151],{"class":81,"line":514},[79,80145,80105],{"class":89},[79,80147,3232],{"class":243},[79,80149,80150],{"class":89}," \"国际媒体头条速览\"",[79,80152,33585],{"class":239},[79,80154,80155,80157,80159],{"class":81,"line":520},[79,80156,80117],{"class":89},[79,80158,3232],{"class":243},[79,80160,80161],{"class":96}," 56\n",[79,80163,80164],{"class":81,"line":526},[79,80165,80127],{"class":239},[79,80167,80168],{"class":81,"line":532},[79,80169,4723],{"class":239},[79,80171,80172,80174,80176,80179],{"class":81,"line":537},[79,80173,80094],{"class":89},[79,80175,3232],{"class":243},[79,80177,80178],{"class":96}," 3",[79,80180,33585],{"class":239},[79,80182,80183,80185,80187,80190],{"class":81,"line":543},[79,80184,80105],{"class":89},[79,80186,3232],{"class":243},[79,80188,80189],{"class":89}," \"乌克兰和俄罗斯持续冲突\"",[79,80191,33585],{"class":239},[79,80193,80194,80196,80198],{"class":81,"line":549},[79,80195,80117],{"class":89},[79,80197,3232],{"class":243},[79,80199,80200],{"class":96}," 1669\n",[79,80202,80203],{"class":81,"line":555},[79,80204,80127],{"class":239},[79,80206,80207],{"class":81,"line":561},[79,80208,80209],{"class":239},"      ]\n",[79,80211,80212],{"class":81,"line":567},[79,80213,4402],{"class":239},[19,80215,80216],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,80218,80219],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,80221,80222],{},"\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,80224,80225],{},"function({data}) {",[19,80227,80228],{},"console.log(data)",[19,80230,700],{},[19,80232,80233],{},"render(msg)",[19,80235,80236],{},"实参传递给形参的时候解构了",[19,80238,80239],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,80241,80242],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,80244,80245],{},"function render({data:mydata}) {",[19,80247,80248],{},"  console.log(data)",[19,80250,700],{},[265,80252,80254],{"id":80253},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,80256,80257],{},"有两种情况：一个是数组结构，一个是立即执行函数",[26,80259,80260],{},[29,80261,80262],{},"如果对一个数组进行遍历，有两种方式：",[19,80264,80265],{},"①法1",[19,80267,80268],{},"const arr=[1,2,3]",[19,80270,80271],{},"arr.map(function(item,index) {",[19,80273,80274],{},"  console.log(item)",[19,80276,54576],{},[19,80278,80279],{},[3699,80280],{"alt":57,"src":80281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,80283,80284],{},"②法2",[19,80286,80287],{},"const str='pink'",[19,80289,80290],{},"[1,2,3].map(function(item,index) {",[19,80292,80293],{},"console.log(item)",[19,80295,54576],{},[19,80297,80298],{},[3699,80299],{"alt":57,"src":80300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,80302,80303],{},"此时会报错",[19,80305,80306],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,80308,80293],{},[19,80310,54576],{},[19,80312,80313],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80315,80317],{"id":80316},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,80319,80320],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,80322,80323],{},"可以理解为加强版的for循环",[19,80325,80326],{},[3699,80327],{"alt":57,"src":80328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,80330,80331],{},"里边不写return，不返回数组，只遍历不返回",[19,80333,80334],{},"map是返回数组",[19,80336,80337],{},"forEach主要用于遍历数组对象",[51,80339,80341],{"className":383,"code":80340,"language":385,"meta":57,"style":57},"  \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",[59,80342,80343,80351,80356,80361,80366,80371,80375,80380],{"__ignoreMap":57},[79,80344,80345,80347,80349],{"class":81,"line":82},[79,80346,54257],{"class":239},[79,80348,53926],{"class":395},[79,80350,53420],{"class":239},[79,80352,80353],{"class":81,"line":167},[79,80354,80355],{"class":239},"    const arr = ['red', 'green', 'pink']\n",[79,80357,80358],{"class":81,"line":178},[79,80359,80360],{"class":239},"    const result = arr.forEach(function (item, index) {\n",[79,80362,80363],{"class":81,"line":457},[79,80364,80365],{"class":239},"      console.log(item)\n",[79,80367,80368],{"class":81,"line":462},[79,80369,80370],{"class":239},"      console.log(index)\n",[79,80372,80373],{"class":81,"line":474},[79,80374,35576],{"class":239},[79,80376,80377],{"class":81,"line":480},[79,80378,80379],{"class":239},"    console.log(result)\n",[79,80381,80382,80384,80386],{"class":81,"line":486},[79,80383,54529],{"class":239},[79,80385,53926],{"class":395},[79,80387,53420],{"class":239},[19,80389,80390],{},[3699,80391],{"alt":57,"src":80392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80394,80396],{"id":80395},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80398,80399],{},[3699,80400],{"alt":57,"src":80401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80403,80404],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[51,80406,80408],{"className":383,"code":80407,"language":385,"meta":57,"style":57},"\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",[59,80409,80410,80418,80426,80431,80436,80440,80444,80449,80453,80458,80466],{"__ignoreMap":57},[79,80411,80412,80414,80416],{"class":81,"line":82},[79,80413,392],{"class":239},[79,80415,53913],{"class":395},[79,80417,53420],{"class":239},[79,80419,80420,80422,80424],{"class":81,"line":167},[79,80421,54257],{"class":239},[79,80423,53926],{"class":395},[79,80425,53420],{"class":239},[79,80427,80428],{"class":81,"line":178},[79,80429,80430],{"class":239},"    const arr = [10, 20, 30]\n",[79,80432,80433],{"class":81,"line":457},[79,80434,80435],{"class":239},"    const newArr = arr.filter(function (item, index) {\n",[79,80437,80438],{"class":81,"line":462},[79,80439,80365],{"class":239},[79,80441,80442],{"class":81,"line":474},[79,80443,80370],{"class":239},[79,80445,80446],{"class":81,"line":480},[79,80447,80448],{"class":239},"      return item >= 20\n",[79,80450,80451],{"class":81,"line":486},[79,80452,35576],{"class":239},[79,80454,80455],{"class":81,"line":491},[79,80456,80457],{"class":239},"    console.log(newArr)\n",[79,80459,80460,80462,80464],{"class":81,"line":497},[79,80461,54529],{"class":239},[79,80463,53926],{"class":395},[79,80465,53420],{"class":239},[79,80467,80468,80470,80472],{"class":81,"line":503},[79,80469,53898],{"class":239},[79,80471,53913],{"class":395},[79,80473,53420],{"class":239},[19,80475,80476],{},"这个也可以写成箭头函数：",[51,80478,80480],{"className":52747,"code":80479,"language":52749,"meta":57,"style":57},"const newArr = arr.filter(item => item >= 20)\n",[59,80481,80482],{"__ignoreMap":57},[79,80483,80484],{"class":81,"line":82},[79,80485,80479],{"class":239},[14,80487,80489],{"id":80488},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80491,80492],{},[3699,80493],{"alt":57,"src":80494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80496,80497],{},"步骤：",[19,80499,80500],{},"①：渲染页面模块",[3377,80502,80503,80506],{},[29,80504,80505],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[29,80507,80508],{},"用forEach+字符串的形式",[19,80510,80511],{},"②：点击不同需求，显示不同页面内容",[3377,80513,80514,80517,80520,80523,80526],{},[29,80515,80516],{},"点击采取事件委托方式 .filter",[29,80518,80519],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[29,80521,80522],{},"筛选条件是根据点击的 data-index 来判断",[29,80524,80525],{},"可以使用对象解构，把事件对象解构",[29,80527,80528],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[51,80530,80532],{"className":52747,"code":80531,"language":52749,"meta":57,"style":57},"\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",[59,80533,80534,80544,80558,80562,80570,80584,80604,80616,80624,80630,80640,80650,80660,80664,80668,80674,80687,80699,80709,80721,80725,80729,80736,80749,80761,80778,80796,80809,80813,80817,80829,80839,80843,80847,80854,80895,80922,80932,80936,80940,80948,80960,80964,80968,80976,80988,81000,81011,81015,81019,81028,81040,81051,81055,81059,81068,81080,81092,81096,81100,81107,81117,81129,81141,81156,81160,81164,81172,81188,81198,81208,81218,81230,81234,81238,81248,81259,81269,81273,81281,81289,81293,81301,81316,81342,81367,81392,81411,81419,81433,81438,81443,81448,81453,81458,81466,81474,81479,81490,81495,81505,81515,81525,81535,81539,81543,81552,81561,81570,81579,81583,81587,81596,81605,81614,81623,81627,81631,81640,81649,81658,81667,81671,81675,81684,81693,81702,81711,81715,81719,81728,81737,81746,81755,81759,81763,81772,81781,81790,81799,81803,81807,81816,81825,81833,81842,81846,81850,81854,81859,81871,81876,81888,81892,81909,81936,81945,81950,81960,81970,81979,81984,81989,81993,81998,82015,82019,82024,82032,82037,82064,82069,82089,82094,82106,82111,82116,82121,82132,82146,82183,82201,82234,82251,82275,82279,82284,82290,82294,82298,82302,82310,82318,82322],{"__ignoreMap":57},[79,80535,80536,80538,80540,80542],{"class":81,"line":82},[79,80537,53411],{"class":239},[79,80539,53414],{"class":395},[79,80541,53417],{"class":85},[79,80543,53420],{"class":239},[79,80545,80546,80548,80550,80552,80554,80556],{"class":81,"line":167},[79,80547,392],{"class":239},[79,80549,52749],{"class":395},[79,80551,53429],{"class":85},[79,80553,244],{"class":239},[79,80555,53434],{"class":89},[79,80557,53420],{"class":239},[79,80559,80560],{"class":81,"line":178},[79,80561,454],{"emptyLinePlaceholder":453},[79,80563,80564,80566,80568],{"class":81,"line":457},[79,80565,392],{"class":239},[79,80567,53447],{"class":395},[79,80569,53420],{"class":239},[79,80571,80572,80574,80576,80578,80580,80582],{"class":81,"line":462},[79,80573,54257],{"class":239},[79,80575,53457],{"class":395},[79,80577,53460],{"class":85},[79,80579,244],{"class":239},[79,80581,53465],{"class":89},[79,80583,53420],{"class":239},[79,80585,80586,80588,80590,80592,80594,80596,80598,80600,80602],{"class":81,"line":474},[79,80587,54257],{"class":239},[79,80589,53457],{"class":395},[79,80591,2238],{"class":85},[79,80593,244],{"class":239},[79,80595,53504],{"class":89},[79,80597,53484],{"class":85},[79,80599,244],{"class":239},[79,80601,53511],{"class":89},[79,80603,53420],{"class":239},[79,80605,80606,80608,80610,80612,80614],{"class":81,"line":480},[79,80607,54257],{"class":239},[79,80609,53520],{"class":395},[79,80611,53523],{"class":239},[79,80613,53520],{"class":395},[79,80615,53420],{"class":239},[79,80617,80618,80620,80622],{"class":81,"line":486},[79,80619,54257],{"class":239},[79,80621,2287],{"class":395},[79,80623,53420],{"class":239},[79,80625,80626,80628],{"class":81,"line":491},[79,80627,8598],{"class":395},[79,80629,17732],{"class":239},[79,80631,80632,80634,80636,80638],{"class":81,"line":497},[79,80633,56805],{"class":96},[79,80635,53550],{"class":239},[79,80637,1030],{"class":96},[79,80639,3531],{"class":239},[79,80641,80642,80644,80646,80648],{"class":81,"line":503},[79,80643,56816],{"class":96},[79,80645,53550],{"class":239},[79,80647,1030],{"class":96},[79,80649,3531],{"class":239},[79,80651,80652,80654,80656,80658],{"class":81,"line":509},[79,80653,74704],{"class":96},[79,80655,53550],{"class":239},[79,80657,62615],{"class":96},[79,80659,3531],{"class":239},[79,80661,80662],{"class":81,"line":514},[79,80663,4402],{"class":239},[79,80665,80666],{"class":81,"line":520},[79,80667,454],{"emptyLinePlaceholder":453},[79,80669,80670,80672],{"class":81,"line":526},[79,80671,64233],{"class":85},[79,80673,17732],{"class":239},[79,80675,80676,80678,80680,80683,80685],{"class":81,"line":532},[79,80677,56881],{"class":96},[79,80679,53550],{"class":239},[79,80681,80682],{"class":96},"990",[79,80684,53605],{"class":243},[79,80686,3531],{"class":239},[79,80688,80689,80691,80693,80695,80697],{"class":81,"line":537},[79,80690,56816],{"class":96},[79,80692,53550],{"class":239},[79,80694,1030],{"class":96},[79,80696,53669],{"class":96},[79,80698,3531],{"class":239},[79,80700,80701,80703,80705,80707],{"class":81,"line":543},[79,80702,57119],{"class":96},[79,80704,53550],{"class":239},[79,80706,53590],{"class":96},[79,80708,3531],{"class":239},[79,80710,80711,80714,80716,80719],{"class":81,"line":549},[79,80712,80713],{"class":96},"      flex-wrap",[79,80715,53550],{"class":239},[79,80717,80718],{"class":96},"wrap",[79,80720,3531],{"class":239},[79,80722,80723],{"class":81,"line":555},[79,80724,4402],{"class":239},[79,80726,80727],{"class":81,"line":561},[79,80728,454],{"emptyLinePlaceholder":453},[79,80730,80731,80734],{"class":81,"line":567},[79,80732,80733],{"class":85},"    .item",[79,80735,17732],{"class":239},[79,80737,80738,80740,80742,80745,80747],{"class":81,"line":573},[79,80739,56881],{"class":96},[79,80741,53550],{"class":239},[79,80743,80744],{"class":96},"240",[79,80746,53605],{"class":243},[79,80748,3531],{"class":239},[79,80750,80751,80753,80755,80757,80759],{"class":81,"line":579},[79,80752,64110],{"class":96},[79,80754,53550],{"class":239},[79,80756,2820],{"class":96},[79,80758,53605],{"class":243},[79,80760,3531],{"class":239},[79,80762,80763,80765,80767,80769,80771,80774,80776],{"class":81,"line":584},[79,80764,56805],{"class":96},[79,80766,53550],{"class":239},[79,80768,3073],{"class":96},[79,80770,53605],{"class":243},[79,80772,80773],{"class":96}," 30",[79,80775,53605],{"class":243},[79,80777,3531],{"class":239},[79,80779,80780,80782,80784,80786,80789,80792,80794],{"class":81,"line":590},[79,80781,63970],{"class":96},[79,80783,53550],{"class":239},[79,80785,30253],{"class":96},[79,80787,80788],{"class":96}," ease",[79,80790,80791],{"class":96}," .5",[79,80793,3068],{"class":243},[79,80795,3531],{"class":239},[79,80797,80798,80801,80803,80805,80807],{"class":81,"line":596},[79,80799,80800],{"class":96},"      margin-bottom",[79,80802,53550],{"class":239},[79,80804,3073],{"class":96},[79,80806,53605],{"class":243},[79,80808,3531],{"class":239},[79,80810,80811],{"class":81,"line":602},[79,80812,4402],{"class":239},[79,80814,80815],{"class":81,"line":608},[79,80816,454],{"emptyLinePlaceholder":453},[79,80818,80819,80822,80824,80827],{"class":81,"line":614},[79,80820,80821],{"class":85},"    .item:nth-child",[79,80823,685],{"class":239},[79,80825,80826],{"class":96},"4n",[79,80828,14605],{"class":239},[79,80830,80831,80833,80835,80837],{"class":81,"line":620},[79,80832,64110],{"class":96},[79,80834,53550],{"class":239},[79,80836,1030],{"class":96},[79,80838,3531],{"class":239},[79,80840,80841],{"class":81,"line":625},[79,80842,4402],{"class":239},[79,80844,80845],{"class":81,"line":630},[79,80846,454],{"emptyLinePlaceholder":453},[79,80848,80849,80852],{"class":81,"line":648},[79,80850,80851],{"class":85},"    .item:hover",[79,80853,17732],{"class":239},[79,80855,80856,80859,80861,80863,80865,80867,80869,80871,80873,80876,80878,80880,80882,80884,80886,80888,80890,80893],{"class":81,"line":659},[79,80857,80858],{"class":96},"      box-shadow",[79,80860,53550],{"class":239},[79,80862,1030],{"class":96},[79,80864,53605],{"class":243},[79,80866,670],{"class":96},[79,80868,53605],{"class":243},[79,80870,4363],{"class":96},[79,80872,53605],{"class":243},[79,80874,80875],{"class":96}," rgba",[79,80877,685],{"class":239},[79,80879,1030],{"class":96},[79,80881,1060],{"class":239},[79,80883,1030],{"class":96},[79,80885,1060],{"class":239},[79,80887,1030],{"class":96},[79,80889,1060],{"class":239},[79,80891,80892],{"class":96},".2",[79,80894,4925],{"class":239},[79,80896,80897,80900,80902,80905,80907,80909,80911,80914,80916,80918,80920],{"class":81,"line":676},[79,80898,80899],{"class":96},"      transform",[79,80901,53550],{"class":239},[79,80903,80904],{"class":96},"translate3d",[79,80906,685],{"class":239},[79,80908,1030],{"class":96},[79,80910,1060],{"class":239},[79,80912,80913],{"class":96},"-4",[79,80915,53605],{"class":243},[79,80917,1060],{"class":239},[79,80919,1030],{"class":96},[79,80921,4925],{"class":239},[79,80923,80924,80926,80928,80930],{"class":81,"line":708},[79,80925,64135],{"class":96},[79,80927,53550],{"class":239},[79,80929,64140],{"class":96},[79,80931,3531],{"class":239},[79,80933,80934],{"class":81,"line":717},[79,80935,4402],{"class":239},[79,80937,80938],{"class":81,"line":722},[79,80939,454],{"emptyLinePlaceholder":453},[79,80941,80942,80944,80946],{"class":81,"line":727},[79,80943,80733],{"class":85},[79,80945,57725],{"class":395},[79,80947,17732],{"class":239},[79,80949,80950,80952,80954,80956,80958],{"class":81,"line":738},[79,80951,56881],{"class":96},[79,80953,53550],{"class":239},[79,80955,2686],{"class":96},[79,80957,1137],{"class":243},[79,80959,3531],{"class":239},[79,80961,80962],{"class":81,"line":753},[79,80963,4402],{"class":239},[79,80965,80966],{"class":81,"line":768},[79,80967,454],{"emptyLinePlaceholder":453},[79,80969,80970,80972,80974],{"class":81,"line":776},[79,80971,80733],{"class":85},[79,80973,64414],{"class":85},[79,80975,17732],{"class":239},[79,80977,80978,80980,80982,80984,80986],{"class":81,"line":781},[79,80979,57032],{"class":96},[79,80981,53550],{"class":239},[79,80983,3023],{"class":96},[79,80985,53605],{"class":243},[79,80987,3531],{"class":239},[79,80989,80990,80992,80994,80996,80998],{"class":81,"line":786},[79,80991,80800],{"class":96},[79,80993,53550],{"class":239},[79,80995,2820],{"class":96},[79,80997,53605],{"class":243},[79,80999,3531],{"class":239},[79,81001,81002,81004,81006,81009],{"class":81,"line":802},[79,81003,59526],{"class":96},[79,81005,53550],{"class":239},[79,81007,81008],{"class":96},"#666",[79,81010,3531],{"class":239},[79,81012,81013],{"class":81,"line":815},[79,81014,4402],{"class":239},[79,81016,81017],{"class":81,"line":828},[79,81018,454],{"emptyLinePlaceholder":453},[79,81020,81021,81023,81026],{"class":81,"line":842},[79,81022,80733],{"class":85},[79,81024,81025],{"class":85}," .price",[79,81027,17732],{"class":239},[79,81029,81030,81032,81034,81036,81038],{"class":81,"line":859},[79,81031,57032],{"class":96},[79,81033,53550],{"class":239},[79,81035,3123],{"class":96},[79,81037,53605],{"class":243},[79,81039,3531],{"class":239},[79,81041,81042,81044,81046,81049],{"class":81,"line":878},[79,81043,59526],{"class":96},[79,81045,53550],{"class":239},[79,81047,81048],{"class":96},"firebrick",[79,81050,3531],{"class":239},[79,81052,81053],{"class":81,"line":883},[79,81054,4402],{"class":239},[79,81056,81057],{"class":81,"line":888},[79,81058,454],{"emptyLinePlaceholder":453},[79,81060,81061,81063,81066],{"class":81,"line":904},[79,81062,80733],{"class":85},[79,81064,81065],{"class":85}," .price::before",[79,81067,17732],{"class":239},[79,81069,81070,81073,81075,81078],{"class":81,"line":919},[79,81071,81072],{"class":96},"      content",[79,81074,53550],{"class":239},[79,81076,81077],{"class":89},"'￥'",[79,81079,3531],{"class":239},[79,81081,81082,81084,81086,81088,81090],{"class":81,"line":930},[79,81083,57032],{"class":96},[79,81085,53550],{"class":239},[79,81087,2922],{"class":96},[79,81089,53605],{"class":243},[79,81091,3531],{"class":239},[79,81093,81094],{"class":81,"line":941},[79,81095,4402],{"class":239},[79,81097,81098],{"class":81,"line":946},[79,81099,454],{"emptyLinePlaceholder":453},[79,81101,81102,81105],{"class":81,"line":969},[79,81103,81104],{"class":85},"    .filter",[79,81106,17732],{"class":239},[79,81108,81109,81111,81113,81115],{"class":81,"line":975},[79,81110,57119],{"class":96},[79,81112,53550],{"class":239},[79,81114,53590],{"class":96},[79,81116,3531],{"class":239},[79,81118,81119,81121,81123,81125,81127],{"class":81,"line":989},[79,81120,56881],{"class":96},[79,81122,53550],{"class":239},[79,81124,80682],{"class":96},[79,81126,53605],{"class":243},[79,81128,3531],{"class":239},[79,81130,81131,81133,81135,81137,81139],{"class":81,"line":1003},[79,81132,56816],{"class":96},[79,81134,53550],{"class":239},[79,81136,1030],{"class":96},[79,81138,53669],{"class":96},[79,81140,3531],{"class":239},[79,81142,81143,81145,81147,81149,81151,81153],{"class":81,"line":1019},[79,81144,56805],{"class":96},[79,81146,53550],{"class":239},[79,81148,3029],{"class":96},[79,81150,53605],{"class":243},[79,81152,80773],{"class":96},[79,81154,81155],{"class":243},"px\n",[79,81157,81158],{"class":81,"line":1024},[79,81159,4402],{"class":239},[79,81161,81162],{"class":81,"line":1067},[79,81163,454],{"emptyLinePlaceholder":453},[79,81165,81166,81168,81170],{"class":81,"line":1101},[79,81167,81104],{"class":85},[79,81169,3635],{"class":395},[79,81171,17732],{"class":239},[79,81173,81174,81176,81178,81180,81182,81184,81186],{"class":81,"line":1106},[79,81175,56805],{"class":96},[79,81177,53550],{"class":239},[79,81179,2820],{"class":96},[79,81181,53605],{"class":243},[79,81183,11134],{"class":96},[79,81185,53605],{"class":243},[79,81187,3531],{"class":239},[79,81189,81190,81192,81194,81196],{"class":81,"line":1112},[79,81191,63831],{"class":96},[79,81193,53550],{"class":239},[79,81195,63928],{"class":96},[79,81197,3531],{"class":239},[79,81199,81200,81202,81204,81206],{"class":81,"line":1124},[79,81201,59526],{"class":96},[79,81203,53550],{"class":239},[79,81205,81008],{"class":96},[79,81207,3531],{"class":239},[79,81209,81210,81212,81214,81216],{"class":81,"line":1129},[79,81211,66080],{"class":96},[79,81213,53550],{"class":239},[79,81215,56847],{"class":96},[79,81217,3531],{"class":239},[79,81219,81220,81222,81224,81226,81228],{"class":81,"line":1150},[79,81221,63860],{"class":96},[79,81223,53550],{"class":239},[79,81225,3073],{"class":96},[79,81227,53605],{"class":243},[79,81229,3531],{"class":239},[79,81231,81232],{"class":81,"line":1161},[79,81233,4402],{"class":239},[79,81235,81236],{"class":81,"line":1175},[79,81237,454],{"emptyLinePlaceholder":453},[79,81239,81240,81242,81244,81246],{"class":81,"line":1194},[79,81241,81104],{"class":85},[79,81243,3635],{"class":395},[79,81245,64010],{"class":85},[79,81247,17732],{"class":239},[79,81249,81250,81252,81254,81257],{"class":81,"line":1211},[79,81251,56994],{"class":96},[79,81253,53550],{"class":239},[79,81255,81256],{"class":96},"#05943c",[79,81258,3531],{"class":239},[79,81260,81261,81263,81265,81267],{"class":81,"line":1228},[79,81262,59526],{"class":96},[79,81264,53550],{"class":239},[79,81266,62952],{"class":96},[79,81268,3531],{"class":239},[79,81270,81271],{"class":81,"line":1246},[79,81272,4402],{"class":239},[79,81274,81275,81277,81279],{"class":81,"line":1251},[79,81276,54529],{"class":239},[79,81278,2287],{"class":395},[79,81280,53420],{"class":239},[79,81282,81283,81285,81287],{"class":81,"line":1274},[79,81284,53898],{"class":239},[79,81286,53447],{"class":395},[79,81288,53420],{"class":239},[79,81290,81291],{"class":81,"line":1296},[79,81292,454],{"emptyLinePlaceholder":453},[79,81294,81295,81297,81299],{"class":81,"line":1316},[79,81296,392],{"class":239},[79,81298,53913],{"class":395},[79,81300,53420],{"class":239},[79,81302,81303,81305,81307,81309,81311,81314],{"class":81,"line":1321},[79,81304,54257],{"class":239},[79,81306,53724],{"class":395},[79,81308,55596],{"class":85},[79,81310,244],{"class":239},[79,81312,81313],{"class":89},"\"filter\"",[79,81315,53420],{"class":239},[79,81317,81318,81320,81322,81324,81326,81328,81331,81333,81335,81338,81340],{"class":81,"line":1326},[79,81319,53454],{"class":239},[79,81321,2614],{"class":395},[79,81323,63167],{"class":85},[79,81325,244],{"class":239},[79,81327,63172],{"class":89},[79,81329,81330],{"class":85}," data-index",[79,81332,244],{"class":239},[79,81334,5881],{"class":89},[79,81336,81337],{"class":239},">0-100元\u003C\u002F",[79,81339,2614],{"class":395},[79,81341,53420],{"class":239},[79,81343,81344,81346,81348,81350,81352,81354,81356,81358,81360,81363,81365],{"class":81,"line":1342},[79,81345,53454],{"class":239},[79,81347,2614],{"class":395},[79,81349,63167],{"class":85},[79,81351,244],{"class":239},[79,81353,63172],{"class":89},[79,81355,81330],{"class":85},[79,81357,244],{"class":239},[79,81359,5904],{"class":89},[79,81361,81362],{"class":239},">100-300元\u003C\u002F",[79,81364,2614],{"class":395},[79,81366,53420],{"class":239},[79,81368,81369,81371,81373,81375,81377,81379,81381,81383,81385,81388,81390],{"class":81,"line":18985},[79,81370,53454],{"class":239},[79,81372,2614],{"class":395},[79,81374,63167],{"class":85},[79,81376,244],{"class":239},[79,81378,63172],{"class":89},[79,81380,81330],{"class":85},[79,81382,244],{"class":239},[79,81384,5917],{"class":89},[79,81386,81387],{"class":239},">300元以上\u003C\u002F",[79,81389,2614],{"class":395},[79,81391,53420],{"class":239},[79,81393,81394,81396,81398,81400,81402,81404,81407,81409],{"class":81,"line":18990},[79,81395,53454],{"class":239},[79,81397,2614],{"class":395},[79,81399,63167],{"class":85},[79,81401,244],{"class":239},[79,81403,63172],{"class":89},[79,81405,81406],{"class":239},">全部区间\u003C\u002F",[79,81408,2614],{"class":395},[79,81410,53420],{"class":239},[79,81412,81413,81415,81417],{"class":81,"line":18995},[79,81414,54529],{"class":239},[79,81416,53724],{"class":395},[79,81418,53420],{"class":239},[79,81420,81421,81423,81425,81427,81429,81431],{"class":81,"line":19009},[79,81422,54257],{"class":239},[79,81424,53724],{"class":395},[79,81426,55596],{"class":85},[79,81428,244],{"class":239},[79,81430,64718],{"class":89},[79,81432,53420],{"class":239},[79,81434,81435],{"class":81,"line":19021},[79,81436,81437],{"class":2440},"    \u003C!-- \u003Cdiv class=\"item\">\n",[79,81439,81440],{"class":81,"line":19026},[79,81441,81442],{"class":2440},"      \u003Cimg src=\"\" alt=\"\">\n",[79,81444,81445],{"class":81,"line":19039},[79,81446,81447],{"class":2440},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[79,81449,81450],{"class":81,"line":19044},[79,81451,81452],{"class":2440},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[79,81454,81455],{"class":81,"line":19049},[79,81456,81457],{"class":2440},"    \u003C\u002Fdiv> -->\n",[79,81459,81460,81462,81464],{"class":81,"line":19054},[79,81461,54529],{"class":239},[79,81463,53724],{"class":395},[79,81465,53420],{"class":239},[79,81467,81468,81470,81472],{"class":81,"line":19067},[79,81469,54257],{"class":239},[79,81471,53926],{"class":395},[79,81473,53420],{"class":239},[79,81475,81476],{"class":81,"line":19072},[79,81477,81478],{"class":2440},"    \u002F\u002F 2. 初始化数据\n",[79,81480,81481,81483,81486,81488],{"class":81,"line":34748},[79,81482,13385],{"class":243},[79,81484,81485],{"class":96}," goodsList",[79,81487,468],{"class":243},[79,81489,57557],{"class":239},[79,81491,81492],{"class":81,"line":34754},[79,81493,81494],{"class":239},"      {\n",[79,81496,81497,81500,81503],{"class":81,"line":34760},[79,81498,81499],{"class":239},"        id: ",[79,81501,81502],{"class":89},"'4001172'",[79,81504,33585],{"class":239},[79,81506,81507,81510,81513],{"class":81,"line":34766},[79,81508,81509],{"class":239},"        name: ",[79,81511,81512],{"class":89},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[79,81514,33585],{"class":239},[79,81516,81517,81520,81523],{"class":81,"line":34772},[79,81518,81519],{"class":239},"        price: ",[79,81521,81522],{"class":89},"'289.00'",[79,81524,33585],{"class":239},[79,81526,81527,81530,81533],{"class":81,"line":34783},[79,81528,81529],{"class":239},"        picture: ",[79,81531,81532],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[79,81534,33585],{"class":239},[79,81536,81537],{"class":81,"line":34789},[79,81538,80000],{"class":239},[79,81540,81541],{"class":81,"line":34809},[79,81542,81494],{"class":239},[79,81544,81545,81547,81550],{"class":81,"line":34815},[79,81546,81499],{"class":239},[79,81548,81549],{"class":89},"'4001594'",[79,81551,33585],{"class":239},[79,81553,81554,81556,81559],{"class":81,"line":34826},[79,81555,81509],{"class":239},[79,81557,81558],{"class":89},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[79,81560,33585],{"class":239},[79,81562,81563,81565,81568],{"class":81,"line":34832},[79,81564,81519],{"class":239},[79,81566,81567],{"class":89},"'288.00'",[79,81569,33585],{"class":239},[79,81571,81572,81574,81577],{"class":81,"line":34838},[79,81573,81529],{"class":239},[79,81575,81576],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[79,81578,33585],{"class":239},[79,81580,81581],{"class":81,"line":34844},[79,81582,80000],{"class":239},[79,81584,81585],{"class":81,"line":34850},[79,81586,81494],{"class":239},[79,81588,81589,81591,81594],{"class":81,"line":34856},[79,81590,81499],{"class":239},[79,81592,81593],{"class":89},"'4001009'",[79,81595,33585],{"class":239},[79,81597,81598,81600,81603],{"class":81,"line":34862},[79,81599,81509],{"class":239},[79,81601,81602],{"class":89},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[79,81604,33585],{"class":239},[79,81606,81607,81609,81612],{"class":81,"line":34868},[79,81608,81519],{"class":239},[79,81610,81611],{"class":89},"'109.00'",[79,81613,33585],{"class":239},[79,81615,81616,81618,81621],{"class":81,"line":34888},[79,81617,81529],{"class":239},[79,81619,81620],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[79,81622,33585],{"class":239},[79,81624,81625],{"class":81,"line":34894},[79,81626,80000],{"class":239},[79,81628,81629],{"class":81,"line":34910},[79,81630,81494],{"class":239},[79,81632,81633,81635,81638],{"class":81,"line":34916},[79,81634,81499],{"class":239},[79,81636,81637],{"class":89},"'4001874'",[79,81639,33585],{"class":239},[79,81641,81642,81644,81647],{"class":81,"line":34930},[79,81643,81509],{"class":239},[79,81645,81646],{"class":89},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[79,81648,33585],{"class":239},[79,81650,81651,81653,81656],{"class":81,"line":34936},[79,81652,81519],{"class":239},[79,81654,81655],{"class":89},"'488.00'",[79,81657,33585],{"class":239},[79,81659,81660,81662,81665],{"class":81,"line":34951},[79,81661,81529],{"class":239},[79,81663,81664],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[79,81666,33585],{"class":239},[79,81668,81669],{"class":81,"line":34957},[79,81670,80000],{"class":239},[79,81672,81673],{"class":81,"line":34966},[79,81674,81494],{"class":239},[79,81676,81677,81679,81682],{"class":81,"line":34972},[79,81678,81499],{"class":239},[79,81680,81681],{"class":89},"'4001649'",[79,81683,33585],{"class":239},[79,81685,81686,81688,81691],{"class":81,"line":34981},[79,81687,81509],{"class":239},[79,81689,81690],{"class":89},"'大师监制龙泉青瓷茶叶罐'",[79,81692,33585],{"class":239},[79,81694,81695,81697,81700],{"class":81,"line":34987},[79,81696,81519],{"class":239},[79,81698,81699],{"class":89},"'139.00'",[79,81701,33585],{"class":239},[79,81703,81704,81706,81709],{"class":81,"line":34993},[79,81705,81529],{"class":239},[79,81707,81708],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[79,81710,33585],{"class":239},[79,81712,81713],{"class":81,"line":35002},[79,81714,80000],{"class":239},[79,81716,81717],{"class":81,"line":35008},[79,81718,81494],{"class":239},[79,81720,81721,81723,81726],{"class":81,"line":35019},[79,81722,81499],{"class":239},[79,81724,81725],{"class":89},"'3997185'",[79,81727,33585],{"class":239},[79,81729,81730,81732,81735],{"class":81,"line":35025},[79,81731,81509],{"class":239},[79,81733,81734],{"class":89},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[79,81736,33585],{"class":239},[79,81738,81739,81741,81744],{"class":81,"line":35044},[79,81740,81519],{"class":239},[79,81742,81743],{"class":89},"'108.00'",[79,81745,33585],{"class":239},[79,81747,81748,81750,81753],{"class":81,"line":35050},[79,81749,81529],{"class":239},[79,81751,81752],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[79,81754,33585],{"class":239},[79,81756,81757],{"class":81,"line":35061},[79,81758,80000],{"class":239},[79,81760,81761],{"class":81,"line":35067},[79,81762,81494],{"class":239},[79,81764,81765,81767,81770],{"class":81,"line":35087},[79,81766,81499],{"class":239},[79,81768,81769],{"class":89},"'3997403'",[79,81771,33585],{"class":239},[79,81773,81774,81776,81779],{"class":81,"line":35103},[79,81775,81509],{"class":239},[79,81777,81778],{"class":89},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[79,81780,33585],{"class":239},[79,81782,81783,81785,81788],{"class":81,"line":35109},[79,81784,81519],{"class":239},[79,81786,81787],{"class":89},"'100.00'",[79,81789,33585],{"class":239},[79,81791,81792,81794,81797],{"class":81,"line":35123},[79,81793,81529],{"class":239},[79,81795,81796],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[79,81798,33585],{"class":239},[79,81800,81801],{"class":81,"line":35129},[79,81802,80000],{"class":239},[79,81804,81805],{"class":81,"line":35135},[79,81806,81494],{"class":239},[79,81808,81809,81811,81814],{"class":81,"line":35146},[79,81810,81499],{"class":239},[79,81812,81813],{"class":89},"'3998274'",[79,81815,33585],{"class":239},[79,81817,81818,81820,81823],{"class":81,"line":35152},[79,81819,81509],{"class":239},[79,81821,81822],{"class":89},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[79,81824,33585],{"class":239},[79,81826,81827,81829,81831],{"class":81,"line":35158},[79,81828,81519],{"class":239},[79,81830,81699],{"class":89},[79,81832,33585],{"class":239},[79,81834,81835,81837,81840],{"class":81,"line":35168},[79,81836,81529],{"class":239},[79,81838,81839],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[79,81841,33585],{"class":239},[79,81843,81844],{"class":81,"line":35174},[79,81845,80000],{"class":239},[79,81847,81848],{"class":81,"line":35185},[79,81849,55219],{"class":239},[79,81851,81852],{"class":81,"line":35191},[79,81853,454],{"emptyLinePlaceholder":453},[79,81855,81856],{"class":81,"line":35201},[79,81857,81858],{"class":2440},"    \u002F\u002F 1.渲染函数\n",[79,81860,81861,81863,81865,81867,81869],{"class":81,"line":35206},[79,81862,72192],{"class":243},[79,81864,72195],{"class":85},[79,81866,685],{"class":239},[79,81868,6082],{"class":7412},[79,81870,14605],{"class":239},[79,81872,81873],{"class":81,"line":35212},[79,81874,81875],{"class":2440},"      \u002F\u002F 声明空字符串\n",[79,81877,81878,81881,81884,81886],{"class":81,"line":35261},[79,81879,81880],{"class":243},"      let",[79,81882,81883],{"class":239}," str ",[79,81885,244],{"class":243},[79,81887,72212],{"class":89},[79,81889,81890],{"class":81,"line":35308},[79,81891,72217],{"class":2440},[79,81893,81894,81896,81899,81901,81904,81907],{"class":81,"line":35313},[79,81895,60117],{"class":239},[79,81897,81898],{"class":85},"forEach",[79,81900,685],{"class":239},[79,81902,81903],{"class":7412},"item",[79,81905,81906],{"class":243}," =>",[79,81908,17732],{"class":239},[79,81910,81911,81913,81916,81918,81920,81923,81925,81928,81931,81933],{"class":81,"line":35319},[79,81912,63380],{"class":243},[79,81914,81915],{"class":239}," { ",[79,81917,697],{"class":96},[79,81919,1060],{"class":239},[79,81921,81922],{"class":96},"price",[79,81924,1060],{"class":239},[79,81926,81927],{"class":96},"picture",[79,81929,81930],{"class":239}," } ",[79,81932,244],{"class":243},[79,81934,81935],{"class":239}," item\n",[79,81937,81938,81941,81943],{"class":81,"line":35338},[79,81939,81940],{"class":239},"        str ",[79,81942,1118],{"class":243},[79,81944,72276],{"class":89},[79,81946,81947],{"class":81,"line":35344},[79,81948,81949],{"class":89},"          \u003Cdiv class=\"item\">\n",[79,81951,81952,81955,81957],{"class":81,"line":35364},[79,81953,81954],{"class":89},"            \u003Cimg src=\"${",[79,81956,81927],{"class":239},[79,81958,81959],{"class":89},"}\" alt=\"\">\n",[79,81961,81962,81965,81967],{"class":81,"line":35370},[79,81963,81964],{"class":89},"            \u003Cp class=\"name\">${",[79,81966,697],{"class":239},[79,81968,81969],{"class":89},"}\u003C\u002Fp>\n",[79,81971,81972,81975,81977],{"class":81,"line":35376},[79,81973,81974],{"class":89},"            \u003Cp class=\"price\">${",[79,81976,81922],{"class":239},[79,81978,81969],{"class":89},[79,81980,81981],{"class":81,"line":35386},[79,81982,81983],{"class":89},"          \u003C\u002Fdiv>\n",[79,81985,81986],{"class":81,"line":35391},[79,81987,81988],{"class":89},"        `\n",[79,81990,81991],{"class":81,"line":35397},[79,81992,66925],{"class":239},[79,81994,81995],{"class":81,"line":35413},[79,81996,81997],{"class":2440},"      \u002F\u002F 追加给List\n",[79,81999,82000,82002,82004,82006,82009,82011,82013],{"class":81,"line":35458},[79,82001,57881],{"class":239},[79,82003,56509],{"class":85},[79,82005,685],{"class":239},[79,82007,82008],{"class":89},"'.list'",[79,82010,76357],{"class":239},[79,82012,244],{"class":243},[79,82014,76093],{"class":239},[79,82016,82017],{"class":81,"line":35464},[79,82018,4402],{"class":239},[79,82020,82021],{"class":81,"line":35470},[79,82022,82023],{"class":2440},"    \u002F\u002F 页面一打开就需要渲染\n",[79,82025,82026,82029],{"class":81,"line":35476},[79,82027,82028],{"class":85},"    render",[79,82030,82031],{"class":239},"(goodsList)\n",[79,82033,82034],{"class":81,"line":35487},[79,82035,82036],{"class":2440},"    \u002F\u002F 2.过滤筛选\n",[79,82038,82039,82041,82043,82045,82048,82050,82052,82054,82056,82058,82060,82062],{"class":81,"line":35493},[79,82040,54519],{"class":239},[79,82042,56509],{"class":85},[79,82044,685],{"class":239},[79,82046,82047],{"class":89},"'.filter'",[79,82049,32950],{"class":239},[79,82051,59923],{"class":85},[79,82053,685],{"class":239},[79,82055,59928],{"class":89},[79,82057,1060],{"class":239},[79,82059,2455],{"class":7412},[79,82061,81906],{"class":243},[79,82063,17732],{"class":239},[79,82065,82066],{"class":81,"line":35499},[79,82067,82068],{"class":2440},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[79,82070,82071,82073,82075,82078,82080,82082,82084,82086],{"class":81,"line":35505},[79,82072,60338],{"class":243},[79,82074,81915],{"class":239},[79,82076,82077],{"class":96},"tagName",[79,82079,1060],{"class":239},[79,82081,33656],{"class":96},[79,82083,81930],{"class":239},[79,82085,244],{"class":243},[79,82087,82088],{"class":239}," e.target\n",[79,82090,82091],{"class":81,"line":35523},[79,82092,82093],{"class":2440},"      \u002F\u002F 判断\n",[79,82095,82096,82098,82100,82102,82104],{"class":81,"line":35537},[79,82097,56590],{"class":243},[79,82099,69143],{"class":239},[79,82101,56596],{"class":243},[79,82103,70365],{"class":89},[79,82105,14605],{"class":239},[79,82107,82108],{"class":81,"line":35546},[79,82109,82110],{"class":2440},"        \u002F\u002F console.log(11)\n",[79,82112,82113],{"class":81,"line":35555},[79,82114,82115],{"class":2440},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[79,82117,82118],{"class":81,"line":35564},[79,82119,82120],{"class":2440},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[79,82122,82123,82125,82127,82129],{"class":81,"line":35573},[79,82124,53943],{"class":243},[79,82126,53946],{"class":239},[79,82128,244],{"class":243},[79,82130,82131],{"class":239}," goodsList\n",[79,82133,82134,82136,82139,82141,82144],{"class":81,"line":35579},[79,82135,1132],{"class":243},[79,82137,82138],{"class":239}," (dataset.index ",[79,82140,56596],{"class":243},[79,82142,82143],{"class":89}," '1'",[79,82145,14605],{"class":239},[79,82147,82148,82151,82153,82156,82159,82161,82163,82165,82168,82170,82172,82175,82177,82179,82181],{"class":81,"line":35585},[79,82149,82150],{"class":239},"          arr ",[79,82152,244],{"class":243},[79,82154,82155],{"class":239}," goodsList.",[79,82157,82158],{"class":85},"filter",[79,82160,685],{"class":239},[79,82162,81903],{"class":7412},[79,82164,81906],{"class":243},[79,82166,82167],{"class":239}," item.price ",[79,82169,3935],{"class":243},[79,82171,670],{"class":96},[79,82173,82174],{"class":243}," &&",[79,82176,82167],{"class":239},[79,82178,3824],{"class":243},[79,82180,1140],{"class":96},[79,82182,253],{"class":239},[79,82184,82185,82188,82190,82192,82194,82196,82199],{"class":81,"line":35593},[79,82186,82187],{"class":239},"        } ",[79,82189,3926],{"class":243},[79,82191,3929],{"class":243},[79,82193,82138],{"class":239},[79,82195,56596],{"class":243},[79,82197,82198],{"class":89}," '2'",[79,82200,14605],{"class":239},[79,82202,82203,82205,82207,82209,82211,82213,82215,82217,82219,82221,82223,82225,82227,82229,82232],{"class":81,"line":35598},[79,82204,82150],{"class":239},[79,82206,244],{"class":243},[79,82208,82155],{"class":239},[79,82210,82158],{"class":85},[79,82212,685],{"class":239},[79,82214,81903],{"class":7412},[79,82216,81906],{"class":243},[79,82218,82167],{"class":239},[79,82220,3935],{"class":243},[79,82222,1140],{"class":96},[79,82224,82174],{"class":243},[79,82226,82167],{"class":239},[79,82228,3824],{"class":243},[79,82230,82231],{"class":96}," 300",[79,82233,253],{"class":239},[79,82235,82236,82238,82240,82242,82244,82246,82249],{"class":81,"line":35604},[79,82237,82187],{"class":239},[79,82239,3926],{"class":243},[79,82241,3929],{"class":243},[79,82243,82138],{"class":239},[79,82245,56596],{"class":243},[79,82247,82248],{"class":89}," '3'",[79,82250,14605],{"class":239},[79,82252,82253,82255,82257,82259,82261,82263,82265,82267,82269,82271,82273],{"class":81,"line":35615},[79,82254,82150],{"class":239},[79,82256,244],{"class":243},[79,82258,82155],{"class":239},[79,82260,82158],{"class":85},[79,82262,685],{"class":239},[79,82264,81903],{"class":7412},[79,82266,81906],{"class":243},[79,82268,82167],{"class":239},[79,82270,3935],{"class":243},[79,82272,82231],{"class":96},[79,82274,253],{"class":239},[79,82276,82277],{"class":81,"line":35621},[79,82278,4742],{"class":239},[79,82280,82281],{"class":81,"line":35641},[79,82282,82283],{"class":2440},"        \u002F\u002F 渲染函数\n",[79,82285,82286,82288],{"class":81,"line":35647},[79,82287,72516],{"class":85},[79,82289,54524],{"class":239},[79,82291,82292],{"class":81,"line":35653},[79,82293,54510],{"class":239},[79,82295,82296],{"class":81,"line":35659},[79,82297,454],{"emptyLinePlaceholder":453},[79,82299,82300],{"class":81,"line":35676},[79,82301,35576],{"class":239},[79,82303,82304,82306,82308],{"class":81,"line":35682},[79,82305,54529],{"class":239},[79,82307,53926],{"class":395},[79,82309,53420],{"class":239},[79,82311,82312,82314,82316],{"class":81,"line":35688},[79,82313,53898],{"class":239},[79,82315,53913],{"class":395},[79,82317,53420],{"class":239},[79,82319,82320],{"class":81,"line":35694},[79,82321,454],{"emptyLinePlaceholder":453},[79,82323,82324,82326,82328],{"class":81,"line":35700},[79,82325,53898],{"class":239},[79,82327,52749],{"class":395},[79,82329,53420],{"class":239},[14,82331,82333],{"id":82332},"_410-深入了解对象","4.10 深入了解对象",[265,82335,82337],{"id":82336},"_4101-创建对象","4.10.1 创建对象",[19,82339,82340],{},[3699,82341],{"alt":57,"src":82342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,82344,82345],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[265,82347,82349],{"id":82348},"_4102-构造函数","4.10.2 构造函数",[19,82351,82352,82355],{},[2528,82353,82354],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82357,82358,82361],{},[2528,82359,82360],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[51,82363,82365],{"className":52747,"code":82364,"language":52749,"meta":57,"style":57},"\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",[59,82366,82367,82375,82380,82401,82414,82426,82438,82442,82447,82474,82479,82506],{"__ignoreMap":57},[79,82368,82369,82371,82373],{"class":81,"line":82},[79,82370,392],{"class":239},[79,82372,53926],{"class":395},[79,82374,53420],{"class":239},[79,82376,82377],{"class":81,"line":167},[79,82378,82379],{"class":2440},"\u002F\u002F例：\n",[79,82381,82382,82384,82387,82389,82391,82393,82395,82397,82399],{"class":81,"line":178},[79,82383,56559],{"class":243},[79,82385,82386],{"class":85}," Pig",[79,82388,685],{"class":239},[79,82390,697],{"class":7412},[79,82392,2752],{"class":239},[79,82394,72329],{"class":7412},[79,82396,2752],{"class":239},[79,82398,72346],{"class":7412},[79,82400,14605],{"class":239},[79,82402,82403,82406,82409,82411],{"class":81,"line":457},[79,82404,82405],{"class":96},"    this",[79,82407,82408],{"class":239},".name",[79,82410,244],{"class":243},[79,82412,82413],{"class":239},"name\n",[79,82415,82416,82418,82421,82423],{"class":81,"line":462},[79,82417,82405],{"class":96},[79,82419,82420],{"class":239},".age",[79,82422,244],{"class":243},[79,82424,82425],{"class":239},"age\n",[79,82427,82428,82430,82433,82435],{"class":81,"line":474},[79,82429,82405],{"class":96},[79,82431,82432],{"class":239},".gender",[79,82434,244],{"class":243},[79,82436,82437],{"class":239},"gender    \n",[79,82439,82440],{"class":81,"line":480},[79,82441,3801],{"class":239},[79,82443,82444],{"class":81,"line":486},[79,82445,82446],{"class":2440},"\u002F\u002F创建佩奇对象\n",[79,82448,82449,82451,82454,82456,82458,82460,82463,82465,82467,82469,82472],{"class":81,"line":491},[79,82450,8986],{"class":243},[79,82452,82453],{"class":96}," Peppa",[79,82455,13881],{"class":243},[79,82457,82386],{"class":85},[79,82459,685],{"class":239},[79,82461,82462],{"class":89},"'佩奇'",[79,82464,2752],{"class":239},[79,82466,2718],{"class":96},[79,82468,2752],{"class":239},[79,82470,82471],{"class":89},"'女'",[79,82473,253],{"class":239},[79,82475,82476],{"class":81,"line":497},[79,82477,82478],{"class":2440},"\u002F\u002F创建乔治对象\n",[79,82480,82481,82483,82486,82488,82490,82492,82495,82497,82499,82501,82504],{"class":81,"line":503},[79,82482,8986],{"class":243},[79,82484,82485],{"class":96}," George",[79,82487,13881],{"class":243},[79,82489,82386],{"class":85},[79,82491,685],{"class":239},[79,82493,82494],{"class":89},"'乔治'",[79,82496,2752],{"class":239},[79,82498,1188],{"class":96},[79,82500,2752],{"class":239},[79,82502,82503],{"class":89},"'男'",[79,82505,253],{"class":239},[79,82507,82508,82510,82512],{"class":81,"line":509},[79,82509,53898],{"class":239},[79,82511,53926],{"class":395},[79,82513,53420],{"class":239},[19,82515,82516],{},[3699,82517],{"alt":57,"src":82518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82520,82521],{},[3699,82522],{"alt":57,"src":82523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82525,82526],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82528,82529],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82531,82532],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82534,82535],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82537,82538],{},"这里用等号是因为：对象.属性=值",[19,82540,82541],{},"①利用对象字面量创建对象",[19,82543,82544],{},"const o={",[19,82546,82547],{},"name:'pink'",[19,82549,82550],{},"} ②利用new Object创建对象",[19,82552,82553],{},"const o=new Object({name:'pink'})",[19,82555,82556],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82558,82559],{},"构造函数创建对象的执行过程：",[19,82561,82562],{},[3699,82563],{"alt":57,"src":82564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[265,82566,82568],{"id":82567},"_4103-实例成员","4.10.3 实例成员",[19,82570,82571],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[26,82573,82574,82577,82580],{},[29,82575,82576],{},"实例对象的属性和方法即为实例成员",[29,82578,82579],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[29,82581,82582],{},"构造函数创建的实例对象彼此独立互不影响",[265,82584,82586],{"id":82585},"_4104-静态成员","4.10.4 静态成员",[19,82588,82589],{},[3699,82590],{"alt":57,"src":82591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82593,82594],{},"静态成员有Date.now() Math.PI Math.random()",[19,82596,82597],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82599,82600],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82602,82603],{},"function Pig(name) n {",[19,82605,82606],{},"this.name=name",[19,82608,700],{},[19,82610,82611],{},"Pig.eyes=2",[19,82613,82614],{},"Pig.sayHai=function () { console.log(this) }",[19,82616,82617],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82619,82620],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82622,13496],{},[26,82624,82625,82628,82631,82634,82637],{},[29,82626,82627],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[29,82629,82630],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[29,82632,82633],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[29,82635,82636],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[29,82638,82639],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82641,82642],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[265,82644,82646],{"id":82645},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82648,82649],{},"内置构造函数包含：",[19,82651,82652],{},[3699,82653],{"alt":57,"src":82654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82656,82657],{},[3699,82658],{"alt":57,"src":82659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82661,82662],{},"这些基本数据类型，js对他们进行了包装",[53926,82664,82665],{},"\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",[24137,82667,82669],{"id":82668},"_41051-object","4.10.5.1 Object",[19,82671,82672],{},"Object 是内置的构造函数，用于创建普通对象",[19,82674,82675],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[51,82677,82679],{"className":52747,"code":82678,"language":52749,"meta":57,"style":57},"const user=new Object({name:'小明',age:15})\n",[59,82680,82681],{"__ignoreMap":57},[79,82682,82683],{"class":81,"line":82},[79,82684,82678],{"class":239},[19,82686,82687],{},"三个常用的静态方法：",[25049,82689,82691],{"id":82690},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82693,82694],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82696,82697],{},[3699,82698],{"alt":57,"src":82699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82701,82702],{},[3699,82703],{"alt":57,"src":82704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[51,82706,82708],{"className":383,"code":82707,"language":385,"meta":57,"style":57},"\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",[59,82709,82710,82718,82726,82731,82736,82741,82746,82751,82756,82764],{"__ignoreMap":57},[79,82711,82712,82714,82716],{"class":81,"line":82},[79,82713,392],{"class":239},[79,82715,53913],{"class":395},[79,82717,53420],{"class":239},[79,82719,82720,82722,82724],{"class":81,"line":167},[79,82721,54257],{"class":239},[79,82723,53926],{"class":395},[79,82725,53420],{"class":239},[79,82727,82728],{"class":81,"line":178},[79,82729,82730],{"class":239},"    const o = { name: 'pink', age: 6 }\n",[79,82732,82733],{"class":81,"line":457},[79,82734,82735],{"class":239},"    \u002F\u002F 获得所有属性名\n",[79,82737,82738],{"class":81,"line":462},[79,82739,82740],{"class":239},"    const arr = Object.keys(o)\n",[79,82742,82743],{"class":81,"line":474},[79,82744,82745],{"class":239},"    console.log(arr)\n",[79,82747,82748],{"class":81,"line":480},[79,82749,82750],{"class":239},"    \u002F\u002F 获得所有属性值\n",[79,82752,82753],{"class":81,"line":486},[79,82754,82755],{"class":239},"    console.log(Object.values(o))\n",[79,82757,82758,82760,82762],{"class":81,"line":491},[79,82759,54529],{"class":239},[79,82761,53926],{"class":395},[79,82763,53420],{"class":239},[79,82765,82766,82768,82770],{"class":81,"line":497},[79,82767,53898],{"class":239},[79,82769,53913],{"class":395},[79,82771,53420],{"class":239},[25049,82773,82775],{"id":82774},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82777,82778],{},"Object.assign(oo,o)",[19,82780,82781],{},"后的东西添加给前 是追加",[19,82783,82784],{},[3699,82785],{"alt":57,"src":82786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82788,82789],{},[3699,82790],{"alt":57,"src":82791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[51,82793,82795],{"className":383,"code":82794,"language":385,"meta":57,"style":57},"\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",[59,82796,82797,82805,82813,82817,82821,82825,82829,82833,82837,82842,82847,82852,82857,82862,82870],{"__ignoreMap":57},[79,82798,82799,82801,82803],{"class":81,"line":82},[79,82800,392],{"class":239},[79,82802,53913],{"class":395},[79,82804,53420],{"class":239},[79,82806,82807,82809,82811],{"class":81,"line":167},[79,82808,54257],{"class":239},[79,82810,53926],{"class":395},[79,82812,53420],{"class":239},[79,82814,82815],{"class":81,"line":178},[79,82816,82730],{"class":239},[79,82818,82819],{"class":81,"line":457},[79,82820,82735],{"class":239},[79,82822,82823],{"class":81,"line":462},[79,82824,82740],{"class":239},[79,82826,82827],{"class":81,"line":474},[79,82828,82745],{"class":239},[79,82830,82831],{"class":81,"line":480},[79,82832,82750],{"class":239},[79,82834,82835],{"class":81,"line":486},[79,82836,82755],{"class":239},[79,82838,82839],{"class":81,"line":491},[79,82840,82841],{"class":239},"    const oo = {}\n",[79,82843,82844],{"class":81,"line":497},[79,82845,82846],{"class":239},"    Object.assign(oo, o)\n",[79,82848,82849],{"class":81,"line":503},[79,82850,82851],{"class":239},"    console.log(oo)\n",[79,82853,82854],{"class":81,"line":509},[79,82855,82856],{"class":239},"    Object.assign(o, { gender: '女' })\n",[79,82858,82859],{"class":81,"line":514},[79,82860,82861],{"class":239},"    console.log(o)\n",[79,82863,82864,82866,82868],{"class":81,"line":520},[79,82865,54529],{"class":239},[79,82867,53926],{"class":395},[79,82869,53420],{"class":239},[79,82871,82872,82874,82876],{"class":81,"line":526},[79,82873,53898],{"class":239},[79,82875,53913],{"class":395},[79,82877,53420],{"class":239},[19,82879,82880],{},[3699,82881],{"alt":57,"src":82882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[24137,82884,82886],{"id":82885},"_41052-array","4.10.5.2 Array",[19,82888,82889],{},"Array 是内置的构造函数，用于创建数组",[19,82891,82892],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[51,82894,82896],{"className":52747,"code":82895,"language":52749,"meta":57,"style":57},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[59,82897,82898,82903],{"__ignoreMap":57},[79,82899,82900],{"class":81,"line":82},[79,82901,82902],{"class":239},"const arr=new Array(3,5)\n",[79,82904,82905],{"class":81,"line":167},[79,82906,82907],{"class":239},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82909,82910],{},"Array的实例方法，这个方法是实例成员",[19,82912,82913],{},[3699,82914],{"alt":57,"src":82915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[25049,82917,82919],{"id":82918},"_410521-reduce","4.10.5.2.1 reduce",[19,82921,82922],{},[3699,82923],{"alt":57,"src":82924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[51,82926,82928],{"className":383,"code":82927,"language":385,"meta":57,"style":57},"\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",[59,82929,82930,82938,82946,82951,82956,82961,82966,82970,82975,82980,82985,82989,82994,82999,83003,83008,83013,83018,83026],{"__ignoreMap":57},[79,82931,82932,82934,82936],{"class":81,"line":82},[79,82933,392],{"class":239},[79,82935,53913],{"class":395},[79,82937,53420],{"class":239},[79,82939,82940,82942,82944],{"class":81,"line":167},[79,82941,54257],{"class":239},[79,82943,53926],{"class":395},[79,82945,53420],{"class":239},[79,82947,82948],{"class":81,"line":178},[79,82949,82950],{"class":239},"    const arr = [1, 5, 8]\n",[79,82952,82953],{"class":81,"line":457},[79,82954,82955],{"class":239},"    \u002F\u002F 1.没有初始值\n",[79,82957,82958],{"class":81,"line":462},[79,82959,82960],{"class":239},"    const total = arr.reduce(function (prev, current) {\n",[79,82962,82963],{"class":81,"line":474},[79,82964,82965],{"class":239},"      return prev + current\n",[79,82967,82968],{"class":81,"line":480},[79,82969,35576],{"class":239},[79,82971,82972],{"class":81,"line":486},[79,82973,82974],{"class":239},"    console.log(total)   \u002F\u002F14\n",[79,82976,82977],{"class":81,"line":491},[79,82978,82979],{"class":239},"    \u002F\u002F 2.有初始值\n",[79,82981,82982],{"class":81,"line":497},[79,82983,82984],{"class":239},"    const total1 = arr.reduce(function (prev, current) {\n",[79,82986,82987],{"class":81,"line":503},[79,82988,82965],{"class":239},[79,82990,82991],{"class":81,"line":509},[79,82992,82993],{"class":239},"    }, 10)\n",[79,82995,82996],{"class":81,"line":514},[79,82997,82998],{"class":239},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[79,83000,83001],{"class":81,"line":520},[79,83002,454],{"emptyLinePlaceholder":453},[79,83004,83005],{"class":81,"line":526},[79,83006,83007],{"class":239},"    \u002F\u002F 3.箭头函数写法\n",[79,83009,83010],{"class":81,"line":532},[79,83011,83012],{"class":239},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[79,83014,83015],{"class":81,"line":537},[79,83016,83017],{"class":239},"    console.log(total2)   \u002F\u002F24\n",[79,83019,83020,83022,83024],{"class":81,"line":543},[79,83021,54529],{"class":239},[79,83023,53926],{"class":395},[79,83025,53420],{"class":239},[79,83027,83028,83030,83032],{"class":81,"line":549},[79,83029,53898],{"class":239},[79,83031,53913],{"class":395},[79,83033,53420],{"class":239},[19,83035,83036],{},"执行过程：",[26,83038,83039,83042,83045],{},[29,83040,83041],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[29,83043,83044],{},"每一次循环，把返回值给作为下一次循环的上一次值",[29,83046,83047],{},"如果有起始值，则起始值作为上一次值",[51,83049,83051],{"className":383,"code":83050,"language":385,"meta":57,"style":57},"\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",[59,83052,83053,83061,83069,83073,83077,83081,83085,83089,83093,83098,83103,83108,83113,83118,83122,83126,83130,83134,83138,83142,83147,83151,83156,83160,83165,83170,83174,83178,83182,83190],{"__ignoreMap":57},[79,83054,83055,83057,83059],{"class":81,"line":82},[79,83056,392],{"class":239},[79,83058,53913],{"class":395},[79,83060,53420],{"class":239},[79,83062,83063,83065,83067],{"class":81,"line":167},[79,83064,54257],{"class":239},[79,83066,53926],{"class":395},[79,83068,53420],{"class":239},[79,83070,83071],{"class":81,"line":178},[79,83072,82950],{"class":239},[79,83074,83075],{"class":81,"line":457},[79,83076,82955],{"class":239},[79,83078,83079],{"class":81,"line":462},[79,83080,82960],{"class":239},[79,83082,83083],{"class":81,"line":474},[79,83084,82965],{"class":239},[79,83086,83087],{"class":81,"line":480},[79,83088,35576],{"class":239},[79,83090,83091],{"class":81,"line":486},[79,83092,82974],{"class":239},[79,83094,83095],{"class":81,"line":491},[79,83096,83097],{"class":239},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[79,83099,83100],{"class":81,"line":497},[79,83101,83102],{"class":239},"    \u002F\u002F     1              5                    6\n",[79,83104,83105],{"class":81,"line":503},[79,83106,83107],{"class":239},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[79,83109,83110],{"class":81,"line":509},[79,83111,83112],{"class":239},"    \u002F\u002F     6              8                    14\n",[79,83114,83115],{"class":81,"line":514},[79,83116,83117],{"class":239},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[79,83119,83120],{"class":81,"line":520},[79,83121,82979],{"class":239},[79,83123,83124],{"class":81,"line":526},[79,83125,82984],{"class":239},[79,83127,83128],{"class":81,"line":532},[79,83129,82965],{"class":239},[79,83131,83132],{"class":81,"line":537},[79,83133,82993],{"class":239},[79,83135,83136],{"class":81,"line":543},[79,83137,82998],{"class":239},[79,83139,83140],{"class":81,"line":549},[79,83141,83097],{"class":239},[79,83143,83144],{"class":81,"line":555},[79,83145,83146],{"class":239},"    \u002F\u002F     10             1                     11\n",[79,83148,83149],{"class":81,"line":561},[79,83150,83107],{"class":239},[79,83152,83153],{"class":81,"line":567},[79,83154,83155],{"class":239},"    \u002F\u002F     11             5                    16\n",[79,83157,83158],{"class":81,"line":573},[79,83159,83107],{"class":239},[79,83161,83162],{"class":81,"line":579},[79,83163,83164],{"class":239},"    \u002F\u002F     16             8                    24\n",[79,83166,83167],{"class":81,"line":584},[79,83168,83169],{"class":239},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[79,83171,83172],{"class":81,"line":590},[79,83173,83007],{"class":239},[79,83175,83176],{"class":81,"line":596},[79,83177,83012],{"class":239},[79,83179,83180],{"class":81,"line":602},[79,83181,83017],{"class":239},[79,83183,83184,83186,83188],{"class":81,"line":608},[79,83185,54529],{"class":239},[79,83187,53926],{"class":395},[79,83189,53420],{"class":239},[79,83191,83192,83194,83196],{"class":81,"line":614},[79,83193,53898],{"class":239},[79,83195,53913],{"class":395},[79,83197,53420],{"class":239},[25049,83199,83201],{"id":83200},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,83203,83204],{},[3699,83205],{"alt":57,"src":83206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[51,83208,83210],{"className":383,"code":83209,"language":385,"meta":57,"style":57},"\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",[59,83211,83212,83220,83228,83233,83238,83243,83248,83252,83257,83262,83267,83272,83277,83282,83286,83291,83295,83300,83308],{"__ignoreMap":57},[79,83213,83214,83216,83218],{"class":81,"line":82},[79,83215,392],{"class":239},[79,83217,53913],{"class":395},[79,83219,53420],{"class":239},[79,83221,83222,83224,83226],{"class":81,"line":167},[79,83223,54257],{"class":239},[79,83225,53926],{"class":395},[79,83227,53420],{"class":239},[79,83229,83230],{"class":81,"line":178},[79,83231,83232],{"class":239},"    const arr = [\n",[79,83234,83235],{"class":81,"line":457},[79,83236,83237],{"class":239},"      { name: '张三', salary: 10000 },\n",[79,83239,83240],{"class":81,"line":462},[79,83241,83242],{"class":239},"      { name: '李四', salary: 10000 },\n",[79,83244,83245],{"class":81,"line":474},[79,83246,83247],{"class":239},"      { name: '王五', salary: 10000 }\n",[79,83249,83250],{"class":81,"line":480},[79,83251,55219],{"class":239},[79,83253,83254],{"class":81,"line":486},[79,83255,83256],{"class":239},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[79,83258,83259],{"class":81,"line":491},[79,83260,83261],{"class":239},"    \u002F\u002F prev是累计值\n",[79,83263,83264],{"class":81,"line":497},[79,83265,83266],{"class":239},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[79,83268,83269],{"class":81,"line":503},[79,83270,83271],{"class":239},"    console.log(total)\n",[79,83273,83274],{"class":81,"line":509},[79,83275,83276],{"class":239},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[79,83278,83279],{"class":81,"line":514},[79,83280,83281],{"class":239},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[79,83283,83284],{"class":81,"line":520},[79,83285,83276],{"class":239},[79,83287,83288],{"class":81,"line":526},[79,83289,83290],{"class":239},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[79,83292,83293],{"class":81,"line":532},[79,83294,83276],{"class":239},[79,83296,83297],{"class":81,"line":537},[79,83298,83299],{"class":239},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[79,83301,83302,83304,83306],{"class":81,"line":543},[79,83303,54529],{"class":239},[79,83305,53926],{"class":395},[79,83307,53420],{"class":239},[79,83309,83310,83312,83314],{"class":81,"line":549},[79,83311,53898],{"class":239},[79,83313,53913],{"class":395},[79,83315,53420],{"class":239},[25049,83317,83319],{"id":83318},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,83321,83322],{},[3699,83323],{"alt":57,"src":83324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,83326,83327],{},[3699,83328],{"alt":57,"src":83329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[26,83331,83332],{},[29,83333,83334],{},"find()",[19,83336,83337],{},"循环查找，找到第一个就ok",[19,83339,83340],{},[2614,83341,83344],{"href":83342,"rel":83343},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[26001],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[51,83346,83348],{"className":52747,"code":83347,"language":52749,"meta":57,"style":57},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[59,83349,83350,83355,83360],{"__ignoreMap":57},[79,83351,83352],{"class":81,"line":82},[79,83353,83354],{"class":239},"const array1 = [5, 12, 8, 130, 44]\n",[79,83356,83357],{"class":81,"line":167},[79,83358,83359],{"class":239},"const found = array1.find((element) => element > 10)\n",[79,83361,83362],{"class":81,"line":178},[79,83363,83364],{"class":239},"console.log(found)  \u002F\u002F12\n",[19,83366,83367,83369,83370,83375,83376,83379,83380,83382,83383,83388,83389,83391,83392,83394,83395,83397,83398],{},[59,83368,83334],{}," 方法是一个",[2614,83371,83374],{"href":83372,"rel":83373},"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",[26001],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[59,83377,83378],{},"callbackFn"," 函数，直到 ",[59,83381,83378],{}," 返回一个",[2614,83384,83387],{"href":83385,"rel":83386},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[26001],"真值","。然后 ",[59,83390,83334],{}," 返回该元素并停止迭代数组。如果 ",[59,83393,83378],{}," 从未返回真值，则 ",[59,83396,83334],{}," 返回 ",[59,83399,83400],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[51,83402,83404],{"className":383,"code":83403,"language":385,"meta":57,"style":57},"\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",[59,83405,83406,83414,83422,83427,83432,83437,83441,83446,83451,83455,83460,83465,83469,83473,83478,83483,83487,83491,83496,83501,83506,83511,83516,83520,83525,83530,83535,83540,83544,83549,83557],{"__ignoreMap":57},[79,83407,83408,83410,83412],{"class":81,"line":82},[79,83409,392],{"class":239},[79,83411,53913],{"class":395},[79,83413,53420],{"class":239},[79,83415,83416,83418,83420],{"class":81,"line":167},[79,83417,54257],{"class":239},[79,83419,53926],{"class":395},[79,83421,53420],{"class":239},[79,83423,83424],{"class":81,"line":178},[79,83425,83426],{"class":239},"    const arr = ['red', 'blue', 'green']\n",[79,83428,83429],{"class":81,"line":457},[79,83430,83431],{"class":239},"    const found = arr.find(item => item === 'pink')\n",[79,83433,83434],{"class":81,"line":462},[79,83435,83436],{"class":239},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[79,83438,83439],{"class":81,"line":474},[79,83440,454],{"emptyLinePlaceholder":453},[79,83442,83443],{"class":81,"line":480},[79,83444,83445],{"class":239},"    \u002F\u002F 使用场景，用于查找数据\n",[79,83447,83448],{"class":81,"line":486},[79,83449,83450],{"class":239},"    const arr1 = [\n",[79,83452,83453],{"class":81,"line":491},[79,83454,81494],{"class":239},[79,83456,83457],{"class":81,"line":497},[79,83458,83459],{"class":239},"        name: '小米',\n",[79,83461,83462],{"class":81,"line":503},[79,83463,83464],{"class":239},"        price: 1999\n",[79,83466,83467],{"class":81,"line":509},[79,83468,80000],{"class":239},[79,83470,83471],{"class":81,"line":514},[79,83472,81494],{"class":239},[79,83474,83475],{"class":81,"line":520},[79,83476,83477],{"class":239},"        name: '华为',\n",[79,83479,83480],{"class":81,"line":526},[79,83481,83482],{"class":239},"        price: 3999\n",[79,83484,83485],{"class":81,"line":532},[79,83486,54510],{"class":239},[79,83488,83489],{"class":81,"line":537},[79,83490,55219],{"class":239},[79,83492,83493],{"class":81,"line":543},[79,83494,83495],{"class":239},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[79,83497,83498],{"class":81,"line":549},[79,83499,83500],{"class":239},"    \u002F\u002F const found1 = arr1.find(item => {\n",[79,83502,83503],{"class":81,"line":555},[79,83504,83505],{"class":239},"    \u002F\u002F   if (item.name === '小米') {\n",[79,83507,83508],{"class":81,"line":561},[79,83509,83510],{"class":239},"    \u002F\u002F     return item\n",[79,83512,83513],{"class":81,"line":567},[79,83514,83515],{"class":239},"    \u002F\u002F   }\n",[79,83517,83518],{"class":81,"line":573},[79,83519,65400],{"class":239},[79,83521,83522],{"class":81,"line":579},[79,83523,83524],{"class":239},"    \u002F\u002F 另一种写法\n",[79,83526,83527],{"class":81,"line":584},[79,83528,83529],{"class":239},"    const found1 = arr1.find(item => {\n",[79,83531,83532],{"class":81,"line":590},[79,83533,83534],{"class":239},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[79,83536,83537],{"class":81,"line":596},[79,83538,83539],{"class":239},"      return item.name = '小米'\n",[79,83541,83542],{"class":81,"line":602},[79,83543,35576],{"class":239},[79,83545,83546],{"class":81,"line":608},[79,83547,83548],{"class":239},"    console.log(found1)\n",[79,83550,83551,83553,83555],{"class":81,"line":614},[79,83552,54529],{"class":239},[79,83554,53926],{"class":395},[79,83556,53420],{"class":239},[79,83558,83559,83561,83563],{"class":81,"line":620},[79,83560,53898],{"class":239},[79,83562,53913],{"class":395},[79,83564,53420],{"class":239},[19,83566,83567],{},[3699,83568],{"alt":57,"src":83569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83571,83572],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[26,83574,83575],{"start":167},[29,83576,83577],{},"every()返回的是布尔值",[19,83579,83580],{},[2614,83581,83584],{"href":83582,"rel":83583},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[26001],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83586,83587],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83589,83590],{},"some是只有有一个就没问题",[19,83592,83593],{},"every是必须全是才行",[51,83595,83599],{"className":83596,"code":83597,"language":83598,"meta":57,"style":57},"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",[59,83600,83601,83617,83631,83635,83644],{"__ignoreMap":57},[79,83602,83603,83605,83608,83610,83612,83615],{"class":81,"line":82},[79,83604,56559],{"class":243},[79,83606,83607],{"class":239}," isBigEnough(element, ",[79,83609,76166],{"class":243},[79,83611,1060],{"class":239},[79,83613,83614],{"class":243},"array",[79,83616,14605],{"class":239},[79,83618,83619,83622,83625,83627,83629],{"class":81,"line":167},[79,83620,83621],{"class":243},"  return",[79,83623,83624],{"class":239}," element ",[79,83626,3935],{"class":243},[79,83628,4253],{"class":96},[79,83630,3531],{"class":239},[79,83632,83633],{"class":81,"line":178},[79,83634,3801],{"class":239},[79,83636,83637,83640,83642],{"class":81,"line":457},[79,83638,83639],{"class":239},"[12, 5, 8, 130, 44].every(isBigEnough); ",[79,83641,35444],{"class":243},[79,83643,56626],{"class":239},[79,83645,83646,83649,83651],{"class":81,"line":462},[79,83647,83648],{"class":239},"[12, 54, 18, 130, 44].every(isBigEnough); ",[79,83650,35444],{"class":243},[79,83652,60050],{"class":239},[51,83654,83656],{"className":383,"code":83655,"language":385,"meta":57,"style":57},"\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",[59,83657,83658,83666,83674,83679,83683,83688,83693,83701],{"__ignoreMap":57},[79,83659,83660,83662,83664],{"class":81,"line":82},[79,83661,392],{"class":239},[79,83663,53913],{"class":395},[79,83665,53420],{"class":239},[79,83667,83668,83670,83672],{"class":81,"line":167},[79,83669,54257],{"class":239},[79,83671,53926],{"class":395},[79,83673,53420],{"class":239},[79,83675,83676],{"class":81,"line":178},[79,83677,83678],{"class":239},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[79,83680,83681],{"class":81,"line":457},[79,83682,80430],{"class":239},[79,83684,83685],{"class":81,"line":462},[79,83686,83687],{"class":239},"    const flag = arr.every(item => item >= 10)\n",[79,83689,83690],{"class":81,"line":474},[79,83691,83692],{"class":239},"    console.log(flag)    \u002F\u002Ftrue\n",[79,83694,83695,83697,83699],{"class":81,"line":480},[79,83696,54529],{"class":239},[79,83698,53926],{"class":395},[79,83700,53420],{"class":239},[79,83702,83703,83705,83707],{"class":81,"line":486},[79,83704,53898],{"class":239},[79,83706,53913],{"class":395},[79,83708,53420],{"class":239},[51,83710,83712],{"className":383,"code":83711,"language":385,"meta":57,"style":57},"\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",[59,83713,83714,83722,83730,83734,83739,83744,83749,83757],{"__ignoreMap":57},[79,83715,83716,83718,83720],{"class":81,"line":82},[79,83717,392],{"class":239},[79,83719,53913],{"class":395},[79,83721,53420],{"class":239},[79,83723,83724,83726,83728],{"class":81,"line":167},[79,83725,54257],{"class":239},[79,83727,53926],{"class":395},[79,83729,53420],{"class":239},[79,83731,83732],{"class":81,"line":178},[79,83733,83678],{"class":239},[79,83735,83736],{"class":81,"line":457},[79,83737,83738],{"class":239},"    const arr = [10, 0, 5]\n",[79,83740,83741],{"class":81,"line":462},[79,83742,83743],{"class":239},"    const flag = arr.some(item => item >= 10)\n",[79,83745,83746],{"class":81,"line":474},[79,83747,83748],{"class":239},"    console.log(flag)   \u002F\u002Ftrue\n",[79,83750,83751,83753,83755],{"class":81,"line":480},[79,83752,54529],{"class":239},[79,83754,53926],{"class":395},[79,83756,53420],{"class":239},[79,83758,83759,83761,83763],{"class":81,"line":486},[79,83760,53898],{"class":239},[79,83762,53913],{"class":395},[79,83764,53420],{"class":239},[25049,83766,83768],{"id":83767},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83770,83771],{},[3699,83772],{"alt":57,"src":83773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[51,83775,83777],{"className":52747,"code":83776,"language":52749,"meta":57,"style":57},"\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",[59,83778,83779,83789,83803,83807,83815,83829,83849,83861,83869,83876,83888,83900,83912,83924,83934,83944,83948,83956,83964,83968,83976,83988,83996,84018,84023,84028,84061,84069,84077,84081],{"__ignoreMap":57},[79,83780,83781,83783,83785,83787],{"class":81,"line":82},[79,83782,53411],{"class":239},[79,83784,53414],{"class":395},[79,83786,53417],{"class":85},[79,83788,53420],{"class":239},[79,83790,83791,83793,83795,83797,83799,83801],{"class":81,"line":167},[79,83792,392],{"class":239},[79,83794,52749],{"class":395},[79,83796,53429],{"class":85},[79,83798,244],{"class":239},[79,83800,53434],{"class":89},[79,83802,53420],{"class":239},[79,83804,83805],{"class":81,"line":178},[79,83806,454],{"emptyLinePlaceholder":453},[79,83808,83809,83811,83813],{"class":81,"line":457},[79,83810,392],{"class":239},[79,83812,53447],{"class":395},[79,83814,53420],{"class":239},[79,83816,83817,83819,83821,83823,83825,83827],{"class":81,"line":462},[79,83818,54257],{"class":239},[79,83820,53457],{"class":395},[79,83822,53460],{"class":85},[79,83824,244],{"class":239},[79,83826,53465],{"class":89},[79,83828,53420],{"class":239},[79,83830,83831,83833,83835,83837,83839,83841,83843,83845,83847],{"class":81,"line":474},[79,83832,54257],{"class":239},[79,83834,53457],{"class":395},[79,83836,2238],{"class":85},[79,83838,244],{"class":239},[79,83840,53504],{"class":89},[79,83842,53484],{"class":85},[79,83844,244],{"class":239},[79,83846,53511],{"class":89},[79,83848,53420],{"class":239},[79,83850,83851,83853,83855,83857,83859],{"class":81,"line":480},[79,83852,54257],{"class":239},[79,83854,53520],{"class":395},[79,83856,53523],{"class":239},[79,83858,53520],{"class":395},[79,83860,53420],{"class":239},[79,83862,83863,83865,83867],{"class":81,"line":486},[79,83864,54257],{"class":239},[79,83866,2287],{"class":395},[79,83868,53420],{"class":239},[79,83870,83871,83874],{"class":81,"line":491},[79,83872,83873],{"class":395},"    div",[79,83875,17732],{"class":239},[79,83877,83878,83880,83882,83884,83886],{"class":81,"line":497},[79,83879,56881],{"class":96},[79,83881,53550],{"class":239},[79,83883,3947],{"class":96},[79,83885,53605],{"class":243},[79,83887,3531],{"class":239},[79,83889,83890,83892,83894,83896,83898],{"class":81,"line":503},[79,83891,56895],{"class":96},[79,83893,53550],{"class":239},[79,83895,2775],{"class":96},[79,83897,53605],{"class":243},[79,83899,3531],{"class":239},[79,83901,83902,83904,83906,83908,83910],{"class":81,"line":509},[79,83903,59469],{"class":96},[79,83905,53550],{"class":239},[79,83907,2775],{"class":96},[79,83909,53605],{"class":243},[79,83911,3531],{"class":239},[79,83913,83914,83916,83918,83920,83922],{"class":81,"line":514},[79,83915,67242],{"class":96},[79,83917,53550],{"class":239},[79,83919,2872],{"class":96},[79,83921,53605],{"class":243},[79,83923,3531],{"class":239},[79,83925,83926,83928,83930,83932],{"class":81,"line":520},[79,83927,59396],{"class":96},[79,83929,53550],{"class":239},[79,83931,53705],{"class":96},[79,83933,3531],{"class":239},[79,83935,83936,83938,83940,83942],{"class":81,"line":526},[79,83937,56994],{"class":96},[79,83939,53550],{"class":239},[79,83941,53758],{"class":96},[79,83943,3531],{"class":239},[79,83945,83946],{"class":81,"line":532},[79,83947,4402],{"class":239},[79,83949,83950,83952,83954],{"class":81,"line":537},[79,83951,54529],{"class":239},[79,83953,2287],{"class":395},[79,83955,53420],{"class":239},[79,83957,83958,83960,83962],{"class":81,"line":543},[79,83959,53898],{"class":239},[79,83961,53447],{"class":395},[79,83963,53420],{"class":239},[79,83965,83966],{"class":81,"line":549},[79,83967,454],{"emptyLinePlaceholder":453},[79,83969,83970,83972,83974],{"class":81,"line":555},[79,83971,392],{"class":239},[79,83973,53913],{"class":395},[79,83975,53420],{"class":239},[79,83977,83978,83980,83982,83984,83986],{"class":81,"line":561},[79,83979,54257],{"class":239},[79,83981,53724],{"class":395},[79,83983,57424],{"class":239},[79,83985,53724],{"class":395},[79,83987,53420],{"class":239},[79,83989,83990,83992,83994],{"class":81,"line":567},[79,83991,54257],{"class":239},[79,83993,53926],{"class":395},[79,83995,53420],{"class":239},[79,83997,83998,84000,84003,84005,84008,84011,84013,84016],{"class":81,"line":573},[79,83999,13385],{"class":243},[79,84001,84002],{"class":96}," spec",[79,84004,468],{"class":243},[79,84006,84007],{"class":239}," { size: ",[79,84009,84010],{"class":89},"'40cm*40cm'",[79,84012,57574],{"class":239},[79,84014,84015],{"class":89},"'黑色'",[79,84017,57714],{"class":239},[79,84019,84020],{"class":81,"line":579},[79,84021,84022],{"class":2440},"    \u002F\u002F const arr = Object.values(spec)\n",[79,84024,84025],{"class":81,"line":584},[79,84026,84027],{"class":2440},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[79,84029,84030,84032,84034,84036,84039,84041,84043,84046,84049,84052,84054,84056,84059],{"class":81,"line":590},[79,84031,54519],{"class":239},[79,84033,56509],{"class":85},[79,84035,685],{"class":239},[79,84037,84038],{"class":89},"'div'",[79,84040,76357],{"class":239},[79,84042,244],{"class":243},[79,84044,84045],{"class":239}," Object.",[79,84047,84048],{"class":85},"values",[79,84050,84051],{"class":239},"(spec).",[79,84053,76331],{"class":85},[79,84055,685],{"class":239},[79,84057,84058],{"class":89},"'\u002F'",[79,84060,253],{"class":239},[79,84062,84063,84065,84067],{"class":81,"line":596},[79,84064,54529],{"class":239},[79,84066,53926],{"class":395},[79,84068,53420],{"class":239},[79,84070,84071,84073,84075],{"class":81,"line":602},[79,84072,53898],{"class":239},[79,84074,53913],{"class":395},[79,84076,53420],{"class":239},[79,84078,84079],{"class":81,"line":608},[79,84080,454],{"emptyLinePlaceholder":453},[79,84082,84083,84085,84087],{"class":81,"line":614},[79,84084,53898],{"class":239},[79,84086,52749],{"class":395},[79,84088,53420],{"class":239},[19,84090,84091],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[25049,84093,84095],{"id":84094},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,84097,84098],{},"静态方法，将伪数组转换为真数组",[19,84100,84101],{},[3699,84102],{"alt":57,"src":84103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[51,84105,84107],{"className":383,"code":84106,"language":385,"meta":57,"style":57},"\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",[59,84108,84109,84117,84125,84137,84149,84161,84169,84177,84182,84187,84192,84197,84205],{"__ignoreMap":57},[79,84110,84111,84113,84115],{"class":81,"line":82},[79,84112,392],{"class":239},[79,84114,53913],{"class":395},[79,84116,53420],{"class":239},[79,84118,84119,84121,84123],{"class":81,"line":167},[79,84120,54257],{"class":239},[79,84122,3377],{"class":395},[79,84124,53420],{"class":239},[79,84126,84127,84129,84131,84133,84135],{"class":81,"line":178},[79,84128,53454],{"class":239},[79,84130,29],{"class":395},[79,84132,57424],{"class":239},[79,84134,29],{"class":395},[79,84136,53420],{"class":239},[79,84138,84139,84141,84143,84145,84147],{"class":81,"line":457},[79,84140,53454],{"class":239},[79,84142,29],{"class":395},[79,84144,57424],{"class":239},[79,84146,29],{"class":395},[79,84148,53420],{"class":239},[79,84150,84151,84153,84155,84157,84159],{"class":81,"line":462},[79,84152,53454],{"class":239},[79,84154,29],{"class":395},[79,84156,57424],{"class":239},[79,84158,29],{"class":395},[79,84160,53420],{"class":239},[79,84162,84163,84165,84167],{"class":81,"line":474},[79,84164,54529],{"class":239},[79,84166,3377],{"class":395},[79,84168,53420],{"class":239},[79,84170,84171,84173,84175],{"class":81,"line":480},[79,84172,54257],{"class":239},[79,84174,53926],{"class":395},[79,84176,53420],{"class":239},[79,84178,84179],{"class":81,"line":486},[79,84180,84181],{"class":239},"    const lis = document.querySelectorAll('li')\n",[79,84183,84184],{"class":81,"line":491},[79,84185,84186],{"class":239},"    const liss = Array.from(lis)\n",[79,84188,84189],{"class":81,"line":497},[79,84190,84191],{"class":239},"    liss.pop()\n",[79,84193,84194],{"class":81,"line":503},[79,84195,84196],{"class":239},"    console.log(liss)\n",[79,84198,84199,84201,84203],{"class":81,"line":509},[79,84200,54529],{"class":239},[79,84202,53926],{"class":395},[79,84204,53420],{"class":239},[79,84206,84207,84209,84211],{"class":81,"line":514},[79,84208,53898],{"class":239},[79,84210,53913],{"class":395},[79,84212,53420],{"class":239},[19,84214,84215],{},[3699,84216],{"alt":57,"src":84217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[24137,84219,84221],{"id":84220},"_41053-string","4.10.5.3 String",[19,84223,84224],{},[3699,84225],{"alt":57,"src":84226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[25049,84228,84230],{"id":84229},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[51,84232,84234],{"className":383,"code":84233,"language":385,"meta":57,"style":57},"\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",[59,84235,84236,84244,84252,84257,84262,84267,84271,84276,84281,84286,84294],{"__ignoreMap":57},[79,84237,84238,84240,84242],{"class":81,"line":82},[79,84239,392],{"class":239},[79,84241,53913],{"class":395},[79,84243,53420],{"class":239},[79,84245,84246,84248,84250],{"class":81,"line":167},[79,84247,54257],{"class":239},[79,84249,53926],{"class":395},[79,84251,53420],{"class":239},[79,84253,84254],{"class":81,"line":178},[79,84255,84256],{"class":239},"    \u002F\u002F 把字符串转化为数组\n",[79,84258,84259],{"class":81,"line":457},[79,84260,84261],{"class":239},"    const str = 'pink,red'\n",[79,84263,84264],{"class":81,"line":462},[79,84265,84266],{"class":239},"    const arr = str.split(',')\n",[79,84268,84269],{"class":81,"line":474},[79,84270,82745],{"class":239},[79,84272,84273],{"class":81,"line":480},[79,84274,84275],{"class":239},"    const str1 = '2025-8-25'\n",[79,84277,84278],{"class":81,"line":486},[79,84279,84280],{"class":239},"    const arr1 = str1.split('-')\n",[79,84282,84283],{"class":81,"line":491},[79,84284,84285],{"class":239},"    console.log(arr1)\n",[79,84287,84288,84290,84292],{"class":81,"line":497},[79,84289,54529],{"class":239},[79,84291,53926],{"class":395},[79,84293,53420],{"class":239},[79,84295,84296,84298,84300],{"class":81,"line":503},[79,84297,53898],{"class":239},[79,84299,53913],{"class":395},[79,84301,53420],{"class":239},[25049,84303,84305],{"id":84304},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,84307,7379],{},[19,84309,84310],{},"substring(indexStart)",[19,84312,84313],{},"substring(indexStart, indexEnd)",[3377,84315,84316,84327,84339,84349],{},[29,84317,84318,84319,84322,84323,84326],{},"如果省略了 ",[59,84320,84321],{},"indexEnd","，则 ",[59,84324,84325],{},"substring()"," 提取字符直到字符串的末尾",[29,84328,84329,84330,84333,84334,84322,84336,84338],{},"如果 ",[59,84331,84332],{},"indexStart"," 等于 ",[59,84335,84321],{},[59,84337,84325],{}," 返回一个空字符串",[29,84340,84329,84341,84343,84344,84322,84346,84348],{},[59,84342,84332],{}," 大于 ",[59,84345,84321],{},[59,84347,84325],{}," 的效果就像交换了这两个参数一样",[29,84350,84351],{},"结束的索引号不包含想要截取的部分",[51,84353,84355],{"className":83596,"code":84354,"language":83598,"meta":57,"style":57},"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",[59,84356,84357,84369,84373,84407,84437,84441,84472,84476,84503,84533,84563,84567,84598],{"__ignoreMap":57},[79,84358,84359,84362,84364,84367],{"class":81,"line":82},[79,84360,84361],{"class":239},"const anyString ",[79,84363,244],{"class":243},[79,84365,84366],{"class":89}," \"Mozilla\"",[79,84368,3531],{"class":239},[79,84370,84371],{"class":81,"line":167},[79,84372,454],{"emptyLinePlaceholder":453},[79,84374,84375,84378,84380,84382,84384,84387,84389,84392,84394,84396,84398,84400,84402,84404],{"class":81,"line":178},[79,84376,84377],{"class":96},"console",[79,84379,2931],{"class":239},[79,84381,60357],{"class":96},[79,84383,685],{"class":239},[79,84385,84386],{"class":96},"anyString",[79,84388,2931],{"class":239},[79,84390,84391],{"class":96},"substring",[79,84393,685],{"class":239},[79,84395,1030],{"class":96},[79,84397,1060],{"class":239},[79,84399,1072],{"class":96},[79,84401,77361],{"class":239},[79,84403,35444],{"class":243},[79,84405,84406],{"class":89}," 'M'\n",[79,84408,84409,84411,84413,84415,84417,84419,84421,84423,84425,84427,84429,84431,84433,84435],{"class":81,"line":457},[79,84410,84377],{"class":96},[79,84412,2931],{"class":239},[79,84414,60357],{"class":96},[79,84416,685],{"class":239},[79,84418,84386],{"class":96},[79,84420,2931],{"class":239},[79,84422,84391],{"class":96},[79,84424,685],{"class":239},[79,84426,1072],{"class":96},[79,84428,1060],{"class":239},[79,84430,1030],{"class":96},[79,84432,77361],{"class":239},[79,84434,35444],{"class":243},[79,84436,84406],{"class":89},[79,84438,84439],{"class":81,"line":462},[79,84440,454],{"emptyLinePlaceholder":453},[79,84442,84443,84445,84447,84449,84451,84453,84455,84457,84459,84461,84463,84465,84467,84469],{"class":81,"line":474},[79,84444,84377],{"class":96},[79,84446,2931],{"class":239},[79,84448,60357],{"class":96},[79,84450,685],{"class":239},[79,84452,84386],{"class":96},[79,84454,2931],{"class":239},[79,84456,84391],{"class":96},[79,84458,685],{"class":239},[79,84460,1030],{"class":96},[79,84462,1060],{"class":239},[79,84464,2718],{"class":96},[79,84466,77361],{"class":239},[79,84468,35444],{"class":243},[79,84470,84471],{"class":89}," 'Mozill'\n",[79,84473,84474],{"class":81,"line":480},[79,84475,454],{"emptyLinePlaceholder":453},[79,84477,84478,84480,84482,84484,84486,84488,84490,84492,84494,84496,84498,84500],{"class":81,"line":486},[79,84479,84377],{"class":96},[79,84481,2931],{"class":239},[79,84483,60357],{"class":96},[79,84485,685],{"class":239},[79,84487,84386],{"class":96},[79,84489,2931],{"class":239},[79,84491,84391],{"class":96},[79,84493,685],{"class":239},[79,84495,2668],{"class":96},[79,84497,77361],{"class":239},[79,84499,35444],{"class":243},[79,84501,84502],{"class":89}," 'lla'\n",[79,84504,84505,84507,84509,84511,84513,84515,84517,84519,84521,84523,84525,84527,84529,84531],{"class":81,"line":491},[79,84506,84377],{"class":96},[79,84508,2931],{"class":239},[79,84510,60357],{"class":96},[79,84512,685],{"class":239},[79,84514,84386],{"class":96},[79,84516,2931],{"class":239},[79,84518,84391],{"class":96},[79,84520,685],{"class":239},[79,84522,2668],{"class":96},[79,84524,1060],{"class":239},[79,84526,2743],{"class":96},[79,84528,77417],{"class":239},[79,84530,35444],{"class":243},[79,84532,84502],{"class":89},[79,84534,84535,84537,84539,84541,84543,84545,84547,84549,84551,84553,84555,84557,84559,84561],{"class":81,"line":497},[79,84536,84377],{"class":96},[79,84538,2931],{"class":239},[79,84540,60357],{"class":96},[79,84542,685],{"class":239},[79,84544,84386],{"class":96},[79,84546,2931],{"class":239},[79,84548,84391],{"class":96},[79,84550,685],{"class":239},[79,84552,2743],{"class":96},[79,84554,1060],{"class":239},[79,84556,2668],{"class":96},[79,84558,77361],{"class":239},[79,84560,35444],{"class":243},[79,84562,84502],{"class":89},[79,84564,84565],{"class":81,"line":503},[79,84566,454],{"emptyLinePlaceholder":453},[79,84568,84569,84571,84573,84575,84577,84579,84581,84583,84585,84587,84589,84591,84593,84595],{"class":81,"line":509},[79,84570,84377],{"class":96},[79,84572,2931],{"class":239},[79,84574,60357],{"class":96},[79,84576,685],{"class":239},[79,84578,84386],{"class":96},[79,84580,2931],{"class":239},[79,84582,84391],{"class":96},[79,84584,685],{"class":239},[79,84586,1030],{"class":96},[79,84588,1060],{"class":239},[79,84590,2743],{"class":96},[79,84592,77361],{"class":239},[79,84594,35444],{"class":243},[79,84596,84597],{"class":89}," 'Mozilla'\n",[79,84599,84600,84602,84604,84606,84608,84610,84612,84614,84616,84618,84620,84622,84624,84626],{"class":81,"line":514},[79,84601,84377],{"class":96},[79,84603,2931],{"class":239},[79,84605,60357],{"class":96},[79,84607,685],{"class":239},[79,84609,84386],{"class":96},[79,84611,2931],{"class":239},[79,84613,84391],{"class":96},[79,84615,685],{"class":239},[79,84617,1030],{"class":96},[79,84619,1060],{"class":239},[79,84621,2820],{"class":96},[79,84623,77361],{"class":239},[79,84625,35444],{"class":243},[79,84627,84597],{"class":89},[25049,84629,84631],{"id":84630},"_410533-startswith","4.10.5.3.3 startsWith",[19,84633,84634,2113,84637,84642,84643,1601,84645],{},[59,84635,84636],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)",[2528,84638,84639],{},[59,84640,84641],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[59,84644,3599],{},[59,84646,68129],{},[51,84648,84650],{"className":79603,"code":84649,"language":79605,"meta":57,"style":57},"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",[59,84651,84652,84664,84683,84688,84708],{"__ignoreMap":57},[79,84653,84654,84656,84659,84661],{"class":81,"line":82},[79,84655,8986],{"class":243},[79,84657,84658],{"class":239}," str1 ",[79,84660,244],{"class":243},[79,84662,84663],{"class":89}," \"Saturday night plans\"\n",[79,84665,84666,84668,84670,84673,84676,84678,84681],{"class":81,"line":167},[79,84667,79640],{"class":239},[79,84669,60357],{"class":85},[79,84671,84672],{"class":239},"(str1.",[79,84674,84675],{"class":85},"startsWith",[79,84677,685],{"class":239},[79,84679,84680],{"class":89},"\"Sat\"",[79,84682,1191],{"class":239},[79,84684,84685],{"class":81,"line":178},[79,84686,84687],{"class":2440},"\u002F\u002F Expected output: true\n",[79,84689,84690,84692,84694,84696,84698,84700,84702,84704,84706],{"class":81,"line":457},[79,84691,79640],{"class":239},[79,84693,60357],{"class":85},[79,84695,84672],{"class":239},[79,84697,84675],{"class":85},[79,84699,685],{"class":239},[79,84701,84680],{"class":89},[79,84703,1060],{"class":239},[79,84705,1188],{"class":96},[79,84707,1191],{"class":239},[79,84709,84710],{"class":81,"line":462},[79,84711,84712],{"class":2440},"\u002F\u002F Expected output: false\n",[51,84714,84716],{"className":52747,"code":84715,"language":52749,"meta":57,"style":57},"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",[59,84717,84718,84723,84728,84732,84737,84742],{"__ignoreMap":57},[79,84719,84720],{"class":81,"line":82},[79,84721,84722],{"class":239},"startsWith(searchString)\n",[79,84724,84725],{"class":81,"line":167},[79,84726,84727],{"class":239},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[79,84729,84730],{"class":81,"line":178},[79,84731,454],{"emptyLinePlaceholder":453},[79,84733,84734],{"class":81,"line":457},[79,84735,84736],{"class":239},"const str3 = 'pink老师上课中'\n",[79,84738,84739],{"class":81,"line":462},[79,84740,84741],{"class":239},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[79,84743,84744],{"class":81,"line":474},[79,84745,84746],{"class":239},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[25049,84748,84750],{"id":84749},"_410534-includes","4.10.5.3.4 includes",[19,84752,84753],{},"includes(searchString) includes(searchString, position)",[26,84755,84756],{},[29,84757,84758],{},"searchString:",[19,84760,84761,84762,84764,84765,84770,84771,84776,84777,23639,84780,84783,84784,84787],{},"一个要在 ",[59,84763,642],{}," 中查找的字符串。",[2614,84766,84769],{"href":84767,"rel":84768},"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",[26001],"不能是正则表达式","。所有非正则表达式的值都会被",[2614,84772,84775],{"href":84773,"rel":84774},"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",[26001],"强制转换为字符串","，因此如果该参数被省略或传入 ",[59,84778,84779],{},"undefined",[59,84781,84782],{},"includes()"," 方法会在字符串中搜索 ",[59,84785,84786],{},"\"undefined\"","，这通常不是你想要的",[26,84789,84790],{"start":167},[29,84791,84792,3232],{},[59,84793,84794],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84796,84797,84798,84801,84802],{},"在字符串中开始搜索 ",[59,84799,84800],{},"searchString"," 的位置。默认值为 ",[59,84803,1030],{},[26,84805,84806],{"start":178},[29,84807,84808],{},"返回值：",[19,84810,84811,84812,84814,84815,84819,84820],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[59,84813,84800],{}," 为空字符串的情况），则返回 ",[2528,84816,84817],{},[59,84818,3599],{}," ，否则返回 ",[2528,84821,84822],{},[59,84823,68129],{},[26,84825,84826],{"start":457},[29,84827,84828],{},"异常：",[19,84830,84329,84831,15957,84833,84837],{},[59,84832,84800],{},[2614,84834,84836],{"href":84767,"rel":84835},[26001],"是一个正则表达式","，则会抛出",[19,84839,84840],{},"只要是有就是true，不需要非得以谁开头结尾",[51,84842,84844],{"className":79603,"code":84843,"language":79605,"meta":57,"style":57},"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",[59,84845,84846,84857,84880,84899,84919,84941,84960],{"__ignoreMap":57},[79,84847,84848,84850,84852,84854],{"class":81,"line":82},[79,84849,8986],{"class":243},[79,84851,81883],{"class":239},[79,84853,244],{"class":243},[79,84855,84856],{"class":89}," \"To be, or not to be, that is the question.\"\n",[79,84858,84859,84861,84863,84866,84869,84871,84874,84877],{"class":81,"line":167},[79,84860,79640],{"class":239},[79,84862,60357],{"class":85},[79,84864,84865],{"class":239},"(str.",[79,84867,84868],{"class":85},"includes",[79,84870,685],{"class":239},[79,84872,84873],{"class":89},"\"To be\"",[79,84875,84876],{"class":239},"))",[79,84878,84879],{"class":2440},"  \u002F\u002F true\n",[79,84881,84882,84884,84886,84888,84890,84892,84895,84897],{"class":81,"line":178},[79,84883,79640],{"class":239},[79,84885,60357],{"class":85},[79,84887,84865],{"class":239},[79,84889,84868],{"class":85},[79,84891,685],{"class":239},[79,84893,84894],{"class":89},"\"question\"",[79,84896,84876],{"class":239},[79,84898,84879],{"class":2440},[79,84900,84901,84903,84905,84907,84909,84911,84914,84916],{"class":81,"line":457},[79,84902,79640],{"class":239},[79,84904,60357],{"class":85},[79,84906,84865],{"class":239},[79,84908,84868],{"class":85},[79,84910,685],{"class":239},[79,84912,84913],{"class":89},"\"nonexistent\"",[79,84915,84876],{"class":239},[79,84917,84918],{"class":2440},"  \u002F\u002F false\n",[79,84920,84921,84923,84925,84927,84929,84931,84933,84935,84937,84939],{"class":81,"line":462},[79,84922,79640],{"class":239},[79,84924,60357],{"class":85},[79,84926,84865],{"class":239},[79,84928,84868],{"class":85},[79,84930,685],{"class":239},[79,84932,84873],{"class":89},[79,84934,1060],{"class":239},[79,84936,1072],{"class":96},[79,84938,84876],{"class":239},[79,84940,84918],{"class":2440},[79,84942,84943,84945,84947,84949,84951,84953,84956,84958],{"class":81,"line":474},[79,84944,79640],{"class":239},[79,84946,60357],{"class":85},[79,84948,84865],{"class":239},[79,84950,84868],{"class":85},[79,84952,685],{"class":239},[79,84954,84955],{"class":89},"\"TO BE\"",[79,84957,84876],{"class":239},[79,84959,84918],{"class":2440},[79,84961,84962,84964,84966,84968,84970,84972,84974,84976],{"class":81,"line":480},[79,84963,79640],{"class":239},[79,84965,60357],{"class":85},[79,84967,84865],{"class":239},[79,84969,84868],{"class":85},[79,84971,685],{"class":239},[79,84973,9846],{"class":89},[79,84975,84876],{"class":239},[79,84977,84879],{"class":2440},[25049,84979,84981],{"id":84980},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[51,84983,84985],{"className":383,"code":84984,"language":385,"meta":57,"style":57},"\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",[59,84986,84987,84995,85003,85008,85013,85018,85023,85028,85036],{"__ignoreMap":57},[79,84988,84989,84991,84993],{"class":81,"line":82},[79,84990,392],{"class":239},[79,84992,53913],{"class":395},[79,84994,53420],{"class":239},[79,84996,84997,84999,85001],{"class":81,"line":167},[79,84998,54257],{"class":239},[79,85000,53926],{"class":395},[79,85002,53420],{"class":239},[79,85004,85005],{"class":81,"line":178},[79,85006,85007],{"class":239},"    const num = 10\n",[79,85009,85010],{"class":81,"line":457},[79,85011,85012],{"class":239},"    \u002F\u002F 强制转换\n",[79,85014,85015],{"class":81,"line":462},[79,85016,85017],{"class":239},"    console.log(String(num))\n",[79,85019,85020],{"class":81,"line":474},[79,85021,85022],{"class":239},"    \u002F\u002F toString()方法转换\n",[79,85024,85025],{"class":81,"line":480},[79,85026,85027],{"class":239},"    console.log(num.toString())\n",[79,85029,85030,85032,85034],{"class":81,"line":486},[79,85031,54529],{"class":239},[79,85033,53926],{"class":395},[79,85035,53420],{"class":239},[79,85037,85038,85040,85042],{"class":81,"line":491},[79,85039,53898],{"class":239},[79,85041,53913],{"class":395},[79,85043,53420],{"class":239},[25049,85045,85047],{"id":85046},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,85049,85050],{},[3699,85051],{"alt":57,"src":85052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[51,85054,85056],{"className":52747,"code":85055,"language":52749,"meta":57,"style":57},"\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",[59,85057,85058,85068,85082,85086,85094,85108,85128,85140,85148,85152,85160,85172,85180,85192,85197,85202,85207,85254,85270,85278,85286,85290],{"__ignoreMap":57},[79,85059,85060,85062,85064,85066],{"class":81,"line":82},[79,85061,53411],{"class":239},[79,85063,53414],{"class":395},[79,85065,53417],{"class":85},[79,85067,53420],{"class":239},[79,85069,85070,85072,85074,85076,85078,85080],{"class":81,"line":167},[79,85071,392],{"class":239},[79,85073,52749],{"class":395},[79,85075,53429],{"class":85},[79,85077,244],{"class":239},[79,85079,53434],{"class":89},[79,85081,53420],{"class":239},[79,85083,85084],{"class":81,"line":178},[79,85085,454],{"emptyLinePlaceholder":453},[79,85087,85088,85090,85092],{"class":81,"line":457},[79,85089,392],{"class":239},[79,85091,53447],{"class":395},[79,85093,53420],{"class":239},[79,85095,85096,85098,85100,85102,85104,85106],{"class":81,"line":462},[79,85097,54257],{"class":239},[79,85099,53457],{"class":395},[79,85101,53460],{"class":85},[79,85103,244],{"class":239},[79,85105,53465],{"class":89},[79,85107,53420],{"class":239},[79,85109,85110,85112,85114,85116,85118,85120,85122,85124,85126],{"class":81,"line":474},[79,85111,54257],{"class":239},[79,85113,53457],{"class":395},[79,85115,2238],{"class":85},[79,85117,244],{"class":239},[79,85119,53504],{"class":89},[79,85121,53484],{"class":85},[79,85123,244],{"class":239},[79,85125,53511],{"class":89},[79,85127,53420],{"class":239},[79,85129,85130,85132,85134,85136,85138],{"class":81,"line":480},[79,85131,54257],{"class":239},[79,85133,53520],{"class":395},[79,85135,53523],{"class":239},[79,85137,53520],{"class":395},[79,85139,53420],{"class":239},[79,85141,85142,85144,85146],{"class":81,"line":486},[79,85143,53898],{"class":239},[79,85145,53447],{"class":395},[79,85147,53420],{"class":239},[79,85149,85150],{"class":81,"line":491},[79,85151,454],{"emptyLinePlaceholder":453},[79,85153,85154,85156,85158],{"class":81,"line":497},[79,85155,392],{"class":239},[79,85157,53913],{"class":395},[79,85159,53420],{"class":239},[79,85161,85162,85164,85166,85168,85170],{"class":81,"line":503},[79,85163,54257],{"class":239},[79,85165,53724],{"class":395},[79,85167,57424],{"class":239},[79,85169,53724],{"class":395},[79,85171,53420],{"class":239},[79,85173,85174,85176,85178],{"class":81,"line":509},[79,85175,54257],{"class":239},[79,85177,53926],{"class":395},[79,85179,53420],{"class":239},[79,85181,85182,85184,85187,85189],{"class":81,"line":514},[79,85183,13385],{"class":243},[79,85185,85186],{"class":96}," gift",[79,85188,468],{"class":243},[79,85190,85191],{"class":89}," '50g的茶叶，清洗球'\n",[79,85193,85194],{"class":81,"line":520},[79,85195,85196],{"class":2440},"    \u002F\u002F 1.把字符串拆分为数组\n",[79,85198,85199],{"class":81,"line":526},[79,85200,85201],{"class":2440},"    \u002F\u002F console.log(gift.split(','))\n",[79,85203,85204],{"class":81,"line":532},[79,85205,85206],{"class":2440},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[79,85208,85209,85211,85213,85215,85218,85221,85223,85226,85228,85230,85232,85234,85236,85239,85241,85244,85246,85248,85250,85252],{"class":81,"line":537},[79,85210,13385],{"class":243},[79,85212,76027],{"class":96},[79,85214,468],{"class":243},[79,85216,85217],{"class":239}," gift.",[79,85219,85220],{"class":85},"split",[79,85222,685],{"class":239},[79,85224,85225],{"class":89},"'，'",[79,85227,32950],{"class":239},[79,85229,76152],{"class":85},[79,85231,685],{"class":239},[79,85233,81903],{"class":7412},[79,85235,81906],{"class":243},[79,85237,85238],{"class":89}," `\u003Cspan>【赠品】${",[79,85240,81903],{"class":239},[79,85242,85243],{"class":89},"}\u003C\u002Fspan>\u003Cbr>`",[79,85245,32950],{"class":239},[79,85247,76331],{"class":85},[79,85249,685],{"class":239},[79,85251,76336],{"class":89},[79,85253,253],{"class":239},[79,85255,85256,85258,85260,85262,85264,85266,85268],{"class":81,"line":543},[79,85257,54519],{"class":239},[79,85259,56509],{"class":85},[79,85261,685],{"class":239},[79,85263,84038],{"class":89},[79,85265,76357],{"class":239},[79,85267,244],{"class":243},[79,85269,76093],{"class":239},[79,85271,85272,85274,85276],{"class":81,"line":549},[79,85273,54529],{"class":239},[79,85275,53926],{"class":395},[79,85277,53420],{"class":239},[79,85279,85280,85282,85284],{"class":81,"line":555},[79,85281,53898],{"class":239},[79,85283,53913],{"class":395},[79,85285,53420],{"class":239},[79,85287,85288],{"class":81,"line":561},[79,85289,454],{"emptyLinePlaceholder":453},[79,85291,85292,85294,85296],{"class":81,"line":567},[79,85293,53898],{"class":239},[79,85295,52749],{"class":395},[79,85297,53420],{"class":239},[24137,85299,85301],{"id":85300},"_41054-number","4.10.5.4 Number",[19,85303,85304],{},[3699,85305],{"alt":57,"src":85306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,85308,85309],{},"整数也可以进行toFixed来保留小数",[19,85311,85312],{},"比如：",[19,85314,85315],{},"const price=10",[19,85317,85318],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[24137,85320,85322],{"id":85321},"_41055-购物车展示","4.10.5.5 购物车展示",[19,85324,85325],{},[3699,85326],{"alt":57,"src":85327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[51,85329,85331],{"className":52747,"code":85330,"language":52749,"meta":57,"style":57},"\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",[59,85332,85333,85343,85357,85361,85369,85383,85403,85415,85423,85429,85439,85449,85459,85463,85467,85473,85485,85499,85503,85507,85513,85525,85541,85551,85567,85571,85575,85581,85591,85601,85605,85609,85617,85629,85641,85653,85657,85661,85669,85681,85685,85689,85700,85710,85722,85734,85744,85748,85752,85760,85769,85781,85791,85801,85805,85809,85817,85826,85833,85843,85855,85859,85863,85872,85882,85893,85905,85917,85921,85925,85934,85944,85955,85959,85963,85969,85981,85993,86003,86013,86031,86043,86047,86051,86060,86072,86082,86092,86104,86108,86116,86124,86128,86136,86150,86158,86172,86200,86208,86216,86226,86230,86238,86246,86255,86263,86272,86282,86286,86290,86298,86306,86315,86323,86331,86344,86348,86352,86360,86368,86377,86385,86393,86408,86412,86416,86424,86432,86441,86449,86457,86471,86479,86483,86487,86492,86518,86523,86560,86565,86588,86593,86647,86652,86688,86692,86698,86703,86712,86726,86735,86754,86763,86773,86778,86783,86796,86801,86855,86881,86889,86897,86901],{"__ignoreMap":57},[79,85334,85335,85337,85339,85341],{"class":81,"line":82},[79,85336,53411],{"class":239},[79,85338,53414],{"class":395},[79,85340,53417],{"class":85},[79,85342,53420],{"class":239},[79,85344,85345,85347,85349,85351,85353,85355],{"class":81,"line":167},[79,85346,392],{"class":239},[79,85348,52749],{"class":395},[79,85350,53429],{"class":85},[79,85352,244],{"class":239},[79,85354,53434],{"class":89},[79,85356,53420],{"class":239},[79,85358,85359],{"class":81,"line":178},[79,85360,454],{"emptyLinePlaceholder":453},[79,85362,85363,85365,85367],{"class":81,"line":457},[79,85364,392],{"class":239},[79,85366,53447],{"class":395},[79,85368,53420],{"class":239},[79,85370,85371,85373,85375,85377,85379,85381],{"class":81,"line":462},[79,85372,54257],{"class":239},[79,85374,53457],{"class":395},[79,85376,53460],{"class":85},[79,85378,244],{"class":239},[79,85380,53465],{"class":89},[79,85382,53420],{"class":239},[79,85384,85385,85387,85389,85391,85393,85395,85397,85399,85401],{"class":81,"line":474},[79,85386,54257],{"class":239},[79,85388,53457],{"class":395},[79,85390,2238],{"class":85},[79,85392,244],{"class":239},[79,85394,53504],{"class":89},[79,85396,53484],{"class":85},[79,85398,244],{"class":239},[79,85400,53511],{"class":89},[79,85402,53420],{"class":239},[79,85404,85405,85407,85409,85411,85413],{"class":81,"line":480},[79,85406,54257],{"class":239},[79,85408,53520],{"class":395},[79,85410,53523],{"class":239},[79,85412,53520],{"class":395},[79,85414,53420],{"class":239},[79,85416,85417,85419,85421],{"class":81,"line":486},[79,85418,54257],{"class":239},[79,85420,2287],{"class":395},[79,85422,53420],{"class":239},[79,85424,85425,85427],{"class":81,"line":491},[79,85426,8598],{"class":395},[79,85428,17732],{"class":239},[79,85430,85431,85433,85435,85437],{"class":81,"line":497},[79,85432,56805],{"class":96},[79,85434,53550],{"class":239},[79,85436,1030],{"class":96},[79,85438,3531],{"class":239},[79,85440,85441,85443,85445,85447],{"class":81,"line":503},[79,85442,56816],{"class":96},[79,85444,53550],{"class":239},[79,85446,1030],{"class":96},[79,85448,3531],{"class":239},[79,85450,85451,85453,85455,85457],{"class":81,"line":509},[79,85452,74704],{"class":96},[79,85454,53550],{"class":239},[79,85456,62615],{"class":96},[79,85458,3531],{"class":239},[79,85460,85461],{"class":81,"line":514},[79,85462,4402],{"class":239},[79,85464,85465],{"class":81,"line":520},[79,85466,454],{"emptyLinePlaceholder":453},[79,85468,85469,85471],{"class":81,"line":526},[79,85470,64233],{"class":85},[79,85472,17732],{"class":239},[79,85474,85475,85477,85479,85481,85483],{"class":81,"line":532},[79,85476,56881],{"class":96},[79,85478,53550],{"class":239},[79,85480,80682],{"class":96},[79,85482,53605],{"class":243},[79,85484,3531],{"class":239},[79,85486,85487,85489,85491,85493,85495,85497],{"class":81,"line":537},[79,85488,56816],{"class":96},[79,85490,53550],{"class":239},[79,85492,2686],{"class":96},[79,85494,53605],{"class":243},[79,85496,53669],{"class":96},[79,85498,3531],{"class":239},[79,85500,85501],{"class":81,"line":543},[79,85502,4402],{"class":239},[79,85504,85505],{"class":81,"line":549},[79,85506,454],{"emptyLinePlaceholder":453},[79,85508,85509,85511],{"class":81,"line":555},[79,85510,80733],{"class":85},[79,85512,17732],{"class":239},[79,85514,85515,85517,85519,85521,85523],{"class":81,"line":561},[79,85516,56805],{"class":96},[79,85518,53550],{"class":239},[79,85520,2948],{"class":96},[79,85522,53605],{"class":243},[79,85524,3531],{"class":239},[79,85526,85527,85529,85531,85533,85535,85537,85539],{"class":81,"line":567},[79,85528,63970],{"class":96},[79,85530,53550],{"class":239},[79,85532,30253],{"class":96},[79,85534,80788],{"class":96},[79,85536,80791],{"class":96},[79,85538,3068],{"class":243},[79,85540,3531],{"class":239},[79,85542,85543,85545,85547,85549],{"class":81,"line":573},[79,85544,57119],{"class":96},[79,85546,53550],{"class":239},[79,85548,53590],{"class":96},[79,85550,3531],{"class":239},[79,85552,85553,85555,85557,85559,85561,85563,85565],{"class":81,"line":579},[79,85554,64087],{"class":96},[79,85556,53550],{"class":239},[79,85558,1072],{"class":96},[79,85560,53605],{"class":243},[79,85562,53634],{"class":96},[79,85564,64354],{"class":96},[79,85566,3531],{"class":239},[79,85568,85569],{"class":81,"line":584},[79,85570,4402],{"class":239},[79,85572,85573],{"class":81,"line":590},[79,85574,454],{"emptyLinePlaceholder":453},[79,85576,85577,85579],{"class":81,"line":596},[79,85578,80851],{"class":85},[79,85580,17732],{"class":239},[79,85582,85583,85585,85587,85589],{"class":81,"line":602},[79,85584,64135],{"class":96},[79,85586,53550],{"class":239},[79,85588,64140],{"class":96},[79,85590,3531],{"class":239},[79,85592,85593,85595,85597,85599],{"class":81,"line":608},[79,85594,56994],{"class":96},[79,85596,53550],{"class":239},[79,85598,63928],{"class":96},[79,85600,3531],{"class":239},[79,85602,85603],{"class":81,"line":614},[79,85604,4402],{"class":239},[79,85606,85607],{"class":81,"line":620},[79,85608,454],{"emptyLinePlaceholder":453},[79,85610,85611,85613,85615],{"class":81,"line":625},[79,85612,80733],{"class":85},[79,85614,57725],{"class":395},[79,85616,17732],{"class":239},[79,85618,85619,85621,85623,85625,85627],{"class":81,"line":630},[79,85620,56881],{"class":96},[79,85622,53550],{"class":239},[79,85624,2985],{"class":96},[79,85626,53605],{"class":243},[79,85628,3531],{"class":239},[79,85630,85631,85633,85635,85637,85639],{"class":81,"line":648},[79,85632,56895],{"class":96},[79,85634,53550],{"class":239},[79,85636,2985],{"class":96},[79,85638,53605],{"class":243},[79,85640,3531],{"class":239},[79,85642,85643,85645,85647,85649,85651],{"class":81,"line":659},[79,85644,63860],{"class":96},[79,85646,53550],{"class":239},[79,85648,2694],{"class":96},[79,85650,53605],{"class":243},[79,85652,3531],{"class":239},[79,85654,85655],{"class":81,"line":676},[79,85656,4402],{"class":239},[79,85658,85659],{"class":81,"line":708},[79,85660,454],{"emptyLinePlaceholder":453},[79,85662,85663,85665,85667],{"class":81,"line":717},[79,85664,80733],{"class":85},[79,85666,64414],{"class":85},[79,85668,17732],{"class":239},[79,85670,85671,85673,85675,85677,85679],{"class":81,"line":722},[79,85672,56881],{"class":96},[79,85674,53550],{"class":239},[79,85676,3947],{"class":96},[79,85678,53605],{"class":243},[79,85680,3531],{"class":239},[79,85682,85683],{"class":81,"line":727},[79,85684,4402],{"class":239},[79,85686,85687],{"class":81,"line":738},[79,85688,454],{"emptyLinePlaceholder":453},[79,85690,85691,85693,85695,85698],{"class":81,"line":753},[79,85692,80733],{"class":85},[79,85694,64414],{"class":85},[79,85696,85697],{"class":85}," .tag",[79,85699,17732],{"class":239},[79,85701,85702,85704,85706,85708],{"class":81,"line":768},[79,85703,57119],{"class":96},[79,85705,53550],{"class":239},[79,85707,62979],{"class":96},[79,85709,3531],{"class":239},[79,85711,85712,85714,85716,85718,85720],{"class":81,"line":776},[79,85713,56805],{"class":96},[79,85715,53550],{"class":239},[79,85717,1049],{"class":96},[79,85719,53605],{"class":243},[79,85721,3531],{"class":239},[79,85723,85724,85726,85728,85730,85732],{"class":81,"line":781},[79,85725,57032],{"class":96},[79,85727,53550],{"class":239},[79,85729,2872],{"class":96},[79,85731,53605],{"class":243},[79,85733,3531],{"class":239},[79,85735,85736,85738,85740,85742],{"class":81,"line":786},[79,85737,59526],{"class":96},[79,85739,53550],{"class":239},[79,85741,64180],{"class":96},[79,85743,3531],{"class":239},[79,85745,85746],{"class":81,"line":802},[79,85747,4402],{"class":239},[79,85749,85750],{"class":81,"line":815},[79,85751,454],{"emptyLinePlaceholder":453},[79,85753,85754,85756,85758],{"class":81,"line":828},[79,85755,80733],{"class":85},[79,85757,81025],{"class":85},[79,85759,33585],{"class":239},[79,85761,85762,85764,85767],{"class":81,"line":842},[79,85763,80733],{"class":85},[79,85765,85766],{"class":85}," .sub-total",[79,85768,17732],{"class":239},[79,85770,85771,85773,85775,85777,85779],{"class":81,"line":859},[79,85772,57032],{"class":96},[79,85774,53550],{"class":239},[79,85776,3023],{"class":96},[79,85778,53605],{"class":243},[79,85780,3531],{"class":239},[79,85782,85783,85785,85787,85789],{"class":81,"line":878},[79,85784,59526],{"class":96},[79,85786,53550],{"class":239},[79,85788,81048],{"class":96},[79,85790,3531],{"class":239},[79,85792,85793,85795,85797,85799],{"class":81,"line":883},[79,85794,63947],{"class":96},[79,85796,53550],{"class":239},[79,85798,1072],{"class":96},[79,85800,3531],{"class":239},[79,85802,85803],{"class":81,"line":888},[79,85804,4402],{"class":239},[79,85806,85807],{"class":81,"line":904},[79,85808,454],{"emptyLinePlaceholder":453},[79,85810,85811,85813,85815],{"class":81,"line":919},[79,85812,80733],{"class":85},[79,85814,81065],{"class":85},[79,85816,33585],{"class":239},[79,85818,85819,85821,85824],{"class":81,"line":930},[79,85820,80733],{"class":85},[79,85822,85823],{"class":85}," .sub-total::before",[79,85825,33585],{"class":239},[79,85827,85828,85831],{"class":81,"line":941},[79,85829,85830],{"class":85},"    .amount::before",[79,85832,17732],{"class":239},[79,85834,85835,85837,85839,85841],{"class":81,"line":946},[79,85836,81072],{"class":96},[79,85838,53550],{"class":239},[79,85840,81077],{"class":89},[79,85842,3531],{"class":239},[79,85844,85845,85847,85849,85851,85853],{"class":81,"line":969},[79,85846,57032],{"class":96},[79,85848,53550],{"class":239},[79,85850,2872],{"class":96},[79,85852,53605],{"class":243},[79,85854,3531],{"class":239},[79,85856,85857],{"class":81,"line":975},[79,85858,4402],{"class":239},[79,85860,85861],{"class":81,"line":989},[79,85862,454],{"emptyLinePlaceholder":453},[79,85864,85865,85867,85870],{"class":81,"line":1003},[79,85866,80733],{"class":85},[79,85868,85869],{"class":85}," .spec",[79,85871,17732],{"class":239},[79,85873,85874,85876,85878,85880],{"class":81,"line":1019},[79,85875,63947],{"class":96},[79,85877,53550],{"class":239},[79,85879,1049],{"class":96},[79,85881,3531],{"class":239},[79,85883,85884,85886,85888,85891],{"class":81,"line":1024},[79,85885,59526],{"class":96},[79,85887,53550],{"class":239},[79,85889,85890],{"class":96},"#888",[79,85892,3531],{"class":239},[79,85894,85895,85897,85899,85901,85903],{"class":81,"line":1067},[79,85896,57032],{"class":96},[79,85898,53550],{"class":239},[79,85900,2922],{"class":96},[79,85902,53605],{"class":243},[79,85904,3531],{"class":239},[79,85906,85907,85909,85911,85913,85915],{"class":81,"line":1101},[79,85908,64110],{"class":96},[79,85910,53550],{"class":239},[79,85912,3073],{"class":96},[79,85914,53605],{"class":243},[79,85916,3531],{"class":239},[79,85918,85919],{"class":81,"line":1106},[79,85920,4402],{"class":239},[79,85922,85923],{"class":81,"line":1112},[79,85924,454],{"emptyLinePlaceholder":453},[79,85926,85927,85929,85932],{"class":81,"line":1124},[79,85928,80733],{"class":85},[79,85930,85931],{"class":85}," .count",[79,85933,17732],{"class":239},[79,85935,85936,85938,85940,85942],{"class":81,"line":1129},[79,85937,63947],{"class":96},[79,85939,53550],{"class":239},[79,85941,1072],{"class":96},[79,85943,3531],{"class":239},[79,85945,85946,85948,85950,85953],{"class":81,"line":1150},[79,85947,59526],{"class":96},[79,85949,53550],{"class":239},[79,85951,85952],{"class":96},"#aaa",[79,85954,3531],{"class":239},[79,85956,85957],{"class":81,"line":1161},[79,85958,4402],{"class":239},[79,85960,85961],{"class":81,"line":1175},[79,85962,454],{"emptyLinePlaceholder":453},[79,85964,85965,85967],{"class":81,"line":1194},[79,85966,74583],{"class":85},[79,85968,17732],{"class":239},[79,85970,85971,85973,85975,85977,85979],{"class":81,"line":1211},[79,85972,56881],{"class":96},[79,85974,53550],{"class":239},[79,85976,80682],{"class":96},[79,85978,53605],{"class":243},[79,85980,3531],{"class":239},[79,85982,85983,85985,85987,85989,85991],{"class":81,"line":1228},[79,85984,56816],{"class":96},[79,85986,53550],{"class":239},[79,85988,1030],{"class":96},[79,85990,53669],{"class":96},[79,85992,3531],{"class":239},[79,85994,85995,85997,85999,86001],{"class":81,"line":1246},[79,85996,57119],{"class":96},[79,85998,53550],{"class":239},[79,86000,53590],{"class":96},[79,86002,3531],{"class":239},[79,86004,86005,86007,86009,86011],{"class":81,"line":1251},[79,86006,57130],{"class":96},[79,86008,53550],{"class":239},[79,86010,53693],{"class":96},[79,86012,3531],{"class":239},[79,86014,86015,86018,86020,86022,86024,86026,86029],{"class":81,"line":1274},[79,86016,86017],{"class":96},"      border-top",[79,86019,53550],{"class":239},[79,86021,1072],{"class":96},[79,86023,53605],{"class":243},[79,86025,53634],{"class":96},[79,86027,86028],{"class":96}," #4e4e4e",[79,86030,3531],{"class":239},[79,86032,86033,86035,86037,86039,86041],{"class":81,"line":1296},[79,86034,56805],{"class":96},[79,86036,53550],{"class":239},[79,86038,3073],{"class":96},[79,86040,53605],{"class":243},[79,86042,3531],{"class":239},[79,86044,86045],{"class":81,"line":1316},[79,86046,4402],{"class":239},[79,86048,86049],{"class":81,"line":1321},[79,86050,454],{"emptyLinePlaceholder":453},[79,86052,86053,86055,86058],{"class":81,"line":1326},[79,86054,74583],{"class":85},[79,86056,86057],{"class":85}," .amount",[79,86059,17732],{"class":239},[79,86061,86062,86064,86066,86068,86070],{"class":81,"line":1342},[79,86063,57032],{"class":96},[79,86065,53550],{"class":239},[79,86067,3023],{"class":96},[79,86069,53605],{"class":243},[79,86071,3531],{"class":239},[79,86073,86074,86076,86078,86080],{"class":81,"line":18985},[79,86075,59526],{"class":96},[79,86077,53550],{"class":239},[79,86079,81048],{"class":96},[79,86081,3531],{"class":239},[79,86083,86084,86086,86088,86090],{"class":81,"line":18990},[79,86085,64444],{"class":96},[79,86087,53550],{"class":239},[79,86089,53602],{"class":96},[79,86091,3531],{"class":239},[79,86093,86094,86096,86098,86100,86102],{"class":81,"line":18995},[79,86095,63860],{"class":96},[79,86097,53550],{"class":239},[79,86099,3029],{"class":96},[79,86101,53605],{"class":243},[79,86103,3531],{"class":239},[79,86105,86106],{"class":81,"line":19009},[79,86107,4402],{"class":239},[79,86109,86110,86112,86114],{"class":81,"line":19021},[79,86111,54529],{"class":239},[79,86113,2287],{"class":395},[79,86115,53420],{"class":239},[79,86117,86118,86120,86122],{"class":81,"line":19026},[79,86119,53898],{"class":239},[79,86121,53447],{"class":395},[79,86123,53420],{"class":239},[79,86125,86126],{"class":81,"line":19039},[79,86127,454],{"emptyLinePlaceholder":453},[79,86129,86130,86132,86134],{"class":81,"line":19044},[79,86131,392],{"class":239},[79,86133,53913],{"class":395},[79,86135,53420],{"class":239},[79,86137,86138,86140,86142,86144,86146,86148],{"class":81,"line":19049},[79,86139,54257],{"class":239},[79,86141,53724],{"class":395},[79,86143,55596],{"class":85},[79,86145,244],{"class":239},[79,86147,64718],{"class":89},[79,86149,53420],{"class":239},[79,86151,86152,86154,86156],{"class":81,"line":19054},[79,86153,54529],{"class":239},[79,86155,53724],{"class":395},[79,86157,53420],{"class":239},[79,86159,86160,86162,86164,86166,86168,86170],{"class":81,"line":19067},[79,86161,54257],{"class":239},[79,86163,53724],{"class":395},[79,86165,55596],{"class":85},[79,86167,244],{"class":239},[79,86169,64690],{"class":89},[79,86171,53420],{"class":239},[79,86173,86174,86176,86178,86181,86183,86185,86187,86190,86192,86194,86196,86198],{"class":81,"line":19072},[79,86175,53454],{"class":239},[79,86177,53724],{"class":395},[79,86179,86180],{"class":239},">合计：\u003C",[79,86182,79],{"class":395},[79,86184,55596],{"class":85},[79,86186,244],{"class":239},[79,86188,86189],{"class":89},"\"amount\"",[79,86191,57424],{"class":239},[79,86193,79],{"class":395},[79,86195,57424],{"class":239},[79,86197,53724],{"class":395},[79,86199,53420],{"class":239},[79,86201,86202,86204,86206],{"class":81,"line":34748},[79,86203,54529],{"class":239},[79,86205,53724],{"class":395},[79,86207,53420],{"class":239},[79,86209,86210,86212,86214],{"class":81,"line":34754},[79,86211,54257],{"class":239},[79,86213,53926],{"class":395},[79,86215,53420],{"class":239},[79,86217,86218,86220,86222,86224],{"class":81,"line":34760},[79,86219,13385],{"class":243},[79,86221,81485],{"class":96},[79,86223,468],{"class":243},[79,86225,57557],{"class":239},[79,86227,86228],{"class":81,"line":34766},[79,86229,81494],{"class":239},[79,86231,86232,86234,86236],{"class":81,"line":34772},[79,86233,81499],{"class":239},[79,86235,81502],{"class":89},[79,86237,33585],{"class":239},[79,86239,86240,86242,86244],{"class":81,"line":34783},[79,86241,81509],{"class":239},[79,86243,81512],{"class":89},[79,86245,33585],{"class":239},[79,86247,86248,86250,86253],{"class":81,"line":34789},[79,86249,81519],{"class":239},[79,86251,86252],{"class":96},"289.9",[79,86254,33585],{"class":239},[79,86256,86257,86259,86261],{"class":81,"line":34809},[79,86258,81529],{"class":239},[79,86260,81532],{"class":89},[79,86262,33585],{"class":239},[79,86264,86265,86268,86270],{"class":81,"line":34815},[79,86266,86267],{"class":239},"        count: ",[79,86269,1049],{"class":96},[79,86271,33585],{"class":239},[79,86273,86274,86277,86280],{"class":81,"line":34826},[79,86275,86276],{"class":239},"        spec: { color: ",[79,86278,86279],{"class":89},"'白色'",[79,86281,57714],{"class":239},[79,86283,86284],{"class":81,"line":34832},[79,86285,80000],{"class":239},[79,86287,86288],{"class":81,"line":34838},[79,86289,81494],{"class":239},[79,86291,86292,86294,86296],{"class":81,"line":34844},[79,86293,81499],{"class":239},[79,86295,81593],{"class":89},[79,86297,33585],{"class":239},[79,86299,86300,86302,86304],{"class":81,"line":34850},[79,86301,81509],{"class":239},[79,86303,81602],{"class":89},[79,86305,33585],{"class":239},[79,86307,86308,86310,86313],{"class":81,"line":34856},[79,86309,81519],{"class":239},[79,86311,86312],{"class":96},"109.8",[79,86314,33585],{"class":239},[79,86316,86317,86319,86321],{"class":81,"line":34862},[79,86318,81529],{"class":239},[79,86320,81620],{"class":89},[79,86322,33585],{"class":239},[79,86324,86325,86327,86329],{"class":81,"line":34868},[79,86326,86267],{"class":239},[79,86328,1188],{"class":96},[79,86330,33585],{"class":239},[79,86332,86333,86336,86338,86340,86342],{"class":81,"line":34888},[79,86334,86335],{"class":239},"        spec: { size: ",[79,86337,84010],{"class":89},[79,86339,57574],{"class":239},[79,86341,84015],{"class":89},[79,86343,57714],{"class":239},[79,86345,86346],{"class":81,"line":34894},[79,86347,80000],{"class":239},[79,86349,86350],{"class":81,"line":34910},[79,86351,81494],{"class":239},[79,86353,86354,86356,86358],{"class":81,"line":34916},[79,86355,81499],{"class":239},[79,86357,81637],{"class":89},[79,86359,33585],{"class":239},[79,86361,86362,86364,86366],{"class":81,"line":34930},[79,86363,81509],{"class":239},[79,86365,81646],{"class":89},[79,86367,33585],{"class":239},[79,86369,86370,86372,86375],{"class":81,"line":34936},[79,86371,81519],{"class":239},[79,86373,86374],{"class":96},"488",[79,86376,33585],{"class":239},[79,86378,86379,86381,86383],{"class":81,"line":34951},[79,86380,81529],{"class":239},[79,86382,81664],{"class":89},[79,86384,33585],{"class":239},[79,86386,86387,86389,86391],{"class":81,"line":34957},[79,86388,86267],{"class":239},[79,86390,1072],{"class":96},[79,86392,33585],{"class":239},[79,86394,86395,86397,86400,86403,86406],{"class":81,"line":34966},[79,86396,86276],{"class":239},[79,86398,86399],{"class":89},"'青色'",[79,86401,86402],{"class":239},", sum: ",[79,86404,86405],{"class":89},"'一大四小'",[79,86407,57714],{"class":239},[79,86409,86410],{"class":81,"line":34972},[79,86411,80000],{"class":239},[79,86413,86414],{"class":81,"line":34981},[79,86415,81494],{"class":239},[79,86417,86418,86420,86422],{"class":81,"line":34987},[79,86419,81499],{"class":239},[79,86421,81681],{"class":89},[79,86423,33585],{"class":239},[79,86425,86426,86428,86430],{"class":81,"line":34993},[79,86427,81509],{"class":239},[79,86429,81690],{"class":89},[79,86431,33585],{"class":239},[79,86433,86434,86436,86439],{"class":81,"line":35002},[79,86435,81519],{"class":239},[79,86437,86438],{"class":96},"139",[79,86440,33585],{"class":239},[79,86442,86443,86445,86447],{"class":81,"line":35008},[79,86444,81529],{"class":239},[79,86446,81708],{"class":89},[79,86448,33585],{"class":239},[79,86450,86451,86453,86455],{"class":81,"line":35019},[79,86452,86267],{"class":239},[79,86454,1072],{"class":96},[79,86456,33585],{"class":239},[79,86458,86459,86461,86464,86466,86469],{"class":81,"line":35025},[79,86460,86335],{"class":239},[79,86462,86463],{"class":89},"'小号'",[79,86465,57574],{"class":239},[79,86467,86468],{"class":89},"'紫色'",[79,86470,57580],{"class":239},[79,86472,86473,86476],{"class":81,"line":35044},[79,86474,86475],{"class":239},"        gift: ",[79,86477,86478],{"class":89},"'50g茶叶,清洗球'\n",[79,86480,86481],{"class":81,"line":35050},[79,86482,54510],{"class":239},[79,86484,86485],{"class":81,"line":35061},[79,86486,55219],{"class":239},[79,86488,86489],{"class":81,"line":35067},[79,86490,86491],{"class":2440},"    \u002F\u002F  1.根据数据渲染页面\n",[79,86493,86494,86496,86498,86500,86502,86504,86506,86508,86510,86512,86514,86516],{"class":81,"line":35087},[79,86495,54519],{"class":239},[79,86497,56509],{"class":85},[79,86499,685],{"class":239},[79,86501,82008],{"class":89},[79,86503,76357],{"class":239},[79,86505,244],{"class":243},[79,86507,82155],{"class":239},[79,86509,76152],{"class":85},[79,86511,685],{"class":239},[79,86513,81903],{"class":7412},[79,86515,81906],{"class":243},[79,86517,17732],{"class":239},[79,86519,86520],{"class":81,"line":35103},[79,86521,86522],{"class":2440},"      \u002F\u002F 对象解构\n",[79,86524,86525,86527,86529,86531,86533,86535,86537,86540,86542,86544,86546,86549,86551,86554,86556,86558],{"class":81,"line":35109},[79,86526,60338],{"class":243},[79,86528,81915],{"class":239},[79,86530,81927],{"class":96},[79,86532,1060],{"class":239},[79,86534,697],{"class":96},[79,86536,1060],{"class":239},[79,86538,86539],{"class":96},"count",[79,86541,1060],{"class":239},[79,86543,81922],{"class":96},[79,86545,1060],{"class":239},[79,86547,86548],{"class":96},"spec",[79,86550,1060],{"class":239},[79,86552,86553],{"class":96},"gift",[79,86555,81930],{"class":239},[79,86557,244],{"class":243},[79,86559,81935],{"class":239},[79,86561,86562],{"class":81,"line":35123},[79,86563,86564],{"class":2440},"      \u002F\u002F 规格文字模块处理\n",[79,86566,86567,86569,86572,86574,86576,86578,86580,86582,86584,86586],{"class":81,"line":35129},[79,86568,60338],{"class":243},[79,86570,86571],{"class":96}," text",[79,86573,468],{"class":243},[79,86575,84045],{"class":239},[79,86577,84048],{"class":85},[79,86579,84051],{"class":239},[79,86581,76331],{"class":85},[79,86583,685],{"class":239},[79,86585,84058],{"class":89},[79,86587,253],{"class":239},[79,86589,86590],{"class":81,"line":35135},[79,86591,86592],{"class":2440},"      \u002F\u002F 处理赠品模块\n",[79,86594,86595,86597,86599,86601,86604,86606,86608,86610,86612,86615,86617,86619,86621,86623,86625,86628,86630,86633,86635,86637,86639,86641,86643,86645],{"class":81,"line":35146},[79,86596,60338],{"class":243},[79,86598,76027],{"class":96},[79,86600,468],{"class":243},[79,86602,86603],{"class":239}," gift ",[79,86605,3356],{"class":243},[79,86607,85217],{"class":239},[79,86609,85220],{"class":85},[79,86611,685],{"class":239},[79,86613,86614],{"class":89},"','",[79,86616,32950],{"class":239},[79,86618,76152],{"class":85},[79,86620,685],{"class":239},[79,86622,81903],{"class":7412},[79,86624,81906],{"class":243},[79,86626,86627],{"class":89}," `\u003Cspan class=\"tag\">【赠品】${",[79,86629,81903],{"class":239},[79,86631,86632],{"class":89},"}\u003C\u002Fspan>`",[79,86634,32950],{"class":239},[79,86636,76331],{"class":85},[79,86638,685],{"class":239},[79,86640,76336],{"class":89},[79,86642,15876],{"class":239},[79,86644,3232],{"class":243},[79,86646,72212],{"class":89},[79,86648,86649],{"class":81,"line":35152},[79,86650,86651],{"class":2440},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[79,86653,86654,86656,86659,86661,86664,86666,86668,86670,86673,86675,86677,86679,86682,86684,86686],{"class":81,"line":35158},[79,86655,60338],{"class":243},[79,86657,86658],{"class":96}," subtotal",[79,86660,468],{"class":243},[79,86662,86663],{"class":239}," ((price ",[79,86665,2829],{"class":243},[79,86667,1140],{"class":96},[79,86669,853],{"class":243},[79,86671,86672],{"class":239}," count) ",[79,86674,2957],{"class":243},[79,86676,1140],{"class":96},[79,86678,32950],{"class":239},[79,86680,86681],{"class":85},"toFixed",[79,86683,685],{"class":239},[79,86685,1049],{"class":96},[79,86687,253],{"class":239},[79,86689,86690],{"class":81,"line":35168},[79,86691,454],{"emptyLinePlaceholder":453},[79,86693,86694,86696],{"class":81,"line":35174},[79,86695,76090],{"class":243},[79,86697,72276],{"class":89},[79,86699,86700],{"class":81,"line":35185},[79,86701,86702],{"class":89},"        \u003Cdiv class=\"item\">\n",[79,86704,86705,86708,86710],{"class":81,"line":35191},[79,86706,86707],{"class":89},"          \u003Cimg src=\"${",[79,86709,81927],{"class":239},[79,86711,81959],{"class":89},[79,86713,86714,86717,86719,86722,86724],{"class":81,"line":35201},[79,86715,86716],{"class":89},"          \u003Cp class=\"name\">${",[79,86718,697],{"class":239},[79,86720,86721],{"class":89},"}${",[79,86723,642],{"class":239},[79,86725,81969],{"class":89},[79,86727,86728,86731,86733],{"class":81,"line":35206},[79,86729,86730],{"class":89},"          \u003Cp class=\"spec\">${",[79,86732,56],{"class":239},[79,86734,81969],{"class":89},[79,86736,86737,86740,86742,86744,86746,86748,86750,86752],{"class":81,"line":35212},[79,86738,86739],{"class":89},"          \u003Cp class=\"price\">${",[79,86741,81922],{"class":239},[79,86743,2931],{"class":89},[79,86745,86681],{"class":85},[79,86747,685],{"class":89},[79,86749,1049],{"class":96},[79,86751,2803],{"class":89},[79,86753,81969],{"class":89},[79,86755,86756,86759,86761],{"class":81,"line":35261},[79,86757,86758],{"class":89},"          \u003Cp class=\"count\">x${",[79,86760,86539],{"class":239},[79,86762,81969],{"class":89},[79,86764,86765,86768,86771],{"class":81,"line":35308},[79,86766,86767],{"class":89},"          \u003Cp class=\"sub-total\">${",[79,86769,86770],{"class":239},"subtotal",[79,86772,81969],{"class":89},[79,86774,86775],{"class":81,"line":35313},[79,86776,86777],{"class":89},"        \u003C\u002Fdiv> \n",[79,86779,86780],{"class":81,"line":35319},[79,86781,86782],{"class":89},"             `\n",[79,86784,86785,86788,86790,86792,86794],{"class":81,"line":35338},[79,86786,86787],{"class":239},"    }).",[79,86789,76331],{"class":85},[79,86791,685],{"class":239},[79,86793,76336],{"class":89},[79,86795,253],{"class":239},[79,86797,86798],{"class":81,"line":35344},[79,86799,86800],{"class":2440},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[79,86802,86803,86805,86807,86809,86811,86814,86816,86819,86821,86823,86825,86828,86831,86833,86836,86838,86840,86842,86845,86847,86849,86851,86853],{"class":81,"line":35364},[79,86804,13385],{"class":243},[79,86806,64895],{"class":96},[79,86808,468],{"class":243},[79,86810,82155],{"class":239},[79,86812,86813],{"class":85},"reduce",[79,86815,4591],{"class":239},[79,86817,86818],{"class":7412},"prev",[79,86820,1060],{"class":239},[79,86822,81903],{"class":7412},[79,86824,15876],{"class":239},[79,86826,86827],{"class":243},"=>",[79,86829,86830],{"class":239}," prev ",[79,86832,2855],{"class":243},[79,86834,86835],{"class":239}," (item.price ",[79,86837,2829],{"class":243},[79,86839,1140],{"class":96},[79,86841,853],{"class":243},[79,86843,86844],{"class":239}," item.count) ",[79,86846,2957],{"class":243},[79,86848,1140],{"class":96},[79,86850,1060],{"class":239},[79,86852,1030],{"class":96},[79,86854,253],{"class":239},[79,86856,86857,86859,86861,86863,86866,86868,86870,86873,86875,86877,86879],{"class":81,"line":35370},[79,86858,54519],{"class":239},[79,86860,56509],{"class":85},[79,86862,685],{"class":239},[79,86864,86865],{"class":89},"'.amount'",[79,86867,76357],{"class":239},[79,86869,244],{"class":243},[79,86871,86872],{"class":239}," total.",[79,86874,86681],{"class":85},[79,86876,685],{"class":239},[79,86878,1049],{"class":96},[79,86880,253],{"class":239},[79,86882,86883,86885,86887],{"class":81,"line":35376},[79,86884,54529],{"class":239},[79,86886,53926],{"class":395},[79,86888,53420],{"class":239},[79,86890,86891,86893,86895],{"class":81,"line":35386},[79,86892,53898],{"class":239},[79,86894,53913],{"class":395},[79,86896,53420],{"class":239},[79,86898,86899],{"class":81,"line":35391},[79,86900,454],{"emptyLinePlaceholder":453},[79,86902,86903,86905,86907],{"class":81,"line":35397},[79,86904,53898],{"class":239},[79,86906,52749],{"class":395},[79,86908,53420],{"class":239},[14,86910,86912],{"id":86911},"_411-编程思想","4.11 编程思想",[265,86914,86916],{"id":86915},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86918,86919,86922],{},[2528,86920,86921],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86924,86925],{},"调用就可以了",[19,86927,86928],{},[3699,86929],{"alt":57,"src":86930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[265,86932,86934],{"id":86933},"_4112-面向对象","4.11.2 面向对象",[19,86936,86937],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86939,86940],{},[3699,86941],{"alt":57,"src":86942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86944,86945],{},"面向对象的特性：",[3377,86947,86948,86951,86954],{},[29,86949,86950],{},"封装性",[29,86952,86953],{},"继承性",[29,86955,86956],{},"多态性",[265,86958,86960],{"id":86959},"_4113-两者比较","4.11.3 两者比较",[19,86962,86963],{},[3699,86964],{"alt":57,"src":86965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86967,86969],{"id":86968},"_412-构造函数回顾","4.12 构造函数回顾",[19,86971,86972],{},[3699,86973],{"alt":57,"src":86974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86976,86977],{},[3699,86978],{"alt":57,"src":86979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86981,86982],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86984,86985],{},[3699,86986],{"alt":57,"src":86987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86989,86991],{"id":86990},"_413-原型","4.13 原型",[265,86993,86995],{"id":86994},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86997,86998],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,87000,87001],{},[3699,87002],{"alt":57,"src":87003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,87005,87006],{},[3699,87007],{"alt":57,"src":87008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,87010,87011],{},"原型是构造函数的属性，它也是一个对象",[19,87013,87014],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,87016,87017],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[51,87019,87021],{"className":383,"code":87020,"language":385,"meta":57,"style":57},"\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",[59,87022,87023,87031,87036,87044,87049,87054,87059,87064,87069,87073,87077,87081,87086,87091,87095,87100,87105,87110,87115,87120,87124,87132],{"__ignoreMap":57},[79,87024,87025,87027,87029],{"class":81,"line":82},[79,87026,392],{"class":239},[79,87028,53913],{"class":395},[79,87030,53420],{"class":239},[79,87032,87033],{"class":81,"line":167},[79,87034,87035],{"class":2440},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[79,87037,87038,87040,87042],{"class":81,"line":178},[79,87039,54257],{"class":239},[79,87041,53926],{"class":395},[79,87043,53420],{"class":239},[79,87045,87046],{"class":81,"line":457},[79,87047,87048],{"class":239},"    function Star(uname, age) {\n",[79,87050,87051],{"class":81,"line":462},[79,87052,87053],{"class":239},"      this.uname = uname,\n",[79,87055,87056],{"class":81,"line":474},[79,87057,87058],{"class":239},"        this.age = age\n",[79,87060,87061],{"class":81,"line":480},[79,87062,87063],{"class":239},"      \u002F\u002F this.sing = function () {\n",[79,87065,87066],{"class":81,"line":486},[79,87067,87068],{"class":239},"      \u002F\u002F   console.log('唱歌')\n",[79,87070,87071],{"class":81,"line":491},[79,87072,454],{"emptyLinePlaceholder":453},[79,87074,87075],{"class":81,"line":497},[79,87076,62147],{"class":239},[79,87078,87079],{"class":81,"line":503},[79,87080,4402],{"class":239},[79,87082,87083],{"class":81,"line":509},[79,87084,87085],{"class":239},"    Star.prototype.sing = function () {\n",[79,87087,87088],{"class":81,"line":514},[79,87089,87090],{"class":239},"      console.log('唱歌')\n",[79,87092,87093],{"class":81,"line":520},[79,87094,4402],{"class":239},[79,87096,87097],{"class":81,"line":526},[79,87098,87099],{"class":239},"    \u002F\u002F console.dir(Star.prototype)\n",[79,87101,87102],{"class":81,"line":532},[79,87103,87104],{"class":239},"    const pink = new Star('pink', 18)\n",[79,87106,87107],{"class":81,"line":537},[79,87108,87109],{"class":239},"    const red = new Star('red', 20)\n",[79,87111,87112],{"class":81,"line":543},[79,87113,87114],{"class":239},"    pink.sing()\n",[79,87116,87117],{"class":81,"line":549},[79,87118,87119],{"class":239},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[79,87121,87122],{"class":81,"line":555},[79,87123,454],{"emptyLinePlaceholder":453},[79,87125,87126,87128,87130],{"class":81,"line":561},[79,87127,54529],{"class":239},[79,87129,53926],{"class":395},[79,87131,53420],{"class":239},[79,87133,87134,87136,87138],{"class":81,"line":567},[79,87135,53898],{"class":239},[79,87137,53913],{"class":395},[79,87139,53420],{"class":239},[19,87141,87142],{},[3699,87143],{"alt":57,"src":87144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[51,87146,87148],{"className":383,"code":87147,"language":385,"meta":57,"style":57},"\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",[59,87149,87150,87158,87166,87171,87176,87181,87186,87190,87195,87200,87205,87209,87214,87218,87222,87227,87231,87239],{"__ignoreMap":57},[79,87151,87152,87154,87156],{"class":81,"line":82},[79,87153,392],{"class":239},[79,87155,53913],{"class":395},[79,87157,53420],{"class":239},[79,87159,87160,87162,87164],{"class":81,"line":167},[79,87161,54257],{"class":239},[79,87163,53926],{"class":395},[79,87165,53420],{"class":239},[79,87167,87168],{"class":81,"line":178},[79,87169,87170],{"class":239},"    let that\n",[79,87172,87173],{"class":81,"line":457},[79,87174,87175],{"class":239},"    function Star(uname) {\n",[79,87177,87178],{"class":81,"line":462},[79,87179,87180],{"class":239},"      this.uname = uname\n",[79,87182,87183],{"class":81,"line":474},[79,87184,87185],{"class":239},"      that = this\n",[79,87187,87188],{"class":81,"line":480},[79,87189,4402],{"class":239},[79,87191,87192],{"class":81,"line":486},[79,87193,87194],{"class":239},"    \u002F\u002F 实例对象是 ldh\n",[79,87196,87197],{"class":81,"line":491},[79,87198,87199],{"class":239},"    const ldh = new Star('刘德华')\n",[79,87201,87202],{"class":81,"line":497},[79,87203,87204],{"class":239},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[79,87206,87207],{"class":81,"line":503},[79,87208,454],{"emptyLinePlaceholder":453},[79,87210,87211],{"class":81,"line":509},[79,87212,87213],{"class":239},"    Star.sing = function () {\n",[79,87215,87216],{"class":81,"line":514},[79,87217,87090],{"class":239},[79,87219,87220],{"class":81,"line":520},[79,87221,4402],{"class":239},[79,87223,87224],{"class":81,"line":526},[79,87225,87226],{"class":239},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[79,87228,87229],{"class":81,"line":532},[79,87230,454],{"emptyLinePlaceholder":453},[79,87232,87233,87235,87237],{"class":81,"line":537},[79,87234,54529],{"class":239},[79,87236,53926],{"class":395},[79,87238,53420],{"class":239},[79,87240,87241,87243,87245],{"class":81,"line":543},[79,87242,53898],{"class":239},[79,87244,53913],{"class":395},[79,87246,53420],{"class":239},[19,87248,87249],{},"构造函数的this指向的是实例对象；",[19,87251,87252],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[265,87254,87256],{"id":87255},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,87258,87259],{},[3699,87260],{"alt":57,"src":87261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[51,87263,87265],{"className":383,"code":87264,"language":385,"meta":57,"style":57},"\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",[59,87266,87267,87275,87283,87288,87293,87298,87303,87308,87313,87318,87323,87328,87333,87337,87342,87347,87352,87357,87361,87366,87371,87376,87381,87385,87390,87395,87400,87405,87409,87414,87418,87426],{"__ignoreMap":57},[79,87268,87269,87271,87273],{"class":81,"line":82},[79,87270,392],{"class":239},[79,87272,53913],{"class":395},[79,87274,53420],{"class":239},[79,87276,87277,87279,87281],{"class":81,"line":167},[79,87278,54257],{"class":239},[79,87280,53926],{"class":395},[79,87282,53420],{"class":239},[79,87284,87285],{"class":81,"line":178},[79,87286,87287],{"class":239},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[79,87289,87290],{"class":81,"line":457},[79,87291,87292],{"class":239},"    const arr = [1, 2, 3]\n",[79,87294,87295],{"class":81,"line":462},[79,87296,87297],{"class":239},"    \u002F\u002F 自己定义数组的扩展方法\n",[79,87299,87300],{"class":81,"line":474},[79,87301,87302],{"class":239},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[79,87304,87305],{"class":81,"line":480},[79,87306,87307],{"class":239},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[79,87309,87310],{"class":81,"line":486},[79,87311,87312],{"class":239},"    \u002F\u002F ①.最大值\n",[79,87314,87315],{"class":81,"line":491},[79,87316,87317],{"class":239},"    Array.prototype.max = function () {\n",[79,87319,87320],{"class":81,"line":497},[79,87321,87322],{"class":239},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[79,87324,87325],{"class":81,"line":503},[79,87326,87327],{"class":239},"      return Math.max(...this)\n",[79,87329,87330],{"class":81,"line":509},[79,87331,87332],{"class":239},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[79,87334,87335],{"class":81,"line":514},[79,87336,4402],{"class":239},[79,87338,87339],{"class":81,"line":520},[79,87340,87341],{"class":239},"    console.log(arr.max())\n",[79,87343,87344],{"class":81,"line":526},[79,87345,87346],{"class":239},"    \u002F\u002F ②最小值\n",[79,87348,87349],{"class":81,"line":532},[79,87350,87351],{"class":239},"    Array.prototype.min = function () {\n",[79,87353,87354],{"class":81,"line":537},[79,87355,87356],{"class":239},"      return Math.min(...this)\n",[79,87358,87359],{"class":81,"line":543},[79,87360,4402],{"class":239},[79,87362,87363],{"class":81,"line":549},[79,87364,87365],{"class":239},"    console.log(arr.min())\n",[79,87367,87368],{"class":81,"line":555},[79,87369,87370],{"class":239},"    \u002F\u002F③求和\n",[79,87372,87373],{"class":81,"line":561},[79,87374,87375],{"class":239},"    Array.prototype.sum = function () {\n",[79,87377,87378],{"class":81,"line":567},[79,87379,87380],{"class":239},"      return this.reduce((prev, current) => prev + current, 0)\n",[79,87382,87383],{"class":81,"line":573},[79,87384,4402],{"class":239},[79,87386,87387],{"class":81,"line":579},[79,87388,87389],{"class":239},"    console.log(arr.sum())\n",[79,87391,87392],{"class":81,"line":584},[79,87393,87394],{"class":239},"    \u002F\u002F ③排序\n",[79,87396,87397],{"class":81,"line":590},[79,87398,87399],{"class":239},"    Array.prototype.rever = function () {\n",[79,87401,87402],{"class":81,"line":596},[79,87403,87404],{"class":239},"      return this.reverse()\n",[79,87406,87407],{"class":81,"line":602},[79,87408,4402],{"class":239},[79,87410,87411],{"class":81,"line":608},[79,87412,87413],{"class":239},"    console.log(arr.rever())\n",[79,87415,87416],{"class":81,"line":614},[79,87417,454],{"emptyLinePlaceholder":453},[79,87419,87420,87422,87424],{"class":81,"line":620},[79,87421,54529],{"class":239},[79,87423,53926],{"class":395},[79,87425,53420],{"class":239},[79,87427,87428,87430,87432],{"class":81,"line":625},[79,87429,53898],{"class":239},[79,87431,53913],{"class":395},[79,87433,53420],{"class":239},[19,87435,87436],{},[3699,87437],{"alt":57,"src":87438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[265,87440,87442],{"id":87441},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87444,87445],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87447,87448],{},[3699,87449],{"alt":57,"src":87450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[51,87452,87454],{"className":383,"code":87453,"language":385,"meta":57,"style":57},"\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",[59,87455,87456,87464,87472,87477,87482,87486,87491,87496,87501,87509],{"__ignoreMap":57},[79,87457,87458,87460,87462],{"class":81,"line":82},[79,87459,392],{"class":239},[79,87461,53913],{"class":395},[79,87463,53420],{"class":239},[79,87465,87466,87468,87470],{"class":81,"line":167},[79,87467,54257],{"class":239},[79,87469,53926],{"class":395},[79,87471,53420],{"class":239},[79,87473,87474],{"class":81,"line":178},[79,87475,87476],{"class":239},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[79,87478,87479],{"class":81,"line":457},[79,87480,87481],{"class":239},"    function Star() {\n",[79,87483,87484],{"class":81,"line":462},[79,87485,4402],{"class":239},[79,87487,87488],{"class":81,"line":474},[79,87489,87490],{"class":239},"    const ldh = new Star()\n",[79,87492,87493],{"class":81,"line":480},[79,87494,87495],{"class":239},"    console.log(Star.prototype)\n",[79,87497,87498],{"class":81,"line":486},[79,87499,87500],{"class":239},"    console.log(Star.prototype.constructor === Star)\n",[79,87502,87503,87505,87507],{"class":81,"line":491},[79,87504,54529],{"class":239},[79,87506,53926],{"class":395},[79,87508,53420],{"class":239},[79,87510,87511,87513,87515],{"class":81,"line":497},[79,87512,53898],{"class":239},[79,87514,53913],{"class":395},[79,87516,53420],{"class":239},[19,87518,87519],{},[3699,87520],{"alt":57,"src":87521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87523,87524],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[51,87526,87528],{"className":383,"code":87527,"language":385,"meta":57,"style":57},"  \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",[59,87529,87530,87538,87542,87546,87550,87555,87560,87565,87569,87574,87579,87584,87589,87594,87599,87603,87607,87612,87617,87622,87626,87631,87636,87640,87644,87648],{"__ignoreMap":57},[79,87531,87532,87534,87536],{"class":81,"line":82},[79,87533,54257],{"class":239},[79,87535,53926],{"class":395},[79,87537,53420],{"class":239},[79,87539,87540],{"class":81,"line":167},[79,87541,87476],{"class":239},[79,87543,87544],{"class":81,"line":178},[79,87545,87481],{"class":239},[79,87547,87548],{"class":81,"line":457},[79,87549,4402],{"class":239},[79,87551,87552],{"class":81,"line":462},[79,87553,87554],{"class":239},"    \u002F\u002F const ldh = new Star()\n",[79,87556,87557],{"class":81,"line":474},[79,87558,87559],{"class":239},"    \u002F\u002F console.log(Star.prototype)\n",[79,87561,87562],{"class":81,"line":480},[79,87563,87564],{"class":239},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[79,87566,87567],{"class":81,"line":486},[79,87568,454],{"emptyLinePlaceholder":453},[79,87570,87571],{"class":81,"line":491},[79,87572,87573],{"class":239},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[79,87575,87576],{"class":81,"line":497},[79,87577,87578],{"class":239},"    \u002F\u002F Star.prototype.sing = function () {\n",[79,87580,87581],{"class":81,"line":503},[79,87582,87583],{"class":239},"    \u002F\u002F   console.log('唱歌')\n",[79,87585,87586],{"class":81,"line":509},[79,87587,87588],{"class":239},"    \u002F\u002F }\n",[79,87590,87591],{"class":81,"line":514},[79,87592,87593],{"class":239},"    \u002F\u002F Star.prototype.dance = function () {\n",[79,87595,87596],{"class":81,"line":520},[79,87597,87598],{"class":239},"    \u002F\u002F   console.log('跳舞')\n",[79,87600,87601],{"class":81,"line":526},[79,87602,87588],{"class":239},[79,87604,87605],{"class":81,"line":532},[79,87606,87495],{"class":239},[79,87608,87609],{"class":81,"line":537},[79,87610,87611],{"class":239},"    Star.prototype = {\n",[79,87613,87614],{"class":81,"line":543},[79,87615,87616],{"class":239},"      sing: function () {\n",[79,87618,87619],{"class":81,"line":549},[79,87620,87621],{"class":239},"        console.log('唱歌')\n",[79,87623,87624],{"class":81,"line":555},[79,87625,80000],{"class":239},[79,87627,87628],{"class":81,"line":561},[79,87629,87630],{"class":239},"      dance: function () {\n",[79,87632,87633],{"class":81,"line":567},[79,87634,87635],{"class":239},"        console.log('跳舞')\n",[79,87637,87638],{"class":81,"line":573},[79,87639,54510],{"class":239},[79,87641,87642],{"class":81,"line":579},[79,87643,4402],{"class":239},[79,87645,87646],{"class":81,"line":584},[79,87647,87495],{"class":239},[79,87649,87650,87652,87654],{"class":81,"line":590},[79,87651,54529],{"class":239},[79,87653,53926],{"class":395},[79,87655,53420],{"class":239},[19,87657,87658],{},"进行输出结果后会发现：",[19,87660,87661],{},[3699,87662],{"alt":57,"src":87663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87665,87666],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87668,87669],{},"所以，要重新指回创造这个原型对象的构造函数",[51,87671,87673],{"className":73321,"code":87672,"language":73323,"meta":57,"style":57},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[59,87674,87675,87689,87694,87699,87710,87723,87728,87739,87753,87757],{"__ignoreMap":57},[79,87676,87677,87680,87682,87685,87687],{"class":81,"line":82},[79,87678,87679],{"class":96},"Star",[79,87681,2931],{"class":239},[79,87683,87684],{"class":96},"prototype",[79,87686,468],{"class":243},[79,87688,17732],{"class":239},[79,87690,87691],{"class":81,"line":167},[79,87692,87693],{"class":2440},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[79,87695,87696],{"class":81,"line":178},[79,87697,87698],{"class":239},"  constructor: Star,\n",[79,87700,87701,87704,87706,87708],{"class":81,"line":457},[79,87702,87703],{"class":85},"  sing",[79,87705,53550],{"class":239},[79,87707,56559],{"class":243},[79,87709,56562],{"class":239},[79,87711,87712,87714,87716,87718,87721],{"class":81,"line":462},[79,87713,75861],{"class":239},[79,87715,60357],{"class":85},[79,87717,685],{"class":239},[79,87719,87720],{"class":89},"'唱歌'",[79,87722,253],{"class":239},[79,87724,87725],{"class":81,"line":474},[79,87726,87727],{"class":239},"   },\n",[79,87729,87730,87733,87735,87737],{"class":81,"line":480},[79,87731,87732],{"class":85},"   dance",[79,87734,53550],{"class":239},[79,87736,56559],{"class":243},[79,87738,56562],{"class":239},[79,87740,87741,87744,87746,87748,87751],{"class":81,"line":486},[79,87742,87743],{"class":239},"     console.",[79,87745,60357],{"class":85},[79,87747,685],{"class":239},[79,87749,87750],{"class":89},"'跳舞'",[79,87752,253],{"class":239},[79,87754,87755],{"class":81,"line":491},[79,87756,6509],{"class":239},[79,87758,87759],{"class":81,"line":497},[79,87760,3801],{"class":239},[19,87762,87763],{},[3699,87764],{"alt":57,"src":87765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87767,87768],{},"总结1：",[19,87770,87771],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87773,87774],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87776,87777],{},"constructor指的是他的来源",[19,87779,87780],{},[3699,87781],{"alt":57,"src":87782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87784,87785],{},[3699,87786],{"alt":57,"src":87787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87789,87790],{},"总结2：",[19,87792,87793],{},[3699,87794],{"alt":57,"src":87795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87797,87798],{},[3699,87799],{"alt":57,"src":87800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87802,87803],{},[3699,87804],{"alt":57,"src":87805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[265,87807,87809],{"id":87808},"_4134-对象原型","4.13.4 对象原型",[19,87811,87812],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87814,87815],{},"对象原型就是__proto__这个属性",[19,87817,87818],{},[3699,87819],{"alt":57,"src":87820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87822,87823],{},[3699,87824],{"alt":57,"src":87825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87827,87828],{},[3699,87829],{"alt":57,"src":87830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87832,87833],{},[3699,87834],{"alt":57,"src":87835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[51,87837,87839],{"className":383,"code":87838,"language":385,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,87840,87841,87849,87857,87861,87865,87869,87874,87882],{"__ignoreMap":57},[79,87842,87843,87845,87847],{"class":81,"line":82},[79,87844,392],{"class":239},[79,87846,53913],{"class":395},[79,87848,53420],{"class":239},[79,87850,87851,87853,87855],{"class":81,"line":167},[79,87852,54257],{"class":239},[79,87854,53926],{"class":395},[79,87856,53420],{"class":239},[79,87858,87859],{"class":81,"line":178},[79,87860,87481],{"class":239},[79,87862,87863],{"class":81,"line":457},[79,87864,4402],{"class":239},[79,87866,87867],{"class":81,"line":462},[79,87868,87490],{"class":239},[79,87870,87871],{"class":81,"line":474},[79,87872,87873],{"class":239},"    console.log(ldh)\n",[79,87875,87876,87878,87880],{"class":81,"line":480},[79,87877,54529],{"class":239},[79,87879,53926],{"class":395},[79,87881,53420],{"class":239},[79,87883,87884,87886,87888],{"class":81,"line":486},[79,87885,53898],{"class":239},[79,87887,53913],{"class":395},[79,87889,53420],{"class":239},[19,87891,87892],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87894,87895],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87897,87898],{},[3699,87899],{"alt":57,"src":87900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87902,87903],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87905,87906],{},"对象原型指向原型对象",[19,87908,87909],{},[3699,87910],{"alt":57,"src":87911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87913,87914],{},[3699,87915],{"alt":57,"src":87916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87918,87919],{},[3699,87920],{"alt":57,"src":87921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[265,87923,87925],{"id":87924},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87927,87928],{},[3699,87929],{"alt":57,"src":87930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[26,87932,87933,87936,87939,87942],{},[29,87934,87935],{},"构造函数通过new的形式实例化得到实例对象",[29,87937,87938],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[29,87940,87941],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[29,87943,87944],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87946,87947],{},[3699,87948],{"alt":57,"src":87949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87951,87952],{},"题目梳理：",[19,87954,87955],{},[3699,87956],{"alt":57,"src":87957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[265,87959,87961],{"id":87960},"_4136-原型继承","4.13.6 原型继承",[19,87963,87964],{},[3699,87965],{"alt":57,"src":87966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87968,87969],{},[3699,87970],{"alt":57,"src":87971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87973,87974],{},[3699,87975],{"alt":57,"src":87976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87978,87979],{},[3699,87980],{"alt":57,"src":87981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87983,87984],{},[3699,87985],{"alt":57,"src":87986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87988,87989],{},[3699,87990],{"alt":57,"src":87991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87993,87994],{},[3699,87995],{"alt":57,"src":87996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87998,87999],{},[3699,88000],{"alt":57,"src":88001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,88003,88004],{},"回顾：构造函数每次new得到对象都是不同的",[265,88006,88008],{"id":88007},"_4137-原型链","4.13.7 原型链",[19,88010,88011],{},[3699,88012],{"alt":57,"src":88013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,88015,88016],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,88018,88019],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,88021,88022],{},"大哥是Object",[19,88024,88025],{},[3699,88026],{"alt":57,"src":88027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,88029,88030],{},[3699,88031],{"alt":57,"src":88032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,88034,88035],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,88037,88038],{},"万物皆对象",[265,88040,88042],{"id":88041},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,88044,88045],{},"模态框",[19,88047,88048],{},"以后遇见这个效果直接使用这个就行",[19,88050,88051],{},[3699,88052],{"alt":57,"src":88053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,88055,88056],{},[3699,88057],{"alt":57,"src":88058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,88060,88061],{},[3699,88062],{"alt":57,"src":88063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,88065,88066],{},[3699,88067],{"alt":57,"src":88068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,88070,88071],{},"补充知识点：",[26,88073,88074],{},[29,88075,88076],{},"append()",[19,88078,88079],{},[3699,88080],{"alt":57,"src":88081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[51,88083,88085],{"className":52747,"code":88084,"language":52749,"meta":57,"style":57},"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",[59,88086,88087,88092,88097,88102,88106,88110,88114,88119,88124,88129,88133],{"__ignoreMap":57},[79,88088,88089],{"class":81,"line":82},[79,88090,88091],{"class":239},"append(param1)\n",[79,88093,88094],{"class":81,"line":167},[79,88095,88096],{"class":239},"append(param1, param2)\n",[79,88098,88099],{"class":81,"line":178},[79,88100,88101],{"class":239},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[79,88103,88104],{"class":81,"line":457},[79,88105,454],{"emptyLinePlaceholder":453},[79,88107,88108],{"class":81,"line":462},[79,88109,454],{"emptyLinePlaceholder":453},[79,88111,88112],{"class":81,"line":474},[79,88113,454],{"emptyLinePlaceholder":453},[79,88115,88116],{"class":81,"line":480},[79,88117,88118],{"class":239},"let div = document.createElement(\"div\");\n",[79,88120,88121],{"class":81,"line":486},[79,88122,88123],{"class":239},"let p = document.createElement(\"p\");\n",[79,88125,88126],{"class":81,"line":491},[79,88127,88128],{"class":239},"div.append(p);\n",[79,88130,88131],{"class":81,"line":497},[79,88132,454],{"emptyLinePlaceholder":453},[79,88134,88135,88138,88140],{"class":81,"line":503},[79,88136,88137],{"class":239},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[79,88139,19],{"class":395},[79,88141,88142],{"class":239},"> ]\n",[26,88144,88145],{"start":167},[29,88146,88147],{},"remove()",[19,88149,88150],{},"自己删自己",[19,88152,88153],{},[3699,88154],{"alt":57,"src":88155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[51,88157,88159],{"className":52747,"code":88158,"language":52749,"meta":57,"style":57},"\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",[59,88160,88161,88171,88185,88189,88197,88211,88231,88243,88251,88258,88270,88283,88318,88330,88341,88353,88365,88377,88404,88414,88418,88422,88431,88443,88457,88467,88479,88483,88487,88497,88508,88518,88528,88541,88554,88564,88568,88572,88581,88591,88603,88607,88611,88620,88630,88640,88652,88656,88660,88670,88686,88697,88707,88717,88729,88741,88753,88757,88761,88774,88785,88789,88797,88805,88809,88817,88837,88857,88865,88870,88896,88901,88906,88925,88930,88942,88947,88958,88968,88978,88983,88988,88992,88997,89002,89007,89027,89032,89052,89057,89071,89076,89081,89086,89102,89106,89111,89140,89145,89150,89155,89166,89170,89174,89178,89183,89208,89213,89238,89243,89252,89256,89261,89286,89290,89315,89319,89328,89332,89337,89355,89365,89369,89377,89385,89389],{"__ignoreMap":57},[79,88162,88163,88165,88167,88169],{"class":81,"line":82},[79,88164,53411],{"class":239},[79,88166,53414],{"class":395},[79,88168,53417],{"class":85},[79,88170,53420],{"class":239},[79,88172,88173,88175,88177,88179,88181,88183],{"class":81,"line":167},[79,88174,392],{"class":239},[79,88176,52749],{"class":395},[79,88178,53429],{"class":85},[79,88180,244],{"class":239},[79,88182,53434],{"class":89},[79,88184,53420],{"class":239},[79,88186,88187],{"class":81,"line":178},[79,88188,454],{"emptyLinePlaceholder":453},[79,88190,88191,88193,88195],{"class":81,"line":457},[79,88192,392],{"class":239},[79,88194,53447],{"class":395},[79,88196,53420],{"class":239},[79,88198,88199,88201,88203,88205,88207,88209],{"class":81,"line":462},[79,88200,54257],{"class":239},[79,88202,53457],{"class":395},[79,88204,53460],{"class":85},[79,88206,244],{"class":239},[79,88208,53465],{"class":89},[79,88210,53420],{"class":239},[79,88212,88213,88215,88217,88219,88221,88223,88225,88227,88229],{"class":81,"line":474},[79,88214,54257],{"class":239},[79,88216,53457],{"class":395},[79,88218,2238],{"class":85},[79,88220,244],{"class":239},[79,88222,53504],{"class":89},[79,88224,53484],{"class":85},[79,88226,244],{"class":239},[79,88228,53511],{"class":89},[79,88230,53420],{"class":239},[79,88232,88233,88235,88237,88239,88241],{"class":81,"line":480},[79,88234,54257],{"class":239},[79,88236,53520],{"class":395},[79,88238,53523],{"class":239},[79,88240,53520],{"class":395},[79,88242,53420],{"class":239},[79,88244,88245,88247,88249],{"class":81,"line":486},[79,88246,54257],{"class":239},[79,88248,2287],{"class":395},[79,88250,53420],{"class":239},[79,88252,88253,88256],{"class":81,"line":491},[79,88254,88255],{"class":85},"    .modal",[79,88257,17732],{"class":239},[79,88259,88260,88262,88264,88266,88268],{"class":81,"line":497},[79,88261,56881],{"class":96},[79,88263,53550],{"class":239},[79,88265,6175],{"class":96},[79,88267,53605],{"class":243},[79,88269,3531],{"class":239},[79,88271,88272,88275,88277,88279,88281],{"class":81,"line":503},[79,88273,88274],{"class":96},"      min-height",[79,88276,53550],{"class":239},[79,88278,2686],{"class":96},[79,88280,53605],{"class":243},[79,88282,3531],{"class":239},[79,88284,88285,88287,88289,88291,88293,88295,88297,88299,88301,88303,88305,88307,88309,88311,88313,88316],{"class":81,"line":509},[79,88286,80858],{"class":96},[79,88288,53550],{"class":239},[79,88290,1030],{"class":96},[79,88292,670],{"class":96},[79,88294,4253],{"class":96},[79,88296,53605],{"class":243},[79,88298,80875],{"class":96},[79,88300,685],{"class":239},[79,88302,1030],{"class":96},[79,88304,1060],{"class":239},[79,88306,1030],{"class":96},[79,88308,1060],{"class":239},[79,88310,1030],{"class":96},[79,88312,1060],{"class":239},[79,88314,88315],{"class":96},"0.1",[79,88317,4925],{"class":239},[79,88319,88320,88322,88324,88326,88328],{"class":81,"line":514},[79,88321,57244],{"class":96},[79,88323,53550],{"class":239},[79,88325,2668],{"class":96},[79,88327,53605],{"class":243},[79,88329,3531],{"class":239},[79,88331,88332,88334,88336,88339],{"class":81,"line":520},[79,88333,56869],{"class":96},[79,88335,53550],{"class":239},[79,88337,88338],{"class":96},"fixed",[79,88340,3531],{"class":239},[79,88342,88343,88346,88348,88351],{"class":81,"line":526},[79,88344,88345],{"class":96},"      z-index",[79,88347,53550],{"class":239},[79,88349,88350],{"class":96},"999",[79,88352,3531],{"class":239},[79,88354,88355,88357,88359,88361,88363],{"class":81,"line":532},[79,88356,56948],{"class":96},[79,88358,53550],{"class":239},[79,88360,3029],{"class":96},[79,88362,1137],{"class":243},[79,88364,3531],{"class":239},[79,88366,88367,88369,88371,88373,88375],{"class":81,"line":537},[79,88368,57057],{"class":96},[79,88370,53550],{"class":239},[79,88372,3029],{"class":96},[79,88374,1137],{"class":243},[79,88376,3531],{"class":239},[79,88378,88379,88381,88383,88385,88387,88390,88392,88394,88396,88398,88400,88402],{"class":81,"line":543},[79,88380,80899],{"class":96},[79,88382,53550],{"class":239},[79,88384,80904],{"class":96},[79,88386,685],{"class":239},[79,88388,88389],{"class":96},"-50",[79,88391,1137],{"class":243},[79,88393,1060],{"class":239},[79,88395,88389],{"class":96},[79,88397,1137],{"class":243},[79,88399,1060],{"class":239},[79,88401,1030],{"class":96},[79,88403,4925],{"class":239},[79,88405,88406,88408,88410,88412],{"class":81,"line":549},[79,88407,56994],{"class":96},[79,88409,53550],{"class":239},[79,88411,62952],{"class":96},[79,88413,3531],{"class":239},[79,88415,88416],{"class":81,"line":555},[79,88417,4402],{"class":239},[79,88419,88420],{"class":81,"line":561},[79,88421,454],{"emptyLinePlaceholder":453},[79,88423,88424,88426,88429],{"class":81,"line":567},[79,88425,88255],{"class":85},[79,88427,88428],{"class":85}," .header",[79,88430,17732],{"class":239},[79,88432,88433,88435,88437,88439,88441],{"class":81,"line":573},[79,88434,59469],{"class":96},[79,88436,53550],{"class":239},[79,88438,2775],{"class":96},[79,88440,53605],{"class":243},[79,88442,3531],{"class":239},[79,88444,88445,88447,88449,88451,88453,88455],{"class":81,"line":579},[79,88446,56805],{"class":96},[79,88448,53550],{"class":239},[79,88450,1030],{"class":96},[79,88452,4253],{"class":96},[79,88454,53605],{"class":243},[79,88456,3531],{"class":239},[79,88458,88459,88461,88463,88465],{"class":81,"line":584},[79,88460,56869],{"class":96},[79,88462,53550],{"class":239},[79,88464,56874],{"class":96},[79,88466,3531],{"class":239},[79,88468,88469,88471,88473,88475,88477],{"class":81,"line":590},[79,88470,57032],{"class":96},[79,88472,53550],{"class":239},[79,88474,3073],{"class":96},[79,88476,53605],{"class":243},[79,88478,3531],{"class":239},[79,88480,88481],{"class":81,"line":596},[79,88482,4402],{"class":239},[79,88484,88485],{"class":81,"line":602},[79,88486,454],{"emptyLinePlaceholder":453},[79,88488,88489,88491,88493,88495],{"class":81,"line":608},[79,88490,88255],{"class":85},[79,88492,88428],{"class":85},[79,88494,5237],{"class":395},[79,88496,17732],{"class":239},[79,88498,88499,88502,88504,88506],{"class":81,"line":614},[79,88500,88501],{"class":96},"      font-style",[79,88503,53550],{"class":239},[79,88505,65951],{"class":96},[79,88507,3531],{"class":239},[79,88509,88510,88512,88514,88516],{"class":81,"line":620},[79,88511,59526],{"class":96},[79,88513,53550],{"class":239},[79,88515,64180],{"class":96},[79,88517,3531],{"class":239},[79,88519,88520,88522,88524,88526],{"class":81,"line":625},[79,88521,56869],{"class":96},[79,88523,53550],{"class":239},[79,88525,56941],{"class":96},[79,88527,3531],{"class":239},[79,88529,88530,88533,88535,88537,88539],{"class":81,"line":630},[79,88531,88532],{"class":96},"      right",[79,88534,53550],{"class":239},[79,88536,2948],{"class":96},[79,88538,53605],{"class":243},[79,88540,3531],{"class":239},[79,88542,88543,88545,88547,88550,88552],{"class":81,"line":648},[79,88544,57057],{"class":96},[79,88546,53550],{"class":239},[79,88548,88549],{"class":96},"-2",[79,88551,53605],{"class":243},[79,88553,3531],{"class":239},[79,88555,88556,88558,88560,88562],{"class":81,"line":659},[79,88557,64135],{"class":96},[79,88559,53550],{"class":239},[79,88561,64140],{"class":96},[79,88563,3531],{"class":239},[79,88565,88566],{"class":81,"line":676},[79,88567,4402],{"class":239},[79,88569,88570],{"class":81,"line":708},[79,88571,454],{"emptyLinePlaceholder":453},[79,88573,88574,88576,88579],{"class":81,"line":717},[79,88575,88255],{"class":85},[79,88577,88578],{"class":85}," .body",[79,88580,17732],{"class":239},[79,88582,88583,88585,88587,88589],{"class":81,"line":722},[79,88584,59396],{"class":96},[79,88586,53550],{"class":239},[79,88588,53705],{"class":96},[79,88590,3531],{"class":239},[79,88592,88593,88595,88597,88599,88601],{"class":81,"line":727},[79,88594,56805],{"class":96},[79,88596,53550],{"class":239},[79,88598,2820],{"class":96},[79,88600,53605],{"class":243},[79,88602,3531],{"class":239},[79,88604,88605],{"class":81,"line":738},[79,88606,4402],{"class":239},[79,88608,88609],{"class":81,"line":753},[79,88610,454],{"emptyLinePlaceholder":453},[79,88612,88613,88615,88618],{"class":81,"line":768},[79,88614,88255],{"class":85},[79,88616,88617],{"class":85}," .footer",[79,88619,17732],{"class":239},[79,88621,88622,88624,88626,88628],{"class":81,"line":776},[79,88623,57119],{"class":96},[79,88625,53550],{"class":239},[79,88627,53590],{"class":96},[79,88629,3531],{"class":239},[79,88631,88632,88634,88636,88638],{"class":81,"line":781},[79,88633,57130],{"class":96},[79,88635,53550],{"class":239},[79,88637,53693],{"class":96},[79,88639,3531],{"class":239},[79,88641,88642,88644,88646,88648,88650],{"class":81,"line":786},[79,88643,56805],{"class":96},[79,88645,53550],{"class":239},[79,88647,2820],{"class":96},[79,88649,53605],{"class":243},[79,88651,3531],{"class":239},[79,88653,88654],{"class":81,"line":802},[79,88655,4402],{"class":239},[79,88657,88658],{"class":81,"line":815},[79,88659,454],{"emptyLinePlaceholder":453},[79,88661,88662,88664,88666,88668],{"class":81,"line":828},[79,88663,88255],{"class":85},[79,88665,88617],{"class":85},[79,88667,3635],{"class":395},[79,88669,17732],{"class":239},[79,88671,88672,88674,88676,88678,88680,88682,88684],{"class":81,"line":842},[79,88673,56805],{"class":96},[79,88675,53550],{"class":239},[79,88677,1188],{"class":96},[79,88679,53605],{"class":243},[79,88681,4298],{"class":96},[79,88683,53605],{"class":243},[79,88685,3531],{"class":239},[79,88687,88688,88690,88692,88695],{"class":81,"line":859},[79,88689,63831],{"class":96},[79,88691,53550],{"class":239},[79,88693,88694],{"class":96},"#ccc",[79,88696,3531],{"class":239},[79,88698,88699,88701,88703,88705],{"class":81,"line":878},[79,88700,66080],{"class":96},[79,88702,53550],{"class":239},[79,88704,56847],{"class":96},[79,88706,3531],{"class":239},[79,88708,88709,88711,88713,88715],{"class":81,"line":883},[79,88710,59526],{"class":96},[79,88712,53550],{"class":239},[79,88714,62952],{"class":96},[79,88716,3531],{"class":239},[79,88718,88719,88721,88723,88725,88727],{"class":81,"line":888},[79,88720,57244],{"class":96},[79,88722,53550],{"class":239},[79,88724,1049],{"class":96},[79,88726,53605],{"class":243},[79,88728,3531],{"class":239},[79,88730,88731,88733,88735,88737,88739],{"class":81,"line":904},[79,88732,63860],{"class":96},[79,88734,53550],{"class":239},[79,88736,2820],{"class":96},[79,88738,53605],{"class":243},[79,88740,3531],{"class":239},[79,88742,88743,88745,88747,88749,88751],{"class":81,"line":919},[79,88744,57032],{"class":96},[79,88746,53550],{"class":239},[79,88748,2922],{"class":96},[79,88750,53605],{"class":243},[79,88752,3531],{"class":239},[79,88754,88755],{"class":81,"line":930},[79,88756,4402],{"class":239},[79,88758,88759],{"class":81,"line":941},[79,88760,454],{"emptyLinePlaceholder":453},[79,88762,88763,88765,88767,88769,88772],{"class":81,"line":946},[79,88764,88255],{"class":85},[79,88766,88617],{"class":85},[79,88768,3635],{"class":395},[79,88770,88771],{"class":85},".submit",[79,88773,17732],{"class":239},[79,88775,88776,88778,88780,88783],{"class":81,"line":969},[79,88777,56994],{"class":96},[79,88779,53550],{"class":239},[79,88781,88782],{"class":96},"#369",[79,88784,3531],{"class":239},[79,88786,88787],{"class":81,"line":975},[79,88788,4402],{"class":239},[79,88790,88791,88793,88795],{"class":81,"line":989},[79,88792,54529],{"class":239},[79,88794,2287],{"class":395},[79,88796,53420],{"class":239},[79,88798,88799,88801,88803],{"class":81,"line":1003},[79,88800,53898],{"class":239},[79,88802,53447],{"class":395},[79,88804,53420],{"class":239},[79,88806,88807],{"class":81,"line":1019},[79,88808,454],{"emptyLinePlaceholder":453},[79,88810,88811,88813,88815],{"class":81,"line":1024},[79,88812,392],{"class":239},[79,88814,53913],{"class":395},[79,88816,53420],{"class":239},[79,88818,88819,88821,88823,88825,88827,88830,88833,88835],{"class":81,"line":1067},[79,88820,54257],{"class":239},[79,88822,55997],{"class":395},[79,88824,17119],{"class":85},[79,88826,244],{"class":239},[79,88828,88829],{"class":89},"\"delete\"",[79,88831,88832],{"class":239},">删除\u003C\u002F",[79,88834,55997],{"class":395},[79,88836,53420],{"class":239},[79,88838,88839,88841,88843,88845,88847,88850,88853,88855],{"class":81,"line":1101},[79,88840,54257],{"class":239},[79,88842,55997],{"class":395},[79,88844,17119],{"class":85},[79,88846,244],{"class":239},[79,88848,88849],{"class":89},"\"login\"",[79,88851,88852],{"class":239},">登录\u003C\u002F",[79,88854,55997],{"class":395},[79,88856,53420],{"class":239},[79,88858,88859,88861,88863],{"class":81,"line":1106},[79,88860,54257],{"class":239},[79,88862,53926],{"class":395},[79,88864,53420],{"class":239},[79,88866,88867],{"class":81,"line":1112},[79,88868,88869],{"class":2440},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[79,88871,88872,88874,88877,88879,88881,88883,88885,88887,88890,88892,88894],{"class":81,"line":1124},[79,88873,72192],{"class":243},[79,88875,88876],{"class":85}," Modal",[79,88878,685],{"class":239},[79,88880,53520],{"class":7412},[79,88882,468],{"class":243},[79,88884,72038],{"class":89},[79,88886,1060],{"class":239},[79,88888,88889],{"class":7412},"message",[79,88891,468],{"class":243},[79,88893,72038],{"class":89},[79,88895,14605],{"class":239},[79,88897,88898],{"class":81,"line":1129},[79,88899,88900],{"class":2440},"      \u002F\u002F 创建Model 模态框盒子\n",[79,88902,88903],{"class":81,"line":1150},[79,88904,88905],{"class":2440},"      \u002F\u002F 1.1 创建div标签\n",[79,88907,88908,88910,88913,88915,88917,88919,88921,88923],{"class":81,"line":1161},[79,88909,72159],{"class":96},[79,88911,88912],{"class":239},".modalBox ",[79,88914,244],{"class":243},[79,88916,56506],{"class":239},[79,88918,72259],{"class":85},[79,88920,685],{"class":239},[79,88922,84038],{"class":89},[79,88924,253],{"class":239},[79,88926,88927],{"class":81,"line":1175},[79,88928,88929],{"class":2440},"      \u002F\u002F 1.2 给div 添加类名为model\n",[79,88931,88932,88934,88937,88939],{"class":81,"line":1194},[79,88933,72159],{"class":96},[79,88935,88936],{"class":239},".modalBox.className ",[79,88938,244],{"class":243},[79,88940,88941],{"class":89}," 'modal'\n",[79,88943,88944],{"class":81,"line":1211},[79,88945,88946],{"class":2440},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[79,88948,88949,88951,88954,88956],{"class":81,"line":1228},[79,88950,72159],{"class":96},[79,88952,88953],{"class":239},".modalBox.innerHTML ",[79,88955,244],{"class":243},[79,88957,72276],{"class":89},[79,88959,88960,88963,88965],{"class":81,"line":1246},[79,88961,88962],{"class":89},"        \u003Cdiv class=\"header\">${",[79,88964,53520],{"class":239},[79,88966,88967],{"class":89},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[79,88969,88970,88973,88975],{"class":81,"line":1251},[79,88971,88972],{"class":89},"        \u003Cdiv class=\"body\">${",[79,88974,88889],{"class":239},[79,88976,88977],{"class":89},"}\u003C\u002Fdiv>\n",[79,88979,88980],{"class":81,"line":1274},[79,88981,88982],{"class":89},"      `\n",[79,88984,88985],{"class":81,"line":1296},[79,88986,88987],{"class":2440},"      \u002F\u002F console.log(this.modalBox)\n",[79,88989,88990],{"class":81,"line":1316},[79,88991,4402],{"class":239},[79,88993,88994],{"class":81,"line":1321},[79,88995,88996],{"class":2440},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[79,88998,88999],{"class":81,"line":1326},[79,89000,89001],{"class":2440},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[79,89003,89004],{"class":81,"line":1342},[79,89005,89006],{"class":2440},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[79,89008,89009,89012,89014,89016,89018,89021,89023,89025],{"class":81,"line":18985},[79,89010,89011],{"class":96},"    Modal",[79,89013,2931],{"class":239},[79,89015,87684],{"class":96},[79,89017,2931],{"class":239},[79,89019,89020],{"class":85},"open",[79,89022,468],{"class":243},[79,89024,61028],{"class":243},[79,89026,56562],{"class":239},[79,89028,89029],{"class":81,"line":18990},[79,89030,89031],{"class":2440},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[79,89033,89034,89036,89039,89041,89043,89045,89047,89050],{"class":81,"line":18995},[79,89035,60338],{"class":243},[79,89037,89038],{"class":96}," box",[79,89040,468],{"class":243},[79,89042,56506],{"class":239},[79,89044,56509],{"class":85},[79,89046,685],{"class":239},[79,89048,89049],{"class":89},"'.modal'",[79,89051,253],{"class":239},[79,89053,89054],{"class":81,"line":19009},[79,89055,89056],{"class":2440},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[79,89058,89059,89062,89064,89067,89069],{"class":81,"line":19021},[79,89060,89061],{"class":239},"      box ",[79,89063,3940],{"class":243},[79,89065,89066],{"class":239}," box.",[79,89068,59116],{"class":85},[79,89070,4191],{"class":239},[79,89072,89073],{"class":81,"line":19026},[79,89074,89075],{"class":2440},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[79,89077,89078],{"class":81,"line":19039},[79,89079,89080],{"class":2440},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[79,89082,89083],{"class":81,"line":19044},[79,89084,89085],{"class":2440},"      \u002F\u002F append可以增加对象\n",[79,89087,89088,89091,89094,89096,89099],{"class":81,"line":19049},[79,89089,89090],{"class":239},"      document.body.",[79,89092,89093],{"class":85},"append",[79,89095,685],{"class":239},[79,89097,89098],{"class":96},"this",[79,89100,89101],{"class":239},".modalBox)\n",[79,89103,89104],{"class":81,"line":19054},[79,89105,454],{"emptyLinePlaceholder":453},[79,89107,89108],{"class":81,"line":19067},[79,89109,89110],{"class":2440},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[79,89112,89113,89115,89118,89120,89122,89125,89127,89129,89131,89133,89136,89138],{"class":81,"line":19072},[79,89114,72159],{"class":96},[79,89116,89117],{"class":239},".modalBox.",[79,89119,56509],{"class":85},[79,89121,685],{"class":239},[79,89123,89124],{"class":89},"'i'",[79,89126,32950],{"class":239},[79,89128,59923],{"class":85},[79,89130,685],{"class":239},[79,89132,59928],{"class":89},[79,89134,89135],{"class":239},", () ",[79,89137,86827],{"class":243},[79,89139,17732],{"class":239},[79,89141,89142],{"class":81,"line":34748},[79,89143,89144],{"class":2440},"        \u002F\u002F 这个地方需要用到箭头函数\n",[79,89146,89147],{"class":81,"line":34754},[79,89148,89149],{"class":2440},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[79,89151,89152],{"class":81,"line":34760},[79,89153,89154],{"class":2440},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[79,89156,89157,89159,89161,89164],{"class":81,"line":34766},[79,89158,66836],{"class":96},[79,89160,2931],{"class":239},[79,89162,89163],{"class":85},"close",[79,89165,4191],{"class":239},[79,89167,89168],{"class":81,"line":34772},[79,89169,66925],{"class":239},[79,89171,89172],{"class":81,"line":34783},[79,89173,4402],{"class":239},[79,89175,89176],{"class":81,"line":34789},[79,89177,454],{"emptyLinePlaceholder":453},[79,89179,89180],{"class":81,"line":34809},[79,89181,89182],{"class":2440},"    \u002F\u002F 测试一下 点击 删除按钮\n",[79,89184,89185,89187,89189,89191,89194,89196,89198,89200,89202,89204,89206],{"class":81,"line":34815},[79,89186,54519],{"class":239},[79,89188,56509],{"class":85},[79,89190,685],{"class":239},[79,89192,89193],{"class":89},"'#delete'",[79,89195,32950],{"class":239},[79,89197,59923],{"class":85},[79,89199,685],{"class":239},[79,89201,59928],{"class":89},[79,89203,89135],{"class":239},[79,89205,86827],{"class":243},[79,89207,17732],{"class":239},[79,89209,89210],{"class":81,"line":34826},[79,89211,89212],{"class":2440},"      \u002F\u002F 先调用Model构造函数\n",[79,89214,89215,89217,89220,89222,89224,89226,89228,89231,89233,89236],{"class":81,"line":34832},[79,89216,60338],{"class":243},[79,89218,89219],{"class":96}," del",[79,89221,468],{"class":243},[79,89223,13742],{"class":243},[79,89225,88876],{"class":85},[79,89227,685],{"class":239},[79,89229,89230],{"class":89},"'温馨的提示'",[79,89232,1060],{"class":239},[79,89234,89235],{"class":89},"'您没有删除权限操作'",[79,89237,253],{"class":239},[79,89239,89240],{"class":81,"line":34838},[79,89241,89242],{"class":2440},"      \u002F\u002F 实例对象调用open方法\n",[79,89244,89245,89248,89250],{"class":81,"line":34844},[79,89246,89247],{"class":239},"      del.",[79,89249,89020],{"class":85},[79,89251,4191],{"class":239},[79,89253,89254],{"class":81,"line":34850},[79,89255,35576],{"class":239},[79,89257,89258],{"class":81,"line":34856},[79,89259,89260],{"class":2440},"    \u002F\u002F 测试一下 点击 登录按钮\n",[79,89262,89263,89265,89267,89269,89272,89274,89276,89278,89280,89282,89284],{"class":81,"line":34862},[79,89264,54519],{"class":239},[79,89266,56509],{"class":85},[79,89268,685],{"class":239},[79,89270,89271],{"class":89},"'#login'",[79,89273,32950],{"class":239},[79,89275,59923],{"class":85},[79,89277,685],{"class":239},[79,89279,59928],{"class":89},[79,89281,89135],{"class":239},[79,89283,86827],{"class":243},[79,89285,17732],{"class":239},[79,89287,89288],{"class":81,"line":34868},[79,89289,89212],{"class":2440},[79,89291,89292,89294,89297,89299,89301,89303,89305,89308,89310,89313],{"class":81,"line":34888},[79,89293,60338],{"class":243},[79,89295,89296],{"class":96}," log",[79,89298,468],{"class":243},[79,89300,13742],{"class":243},[79,89302,88876],{"class":85},[79,89304,685],{"class":239},[79,89306,89307],{"class":89},"'友情提示'",[79,89309,1060],{"class":239},[79,89311,89312],{"class":89},"'您还没有登录呢'",[79,89314,253],{"class":239},[79,89316,89317],{"class":81,"line":34894},[79,89318,89242],{"class":2440},[79,89320,89321,89324,89326],{"class":81,"line":34910},[79,89322,89323],{"class":239},"      log.",[79,89325,89020],{"class":85},[79,89327,4191],{"class":239},[79,89329,89330],{"class":81,"line":34916},[79,89331,35576],{"class":239},[79,89333,89334],{"class":81,"line":34930},[79,89335,89336],{"class":2440},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[79,89338,89339,89341,89343,89345,89347,89349,89351,89353],{"class":81,"line":34936},[79,89340,89011],{"class":96},[79,89342,2931],{"class":239},[79,89344,87684],{"class":96},[79,89346,2931],{"class":239},[79,89348,89163],{"class":85},[79,89350,468],{"class":243},[79,89352,61028],{"class":243},[79,89354,56562],{"class":239},[79,89356,89357,89359,89361,89363],{"class":81,"line":34951},[79,89358,72159],{"class":96},[79,89360,89117],{"class":239},[79,89362,59116],{"class":85},[79,89364,4191],{"class":239},[79,89366,89367],{"class":81,"line":34957},[79,89368,4402],{"class":239},[79,89370,89371,89373,89375],{"class":81,"line":34966},[79,89372,54529],{"class":239},[79,89374,53926],{"class":395},[79,89376,53420],{"class":239},[79,89378,89379,89381,89383],{"class":81,"line":34972},[79,89380,53898],{"class":239},[79,89382,53913],{"class":395},[79,89384,53420],{"class":239},[79,89386,89387],{"class":81,"line":34981},[79,89388,454],{"emptyLinePlaceholder":453},[79,89390,89391,89393,89395],{"class":81,"line":34987},[79,89392,53898],{"class":239},[79,89394,52749],{"class":395},[79,89396,53420],{"class":239},[19,89398,89399],{},[3699,89400],{"alt":57,"src":89401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89403,89405],{"id":89404},"_414-深浅拷贝","4.14 深浅拷贝",[265,89407,89409],{"id":89408},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89411,89412],{},[3699,89413],{"alt":57,"src":89414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89416,89417],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89419,89420],{},[3699,89421],{"alt":57,"src":89422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89424,89425],{},[3699,89426],{"alt":57,"src":89427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89429,89430],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89432,89433],{},[3699,89434],{"alt":57,"src":89435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89437,13496],{},[19,89439,89440],{},[3699,89441],{"alt":57,"src":89442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[265,89444,89446],{"id":89445},"_4142-深拷贝","4.14.2 深拷贝",[19,89448,89449],{},"深拷贝：拷贝的是对象，不是地址",[19,89451,89452],{},"常用的三种方法：",[26,89454,89455,89458,89461],{},[29,89456,89457],{},"通过递归实现深拷贝",[29,89459,89460],{},"lodash\u002FcloneDeep",[29,89462,89463],{},"通过JSON.stringify()实现",[24137,89465,89467],{"id":89466},"_41421-递归函数","4.14.2.1 递归函数",[19,89469,89470],{},[3699,89471],{"alt":57,"src":89472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[26,89474,89475],{},[29,89476,89477],{},"死递归占溢出：",[51,89479,89481],{"className":383,"code":89480,"language":385,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,89482,89483,89491,89499,89503,89508,89512,89517,89525],{"__ignoreMap":57},[79,89484,89485,89487,89489],{"class":81,"line":82},[79,89486,392],{"class":239},[79,89488,53913],{"class":395},[79,89490,53420],{"class":239},[79,89492,89493,89495,89497],{"class":81,"line":167},[79,89494,54257],{"class":239},[79,89496,53926],{"class":395},[79,89498,53420],{"class":239},[79,89500,89501],{"class":81,"line":178},[79,89502,79251],{"class":239},[79,89504,89505],{"class":81,"line":457},[79,89506,89507],{"class":239},"      fn()\n",[79,89509,89510],{"class":81,"line":462},[79,89511,4402],{"class":239},[79,89513,89514],{"class":81,"line":474},[79,89515,89516],{"class":239},"    fn()\n",[79,89518,89519,89521,89523],{"class":81,"line":480},[79,89520,54529],{"class":239},[79,89522,53926],{"class":395},[79,89524,53420],{"class":239},[79,89526,89527,89529,89531],{"class":81,"line":486},[79,89528,53898],{"class":239},[79,89530,53913],{"class":395},[79,89532,53420],{"class":239},[26,89534,89535],{"start":167},[29,89536,89537],{},"递归函数要加判断条件：",[19,89539,89540],{},[3699,89541],{"alt":57,"src":89542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[26,89544,89545],{"start":178},[29,89546,89547],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[51,89549,89551],{"className":52747,"code":89550,"language":52749,"meta":57,"style":57},"\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",[59,89552,89553,89563,89577,89581,89589,89603,89623,89635,89643,89647,89655,89667,89675,89683,89708,89720,89724,89731,89739,89747,89751],{"__ignoreMap":57},[79,89554,89555,89557,89559,89561],{"class":81,"line":82},[79,89556,53411],{"class":239},[79,89558,53414],{"class":395},[79,89560,53417],{"class":85},[79,89562,53420],{"class":239},[79,89564,89565,89567,89569,89571,89573,89575],{"class":81,"line":167},[79,89566,392],{"class":239},[79,89568,52749],{"class":395},[79,89570,53429],{"class":85},[79,89572,244],{"class":239},[79,89574,53434],{"class":89},[79,89576,53420],{"class":239},[79,89578,89579],{"class":81,"line":178},[79,89580,454],{"emptyLinePlaceholder":453},[79,89582,89583,89585,89587],{"class":81,"line":457},[79,89584,392],{"class":239},[79,89586,53447],{"class":395},[79,89588,53420],{"class":239},[79,89590,89591,89593,89595,89597,89599,89601],{"class":81,"line":462},[79,89592,54257],{"class":239},[79,89594,53457],{"class":395},[79,89596,53460],{"class":85},[79,89598,244],{"class":239},[79,89600,53465],{"class":89},[79,89602,53420],{"class":239},[79,89604,89605,89607,89609,89611,89613,89615,89617,89619,89621],{"class":81,"line":474},[79,89606,54257],{"class":239},[79,89608,53457],{"class":395},[79,89610,2238],{"class":85},[79,89612,244],{"class":239},[79,89614,53504],{"class":89},[79,89616,53484],{"class":85},[79,89618,244],{"class":239},[79,89620,53511],{"class":89},[79,89622,53420],{"class":239},[79,89624,89625,89627,89629,89631,89633],{"class":81,"line":480},[79,89626,54257],{"class":239},[79,89628,53520],{"class":395},[79,89630,53523],{"class":239},[79,89632,53520],{"class":395},[79,89634,53420],{"class":239},[79,89636,89637,89639,89641],{"class":81,"line":486},[79,89638,53898],{"class":239},[79,89640,53447],{"class":395},[79,89642,53420],{"class":239},[79,89644,89645],{"class":81,"line":491},[79,89646,454],{"emptyLinePlaceholder":453},[79,89648,89649,89651,89653],{"class":81,"line":497},[79,89650,392],{"class":239},[79,89652,53913],{"class":395},[79,89654,53420],{"class":239},[79,89656,89657,89659,89661,89663,89665],{"class":81,"line":503},[79,89658,54257],{"class":239},[79,89660,53724],{"class":395},[79,89662,57424],{"class":239},[79,89664,53724],{"class":395},[79,89666,53420],{"class":239},[79,89668,89669,89671,89673],{"class":81,"line":509},[79,89670,54257],{"class":239},[79,89672,53926],{"class":395},[79,89674,53420],{"class":239},[79,89676,89677,89679,89681],{"class":81,"line":514},[79,89678,72192],{"class":243},[79,89680,75881],{"class":85},[79,89682,13017],{"class":239},[79,89684,89685,89687,89689,89691,89693,89695,89697,89699,89701,89703,89706],{"class":81,"line":520},[79,89686,57881],{"class":239},[79,89688,56509],{"class":85},[79,89690,685],{"class":239},[79,89692,84038],{"class":89},[79,89694,76357],{"class":239},[79,89696,244],{"class":243},[79,89698,13742],{"class":243},[79,89700,75897],{"class":85},[79,89702,19400],{"class":239},[79,89704,89705],{"class":85},"toLocaleString",[79,89707,4191],{"class":239},[79,89709,89710,89713,89716,89718],{"class":81,"line":526},[79,89711,89712],{"class":85},"      setTimeout",[79,89714,89715],{"class":239},"(getTime, ",[79,89717,8605],{"class":96},[79,89719,253],{"class":239},[79,89721,89722],{"class":81,"line":532},[79,89723,4402],{"class":239},[79,89725,89726,89729],{"class":81,"line":537},[79,89727,89728],{"class":85},"    getTime",[79,89730,4191],{"class":239},[79,89732,89733,89735,89737],{"class":81,"line":543},[79,89734,54529],{"class":239},[79,89736,53926],{"class":395},[79,89738,53420],{"class":239},[79,89740,89741,89743,89745],{"class":81,"line":549},[79,89742,53898],{"class":239},[79,89744,53913],{"class":395},[79,89746,53420],{"class":239},[79,89748,89749],{"class":81,"line":555},[79,89750,454],{"emptyLinePlaceholder":453},[79,89752,89753,89755,89757],{"class":81,"line":561},[79,89754,53898],{"class":239},[79,89756,52749],{"class":395},[79,89758,53420],{"class":239},[19,89760,89761],{},[3699,89762],{"alt":57,"src":89763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[26,89765,89766],{"start":457},[29,89767,89457],{},[19,89769,89770],{},[3699,89771],{"alt":57,"src":89772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89774,89775],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89777,41303],{},[19,89779,89780],{},"这个是简易版的递归函数深拷贝",[19,89782,89783],{},"一定要注意先数组再对象，因为万物皆可对象",[51,89785,89787],{"className":52747,"code":89786,"language":52749,"meta":57,"style":57},"\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",[59,89788,89789,89799,89813,89817,89825,89839,89859,89871,89879,89883,89891,89899,89909,89918,89926,89942,89946,89954,89958,89962,89974,89979,89998,90014,90019,90024,90029,90044,90049,90054,90063,90071,90088,90096,90102,90110,90115,90120,90129,90133,90137,90141,90152,90161,90171,90185,90195,90203,90211,90219,90223],{"__ignoreMap":57},[79,89790,89791,89793,89795,89797],{"class":81,"line":82},[79,89792,53411],{"class":239},[79,89794,53414],{"class":395},[79,89796,53417],{"class":85},[79,89798,53420],{"class":239},[79,89800,89801,89803,89805,89807,89809,89811],{"class":81,"line":167},[79,89802,392],{"class":239},[79,89804,52749],{"class":395},[79,89806,53429],{"class":85},[79,89808,244],{"class":239},[79,89810,53434],{"class":89},[79,89812,53420],{"class":239},[79,89814,89815],{"class":81,"line":178},[79,89816,454],{"emptyLinePlaceholder":453},[79,89818,89819,89821,89823],{"class":81,"line":457},[79,89820,392],{"class":239},[79,89822,53447],{"class":395},[79,89824,53420],{"class":239},[79,89826,89827,89829,89831,89833,89835,89837],{"class":81,"line":462},[79,89828,54257],{"class":239},[79,89830,53457],{"class":395},[79,89832,53460],{"class":85},[79,89834,244],{"class":239},[79,89836,53465],{"class":89},[79,89838,53420],{"class":239},[79,89840,89841,89843,89845,89847,89849,89851,89853,89855,89857],{"class":81,"line":474},[79,89842,54257],{"class":239},[79,89844,53457],{"class":395},[79,89846,2238],{"class":85},[79,89848,244],{"class":239},[79,89850,53504],{"class":89},[79,89852,53484],{"class":85},[79,89854,244],{"class":239},[79,89856,53511],{"class":89},[79,89858,53420],{"class":239},[79,89860,89861,89863,89865,89867,89869],{"class":81,"line":480},[79,89862,54257],{"class":239},[79,89864,53520],{"class":395},[79,89866,53523],{"class":239},[79,89868,53520],{"class":395},[79,89870,53420],{"class":239},[79,89872,89873,89875,89877],{"class":81,"line":486},[79,89874,53898],{"class":239},[79,89876,53447],{"class":395},[79,89878,53420],{"class":239},[79,89880,89881],{"class":81,"line":491},[79,89882,454],{"emptyLinePlaceholder":453},[79,89884,89885,89887,89889],{"class":81,"line":497},[79,89886,392],{"class":239},[79,89888,53913],{"class":395},[79,89890,53420],{"class":239},[79,89892,89893,89895,89897],{"class":81,"line":503},[79,89894,54257],{"class":239},[79,89896,53926],{"class":395},[79,89898,53420],{"class":239},[79,89900,89901,89903,89905,89907],{"class":81,"line":509},[79,89902,13385],{"class":243},[79,89904,72079],{"class":96},[79,89906,468],{"class":243},[79,89908,17732],{"class":239},[79,89910,89911,89913,89916],{"class":81,"line":514},[79,89912,73724],{"class":239},[79,89914,89915],{"class":89},"'pink'",[79,89917,33585],{"class":239},[79,89919,89920,89922,89924],{"class":81,"line":520},[79,89921,73734],{"class":239},[79,89923,3023],{"class":96},[79,89925,33585],{"class":239},[79,89927,89928,89931,89934,89936,89939],{"class":81,"line":526},[79,89929,89930],{"class":239},"      hobby: [",[79,89932,89933],{"class":89},"'乒乓球'",[79,89935,1060],{"class":239},[79,89937,89938],{"class":89},"'足球'",[79,89940,89941],{"class":239},"],\n",[79,89943,89944],{"class":81,"line":532},[79,89945,79980],{"class":239},[79,89947,89948,89951],{"class":81,"line":537},[79,89949,89950],{"class":239},"        baby: ",[79,89952,89953],{"class":89},"'小pink'\n",[79,89955,89956],{"class":81,"line":543},[79,89957,54510],{"class":239},[79,89959,89960],{"class":81,"line":549},[79,89961,4402],{"class":239},[79,89963,89964,89966,89969,89971],{"class":81,"line":555},[79,89965,13385],{"class":243},[79,89967,89968],{"class":96}," o",[79,89970,468],{"class":243},[79,89972,89973],{"class":239}," {}\n",[79,89975,89976],{"class":81,"line":561},[79,89977,89978],{"class":2440},"    \u002F\u002F 拷贝函数\n",[79,89980,89981,89983,89986,89988,89991,89993,89996],{"class":81,"line":567},[79,89982,72192],{"class":243},[79,89984,89985],{"class":85}," deepCopy",[79,89987,685],{"class":239},[79,89989,89990],{"class":7412},"newObj",[79,89992,1060],{"class":239},[79,89994,89995],{"class":7412},"oldObj",[79,89997,14605],{"class":239},[79,89999,90000,90002,90004,90006,90009,90011],{"class":81,"line":573},[79,90001,54396],{"class":243},[79,90003,3887],{"class":239},[79,90005,53960],{"class":243},[79,90007,90008],{"class":239}," k ",[79,90010,955],{"class":243},[79,90012,90013],{"class":239}," oldObj) {\n",[79,90015,90016],{"class":81,"line":579},[79,90017,90018],{"class":2440},"        \u002F\u002F 处理数组的问题\n",[79,90020,90021],{"class":81,"line":584},[79,90022,90023],{"class":2440},"        \u002F\u002F 判断是否属于数组\n",[79,90025,90026],{"class":81,"line":590},[79,90027,90028],{"class":2440},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[79,90030,90031,90033,90036,90039,90042],{"class":81,"line":596},[79,90032,1132],{"class":243},[79,90034,90035],{"class":239}," (oldObj[k] ",[79,90037,90038],{"class":243},"instanceof",[79,90040,90041],{"class":85}," Array",[79,90043,14605],{"class":239},[79,90045,90046],{"class":81,"line":602},[79,90047,90048],{"class":2440},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[79,90050,90051],{"class":81,"line":608},[79,90052,90053],{"class":2440},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[79,90055,90056,90059,90061],{"class":81,"line":614},[79,90057,90058],{"class":239},"          newObj[k] ",[79,90060,244],{"class":243},[79,90062,53951],{"class":239},[79,90064,90065,90068],{"class":81,"line":620},[79,90066,90067],{"class":85},"          deepCopy",[79,90069,90070],{"class":239},"(newObj[k], oldObj[k])\n",[79,90072,90073,90075,90077,90079,90081,90083,90086],{"class":81,"line":625},[79,90074,82187],{"class":239},[79,90076,3926],{"class":243},[79,90078,3929],{"class":243},[79,90080,90035],{"class":239},[79,90082,90038],{"class":243},[79,90084,90085],{"class":85}," Object",[79,90087,14605],{"class":239},[79,90089,90090,90092,90094],{"class":81,"line":630},[79,90091,90058],{"class":239},[79,90093,244],{"class":243},[79,90095,89973],{"class":239},[79,90097,90098,90100],{"class":81,"line":648},[79,90099,90067],{"class":85},[79,90101,90070],{"class":239},[79,90103,90104,90106,90108],{"class":81,"line":659},[79,90105,82187],{"class":239},[79,90107,3926],{"class":243},[79,90109,17732],{"class":239},[79,90111,90112],{"class":81,"line":676},[79,90113,90114],{"class":2440},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[79,90116,90117],{"class":81,"line":708},[79,90118,90119],{"class":2440},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[79,90121,90122,90124,90126],{"class":81,"line":717},[79,90123,90058],{"class":239},[79,90125,244],{"class":243},[79,90127,90128],{"class":239}," oldObj[k]\n",[79,90130,90131],{"class":81,"line":722},[79,90132,4742],{"class":239},[79,90134,90135],{"class":81,"line":727},[79,90136,54510],{"class":239},[79,90138,90139],{"class":81,"line":738},[79,90140,4402],{"class":239},[79,90142,90143,90146,90149],{"class":81,"line":753},[79,90144,90145],{"class":85},"    deepCopy",[79,90147,90148],{"class":239},"(o, obj) ",[79,90150,90151],{"class":2440},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[79,90153,90154,90156,90158],{"class":81,"line":768},[79,90155,75861],{"class":239},[79,90157,60357],{"class":85},[79,90159,90160],{"class":239},"(o)\n",[79,90162,90163,90166,90168],{"class":81,"line":776},[79,90164,90165],{"class":239},"    o.age ",[79,90167,244],{"class":243},[79,90169,90170],{"class":96}," 20\n",[79,90172,90173,90176,90178,90180,90182],{"class":81,"line":781},[79,90174,90175],{"class":239},"    o.hobby[",[79,90177,1030],{"class":96},[79,90179,1033],{"class":239},[79,90181,244],{"class":243},[79,90183,90184],{"class":89}," '篮球'\n",[79,90186,90187,90190,90192],{"class":81,"line":786},[79,90188,90189],{"class":239},"    o.family ",[79,90191,244],{"class":243},[79,90193,90194],{"class":89}," '老pink'\n",[79,90196,90197,90199,90201],{"class":81,"line":802},[79,90198,75861],{"class":239},[79,90200,60357],{"class":85},[79,90202,72144],{"class":239},[79,90204,90205,90207,90209],{"class":81,"line":815},[79,90206,54529],{"class":239},[79,90208,53926],{"class":395},[79,90210,53420],{"class":239},[79,90212,90213,90215,90217],{"class":81,"line":828},[79,90214,53898],{"class":239},[79,90216,53913],{"class":395},[79,90218,53420],{"class":239},[79,90220,90221],{"class":81,"line":842},[79,90222,454],{"emptyLinePlaceholder":453},[79,90224,90225,90227,90229],{"class":81,"line":859},[79,90226,53898],{"class":239},[79,90228,52749],{"class":395},[79,90230,53420],{"class":239},[19,90232,90233],{},[3699,90234],{"alt":57,"src":90235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[24137,90237,90239,90240],{"id":90238},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[2528,90241,90242],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,90244,90245],{},[2614,90246,90247],{"href":90247,"rel":90248},"https:\u002F\u002Fwww.lodashjs.com\u002F",[26001],[19,90250,90251],{},"lodash里边的方法都要加上一个下划线_",[19,90253,90254],{},"_.cloneDeep()",[51,90256,90258],{"className":52747,"code":90257,"language":52749,"meta":57,"style":57},"\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",[59,90259,90260,90270,90284,90288,90296,90310,90330,90342,90350,90354,90362,90367,90386,90394,90404,90412,90420,90432,90436,90442,90446,90450,90466,90474,90483,90491,90499,90507,90511],{"__ignoreMap":57},[79,90261,90262,90264,90266,90268],{"class":81,"line":82},[79,90263,53411],{"class":239},[79,90265,53414],{"class":395},[79,90267,53417],{"class":85},[79,90269,53420],{"class":239},[79,90271,90272,90274,90276,90278,90280,90282],{"class":81,"line":167},[79,90273,392],{"class":239},[79,90275,52749],{"class":395},[79,90277,53429],{"class":85},[79,90279,244],{"class":239},[79,90281,53434],{"class":89},[79,90283,53420],{"class":239},[79,90285,90286],{"class":81,"line":178},[79,90287,454],{"emptyLinePlaceholder":453},[79,90289,90290,90292,90294],{"class":81,"line":457},[79,90291,392],{"class":239},[79,90293,53447],{"class":395},[79,90295,53420],{"class":239},[79,90297,90298,90300,90302,90304,90306,90308],{"class":81,"line":462},[79,90299,54257],{"class":239},[79,90301,53457],{"class":395},[79,90303,53460],{"class":85},[79,90305,244],{"class":239},[79,90307,53465],{"class":89},[79,90309,53420],{"class":239},[79,90311,90312,90314,90316,90318,90320,90322,90324,90326,90328],{"class":81,"line":474},[79,90313,54257],{"class":239},[79,90315,53457],{"class":395},[79,90317,2238],{"class":85},[79,90319,244],{"class":239},[79,90321,53504],{"class":89},[79,90323,53484],{"class":85},[79,90325,244],{"class":239},[79,90327,53511],{"class":89},[79,90329,53420],{"class":239},[79,90331,90332,90334,90336,90338,90340],{"class":81,"line":480},[79,90333,54257],{"class":239},[79,90335,53520],{"class":395},[79,90337,53523],{"class":239},[79,90339,53520],{"class":395},[79,90341,53420],{"class":239},[79,90343,90344,90346,90348],{"class":81,"line":486},[79,90345,53898],{"class":239},[79,90347,53447],{"class":395},[79,90349,53420],{"class":239},[79,90351,90352],{"class":81,"line":491},[79,90353,454],{"emptyLinePlaceholder":453},[79,90355,90356,90358,90360],{"class":81,"line":497},[79,90357,392],{"class":239},[79,90359,53913],{"class":395},[79,90361,53420],{"class":239},[79,90363,90364],{"class":81,"line":503},[79,90365,90366],{"class":2440},"  \u003C!-- 先引用这个库 -->\n",[79,90368,90369,90371,90373,90375,90377,90380,90382,90384],{"class":81,"line":509},[79,90370,54257],{"class":239},[79,90372,53926],{"class":395},[79,90374,57349],{"class":85},[79,90376,244],{"class":239},[79,90378,90379],{"class":89},"\"lodash.min.js\"",[79,90381,57424],{"class":239},[79,90383,53926],{"class":395},[79,90385,53420],{"class":239},[79,90387,90388,90390,90392],{"class":81,"line":514},[79,90389,54257],{"class":239},[79,90391,53926],{"class":395},[79,90393,53420],{"class":239},[79,90395,90396,90398,90400,90402],{"class":81,"line":520},[79,90397,13385],{"class":243},[79,90399,72079],{"class":96},[79,90401,468],{"class":243},[79,90403,17732],{"class":239},[79,90405,90406,90408,90410],{"class":81,"line":526},[79,90407,73724],{"class":239},[79,90409,89915],{"class":89},[79,90411,33585],{"class":239},[79,90413,90414,90416,90418],{"class":81,"line":532},[79,90415,73734],{"class":239},[79,90417,3023],{"class":96},[79,90419,33585],{"class":239},[79,90421,90422,90424,90426,90428,90430],{"class":81,"line":537},[79,90423,89930],{"class":239},[79,90425,89933],{"class":89},[79,90427,1060],{"class":239},[79,90429,89938],{"class":89},[79,90431,89941],{"class":239},[79,90433,90434],{"class":81,"line":543},[79,90435,79980],{"class":239},[79,90437,90438,90440],{"class":81,"line":549},[79,90439,89950],{"class":239},[79,90441,89953],{"class":89},[79,90443,90444],{"class":81,"line":555},[79,90445,54510],{"class":239},[79,90447,90448],{"class":81,"line":561},[79,90449,4402],{"class":239},[79,90451,90452,90454,90456,90458,90461,90464],{"class":81,"line":567},[79,90453,13385],{"class":243},[79,90455,89968],{"class":96},[79,90457,468],{"class":243},[79,90459,90460],{"class":239}," _.",[79,90462,90463],{"class":85},"cloneDeep",[79,90465,72144],{"class":239},[79,90467,90468,90470,90472],{"class":81,"line":573},[79,90469,75861],{"class":239},[79,90471,60357],{"class":85},[79,90473,90160],{"class":239},[79,90475,90476,90479,90481],{"class":81,"line":579},[79,90477,90478],{"class":239},"    o.family.baby ",[79,90480,244],{"class":243},[79,90482,90194],{"class":89},[79,90484,90485,90487,90489],{"class":81,"line":584},[79,90486,75861],{"class":239},[79,90488,60357],{"class":85},[79,90490,72144],{"class":239},[79,90492,90493,90495,90497],{"class":81,"line":590},[79,90494,54529],{"class":239},[79,90496,53926],{"class":395},[79,90498,53420],{"class":239},[79,90500,90501,90503,90505],{"class":81,"line":596},[79,90502,53898],{"class":239},[79,90504,53913],{"class":395},[79,90506,53420],{"class":239},[79,90508,90509],{"class":81,"line":602},[79,90510,454],{"emptyLinePlaceholder":453},[79,90512,90513,90515,90517],{"class":81,"line":608},[79,90514,53898],{"class":239},[79,90516,52749],{"class":395},[79,90518,53420],{"class":239},[19,90520,90521],{},[3699,90522],{"alt":57,"src":90523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[24137,90525,90527],{"id":90526},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[51,90529,90531],{"className":52747,"code":90530,"language":52749,"meta":57,"style":57},"\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",[59,90532,90533,90543,90557,90561,90569,90583,90603,90615,90623,90627,90635,90643,90653,90661,90669,90681,90685,90691,90695,90699,90704,90709,90714,90740,90748,90757,90765,90773,90781,90785],{"__ignoreMap":57},[79,90534,90535,90537,90539,90541],{"class":81,"line":82},[79,90536,53411],{"class":239},[79,90538,53414],{"class":395},[79,90540,53417],{"class":85},[79,90542,53420],{"class":239},[79,90544,90545,90547,90549,90551,90553,90555],{"class":81,"line":167},[79,90546,392],{"class":239},[79,90548,52749],{"class":395},[79,90550,53429],{"class":85},[79,90552,244],{"class":239},[79,90554,53434],{"class":89},[79,90556,53420],{"class":239},[79,90558,90559],{"class":81,"line":178},[79,90560,454],{"emptyLinePlaceholder":453},[79,90562,90563,90565,90567],{"class":81,"line":457},[79,90564,392],{"class":239},[79,90566,53447],{"class":395},[79,90568,53420],{"class":239},[79,90570,90571,90573,90575,90577,90579,90581],{"class":81,"line":462},[79,90572,54257],{"class":239},[79,90574,53457],{"class":395},[79,90576,53460],{"class":85},[79,90578,244],{"class":239},[79,90580,53465],{"class":89},[79,90582,53420],{"class":239},[79,90584,90585,90587,90589,90591,90593,90595,90597,90599,90601],{"class":81,"line":474},[79,90586,54257],{"class":239},[79,90588,53457],{"class":395},[79,90590,2238],{"class":85},[79,90592,244],{"class":239},[79,90594,53504],{"class":89},[79,90596,53484],{"class":85},[79,90598,244],{"class":239},[79,90600,53511],{"class":89},[79,90602,53420],{"class":239},[79,90604,90605,90607,90609,90611,90613],{"class":81,"line":480},[79,90606,54257],{"class":239},[79,90608,53520],{"class":395},[79,90610,53523],{"class":239},[79,90612,53520],{"class":395},[79,90614,53420],{"class":239},[79,90616,90617,90619,90621],{"class":81,"line":486},[79,90618,53898],{"class":239},[79,90620,53447],{"class":395},[79,90622,53420],{"class":239},[79,90624,90625],{"class":81,"line":491},[79,90626,454],{"emptyLinePlaceholder":453},[79,90628,90629,90631,90633],{"class":81,"line":497},[79,90630,392],{"class":239},[79,90632,53913],{"class":395},[79,90634,53420],{"class":239},[79,90636,90637,90639,90641],{"class":81,"line":503},[79,90638,54257],{"class":239},[79,90640,53926],{"class":395},[79,90642,53420],{"class":239},[79,90644,90645,90647,90649,90651],{"class":81,"line":509},[79,90646,13385],{"class":243},[79,90648,72079],{"class":96},[79,90650,468],{"class":243},[79,90652,17732],{"class":239},[79,90654,90655,90657,90659],{"class":81,"line":514},[79,90656,73724],{"class":239},[79,90658,89915],{"class":89},[79,90660,33585],{"class":239},[79,90662,90663,90665,90667],{"class":81,"line":520},[79,90664,73734],{"class":239},[79,90666,3023],{"class":96},[79,90668,33585],{"class":239},[79,90670,90671,90673,90675,90677,90679],{"class":81,"line":526},[79,90672,89930],{"class":239},[79,90674,89933],{"class":89},[79,90676,1060],{"class":239},[79,90678,89938],{"class":89},[79,90680,89941],{"class":239},[79,90682,90683],{"class":81,"line":532},[79,90684,79980],{"class":239},[79,90686,90687,90689],{"class":81,"line":537},[79,90688,89950],{"class":239},[79,90690,89953],{"class":89},[79,90692,90693],{"class":81,"line":543},[79,90694,54510],{"class":239},[79,90696,90697],{"class":81,"line":549},[79,90698,4402],{"class":239},[79,90700,90701],{"class":81,"line":555},[79,90702,90703],{"class":2440},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[79,90705,90706],{"class":81,"line":561},[79,90707,90708],{"class":2440},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[79,90710,90711],{"class":81,"line":567},[79,90712,90713],{"class":2440},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[79,90715,90716,90718,90720,90722,90725,90727,90730,90732,90734,90736,90738],{"class":81,"line":573},[79,90717,13385],{"class":243},[79,90719,89968],{"class":96},[79,90721,468],{"class":243},[79,90723,90724],{"class":96}," JSON",[79,90726,2931],{"class":239},[79,90728,90729],{"class":85},"parse",[79,90731,685],{"class":239},[79,90733,73772],{"class":96},[79,90735,2931],{"class":239},[79,90737,73777],{"class":85},[79,90739,73780],{"class":239},[79,90741,90742,90744,90746],{"class":81,"line":579},[79,90743,75861],{"class":239},[79,90745,60357],{"class":85},[79,90747,90160],{"class":239},[79,90749,90750,90752,90754],{"class":81,"line":584},[79,90751,90478],{"class":239},[79,90753,244],{"class":243},[79,90755,90756],{"class":89}," '123'\n",[79,90758,90759,90761,90763],{"class":81,"line":590},[79,90760,75861],{"class":239},[79,90762,60357],{"class":85},[79,90764,72144],{"class":239},[79,90766,90767,90769,90771],{"class":81,"line":596},[79,90768,54529],{"class":239},[79,90770,53926],{"class":395},[79,90772,53420],{"class":239},[79,90774,90775,90777,90779],{"class":81,"line":602},[79,90776,53898],{"class":239},[79,90778,53913],{"class":395},[79,90780,53420],{"class":239},[79,90782,90783],{"class":81,"line":608},[79,90784,454],{"emptyLinePlaceholder":453},[79,90786,90787,90789,90791],{"class":81,"line":614},[79,90788,53898],{"class":239},[79,90790,52749],{"class":395},[79,90792,53420],{"class":239},[19,90794,90795],{},[3699,90796],{"alt":57,"src":90797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90799,90801],{"id":90800},"_415-异常处理","4.15 异常处理",[26,90803,90804],{},[29,90805,90806],{},"throw抛异常",[19,90808,90809],{},[3699,90810],{"alt":57,"src":90811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[26,90813,90814],{"start":167},[29,90815,90816],{},"try\u002Fcatch 捕获错误信息",[19,90818,90819],{},[3699,90820],{"alt":57,"src":90821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[51,90823,90825],{"className":52747,"code":90824,"language":52749,"meta":57,"style":57},"\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",[59,90826,90827,90837,90851,90855,90863,90877,90897,90909,90917,90921,90929,90941,90949,90958,90965,90970,90989,90998,91009,91014,91024,91029,91034,91039,91056,91060,91065,91072,91084,91088,91100,91104,91108,91113,91118,91125,91133,91141,91145],{"__ignoreMap":57},[79,90828,90829,90831,90833,90835],{"class":81,"line":82},[79,90830,53411],{"class":239},[79,90832,53414],{"class":395},[79,90834,53417],{"class":85},[79,90836,53420],{"class":239},[79,90838,90839,90841,90843,90845,90847,90849],{"class":81,"line":167},[79,90840,392],{"class":239},[79,90842,52749],{"class":395},[79,90844,53429],{"class":85},[79,90846,244],{"class":239},[79,90848,53434],{"class":89},[79,90850,53420],{"class":239},[79,90852,90853],{"class":81,"line":178},[79,90854,454],{"emptyLinePlaceholder":453},[79,90856,90857,90859,90861],{"class":81,"line":457},[79,90858,392],{"class":239},[79,90860,53447],{"class":395},[79,90862,53420],{"class":239},[79,90864,90865,90867,90869,90871,90873,90875],{"class":81,"line":462},[79,90866,54257],{"class":239},[79,90868,53457],{"class":395},[79,90870,53460],{"class":85},[79,90872,244],{"class":239},[79,90874,53465],{"class":89},[79,90876,53420],{"class":239},[79,90878,90879,90881,90883,90885,90887,90889,90891,90893,90895],{"class":81,"line":474},[79,90880,54257],{"class":239},[79,90882,53457],{"class":395},[79,90884,2238],{"class":85},[79,90886,244],{"class":239},[79,90888,53504],{"class":89},[79,90890,53484],{"class":85},[79,90892,244],{"class":239},[79,90894,53511],{"class":89},[79,90896,53420],{"class":239},[79,90898,90899,90901,90903,90905,90907],{"class":81,"line":480},[79,90900,54257],{"class":239},[79,90902,53520],{"class":395},[79,90904,53523],{"class":239},[79,90906,53520],{"class":395},[79,90908,53420],{"class":239},[79,90910,90911,90913,90915],{"class":81,"line":486},[79,90912,53898],{"class":239},[79,90914,53447],{"class":395},[79,90916,53420],{"class":239},[79,90918,90919],{"class":81,"line":491},[79,90920,454],{"emptyLinePlaceholder":453},[79,90922,90923,90925,90927],{"class":81,"line":497},[79,90924,392],{"class":239},[79,90926,53913],{"class":395},[79,90928,53420],{"class":239},[79,90930,90931,90933,90935,90937,90939],{"class":81,"line":503},[79,90932,54257],{"class":239},[79,90934,19],{"class":395},[79,90936,55604],{"class":239},[79,90938,19],{"class":395},[79,90940,53420],{"class":239},[79,90942,90943,90945,90947],{"class":81,"line":509},[79,90944,54257],{"class":239},[79,90946,53926],{"class":395},[79,90948,53420],{"class":239},[79,90950,90951,90953,90956],{"class":81,"line":514},[79,90952,72192],{"class":243},[79,90954,90955],{"class":85}," fn",[79,90957,13017],{"class":239},[79,90959,90960,90963],{"class":81,"line":520},[79,90961,90962],{"class":243},"      try",[79,90964,17732],{"class":239},[79,90966,90967],{"class":81,"line":526},[79,90968,90969],{"class":2440},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[79,90971,90972,90974,90976,90978,90980,90982,90984,90987],{"class":81,"line":532},[79,90973,63380],{"class":243},[79,90975,9019],{"class":96},[79,90977,468],{"class":243},[79,90979,56506],{"class":239},[79,90981,56509],{"class":85},[79,90983,685],{"class":239},[79,90985,90986],{"class":89},"'.p'",[79,90988,253],{"class":239},[79,90990,90991,90994,90996],{"class":81,"line":537},[79,90992,90993],{"class":239},"        p.style.color ",[79,90995,244],{"class":243},[79,90997,69160],{"class":89},[79,90999,91000,91003,91006],{"class":81,"line":543},[79,91001,91002],{"class":239},"      } ",[79,91004,91005],{"class":243},"catch",[79,91007,91008],{"class":239}," (err) {\n",[79,91010,91011],{"class":81,"line":549},[79,91012,91013],{"class":2440},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[79,91015,91016,91019,91021],{"class":81,"line":555},[79,91017,91018],{"class":239},"        console.",[79,91020,60357],{"class":85},[79,91022,91023],{"class":239},"(err.message)\n",[79,91025,91026],{"class":81,"line":561},[79,91027,91028],{"class":2440},"        \u002F\u002F 想要中断程序，需要加return\n",[79,91030,91031],{"class":81,"line":567},[79,91032,91033],{"class":2440},"        \u002F\u002F return\n",[79,91035,91036],{"class":81,"line":573},[79,91037,91038],{"class":2440},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[79,91040,91041,91044,91046,91049,91051,91054],{"class":81,"line":579},[79,91042,91043],{"class":243},"        throw",[79,91045,13742],{"class":243},[79,91047,91048],{"class":85}," Error",[79,91050,685],{"class":239},[79,91052,91053],{"class":89},"'你看看，选择器错误了吧'",[79,91055,253],{"class":239},[79,91057,91058],{"class":81,"line":584},[79,91059,54510],{"class":239},[79,91061,91062],{"class":81,"line":590},[79,91063,91064],{"class":2440},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[79,91066,91067,91070],{"class":81,"line":596},[79,91068,91069],{"class":243},"      finally",[79,91071,17732],{"class":239},[79,91073,91074,91077,91079,91082],{"class":81,"line":602},[79,91075,91076],{"class":85},"        alert",[79,91078,685],{"class":239},[79,91080,91081],{"class":89},"'弹出对话框'",[79,91083,253],{"class":239},[79,91085,91086],{"class":81,"line":608},[79,91087,54510],{"class":239},[79,91089,91090,91092,91094,91096,91098],{"class":81,"line":614},[79,91091,60354],{"class":239},[79,91093,60357],{"class":85},[79,91095,685],{"class":239},[79,91097,2846],{"class":96},[79,91099,253],{"class":239},[79,91101,91102],{"class":81,"line":620},[79,91103,454],{"emptyLinePlaceholder":453},[79,91105,91106],{"class":81,"line":625},[79,91107,4402],{"class":239},[79,91109,91110],{"class":81,"line":630},[79,91111,91112],{"class":2440},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[79,91114,91115],{"class":81,"line":648},[79,91116,91117],{"class":2440},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[79,91119,91120,91123],{"class":81,"line":659},[79,91121,91122],{"class":85},"    fn",[79,91124,4191],{"class":239},[79,91126,91127,91129,91131],{"class":81,"line":676},[79,91128,54529],{"class":239},[79,91130,53926],{"class":395},[79,91132,53420],{"class":239},[79,91134,91135,91137,91139],{"class":81,"line":708},[79,91136,53898],{"class":239},[79,91138,53913],{"class":395},[79,91140,53420],{"class":239},[79,91142,91143],{"class":81,"line":717},[79,91144,454],{"emptyLinePlaceholder":453},[79,91146,91147,91149,91151],{"class":81,"line":722},[79,91148,53898],{"class":239},[79,91150,52749],{"class":395},[79,91152,53420],{"class":239},[19,91154,91155],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[26,91157,91158],{"start":178},[29,91159,91160],{},"debugger",[19,91162,91163],{},[3699,91164],{"alt":57,"src":91165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,91167,91168],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91170,91172],{"id":91171},"_416-处理this","4.16 处理this",[265,91174,91176],{"id":91175},"_4161-this的指向","4.16.1 this的指向",[26,91178,91179],{},[29,91180,91181],{},"普通函数的this",[19,91183,91184],{},[3699,91185],{"alt":57,"src":91186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[26,91188,91189],{"start":167},[29,91190,91191],{},"箭头函数的this",[19,91193,91194],{},[3699,91195],{"alt":57,"src":91196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,91198,91199],{},[3699,91200],{"alt":57,"src":91201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,91203,91204],{},[3699,91205],{"alt":57,"src":91206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[265,91208,91210],{"id":91209},"_4162-this的改变","4.16.2 this的改变",[19,91212,91213],{},"call() apply() bind()",[26,91215,91216],{},[29,91217,91218],{},"call()",[19,91220,91221],{},[3699,91222],{"alt":57,"src":91223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,91225,91226],{},"两个作用：①调用函数；②改变this指向",[51,91228,91230],{"className":383,"code":91229,"language":385,"meta":57,"style":57},"\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",[59,91231,91232,91240,91248,91252,91257,91261,91266,91271,91276,91280,91285,91293],{"__ignoreMap":57},[79,91233,91234,91236,91238],{"class":81,"line":82},[79,91235,392],{"class":239},[79,91237,53913],{"class":395},[79,91239,53420],{"class":239},[79,91241,91242,91244,91246],{"class":81,"line":167},[79,91243,54257],{"class":239},[79,91245,53926],{"class":395},[79,91247,53420],{"class":239},[79,91249,91250],{"class":81,"line":178},[79,91251,73631],{"class":239},[79,91253,91254],{"class":81,"line":457},[79,91255,91256],{"class":239},"      uname: 'pink'\n",[79,91258,91259],{"class":81,"line":462},[79,91260,4402],{"class":239},[79,91262,91263],{"class":81,"line":474},[79,91264,91265],{"class":239},"    function fn(x, y) {\n",[79,91267,91268],{"class":81,"line":480},[79,91269,91270],{"class":239},"      console.log(this)  \u002F\u002Fwindow\n",[79,91272,91273],{"class":81,"line":486},[79,91274,91275],{"class":239},"      console.log(x + y)\n",[79,91277,91278],{"class":81,"line":491},[79,91279,4402],{"class":239},[79,91281,91282],{"class":81,"line":497},[79,91283,91284],{"class":239},"    fn.call(obj, 1, 2)\n",[79,91286,91287,91289,91291],{"class":81,"line":503},[79,91288,54529],{"class":239},[79,91290,53926],{"class":395},[79,91292,53420],{"class":239},[79,91294,91295,91297,91299],{"class":81,"line":509},[79,91296,53898],{"class":239},[79,91298,53913],{"class":395},[79,91300,53420],{"class":239},[19,91302,91303],{},[3699,91304],{"alt":57,"src":91305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[26,91307,91308],{"start":167},[29,91309,91310],{},"apply()",[19,91312,91313],{},[3699,91314],{"alt":57,"src":91315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,91317,91226],{},[19,91319,91320],{},"call传递的是普通参数，而apply必须传递的是数组",[51,91322,91324],{"className":52747,"code":91323,"language":52749,"meta":57,"style":57},"\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",[59,91325,91326,91336,91350,91354,91362,91376,91396,91408,91416,91420,91428,91436,91446,91453,91457,91462,91478,91490,91504,91508,91513,91532,91537,91541,91546,91551,91559,91564,91586,91591,91607,91623,91635,91639,91644,91663,91671,91679,91683],{"__ignoreMap":57},[79,91327,91328,91330,91332,91334],{"class":81,"line":82},[79,91329,53411],{"class":239},[79,91331,53414],{"class":395},[79,91333,53417],{"class":85},[79,91335,53420],{"class":239},[79,91337,91338,91340,91342,91344,91346,91348],{"class":81,"line":167},[79,91339,392],{"class":239},[79,91341,52749],{"class":395},[79,91343,53429],{"class":85},[79,91345,244],{"class":239},[79,91347,53434],{"class":89},[79,91349,53420],{"class":239},[79,91351,91352],{"class":81,"line":178},[79,91353,454],{"emptyLinePlaceholder":453},[79,91355,91356,91358,91360],{"class":81,"line":457},[79,91357,392],{"class":239},[79,91359,53447],{"class":395},[79,91361,53420],{"class":239},[79,91363,91364,91366,91368,91370,91372,91374],{"class":81,"line":462},[79,91365,54257],{"class":239},[79,91367,53457],{"class":395},[79,91369,53460],{"class":85},[79,91371,244],{"class":239},[79,91373,53465],{"class":89},[79,91375,53420],{"class":239},[79,91377,91378,91380,91382,91384,91386,91388,91390,91392,91394],{"class":81,"line":474},[79,91379,54257],{"class":239},[79,91381,53457],{"class":395},[79,91383,2238],{"class":85},[79,91385,244],{"class":239},[79,91387,53504],{"class":89},[79,91389,53484],{"class":85},[79,91391,244],{"class":239},[79,91393,53511],{"class":89},[79,91395,53420],{"class":239},[79,91397,91398,91400,91402,91404,91406],{"class":81,"line":480},[79,91399,54257],{"class":239},[79,91401,53520],{"class":395},[79,91403,53523],{"class":239},[79,91405,53520],{"class":395},[79,91407,53420],{"class":239},[79,91409,91410,91412,91414],{"class":81,"line":486},[79,91411,53898],{"class":239},[79,91413,53447],{"class":395},[79,91415,53420],{"class":239},[79,91417,91418],{"class":81,"line":491},[79,91419,454],{"emptyLinePlaceholder":453},[79,91421,91422,91424,91426],{"class":81,"line":497},[79,91423,392],{"class":239},[79,91425,53913],{"class":395},[79,91427,53420],{"class":239},[79,91429,91430,91432,91434],{"class":81,"line":503},[79,91431,54257],{"class":239},[79,91433,53926],{"class":395},[79,91435,53420],{"class":239},[79,91437,91438,91440,91442,91444],{"class":81,"line":509},[79,91439,13385],{"class":243},[79,91441,72079],{"class":96},[79,91443,468],{"class":243},[79,91445,17732],{"class":239},[79,91447,91448,91450],{"class":81,"line":514},[79,91449,73734],{"class":239},[79,91451,91452],{"class":96},"18\n",[79,91454,91455],{"class":81,"line":520},[79,91456,4402],{"class":239},[79,91458,91459],{"class":81,"line":526},[79,91460,91461],{"class":2440},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[79,91463,91464,91466,91468,91470,91472,91474,91476],{"class":81,"line":532},[79,91465,72192],{"class":243},[79,91467,90955],{"class":85},[79,91469,685],{"class":239},[79,91471,3193],{"class":7412},[79,91473,1060],{"class":239},[79,91475,3218],{"class":7412},[79,91477,14605],{"class":239},[79,91479,91480,91482,91484,91486,91488],{"class":81,"line":537},[79,91481,60354],{"class":239},[79,91483,60357],{"class":85},[79,91485,685],{"class":239},[79,91487,89098],{"class":96},[79,91489,253],{"class":239},[79,91491,91492,91494,91496,91499,91501],{"class":81,"line":543},[79,91493,60354],{"class":239},[79,91495,60357],{"class":85},[79,91497,91498],{"class":239},"(x ",[79,91500,2855],{"class":243},[79,91502,91503],{"class":239}," y)\n",[79,91505,91506],{"class":81,"line":549},[79,91507,4402],{"class":239},[79,91509,91510],{"class":81,"line":555},[79,91511,91512],{"class":2440},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[79,91514,91515,91518,91521,91524,91526,91528,91530],{"class":81,"line":561},[79,91516,91517],{"class":239},"    fn.",[79,91519,91520],{"class":85},"apply",[79,91522,91523],{"class":239},"(obj, [",[79,91525,1072],{"class":96},[79,91527,1060],{"class":239},[79,91529,1049],{"class":96},[79,91531,1243],{"class":239},[79,91533,91534],{"class":81,"line":567},[79,91535,91536],{"class":2440},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[79,91538,91539],{"class":81,"line":573},[79,91540,454],{"emptyLinePlaceholder":453},[79,91542,91543],{"class":81,"line":579},[79,91544,91545],{"class":2440},"    \u002F\u002F 使用场景：求数组最大值\n",[79,91547,91548],{"class":81,"line":584},[79,91549,91550],{"class":2440},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[79,91552,91553,91556],{"class":81,"line":590},[79,91554,91555],{"class":2440},"    \u002F\u002F console.log(max)",[79,91557,91558],{"class":2440},"   \u002F\u002F3\n",[79,91560,91561],{"class":81,"line":596},[79,91562,91563],{"class":2440},"    \u002F\u002F 指向空或者Math都是可以的\n",[79,91565,91566,91568,91570,91572,91574,91576,91578,91580,91582,91584],{"class":81,"line":602},[79,91567,13385],{"class":243},[79,91569,59805],{"class":96},[79,91571,468],{"class":243},[79,91573,54339],{"class":239},[79,91575,2686],{"class":96},[79,91577,1060],{"class":239},[79,91579,2878],{"class":96},[79,91581,1060],{"class":239},[79,91583,2908],{"class":96},[79,91585,35361],{"class":239},[79,91587,91588],{"class":81,"line":608},[79,91589,91590],{"class":2440},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[79,91592,91593,91595,91597,91599,91602,91604],{"class":81,"line":614},[79,91594,13385],{"class":243},[79,91596,8146],{"class":96},[79,91598,468],{"class":243},[79,91600,91601],{"class":239}," Math.max.",[79,91603,91520],{"class":85},[79,91605,91606],{"class":239},"(Math, arr)\n",[79,91608,91609,91611,91614,91616,91619,91621],{"class":81,"line":620},[79,91610,13385],{"class":243},[79,91612,91613],{"class":96}," min",[79,91615,468],{"class":243},[79,91617,91618],{"class":239}," Math.min.",[79,91620,91520],{"class":85},[79,91622,91606],{"class":239},[79,91624,91625,91627,91629,91632],{"class":81,"line":625},[79,91626,75861],{"class":239},[79,91628,60357],{"class":85},[79,91630,91631],{"class":239},"(max, min)     ",[79,91633,91634],{"class":2440},"\u002F\u002F100,4\n",[79,91636,91637],{"class":81,"line":630},[79,91638,454],{"emptyLinePlaceholder":453},[79,91640,91641],{"class":81,"line":648},[79,91642,91643],{"class":2440},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[79,91645,91646,91648,91650,91653,91655,91657,91660],{"class":81,"line":659},[79,91647,75861],{"class":239},[79,91649,60357],{"class":85},[79,91651,91652],{"class":239},"(Max.",[79,91654,8210],{"class":85},[79,91656,685],{"class":239},[79,91658,91659],{"class":243},"...",[79,91661,91662],{"class":239},"arr))\n",[79,91664,91665,91667,91669],{"class":81,"line":676},[79,91666,54529],{"class":239},[79,91668,53926],{"class":395},[79,91670,53420],{"class":239},[79,91672,91673,91675,91677],{"class":81,"line":708},[79,91674,53898],{"class":239},[79,91676,53913],{"class":395},[79,91678,53420],{"class":239},[79,91680,91681],{"class":81,"line":717},[79,91682,454],{"emptyLinePlaceholder":453},[79,91684,91685,91687,91689],{"class":81,"line":722},[79,91686,53898],{"class":239},[79,91688,52749],{"class":395},[79,91690,53420],{"class":239},[19,91692,91693],{},[3699,91694],{"alt":57,"src":91695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[26,91697,91698],{"start":178},[29,91699,91700],{},"bind()",[19,91702,91703],{},[3699,91704],{"alt":57,"src":91705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91707,91708],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91710,91711],{},"bind的语法跟call很相似",[51,91713,91715],{"className":383,"code":91714,"language":385,"meta":57,"style":57},"\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",[59,91716,91717,91725,91733,91737,91742,91746,91750,91755,91759,91764,91769,91774,91779,91784,91789,91794,91798,91806],{"__ignoreMap":57},[79,91718,91719,91721,91723],{"class":81,"line":82},[79,91720,392],{"class":239},[79,91722,53913],{"class":395},[79,91724,53420],{"class":239},[79,91726,91727,91729,91731],{"class":81,"line":167},[79,91728,54257],{"class":239},[79,91730,53926],{"class":395},[79,91732,53420],{"class":239},[79,91734,91735],{"class":81,"line":178},[79,91736,73631],{"class":239},[79,91738,91739],{"class":81,"line":457},[79,91740,91741],{"class":239},"      age: 18\n",[79,91743,91744],{"class":81,"line":462},[79,91745,4402],{"class":239},[79,91747,91748],{"class":81,"line":474},[79,91749,79251],{"class":239},[79,91751,91752],{"class":81,"line":480},[79,91753,91754],{"class":239},"      console.log(this)\n",[79,91756,91757],{"class":81,"line":486},[79,91758,4402],{"class":239},[79,91760,91761],{"class":81,"line":491},[79,91762,91763],{"class":239},"    \u002F\u002F 1.bind 不会调用函数\n",[79,91765,91766],{"class":81,"line":497},[79,91767,91768],{"class":239},"    \u002F\u002F 2.bind能改变this的指向\n",[79,91770,91771],{"class":81,"line":503},[79,91772,91773],{"class":239},"    fn.bind()\n",[79,91775,91776],{"class":81,"line":509},[79,91777,91778],{"class":239},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[79,91780,91781],{"class":81,"line":514},[79,91782,91783],{"class":239},"    const fun = fn.bind(obj)\n",[79,91785,91786],{"class":81,"line":520},[79,91787,91788],{"class":239},"    \u002F\u002F console.log(fun)\n",[79,91790,91791],{"class":81,"line":526},[79,91792,91793],{"class":239},"    \u002F\u002F 调用,查看this的指向\n",[79,91795,91796],{"class":81,"line":532},[79,91797,54763],{"class":239},[79,91799,91800,91802,91804],{"class":81,"line":537},[79,91801,54529],{"class":239},[79,91803,53926],{"class":395},[79,91805,53420],{"class":239},[79,91807,91808,91810,91812],{"class":81,"line":543},[79,91809,53898],{"class":239},[79,91811,53913],{"class":395},[79,91813,53420],{"class":239},[19,91815,91816],{},[3699,91817],{"alt":57,"src":91818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[26,91820,91821],{"start":457},[29,91822,91823],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[51,91825,91827],{"className":383,"code":91826,"language":385,"meta":57,"style":57},"\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",[59,91828,91829,91837,91850,91858,91863,91867,91872,91877,91882,91887,91892,91897,91902,91907,91911,91919],{"__ignoreMap":57},[79,91830,91831,91833,91835],{"class":81,"line":82},[79,91832,392],{"class":239},[79,91834,53913],{"class":395},[79,91836,53420],{"class":239},[79,91838,91839,91841,91843,91846,91848],{"class":81,"line":167},[79,91840,54257],{"class":239},[79,91842,55997],{"class":395},[79,91844,91845],{"class":239},">禁用\u003C\u002F",[79,91847,55997],{"class":395},[79,91849,53420],{"class":239},[79,91851,91852,91854,91856],{"class":81,"line":178},[79,91853,54257],{"class":239},[79,91855,53926],{"class":395},[79,91857,53420],{"class":239},[79,91859,91860],{"class":81,"line":457},[79,91861,91862],{"class":239},"    const btn = document.querySelector('button')\n",[79,91864,91865],{"class":81,"line":462},[79,91866,61126],{"class":239},[79,91868,91869],{"class":81,"line":474},[79,91870,91871],{"class":239},"      this.disabled = true\n",[79,91873,91874],{"class":81,"line":480},[79,91875,91876],{"class":239},"      \u002F\u002F 定时器是window进行调用的\n",[79,91878,91879],{"class":81,"line":486},[79,91880,91881],{"class":239},"      setTimeout(function () {\n",[79,91883,91884],{"class":81,"line":491},[79,91885,91886],{"class":239},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[79,91888,91889],{"class":81,"line":497},[79,91890,91891],{"class":239},"        this.disabled = false\n",[79,91893,91894],{"class":81,"line":503},[79,91895,91896],{"class":239},"      }.bind(this), 2000)\n",[79,91898,91899],{"class":81,"line":509},[79,91900,91901],{"class":239},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[79,91903,91904],{"class":81,"line":514},[79,91905,91906],{"class":239},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[79,91908,91909],{"class":81,"line":520},[79,91910,35576],{"class":239},[79,91912,91913,91915,91917],{"class":81,"line":526},[79,91914,54529],{"class":239},[79,91916,53926],{"class":395},[79,91918,53420],{"class":239},[79,91920,91921,91923,91925],{"class":81,"line":532},[79,91922,53898],{"class":239},[79,91924,53913],{"class":395},[79,91926,53420],{"class":239},[26,91928,91929],{"start":462},[29,91930,24092],{},[19,91932,91933],{},[3699,91934],{"alt":57,"src":91935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91937,91939],{"id":91938},"_417-性能优化","4.17 性能优化",[265,91941,91943],{"id":91942},"_4171-防抖","4.17.1 防抖",[19,91945,91946],{},[3699,91947],{"alt":57,"src":91948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91950,91951],{},[2528,91952,91953],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91955,91956],{},"防抖实现方式：",[3377,91958,91959],{},[29,91960,91961],{},"lodash 提供了防抖处理",[19,91963,91964],{},"_.debounce(func,[wait=0],[options={}])",[19,91966,91967],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[51,91969,91971],{"className":52747,"code":91970,"language":52749,"meta":57,"style":57},"\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",[59,91972,91973,91983,91997,92001,92009,92023,92043,92055,92063,92069,92079,92091,92103,92114,92126,92136,92146,92159,92163,92171,92179,92183,92191,92209,92227,92235,92254,92264,92273,92284,92289,92293,92298,92303,92308,92333,92341,92349,92353],{"__ignoreMap":57},[79,91974,91975,91977,91979,91981],{"class":81,"line":82},[79,91976,53411],{"class":239},[79,91978,53414],{"class":395},[79,91980,53417],{"class":85},[79,91982,53420],{"class":239},[79,91984,91985,91987,91989,91991,91993,91995],{"class":81,"line":167},[79,91986,392],{"class":239},[79,91988,52749],{"class":395},[79,91990,53429],{"class":85},[79,91992,244],{"class":239},[79,91994,53434],{"class":89},[79,91996,53420],{"class":239},[79,91998,91999],{"class":81,"line":178},[79,92000,454],{"emptyLinePlaceholder":453},[79,92002,92003,92005,92007],{"class":81,"line":457},[79,92004,392],{"class":239},[79,92006,53447],{"class":395},[79,92008,53420],{"class":239},[79,92010,92011,92013,92015,92017,92019,92021],{"class":81,"line":462},[79,92012,54257],{"class":239},[79,92014,53457],{"class":395},[79,92016,53460],{"class":85},[79,92018,244],{"class":239},[79,92020,53465],{"class":89},[79,92022,53420],{"class":239},[79,92024,92025,92027,92029,92031,92033,92035,92037,92039,92041],{"class":81,"line":474},[79,92026,54257],{"class":239},[79,92028,53457],{"class":395},[79,92030,2238],{"class":85},[79,92032,244],{"class":239},[79,92034,53504],{"class":89},[79,92036,53484],{"class":85},[79,92038,244],{"class":239},[79,92040,53511],{"class":89},[79,92042,53420],{"class":239},[79,92044,92045,92047,92049,92051,92053],{"class":81,"line":480},[79,92046,54257],{"class":239},[79,92048,53520],{"class":395},[79,92050,53523],{"class":239},[79,92052,53520],{"class":395},[79,92054,53420],{"class":239},[79,92056,92057,92059,92061],{"class":81,"line":486},[79,92058,54257],{"class":239},[79,92060,2287],{"class":395},[79,92062,53420],{"class":239},[79,92064,92065,92067],{"class":81,"line":491},[79,92066,56862],{"class":85},[79,92068,17732],{"class":239},[79,92070,92071,92073,92075,92077],{"class":81,"line":497},[79,92072,74704],{"class":96},[79,92074,53550],{"class":239},[79,92076,62615],{"class":96},[79,92078,3531],{"class":239},[79,92080,92081,92083,92085,92087,92089],{"class":81,"line":503},[79,92082,56881],{"class":96},[79,92084,53550],{"class":239},[79,92086,3947],{"class":96},[79,92088,53605],{"class":243},[79,92090,3531],{"class":239},[79,92092,92093,92095,92097,92099,92101],{"class":81,"line":509},[79,92094,56895],{"class":96},[79,92096,53550],{"class":239},[79,92098,3947],{"class":96},[79,92100,53605],{"class":243},[79,92102,3531],{"class":239},[79,92104,92105,92107,92109,92112],{"class":81,"line":514},[79,92106,56994],{"class":96},[79,92108,53550],{"class":239},[79,92110,92111],{"class":96},"gray",[79,92113,3531],{"class":239},[79,92115,92116,92118,92120,92122,92124],{"class":81,"line":520},[79,92117,57032],{"class":96},[79,92119,53550],{"class":239},[79,92121,3198],{"class":96},[79,92123,53605],{"class":243},[79,92125,3531],{"class":239},[79,92127,92128,92130,92132,92134],{"class":81,"line":526},[79,92129,59526],{"class":96},[79,92131,53550],{"class":239},[79,92133,62952],{"class":96},[79,92135,3531],{"class":239},[79,92137,92138,92140,92142,92144],{"class":81,"line":532},[79,92139,59396],{"class":96},[79,92141,53550],{"class":239},[79,92143,53705],{"class":96},[79,92145,3531],{"class":239},[79,92147,92148,92151,92153,92155,92157],{"class":81,"line":537},[79,92149,92150],{"class":96},"      padding-top",[79,92152,53550],{"class":239},[79,92154,2694],{"class":96},[79,92156,53605],{"class":243},[79,92158,3531],{"class":239},[79,92160,92161],{"class":81,"line":543},[79,92162,4402],{"class":239},[79,92164,92165,92167,92169],{"class":81,"line":549},[79,92166,54529],{"class":239},[79,92168,2287],{"class":395},[79,92170,53420],{"class":239},[79,92172,92173,92175,92177],{"class":81,"line":555},[79,92174,53898],{"class":239},[79,92176,53447],{"class":395},[79,92178,53420],{"class":239},[79,92180,92181],{"class":81,"line":561},[79,92182,454],{"emptyLinePlaceholder":453},[79,92184,92185,92187,92189],{"class":81,"line":567},[79,92186,392],{"class":239},[79,92188,53913],{"class":395},[79,92190,53420],{"class":239},[79,92192,92193,92195,92197,92199,92201,92203,92205,92207],{"class":81,"line":573},[79,92194,54257],{"class":239},[79,92196,53724],{"class":395},[79,92198,55596],{"class":85},[79,92200,244],{"class":239},[79,92202,55601],{"class":89},[79,92204,57424],{"class":239},[79,92206,53724],{"class":395},[79,92208,53420],{"class":239},[79,92210,92211,92213,92215,92217,92219,92221,92223,92225],{"class":81,"line":579},[79,92212,54257],{"class":239},[79,92214,53926],{"class":395},[79,92216,57349],{"class":85},[79,92218,244],{"class":239},[79,92220,90379],{"class":89},[79,92222,57424],{"class":239},[79,92224,53926],{"class":395},[79,92226,53420],{"class":239},[79,92228,92229,92231,92233],{"class":81,"line":584},[79,92230,54257],{"class":239},[79,92232,53926],{"class":395},[79,92234,53420],{"class":239},[79,92236,92237,92239,92241,92243,92245,92247,92249,92252],{"class":81,"line":590},[79,92238,13385],{"class":243},[79,92240,89038],{"class":96},[79,92242,468],{"class":243},[79,92244,56506],{"class":239},[79,92246,56509],{"class":85},[79,92248,685],{"class":239},[79,92250,92251],{"class":89},"'.box'",[79,92253,253],{"class":239},[79,92255,92256,92258,92260,92262],{"class":81,"line":596},[79,92257,54332],{"class":243},[79,92259,11622],{"class":239},[79,92261,244],{"class":243},[79,92263,49447],{"class":96},[79,92265,92266,92268,92271],{"class":81,"line":602},[79,92267,72192],{"class":243},[79,92269,92270],{"class":85}," mouseMove",[79,92272,13017],{"class":239},[79,92274,92275,92278,92280,92282],{"class":81,"line":608},[79,92276,92277],{"class":239},"      box.innerHTML ",[79,92279,244],{"class":243},[79,92281,5237],{"class":239},[79,92283,4908],{"class":243},[79,92285,92286],{"class":81,"line":614},[79,92287,92288],{"class":2440},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[79,92290,92291],{"class":81,"line":620},[79,92292,4402],{"class":239},[79,92294,92295],{"class":81,"line":625},[79,92296,92297],{"class":2440},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[79,92299,92300],{"class":81,"line":630},[79,92301,92302],{"class":2440},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[79,92304,92305],{"class":81,"line":648},[79,92306,92307],{"class":2440},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[79,92309,92310,92313,92315,92317,92320,92323,92326,92329,92331],{"class":81,"line":659},[79,92311,92312],{"class":239},"    box.",[79,92314,59923],{"class":85},[79,92316,685],{"class":239},[79,92318,92319],{"class":89},"'mousemove'",[79,92321,92322],{"class":239},", _.",[79,92324,92325],{"class":85},"debounce",[79,92327,92328],{"class":239},"(mouseMove, ",[79,92330,963],{"class":96},[79,92332,1191],{"class":239},[79,92334,92335,92337,92339],{"class":81,"line":676},[79,92336,54529],{"class":239},[79,92338,53926],{"class":395},[79,92340,53420],{"class":239},[79,92342,92343,92345,92347],{"class":81,"line":708},[79,92344,53898],{"class":239},[79,92346,53913],{"class":395},[79,92348,53420],{"class":239},[79,92350,92351],{"class":81,"line":717},[79,92352,454],{"emptyLinePlaceholder":453},[79,92354,92355,92357,92359],{"class":81,"line":722},[79,92356,53898],{"class":239},[79,92358,52749],{"class":395},[79,92360,53420],{"class":239},[3377,92362,92363],{},[29,92364,92365],{},"手写一个防抖函数来处理",[19,92367,92368],{},"防抖的核心就是利用定时器来实现的：",[19,92370,92371],{},"①声明一个定时器变量",[19,92373,92374],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92376,92377],{},"③如果没有定时器则开启定时器，记得存到变量里面",[51,92379,92381],{"className":52747,"code":92380,"language":52749,"meta":57,"style":57},"\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",[59,92382,92383,92393,92407,92411,92419,92433,92453,92465,92473,92479,92489,92501,92513,92523,92535,92545,92555,92567,92571,92579,92587,92591,92599,92617,92635,92643,92661,92671,92679,92689,92693,92697,92701,92706,92711,92716,92721,92726,92731,92749,92756,92761,92769,92774,92787,92803,92813,92818,92822,92826,92846,92850,92855,92860,92865,92870,92878,92886,92890],{"__ignoreMap":57},[79,92384,92385,92387,92389,92391],{"class":81,"line":82},[79,92386,53411],{"class":239},[79,92388,53414],{"class":395},[79,92390,53417],{"class":85},[79,92392,53420],{"class":239},[79,92394,92395,92397,92399,92401,92403,92405],{"class":81,"line":167},[79,92396,392],{"class":239},[79,92398,52749],{"class":395},[79,92400,53429],{"class":85},[79,92402,244],{"class":239},[79,92404,53434],{"class":89},[79,92406,53420],{"class":239},[79,92408,92409],{"class":81,"line":178},[79,92410,454],{"emptyLinePlaceholder":453},[79,92412,92413,92415,92417],{"class":81,"line":457},[79,92414,392],{"class":239},[79,92416,53447],{"class":395},[79,92418,53420],{"class":239},[79,92420,92421,92423,92425,92427,92429,92431],{"class":81,"line":462},[79,92422,54257],{"class":239},[79,92424,53457],{"class":395},[79,92426,53460],{"class":85},[79,92428,244],{"class":239},[79,92430,53465],{"class":89},[79,92432,53420],{"class":239},[79,92434,92435,92437,92439,92441,92443,92445,92447,92449,92451],{"class":81,"line":474},[79,92436,54257],{"class":239},[79,92438,53457],{"class":395},[79,92440,2238],{"class":85},[79,92442,244],{"class":239},[79,92444,53504],{"class":89},[79,92446,53484],{"class":85},[79,92448,244],{"class":239},[79,92450,53511],{"class":89},[79,92452,53420],{"class":239},[79,92454,92455,92457,92459,92461,92463],{"class":81,"line":480},[79,92456,54257],{"class":239},[79,92458,53520],{"class":395},[79,92460,53523],{"class":239},[79,92462,53520],{"class":395},[79,92464,53420],{"class":239},[79,92466,92467,92469,92471],{"class":81,"line":486},[79,92468,54257],{"class":239},[79,92470,2287],{"class":395},[79,92472,53420],{"class":239},[79,92474,92475,92477],{"class":81,"line":491},[79,92476,56862],{"class":85},[79,92478,17732],{"class":239},[79,92480,92481,92483,92485,92487],{"class":81,"line":497},[79,92482,74704],{"class":96},[79,92484,53550],{"class":239},[79,92486,62615],{"class":96},[79,92488,3531],{"class":239},[79,92490,92491,92493,92495,92497,92499],{"class":81,"line":503},[79,92492,56881],{"class":96},[79,92494,53550],{"class":239},[79,92496,3947],{"class":96},[79,92498,53605],{"class":243},[79,92500,3531],{"class":239},[79,92502,92503,92505,92507,92509,92511],{"class":81,"line":509},[79,92504,56895],{"class":96},[79,92506,53550],{"class":239},[79,92508,3947],{"class":96},[79,92510,53605],{"class":243},[79,92512,3531],{"class":239},[79,92514,92515,92517,92519,92521],{"class":81,"line":514},[79,92516,56994],{"class":96},[79,92518,53550],{"class":239},[79,92520,92111],{"class":96},[79,92522,3531],{"class":239},[79,92524,92525,92527,92529,92531,92533],{"class":81,"line":520},[79,92526,57032],{"class":96},[79,92528,53550],{"class":239},[79,92530,3198],{"class":96},[79,92532,53605],{"class":243},[79,92534,3531],{"class":239},[79,92536,92537,92539,92541,92543],{"class":81,"line":526},[79,92538,59526],{"class":96},[79,92540,53550],{"class":239},[79,92542,62952],{"class":96},[79,92544,3531],{"class":239},[79,92546,92547,92549,92551,92553],{"class":81,"line":532},[79,92548,59396],{"class":96},[79,92550,53550],{"class":239},[79,92552,53705],{"class":96},[79,92554,3531],{"class":239},[79,92556,92557,92559,92561,92563,92565],{"class":81,"line":537},[79,92558,92150],{"class":96},[79,92560,53550],{"class":239},[79,92562,2694],{"class":96},[79,92564,53605],{"class":243},[79,92566,3531],{"class":239},[79,92568,92569],{"class":81,"line":543},[79,92570,4402],{"class":239},[79,92572,92573,92575,92577],{"class":81,"line":549},[79,92574,54529],{"class":239},[79,92576,2287],{"class":395},[79,92578,53420],{"class":239},[79,92580,92581,92583,92585],{"class":81,"line":555},[79,92582,53898],{"class":239},[79,92584,53447],{"class":395},[79,92586,53420],{"class":239},[79,92588,92589],{"class":81,"line":561},[79,92590,454],{"emptyLinePlaceholder":453},[79,92592,92593,92595,92597],{"class":81,"line":567},[79,92594,392],{"class":239},[79,92596,53913],{"class":395},[79,92598,53420],{"class":239},[79,92600,92601,92603,92605,92607,92609,92611,92613,92615],{"class":81,"line":573},[79,92602,54257],{"class":239},[79,92604,53724],{"class":395},[79,92606,55596],{"class":85},[79,92608,244],{"class":239},[79,92610,55601],{"class":89},[79,92612,57424],{"class":239},[79,92614,53724],{"class":395},[79,92616,53420],{"class":239},[79,92618,92619,92621,92623,92625,92627,92629,92631,92633],{"class":81,"line":579},[79,92620,54257],{"class":239},[79,92622,53926],{"class":395},[79,92624,57349],{"class":85},[79,92626,244],{"class":239},[79,92628,90379],{"class":89},[79,92630,57424],{"class":239},[79,92632,53926],{"class":395},[79,92634,53420],{"class":239},[79,92636,92637,92639,92641],{"class":81,"line":584},[79,92638,54257],{"class":239},[79,92640,53926],{"class":395},[79,92642,53420],{"class":239},[79,92644,92645,92647,92649,92651,92653,92655,92657,92659],{"class":81,"line":590},[79,92646,13385],{"class":243},[79,92648,89038],{"class":96},[79,92650,468],{"class":243},[79,92652,56506],{"class":239},[79,92654,56509],{"class":85},[79,92656,685],{"class":239},[79,92658,92251],{"class":89},[79,92660,253],{"class":239},[79,92662,92663,92665,92667,92669],{"class":81,"line":596},[79,92664,54332],{"class":243},[79,92666,11622],{"class":239},[79,92668,244],{"class":243},[79,92670,49447],{"class":96},[79,92672,92673,92675,92677],{"class":81,"line":602},[79,92674,72192],{"class":243},[79,92676,92270],{"class":85},[79,92678,13017],{"class":239},[79,92680,92681,92683,92685,92687],{"class":81,"line":608},[79,92682,92277],{"class":239},[79,92684,244],{"class":243},[79,92686,5237],{"class":239},[79,92688,4908],{"class":243},[79,92690,92691],{"class":81,"line":614},[79,92692,92288],{"class":2440},[79,92694,92695],{"class":81,"line":620},[79,92696,4402],{"class":239},[79,92698,92699],{"class":81,"line":625},[79,92700,92297],{"class":2440},[79,92702,92703],{"class":81,"line":630},[79,92704,92705],{"class":2440},"    \u002F\u002F 手写防抖函数\n",[79,92707,92708],{"class":81,"line":648},[79,92709,92710],{"class":2440},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[79,92712,92713],{"class":81,"line":659},[79,92714,92715],{"class":2440},"    \u002F\u002F 1.声明定时器变量\n",[79,92717,92718],{"class":81,"line":676},[79,92719,92720],{"class":2440},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[79,92722,92723],{"class":81,"line":708},[79,92724,92725],{"class":2440},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[79,92727,92728],{"class":81,"line":717},[79,92729,92730],{"class":2440},"    \u002F\u002F 4.定时器里面写函数调用\n",[79,92732,92733,92735,92738,92740,92743,92745,92747],{"class":81,"line":722},[79,92734,72192],{"class":243},[79,92736,92737],{"class":85}," debounce",[79,92739,685],{"class":239},[79,92741,92742],{"class":7412},"fn",[79,92744,1060],{"class":239},[79,92746,3093],{"class":7412},[79,92748,14605],{"class":239},[79,92750,92751,92753],{"class":81,"line":727},[79,92752,81880],{"class":243},[79,92754,92755],{"class":239}," timer\n",[79,92757,92758],{"class":81,"line":738},[79,92759,92760],{"class":2440},"      \u002F\u002F return 返回一个匿名函数\n",[79,92762,92763,92765,92767],{"class":81,"line":753},[79,92764,76090],{"class":243},[79,92766,61028],{"class":243},[79,92768,56562],{"class":239},[79,92770,92771],{"class":81,"line":768},[79,92772,92773],{"class":2440},"        \u002F\u002F 这里边写第二三四步\n",[79,92775,92776,92778,92781,92784],{"class":81,"line":776},[79,92777,1132],{"class":243},[79,92779,92780],{"class":239}," (timer) ",[79,92782,92783],{"class":85},"clearTimeout",[79,92785,92786],{"class":239},"(timer)\n",[79,92788,92789,92792,92794,92797,92799,92801],{"class":81,"line":781},[79,92790,92791],{"class":239},"        timer ",[79,92793,244],{"class":243},[79,92795,92796],{"class":85}," setTimeout",[79,92798,685],{"class":239},[79,92800,56559],{"class":243},[79,92802,56562],{"class":239},[79,92804,92805,92808,92810],{"class":81,"line":786},[79,92806,92807],{"class":85},"          fn",[79,92809,15213],{"class":239},[79,92811,92812],{"class":2440},"\u002F\u002F加小括号调用fn }, t)\n",[79,92814,92815],{"class":81,"line":802},[79,92816,92817],{"class":239},"        }, t)\n",[79,92819,92820],{"class":81,"line":815},[79,92821,54510],{"class":239},[79,92823,92824],{"class":81,"line":828},[79,92825,4402],{"class":239},[79,92827,92828,92830,92832,92834,92836,92838,92840,92842,92844],{"class":81,"line":842},[79,92829,92312],{"class":239},[79,92831,59923],{"class":85},[79,92833,685],{"class":239},[79,92835,92319],{"class":89},[79,92837,1060],{"class":239},[79,92839,92325],{"class":85},[79,92841,92328],{"class":239},[79,92843,963],{"class":96},[79,92845,1191],{"class":239},[79,92847,92848],{"class":81,"line":859},[79,92849,454],{"emptyLinePlaceholder":453},[79,92851,92852],{"class":81,"line":878},[79,92853,92854],{"class":2440},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[79,92856,92857],{"class":81,"line":883},[79,92858,92859],{"class":2440},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[79,92861,92862],{"class":81,"line":888},[79,92863,92864],{"class":2440},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[79,92866,92867],{"class":81,"line":904},[79,92868,92869],{"class":2440},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[79,92871,92872,92874,92876],{"class":81,"line":919},[79,92873,54529],{"class":239},[79,92875,53926],{"class":395},[79,92877,53420],{"class":239},[79,92879,92880,92882,92884],{"class":81,"line":930},[79,92881,53898],{"class":239},[79,92883,53913],{"class":395},[79,92885,53420],{"class":239},[79,92887,92888],{"class":81,"line":941},[79,92889,454],{"emptyLinePlaceholder":453},[79,92891,92892,92894,92896],{"class":81,"line":946},[79,92893,53898],{"class":239},[79,92895,52749],{"class":395},[79,92897,53420],{"class":239},[265,92899,92901],{"id":92900},"_4172-节流","4.17.2 节流",[19,92903,92904],{},[3699,92905],{"alt":57,"src":92906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92908,92909],{},[3699,92910],{"alt":57,"src":92911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92913,92914],{},[2528,92915,92916],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92918,92919],{},"实现方式：",[3377,92921,92922],{},[29,92923,92924],{},"lodash 提供的节流函数来处理",[19,92926,92927],{},"_.throttle(func,[wait=0],[options=])",[19,92929,92930],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[51,92932,92934],{"className":52747,"code":92933,"language":52749,"meta":57,"style":57},"\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",[59,92935,92936,92946,92960,92964,92972,92986,93006,93018,93026,93032,93042,93054,93066,93076,93088,93098,93108,93120,93124,93132,93140,93144,93152,93170,93188,93196,93214,93224,93232,93242,93246,93250,93254,93259,93264,93285,93293,93301,93305],{"__ignoreMap":57},[79,92937,92938,92940,92942,92944],{"class":81,"line":82},[79,92939,53411],{"class":239},[79,92941,53414],{"class":395},[79,92943,53417],{"class":85},[79,92945,53420],{"class":239},[79,92947,92948,92950,92952,92954,92956,92958],{"class":81,"line":167},[79,92949,392],{"class":239},[79,92951,52749],{"class":395},[79,92953,53429],{"class":85},[79,92955,244],{"class":239},[79,92957,53434],{"class":89},[79,92959,53420],{"class":239},[79,92961,92962],{"class":81,"line":178},[79,92963,454],{"emptyLinePlaceholder":453},[79,92965,92966,92968,92970],{"class":81,"line":457},[79,92967,392],{"class":239},[79,92969,53447],{"class":395},[79,92971,53420],{"class":239},[79,92973,92974,92976,92978,92980,92982,92984],{"class":81,"line":462},[79,92975,54257],{"class":239},[79,92977,53457],{"class":395},[79,92979,53460],{"class":85},[79,92981,244],{"class":239},[79,92983,53465],{"class":89},[79,92985,53420],{"class":239},[79,92987,92988,92990,92992,92994,92996,92998,93000,93002,93004],{"class":81,"line":474},[79,92989,54257],{"class":239},[79,92991,53457],{"class":395},[79,92993,2238],{"class":85},[79,92995,244],{"class":239},[79,92997,53504],{"class":89},[79,92999,53484],{"class":85},[79,93001,244],{"class":239},[79,93003,53511],{"class":89},[79,93005,53420],{"class":239},[79,93007,93008,93010,93012,93014,93016],{"class":81,"line":480},[79,93009,54257],{"class":239},[79,93011,53520],{"class":395},[79,93013,53523],{"class":239},[79,93015,53520],{"class":395},[79,93017,53420],{"class":239},[79,93019,93020,93022,93024],{"class":81,"line":486},[79,93021,54257],{"class":239},[79,93023,2287],{"class":395},[79,93025,53420],{"class":239},[79,93027,93028,93030],{"class":81,"line":491},[79,93029,56862],{"class":85},[79,93031,17732],{"class":239},[79,93033,93034,93036,93038,93040],{"class":81,"line":497},[79,93035,74704],{"class":96},[79,93037,53550],{"class":239},[79,93039,62615],{"class":96},[79,93041,3531],{"class":239},[79,93043,93044,93046,93048,93050,93052],{"class":81,"line":503},[79,93045,56881],{"class":96},[79,93047,53550],{"class":239},[79,93049,3947],{"class":96},[79,93051,53605],{"class":243},[79,93053,3531],{"class":239},[79,93055,93056,93058,93060,93062,93064],{"class":81,"line":509},[79,93057,56895],{"class":96},[79,93059,53550],{"class":239},[79,93061,3947],{"class":96},[79,93063,53605],{"class":243},[79,93065,3531],{"class":239},[79,93067,93068,93070,93072,93074],{"class":81,"line":514},[79,93069,56994],{"class":96},[79,93071,53550],{"class":239},[79,93073,92111],{"class":96},[79,93075,3531],{"class":239},[79,93077,93078,93080,93082,93084,93086],{"class":81,"line":520},[79,93079,57032],{"class":96},[79,93081,53550],{"class":239},[79,93083,3198],{"class":96},[79,93085,53605],{"class":243},[79,93087,3531],{"class":239},[79,93089,93090,93092,93094,93096],{"class":81,"line":526},[79,93091,59526],{"class":96},[79,93093,53550],{"class":239},[79,93095,62952],{"class":96},[79,93097,3531],{"class":239},[79,93099,93100,93102,93104,93106],{"class":81,"line":532},[79,93101,59396],{"class":96},[79,93103,53550],{"class":239},[79,93105,53705],{"class":96},[79,93107,3531],{"class":239},[79,93109,93110,93112,93114,93116,93118],{"class":81,"line":537},[79,93111,92150],{"class":96},[79,93113,53550],{"class":239},[79,93115,2694],{"class":96},[79,93117,53605],{"class":243},[79,93119,3531],{"class":239},[79,93121,93122],{"class":81,"line":543},[79,93123,4402],{"class":239},[79,93125,93126,93128,93130],{"class":81,"line":549},[79,93127,54529],{"class":239},[79,93129,2287],{"class":395},[79,93131,53420],{"class":239},[79,93133,93134,93136,93138],{"class":81,"line":555},[79,93135,53898],{"class":239},[79,93137,53447],{"class":395},[79,93139,53420],{"class":239},[79,93141,93142],{"class":81,"line":561},[79,93143,454],{"emptyLinePlaceholder":453},[79,93145,93146,93148,93150],{"class":81,"line":567},[79,93147,392],{"class":239},[79,93149,53913],{"class":395},[79,93151,53420],{"class":239},[79,93153,93154,93156,93158,93160,93162,93164,93166,93168],{"class":81,"line":573},[79,93155,54257],{"class":239},[79,93157,53724],{"class":395},[79,93159,55596],{"class":85},[79,93161,244],{"class":239},[79,93163,55601],{"class":89},[79,93165,57424],{"class":239},[79,93167,53724],{"class":395},[79,93169,53420],{"class":239},[79,93171,93172,93174,93176,93178,93180,93182,93184,93186],{"class":81,"line":579},[79,93173,54257],{"class":239},[79,93175,53926],{"class":395},[79,93177,57349],{"class":85},[79,93179,244],{"class":239},[79,93181,90379],{"class":89},[79,93183,57424],{"class":239},[79,93185,53926],{"class":395},[79,93187,53420],{"class":239},[79,93189,93190,93192,93194],{"class":81,"line":584},[79,93191,54257],{"class":239},[79,93193,53926],{"class":395},[79,93195,53420],{"class":239},[79,93197,93198,93200,93202,93204,93206,93208,93210,93212],{"class":81,"line":590},[79,93199,13385],{"class":243},[79,93201,89038],{"class":96},[79,93203,468],{"class":243},[79,93205,56506],{"class":239},[79,93207,56509],{"class":85},[79,93209,685],{"class":239},[79,93211,92251],{"class":89},[79,93213,253],{"class":239},[79,93215,93216,93218,93220,93222],{"class":81,"line":596},[79,93217,54332],{"class":243},[79,93219,11622],{"class":239},[79,93221,244],{"class":243},[79,93223,49447],{"class":96},[79,93225,93226,93228,93230],{"class":81,"line":602},[79,93227,72192],{"class":243},[79,93229,92270],{"class":85},[79,93231,13017],{"class":239},[79,93233,93234,93236,93238,93240],{"class":81,"line":608},[79,93235,92277],{"class":239},[79,93237,244],{"class":243},[79,93239,5237],{"class":239},[79,93241,4908],{"class":243},[79,93243,93244],{"class":81,"line":614},[79,93245,92288],{"class":2440},[79,93247,93248],{"class":81,"line":620},[79,93249,4402],{"class":239},[79,93251,93252],{"class":81,"line":625},[79,93253,92297],{"class":2440},[79,93255,93256],{"class":81,"line":630},[79,93257,93258],{"class":2440},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[79,93260,93261],{"class":81,"line":648},[79,93262,93263],{"class":2440},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[79,93265,93266,93268,93270,93272,93274,93276,93279,93281,93283],{"class":81,"line":659},[79,93267,92312],{"class":239},[79,93269,59923],{"class":85},[79,93271,685],{"class":239},[79,93273,92319],{"class":89},[79,93275,92322],{"class":239},[79,93277,93278],{"class":85},"throttle",[79,93280,92328],{"class":239},[79,93282,963],{"class":96},[79,93284,1191],{"class":239},[79,93286,93287,93289,93291],{"class":81,"line":676},[79,93288,54529],{"class":239},[79,93290,53926],{"class":395},[79,93292,53420],{"class":239},[79,93294,93295,93297,93299],{"class":81,"line":708},[79,93296,53898],{"class":239},[79,93298,53913],{"class":395},[79,93300,53420],{"class":239},[79,93302,93303],{"class":81,"line":717},[79,93304,454],{"emptyLinePlaceholder":453},[79,93306,93307,93309,93311],{"class":81,"line":722},[79,93308,53898],{"class":239},[79,93310,52749],{"class":395},[79,93312,53420],{"class":239},[3377,93314,93315],{},[29,93316,93317],{},"手写一个节流函数来处理",[19,93319,73060],{},[19,93321,92371],{},[19,93323,93324],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,93326,93327],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[51,93329,93331],{"className":52747,"code":93330,"language":52749,"meta":57,"style":57},"\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",[59,93332,93333,93343,93357,93361,93369,93383,93403,93415,93423,93429,93439,93451,93463,93473,93485,93495,93505,93517,93521,93529,93537,93541,93549,93567,93585,93593,93611,93621,93629,93639,93643,93647,93651,93656,93661,93666,93671,93676,93681,93698,93704,93712,93723,93738,93745,93750,93755,93765,93770,93775,93780,93784,93788,93792,93812,93820,93828,93832],{"__ignoreMap":57},[79,93334,93335,93337,93339,93341],{"class":81,"line":82},[79,93336,53411],{"class":239},[79,93338,53414],{"class":395},[79,93340,53417],{"class":85},[79,93342,53420],{"class":239},[79,93344,93345,93347,93349,93351,93353,93355],{"class":81,"line":167},[79,93346,392],{"class":239},[79,93348,52749],{"class":395},[79,93350,53429],{"class":85},[79,93352,244],{"class":239},[79,93354,53434],{"class":89},[79,93356,53420],{"class":239},[79,93358,93359],{"class":81,"line":178},[79,93360,454],{"emptyLinePlaceholder":453},[79,93362,93363,93365,93367],{"class":81,"line":457},[79,93364,392],{"class":239},[79,93366,53447],{"class":395},[79,93368,53420],{"class":239},[79,93370,93371,93373,93375,93377,93379,93381],{"class":81,"line":462},[79,93372,54257],{"class":239},[79,93374,53457],{"class":395},[79,93376,53460],{"class":85},[79,93378,244],{"class":239},[79,93380,53465],{"class":89},[79,93382,53420],{"class":239},[79,93384,93385,93387,93389,93391,93393,93395,93397,93399,93401],{"class":81,"line":474},[79,93386,54257],{"class":239},[79,93388,53457],{"class":395},[79,93390,2238],{"class":85},[79,93392,244],{"class":239},[79,93394,53504],{"class":89},[79,93396,53484],{"class":85},[79,93398,244],{"class":239},[79,93400,53511],{"class":89},[79,93402,53420],{"class":239},[79,93404,93405,93407,93409,93411,93413],{"class":81,"line":480},[79,93406,54257],{"class":239},[79,93408,53520],{"class":395},[79,93410,53523],{"class":239},[79,93412,53520],{"class":395},[79,93414,53420],{"class":239},[79,93416,93417,93419,93421],{"class":81,"line":486},[79,93418,54257],{"class":239},[79,93420,2287],{"class":395},[79,93422,53420],{"class":239},[79,93424,93425,93427],{"class":81,"line":491},[79,93426,56862],{"class":85},[79,93428,17732],{"class":239},[79,93430,93431,93433,93435,93437],{"class":81,"line":497},[79,93432,74704],{"class":96},[79,93434,53550],{"class":239},[79,93436,62615],{"class":96},[79,93438,3531],{"class":239},[79,93440,93441,93443,93445,93447,93449],{"class":81,"line":503},[79,93442,56881],{"class":96},[79,93444,53550],{"class":239},[79,93446,3947],{"class":96},[79,93448,53605],{"class":243},[79,93450,3531],{"class":239},[79,93452,93453,93455,93457,93459,93461],{"class":81,"line":509},[79,93454,56895],{"class":96},[79,93456,53550],{"class":239},[79,93458,3947],{"class":96},[79,93460,53605],{"class":243},[79,93462,3531],{"class":239},[79,93464,93465,93467,93469,93471],{"class":81,"line":514},[79,93466,56994],{"class":96},[79,93468,53550],{"class":239},[79,93470,92111],{"class":96},[79,93472,3531],{"class":239},[79,93474,93475,93477,93479,93481,93483],{"class":81,"line":520},[79,93476,57032],{"class":96},[79,93478,53550],{"class":239},[79,93480,3198],{"class":96},[79,93482,53605],{"class":243},[79,93484,3531],{"class":239},[79,93486,93487,93489,93491,93493],{"class":81,"line":526},[79,93488,59526],{"class":96},[79,93490,53550],{"class":239},[79,93492,62952],{"class":96},[79,93494,3531],{"class":239},[79,93496,93497,93499,93501,93503],{"class":81,"line":532},[79,93498,59396],{"class":96},[79,93500,53550],{"class":239},[79,93502,53705],{"class":96},[79,93504,3531],{"class":239},[79,93506,93507,93509,93511,93513,93515],{"class":81,"line":537},[79,93508,92150],{"class":96},[79,93510,53550],{"class":239},[79,93512,2694],{"class":96},[79,93514,53605],{"class":243},[79,93516,3531],{"class":239},[79,93518,93519],{"class":81,"line":543},[79,93520,4402],{"class":239},[79,93522,93523,93525,93527],{"class":81,"line":549},[79,93524,54529],{"class":239},[79,93526,2287],{"class":395},[79,93528,53420],{"class":239},[79,93530,93531,93533,93535],{"class":81,"line":555},[79,93532,53898],{"class":239},[79,93534,53447],{"class":395},[79,93536,53420],{"class":239},[79,93538,93539],{"class":81,"line":561},[79,93540,454],{"emptyLinePlaceholder":453},[79,93542,93543,93545,93547],{"class":81,"line":567},[79,93544,392],{"class":239},[79,93546,53913],{"class":395},[79,93548,53420],{"class":239},[79,93550,93551,93553,93555,93557,93559,93561,93563,93565],{"class":81,"line":573},[79,93552,54257],{"class":239},[79,93554,53724],{"class":395},[79,93556,55596],{"class":85},[79,93558,244],{"class":239},[79,93560,55601],{"class":89},[79,93562,57424],{"class":239},[79,93564,53724],{"class":395},[79,93566,53420],{"class":239},[79,93568,93569,93571,93573,93575,93577,93579,93581,93583],{"class":81,"line":579},[79,93570,54257],{"class":239},[79,93572,53926],{"class":395},[79,93574,57349],{"class":85},[79,93576,244],{"class":239},[79,93578,90379],{"class":89},[79,93580,57424],{"class":239},[79,93582,53926],{"class":395},[79,93584,53420],{"class":239},[79,93586,93587,93589,93591],{"class":81,"line":584},[79,93588,54257],{"class":239},[79,93590,53926],{"class":395},[79,93592,53420],{"class":239},[79,93594,93595,93597,93599,93601,93603,93605,93607,93609],{"class":81,"line":590},[79,93596,13385],{"class":243},[79,93598,89038],{"class":96},[79,93600,468],{"class":243},[79,93602,56506],{"class":239},[79,93604,56509],{"class":85},[79,93606,685],{"class":239},[79,93608,92251],{"class":89},[79,93610,253],{"class":239},[79,93612,93613,93615,93617,93619],{"class":81,"line":596},[79,93614,54332],{"class":243},[79,93616,11622],{"class":239},[79,93618,244],{"class":243},[79,93620,49447],{"class":96},[79,93622,93623,93625,93627],{"class":81,"line":602},[79,93624,72192],{"class":243},[79,93626,92270],{"class":85},[79,93628,13017],{"class":239},[79,93630,93631,93633,93635,93637],{"class":81,"line":608},[79,93632,92277],{"class":239},[79,93634,244],{"class":243},[79,93636,5237],{"class":239},[79,93638,4908],{"class":243},[79,93640,93641],{"class":81,"line":614},[79,93642,92288],{"class":2440},[79,93644,93645],{"class":81,"line":620},[79,93646,4402],{"class":239},[79,93648,93649],{"class":81,"line":625},[79,93650,92297],{"class":2440},[79,93652,93653],{"class":81,"line":630},[79,93654,93655],{"class":2440},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[79,93657,93658],{"class":81,"line":648},[79,93659,93660],{"class":2440},"    \u002F\u002F 1.声明一个定时器变量\n",[79,93662,93663],{"class":81,"line":659},[79,93664,93665],{"class":2440},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[79,93667,93668],{"class":81,"line":676},[79,93669,93670],{"class":2440},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[79,93672,93673],{"class":81,"line":708},[79,93674,93675],{"class":2440},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[79,93677,93678],{"class":81,"line":717},[79,93679,93680],{"class":2440},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[79,93682,93683,93685,93688,93690,93692,93694,93696],{"class":81,"line":722},[79,93684,72192],{"class":243},[79,93686,93687],{"class":85}," throttle",[79,93689,685],{"class":239},[79,93691,92742],{"class":7412},[79,93693,1060],{"class":239},[79,93695,3093],{"class":7412},[79,93697,14605],{"class":239},[79,93699,93700,93702],{"class":81,"line":727},[79,93701,81880],{"class":243},[79,93703,92755],{"class":239},[79,93705,93706,93708,93710],{"class":81,"line":738},[79,93707,76090],{"class":243},[79,93709,61028],{"class":243},[79,93711,56562],{"class":239},[79,93713,93714,93716,93718,93720],{"class":81,"line":753},[79,93715,1132],{"class":243},[79,93717,3887],{"class":239},[79,93719,2602],{"class":243},[79,93721,93722],{"class":239},"timer) {\n",[79,93724,93725,93728,93730,93732,93734,93736],{"class":81,"line":768},[79,93726,93727],{"class":239},"          timer ",[79,93729,244],{"class":243},[79,93731,92796],{"class":85},[79,93733,685],{"class":239},[79,93735,56559],{"class":243},[79,93737,56562],{"class":239},[79,93739,93740,93743],{"class":81,"line":776},[79,93741,93742],{"class":85},"            fn",[79,93744,4191],{"class":239},[79,93746,93747],{"class":81,"line":781},[79,93748,93749],{"class":2440},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[79,93751,93752],{"class":81,"line":786},[79,93753,93754],{"class":2440},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[79,93756,93757,93760,93762],{"class":81,"line":802},[79,93758,93759],{"class":239},"            timer ",[79,93761,244],{"class":243},[79,93763,93764],{"class":96}," null\n",[79,93766,93767],{"class":81,"line":815},[79,93768,93769],{"class":2440},"            \u002F\u002F 不能用clearTimeout(timer)\n",[79,93771,93772],{"class":81,"line":828},[79,93773,93774],{"class":2440},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[79,93776,93777],{"class":81,"line":842},[79,93778,93779],{"class":239},"          }, t)\n",[79,93781,93782],{"class":81,"line":859},[79,93783,4742],{"class":239},[79,93785,93786],{"class":81,"line":878},[79,93787,54510],{"class":239},[79,93789,93790],{"class":81,"line":883},[79,93791,4402],{"class":239},[79,93793,93794,93796,93798,93800,93802,93804,93806,93808,93810],{"class":81,"line":888},[79,93795,92312],{"class":239},[79,93797,59923],{"class":85},[79,93799,685],{"class":239},[79,93801,92319],{"class":89},[79,93803,1060],{"class":239},[79,93805,93278],{"class":85},[79,93807,92328],{"class":239},[79,93809,963],{"class":96},[79,93811,1191],{"class":239},[79,93813,93814,93816,93818],{"class":81,"line":904},[79,93815,54529],{"class":239},[79,93817,53926],{"class":395},[79,93819,53420],{"class":239},[79,93821,93822,93824,93826],{"class":81,"line":919},[79,93823,53898],{"class":239},[79,93825,53913],{"class":395},[79,93827,53420],{"class":239},[79,93829,93830],{"class":81,"line":930},[79,93831,454],{"emptyLinePlaceholder":453},[79,93833,93834,93836,93838],{"class":81,"line":941},[79,93835,53898],{"class":239},[79,93837,52749],{"class":395},[79,93839,53420],{"class":239},[265,93841,93843],{"id":93842},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[51,93845,93847],{"className":383,"code":93846,"language":385,"meta":57,"style":57},"\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",[59,93848,93849,93857,93865,93870,93875,93880,93885,93889,93897],{"__ignoreMap":57},[79,93850,93851,93853,93855],{"class":81,"line":82},[79,93852,392],{"class":239},[79,93854,53913],{"class":395},[79,93856,53420],{"class":239},[79,93858,93859,93861,93863],{"class":81,"line":167},[79,93860,54257],{"class":239},[79,93862,53926],{"class":395},[79,93864,53420],{"class":239},[79,93866,93867],{"class":81,"line":178},[79,93868,93869],{"class":239},"    let timer = null\n",[79,93871,93872],{"class":81,"line":457},[79,93873,93874],{"class":239},"    timer = setTimeout(() => {\n",[79,93876,93877],{"class":81,"line":462},[79,93878,93879],{"class":239},"      clearTimeout(timer)\n",[79,93881,93882],{"class":81,"line":474},[79,93883,93884],{"class":239},"      console.log(timer)\n",[79,93886,93887],{"class":81,"line":480},[79,93888,62335],{"class":239},[79,93890,93891,93893,93895],{"class":81,"line":486},[79,93892,54529],{"class":239},[79,93894,53926],{"class":395},[79,93896,53420],{"class":239},[79,93898,93899,93901,93903],{"class":81,"line":491},[79,93900,53898],{"class":239},[79,93902,53913],{"class":395},[79,93904,53420],{"class":239},[19,93906,93907],{},"输出为1",[19,93909,93910],{},"在开启的定时器里边写清除定时器",[19,93912,93913],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[265,93915,93917],{"id":93916},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93919,93920],{},"页面打开，可以记录上一次的视频播放位置",[19,93922,93923],{},[3699,93924],{"alt":57,"src":93925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93927,93928],{},[3699,93929],{"alt":57,"src":93930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[51,93932,93934],{"className":52747,"code":93933,"language":52749,"meta":57,"style":57},"\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",[59,93935,93936,93946,93960,93964,93972,93986,94006,94026,94048,94061,94069,94075,94085,94095,94105,94109,94113,94120,94133,94145,94149,94153,94163,94175,94189,94193,94197,94204,94214,94227,94239,94249,94259,94275,94287,94291,94295,94303,94313,94325,94335,94345,94355,94359,94363,94373,94384,94388,94396,94404,94408,94416,94431,94446,94461,94482,94490,94498,94513,94535,94543,94558,94584,94610,94636,94644,94652,94671,94679,94684,94703,94708,94726,94731,94736,94744,94749,94763,94771,94776,94793,94797,94802,94824,94828,94836,94844,94848],{"__ignoreMap":57},[79,93937,93938,93940,93942,93944],{"class":81,"line":82},[79,93939,53411],{"class":239},[79,93941,53414],{"class":395},[79,93943,53417],{"class":85},[79,93945,53420],{"class":239},[79,93947,93948,93950,93952,93954,93956,93958],{"class":81,"line":167},[79,93949,392],{"class":239},[79,93951,52749],{"class":395},[79,93953,53429],{"class":85},[79,93955,244],{"class":239},[79,93957,53434],{"class":89},[79,93959,53420],{"class":239},[79,93961,93962],{"class":81,"line":178},[79,93963,454],{"emptyLinePlaceholder":453},[79,93965,93966,93968,93970],{"class":81,"line":457},[79,93967,392],{"class":239},[79,93969,53447],{"class":395},[79,93971,53420],{"class":239},[79,93973,93974,93976,93978,93980,93982,93984],{"class":81,"line":462},[79,93975,54257],{"class":239},[79,93977,53457],{"class":395},[79,93979,53460],{"class":85},[79,93981,244],{"class":239},[79,93983,53465],{"class":89},[79,93985,61237],{"class":239},[79,93987,93988,93990,93992,93994,93996,93998,94000,94002,94004],{"class":81,"line":474},[79,93989,54257],{"class":239},[79,93991,53457],{"class":395},[79,93993,53476],{"class":85},[79,93995,244],{"class":239},[79,93997,53481],{"class":89},[79,93999,53484],{"class":85},[79,94001,244],{"class":239},[79,94003,53489],{"class":89},[79,94005,61237],{"class":239},[79,94007,94008,94010,94012,94014,94016,94018,94020,94022,94024],{"class":81,"line":480},[79,94009,54257],{"class":239},[79,94011,53457],{"class":395},[79,94013,2238],{"class":85},[79,94015,244],{"class":239},[79,94017,53504],{"class":89},[79,94019,53484],{"class":85},[79,94021,244],{"class":239},[79,94023,53511],{"class":89},[79,94025,61237],{"class":239},[79,94027,94028,94030,94032,94034,94036,94039,94041,94043,94046],{"class":81,"line":486},[79,94029,54257],{"class":239},[79,94031,53457],{"class":395},[79,94033,2238],{"class":85},[79,94035,244],{"class":239},[79,94037,94038],{"class":89},"\"referrer\"",[79,94040,53484],{"class":85},[79,94042,244],{"class":239},[79,94044,94045],{"class":89},"\"never\"",[79,94047,61237],{"class":239},[79,94049,94050,94052,94054,94057,94059],{"class":81,"line":491},[79,94051,54257],{"class":239},[79,94053,53520],{"class":395},[79,94055,94056],{"class":239},">综合案例\u003C\u002F",[79,94058,53520],{"class":395},[79,94060,53420],{"class":239},[79,94062,94063,94065,94067],{"class":81,"line":497},[79,94064,54257],{"class":239},[79,94066,2287],{"class":395},[79,94068,53420],{"class":239},[79,94070,94071,94073],{"class":81,"line":503},[79,94072,8598],{"class":395},[79,94074,17732],{"class":239},[79,94076,94077,94079,94081,94083],{"class":81,"line":509},[79,94078,56805],{"class":96},[79,94080,53550],{"class":239},[79,94082,1030],{"class":96},[79,94084,3531],{"class":239},[79,94086,94087,94089,94091,94093],{"class":81,"line":514},[79,94088,56816],{"class":96},[79,94090,53550],{"class":239},[79,94092,1030],{"class":96},[79,94094,3531],{"class":239},[79,94096,94097,94099,94101,94103],{"class":81,"line":520},[79,94098,74704],{"class":96},[79,94100,53550],{"class":239},[79,94102,62615],{"class":96},[79,94104,3531],{"class":239},[79,94106,94107],{"class":81,"line":526},[79,94108,4402],{"class":239},[79,94110,94111],{"class":81,"line":532},[79,94112,454],{"emptyLinePlaceholder":453},[79,94114,94115,94118],{"class":81,"line":537},[79,94116,94117],{"class":85},"    .container",[79,94119,17732],{"class":239},[79,94121,94122,94124,94126,94129,94131],{"class":81,"line":543},[79,94123,56881],{"class":96},[79,94125,53550],{"class":239},[79,94127,94128],{"class":96},"1200",[79,94130,53605],{"class":243},[79,94132,3531],{"class":239},[79,94134,94135,94137,94139,94141,94143],{"class":81,"line":549},[79,94136,56816],{"class":96},[79,94138,53550],{"class":239},[79,94140,1030],{"class":96},[79,94142,53669],{"class":96},[79,94144,3531],{"class":239},[79,94146,94147],{"class":81,"line":555},[79,94148,4402],{"class":239},[79,94150,94151],{"class":81,"line":561},[79,94152,454],{"emptyLinePlaceholder":453},[79,94154,94155,94158,94161],{"class":81,"line":567},[79,94156,94157],{"class":85},"    .video",[79,94159,94160],{"class":395}," video",[79,94162,17732],{"class":239},[79,94164,94165,94167,94169,94171,94173],{"class":81,"line":573},[79,94166,56881],{"class":96},[79,94168,53550],{"class":239},[79,94170,2686],{"class":96},[79,94172,1137],{"class":243},[79,94174,3531],{"class":239},[79,94176,94177,94179,94181,94183,94185,94187],{"class":81,"line":579},[79,94178,56805],{"class":96},[79,94180,53550],{"class":239},[79,94182,3073],{"class":96},[79,94184,53605],{"class":243},[79,94186,670],{"class":96},[79,94188,3531],{"class":239},[79,94190,94191],{"class":81,"line":584},[79,94192,4402],{"class":239},[79,94194,94195],{"class":81,"line":590},[79,94196,454],{"emptyLinePlaceholder":453},[79,94198,94199,94202],{"class":81,"line":596},[79,94200,94201],{"class":85},"    .elevator",[79,94203,17732],{"class":239},[79,94205,94206,94208,94210,94212],{"class":81,"line":602},[79,94207,56869],{"class":96},[79,94209,53550],{"class":239},[79,94211,88338],{"class":96},[79,94213,3531],{"class":239},[79,94215,94216,94218,94220,94223,94225],{"class":81,"line":608},[79,94217,57057],{"class":96},[79,94219,53550],{"class":239},[79,94221,94222],{"class":96},"280",[79,94224,53605],{"class":243},[79,94226,3531],{"class":239},[79,94228,94229,94231,94233,94235,94237],{"class":81,"line":614},[79,94230,88532],{"class":96},[79,94232,53550],{"class":239},[79,94234,3073],{"class":96},[79,94236,53605],{"class":243},[79,94238,3531],{"class":239},[79,94240,94241,94243,94245,94247],{"class":81,"line":620},[79,94242,88345],{"class":96},[79,94244,53550],{"class":239},[79,94246,88350],{"class":96},[79,94248,3531],{"class":239},[79,94250,94251,94253,94255,94257],{"class":81,"line":625},[79,94252,63831],{"class":96},[79,94254,53550],{"class":239},[79,94256,62952],{"class":96},[79,94258,3531],{"class":239},[79,94260,94261,94263,94265,94267,94269,94271,94273],{"class":81,"line":630},[79,94262,64087],{"class":96},[79,94264,53550],{"class":239},[79,94266,1072],{"class":96},[79,94268,53605],{"class":243},[79,94270,53634],{"class":96},[79,94272,64354],{"class":96},[79,94274,3531],{"class":239},[79,94276,94277,94279,94281,94283,94285],{"class":81,"line":648},[79,94278,56881],{"class":96},[79,94280,53550],{"class":239},[79,94282,3279],{"class":96},[79,94284,53605],{"class":243},[79,94286,3531],{"class":239},[79,94288,94289],{"class":81,"line":659},[79,94290,4402],{"class":239},[79,94292,94293],{"class":81,"line":676},[79,94294,454],{"emptyLinePlaceholder":453},[79,94296,94297,94299,94301],{"class":81,"line":708},[79,94298,94201],{"class":85},[79,94300,3635],{"class":395},[79,94302,17732],{"class":239},[79,94304,94305,94307,94309,94311],{"class":81,"line":717},[79,94306,57119],{"class":96},[79,94308,53550],{"class":239},[79,94310,62979],{"class":96},[79,94312,3531],{"class":239},[79,94314,94315,94317,94319,94321,94323],{"class":81,"line":722},[79,94316,56805],{"class":96},[79,94318,53550],{"class":239},[79,94320,2820],{"class":96},[79,94322,53605],{"class":243},[79,94324,3531],{"class":239},[79,94326,94327,94329,94331,94333],{"class":81,"line":727},[79,94328,66080],{"class":96},[79,94330,53550],{"class":239},[79,94332,56847],{"class":96},[79,94334,3531],{"class":239},[79,94336,94337,94339,94341,94343],{"class":81,"line":738},[79,94338,59396],{"class":96},[79,94340,53550],{"class":239},[79,94342,53705],{"class":96},[79,94344,3531],{"class":239},[79,94346,94347,94349,94351,94353],{"class":81,"line":753},[79,94348,59526],{"class":96},[79,94350,53550],{"class":239},[79,94352,64180],{"class":96},[79,94354,3531],{"class":239},[79,94356,94357],{"class":81,"line":768},[79,94358,4402],{"class":239},[79,94360,94361],{"class":81,"line":776},[79,94362,454],{"emptyLinePlaceholder":453},[79,94364,94365,94367,94369,94371],{"class":81,"line":781},[79,94366,94201],{"class":85},[79,94368,3635],{"class":395},[79,94370,66134],{"class":85},[79,94372,17732],{"class":239},[79,94374,94375,94377,94379,94382],{"class":81,"line":786},[79,94376,59526],{"class":96},[79,94378,53550],{"class":239},[79,94380,94381],{"class":96},"#1286ff",[79,94383,3531],{"class":239},[79,94385,94386],{"class":81,"line":802},[79,94387,4402],{"class":239},[79,94389,94390,94392,94394],{"class":81,"line":815},[79,94391,54529],{"class":239},[79,94393,2287],{"class":395},[79,94395,53420],{"class":239},[79,94397,94398,94400,94402],{"class":81,"line":828},[79,94399,53898],{"class":239},[79,94401,53447],{"class":395},[79,94403,53420],{"class":239},[79,94405,94406],{"class":81,"line":842},[79,94407,454],{"emptyLinePlaceholder":453},[79,94409,94410,94412,94414],{"class":81,"line":859},[79,94411,392],{"class":239},[79,94413,53913],{"class":395},[79,94415,53420],{"class":239},[79,94417,94418,94420,94422,94424,94426,94429],{"class":81,"line":878},[79,94419,54257],{"class":239},[79,94421,53724],{"class":395},[79,94423,55596],{"class":85},[79,94425,244],{"class":239},[79,94427,94428],{"class":89},"\"container\"",[79,94430,53420],{"class":239},[79,94432,94433,94435,94437,94439,94441,94444],{"class":81,"line":883},[79,94434,53454],{"class":239},[79,94436,53724],{"class":395},[79,94438,55596],{"class":85},[79,94440,244],{"class":239},[79,94442,94443],{"class":89},"\"header\"",[79,94445,53420],{"class":239},[79,94447,94448,94450,94452,94454,94456,94459],{"class":81,"line":888},[79,94449,57344],{"class":239},[79,94451,2614],{"class":395},[79,94453,63167],{"class":85},[79,94455,244],{"class":239},[79,94457,94458],{"class":89},"\"http:\u002F\u002Fpip.itcast.cn\"",[79,94460,53420],{"class":239},[79,94462,94463,94465,94467,94469,94471,94474,94476,94478,94480],{"class":81,"line":904},[79,94464,57412],{"class":239},[79,94466,3699],{"class":395},[79,94468,57349],{"class":85},[79,94470,244],{"class":239},[79,94472,94473],{"class":89},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[79,94475,57357],{"class":85},[79,94477,244],{"class":239},[79,94479,9846],{"class":89},[79,94481,61237],{"class":239},[79,94483,94484,94486,94488],{"class":81,"line":919},[79,94485,57517],{"class":239},[79,94487,2614],{"class":395},[79,94489,53420],{"class":239},[79,94491,94492,94494,94496],{"class":81,"line":930},[79,94493,53889],{"class":239},[79,94495,53724],{"class":395},[79,94497,53420],{"class":239},[79,94499,94500,94502,94504,94506,94508,94511],{"class":81,"line":941},[79,94501,53454],{"class":239},[79,94503,53724],{"class":395},[79,94505,55596],{"class":85},[79,94507,244],{"class":239},[79,94509,94510],{"class":89},"\"video\"",[79,94512,53420],{"class":239},[79,94514,94515,94517,94519,94521,94523,94526,94529,94531,94533],{"class":81,"line":946},[79,94516,57344],{"class":239},[79,94518,30315],{"class":395},[79,94520,57349],{"class":85},[79,94522,244],{"class":239},[79,94524,94525],{"class":89},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[79,94527,94528],{"class":85}," controls",[79,94530,57424],{"class":239},[79,94532,30315],{"class":395},[79,94534,53420],{"class":239},[79,94536,94537,94539,94541],{"class":81,"line":969},[79,94538,53889],{"class":239},[79,94540,53724],{"class":395},[79,94542,53420],{"class":239},[79,94544,94545,94547,94549,94551,94553,94556],{"class":81,"line":975},[79,94546,53454],{"class":239},[79,94548,53724],{"class":395},[79,94550,55596],{"class":85},[79,94552,244],{"class":239},[79,94554,94555],{"class":89},"\"elevator\"",[79,94557,53420],{"class":239},[79,94559,94560,94562,94564,94566,94568,94570,94573,94575,94577,94580,94582],{"class":81,"line":989},[79,94561,57344],{"class":239},[79,94563,2614],{"class":395},[79,94565,63167],{"class":85},[79,94567,244],{"class":239},[79,94569,66346],{"class":89},[79,94571,94572],{"class":85}," data-ref",[79,94574,244],{"class":239},[79,94576,94510],{"class":89},[79,94578,94579],{"class":239},">视频介绍\u003C\u002F",[79,94581,2614],{"class":395},[79,94583,53420],{"class":239},[79,94585,94586,94588,94590,94592,94594,94596,94598,94600,94603,94606,94608],{"class":81,"line":1003},[79,94587,57344],{"class":239},[79,94589,2614],{"class":395},[79,94591,63167],{"class":85},[79,94593,244],{"class":239},[79,94595,66346],{"class":89},[79,94597,94572],{"class":85},[79,94599,244],{"class":239},[79,94601,94602],{"class":89},"\"intro\"",[79,94604,94605],{"class":239},">课程简介\u003C\u002F",[79,94607,2614],{"class":395},[79,94609,53420],{"class":239},[79,94611,94612,94614,94616,94618,94620,94622,94624,94626,94629,94632,94634],{"class":81,"line":1019},[79,94613,57344],{"class":239},[79,94615,2614],{"class":395},[79,94617,63167],{"class":85},[79,94619,244],{"class":239},[79,94621,66346],{"class":89},[79,94623,94572],{"class":85},[79,94625,244],{"class":239},[79,94627,94628],{"class":89},"\"outline\"",[79,94630,94631],{"class":239},">评论列表\u003C\u002F",[79,94633,2614],{"class":395},[79,94635,53420],{"class":239},[79,94637,94638,94640,94642],{"class":81,"line":1024},[79,94639,53889],{"class":239},[79,94641,53724],{"class":395},[79,94643,53420],{"class":239},[79,94645,94646,94648,94650],{"class":81,"line":1067},[79,94647,54529],{"class":239},[79,94649,53724],{"class":395},[79,94651,53420],{"class":239},[79,94653,94654,94656,94658,94660,94662,94665,94667,94669],{"class":81,"line":1101},[79,94655,54257],{"class":239},[79,94657,53926],{"class":395},[79,94659,57349],{"class":85},[79,94661,244],{"class":239},[79,94663,94664],{"class":89},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[79,94666,57424],{"class":239},[79,94668,53926],{"class":395},[79,94670,53420],{"class":239},[79,94672,94673,94675,94677],{"class":81,"line":1106},[79,94674,54257],{"class":239},[79,94676,53926],{"class":395},[79,94678,53420],{"class":239},[79,94680,94681],{"class":81,"line":1112},[79,94682,94683],{"class":2440},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[79,94685,94686,94688,94690,94692,94694,94696,94698,94701],{"class":81,"line":1124},[79,94687,13385],{"class":243},[79,94689,94160],{"class":96},[79,94691,468],{"class":243},[79,94693,56506],{"class":239},[79,94695,56509],{"class":85},[79,94697,685],{"class":239},[79,94699,94700],{"class":89},"'video'",[79,94702,253],{"class":239},[79,94704,94705],{"class":81,"line":1129},[79,94706,94707],{"class":2440},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[79,94709,94710,94713,94715,94717,94719,94722,94724],{"class":81,"line":1150},[79,94711,94712],{"class":239},"    video.ontimeupdate ",[79,94714,244],{"class":243},[79,94716,90460],{"class":239},[79,94718,93278],{"class":85},[79,94720,94721],{"class":239},"(() ",[79,94723,86827],{"class":243},[79,94725,17732],{"class":239},[79,94727,94728],{"class":81,"line":1161},[79,94729,94730],{"class":2440},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[79,94732,94733],{"class":81,"line":1175},[79,94734,94735],{"class":2440},"      \u002F\u002F 控制台输出当前的时间\n",[79,94737,94738,94741],{"class":81,"line":1194},[79,94739,94740],{"class":2440},"      \u002F\u002F console.log(video.currentTime)",[79,94742,94743],{"class":2440},"  \u002F\u002F获得当前的视频时间\n",[79,94745,94746],{"class":81,"line":1211},[79,94747,94748],{"class":2440},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[79,94750,94751,94753,94755,94757,94760],{"class":81,"line":1228},[79,94752,76791],{"class":239},[79,94754,73762],{"class":85},[79,94756,685],{"class":239},[79,94758,94759],{"class":89},"'currentTime'",[79,94761,94762],{"class":239},", video.currentTime)\n",[79,94764,94765,94767,94769],{"class":81,"line":1246},[79,94766,56645],{"class":239},[79,94768,8605],{"class":96},[79,94770,253],{"class":239},[79,94772,94773],{"class":81,"line":1251},[79,94774,94775],{"class":2440},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[79,94777,94778,94781,94784,94786,94789,94791],{"class":81,"line":1274},[79,94779,94780],{"class":239},"    video.",[79,94782,94783],{"class":85},"onloadeddata",[79,94785,468],{"class":243},[79,94787,94788],{"class":239}," () ",[79,94790,86827],{"class":243},[79,94792,17732],{"class":239},[79,94794,94795],{"class":81,"line":1296},[79,94796,62122],{"class":2440},[79,94798,94799],{"class":81,"line":1316},[79,94800,94801],{"class":2440},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[79,94803,94804,94807,94809,94812,94814,94816,94818,94820,94822],{"class":81,"line":1321},[79,94805,94806],{"class":239},"      video.currentTime ",[79,94808,244],{"class":243},[79,94810,94811],{"class":239}," localStorage.",[79,94813,73793],{"class":85},[79,94815,685],{"class":239},[79,94817,94759],{"class":89},[79,94819,15876],{"class":239},[79,94821,73465],{"class":243},[79,94823,49447],{"class":96},[79,94825,94826],{"class":81,"line":1326},[79,94827,4402],{"class":239},[79,94829,94830,94832,94834],{"class":81,"line":1342},[79,94831,54529],{"class":239},[79,94833,53926],{"class":395},[79,94835,53420],{"class":239},[79,94837,94838,94840,94842],{"class":81,"line":18985},[79,94839,53898],{"class":239},[79,94841,53913],{"class":395},[79,94843,53420],{"class":239},[79,94845,94846],{"class":81,"line":18990},[79,94847,454],{"emptyLinePlaceholder":453},[79,94849,94850,94852,94854],{"class":81,"line":18995},[79,94851,53898],{"class":239},[79,94853,52749],{"class":395},[79,94855,53420],{"class":239},[2287,94857,94858],{},"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":57,"searchDepth":167,"depth":167,"links":94860},[94861,94866,94870,94871,94872,94877,94882,94883,94884,94885,94892,94897,94898,94908,94912,94913,94917],{"id":78799,"depth":167,"text":78800,"children":94862},[94863,94864,94865],{"id":78803,"depth":178,"text":78804},{"id":78828,"depth":178,"text":78829},{"id":78840,"depth":178,"text":78841},{"id":78852,"depth":167,"text":78853,"children":94867},[94868,94869],{"id":78856,"depth":178,"text":78857},{"id":78871,"depth":178,"text":78872},{"id":78923,"depth":167,"text":78924},{"id":78967,"depth":167,"text":78968},{"id":78984,"depth":167,"text":78985,"children":94873},[94874,94875,94876],{"id":78988,"depth":178,"text":78989},{"id":79001,"depth":178,"text":79002},{"id":79106,"depth":178,"text":79107},{"id":79395,"depth":167,"text":79396,"children":94878},[94879,94880,94881],{"id":79399,"depth":178,"text":79400},{"id":79842,"depth":178,"text":79843},{"id":80253,"depth":178,"text":80254},{"id":80316,"depth":167,"text":80317},{"id":80395,"depth":167,"text":80396},{"id":80488,"depth":167,"text":80489},{"id":82332,"depth":167,"text":82333,"children":94886},[94887,94888,94889,94890,94891],{"id":82336,"depth":178,"text":82337},{"id":82348,"depth":178,"text":82349},{"id":82567,"depth":178,"text":82568},{"id":82585,"depth":178,"text":82586},{"id":82645,"depth":178,"text":82646},{"id":86911,"depth":167,"text":86912,"children":94893},[94894,94895,94896],{"id":86915,"depth":178,"text":86916},{"id":86933,"depth":178,"text":86934},{"id":86959,"depth":178,"text":86960},{"id":86968,"depth":167,"text":86969},{"id":86990,"depth":167,"text":86991,"children":94899},[94900,94901,94902,94903,94904,94905,94906,94907],{"id":86994,"depth":178,"text":86995},{"id":87255,"depth":178,"text":87256},{"id":87441,"depth":178,"text":87442},{"id":87808,"depth":178,"text":87809},{"id":87924,"depth":178,"text":87925},{"id":87960,"depth":178,"text":87961},{"id":88007,"depth":178,"text":88008},{"id":88041,"depth":178,"text":88042},{"id":89404,"depth":167,"text":89405,"children":94909},[94910,94911],{"id":89408,"depth":178,"text":89409},{"id":89445,"depth":178,"text":89446},{"id":90800,"depth":167,"text":90801},{"id":91171,"depth":167,"text":91172,"children":94914},[94915,94916],{"id":91175,"depth":178,"text":91176},{"id":91209,"depth":178,"text":91210},{"id":91938,"depth":167,"text":91939,"children":94918},[94919,94920,94921,94922],{"id":91942,"depth":178,"text":91943},{"id":92900,"depth":178,"text":92901},{"id":93842,"depth":178,"text":93843},{"id":93916,"depth":178,"text":93917},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78788,"description":25516},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94929,"title":94930,"body":94931,"description":94942,"extension":2314,"meta":94943,"navigation":453,"path":94945,"seo":94946,"stem":94947,"__hash__":94948},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94932,"toc":94940},[94933],[19,94934,94935,94936],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2614,94937,94938],{"href":94938,"rel":94939},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[26001],{"title":57,"searchDepth":167,"depth":167,"links":94941},[],"三件套第三套学习",{"category":94944},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94930,"description":94942},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94950,"title":94951,"body":94952,"description":25516,"extension":2314,"meta":95057,"navigation":453,"path":95058,"seo":95059,"stem":95060,"__hash__":95061},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94953,"toc":95052},[94954,94961,94964,94967,94970,94974,94983,94986,94989,94993,95002,95005,95009,95012,95032,95035,95049],[19,94955,94956],{},[2614,94957,94960],{"href":94958,"rel":94959},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[26001],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94962,94951],{"id":94963},"_1安装",[19,94965,94966],{},"numpy是科学计算基础库,底层是C语言",[19,94968,94969],{},"三种方式：",[14,94971,94973],{"id":94972},"_11-通过pip安装","1.1 通过pip安装",[51,94975,94977],{"className":230,"code":94976,"language":232,"meta":57,"style":57},"pip install numpy\n",[59,94978,94979],{"__ignoreMap":57},[79,94980,94981],{"class":81,"line":82},[79,94982,94976],{"class":239},[19,94984,94985],{},"首选方式，自动处理依赖项",[19,94987,94988],{},"在提示系统命令符中使用cmd",[14,94990,94992],{"id":94991},"_12-通过anaconda安装","1.2 通过Anaconda安装",[51,94994,94996],{"className":230,"code":94995,"language":232,"meta":57,"style":57},"conda install numpy\n",[59,94997,94998],{"__ignoreMap":57},[79,94999,95000],{"class":81,"line":82},[79,95001,94995],{"class":239},[19,95003,95004],{},"自动解决环境依赖",[14,95006,95008],{"id":95007},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,95010,95011],{},"对于Debian\u002FUbuntu",[51,95013,95015],{"className":230,"code":95014,"language":232,"meta":57,"style":57},"sudo apt-get install python3-numpy\n",[59,95016,95017],{"__ignoreMap":57},[79,95018,95019,95022,95024,95027,95029],{"class":81,"line":82},[79,95020,95021],{"class":239},"sudo apt",[79,95023,320],{"class":243},[79,95025,95026],{"class":239},"get install python3",[79,95028,320],{"class":243},[79,95030,95031],{"class":239},"numpy\n",[19,95033,95034],{},"对于Fedora:",[51,95036,95038],{"className":230,"code":95037,"language":232,"meta":57,"style":57},"sudo dnf install python3-numpy\n",[59,95039,95040],{"__ignoreMap":57},[79,95041,95042,95045,95047],{"class":81,"line":82},[79,95043,95044],{"class":239},"sudo dnf install python3",[79,95046,320],{"class":243},[79,95048,95031],{"class":239},[2287,95050,95051],{},"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":57,"searchDepth":167,"depth":167,"links":95053},[95054,95055,95056],{"id":94972,"depth":167,"text":94973},{"id":94991,"depth":167,"text":94992},{"id":95007,"depth":167,"text":95008},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94951,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":95063,"title":95064,"body":95065,"description":25516,"extension":2314,"meta":95178,"navigation":453,"path":95179,"seo":95180,"stem":95181,"__hash__":95182},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":95066,"toc":95176},[95067,95070,95073,95076,95079,95082,95085,95088,95091,95094,95170,95173],[10,95068,95064],{"id":95069},"_10算数函数",[19,95071,95072],{},"加减乘除运算跟python基础语法没区别",[19,95074,95075],{},"除了python那种方法外还可以使用函数",[19,95077,95078],{},"加：np.add(a,b)",[19,95080,95081],{},"减：np.subtract(a,b)",[19,95083,95084],{},"乘：np.multiply(a,b)",[19,95086,95087],{},"除：np.divide(a,b) == a\u002Fb",[19,95089,95090],{},"取余：np.mod(a,b) == a%b",[19,95092,95093],{},"必须会的用法：",[51,95095,95097],{"className":230,"code":95096,"language":232,"meta":57,"style":57},"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",[59,95098,95099,95121,95142,95152,95165],{"__ignoreMap":57},[79,95100,95101,95103,95105,95108,95110,95113,95115,95117,95119],{"class":81,"line":82},[79,95102,2614],{"class":239},[79,95104,244],{"class":243},[79,95106,95107],{"class":239},"np.arange(",[79,95109,2794],{"class":96},[79,95111,95112],{"class":239},").reshape(",[79,95114,1188],{"class":96},[79,95116,2752],{"class":239},[79,95118,1188],{"class":96},[79,95120,253],{"class":239},[79,95122,95123,95125,95127,95130,95132,95134,95136,95138,95140],{"class":81,"line":167},[79,95124,2638],{"class":239},[79,95126,244],{"class":243},[79,95128,95129],{"class":239},"np.array([",[79,95131,2820],{"class":96},[79,95133,2752],{"class":239},[79,95135,2820],{"class":96},[79,95137,2752],{"class":239},[79,95139,2820],{"class":96},[79,95141,1243],{"class":239},[79,95143,95144,95147,95149],{"class":81,"line":178},[79,95145,95146],{"class":239},"result",[79,95148,244],{"class":243},[79,95150,95151],{"class":239},"np.empty_like(a)\n",[79,95153,95154,95157,95160,95162],{"class":81,"line":457},[79,95155,95156],{"class":239},"np.add(a,b,",[79,95158,95159],{"class":7412},"out",[79,95161,244],{"class":243},[79,95163,95164],{"class":239},"result)\n",[79,95166,95167],{"class":81,"line":462},[79,95168,95169],{"class":239},"result\n",[19,95171,95172],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[2287,95174,95175],{},"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":57,"searchDepth":167,"depth":167,"links":95177},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":95064,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95184,"title":95185,"body":95186,"description":25516,"extension":2314,"meta":95948,"navigation":453,"path":95949,"seo":95950,"stem":95951,"__hash__":95952},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95187,"toc":95935},[95188,95191,95194,95197,95201,95240,95244,95288,95348,95352,95355,95394,95397,95442,95446,95482,95486,95555,95559,95623,95627,95630,95633,95636,95639,95675,95679,95719,95723,95795,95798,95802,95865,95869,95932],[10,95189,95185],{"id":95190},"_11统计函数",[19,95192,95193],{},"sum max min mean",[19,95195,95196],{},"这些有axis参数，可以指定方向",[14,95198,95200],{"id":95199},"_111-sum求和函数","11.1 sum()求和函数",[51,95202,95204],{"className":230,"code":95203,"language":232,"meta":57,"style":57},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[59,95205,95206,95211,95232],{"__ignoreMap":57},[79,95207,95208],{"class":81,"line":82},[79,95209,95210],{"class":2440},"#创建一维数组\n",[79,95212,95213,95215,95217,95220,95222,95224,95226,95228,95230],{"class":81,"line":167},[79,95214,2614],{"class":239},[79,95216,244],{"class":243},[79,95218,95219],{"class":239},"np.random.randint(",[79,95221,1072],{"class":96},[79,95223,2752],{"class":239},[79,95225,2686],{"class":96},[79,95227,2752],{"class":239},[79,95229,3073],{"class":96},[79,95231,253],{"class":239},[79,95233,95234,95237],{"class":81,"line":178},[79,95235,95236],{"class":239},"np.sum(a)",[79,95238,95239],{"class":2440},"#求和\n",[14,95241,95243],{"id":95242},"_112-max求最大值函数","11.2 max()求最大值函数",[51,95245,95247],{"className":230,"code":95246,"language":232,"meta":57,"style":57},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[59,95248,95249,95253,95273,95278,95283],{"__ignoreMap":57},[79,95250,95251],{"class":81,"line":82},[79,95252,95210],{"class":2440},[79,95254,95255,95257,95259,95261,95263,95265,95267,95269,95271],{"class":81,"line":167},[79,95256,2614],{"class":239},[79,95258,244],{"class":243},[79,95260,95219],{"class":239},[79,95262,1072],{"class":96},[79,95264,2752],{"class":239},[79,95266,2686],{"class":96},[79,95268,2752],{"class":239},[79,95270,3073],{"class":96},[79,95272,253],{"class":239},[79,95274,95275],{"class":81,"line":178},[79,95276,95277],{"class":239},"np.max(a)\n",[79,95279,95280],{"class":81,"line":457},[79,95281,95282],{"class":2440},"#最大索引(求最大元素的索引)arg\n",[79,95284,95285],{"class":81,"line":462},[79,95286,95287],{"class":239},"np.argmax(a)\n",[51,95289,95291],{"className":230,"code":95290,"language":232,"meta":57,"style":57},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[59,95292,95293,95314,95334,95338],{"__ignoreMap":57},[79,95294,95295,95297,95299,95302,95304,95306,95308,95310,95312],{"class":81,"line":82},[79,95296,13083],{"class":239},[79,95298,244],{"class":243},[79,95300,95301],{"class":239}," np.array([",[79,95303,1072],{"class":96},[79,95305,1060],{"class":239},[79,95307,2694],{"class":96},[79,95309,1060],{"class":239},[79,95311,1188],{"class":96},[79,95313,1243],{"class":239},[79,95315,95316,95318,95320,95322,95324,95326,95328,95330,95332],{"class":81,"line":167},[79,95317,13109],{"class":239},[79,95319,244],{"class":243},[79,95321,95301],{"class":239},[79,95323,1188],{"class":96},[79,95325,1060],{"class":239},[79,95327,1049],{"class":96},[79,95329,1060],{"class":239},[79,95331,2668],{"class":96},[79,95333,1243],{"class":239},[79,95335,95336],{"class":81,"line":178},[79,95337,454],{"emptyLinePlaceholder":453},[79,95339,95340,95342,95345],{"class":81,"line":457},[79,95341,32541],{"class":96},[79,95343,95344],{"class":239},"(np.maximum(a, b))   ",[79,95346,95347],{"class":2440},"# [3 5 4]，每个位置上取较大值\n",[14,95349,95351],{"id":95350},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95353,95354],{},"①一维数组：",[51,95356,95358],{"className":230,"code":95357,"language":232,"meta":57,"style":57},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[59,95359,95360,95364,95384,95389],{"__ignoreMap":57},[79,95361,95362],{"class":81,"line":82},[79,95363,95210],{"class":2440},[79,95365,95366,95368,95370,95372,95374,95376,95378,95380,95382],{"class":81,"line":167},[79,95367,2614],{"class":239},[79,95369,244],{"class":243},[79,95371,95219],{"class":239},[79,95373,1072],{"class":96},[79,95375,2752],{"class":239},[79,95377,2686],{"class":96},[79,95379,2752],{"class":239},[79,95381,3073],{"class":96},[79,95383,253],{"class":239},[79,95385,95386],{"class":81,"line":178},[79,95387,95388],{"class":2440},"#求平均值\n",[79,95390,95391],{"class":81,"line":457},[79,95392,95393],{"class":239},"np.mean(a)\n",[19,95395,95396],{},"②二维数组",[51,95398,95400],{"className":230,"code":95399,"language":232,"meta":57,"style":57},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[59,95401,95402,95407,95432,95437],{"__ignoreMap":57},[79,95403,95404],{"class":81,"line":82},[79,95405,95406],{"class":2440},"#二维数组\n",[79,95408,95409,95412,95414,95416,95418,95420,95422,95424,95426,95428,95430],{"class":81,"line":167},[79,95410,95411],{"class":239},"aa",[79,95413,244],{"class":243},[79,95415,95107],{"class":239},[79,95417,1072],{"class":96},[79,95419,2752],{"class":239},[79,95421,2897],{"class":96},[79,95423,95112],{"class":239},[79,95425,1188],{"class":96},[79,95427,2752],{"class":239},[79,95429,2668],{"class":96},[79,95431,253],{"class":239},[79,95433,95434],{"class":81,"line":178},[79,95435,95436],{"class":2440},"#对数组中的所有数求平均\n",[79,95438,95439],{"class":81,"line":457},[79,95440,95441],{"class":239},"np.mean(aa)\n",[14,95443,95445],{"id":95444},"_114-median求中位数函数","11.4 median()求中位数函数",[51,95447,95449],{"className":230,"code":95448,"language":232,"meta":57,"style":57},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[59,95450,95451,95456,95472,95477],{"__ignoreMap":57},[79,95452,95453],{"class":81,"line":82},[79,95454,95455],{"class":2440},"#求中位数\n",[79,95457,95458,95460,95462,95464,95466,95468,95470],{"class":81,"line":167},[79,95459,2638],{"class":239},[79,95461,244],{"class":243},[79,95463,95107],{"class":239},[79,95465,1072],{"class":96},[79,95467,2752],{"class":239},[79,95469,2820],{"class":96},[79,95471,253],{"class":239},[79,95473,95474],{"class":81,"line":178},[79,95475,95476],{"class":239},"np.median(b)\n",[79,95478,95479],{"class":81,"line":457},[79,95480,95481],{"class":2440},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95483,95485],{"id":95484},"_115-power求幂运算函数","11.5 power()求幂运算函数",[51,95487,95489],{"className":230,"code":95488,"language":232,"meta":57,"style":57},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[59,95490,95491,95507,95512,95517,95526,95531,95540],{"__ignoreMap":57},[79,95492,95493,95495,95497,95499,95501,95503,95505],{"class":81,"line":82},[79,95494,2638],{"class":239},[79,95496,244],{"class":243},[79,95498,95107],{"class":239},[79,95500,1072],{"class":96},[79,95502,2752],{"class":239},[79,95504,2820],{"class":96},[79,95506,253],{"class":239},[79,95508,95509],{"class":81,"line":167},[79,95510,95511],{"class":2440},"#幂运算\n",[79,95513,95514],{"class":81,"line":178},[79,95515,95516],{"class":2440},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[79,95518,95519,95522,95524],{"class":81,"line":457},[79,95520,95521],{"class":239},"np.power(b,",[79,95523,1049],{"class":96},[79,95525,253],{"class":239},[79,95527,95528],{"class":81,"line":462},[79,95529,95530],{"class":2440},"#或者以下代码，将数据存储起来\n",[79,95532,95533,95535,95537],{"class":81,"line":474},[79,95534,3218],{"class":239},[79,95536,244],{"class":243},[79,95538,95539],{"class":239},"np.empty_like(b)\n",[79,95541,95542,95544,95546,95548,95550,95552],{"class":81,"line":480},[79,95543,95521],{"class":239},[79,95545,1049],{"class":96},[79,95547,2752],{"class":239},[79,95549,95159],{"class":7412},[79,95551,244],{"class":243},[79,95553,95554],{"class":239},"y)\n",[14,95556,95558],{"id":95557},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[51,95560,95562],{"className":230,"code":95561,"language":232,"meta":57,"style":57},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[59,95563,95564,95580,95585,95590,95594,95612],{"__ignoreMap":57},[79,95565,95566,95568,95570,95572,95574,95576,95578],{"class":81,"line":82},[79,95567,2638],{"class":239},[79,95569,244],{"class":243},[79,95571,95107],{"class":239},[79,95573,1072],{"class":96},[79,95575,2752],{"class":239},[79,95577,2820],{"class":96},[79,95579,253],{"class":239},[79,95581,95582],{"class":81,"line":167},[79,95583,95584],{"class":2440},"#开方\n",[79,95586,95587],{"class":81,"line":178},[79,95588,95589],{"class":239},"np.sqrt(b)\n",[79,95591,95592],{"class":81,"line":457},[79,95593,95530],{"class":2440},[79,95595,95596,95598,95600,95603,95606,95608,95610],{"class":81,"line":462},[79,95597,3218],{"class":239},[79,95599,244],{"class":243},[79,95601,95602],{"class":239},"np.empty_like(b,",[79,95604,95605],{"class":7412},"dtype",[79,95607,244],{"class":243},[79,95609,797],{"class":96},[79,95611,253],{"class":239},[79,95613,95614,95617,95619,95621],{"class":81,"line":474},[79,95615,95616],{"class":239},"np.sqrt(b,",[79,95618,95159],{"class":7412},[79,95620,244],{"class":243},[79,95622,95554],{"class":239},[14,95624,95626],{"id":95625},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95628,95629],{},"对数组中的元素累计求和，可指定轴",[19,95631,95632],{},"#累计求和的意思是：",[19,95634,95635],{},"a = np.array([1, 2, 3, 4])",[19,95637,95638],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[51,95640,95642],{"className":230,"code":95641,"language":232,"meta":57,"style":57},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[59,95643,95644,95660,95665,95670],{"__ignoreMap":57},[79,95645,95646,95648,95650,95652,95654,95656,95658],{"class":81,"line":82},[79,95647,2638],{"class":239},[79,95649,244],{"class":243},[79,95651,95107],{"class":239},[79,95653,1072],{"class":96},[79,95655,2752],{"class":239},[79,95657,2820],{"class":96},[79,95659,253],{"class":239},[79,95661,95662],{"class":81,"line":167},[79,95663,95664],{"class":239},"np.cumsum(b)\n",[79,95666,95667],{"class":81,"line":178},[79,95668,95669],{"class":2440},"#结果：\n",[79,95671,95672],{"class":81,"line":457},[79,95673,95674],{"class":2440},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95676,95678],{"id":95677},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[51,95680,95682],{"className":230,"code":95681,"language":232,"meta":57,"style":57},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[59,95683,95684,95700,95705,95710,95714],{"__ignoreMap":57},[79,95685,95686,95688,95690,95692,95694,95696,95698],{"class":81,"line":82},[79,95687,2638],{"class":239},[79,95689,244],{"class":243},[79,95691,95107],{"class":239},[79,95693,1072],{"class":96},[79,95695,2752],{"class":239},[79,95697,2820],{"class":96},[79,95699,253],{"class":239},[79,95701,95702],{"class":81,"line":167},[79,95703,95704],{"class":2440},"#对数组中的元素累计求积，可指定轴\n",[79,95706,95707],{"class":81,"line":178},[79,95708,95709],{"class":239},"np.cumprod(b)\n",[79,95711,95712],{"class":81,"line":457},[79,95713,95669],{"class":2440},[79,95715,95716],{"class":81,"line":462},[79,95717,95718],{"class":2440},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95720,95722],{"id":95721},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[51,95724,95726],{"className":230,"code":95725,"language":232,"meta":57,"style":57},"#删除数组中的重复数据，并对数据进行排序\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",[59,95727,95728,95733,95781,95786,95790],{"__ignoreMap":57},[79,95729,95730],{"class":81,"line":82},[79,95731,95732],{"class":2440},"#删除数组中的重复数据，并对数据进行排序\n",[79,95734,95735,95737,95739,95741,95743,95745,95747,95749,95751,95753,95755,95757,95759,95761,95763,95765,95767,95769,95771,95773,95775,95777,95779],{"class":81,"line":167},[79,95736,2614],{"class":239},[79,95738,244],{"class":243},[79,95740,95129],{"class":239},[79,95742,1072],{"class":96},[79,95744,2752],{"class":239},[79,95746,1049],{"class":96},[79,95748,2752],{"class":239},[79,95750,1188],{"class":96},[79,95752,2752],{"class":239},[79,95754,2872],{"class":96},[79,95756,2752],{"class":239},[79,95758,1188],{"class":96},[79,95760,2752],{"class":239},[79,95762,2820],{"class":96},[79,95764,2752],{"class":239},[79,95766,2575],{"class":96},[79,95768,2752],{"class":239},[79,95770,1030],{"class":96},[79,95772,2752],{"class":239},[79,95774,3148],{"class":96},[79,95776,2752],{"class":239},[79,95778,2668],{"class":96},[79,95780,1243],{"class":239},[79,95782,95783],{"class":81,"line":178},[79,95784,95785],{"class":239},"np.unique(a)\n",[79,95787,95788],{"class":81,"line":457},[79,95789,95669],{"class":2440},[79,95791,95792],{"class":81,"line":462},[79,95793,95794],{"class":2440},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95796,95797],{},"升序形式排序",[14,95799,95801],{"id":95800},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[51,95803,95805],{"className":230,"code":95804,"language":232,"meta":57,"style":57},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[59,95806,95807,95855,95860],{"__ignoreMap":57},[79,95808,95809,95811,95813,95815,95817,95819,95821,95823,95825,95827,95829,95831,95833,95835,95837,95839,95841,95843,95845,95847,95849,95851,95853],{"class":81,"line":82},[79,95810,2614],{"class":239},[79,95812,244],{"class":243},[79,95814,95129],{"class":239},[79,95816,1072],{"class":96},[79,95818,2752],{"class":239},[79,95820,1049],{"class":96},[79,95822,2752],{"class":239},[79,95824,1188],{"class":96},[79,95826,2752],{"class":239},[79,95828,2872],{"class":96},[79,95830,2752],{"class":239},[79,95832,1188],{"class":96},[79,95834,2752],{"class":239},[79,95836,2820],{"class":96},[79,95838,2752],{"class":239},[79,95840,2575],{"class":96},[79,95842,2752],{"class":239},[79,95844,1030],{"class":96},[79,95846,2752],{"class":239},[79,95848,3148],{"class":96},[79,95850,2752],{"class":239},[79,95852,2668],{"class":96},[79,95854,1243],{"class":239},[79,95856,95857],{"class":81,"line":167},[79,95858,95859],{"class":2440},"#返回数组中非零元素的索引\n",[79,95861,95862],{"class":81,"line":178},[79,95863,95864],{"class":239},"np.nonzero(a)\n",[14,95866,95868],{"id":95867},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[51,95870,95872],{"className":230,"code":95871,"language":232,"meta":57,"style":57},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[59,95873,95874,95922,95927],{"__ignoreMap":57},[79,95875,95876,95878,95880,95882,95884,95886,95888,95890,95892,95894,95896,95898,95900,95902,95904,95906,95908,95910,95912,95914,95916,95918,95920],{"class":81,"line":82},[79,95877,2614],{"class":239},[79,95879,244],{"class":243},[79,95881,95129],{"class":239},[79,95883,1072],{"class":96},[79,95885,2752],{"class":239},[79,95887,1049],{"class":96},[79,95889,2752],{"class":239},[79,95891,1188],{"class":96},[79,95893,2752],{"class":239},[79,95895,2872],{"class":96},[79,95897,2752],{"class":239},[79,95899,1188],{"class":96},[79,95901,2752],{"class":239},[79,95903,2820],{"class":96},[79,95905,2752],{"class":239},[79,95907,2575],{"class":96},[79,95909,2752],{"class":239},[79,95911,1030],{"class":96},[79,95913,2752],{"class":239},[79,95915,3148],{"class":96},[79,95917,2752],{"class":239},[79,95919,2668],{"class":96},[79,95921,1243],{"class":239},[79,95923,95924],{"class":81,"line":167},[79,95925,95926],{"class":2440},"#计算一组数中最大值与最小值的差，可指定轴\n",[79,95928,95929],{"class":81,"line":178},[79,95930,95931],{"class":239},"np.ptp(a)\n",[2287,95933,95934],{},"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":57,"searchDepth":167,"depth":167,"links":95936},[95937,95938,95939,95940,95941,95942,95943,95944,95945,95946,95947],{"id":95199,"depth":167,"text":95200},{"id":95242,"depth":167,"text":95243},{"id":95350,"depth":167,"text":95351},{"id":95444,"depth":167,"text":95445},{"id":95484,"depth":167,"text":95485},{"id":95557,"depth":167,"text":95558},{"id":95625,"depth":167,"text":95626},{"id":95677,"depth":167,"text":95678},{"id":95721,"depth":167,"text":95722},{"id":95800,"depth":167,"text":95801},{"id":95867,"depth":167,"text":95868},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95185,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95954,"title":95955,"body":95956,"description":25516,"extension":2314,"meta":96611,"navigation":453,"path":96612,"seo":96613,"stem":96614,"__hash__":96615},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95957,"toc":96599},[95958,95961,95965,95968,96184,96188,96191,96400,96404,96470,96475,96479,96482,96485,96523,96527,96530,96535,96539,96542,96545,96550,96554,96557,96561,96564,96567,96572,96576,96579,96582,96587,96591,96596],[10,95959,95955],{"id":95960},"_12其他常用函数",[14,95962,95964],{"id":95963},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95966,95967],{},"将数组的数据按照行列复制扩展",[51,95969,95971],{"className":230,"code":95970,"language":232,"meta":57,"style":57},"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",[59,95972,95973,95989,95998,96002,96007,96012,96025,96029,96034,96039,96044,96048,96053,96077,96089,96093,96097,96102,96107,96112,96117,96121,96134,96138,96142,96147,96152,96157,96162,96167,96171,96175,96180],{"__ignoreMap":57},[79,95974,95975,95977,95979,95981,95983,95985,95987],{"class":81,"line":82},[79,95976,2614],{"class":239},[79,95978,244],{"class":243},[79,95980,95107],{"class":239},[79,95982,1072],{"class":96},[79,95984,2752],{"class":239},[79,95986,2694],{"class":96},[79,95988,253],{"class":239},[79,95990,95991,95994,95996],{"class":81,"line":167},[79,95992,95993],{"class":239},"np.tile(a,",[79,95995,1049],{"class":96},[79,95997,253],{"class":239},[79,95999,96000],{"class":81,"line":178},[79,96001,95669],{"class":2440},[79,96003,96004],{"class":81,"line":457},[79,96005,96006],{"class":2440},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[79,96008,96009],{"class":81,"line":462},[79,96010,96011],{"class":2440},"#行复制两次，列复制三次\n",[79,96013,96014,96017,96019,96021,96023],{"class":81,"line":474},[79,96015,96016],{"class":239},"np.tile(a,(",[79,96018,1049],{"class":96},[79,96020,2752],{"class":239},[79,96022,1188],{"class":96},[79,96024,1191],{"class":239},[79,96026,96027],{"class":81,"line":480},[79,96028,95669],{"class":2440},[79,96030,96031],{"class":81,"line":486},[79,96032,96033],{"class":89},"'''\n",[79,96035,96036],{"class":81,"line":491},[79,96037,96038],{"class":89},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[79,96040,96041],{"class":81,"line":497},[79,96042,96043],{"class":89},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[79,96045,96046],{"class":81,"line":503},[79,96047,96033],{"class":89},[79,96049,96050],{"class":81,"line":509},[79,96051,96052],{"class":2440},"#创建二维数组\n",[79,96054,96055,96057,96059,96061,96063,96065,96067,96069,96071,96073,96075],{"class":81,"line":514},[79,96056,95411],{"class":239},[79,96058,244],{"class":243},[79,96060,95107],{"class":239},[79,96062,1072],{"class":96},[79,96064,2752],{"class":239},[79,96066,2897],{"class":96},[79,96068,95112],{"class":239},[79,96070,2668],{"class":96},[79,96072,2752],{"class":239},[79,96074,1188],{"class":96},[79,96076,253],{"class":239},[79,96078,96079,96082,96084,96086],{"class":81,"line":520},[79,96080,96081],{"class":239},"np.tile(aa,",[79,96083,1049],{"class":96},[79,96085,2803],{"class":239},[79,96087,96088],{"class":2440},"#一个数的时候就是行\n",[79,96090,96091],{"class":81,"line":526},[79,96092,95669],{"class":2440},[79,96094,96095],{"class":81,"line":532},[79,96096,96033],{"class":89},[79,96098,96099],{"class":81,"line":537},[79,96100,96101],{"class":89},"array([[ 1,  2,  3,  1,  2,  3],\n",[79,96103,96104],{"class":81,"line":543},[79,96105,96106],{"class":89},"       [ 4,  5,  6,  4,  5,  6],\n",[79,96108,96109],{"class":81,"line":549},[79,96110,96111],{"class":89},"       [ 7,  8,  9,  7,  8,  9],\n",[79,96113,96114],{"class":81,"line":555},[79,96115,96116],{"class":89},"       [10, 11, 12, 10, 11, 12]])\n",[79,96118,96119],{"class":81,"line":561},[79,96120,96033],{"class":89},[79,96122,96123,96126,96128,96130,96132],{"class":81,"line":567},[79,96124,96125],{"class":239},"np.tile(aa,(",[79,96127,1049],{"class":96},[79,96129,2752],{"class":239},[79,96131,1188],{"class":96},[79,96133,1191],{"class":239},[79,96135,96136],{"class":81,"line":573},[79,96137,95669],{"class":2440},[79,96139,96140],{"class":81,"line":579},[79,96141,96033],{"class":89},[79,96143,96144],{"class":81,"line":584},[79,96145,96146],{"class":89},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[79,96148,96149],{"class":81,"line":590},[79,96150,96151],{"class":89},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[79,96153,96154],{"class":81,"line":596},[79,96155,96156],{"class":89},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[79,96158,96159],{"class":81,"line":602},[79,96160,96161],{"class":89},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[79,96163,96164],{"class":81,"line":608},[79,96165,96166],{"class":89},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[79,96168,96169],{"class":81,"line":614},[79,96170,96151],{"class":89},[79,96172,96173],{"class":81,"line":620},[79,96174,96156],{"class":89},[79,96176,96177],{"class":81,"line":625},[79,96178,96179],{"class":89},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[79,96181,96182],{"class":81,"line":630},[79,96183,96033],{"class":89},[14,96185,96187],{"id":96186},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,96189,96190],{},"repeat()将数组中的每个元素重复若干次",[51,96192,96194],{"className":230,"code":96193,"language":232,"meta":57,"style":57},"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",[59,96195,96196,96212,96221,96225,96230,96254,96259,96268,96272,96277,96281,96286,96302,96306,96310,96315,96320,96325,96329,96334,96338,96343,96348,96352,96368,96372,96376,96381,96386,96391,96396],{"__ignoreMap":57},[79,96197,96198,96200,96202,96204,96206,96208,96210],{"class":81,"line":82},[79,96199,2614],{"class":239},[79,96201,244],{"class":243},[79,96203,95107],{"class":239},[79,96205,1072],{"class":96},[79,96207,2752],{"class":239},[79,96209,2694],{"class":96},[79,96211,253],{"class":239},[79,96213,96214,96217,96219],{"class":81,"line":167},[79,96215,96216],{"class":239},"np.repeat(a,",[79,96218,1188],{"class":96},[79,96220,253],{"class":239},[79,96222,96223],{"class":81,"line":178},[79,96224,95669],{"class":2440},[79,96226,96227],{"class":81,"line":457},[79,96228,96229],{"class":2440},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[79,96231,96232,96234,96236,96238,96240,96242,96244,96246,96248,96250,96252],{"class":81,"line":462},[79,96233,95411],{"class":239},[79,96235,244],{"class":243},[79,96237,95107],{"class":239},[79,96239,1072],{"class":96},[79,96241,2752],{"class":239},[79,96243,2897],{"class":96},[79,96245,95112],{"class":239},[79,96247,2668],{"class":96},[79,96249,2752],{"class":239},[79,96251,1188],{"class":96},[79,96253,253],{"class":239},[79,96255,96256],{"class":81,"line":474},[79,96257,96258],{"class":2440},"#这个重复之后二维变成一维\n",[79,96260,96261,96264,96266],{"class":81,"line":480},[79,96262,96263],{"class":239},"np.repeat(aa,",[79,96265,1049],{"class":96},[79,96267,253],{"class":239},[79,96269,96270],{"class":81,"line":486},[79,96271,96033],{"class":89},[79,96273,96274],{"class":81,"line":491},[79,96275,96276],{"class":89},"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",[79,96278,96279],{"class":81,"line":497},[79,96280,96033],{"class":89},[79,96282,96283],{"class":81,"line":503},[79,96284,96285],{"class":2440},"#指定axis\n",[79,96287,96288,96290,96292,96294,96296,96298,96300],{"class":81,"line":509},[79,96289,96263],{"class":239},[79,96291,1049],{"class":96},[79,96293,2752],{"class":239},[79,96295,49628],{"class":7412},[79,96297,244],{"class":243},[79,96299,1030],{"class":96},[79,96301,253],{"class":239},[79,96303,96304],{"class":81,"line":514},[79,96305,95669],{"class":2440},[79,96307,96308],{"class":81,"line":520},[79,96309,96033],{"class":89},[79,96311,96312],{"class":81,"line":526},[79,96313,96314],{"class":89},"array([[ 1,  2,  3],\n",[79,96316,96317],{"class":81,"line":532},[79,96318,96319],{"class":89},"       [ 1,  2,  3],\n",[79,96321,96322],{"class":81,"line":537},[79,96323,96324],{"class":89},"       [ 4,  5,  6],\n",[79,96326,96327],{"class":81,"line":543},[79,96328,96324],{"class":89},[79,96330,96331],{"class":81,"line":549},[79,96332,96333],{"class":89},"       [ 7,  8,  9],\n",[79,96335,96336],{"class":81,"line":555},[79,96337,96333],{"class":89},[79,96339,96340],{"class":81,"line":561},[79,96341,96342],{"class":89},"       [10, 11, 12],\n",[79,96344,96345],{"class":81,"line":567},[79,96346,96347],{"class":89},"       [10, 11, 12]])\n",[79,96349,96350],{"class":81,"line":573},[79,96351,96033],{"class":89},[79,96353,96354,96356,96358,96360,96362,96364,96366],{"class":81,"line":579},[79,96355,96263],{"class":239},[79,96357,1049],{"class":96},[79,96359,2752],{"class":239},[79,96361,49628],{"class":7412},[79,96363,244],{"class":243},[79,96365,1072],{"class":96},[79,96367,253],{"class":239},[79,96369,96370],{"class":81,"line":584},[79,96371,95669],{"class":2440},[79,96373,96374],{"class":81,"line":590},[79,96375,96033],{"class":89},[79,96377,96378],{"class":81,"line":596},[79,96379,96380],{"class":89},"array([[ 1,  1,  2,  2,  3,  3],\n",[79,96382,96383],{"class":81,"line":602},[79,96384,96385],{"class":89},"       [ 4,  4,  5,  5,  6,  6],\n",[79,96387,96388],{"class":81,"line":608},[79,96389,96390],{"class":89},"       [ 7,  7,  8,  8,  9,  9],\n",[79,96392,96393],{"class":81,"line":614},[79,96394,96395],{"class":89},"       [10, 10, 11, 11, 12, 12]])\n",[79,96397,96398],{"class":81,"line":620},[79,96399,96033],{"class":89},[14,96401,96403],{"id":96402},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[51,96405,96407],{"className":230,"code":96406,"language":232,"meta":57,"style":57},"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",[59,96408,96409,96425,96430,96442,96446,96451,96461,96465],{"__ignoreMap":57},[79,96410,96411,96413,96415,96417,96419,96421,96423],{"class":81,"line":82},[79,96412,2614],{"class":239},[79,96414,244],{"class":243},[79,96416,95107],{"class":239},[79,96418,1072],{"class":96},[79,96420,2752],{"class":239},[79,96422,2694],{"class":96},[79,96424,253],{"class":239},[79,96426,96427],{"class":81,"line":167},[79,96428,96429],{"class":2440},"#array([，2，3，4])\n",[79,96431,96432,96435,96437,96439],{"class":81,"line":178},[79,96433,96434],{"class":239},"np.roll(a,",[79,96436,1049],{"class":96},[79,96438,2803],{"class":239},[79,96440,96441],{"class":2440},"#传正数向后调多少位，传负数向前调多少位\n",[79,96443,96444],{"class":81,"line":457},[79,96445,95669],{"class":2440},[79,96447,96448],{"class":81,"line":462},[79,96449,96450],{"class":2440},"#array([3, 4, 1, 2])\n",[79,96452,96453,96455,96457,96459],{"class":81,"line":474},[79,96454,96434],{"class":239},[79,96456,320],{"class":243},[79,96458,1072],{"class":96},[79,96460,253],{"class":239},[79,96462,96463],{"class":81,"line":480},[79,96464,95669],{"class":2440},[79,96466,96467],{"class":81,"line":486},[79,96468,96469],{"class":2440},"#array([2, 3, 4, 1])\n",[19,96471,96472],{},[3699,96473],{"alt":57,"src":96474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96476,96478],{"id":96477},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96480,96481],{},"resize()重新调整数组的大小",[19,96483,96484],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[51,96486,96488],{"className":230,"code":96487,"language":232,"meta":57,"style":57},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[59,96489,96490,96495,96508],{"__ignoreMap":57},[79,96491,96492],{"class":81,"line":82},[79,96493,96494],{"class":2440},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[79,96496,96497,96500,96502,96504,96506],{"class":81,"line":167},[79,96498,96499],{"class":239},"np.resize(aa,(",[79,96501,1049],{"class":96},[79,96503,2752],{"class":239},[79,96505,2718],{"class":96},[79,96507,1191],{"class":239},[79,96509,96510,96512,96514,96516,96518,96520],{"class":81,"line":178},[79,96511,96499],{"class":239},[79,96513,1049],{"class":96},[79,96515,2752],{"class":239},[79,96517,2794],{"class":96},[79,96519,84876],{"class":239},[79,96521,96522],{"class":2440},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96524,96526],{"id":96525},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96528,96529],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96531,96532],{},[3699,96533],{"alt":57,"src":96534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96536,96538],{"id":96537},"_126-保存加载文件","12.6 保存加载文件",[19,96540,96541],{},"savetxt():将数据保存到txt文件中",[19,96543,96544],{},"loadtxt():从文件加载数据",[19,96546,96547],{},[3699,96548],{"alt":57,"src":96549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96551,96553],{"id":96552},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96555,96556],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96558,96560],{"id":96559},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96562,96563],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96565,96566],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96568,96569],{},[3699,96570],{"alt":57,"src":96571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96573,96575],{"id":96574},"_129-where语句","12.9 where语句",[19,96577,96578],{},"np.where(条件,x,y)",[19,96580,96581],{},"如果条件为True,对应值为x,否则对应值为y",[19,96583,96584],{},[3699,96585],{"alt":57,"src":96586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96588,96590],{"id":96589},"_1210-dot矩阵","12.10 dot()矩阵",[19,96592,96593],{},[3699,96594],{"alt":57,"src":96595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[2287,96597,96598],{},"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":57,"searchDepth":167,"depth":167,"links":96600},[96601,96602,96603,96604,96605,96606,96607,96608,96609,96610],{"id":95963,"depth":167,"text":95964},{"id":96186,"depth":167,"text":96187},{"id":96402,"depth":167,"text":96403},{"id":96477,"depth":167,"text":96478},{"id":96525,"depth":167,"text":96526},{"id":96537,"depth":167,"text":96538},{"id":96552,"depth":167,"text":96553},{"id":96559,"depth":167,"text":96560},{"id":96574,"depth":167,"text":96575},{"id":96589,"depth":167,"text":96590},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95955,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96617,"title":96618,"body":96619,"description":25516,"extension":2314,"meta":96972,"navigation":453,"path":96973,"seo":96974,"stem":96975,"__hash__":96976},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96620,"toc":96970},[96621,96624,96627,96630,96633,96636,96701,96703,96967],[10,96622,96618],{"id":96623},"_13数组排序",[19,96625,96626],{},"排序主要用到的方法是np.sort和np.argsort",[19,96628,96629],{},"其中np.sort()对数组直接排序",[19,96631,96632],{},"而np.argsort()是返回排序后的原始索引",[19,96634,96635],{},"①一维数组",[51,96637,96639],{"className":230,"code":96638,"language":232,"meta":57,"style":57},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[59,96640,96641,96645,96685,96693],{"__ignoreMap":57},[79,96642,96643],{"class":81,"line":82},[79,96644,95210],{"class":2440},[79,96646,96647,96649,96651,96653,96655,96657,96659,96661,96663,96665,96667,96669,96671,96673,96675,96677,96679,96681,96683],{"class":81,"line":167},[79,96648,2614],{"class":239},[79,96650,244],{"class":243},[79,96652,95129],{"class":239},[79,96654,1188],{"class":96},[79,96656,2752],{"class":239},[79,96658,2872],{"class":96},[79,96660,2752],{"class":239},[79,96662,2769],{"class":96},[79,96664,2752],{"class":239},[79,96666,3148],{"class":96},[79,96668,2752],{"class":239},[79,96670,2654],{"class":96},[79,96672,2752],{"class":239},[79,96674,3266],{"class":96},[79,96676,2752],{"class":239},[79,96678,2718],{"class":96},[79,96680,2752],{"class":239},[79,96682,2820],{"class":96},[79,96684,1243],{"class":239},[79,96686,96687,96690],{"class":81,"line":178},[79,96688,96689],{"class":239},"np.sort(a)",[79,96691,96692],{"class":2440},"#升序排序\n",[79,96694,96695,96698],{"class":81,"line":457},[79,96696,96697],{"class":239},"np.argsort(a)",[79,96699,96700],{"class":2440},"#按照元素大小来索引排序\n",[19,96702,95396],{},[51,96704,96706],{"className":230,"code":96705,"language":232,"meta":57,"style":57},"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",[59,96707,96708,96720,96746,96751,96755,96760,96765,96770,96775,96779,96787,96791,96796,96801,96806,96811,96815,96820,96833,96837,96842,96847,96852,96857,96861,96866,96878,96882,96886,96890,96894,96898,96902,96907,96922,96927,96936,96941,96945,96949,96954,96958,96963],{"__ignoreMap":57},[79,96709,96710,96713,96715,96717],{"class":81,"line":82},[79,96711,96712],{"class":239},"np.random.seed(",[79,96714,1030],{"class":96},[79,96716,2803],{"class":239},[79,96718,96719],{"class":2440},"#保证每次值一样\n",[79,96721,96722,96724,96726,96728,96730,96732,96734,96736,96738,96740,96742,96744],{"class":81,"line":167},[79,96723,95411],{"class":239},[79,96725,244],{"class":243},[79,96727,95219],{"class":239},[79,96729,2686],{"class":96},[79,96731,2752],{"class":239},[79,96733,33615],{"class":7412},[79,96735,244],{"class":243},[79,96737,685],{"class":239},[79,96739,2668],{"class":96},[79,96741,2752],{"class":239},[79,96743,2718],{"class":96},[79,96745,1191],{"class":239},[79,96747,96748],{"class":81,"line":178},[79,96749,96750],{"class":2440},"#原数组：\n",[79,96752,96753],{"class":81,"line":457},[79,96754,96033],{"class":89},[79,96756,96757],{"class":81,"line":462},[79,96758,96759],{"class":89},"array([[44, 47, 64, 67, 67,  9],\n",[79,96761,96762],{"class":81,"line":474},[79,96763,96764],{"class":89},"       [83, 21, 36, 87, 70, 88],\n",[79,96766,96767],{"class":81,"line":480},[79,96768,96769],{"class":89},"       [88, 12, 58, 65, 39, 87],\n",[79,96771,96772],{"class":81,"line":486},[79,96773,96774],{"class":89},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[79,96776,96777],{"class":81,"line":491},[79,96778,96033],{"class":89},[79,96780,96781,96784],{"class":81,"line":497},[79,96782,96783],{"class":239},"np.sort(aa)",[79,96785,96786],{"class":2440},"#每行进行了排序\n",[79,96788,96789],{"class":81,"line":503},[79,96790,96033],{"class":89},[79,96792,96793],{"class":81,"line":509},[79,96794,96795],{"class":89},"array([[ 9, 44, 47, 64, 67, 67],\n",[79,96797,96798],{"class":81,"line":514},[79,96799,96800],{"class":89},"       [21, 36, 70, 83, 87, 88],\n",[79,96802,96803],{"class":81,"line":520},[79,96804,96805],{"class":89},"       [12, 39, 58, 65, 87, 88],\n",[79,96807,96808],{"class":81,"line":526},[79,96809,96810],{"class":89},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[79,96812,96813],{"class":81,"line":532},[79,96814,96033],{"class":89},[79,96816,96817],{"class":81,"line":537},[79,96818,96819],{"class":2440},"#axis=0时\n",[79,96821,96822,96825,96827,96829,96831],{"class":81,"line":543},[79,96823,96824],{"class":239},"np.sort(aa,",[79,96826,49628],{"class":7412},[79,96828,244],{"class":243},[79,96830,1030],{"class":96},[79,96832,253],{"class":239},[79,96834,96835],{"class":81,"line":549},[79,96836,96033],{"class":89},[79,96838,96839],{"class":81,"line":555},[79,96840,96841],{"class":89},"array([[44, 12, 36, 37, 25,  9],\n",[79,96843,96844],{"class":81,"line":561},[79,96845,96846],{"class":89},"       [46, 21, 58, 65, 39, 77],\n",[79,96848,96849],{"class":81,"line":567},[79,96850,96851],{"class":89},"       [83, 47, 64, 67, 67, 87],\n",[79,96853,96854],{"class":81,"line":573},[79,96855,96856],{"class":89},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[79,96858,96859],{"class":81,"line":579},[79,96860,96033],{"class":89},[79,96862,96863],{"class":81,"line":584},[79,96864,96865],{"class":2440},"#axis=1时,为默认值\n",[79,96867,96868,96870,96872,96874,96876],{"class":81,"line":590},[79,96869,96824],{"class":239},[79,96871,49628],{"class":7412},[79,96873,244],{"class":243},[79,96875,1072],{"class":96},[79,96877,253],{"class":239},[79,96879,96880],{"class":81,"line":596},[79,96881,96033],{"class":89},[79,96883,96884],{"class":81,"line":602},[79,96885,96795],{"class":89},[79,96887,96888],{"class":81,"line":608},[79,96889,96800],{"class":89},[79,96891,96892],{"class":81,"line":614},[79,96893,96805],{"class":89},[79,96895,96896],{"class":81,"line":620},[79,96897,96810],{"class":89},[79,96899,96900],{"class":81,"line":625},[79,96901,96033],{"class":89},[79,96903,96904],{"class":81,"line":630},[79,96905,96906],{"class":2440},"#按最后一列排序\n",[79,96908,96909,96911,96913,96916,96918,96920],{"class":81,"line":648},[79,96910,2638],{"class":239},[79,96912,244],{"class":243},[79,96914,96915],{"class":239},"aa[:,",[79,96917,320],{"class":243},[79,96919,1072],{"class":96},[79,96921,35361],{"class":239},[79,96923,96924],{"class":81,"line":659},[79,96925,96926],{"class":2440},"#获取最后一列排好序的索引\n",[79,96928,96929,96931,96933],{"class":81,"line":676},[79,96930,76166],{"class":239},[79,96932,244],{"class":243},[79,96934,96935],{"class":239},"np.argsort(b)\n",[79,96937,96938],{"class":81,"line":708},[79,96939,96940],{"class":239},"aa[index]\n",[79,96942,96943],{"class":81,"line":717},[79,96944,96033],{"class":89},[79,96946,96947],{"class":81,"line":722},[79,96948,96759],{"class":89},[79,96950,96951],{"class":81,"line":727},[79,96952,96953],{"class":89},"       [46, 88, 81, 37, 25, 77],\n",[79,96955,96956],{"class":81,"line":738},[79,96957,96769],{"class":89},[79,96959,96960],{"class":81,"line":753},[79,96961,96962],{"class":89},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[79,96964,96965],{"class":81,"line":768},[79,96966,96033],{"class":89},[2287,96968,96969],{},"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":57,"searchDepth":167,"depth":167,"links":96971},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96618,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96978,"title":96979,"body":96980,"description":25516,"extension":2314,"meta":97010,"navigation":453,"path":97011,"seo":97012,"stem":97013,"__hash__":97014},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96981,"toc":97008},[96982,96985,96988,96991,96994,96997,97000,97003],[10,96983,96979],{"id":96984},"_14广播机制",[19,96986,96987],{},"广播的规则：",[19,96989,96990],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96992,96993],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96995,96996],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96998,96999],{},"3.如果没有维度形状为1，则会引发异常",[19,97001,97002],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,97004,97005],{},[3699,97006],{"alt":57,"src":97007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":57,"searchDepth":167,"depth":167,"links":97009},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96979,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":97016,"title":97017,"body":97018,"description":25516,"extension":2314,"meta":97116,"navigation":453,"path":97117,"seo":97118,"stem":97119,"__hash__":97120},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":97019,"toc":97114},[97020,97023,97026,97111],[10,97021,97017],{"id":97022},"_15比较掩码",[19,97024,97025],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[51,97027,97029],{"className":230,"code":97028,"language":232,"meta":57,"style":57},"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",[59,97030,97031,97077,97088,97102,97106],{"__ignoreMap":57},[79,97032,97033,97035,97037,97040,97042,97044,97046,97048,97050,97052,97054,97056,97058,97060,97062,97064,97066,97068,97070,97072,97074],{"class":81,"line":82},[79,97034,2614],{"class":239},[79,97036,244],{"class":243},[79,97038,97039],{"class":239},"np.array([[",[79,97041,1072],{"class":96},[79,97043,2752],{"class":239},[79,97045,1049],{"class":96},[79,97047,2752],{"class":239},[79,97049,1188],{"class":96},[79,97051,50144],{"class":239},[79,97053,2846],{"class":96},[79,97055,2752],{"class":239},[79,97057,2872],{"class":96},[79,97059,2752],{"class":239},[79,97061,2897],{"class":96},[79,97063,50144],{"class":239},[79,97065,3098],{"class":96},[79,97067,2752],{"class":239},[79,97069,3123],{"class":96},[79,97071,2752],{"class":239},[79,97073,3148],{"class":96},[79,97075,97076],{"class":239},"]])\n",[79,97078,97079,97081,97083,97085],{"class":81,"line":167},[79,97080,2614],{"class":239},[79,97082,392],{"class":243},[79,97084,3073],{"class":96},[79,97086,97087],{"class":2440},"#结果是一个由True,False组成的数组\n",[79,97089,97090,97093,97095,97097,97099],{"class":81,"line":178},[79,97091,97092],{"class":239},"a[a",[79,97094,392],{"class":243},[79,97096,3073],{"class":96},[79,97098,3311],{"class":239},[79,97100,97101],{"class":2440},"#小于20的元素会存到这个数组中\n",[79,97103,97104],{"class":81,"line":457},[79,97105,95669],{"class":2440},[79,97107,97108],{"class":81,"line":462},[79,97109,97110],{"class":2440},"#array([ 1,  2,  3, 11, 12, 13])\n",[2287,97112,97113],{},"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":57,"searchDepth":167,"depth":167,"links":97115},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":97017,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97122,"title":97123,"body":97124,"description":25516,"extension":2314,"meta":97216,"navigation":453,"path":97217,"seo":97218,"stem":97219,"__hash__":97220},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97125,"toc":97214},[97126,97129,97132,97135,97138,97141,97206,97211],[10,97127,97123],{"id":97128},"_16魔法命令time",[19,97130,97131],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,97133,97134],{},"%:行模式",[19,97136,97137],{},"%%:单元格模式",[19,97139,97140],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[51,97142,97144],{"className":230,"code":97143,"language":232,"meta":57,"style":57},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[59,97145,97146,97151,97158,97163,97172,97185,97189,97197],{"__ignoreMap":57},[79,97147,97148],{"class":81,"line":82},[79,97149,97150],{"class":2440},"#程序执行时间\n",[79,97152,97153,97155],{"class":81,"line":167},[79,97154,432],{"class":243},[79,97156,97157],{"class":239}," time \n",[79,97159,97160],{"class":81,"line":178},[79,97161,97162],{"class":2440},"#获取时间\n",[79,97164,97165,97168,97170],{"class":81,"line":457},[79,97166,97167],{"class":239},"start",[79,97169,244],{"class":243},[79,97171,34534],{"class":239},[79,97173,97174,97177,97180,97182],{"class":81,"line":462},[79,97175,97176],{"class":239},"time.sleep(",[79,97178,97179],{"class":96},"0.4",[79,97181,2803],{"class":239},[79,97183,97184],{"class":2440},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[79,97186,97187],{"class":81,"line":474},[79,97188,97162],{"class":2440},[79,97190,97191,97193,97195],{"class":81,"line":480},[79,97192,47915],{"class":239},[79,97194,244],{"class":243},[79,97196,34534],{"class":239},[79,97198,97199,97201,97203],{"class":81,"line":486},[79,97200,47915],{"class":239},[79,97202,320],{"class":243},[79,97204,97205],{"class":239},"start\n",[19,97207,97208],{},[3699,97209],{"alt":57,"src":97210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[2287,97212,97213],{},"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":57,"searchDepth":167,"depth":167,"links":97215},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97123,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97222,"title":97223,"body":97224,"description":25516,"extension":2314,"meta":97259,"navigation":453,"path":97260,"seo":97261,"stem":97262,"__hash__":97263},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97225,"toc":97257},[97226,97229,97232,97235,97238,97241,97244,97247,97252],[10,97227,97223],{"id":97228},"_17魔法命令timeit",[19,97230,97231],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,97233,97234],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,97236,97237],{},"单元格模式：",[19,97239,97240],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,97242,97243],{},"初始化语句执行次数由轮数来决定",[19,97245,97246],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,97248,97249],{},[3699,97250],{"alt":57,"src":97251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,97253,97254],{},[3699,97255],{"alt":57,"src":97256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":57,"searchDepth":167,"depth":167,"links":97258},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97223,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97265,"title":97266,"body":97267,"description":25516,"extension":2314,"meta":97285,"navigation":453,"path":97286,"seo":97287,"stem":97288,"__hash__":97289},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97268,"toc":97283},[97269,97272,97275,97278],[10,97270,97266],{"id":97271},"_18魔法命令writefile和run",[19,97273,97274],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,97276,97277],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,97279,97280],{},[3699,97281],{"alt":57,"src":97282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":57,"searchDepth":167,"depth":167,"links":97284},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97266,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97291,"title":97292,"body":97293,"description":25516,"extension":2314,"meta":97346,"navigation":453,"path":97347,"seo":97348,"stem":97349,"__hash__":97350},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97294,"toc":97344},[97295,97298,97301,97303,97306,97309,97314,97317,97320,97323,97326,97329,97332,97335,97338,97341],[10,97296,97292],{"id":97297},"_19魔法命令memit",[19,97299,97300],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,97302,26735],{},[19,97304,97305],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,97307,97308],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,97310,97311],{},[3699,97312],{"alt":57,"src":97313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,97315,97316],{},"补充：",[19,97318,97319],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,97321,97322],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,97324,97325],{},"解决方法：",[19,97327,97328],{},"1.cmd",[19,97330,97331],{},"2.依次输入以下代码：",[19,97333,97334],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,97336,97337],{},"pip install --upgrade ipython",[19,97339,97340],{},"#升级 memory_profiler 和 setuptools",[19,97342,97343],{},"pip install --upgrade memory_profiler setuptools",{"title":57,"searchDepth":167,"depth":167,"links":97345},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97292,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97352,"title":97353,"body":97354,"description":25516,"extension":2314,"meta":98998,"navigation":453,"path":98999,"seo":99000,"stem":99001,"__hash__":99002},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97355,"toc":98968},[97356,97359,97363,97367,97428,97431,97436,97440,97445,97450,97455,97460,97463,97468,97472,97476,97509,97512,97515,97518,97570,97573,97609,97612,97654,97658,97679,97681,97718,97720,97725,97727,97732,97736,97739,97767,97771,97775,97826,97830,97922,97926,97930,97933,97938,97942,97967,97972,97976,97979,97982,97985,97988,97991,97994,97997,98009,98013,98017,98020,98052,98055,98078,98081,98107,98110,98136,98139,98173,98176,98238,98242,98245,98249,98252,98278,98281,98284,98289,98292,98361,98363,98368,98429,98432,98443,98449,98454,98458,98461,98474,98478,98493,98495,98518,98520,98546,98549,98552,98555,98603,98605,98610,98614,98618,98645,98649,98676,98679,98684,98689,98779,98783,98841,98846,98849,98852,98894,98898,98954,98959,98962,98965],[10,97357,97353],{"id":97358},"_2创建数组",[14,97360,97362],{"id":97361},"_21-array函数创建数组","2.1 array()函数创建数组",[265,97364,97366],{"id":97365},"_221-函数语句","2.2.1 函数语句",[51,97368,97370],{"className":230,"code":97369,"language":232,"meta":57,"style":57},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[59,97371,97372],{"__ignoreMap":57},[79,97373,97374,97377,97380,97382,97384,97386,97388,97390,97393,97395,97398,97400,97403,97405,97407,97409,97412,97414,97417,97419,97422,97424,97426],{"class":81,"line":82},[79,97375,97376],{"class":239},"numpy.array(",[79,97378,97379],{"class":96},"object",[79,97381,1060],{"class":239},[79,97383,95605],{"class":7412},[79,97385,468],{"class":243},[79,97387,41047],{"class":96},[79,97389,1060],{"class":239},[79,97391,97392],{"class":7412},"copy",[79,97394,468],{"class":243},[79,97396,97397],{"class":96}," True",[79,97399,1060],{"class":239},[79,97401,97402],{"class":7412},"order",[79,97404,468],{"class":243},[79,97406,41047],{"class":96},[79,97408,1060],{"class":239},[79,97410,97411],{"class":7412},"subok",[79,97413,468],{"class":243},[79,97415,97416],{"class":96}," False",[79,97418,1060],{"class":239},[79,97420,97421],{"class":7412},"ndmin",[79,97423,468],{"class":243},[79,97425,670],{"class":96},[79,97427,253],{"class":239},[19,97429,97430],{},"参数：",[19,97432,97433],{},[3699,97434],{"alt":57,"src":97435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[265,97437,97439],{"id":97438},"_222-实例","2.2.2 实例",[19,97441,97442],{},[3699,97443],{"alt":57,"src":97444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97446,97447],{},[3699,97448],{"alt":57,"src":97449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97451,97452],{},[3699,97453],{"alt":57,"src":97454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97456,97457],{},[3699,97458],{"alt":57,"src":97459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97461,97462],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97464,97465],{},[3699,97466],{"alt":57,"src":97467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97469,97471],{"id":97470},"_22-随机数创建数组","2.2 随机数创建数组",[265,97473,97475],{"id":97474},"_221-random语句","2.2.1 random语句",[51,97477,97479],{"className":230,"code":97478,"language":232,"meta":57,"style":57},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[59,97480,97481,97486,97491,97499,97504],{"__ignoreMap":57},[79,97482,97483],{"class":81,"line":82},[79,97484,97485],{"class":2440},"#random.random()\n",[79,97487,97488],{"class":81,"line":167},[79,97489,97490],{"class":2440},"#确定随机种子,就是每次运行结果是相同的\n",[79,97492,97493,97495,97497],{"class":81,"line":178},[79,97494,96712],{"class":239},[79,97496,1030],{"class":96},[79,97498,253],{"class":239},[79,97500,97501],{"class":81,"line":457},[79,97502,97503],{"class":239},"np.random.random()\n",[79,97505,97506],{"class":81,"line":462},[79,97507,97508],{"class":2440},"#生成一个随机的数目\n",[19,97510,97511],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97513,97514],{},"可以指定数组形状 size",[19,97516,97517],{},"①生成一维数组",[51,97519,97521],{"className":230,"code":97520,"language":232,"meta":57,"style":57},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[59,97522,97523,97528,97541,97546,97562],{"__ignoreMap":57},[79,97524,97525],{"class":81,"line":82},[79,97526,97527],{"class":2440},"#random.random(size())\n",[79,97529,97530,97533,97535,97537,97539],{"class":81,"line":167},[79,97531,97532],{"class":239},"np.random.random(",[79,97534,33615],{"class":7412},[79,97536,244],{"class":243},[79,97538,2694],{"class":96},[79,97540,253],{"class":239},[79,97542,97543],{"class":81,"line":178},[79,97544,97545],{"class":2440},"#生成一位的五个元素\n",[79,97547,97548,97550,97552,97554,97556,97558,97560],{"class":81,"line":457},[79,97549,2614],{"class":239},[79,97551,244],{"class":243},[79,97553,97532],{"class":239},[79,97555,33615],{"class":7412},[79,97557,244],{"class":243},[79,97559,2668],{"class":96},[79,97561,253],{"class":239},[79,97563,97564,97567],{"class":81,"line":462},[79,97565,97566],{"class":239},"a.shape ",[79,97568,97569],{"class":2440},"#输出数组形状\n",[19,97571,97572],{},"②生成二维数组",[51,97574,97576],{"className":230,"code":97575,"language":232,"meta":57,"style":57},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[59,97577,97578,97582,97604],{"__ignoreMap":57},[79,97579,97580],{"class":81,"line":82},[79,97581,95406],{"class":2440},[79,97583,97584,97586,97588,97590,97592,97594,97596,97598,97600,97602],{"class":81,"line":167},[79,97585,95411],{"class":239},[79,97587,244],{"class":243},[79,97589,97532],{"class":239},[79,97591,33615],{"class":7412},[79,97593,244],{"class":243},[79,97595,685],{"class":239},[79,97597,2668],{"class":96},[79,97599,2752],{"class":239},[79,97601,2694],{"class":96},[79,97603,1191],{"class":239},[79,97605,97606],{"class":81,"line":178},[79,97607,97608],{"class":2440},"#生成四行五列的数组\n",[19,97610,97611],{},"③生成三维数组",[51,97613,97615],{"className":230,"code":97614,"language":232,"meta":57,"style":57},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[59,97616,97617,97622,97649],{"__ignoreMap":57},[79,97618,97619],{"class":81,"line":82},[79,97620,97621],{"class":2440},"#三维数组\n",[79,97623,97624,97627,97629,97631,97633,97635,97637,97639,97641,97643,97645,97647],{"class":81,"line":167},[79,97625,97626],{"class":239},"aaa",[79,97628,244],{"class":243},[79,97630,97532],{"class":239},[79,97632,33615],{"class":7412},[79,97634,244],{"class":243},[79,97636,685],{"class":239},[79,97638,1049],{"class":96},[79,97640,2752],{"class":239},[79,97642,1188],{"class":96},[79,97644,2752],{"class":239},[79,97646,2668],{"class":96},[79,97648,1191],{"class":239},[79,97650,97651],{"class":81,"line":178},[79,97652,97653],{"class":239},"aaa.shape\n",[265,97655,97657],{"id":97656},"_222-randint语句","2.2.2 randint语句",[51,97659,97661],{"className":230,"code":97660,"language":232,"meta":57,"style":57},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[59,97662,97663,97668],{"__ignoreMap":57},[79,97664,97665],{"class":81,"line":82},[79,97666,97667],{"class":2440},"#生成随机的整数 random.randint(low,high,size)\n",[79,97669,97670,97672,97674,97676],{"class":81,"line":167},[79,97671,95219],{"class":239},[79,97673,2694],{"class":96},[79,97675,15876],{"class":239},[79,97677,97678],{"class":2440},"#0~5中的随机一个数\n",[19,97680,97517],{},[51,97682,97684],{"className":230,"code":97683,"language":232,"meta":57,"style":57},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[59,97685,97686,97691,97713],{"__ignoreMap":57},[79,97687,97688],{"class":81,"line":82},[79,97689,97690],{"class":2440},"#一维\n",[79,97692,97693,97695,97697,97699,97701,97703,97705,97707,97709,97711],{"class":81,"line":167},[79,97694,95219],{"class":239},[79,97696,1072],{"class":96},[79,97698,2752],{"class":239},[79,97700,2846],{"class":96},[79,97702,2752],{"class":239},[79,97704,33615],{"class":7412},[79,97706,244],{"class":243},[79,97708,685],{"class":239},[79,97710,2820],{"class":96},[79,97712,1191],{"class":239},[79,97714,97715],{"class":81,"line":178},[79,97716,97717],{"class":2440},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97719,97572],{},[19,97721,97722],{},[3699,97723],{"alt":57,"src":97724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97726,97611],{},[19,97728,97729],{},[3699,97730],{"alt":57,"src":97731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[265,97733,97735],{"id":97734},"_222-rand语句","2.2.2 rand语句",[19,97737,97738],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[51,97740,97742],{"className":230,"code":97741,"language":232,"meta":57,"style":57},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[59,97743,97744,97757,97762],{"__ignoreMap":57},[79,97745,97746,97749,97751,97753,97755],{"class":81,"line":82},[79,97747,97748],{"class":239},"np.random.rand(",[79,97750,2686],{"class":96},[79,97752,2752],{"class":239},[79,97754,2820],{"class":96},[79,97756,253],{"class":239},[79,97758,97759],{"class":81,"line":167},[79,97760,97761],{"class":2440},"#第一个参数100：行数，表示有100个样本\n",[79,97763,97764],{"class":81,"line":178},[79,97765,97766],{"class":2440},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97768,97770],{"id":97769},"_23-arange创建数组","2.3 arange()创建数组",[265,97772,97774],{"id":97773},"_231-函数语句","2.3.1 函数语句",[51,97776,97778],{"className":230,"code":97777,"language":232,"meta":57,"style":57},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[59,97779,97780,97793,97798,97802,97807,97812,97817,97822],{"__ignoreMap":57},[79,97781,97782,97785,97787,97789,97791],{"class":81,"line":82},[79,97783,97784],{"class":239},"numpy.arange([start,] stop[, step], ",[79,97786,95605],{"class":7412},[79,97788,244],{"class":243},[79,97790,899],{"class":96},[79,97792,253],{"class":239},[79,97794,97795],{"class":81,"line":167},[79,97796,97797],{"class":2440},"#参数\n",[79,97799,97800],{"class":81,"line":178},[79,97801,617],{"class":89},[79,97803,97804],{"class":81,"line":457},[79,97805,97806],{"class":89},"start:起始值，可选，默认从 0 开始。\n",[79,97808,97809],{"class":81,"line":462},[79,97810,97811],{"class":89},"stop:结束值（不包含该值）。\n",[79,97813,97814],{"class":81,"line":474},[79,97815,97816],{"class":89},"step:步长，可选，默认是 1。可以为浮点数。\n",[79,97818,97819],{"class":81,"line":480},[79,97820,97821],{"class":89},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[79,97823,97824],{"class":81,"line":486},[79,97825,617],{"class":89},[265,97827,97829],{"id":97828},"_232-实例","2.3.2 实例",[51,97831,97833],{"className":230,"code":97832,"language":232,"meta":57,"style":57},"#创建一维数组\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",[59,97834,97835,97839,97863,97868,97873,97877,97900,97904,97908,97913,97918],{"__ignoreMap":57},[79,97836,97837],{"class":81,"line":82},[79,97838,95210],{"class":2440},[79,97840,97841,97843,97845,97847,97849,97851,97853,97855,97857,97859,97861],{"class":81,"line":167},[79,97842,95107],{"class":239},[79,97844,1072],{"class":96},[79,97846,2752],{"class":239},[79,97848,3098],{"class":96},[79,97850,2752],{"class":239},[79,97852,1072],{"class":96},[79,97854,2752],{"class":239},[79,97856,95605],{"class":7412},[79,97858,244],{"class":243},[79,97860,2390],{"class":96},[79,97862,253],{"class":239},[79,97864,97865],{"class":81,"line":178},[79,97866,97867],{"class":2440},"#输出结果：\n",[79,97869,97870],{"class":81,"line":457},[79,97871,97872],{"class":2440},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[79,97874,97875],{"class":81,"line":462},[79,97876,96052],{"class":2440},[79,97878,97879,97882,97884,97886,97888,97891,97893,97895,97897],{"class":81,"line":474},[79,97880,97881],{"class":239},"np.array([np.arange(",[79,97883,1072],{"class":96},[79,97885,2752],{"class":239},[79,97887,2668],{"class":96},[79,97889,97890],{"class":239},"),np.arange(",[79,97892,2668],{"class":96},[79,97894,2752],{"class":239},[79,97896,2743],{"class":96},[79,97898,97899],{"class":239},")])\n",[79,97901,97902],{"class":81,"line":480},[79,97903,95669],{"class":2440},[79,97905,97906],{"class":81,"line":486},[79,97907,617],{"class":89},[79,97909,97910],{"class":81,"line":491},[79,97911,97912],{"class":89},"array([[1, 2, 3],\n",[79,97914,97915],{"class":81,"line":497},[79,97916,97917],{"class":89},"       [4, 5, 6]])\n",[79,97919,97920],{"class":81,"line":503},[79,97921,617],{"class":89},[14,97923,97925],{"id":97924},"_24-生态分布","2.4 生态分布",[265,97927,97929],{"id":97928},"_241-标准正态分布","2.4.1 标准正态分布",[19,97931,97932],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97934,97935],{},[3699,97936],{"alt":57,"src":97937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[265,97939,97941],{"id":97940},"_242-常规正态分布","2.4.2 常规正态分布",[51,97943,97945],{"className":230,"code":97944,"language":232,"meta":57,"style":57},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[59,97946,97947,97952,97957,97962],{"__ignoreMap":57},[79,97948,97949],{"class":81,"line":82},[79,97950,97951],{"class":239},"random.normal(loc,scale,size)也可以生成正态分布\n",[79,97953,97954],{"class":81,"line":167},[79,97955,97956],{"class":2440},"#loc:期望\n",[79,97958,97959],{"class":81,"line":178},[79,97960,97961],{"class":2440},"#scale:方差\n",[79,97963,97964],{"class":81,"line":457},[79,97965,97966],{"class":2440},"#size:用于确定是几维的数列\n",[19,97968,97969],{},[3699,97970],{"alt":57,"src":97971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97973,97975],{"id":97974},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97977,97978],{},"ndim:秩，维度个数",[19,97980,97981],{},"size:数组元素的个数",[19,97983,97984],{},"shape:数组的形状",[19,97986,97987],{},"dtype:数组元素的类型",[19,97989,97990],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97992,97993],{},"他们都是属性，通过数组.属性的形式来确定",[19,97995,97996],{},"如果需要输出多个可以通过以下方式：",[51,97998,98000],{"className":230,"code":97999,"language":232,"meta":57,"style":57},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[59,98001,98002],{"__ignoreMap":57},[79,98003,98004,98006],{"class":81,"line":82},[79,98005,32541],{"class":96},[79,98007,98008],{"class":239},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,98010,98012],{"id":98011},"_26-其他方式创建数组","2.6 其他方式创建数组",[265,98014,98016],{"id":98015},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,98018,98019],{},"①创建一维数组",[51,98021,98023],{"className":230,"code":98022,"language":232,"meta":57,"style":57},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[59,98024,98025,98034,98038,98043,98048],{"__ignoreMap":57},[79,98026,98027,98030,98032],{"class":81,"line":82},[79,98028,98029],{"class":239},"np.zeros(",[79,98031,2820],{"class":96},[79,98033,253],{"class":239},[79,98035,98036],{"class":81,"line":167},[79,98037,617],{"class":89},[79,98039,98040],{"class":81,"line":178},[79,98041,98042],{"class":89},"输出结果：\n",[79,98044,98045],{"class":81,"line":457},[79,98046,98047],{"class":89},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[79,98049,98050],{"class":81,"line":462},[79,98051,617],{"class":89},[19,98053,98054],{},"上方代码等价于：",[51,98056,98058],{"className":230,"code":98057,"language":232,"meta":57,"style":57},"np.zeros(shape=(10))#创建10个元素的0数组\n",[59,98059,98060],{"__ignoreMap":57},[79,98061,98062,98064,98067,98069,98071,98073,98075],{"class":81,"line":82},[79,98063,98029],{"class":239},[79,98065,98066],{"class":7412},"shape",[79,98068,244],{"class":243},[79,98070,685],{"class":239},[79,98072,2820],{"class":96},[79,98074,84876],{"class":239},[79,98076,98077],{"class":2440},"#创建10个元素的0数组\n",[19,98079,98080],{},"也可以指定类型",[51,98082,98084],{"className":230,"code":98083,"language":232,"meta":57,"style":57},"#指定类型\nnp.zeros(5,dtype=int)\n",[59,98085,98086,98091],{"__ignoreMap":57},[79,98087,98088],{"class":81,"line":82},[79,98089,98090],{"class":2440},"#指定类型\n",[79,98092,98093,98095,98097,98099,98101,98103,98105],{"class":81,"line":167},[79,98094,98029],{"class":239},[79,98096,2694],{"class":96},[79,98098,2752],{"class":239},[79,98100,95605],{"class":7412},[79,98102,244],{"class":243},[79,98104,2390],{"class":96},[79,98106,253],{"class":239},[19,98108,98109],{},"②创建二维数组",[51,98111,98113],{"className":230,"code":98112,"language":232,"meta":57,"style":57},"np.zeros((3,4),dtype=int)\n",[59,98114,98115],{"__ignoreMap":57},[79,98116,98117,98120,98122,98124,98126,98128,98130,98132,98134],{"class":81,"line":82},[79,98118,98119],{"class":239},"np.zeros((",[79,98121,1188],{"class":96},[79,98123,2752],{"class":239},[79,98125,2668],{"class":96},[79,98127,44370],{"class":239},[79,98129,95605],{"class":7412},[79,98131,244],{"class":243},[79,98133,2390],{"class":96},[79,98135,253],{"class":239},[19,98137,98138],{},"③创建三维数组",[51,98140,98142],{"className":230,"code":98141,"language":232,"meta":57,"style":57},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[59,98143,98144,98149],{"__ignoreMap":57},[79,98145,98146],{"class":81,"line":82},[79,98147,98148],{"class":2440},"#创建三维数组\n",[79,98150,98151,98153,98155,98157,98159,98161,98163,98165,98167,98169,98171],{"class":81,"line":167},[79,98152,98119],{"class":239},[79,98154,1188],{"class":96},[79,98156,2752],{"class":239},[79,98158,2668],{"class":96},[79,98160,2752],{"class":239},[79,98162,2694],{"class":96},[79,98164,44370],{"class":239},[79,98166,95605],{"class":7412},[79,98168,244],{"class":243},[79,98170,2390],{"class":96},[79,98172,253],{"class":239},[19,98174,98175],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[51,98177,98179],{"className":230,"code":98178,"language":232,"meta":57,"style":57},"#使用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",[59,98180,98181,98186,98201,98206,98211,98233],{"__ignoreMap":57},[79,98182,98183],{"class":81,"line":82},[79,98184,98185],{"class":2440},"#使用zeros_like将创建的一维数组变成全0的数组\n",[79,98187,98188,98190,98192,98194,98196,98198],{"class":81,"line":167},[79,98189,2614],{"class":239},[79,98191,244],{"class":243},[79,98193,95107],{"class":239},[79,98195,2668],{"class":96},[79,98197,2803],{"class":239},[79,98199,98200],{"class":2440},"#这个得到的结果：一维数组0，1，2，3\n",[79,98202,98203],{"class":81,"line":178},[79,98204,98205],{"class":239},"np.zeros_like(a)\n",[79,98207,98208],{"class":81,"line":457},[79,98209,98210],{"class":2440},"#使用zeros_like将创建的二维数组变成全0的数组\n",[79,98212,98213,98215,98217,98219,98221,98223,98225,98227,98229,98231],{"class":81,"line":462},[79,98214,95411],{"class":239},[79,98216,244],{"class":243},[79,98218,97532],{"class":239},[79,98220,33615],{"class":7412},[79,98222,244],{"class":243},[79,98224,685],{"class":239},[79,98226,2668],{"class":96},[79,98228,2752],{"class":239},[79,98230,2694],{"class":96},[79,98232,1191],{"class":239},[79,98234,98235],{"class":81,"line":474},[79,98236,98237],{"class":239},"np.zeros_like(aa)\n",[265,98239,98241],{"id":98240},"_262-ones创建数组","2.6.2 ones()创建数组",[19,98243,98244],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[265,98246,98248],{"id":98247},"_263-empty创建数组","2.6.3 empty()创建数组",[19,98250,98251],{},"①empty()用法",[51,98253,98255],{"className":230,"code":98254,"language":232,"meta":57,"style":57},"numpy.empty(shape,dtype=float,order='c')\n",[59,98256,98257],{"__ignoreMap":57},[79,98258,98259,98262,98264,98266,98268,98270,98272,98274,98276],{"class":81,"line":82},[79,98260,98261],{"class":239},"numpy.empty(shape,",[79,98263,95605],{"class":7412},[79,98265,244],{"class":243},[79,98267,797],{"class":96},[79,98269,2752],{"class":239},[79,98271,97402],{"class":7412},[79,98273,244],{"class":243},[79,98275,78136],{"class":89},[79,98277,253],{"class":239},[19,98279,98280],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,98282,98283],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,98285,98286],{},[3699,98287],{"alt":57,"src":98288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,98290,98291],{},"②empty()用法",[51,98293,98295],{"className":230,"code":98294,"language":232,"meta":57,"style":57},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[59,98296,98297,98318,98330,98351,98356],{"__ignoreMap":57},[79,98298,98299,98301,98303,98306,98308,98310,98312,98314,98316],{"class":81,"line":82},[79,98300,3218],{"class":239},[79,98302,244],{"class":243},[79,98304,98305],{"class":239},"np.empty(",[79,98307,2820],{"class":96},[79,98309,2752],{"class":239},[79,98311,95605],{"class":7412},[79,98313,244],{"class":243},[79,98315,2390],{"class":96},[79,98317,253],{"class":239},[79,98319,98320,98322,98324,98326,98328],{"class":81,"line":167},[79,98321,3193],{"class":239},[79,98323,244],{"class":243},[79,98325,95107],{"class":239},[79,98327,2694],{"class":96},[79,98329,253],{"class":239},[79,98331,98332,98335,98337,98340,98342,98344,98347,98349],{"class":81,"line":178},[79,98333,98334],{"class":239},"np.add(",[79,98336,1049],{"class":96},[79,98338,98339],{"class":239},",x,",[79,98341,95159],{"class":7412},[79,98343,244],{"class":243},[79,98345,98346],{"class":239},"y[:",[79,98348,2694],{"class":96},[79,98350,1243],{"class":239},[79,98352,98353],{"class":81,"line":457},[79,98354,98355],{"class":2440},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[79,98357,98358],{"class":81,"line":462},[79,98359,98360],{"class":239},"y\n",[19,98362,13678],{},[19,98364,98365],{},[3699,98366],{"alt":57,"src":98367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[51,98369,98371],{"className":230,"code":98370,"language":232,"meta":57,"style":57},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[59,98372,98373,98389,98409,98424],{"__ignoreMap":57},[79,98374,98375,98377,98379,98381,98383,98385,98387],{"class":81,"line":82},[79,98376,3193],{"class":239},[79,98378,244],{"class":243},[79,98380,95107],{"class":239},[79,98382,1072],{"class":96},[79,98384,2752],{"class":239},[79,98386,2718],{"class":96},[79,98388,253],{"class":239},[79,98390,98391,98393,98395,98397,98399,98401,98403,98405,98407],{"class":81,"line":167},[79,98392,3218],{"class":239},[79,98394,244],{"class":243},[79,98396,98305],{"class":239},[79,98398,2694],{"class":96},[79,98400,2752],{"class":239},[79,98402,95605],{"class":7412},[79,98404,244],{"class":243},[79,98406,2390],{"class":96},[79,98408,253],{"class":239},[79,98410,98411,98414,98416,98418,98420,98422],{"class":81,"line":178},[79,98412,98413],{"class":239},"np.add(x,",[79,98415,1049],{"class":96},[79,98417,2752],{"class":239},[79,98419,95159],{"class":7412},[79,98421,244],{"class":243},[79,98423,95554],{"class":239},[79,98425,98426],{"class":81,"line":457},[79,98427,98428],{"class":2440},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98430,98431],{},"③empty_like()",[19,98433,98434],{},[2528,98435,98436,98437,98442],{},"创建一个",[2528,98438,98439],{},[2528,98440,98441],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98444,98445,98448],{},[59,98446,98447],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98450,98451],{},[3699,98452],{"alt":57,"src":98453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[265,98455,98457],{"id":98456},"_264-用法","2.6.4 ？？用法",[19,98459,98460],{},"当想查看一个函数的参数时，可以通过？？来实现",[51,98462,98464],{"className":230,"code":98463,"language":232,"meta":57,"style":57},"np.full??\n",[59,98465,98466],{"__ignoreMap":57},[79,98467,98468,98471],{"class":81,"line":82},[79,98469,98470],{"class":239},"np.full",[79,98472,98473],{"class":79511},"??\n",[265,98475,98477],{"id":98476},"_265-full创建数组","2.6.5 full()创建数组",[51,98479,98481],{"className":230,"code":98480,"language":232,"meta":57,"style":57},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[59,98482,98483,98488],{"__ignoreMap":57},[79,98484,98485],{"class":81,"line":82},[79,98486,98487],{"class":239},"full(shape,fill_value)\n",[79,98489,98490],{"class":81,"line":167},[79,98491,98492],{"class":239},"创建全为某个指定值的数组\n",[19,98494,96635],{},[51,98496,98498],{"className":230,"code":98497,"language":232,"meta":57,"style":57},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[59,98499,98500,98505],{"__ignoreMap":57},[79,98501,98502],{"class":81,"line":82},[79,98503,98504],{"class":2440},"#创建一个一维数组,以20进行填充\n",[79,98506,98507,98510,98512,98514,98516],{"class":81,"line":167},[79,98508,98509],{"class":239},"np.full(",[79,98511,2820],{"class":96},[79,98513,2752],{"class":239},[79,98515,3073],{"class":96},[79,98517,253],{"class":239},[19,98519,95396],{},[51,98521,98523],{"className":230,"code":98522,"language":232,"meta":57,"style":57},"#创建二维数组\nnp.full((3,5),11)\n",[59,98524,98525,98529],{"__ignoreMap":57},[79,98526,98527],{"class":81,"line":82},[79,98528,96052],{"class":2440},[79,98530,98531,98534,98536,98538,98540,98542,98544],{"class":81,"line":167},[79,98532,98533],{"class":239},"np.full((",[79,98535,1188],{"class":96},[79,98537,2752],{"class":239},[79,98539,2694],{"class":96},[79,98541,44370],{"class":239},[79,98543,2846],{"class":96},[79,98545,253],{"class":239},[19,98547,98548],{},"③full_like用法",[19,98550,98551],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98553,98554],{},"这里是指定填充而已",[51,98556,98558],{"className":230,"code":98557,"language":232,"meta":57,"style":57},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[59,98559,98560,98565,98589,98594],{"__ignoreMap":57},[79,98561,98562],{"class":81,"line":82},[79,98563,98564],{"class":2440},"#创建一个指定形状数组\n",[79,98566,98567,98569,98571,98573,98575,98577,98579,98581,98583,98585,98587],{"class":81,"line":167},[79,98568,2614],{"class":239},[79,98570,244],{"class":243},[79,98572,95107],{"class":239},[79,98574,1072],{"class":96},[79,98576,2752],{"class":239},[79,98578,2700],{"class":96},[79,98580,95112],{"class":239},[79,98582,2668],{"class":96},[79,98584,2752],{"class":239},[79,98586,2794],{"class":96},[79,98588,253],{"class":239},[79,98590,98591],{"class":81,"line":178},[79,98592,98593],{"class":2440},"#进行指定填充\n",[79,98595,98596,98599,98601],{"class":81,"line":457},[79,98597,98598],{"class":239},"np.full_like(a,",[79,98600,2820],{"class":96},[79,98602,253],{"class":239},[19,98604,13678],{},[19,98606,98607],{},[3699,98608],{"alt":57,"src":98609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[265,98611,98613],{"id":98612},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[24137,98615,98617],{"id":98616},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[51,98619,98621],{"className":230,"code":98620,"language":232,"meta":57,"style":57},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[59,98622,98623,98640],{"__ignoreMap":57},[79,98624,98625,98628,98630,98632,98634,98636,98638],{"class":81,"line":82},[79,98626,98627],{"class":239},"np.eye(",[79,98629,2668],{"class":96},[79,98631,2752],{"class":239},[79,98633,95605],{"class":7412},[79,98635,244],{"class":243},[79,98637,2390],{"class":96},[79,98639,253],{"class":239},[79,98641,98642],{"class":81,"line":167},[79,98643,98644],{"class":2440},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[24137,98646,98648],{"id":98647},"_2662-法2identity","2.6.6.2 法2：identity()",[51,98650,98652],{"className":230,"code":98651,"language":232,"meta":57,"style":57},"#identity()\nnp.identity(5,dtype=int)\n",[59,98653,98654,98659],{"__ignoreMap":57},[79,98655,98656],{"class":81,"line":82},[79,98657,98658],{"class":2440},"#identity()\n",[79,98660,98661,98664,98666,98668,98670,98672,98674],{"class":81,"line":167},[79,98662,98663],{"class":239},"np.identity(",[79,98665,2694],{"class":96},[79,98667,2752],{"class":239},[79,98669,95605],{"class":7412},[79,98671,244],{"class":243},[79,98673,2390],{"class":96},[79,98675,253],{"class":239},[19,98677,98678],{},"两个函数是有区别的",[19,98680,98681],{},[3699,98682],{"alt":57,"src":98683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98685,98686],{},[3699,98687],{"alt":57,"src":98688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[51,98690,98692],{"className":230,"code":98691,"language":232,"meta":57,"style":57},"# 创建一个 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",[59,98693,98694,98699,98711,98716,98721,98726,98731,98735,98740,98760,98764,98769,98774],{"__ignoreMap":57},[79,98695,98696],{"class":81,"line":82},[79,98697,98698],{"class":2440},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[79,98700,98701,98703,98705,98707,98709],{"class":81,"line":167},[79,98702,98627],{"class":239},[79,98704,1188],{"class":96},[79,98706,1060],{"class":239},[79,98708,2668],{"class":96},[79,98710,253],{"class":239},[79,98712,98713],{"class":81,"line":178},[79,98714,98715],{"class":2440},"# 输出:\n",[79,98717,98718],{"class":81,"line":457},[79,98719,98720],{"class":2440},"# [[1. 0. 0. 0.]\n",[79,98722,98723],{"class":81,"line":462},[79,98724,98725],{"class":2440},"#  [0. 1. 0. 0.]\n",[79,98727,98728],{"class":81,"line":474},[79,98729,98730],{"class":2440},"#  [0. 0. 1. 0.]]\n",[79,98732,98733],{"class":81,"line":480},[79,98734,454],{"emptyLinePlaceholder":453},[79,98736,98737],{"class":81,"line":486},[79,98738,98739],{"class":2440},"# 对角线向上偏移1\n",[79,98741,98742,98744,98746,98748,98750,98752,98754,98756,98758],{"class":81,"line":491},[79,98743,98627],{"class":239},[79,98745,1188],{"class":96},[79,98747,1060],{"class":239},[79,98749,2668],{"class":96},[79,98751,1060],{"class":239},[79,98753,2867],{"class":7412},[79,98755,244],{"class":243},[79,98757,1072],{"class":96},[79,98759,253],{"class":239},[79,98761,98762],{"class":81,"line":497},[79,98763,98715],{"class":2440},[79,98765,98766],{"class":81,"line":503},[79,98767,98768],{"class":2440},"# [[0. 1. 0. 0.]\n",[79,98770,98771],{"class":81,"line":509},[79,98772,98773],{"class":2440},"#  [0. 0. 1. 0.]\n",[79,98775,98776],{"class":81,"line":514},[79,98777,98778],{"class":2440},"#  [0. 0. 0. 1.]]\n",[265,98780,98782],{"id":98781},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[51,98784,98786],{"className":230,"code":98785,"language":232,"meta":57,"style":57},"#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",[59,98787,98788,98793,98797,98802,98807,98812,98817,98822,98827,98832,98837],{"__ignoreMap":57},[79,98789,98790],{"class":81,"line":82},[79,98791,98792],{"class":2440},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[79,98794,98795],{"class":81,"line":167},[79,98796,617],{"class":89},[79,98798,98799],{"class":81,"line":178},[79,98800,98801],{"class":89},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[79,98803,98804],{"class":81,"line":457},[79,98805,98806],{"class":89},"参数介绍：\n",[79,98808,98809],{"class":81,"line":462},[79,98810,98811],{"class":89},"start：序列的起始值\n",[79,98813,98814],{"class":81,"line":474},[79,98815,98816],{"class":89},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[79,98818,98819],{"class":81,"line":480},[79,98820,98821],{"class":89},"num：要生长的等步长的样本数量，默认为50\n",[79,98823,98824],{"class":81,"line":486},[79,98825,98826],{"class":89},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[79,98828,98829],{"class":81,"line":491},[79,98830,98831],{"class":89},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[79,98833,98834],{"class":81,"line":497},[79,98835,98836],{"class":89},"dtype：ndarry的数据类型\n",[79,98838,98839],{"class":81,"line":503},[79,98840,617],{"class":89},[19,98842,98843],{},[3699,98844],{"alt":57,"src":98845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98847,98848],{},"这里num=是可以省略的",[19,98850,98851],{},"也就是下方两行代码结果是一模一样的",[51,98853,98855],{"className":230,"code":98854,"language":232,"meta":57,"style":57},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[59,98856,98857,98874],{"__ignoreMap":57},[79,98858,98859,98862,98864,98866,98868,98870,98872],{"class":81,"line":82},[79,98860,98861],{"class":239},"np.linspace(",[79,98863,1072],{"class":96},[79,98865,2752],{"class":239},[79,98867,2694],{"class":96},[79,98869,2752],{"class":239},[79,98871,2694],{"class":96},[79,98873,253],{"class":239},[79,98875,98876,98878,98880,98882,98884,98886,98888,98890,98892],{"class":81,"line":167},[79,98877,98861],{"class":239},[79,98879,1072],{"class":96},[79,98881,2752],{"class":239},[79,98883,2694],{"class":96},[79,98885,2752],{"class":239},[79,98887,3894],{"class":7412},[79,98889,244],{"class":243},[79,98891,2694],{"class":96},[79,98893,253],{"class":239},[265,98895,98897],{"id":98896},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[51,98899,98901],{"className":230,"code":98900,"language":232,"meta":57,"style":57},"#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",[59,98902,98903,98908,98912,98917,98922,98927,98932,98936,98941,98946,98950],{"__ignoreMap":57},[79,98904,98905],{"class":81,"line":82},[79,98906,98907],{"class":2440},"#logspace函数用于创建一个等比数列，格式如下：\n",[79,98909,98910],{"class":81,"line":167},[79,98911,617],{"class":89},[79,98913,98914],{"class":81,"line":178},[79,98915,98916],{"class":89},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[79,98918,98919],{"class":81,"line":457},[79,98920,98921],{"class":89},"参数为：\n",[79,98923,98924],{"class":81,"line":462},[79,98925,98926],{"class":89},"start:序列的起始位置为：base**start\n",[79,98928,98929],{"class":81,"line":474},[79,98930,98931],{"class":89},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[79,98933,98934],{"class":81,"line":480},[79,98935,98821],{"class":89},[79,98937,98938],{"class":81,"line":486},[79,98939,98940],{"class":89},"endpoint：是否包含 stop 这个值，默认是 True\n",[79,98942,98943],{"class":81,"line":491},[79,98944,98945],{"class":89},"base：对数的底数，默认是 10（常见对数）\n",[79,98947,98948],{"class":81,"line":497},[79,98949,98836],{"class":89},[79,98951,98952],{"class":81,"line":503},[79,98953,617],{"class":89},[19,98955,98956],{},[3699,98957],{"alt":57,"src":98958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98960,98961],{},"logspace()函数中的num参数也是可以不写num=的",[19,98963,98964],{},"endpoint是不可以省略的",[2287,98966,98967],{},"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":57,"searchDepth":167,"depth":167,"links":98969},[98970,98974,98979,98983,98987,98988],{"id":97361,"depth":167,"text":97362,"children":98971},[98972,98973],{"id":97365,"depth":178,"text":97366},{"id":97438,"depth":178,"text":97439},{"id":97470,"depth":167,"text":97471,"children":98975},[98976,98977,98978],{"id":97474,"depth":178,"text":97475},{"id":97656,"depth":178,"text":97657},{"id":97734,"depth":178,"text":97735},{"id":97769,"depth":167,"text":97770,"children":98980},[98981,98982],{"id":97773,"depth":178,"text":97774},{"id":97828,"depth":178,"text":97829},{"id":97924,"depth":167,"text":97925,"children":98984},[98985,98986],{"id":97928,"depth":178,"text":97929},{"id":97940,"depth":178,"text":97941},{"id":97974,"depth":167,"text":97975},{"id":98011,"depth":167,"text":98012,"children":98989},[98990,98991,98992,98993,98994,98995,98996,98997],{"id":98015,"depth":178,"text":98016},{"id":98240,"depth":178,"text":98241},{"id":98247,"depth":178,"text":98248},{"id":98456,"depth":178,"text":98457},{"id":98476,"depth":178,"text":98477},{"id":98612,"depth":178,"text":98613},{"id":98781,"depth":178,"text":98782},{"id":98896,"depth":178,"text":98897},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97353,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":99004,"title":99005,"body":99006,"description":25516,"extension":2314,"meta":99099,"navigation":453,"path":99100,"seo":99101,"stem":99102,"__hash__":99103},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":99007,"toc":99097},[99008,99011,99014,99017,99020,99023,99026,99029,99032,99035,99038,99041,99043,99046,99049,99054,99057,99060,99094],[10,99009,99005],{"id":99010},"_20魔法命令mprun",[19,99012,99013],{},"逐行分析数据内存的使用情况",[19,99015,99016],{},"语法格式：",[19,99018,99019],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,99021,99022],{},"分析结果列如下：",[19,99024,99025],{},"Line行号",[19,99027,99028],{},"Mem usage内存使用大小",[19,99030,99031],{},"increment内存增量",[19,99033,99034],{},"Line content代码内容",[19,99036,99037],{},"补充说明：",[19,99039,99040],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,99042,97308],{},[19,99044,99045],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,99047,99048],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,99050,99051],{},[3699,99052],{"alt":57,"src":99053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,99055,99056],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,99058,99059],{},"这时候需要重新加载模块",[51,99061,99063],{"className":230,"code":99062,"language":232,"meta":57,"style":57},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[59,99064,99065,99070,99077,99082],{"__ignoreMap":57},[79,99066,99067],{"class":81,"line":82},[79,99068,99069],{"class":2440},"#重新加载模块\n",[79,99071,99072,99074],{"class":81,"line":167},[79,99073,432],{"class":243},[79,99075,99076],{"class":239}," importlib\n",[79,99078,99079],{"class":81,"line":178},[79,99080,99081],{"class":239},"importlib.reload(mprun_test)\n",[79,99083,99084,99086,99089,99091],{"class":81,"line":457},[79,99085,1137],{"class":243},[79,99087,99088],{"class":239},"mprun ",[79,99090,320],{"class":243},[79,99092,99093],{"class":239},"f mprun_test.fun_test mprun_test.fun_test()\n",[2287,99095,99096],{},"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":57,"searchDepth":167,"depth":167,"links":99098},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":99005,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":99105,"title":99106,"body":99107,"description":25516,"extension":2314,"meta":99124,"navigation":453,"path":99125,"seo":99126,"stem":99127,"__hash__":99128},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":99108,"toc":99122},[99109,99112,99117],[10,99110,99106],{"id":99111},"_3一维数组的索引和切片",[19,99113,99114],{},[3699,99115],{"alt":57,"src":99116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,99118,99119],{},[3699,99120],{"alt":57,"src":99121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":57,"searchDepth":167,"depth":167,"links":99123},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":99106,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99130,"title":99131,"body":99132,"description":25516,"extension":2314,"meta":99615,"navigation":453,"path":99616,"seo":99617,"stem":99618,"__hash__":99619},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99133,"toc":99613},[99134,99137,99140,99145,99178,99181,99219,99222,99256,99259,99364,99367,99404,99407,99508,99511,99562,99565,99607,99610],[10,99135,99131],{"id":99136},"_4二维数组的索引与切片",[19,99138,99139],{},"①获取指定单个元素",[19,99141,99142],{},[3699,99143],{"alt":57,"src":99144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[51,99146,99148],{"className":230,"code":99147,"language":232,"meta":57,"style":57},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[59,99149,99150,99155,99160,99165],{"__ignoreMap":57},[79,99151,99152],{"class":81,"line":82},[79,99153,99154],{"class":2440},"#获取元素9\n",[79,99156,99157],{"class":81,"line":167},[79,99158,99159],{"class":2440},"#先获取所在行，再获取所在列\n",[79,99161,99162],{"class":81,"line":178},[79,99163,99164],{"class":2440},"#数组[行索引号，列索引号]\n",[79,99166,99167,99170,99172,99174,99176],{"class":81,"line":457},[79,99168,99169],{"class":239},"a[",[79,99171,1072],{"class":96},[79,99173,2752],{"class":239},[79,99175,1049],{"class":96},[79,99177,35361],{"class":239},[19,99179,99180],{},"②获取整行元素",[51,99182,99184],{"className":230,"code":99183,"language":232,"meta":57,"style":57},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[59,99185,99186,99191,99196,99204,99209],{"__ignoreMap":57},[79,99187,99188],{"class":81,"line":82},[79,99189,99190],{"class":2440},"#获取整行 数组[行索引号]\n",[79,99192,99193],{"class":81,"line":167},[79,99194,99195],{"class":2440},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[79,99197,99198,99200,99202],{"class":81,"line":178},[79,99199,99169],{"class":239},[79,99201,1049],{"class":96},[79,99203,35361],{"class":239},[79,99205,99206],{"class":81,"line":457},[79,99207,99208],{"class":2440},"#也可以负索引获取一行\n",[79,99210,99211,99213,99215,99217],{"class":81,"line":462},[79,99212,99169],{"class":239},[79,99214,320],{"class":243},[79,99216,1072],{"class":96},[79,99218,35361],{"class":239},[19,99220,99221],{},"③获取整列元素",[51,99223,99225],{"className":230,"code":99224,"language":232,"meta":57,"style":57},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[59,99226,99227,99232,99241,99246],{"__ignoreMap":57},[79,99228,99229],{"class":81,"line":82},[79,99230,99231],{"class":2440},"#获取整列 数组名[:,列索引]\n",[79,99233,99234,99237,99239],{"class":81,"line":167},[79,99235,99236],{"class":239},"a[:,",[79,99238,1049],{"class":96},[79,99240,35361],{"class":239},[79,99242,99243],{"class":81,"line":178},[79,99244,99245],{"class":2440},"#也可以负索引获取一列\n",[79,99247,99248,99250,99252,99254],{"class":81,"line":457},[79,99249,99236],{"class":239},[79,99251,320],{"class":243},[79,99253,1072],{"class":96},[79,99255,35361],{"class":239},[19,99257,99258],{},"④部分行部分列的元素",[51,99260,99262],{"className":230,"code":99261,"language":232,"meta":57,"style":57},"#部分行部分列 数组名[行切片，列切片]\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",[59,99263,99264,99269,99279,99283,99287,99292,99297,99301,99313,99317,99321,99326,99331,99336,99341,99345,99350],{"__ignoreMap":57},[79,99265,99266],{"class":81,"line":82},[79,99267,99268],{"class":2440},"#部分行部分列 数组名[行切片，列切片]\n",[79,99270,99271,99274,99276],{"class":81,"line":167},[79,99272,99273],{"class":239},"a[:",[79,99275,1049],{"class":96},[79,99277,99278],{"class":239},",:]\n",[79,99280,99281],{"class":81,"line":178},[79,99282,95669],{"class":2440},[79,99284,99285],{"class":81,"line":457},[79,99286,96033],{"class":89},[79,99288,99289],{"class":81,"line":462},[79,99290,99291],{"class":89},"array([[ 1,  2,  3,  4,  5,  6],\n",[79,99293,99294],{"class":81,"line":474},[79,99295,99296],{"class":89},"       [ 7,  8,  9, 10, 11, 12]])\n",[79,99298,99299],{"class":81,"line":480},[79,99300,96033],{"class":89},[79,99302,99303,99305,99307,99309,99311],{"class":81,"line":486},[79,99304,99236],{"class":239},[79,99306,1072],{"class":96},[79,99308,3232],{"class":239},[79,99310,2668],{"class":96},[79,99312,35361],{"class":239},[79,99314,99315],{"class":81,"line":491},[79,99316,95669],{"class":2440},[79,99318,99319],{"class":81,"line":497},[79,99320,96033],{"class":89},[79,99322,99323],{"class":81,"line":503},[79,99324,99325],{"class":89},"array([[ 2,  3,  4],\n",[79,99327,99328],{"class":81,"line":509},[79,99329,99330],{"class":89},"       [ 8,  9, 10],\n",[79,99332,99333],{"class":81,"line":514},[79,99334,99335],{"class":89},"       [14, 15, 16],\n",[79,99337,99338],{"class":81,"line":520},[79,99339,99340],{"class":89},"       [20, 21, 22]])\n",[79,99342,99343],{"class":81,"line":526},[79,99344,96033],{"class":89},[79,99346,99347],{"class":81,"line":532},[79,99348,99349],{"class":2440},"#对列行同时进行切片，使用了step参数\n",[79,99351,99352,99355,99357,99360,99362],{"class":81,"line":537},[79,99353,99354],{"class":239},"a[::",[79,99356,1049],{"class":96},[79,99358,99359],{"class":239},",::",[79,99361,1049],{"class":96},[79,99363,35361],{"class":239},[19,99365,99366],{},"⑤同时获取两个元素",[51,99368,99370],{"className":230,"code":99369,"language":232,"meta":57,"style":57},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[59,99371,99372,99377,99382],{"__ignoreMap":57},[79,99373,99374],{"class":81,"line":82},[79,99375,99376],{"class":2440},"#同时获取第三行第二列，第四行第一列\n",[79,99378,99379],{"class":81,"line":167},[79,99380,99381],{"class":2440},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[79,99383,99384,99387,99389,99391,99393,99395,99397,99399,99401],{"class":81,"line":178},[79,99385,99386],{"class":239},"a[(",[79,99388,1049],{"class":96},[79,99390,2752],{"class":239},[79,99392,1188],{"class":96},[79,99394,44361],{"class":239},[79,99396,1072],{"class":96},[79,99398,2752],{"class":239},[79,99400,1030],{"class":96},[79,99402,99403],{"class":239},")]\n",[19,99405,99406],{},"⑥切片，对行进行反向获取",[51,99408,99410],{"className":230,"code":99409,"language":232,"meta":57,"style":57},"#切片 对所有行进行反向获取\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",[59,99411,99412,99417,99427,99431,99435,99440,99445,99450,99455,99459,99464,99480,99484,99489,99494,99499,99504],{"__ignoreMap":57},[79,99413,99414],{"class":81,"line":82},[79,99415,99416],{"class":2440},"#切片 对所有行进行反向获取\n",[79,99418,99419,99421,99423,99425],{"class":81,"line":167},[79,99420,99354],{"class":239},[79,99422,320],{"class":243},[79,99424,1072],{"class":96},[79,99426,35361],{"class":239},[79,99428,99429],{"class":81,"line":178},[79,99430,95669],{"class":2440},[79,99432,99433],{"class":81,"line":457},[79,99434,96033],{"class":89},[79,99436,99437],{"class":81,"line":462},[79,99438,99439],{"class":89},"array([[19, 20, 21, 22, 23, 24],\n",[79,99441,99442],{"class":81,"line":474},[79,99443,99444],{"class":89},"       [13, 14, 15, 16, 17, 18],\n",[79,99446,99447],{"class":81,"line":480},[79,99448,99449],{"class":89},"       [ 7,  8,  9, 10, 11, 12],\n",[79,99451,99452],{"class":81,"line":486},[79,99453,99454],{"class":89},"       [ 1,  2,  3,  4,  5,  6]])\n",[79,99456,99457],{"class":81,"line":491},[79,99458,96033],{"class":89},[79,99460,99461],{"class":81,"line":497},[79,99462,99463],{"class":2440},"#对行列都进行反向切片获取\n",[79,99465,99466,99468,99470,99472,99474,99476,99478],{"class":81,"line":503},[79,99467,99354],{"class":239},[79,99469,320],{"class":243},[79,99471,1072],{"class":96},[79,99473,99359],{"class":239},[79,99475,320],{"class":243},[79,99477,1072],{"class":96},[79,99479,35361],{"class":239},[79,99481,99482],{"class":81,"line":509},[79,99483,96033],{"class":89},[79,99485,99486],{"class":81,"line":514},[79,99487,99488],{"class":89},"array([[24, 23, 22, 21, 20, 19],\n",[79,99490,99491],{"class":81,"line":520},[79,99492,99493],{"class":89},"       [18, 17, 16, 15, 14, 13],\n",[79,99495,99496],{"class":81,"line":526},[79,99497,99498],{"class":89},"       [12, 11, 10,  9,  8,  7],\n",[79,99500,99501],{"class":81,"line":532},[79,99502,99503],{"class":89},"       [ 6,  5,  4,  3,  2,  1]])\n",[79,99505,99506],{"class":81,"line":537},[79,99507,96033],{"class":89},[19,99509,99510],{},"⑦修改元素",[51,99512,99514],{"className":230,"code":99513,"language":232,"meta":57,"style":57},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[59,99515,99516,99521,99539,99544],{"__ignoreMap":57},[79,99517,99518],{"class":81,"line":82},[79,99519,99520],{"class":2440},"#获取前两行和前两列\n",[79,99522,99523,99526,99528,99530,99532,99535,99537],{"class":81,"line":167},[79,99524,99525],{"class":239},"sub_a",[79,99527,244],{"class":243},[79,99529,99273],{"class":239},[79,99531,1049],{"class":96},[79,99533,99534],{"class":239},",:",[79,99536,1049],{"class":96},[79,99538,35361],{"class":239},[79,99540,99541],{"class":81,"line":178},[79,99542,99543],{"class":2440},"#修改sub_a第一个元素的值\n",[79,99545,99546,99549,99551,99553,99555,99557,99559],{"class":81,"line":457},[79,99547,99548],{"class":239},"sub_a[",[79,99550,1030],{"class":96},[79,99552,2752],{"class":239},[79,99554,1030],{"class":96},[79,99556,3311],{"class":239},[79,99558,244],{"class":243},[79,99560,99561],{"class":96},"100\n",[19,99563,99564],{},"⑧数组复制copy()",[51,99566,99568],{"className":230,"code":99567,"language":232,"meta":57,"style":57},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[59,99569,99570,99575,99585,99590],{"__ignoreMap":57},[79,99571,99572],{"class":81,"line":82},[79,99573,99574],{"class":2440},"#数组复制\n",[79,99576,99577,99580,99582],{"class":81,"line":167},[79,99578,99579],{"class":239},"copy_a",[79,99581,244],{"class":243},[79,99583,99584],{"class":239},"np.copy(sub_a)\n",[79,99586,99587],{"class":81,"line":178},[79,99588,99589],{"class":2440},"#修改copy_a后不影响原数组\n",[79,99591,99592,99595,99597,99599,99601,99603,99605],{"class":81,"line":457},[79,99593,99594],{"class":239},"copy_a[",[79,99596,1030],{"class":96},[79,99598,2752],{"class":239},[79,99600,1030],{"class":96},[79,99602,3311],{"class":239},[79,99604,244],{"class":243},[79,99606,99561],{"class":96},[19,99608,99609],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[2287,99611,99612],{},"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":57,"searchDepth":167,"depth":167,"links":99614},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99131,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99621,"title":99622,"body":99623,"description":25516,"extension":2314,"meta":100115,"navigation":453,"path":100116,"seo":100117,"stem":100118,"__hash__":100119},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99624,"toc":100107},[99625,99628,99632,99635,99638,99691,99694,99719,99722,99741,99761,99764,99780,99784,99830,99834,99876,99880,99883,99886,99889,99892,99895,99957,100017,100021,100024,100081,100085,100090,100099,100104],[10,99626,99622],{"id":99627},"_5改变数组的维度",[14,99629,99631],{"id":99630},"_51-使用reshape","5.1 使用reshape()",[19,99633,99634],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99636,99637],{},"①一维数组转换为二维数组",[51,99639,99641],{"className":230,"code":99640,"language":232,"meta":57,"style":57},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[59,99642,99643,99659,99664,99669,99674],{"__ignoreMap":57},[79,99644,99645,99647,99649,99651,99653,99655,99657],{"class":81,"line":82},[79,99646,2614],{"class":239},[79,99648,244],{"class":243},[79,99650,95107],{"class":239},[79,99652,1072],{"class":96},[79,99654,2752],{"class":239},[79,99656,2897],{"class":96},[79,99658,253],{"class":239},[79,99660,99661],{"class":81,"line":167},[79,99662,99663],{"class":2440},"#将一维数组进行转换\n",[79,99665,99666],{"class":81,"line":178},[79,99667,99668],{"class":2440},"#注意点：元素个数不可以变\n",[79,99670,99671],{"class":81,"line":457},[79,99672,99673],{"class":2440},"#转换维度要保持一致，不一致就异常！！！\n",[79,99675,99676,99678,99680,99683,99685,99687,99689],{"class":81,"line":462},[79,99677,95411],{"class":239},[79,99679,244],{"class":243},[79,99681,99682],{"class":239},"a.reshape(",[79,99684,1049],{"class":96},[79,99686,2752],{"class":239},[79,99688,2718],{"class":96},[79,99690,253],{"class":239},[19,99692,99693],{},"②一维数组转换为三维数组",[51,99695,99697],{"className":230,"code":99696,"language":232,"meta":57,"style":57},"aaa=a.reshape(2,3,2)\n",[59,99698,99699],{"__ignoreMap":57},[79,99700,99701,99703,99705,99707,99709,99711,99713,99715,99717],{"class":81,"line":82},[79,99702,97626],{"class":239},[79,99704,244],{"class":243},[79,99706,99682],{"class":239},[79,99708,1049],{"class":96},[79,99710,2752],{"class":239},[79,99712,1188],{"class":96},[79,99714,2752],{"class":239},[79,99716,1049],{"class":96},[79,99718,253],{"class":239},[19,99720,99721],{},"③二维数组转化为一维数组",[51,99723,99725],{"className":230,"code":99724,"language":232,"meta":57,"style":57},"#知道元素个数：\naa.reshape(12)\n",[59,99726,99727,99732],{"__ignoreMap":57},[79,99728,99729],{"class":81,"line":82},[79,99730,99731],{"class":2440},"#知道元素个数：\n",[79,99733,99734,99737,99739],{"class":81,"line":167},[79,99735,99736],{"class":239},"aa.reshape(",[79,99738,2872],{"class":96},[79,99740,253],{"class":239},[51,99742,99744],{"className":230,"code":99743,"language":232,"meta":57,"style":57},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[59,99745,99746,99751],{"__ignoreMap":57},[79,99747,99748],{"class":81,"line":82},[79,99749,99750],{"class":2440},"#不知道元素个数，参数传递-1\n",[79,99752,99753,99755,99757,99759],{"class":81,"line":167},[79,99754,99736],{"class":239},[79,99756,320],{"class":243},[79,99758,1072],{"class":96},[79,99760,253],{"class":239},[19,99762,99763],{},"④三维数组转换为一维数组",[51,99765,99767],{"className":230,"code":99766,"language":232,"meta":57,"style":57},"aaa.reshape(-1)\n",[59,99768,99769],{"__ignoreMap":57},[79,99770,99771,99774,99776,99778],{"class":81,"line":82},[79,99772,99773],{"class":239},"aaa.reshape(",[79,99775,320],{"class":243},[79,99777,1072],{"class":96},[79,99779,253],{"class":239},[14,99781,99783],{"id":99782},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[51,99785,99787],{"className":230,"code":99786,"language":232,"meta":57,"style":57},"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",[59,99788,99789,99816,99821,99825],{"__ignoreMap":57},[79,99790,99791,99793,99795,99797,99799,99801,99803,99805,99807,99809,99811,99813],{"class":81,"line":82},[79,99792,95411],{"class":239},[79,99794,244],{"class":243},[79,99796,95107],{"class":239},[79,99798,1072],{"class":96},[79,99800,2752],{"class":239},[79,99802,2897],{"class":96},[79,99804,95112],{"class":239},[79,99806,1049],{"class":96},[79,99808,2752],{"class":239},[79,99810,2718],{"class":96},[79,99812,2803],{"class":239},[79,99814,99815],{"class":2440},"#转换为2行6列的数组\n",[79,99817,99818],{"class":81,"line":167},[79,99819,99820],{"class":239},"aa.revel()\n",[79,99822,99823],{"class":81,"line":178},[79,99824,95669],{"class":2440},[79,99826,99827],{"class":81,"line":457},[79,99828,99829],{"class":2440},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99831,99833],{"id":99832},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[51,99835,99837],{"className":230,"code":99836,"language":232,"meta":57,"style":57},"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",[59,99838,99839,99863,99868,99872],{"__ignoreMap":57},[79,99840,99841,99843,99845,99847,99849,99851,99853,99855,99857,99859,99861],{"class":81,"line":82},[79,99842,95411],{"class":239},[79,99844,244],{"class":243},[79,99846,95107],{"class":239},[79,99848,1072],{"class":96},[79,99850,2752],{"class":239},[79,99852,2897],{"class":96},[79,99854,95112],{"class":239},[79,99856,1049],{"class":96},[79,99858,2752],{"class":239},[79,99860,2718],{"class":96},[79,99862,253],{"class":239},[79,99864,99865],{"class":81,"line":167},[79,99866,99867],{"class":239},"aa.flatten()\n",[79,99869,99870],{"class":81,"line":178},[79,99871,95669],{"class":2440},[79,99873,99874],{"class":81,"line":457},[79,99875,99829],{"class":2440},[14,99877,99879],{"id":99878},"_54-使用resize","5.4 使用resize()",[19,99881,99882],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99884,99885],{},"通过resize方法可以改变数组的维度",[19,99887,99888],{},"#resize修改数组维度",[19,99890,99891],{},"#以元组的形式指定形状",[19,99893,99894],{},"#改变的是原数组",[51,99896,99898],{"className":230,"code":99897,"language":232,"meta":57,"style":57},"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",[59,99899,99900,99916,99936,99949,99953],{"__ignoreMap":57},[79,99901,99902,99904,99906,99908,99910,99912,99914],{"class":81,"line":82},[79,99903,2614],{"class":239},[79,99905,244],{"class":243},[79,99907,95107],{"class":239},[79,99909,1072],{"class":96},[79,99911,2752],{"class":239},[79,99913,2897],{"class":96},[79,99915,253],{"class":239},[79,99917,99918,99921,99923,99925,99927,99929,99931,99933],{"class":81,"line":167},[79,99919,99920],{"class":239},"a.shape",[79,99922,244],{"class":243},[79,99924,685],{"class":239},[79,99926,1049],{"class":96},[79,99928,2752],{"class":239},[79,99930,2718],{"class":96},[79,99932,2803],{"class":239},[79,99934,99935],{"class":2440},"#改变了原数组\n",[79,99937,99938,99940,99942,99945,99947],{"class":81,"line":178},[79,99939,2614],{"class":239},[79,99941,244],{"class":243},[79,99943,99944],{"class":239},"resize((",[79,99946,2872],{"class":96},[79,99948,1191],{"class":239},[79,99950,99951],{"class":81,"line":457},[79,99952,95669],{"class":2440},[79,99954,99955],{"class":81,"line":462},[79,99956,99829],{"class":2440},[51,99958,99960],{"className":230,"code":99959,"language":232,"meta":57,"style":57},"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",[59,99961,99962,99975,99979,99983,99988,99993,99998,100003,100008,100013],{"__ignoreMap":57},[79,99963,99964,99967,99969,99971,99973],{"class":81,"line":82},[79,99965,99966],{"class":239},"a.resize((",[79,99968,2718],{"class":96},[79,99970,2752],{"class":239},[79,99972,1049],{"class":96},[79,99974,1191],{"class":239},[79,99976,99977],{"class":81,"line":167},[79,99978,95669],{"class":2440},[79,99980,99981],{"class":81,"line":178},[79,99982,96033],{"class":89},[79,99984,99985],{"class":81,"line":457},[79,99986,99987],{"class":89},"array([[ 1,  2],\n",[79,99989,99990],{"class":81,"line":462},[79,99991,99992],{"class":89},"       [ 3,  4],\n",[79,99994,99995],{"class":81,"line":474},[79,99996,99997],{"class":89},"       [ 5,  6],\n",[79,99999,100000],{"class":81,"line":480},[79,100001,100002],{"class":89},"       [ 7,  8],\n",[79,100004,100005],{"class":81,"line":486},[79,100006,100007],{"class":89},"       [ 9, 10],\n",[79,100009,100010],{"class":81,"line":491},[79,100011,100012],{"class":89},"       [11, 12]])\n",[79,100014,100015],{"class":81,"line":497},[79,100016,96033],{"class":89},[14,100018,100020],{"id":100019},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,100022,100023],{},"改变了原数组",[51,100025,100027],{"className":230,"code":100026,"language":232,"meta":57,"style":57},"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",[59,100028,100029,100045,100061,100065,100069,100073,100077],{"__ignoreMap":57},[79,100030,100031,100033,100035,100037,100039,100041,100043],{"class":81,"line":82},[79,100032,2614],{"class":239},[79,100034,244],{"class":243},[79,100036,95107],{"class":239},[79,100038,1072],{"class":96},[79,100040,2752],{"class":239},[79,100042,2897],{"class":96},[79,100044,253],{"class":239},[79,100046,100047,100049,100051,100053,100055,100057,100059],{"class":81,"line":167},[79,100048,99920],{"class":239},[79,100050,244],{"class":243},[79,100052,685],{"class":239},[79,100054,1049],{"class":96},[79,100056,2752],{"class":239},[79,100058,2718],{"class":96},[79,100060,253],{"class":239},[79,100062,100063],{"class":81,"line":178},[79,100064,95669],{"class":2440},[79,100066,100067],{"class":81,"line":457},[79,100068,96033],{"class":89},[79,100070,100071],{"class":81,"line":462},[79,100072,99291],{"class":89},[79,100074,100075],{"class":81,"line":474},[79,100076,99296],{"class":89},[79,100078,100079],{"class":81,"line":480},[79,100080,96033],{"class":89},[14,100082,100084],{"id":100083},"_56-重要比较","5.6 重要比较：",[19,100086,100087],{},[3699,100088],{"alt":57,"src":100089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,100091,100092,100093,100095,100096,100098],{},"口诀：NumPy 函数要么用 ",[59,100094,98066],{},"，要么用 ",[59,100097,33615],{},"，创建结构用 shape，造数据用 size",[19,100100,100101],{},[3699,100102],{"alt":57,"src":100103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[2287,100105,100106],{},"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":57,"searchDepth":167,"depth":167,"links":100108},[100109,100110,100111,100112,100113,100114],{"id":99630,"depth":167,"text":99631},{"id":99782,"depth":167,"text":99783},{"id":99832,"depth":167,"text":99833},{"id":99878,"depth":167,"text":99879},{"id":100019,"depth":167,"text":100020},{"id":100083,"depth":167,"text":100084},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99622,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100121,"title":100122,"body":100123,"description":25516,"extension":2314,"meta":101195,"navigation":453,"path":101196,"seo":101197,"stem":101198,"__hash__":101199},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100124,"toc":101189},[100125,100128,100132,100135,100138,100141,100206,100209,100249,100252,100334,100337,100342,100364,100366,100371,100376,100379,100382,100537,100540,100742,100746,100749,100752,100820,100822,100827,100830,100833,100913,100917,100920,100922,100995,100997,101002,101004,101084,101088,101091,101094,101097,101100,101103,101106,101186],[10,100126,100122],{"id":100127},"_6数组的拼接",[14,100129,100131],{"id":100130},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,100133,100134],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,100136,100137],{},"函数内部传两个数列构成的数列或者元组",[19,100139,100140],{},"①一维数组的拼接",[51,100142,100144],{"className":230,"code":100143,"language":232,"meta":57,"style":57},"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",[59,100145,100146,100166,100186,100191,100196,100201],{"__ignoreMap":57},[79,100147,100148,100150,100152,100154,100156,100158,100160,100162,100164],{"class":81,"line":82},[79,100149,2614],{"class":239},[79,100151,244],{"class":243},[79,100153,95129],{"class":239},[79,100155,1072],{"class":96},[79,100157,2752],{"class":239},[79,100159,1049],{"class":96},[79,100161,2752],{"class":239},[79,100163,1188],{"class":96},[79,100165,1243],{"class":239},[79,100167,100168,100170,100172,100174,100176,100178,100180,100182,100184],{"class":81,"line":167},[79,100169,2638],{"class":239},[79,100171,244],{"class":243},[79,100173,95129],{"class":239},[79,100175,2668],{"class":96},[79,100177,2752],{"class":239},[79,100179,2694],{"class":96},[79,100181,2752],{"class":239},[79,100183,2718],{"class":96},[79,100185,1243],{"class":239},[79,100187,100188],{"class":81,"line":178},[79,100189,100190],{"class":2440},"#调用concatenate进行数组拼接\n",[79,100192,100193],{"class":81,"line":457},[79,100194,100195],{"class":239},"np.concatenate((a,b))\n",[79,100197,100198],{"class":81,"line":462},[79,100199,100200],{"class":2440},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[79,100202,100203],{"class":81,"line":474},[79,100204,100205],{"class":2440},"#np.concatenate([a,b])\n",[19,100207,100208],{},"②一维多个数组拼接",[51,100210,100212],{"className":230,"code":100211,"language":232,"meta":57,"style":57},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[59,100213,100214,100219,100239,100244],{"__ignoreMap":57},[79,100215,100216],{"class":81,"line":82},[79,100217,100218],{"class":2440},"#也可以多个数组进行拼接\n",[79,100220,100221,100223,100225,100227,100229,100231,100233,100235,100237],{"class":81,"line":167},[79,100222,2663],{"class":239},[79,100224,244],{"class":243},[79,100226,95129],{"class":239},[79,100228,2820],{"class":96},[79,100230,2752],{"class":239},[79,100232,2846],{"class":96},[79,100234,2752],{"class":239},[79,100236,2897],{"class":96},[79,100238,1243],{"class":239},[79,100240,100241],{"class":81,"line":178},[79,100242,100243],{"class":239},"c\n",[79,100245,100246],{"class":81,"line":457},[79,100247,100248],{"class":239},"np.concatenate((a,b,c))\n",[19,100250,100251],{},"③二维数组拼接",[51,100253,100255],{"className":230,"code":100254,"language":232,"meta":57,"style":57},"#二维数组使用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",[59,100256,100257,100262,100286,100311,100316,100321],{"__ignoreMap":57},[79,100258,100259],{"class":81,"line":82},[79,100260,100261],{"class":2440},"#二维数组使用concatenate进行拼接\n",[79,100263,100264,100266,100268,100270,100272,100274,100276,100278,100280,100282,100284],{"class":81,"line":167},[79,100265,95411],{"class":239},[79,100267,244],{"class":243},[79,100269,95107],{"class":239},[79,100271,1072],{"class":96},[79,100273,2752],{"class":239},[79,100275,2897],{"class":96},[79,100277,95112],{"class":239},[79,100279,1188],{"class":96},[79,100281,2752],{"class":239},[79,100283,2668],{"class":96},[79,100285,253],{"class":239},[79,100287,100288,100291,100293,100295,100297,100299,100301,100303,100305,100307,100309],{"class":81,"line":178},[79,100289,100290],{"class":239},"bb",[79,100292,244],{"class":243},[79,100294,95107],{"class":239},[79,100296,2711],{"class":96},[79,100298,2752],{"class":239},[79,100300,3015],{"class":96},[79,100302,95112],{"class":239},[79,100304,1188],{"class":96},[79,100306,2752],{"class":239},[79,100308,2668],{"class":96},[79,100310,253],{"class":239},[79,100312,100313],{"class":81,"line":457},[79,100314,100315],{"class":2440},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[79,100317,100318],{"class":81,"line":462},[79,100319,100320],{"class":2440},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[79,100322,100323,100326,100328,100330,100332],{"class":81,"line":474},[79,100324,100325],{"class":239},"np.concatenate((aa,bb),",[79,100327,49628],{"class":7412},[79,100329,244],{"class":243},[79,100331,1030],{"class":96},[79,100333,253],{"class":239},[19,100335,100336],{},"结果：",[19,100338,100339],{},[3699,100340],{"alt":57,"src":100341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[51,100343,100345],{"className":230,"code":100344,"language":232,"meta":57,"style":57},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[59,100346,100347,100352],{"__ignoreMap":57},[79,100348,100349],{"class":81,"line":82},[79,100350,100351],{"class":2440},"#指定axis为1进行拼接\n",[79,100353,100354,100356,100358,100360,100362],{"class":81,"line":167},[79,100355,100325],{"class":239},[79,100357,49628],{"class":7412},[79,100359,244],{"class":243},[79,100361,1072],{"class":96},[79,100363,253],{"class":239},[19,100365,100336],{},[19,100367,100368],{},[3699,100369],{"alt":57,"src":100370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100372,100373],{},[2528,100374,100375],{},"二维数组总结：0竖着方向，1横着方向",[19,100377,100378],{},"④三维数组拼接",[19,100380,100381],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[51,100383,100385],{"className":230,"code":100384,"language":232,"meta":57,"style":57},"#两个三行六列\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",[59,100386,100387,100392,100420,100450,100455,100472,100477,100482,100487,100504,100509,100514,100519,100532],{"__ignoreMap":57},[79,100388,100389],{"class":81,"line":82},[79,100390,100391],{"class":2440},"#两个三行六列\n",[79,100393,100394,100396,100398,100400,100402,100404,100406,100408,100410,100412,100414,100416,100418],{"class":81,"line":167},[79,100395,97626],{"class":239},[79,100397,244],{"class":243},[79,100399,95107],{"class":239},[79,100401,1072],{"class":96},[79,100403,2752],{"class":239},[79,100405,2700],{"class":96},[79,100407,95112],{"class":239},[79,100409,1049],{"class":96},[79,100411,2752],{"class":239},[79,100413,1188],{"class":96},[79,100415,2752],{"class":239},[79,100417,2718],{"class":96},[79,100419,253],{"class":239},[79,100421,100422,100425,100427,100429,100431,100433,100436,100438,100440,100442,100444,100446,100448],{"class":81,"line":178},[79,100423,100424],{"class":239},"bbb",[79,100426,244],{"class":243},[79,100428,95107],{"class":239},[79,100430,2711],{"class":96},[79,100432,2752],{"class":239},[79,100434,100435],{"class":96},"137",[79,100437,95112],{"class":239},[79,100439,1049],{"class":96},[79,100441,2752],{"class":239},[79,100443,1188],{"class":96},[79,100445,2752],{"class":239},[79,100447,2718],{"class":96},[79,100449,253],{"class":239},[79,100451,100452],{"class":81,"line":457},[79,100453,100454],{"class":2440},"#axis=0\n",[79,100456,100457,100459,100461,100464,100466,100468,100470],{"class":81,"line":462},[79,100458,3068],{"class":239},[79,100460,244],{"class":243},[79,100462,100463],{"class":239},"np.concatenate((aaa,bbb),",[79,100465,49628],{"class":7412},[79,100467,244],{"class":243},[79,100469,1030],{"class":96},[79,100471,253],{"class":239},[79,100473,100474],{"class":81,"line":474},[79,100475,100476],{"class":239},"s.shape\n",[79,100478,100479],{"class":81,"line":480},[79,100480,100481],{"class":2440},"#输出：(4,3,6)\n",[79,100483,100484],{"class":81,"line":486},[79,100485,100486],{"class":2440},"#axis=1\n",[79,100488,100489,100492,100494,100496,100498,100500,100502],{"class":81,"line":491},[79,100490,100491],{"class":239},"ss",[79,100493,244],{"class":243},[79,100495,100463],{"class":239},[79,100497,49628],{"class":7412},[79,100499,244],{"class":243},[79,100501,1072],{"class":96},[79,100503,253],{"class":239},[79,100505,100506],{"class":81,"line":497},[79,100507,100508],{"class":239},"ss.shape\n",[79,100510,100511],{"class":81,"line":503},[79,100512,100513],{"class":2440},"#输出：(2,6,6)\n",[79,100515,100516],{"class":81,"line":509},[79,100517,100518],{"class":2440},"#axis=2\n",[79,100520,100521,100523,100525,100527,100529],{"class":81,"line":514},[79,100522,100463],{"class":239},[79,100524,49628],{"class":7412},[79,100526,244],{"class":243},[79,100528,1049],{"class":96},[79,100530,100531],{"class":239},").shape\n",[79,100533,100534],{"class":81,"line":520},[79,100535,100536],{"class":2440},"#输出：（2，3，12）\n",[19,100538,100539],{},"⑤四维数组拼接",[51,100541,100543],{"className":230,"code":100542,"language":232,"meta":57,"style":57},"#两个三行六列\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",[59,100544,100545,100549,100577,100605,100630,100656,100660,100673,100678,100682,100694,100699,100703,100715,100720,100725,100737],{"__ignoreMap":57},[79,100546,100547],{"class":81,"line":82},[79,100548,100391],{"class":2440},[79,100550,100551,100553,100555,100557,100559,100561,100563,100565,100567,100569,100571,100573,100575],{"class":81,"line":167},[79,100552,97626],{"class":239},[79,100554,244],{"class":243},[79,100556,95107],{"class":239},[79,100558,1072],{"class":96},[79,100560,2752],{"class":239},[79,100562,2700],{"class":96},[79,100564,95112],{"class":239},[79,100566,1049],{"class":96},[79,100568,2752],{"class":239},[79,100570,1188],{"class":96},[79,100572,2752],{"class":239},[79,100574,2718],{"class":96},[79,100576,253],{"class":239},[79,100578,100579,100581,100583,100585,100587,100589,100591,100593,100595,100597,100599,100601,100603],{"class":81,"line":178},[79,100580,100424],{"class":239},[79,100582,244],{"class":243},[79,100584,95107],{"class":239},[79,100586,2711],{"class":96},[79,100588,2752],{"class":239},[79,100590,100435],{"class":96},[79,100592,95112],{"class":239},[79,100594,1049],{"class":96},[79,100596,2752],{"class":239},[79,100598,1188],{"class":96},[79,100600,2752],{"class":239},[79,100602,2718],{"class":96},[79,100604,253],{"class":239},[79,100606,100607,100610,100612,100614,100616,100618,100620,100622,100624,100626,100628],{"class":81,"line":457},[79,100608,100609],{"class":239},"aaaa",[79,100611,244],{"class":243},[79,100613,99773],{"class":239},[79,100615,1049],{"class":96},[79,100617,2752],{"class":239},[79,100619,1188],{"class":96},[79,100621,2752],{"class":239},[79,100623,1188],{"class":96},[79,100625,2752],{"class":239},[79,100627,1049],{"class":96},[79,100629,253],{"class":239},[79,100631,100632,100635,100637,100640,100642,100644,100646,100648,100650,100652,100654],{"class":81,"line":462},[79,100633,100634],{"class":239},"bbbb",[79,100636,244],{"class":243},[79,100638,100639],{"class":239},"bbb.reshape(",[79,100641,1049],{"class":96},[79,100643,2752],{"class":239},[79,100645,1188],{"class":96},[79,100647,2752],{"class":239},[79,100649,1188],{"class":96},[79,100651,2752],{"class":239},[79,100653,1049],{"class":96},[79,100655,253],{"class":239},[79,100657,100658],{"class":81,"line":474},[79,100659,100454],{"class":2440},[79,100661,100662,100665,100667,100669,100671],{"class":81,"line":480},[79,100663,100664],{"class":239},"np.concatenate((aaaa,bbbb),",[79,100666,49628],{"class":7412},[79,100668,244],{"class":243},[79,100670,1030],{"class":96},[79,100672,100531],{"class":239},[79,100674,100675],{"class":81,"line":486},[79,100676,100677],{"class":2440},"#结果：（4，3，3，2）\n",[79,100679,100680],{"class":81,"line":491},[79,100681,100486],{"class":2440},[79,100683,100684,100686,100688,100690,100692],{"class":81,"line":497},[79,100685,100664],{"class":239},[79,100687,49628],{"class":7412},[79,100689,244],{"class":243},[79,100691,1072],{"class":96},[79,100693,100531],{"class":239},[79,100695,100696],{"class":81,"line":503},[79,100697,100698],{"class":2440},"#结果：（2，6，3，2）\n",[79,100700,100701],{"class":81,"line":509},[79,100702,100518],{"class":2440},[79,100704,100705,100707,100709,100711,100713],{"class":81,"line":514},[79,100706,100664],{"class":239},[79,100708,49628],{"class":7412},[79,100710,244],{"class":243},[79,100712,1049],{"class":96},[79,100714,100531],{"class":239},[79,100716,100717],{"class":81,"line":520},[79,100718,100719],{"class":2440},"#结果：（2，3，6，2）\n",[79,100721,100722],{"class":81,"line":526},[79,100723,100724],{"class":2440},"#axis=3\n",[79,100726,100727,100729,100731,100733,100735],{"class":81,"line":532},[79,100728,100664],{"class":239},[79,100730,49628],{"class":7412},[79,100732,244],{"class":243},[79,100734,1188],{"class":96},[79,100736,100531],{"class":239},[79,100738,100739],{"class":81,"line":537},[79,100740,100741],{"class":2440},"#结果：（2，3，3，4）\n",[14,100743,100745],{"id":100744},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100747,100748],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100750,100751],{},"①二维数组",[51,100753,100755],{"className":230,"code":100754,"language":232,"meta":57,"style":57},"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",[59,100756,100757,100781,100805,100810,100815],{"__ignoreMap":57},[79,100758,100759,100761,100763,100765,100767,100769,100771,100773,100775,100777,100779],{"class":81,"line":82},[79,100760,95411],{"class":239},[79,100762,244],{"class":243},[79,100764,95107],{"class":239},[79,100766,1072],{"class":96},[79,100768,2752],{"class":239},[79,100770,2897],{"class":96},[79,100772,95112],{"class":239},[79,100774,1188],{"class":96},[79,100776,2752],{"class":239},[79,100778,2668],{"class":96},[79,100780,253],{"class":239},[79,100782,100783,100785,100787,100789,100791,100793,100795,100797,100799,100801,100803],{"class":81,"line":167},[79,100784,100290],{"class":239},[79,100786,244],{"class":243},[79,100788,95107],{"class":239},[79,100790,2711],{"class":96},[79,100792,2752],{"class":239},[79,100794,3015],{"class":96},[79,100796,95112],{"class":239},[79,100798,1188],{"class":96},[79,100800,2752],{"class":239},[79,100802,2668],{"class":96},[79,100804,253],{"class":239},[79,100806,100807],{"class":81,"line":178},[79,100808,100809],{"class":239},"np.hstack((aa,bb))\n",[79,100811,100812],{"class":81,"line":457},[79,100813,100814],{"class":2440},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[79,100816,100817],{"class":81,"line":462},[79,100818,100819],{"class":2440},"#np.hstack([aa,bb])\n",[19,100821,100336],{},[19,100823,100824],{},[3699,100825],{"alt":57,"src":100826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100828,100829],{},"等效于concatenate()函数中axis=1时的情况",[19,100831,100832],{},"②三维数组",[51,100834,100836],{"className":230,"code":100835,"language":232,"meta":57,"style":57},"#两个三行六列\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",[59,100837,100838,100842,100870,100898,100903,100908],{"__ignoreMap":57},[79,100839,100840],{"class":81,"line":82},[79,100841,100391],{"class":2440},[79,100843,100844,100846,100848,100850,100852,100854,100856,100858,100860,100862,100864,100866,100868],{"class":81,"line":167},[79,100845,97626],{"class":239},[79,100847,244],{"class":243},[79,100849,95107],{"class":239},[79,100851,1072],{"class":96},[79,100853,2752],{"class":239},[79,100855,2700],{"class":96},[79,100857,95112],{"class":239},[79,100859,1049],{"class":96},[79,100861,2752],{"class":239},[79,100863,1188],{"class":96},[79,100865,2752],{"class":239},[79,100867,2718],{"class":96},[79,100869,253],{"class":239},[79,100871,100872,100874,100876,100878,100880,100882,100884,100886,100888,100890,100892,100894,100896],{"class":81,"line":178},[79,100873,100424],{"class":239},[79,100875,244],{"class":243},[79,100877,95107],{"class":239},[79,100879,2711],{"class":96},[79,100881,2752],{"class":239},[79,100883,100435],{"class":96},[79,100885,95112],{"class":239},[79,100887,1049],{"class":96},[79,100889,2752],{"class":239},[79,100891,1188],{"class":96},[79,100893,2752],{"class":239},[79,100895,2718],{"class":96},[79,100897,253],{"class":239},[79,100899,100900],{"class":81,"line":457},[79,100901,100902],{"class":2440},"#使用hstack\n",[79,100904,100905],{"class":81,"line":462},[79,100906,100907],{"class":239},"np.hstack((aaa,bbb)).shape\n",[79,100909,100910],{"class":81,"line":474},[79,100911,100912],{"class":2440},"#输出：（2，6，6）\n",[14,100914,100916],{"id":100915},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100918,100919],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100921,100751],{},[51,100923,100925],{"className":230,"code":100924,"language":232,"meta":57,"style":57},"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",[59,100926,100927,100951,100975,100980,100985,100990],{"__ignoreMap":57},[79,100928,100929,100931,100933,100935,100937,100939,100941,100943,100945,100947,100949],{"class":81,"line":82},[79,100930,95411],{"class":239},[79,100932,244],{"class":243},[79,100934,95107],{"class":239},[79,100936,1072],{"class":96},[79,100938,2752],{"class":239},[79,100940,2897],{"class":96},[79,100942,95112],{"class":239},[79,100944,1188],{"class":96},[79,100946,2752],{"class":239},[79,100948,2668],{"class":96},[79,100950,253],{"class":239},[79,100952,100953,100955,100957,100959,100961,100963,100965,100967,100969,100971,100973],{"class":81,"line":167},[79,100954,100290],{"class":239},[79,100956,244],{"class":243},[79,100958,95107],{"class":239},[79,100960,2711],{"class":96},[79,100962,2752],{"class":239},[79,100964,3015],{"class":96},[79,100966,95112],{"class":239},[79,100968,1188],{"class":96},[79,100970,2752],{"class":239},[79,100972,2668],{"class":96},[79,100974,253],{"class":239},[79,100976,100977],{"class":81,"line":178},[79,100978,100979],{"class":2440},"#vstack 垂直方向进行堆叠\n",[79,100981,100982],{"class":81,"line":457},[79,100983,100984],{"class":239},"np.vstack((aa,bb))\n",[79,100986,100987],{"class":81,"line":462},[79,100988,100989],{"class":2440},"#与hstack传的参数类似，等价于：\n",[79,100991,100992],{"class":81,"line":474},[79,100993,100994],{"class":239},"np.vstack([aa,bb])\n",[19,100996,100336],{},[19,100998,100999],{},[3699,101000],{"alt":57,"src":101001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,101003,100832],{},[51,101005,101007],{"className":230,"code":101006,"language":232,"meta":57,"style":57},"#两个三行六列\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",[59,101008,101009,101013,101041,101069,101074,101079],{"__ignoreMap":57},[79,101010,101011],{"class":81,"line":82},[79,101012,100391],{"class":2440},[79,101014,101015,101017,101019,101021,101023,101025,101027,101029,101031,101033,101035,101037,101039],{"class":81,"line":167},[79,101016,97626],{"class":239},[79,101018,244],{"class":243},[79,101020,95107],{"class":239},[79,101022,1072],{"class":96},[79,101024,2752],{"class":239},[79,101026,2700],{"class":96},[79,101028,95112],{"class":239},[79,101030,1049],{"class":96},[79,101032,2752],{"class":239},[79,101034,1188],{"class":96},[79,101036,2752],{"class":239},[79,101038,2718],{"class":96},[79,101040,253],{"class":239},[79,101042,101043,101045,101047,101049,101051,101053,101055,101057,101059,101061,101063,101065,101067],{"class":81,"line":178},[79,101044,100424],{"class":239},[79,101046,244],{"class":243},[79,101048,95107],{"class":239},[79,101050,2711],{"class":96},[79,101052,2752],{"class":239},[79,101054,100435],{"class":96},[79,101056,95112],{"class":239},[79,101058,1049],{"class":96},[79,101060,2752],{"class":239},[79,101062,1188],{"class":96},[79,101064,2752],{"class":239},[79,101066,2718],{"class":96},[79,101068,253],{"class":239},[79,101070,101071],{"class":81,"line":457},[79,101072,101073],{"class":2440},"#使用vstack\n",[79,101075,101076],{"class":81,"line":462},[79,101077,101078],{"class":239},"np.vstack((aaa,bbb)).shape\n",[79,101080,101081],{"class":81,"line":474},[79,101082,101083],{"class":2440},"#输出：（4，3，6）\n",[14,101085,101087],{"id":101086},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,101089,101090],{},"该方法是三维数组特有的方法",[19,101092,101093],{},"也就是说",[19,101095,101096],{},"一维数组拼接方法用：concatenate()",[19,101098,101099],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,101101,101102],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,101104,101105],{},"四维数组及多维数组只能用concatenate进行拼接",[51,101107,101109],{"className":230,"code":101108,"language":232,"meta":57,"style":57},"#两个三行六列\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",[59,101110,101111,101115,101143,101171,101176,101181],{"__ignoreMap":57},[79,101112,101113],{"class":81,"line":82},[79,101114,100391],{"class":2440},[79,101116,101117,101119,101121,101123,101125,101127,101129,101131,101133,101135,101137,101139,101141],{"class":81,"line":167},[79,101118,97626],{"class":239},[79,101120,244],{"class":243},[79,101122,95107],{"class":239},[79,101124,1072],{"class":96},[79,101126,2752],{"class":239},[79,101128,2700],{"class":96},[79,101130,95112],{"class":239},[79,101132,1049],{"class":96},[79,101134,2752],{"class":239},[79,101136,1188],{"class":96},[79,101138,2752],{"class":239},[79,101140,2718],{"class":96},[79,101142,253],{"class":239},[79,101144,101145,101147,101149,101151,101153,101155,101157,101159,101161,101163,101165,101167,101169],{"class":81,"line":178},[79,101146,100424],{"class":239},[79,101148,244],{"class":243},[79,101150,95107],{"class":239},[79,101152,2711],{"class":96},[79,101154,2752],{"class":239},[79,101156,100435],{"class":96},[79,101158,95112],{"class":239},[79,101160,1049],{"class":96},[79,101162,2752],{"class":239},[79,101164,1188],{"class":96},[79,101166,2752],{"class":239},[79,101168,2718],{"class":96},[79,101170,253],{"class":239},[79,101172,101173],{"class":81,"line":457},[79,101174,101175],{"class":2440},"#使用dstack\n",[79,101177,101178],{"class":81,"line":462},[79,101179,101180],{"class":239},"np.dstack((aaa,bbb)).shape\n",[79,101182,101183],{"class":81,"line":474},[79,101184,101185],{"class":2440},"#结果：（2，3，12）\n",[2287,101187,101188],{},"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":57,"searchDepth":167,"depth":167,"links":101190},[101191,101192,101193,101194],{"id":100130,"depth":167,"text":100131},{"id":100744,"depth":167,"text":100745},{"id":100915,"depth":167,"text":100916},{"id":101086,"depth":167,"text":101087},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100122,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101201,"title":101202,"body":101203,"description":25516,"extension":2314,"meta":101478,"navigation":453,"path":101479,"seo":101480,"stem":101481,"__hash__":101482},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101204,"toc":101476},[101205,101208,101211,101305,101308,101311,101314,101317,101320,101323,101326,101329,101473],[10,101206,101202],{"id":101207},"_7数组转置",[19,101209,101210],{},"使用transpose()函数",[51,101212,101214],{"className":230,"code":101213,"language":232,"meta":57,"style":57},"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",[59,101215,101216,101226,101250,101255,101260,101265,101270,101278,101282,101286,101291,101296,101301],{"__ignoreMap":57},[79,101217,101218,101220,101222,101224],{"class":81,"line":82},[79,101219,432],{"class":243},[79,101221,442],{"class":239},[79,101223,445],{"class":243},[79,101225,448],{"class":239},[79,101227,101228,101230,101232,101234,101236,101238,101240,101242,101244,101246,101248],{"class":81,"line":167},[79,101229,2614],{"class":239},[79,101231,244],{"class":243},[79,101233,33835],{"class":239},[79,101235,1072],{"class":96},[79,101237,2752],{"class":239},[79,101239,2897],{"class":96},[79,101241,95112],{"class":239},[79,101243,2668],{"class":96},[79,101245,2752],{"class":239},[79,101247,1188],{"class":96},[79,101249,253],{"class":239},[79,101251,101252],{"class":81,"line":178},[79,101253,101254],{"class":2440},"#二维数组转置\n",[79,101256,101257],{"class":81,"line":457},[79,101258,101259],{"class":2440},"#调用transpose()函数\n",[79,101261,101262],{"class":81,"line":462},[79,101263,101264],{"class":239},"a.transpose()\n",[79,101266,101267],{"class":81,"line":474},[79,101268,101269],{"class":2440},"#对于二维数组也可以采用.T来实现\n",[79,101271,101272,101275],{"class":81,"line":480},[79,101273,101274],{"class":239},"a.T",[79,101276,101277],{"class":2440},"#与上述代码一样\n",[79,101279,101280],{"class":81,"line":486},[79,101281,95669],{"class":2440},[79,101283,101284],{"class":81,"line":491},[79,101285,96033],{"class":89},[79,101287,101288],{"class":81,"line":497},[79,101289,101290],{"class":89},"array([[ 1,  4,  7, 10],\n",[79,101292,101293],{"class":81,"line":503},[79,101294,101295],{"class":89},"       [ 2,  5,  8, 11],\n",[79,101297,101298],{"class":81,"line":509},[79,101299,101300],{"class":89},"       [ 3,  6,  9, 12]])\n",[79,101302,101303],{"class":81,"line":514},[79,101304,96033],{"class":89},[19,101306,101307],{},"也可以使用np.transpose()的形式",[19,101309,101310],{},"#多维数组进行转置 np.transpose()",[19,101312,101313],{},"#对二维数组也可以使用np.transpose()进行转置",[19,101315,101316],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,101318,101319],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,101321,101322],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,101324,101325],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,101327,101328],{},"四维及以上的数组也是一样的道理",[51,101330,101332],{"className":230,"code":101331,"language":232,"meta":57,"style":57},"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",[59,101333,101334,101362,101367,101372,101377,101395,101400,101432,101437,101442,101447,101468],{"__ignoreMap":57},[79,101335,101336,101338,101340,101342,101344,101346,101348,101350,101352,101354,101356,101358,101360],{"class":81,"line":82},[79,101337,3193],{"class":239},[79,101339,244],{"class":243},[79,101341,95107],{"class":239},[79,101343,1072],{"class":96},[79,101345,2752],{"class":239},[79,101347,2700],{"class":96},[79,101349,95112],{"class":239},[79,101351,1188],{"class":96},[79,101353,2752],{"class":239},[79,101355,2718],{"class":96},[79,101357,2752],{"class":239},[79,101359,1049],{"class":96},[79,101361,253],{"class":239},[79,101363,101364],{"class":81,"line":167},[79,101365,101366],{"class":239},"x.shape\n",[79,101368,101369],{"class":81,"line":178},[79,101370,101371],{"class":2440},"#结果：（3,6,2）\n",[79,101373,101374],{"class":81,"line":457},[79,101375,101376],{"class":2440},"#使用np.transpose()进行转置 变为(2,6,3)\n",[79,101378,101379,101382,101384,101386,101388,101390,101392],{"class":81,"line":462},[79,101380,101381],{"class":239},"np.transpose(x,(",[79,101383,1049],{"class":96},[79,101385,2752],{"class":239},[79,101387,1072],{"class":96},[79,101389,2752],{"class":239},[79,101391,1030],{"class":96},[79,101393,101394],{"class":239},")).shape\n",[79,101396,101397],{"class":81,"line":474},[79,101398,101399],{"class":2440},"#结果：(2,6,3)\n",[79,101401,101402,101404,101406,101408,101410,101412,101414,101416,101418,101420,101422,101424,101426,101428,101430],{"class":81,"line":480},[79,101403,100609],{"class":239},[79,101405,244],{"class":243},[79,101407,95107],{"class":239},[79,101409,1072],{"class":96},[79,101411,2752],{"class":239},[79,101413,2700],{"class":96},[79,101415,95112],{"class":239},[79,101417,1188],{"class":96},[79,101419,2752],{"class":239},[79,101421,1049],{"class":96},[79,101423,2752],{"class":239},[79,101425,1072],{"class":96},[79,101427,2752],{"class":239},[79,101429,2718],{"class":96},[79,101431,253],{"class":239},[79,101433,101434],{"class":81,"line":486},[79,101435,101436],{"class":239},"aaaa.shape\n",[79,101438,101439],{"class":81,"line":491},[79,101440,101441],{"class":2440},"#结果：（3，2，1，6）\n",[79,101443,101444],{"class":81,"line":497},[79,101445,101446],{"class":2440},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[79,101448,101449,101452,101454,101456,101458,101460,101462,101464,101466],{"class":81,"line":503},[79,101450,101451],{"class":239},"np.transpose(aaaa,(",[79,101453,1072],{"class":96},[79,101455,2752],{"class":239},[79,101457,1049],{"class":96},[79,101459,2752],{"class":239},[79,101461,1030],{"class":96},[79,101463,2752],{"class":239},[79,101465,1188],{"class":96},[79,101467,101394],{"class":239},[79,101469,101470],{"class":81,"line":509},[79,101471,101472],{"class":2440},"#结果：(2,1,3,6)\n",[2287,101474,101475],{},"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":57,"searchDepth":167,"depth":167,"links":101477},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101202,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101484,"title":101485,"body":101486,"description":25516,"extension":2314,"meta":102220,"navigation":453,"path":102221,"seo":102222,"stem":102223,"__hash__":102224},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101487,"toc":102218},[101488,101491,101494,101497,101500,101503,101506,101509,101512,101621,101624,101627,102215],[10,101489,101485],{"id":101490},"_8数组分割",[19,101492,101493],{},"split分割",[19,101495,101496],{},"numpy.split(ary,indics_or_sections,axis)",[19,101498,101499],{},"解释：",[19,101501,101502],{},"ary:被分割的数组",[19,101504,101505],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101507,101508],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101510,101511],{},"①一维数组的分割",[51,101513,101515],{"className":230,"code":101514,"language":232,"meta":57,"style":57},"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",[59,101516,101517,101533,101538,101547,101551,101556,101564,101568,101573,101578,101591,101595,101600,101612,101616],{"__ignoreMap":57},[79,101518,101519,101521,101523,101525,101527,101529,101531],{"class":81,"line":82},[79,101520,2614],{"class":239},[79,101522,244],{"class":243},[79,101524,95107],{"class":239},[79,101526,1072],{"class":96},[79,101528,2752],{"class":239},[79,101530,2794],{"class":96},[79,101532,253],{"class":239},[79,101534,101535],{"class":81,"line":167},[79,101536,101537],{"class":2440},"#如果传入整数，必须能够平分，否则会报错\n",[79,101539,101540,101543,101545],{"class":81,"line":178},[79,101541,101542],{"class":239},"np.split(a,",[79,101544,1049],{"class":96},[79,101546,253],{"class":239},[79,101548,101549],{"class":81,"line":457},[79,101550,95669],{"class":2440},[79,101552,101553],{"class":81,"line":462},[79,101554,101555],{"class":2440},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[79,101557,101558,101560,101562],{"class":81,"line":474},[79,101559,101542],{"class":239},[79,101561,2668],{"class":96},[79,101563,253],{"class":239},[79,101565,101566],{"class":81,"line":480},[79,101567,95669],{"class":2440},[79,101569,101570],{"class":81,"line":486},[79,101571,101572],{"class":2440},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[79,101574,101575],{"class":81,"line":491},[79,101576,101577],{"class":2440},"#传入数组\n",[79,101579,101580,101583,101585,101587,101589],{"class":81,"line":497},[79,101581,101582],{"class":239},"np.split(a,[",[79,101584,1188],{"class":96},[79,101586,2752],{"class":239},[79,101588,2694],{"class":96},[79,101590,1243],{"class":239},[79,101592,101593],{"class":81,"line":503},[79,101594,95669],{"class":2440},[79,101596,101597],{"class":81,"line":509},[79,101598,101599],{"class":2440},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[79,101601,101602,101604,101606,101608,101610],{"class":81,"line":514},[79,101603,101582],{"class":239},[79,101605,2694],{"class":96},[79,101607,2752],{"class":239},[79,101609,2743],{"class":96},[79,101611,1243],{"class":239},[79,101613,101614],{"class":81,"line":520},[79,101615,95669],{"class":2440},[79,101617,101618],{"class":81,"line":526},[79,101619,101620],{"class":2440},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101622,101623],{},"②二维数组的分割",[19,101625,101626],{},"使用split()",[51,101628,101630],{"className":230,"code":101629,"language":232,"meta":57,"style":57},"#二维数组分割\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",[59,101631,101632,101637,101661,101666,101675,101679,101683,101688,101693,101698,101703,101708,101713,101718,101722,101735,101739,101743,101747,101751,101755,101760,101765,101770,101774,101779,101795,101799,101803,101808,101813,101818,101823,101828,101833,101838,101843,101848,101853,101858,101863,101868,101873,101878,101883,101888,101893,101897,101901,101921,101925,101929,101934,101939,101944,101949,101954,101959,101964,101969,101974,101979,101984,101989,101994,101999,102004,102009,102014,102019,102023,102028,102037,102041,102045,102049,102053,102057,102061,102065,102069,102073,102082,102086,102090,102094,102098,102102,102106,102110,102114,102118,102122,102126,102130,102134,102138,102142,102146,102150,102154,102158,102162,102166,102179,102183,102187,102191,102195,102199,102203,102207,102211],{"__ignoreMap":57},[79,101633,101634],{"class":81,"line":82},[79,101635,101636],{"class":2440},"#二维数组分割\n",[79,101638,101639,101641,101643,101645,101647,101649,101651,101653,101655,101657,101659],{"class":81,"line":167},[79,101640,95411],{"class":239},[79,101642,244],{"class":243},[79,101644,95107],{"class":239},[79,101646,1072],{"class":96},[79,101648,2752],{"class":239},[79,101650,2700],{"class":96},[79,101652,95112],{"class":239},[79,101654,2718],{"class":96},[79,101656,2752],{"class":239},[79,101658,2718],{"class":96},[79,101660,253],{"class":239},[79,101662,101663],{"class":81,"line":178},[79,101664,101665],{"class":2440},"#默认axis=0  传入整数平均分,按行来的\n",[79,101667,101668,101671,101673],{"class":81,"line":457},[79,101669,101670],{"class":239},"np.split(aa,",[79,101672,1188],{"class":96},[79,101674,253],{"class":239},[79,101676,101677],{"class":81,"line":462},[79,101678,97867],{"class":2440},[79,101680,101681],{"class":81,"line":474},[79,101682,96033],{"class":89},[79,101684,101685],{"class":81,"line":480},[79,101686,101687],{"class":89},"[array([[ 1,  2,  3,  4,  5,  6],\n",[79,101689,101690],{"class":81,"line":486},[79,101691,101692],{"class":89},"        [ 7,  8,  9, 10, 11, 12]]),\n",[79,101694,101695],{"class":81,"line":491},[79,101696,101697],{"class":89}," array([[13, 14, 15, 16, 17, 18],\n",[79,101699,101700],{"class":81,"line":497},[79,101701,101702],{"class":89},"        [19, 20, 21, 22, 23, 24]]),\n",[79,101704,101705],{"class":81,"line":503},[79,101706,101707],{"class":89}," array([[25, 26, 27, 28, 29, 30],\n",[79,101709,101710],{"class":81,"line":509},[79,101711,101712],{"class":89},"        [31, 32, 33, 34, 35, 36]])]\n",[79,101714,101715],{"class":81,"line":514},[79,101716,101717],{"class":89}," '''\n",[79,101719,101720],{"class":81,"line":520},[79,101721,101577],{"class":2440},[79,101723,101724,101727,101729,101731,101733],{"class":81,"line":526},[79,101725,101726],{"class":239},"np.split(aa,[",[79,101728,1049],{"class":96},[79,101730,2752],{"class":239},[79,101732,2694],{"class":96},[79,101734,1243],{"class":239},[79,101736,101737],{"class":81,"line":532},[79,101738,97867],{"class":2440},[79,101740,101741],{"class":81,"line":537},[79,101742,96033],{"class":89},[79,101744,101745],{"class":81,"line":543},[79,101746,101687],{"class":89},[79,101748,101749],{"class":81,"line":549},[79,101750,101692],{"class":89},[79,101752,101753],{"class":81,"line":555},[79,101754,101697],{"class":89},[79,101756,101757],{"class":81,"line":561},[79,101758,101759],{"class":89},"        [19, 20, 21, 22, 23, 24],\n",[79,101761,101762],{"class":81,"line":567},[79,101763,101764],{"class":89},"        [25, 26, 27, 28, 29, 30]]),\n",[79,101766,101767],{"class":81,"line":573},[79,101768,101769],{"class":89}," array([[31, 32, 33, 34, 35, 36]])]\n",[79,101771,101772],{"class":81,"line":579},[79,101773,96033],{"class":89},[79,101775,101776],{"class":81,"line":584},[79,101777,101778],{"class":2440},"#axis=1 按照列来分\n",[79,101780,101781,101783,101785,101787,101789,101791,101793],{"class":81,"line":590},[79,101782,101670],{"class":239},[79,101784,1188],{"class":96},[79,101786,2752],{"class":239},[79,101788,49628],{"class":7412},[79,101790,244],{"class":243},[79,101792,1072],{"class":96},[79,101794,253],{"class":239},[79,101796,101797],{"class":81,"line":596},[79,101798,97867],{"class":2440},[79,101800,101801],{"class":81,"line":602},[79,101802,96033],{"class":89},[79,101804,101805],{"class":81,"line":608},[79,101806,101807],{"class":89},"[array([[ 1,  2],\n",[79,101809,101810],{"class":81,"line":614},[79,101811,101812],{"class":89},"        [ 7,  8],\n",[79,101814,101815],{"class":81,"line":620},[79,101816,101817],{"class":89},"        [13, 14],\n",[79,101819,101820],{"class":81,"line":625},[79,101821,101822],{"class":89},"        [19, 20],\n",[79,101824,101825],{"class":81,"line":630},[79,101826,101827],{"class":89},"        [25, 26],\n",[79,101829,101830],{"class":81,"line":648},[79,101831,101832],{"class":89},"        [31, 32]]),\n",[79,101834,101835],{"class":81,"line":659},[79,101836,101837],{"class":89}," array([[ 3,  4],\n",[79,101839,101840],{"class":81,"line":676},[79,101841,101842],{"class":89},"        [ 9, 10],\n",[79,101844,101845],{"class":81,"line":708},[79,101846,101847],{"class":89},"        [15, 16],\n",[79,101849,101850],{"class":81,"line":717},[79,101851,101852],{"class":89},"        [21, 22],\n",[79,101854,101855],{"class":81,"line":722},[79,101856,101857],{"class":89},"        [27, 28],\n",[79,101859,101860],{"class":81,"line":727},[79,101861,101862],{"class":89},"        [33, 34]]),\n",[79,101864,101865],{"class":81,"line":738},[79,101866,101867],{"class":89}," array([[ 5,  6],\n",[79,101869,101870],{"class":81,"line":753},[79,101871,101872],{"class":89},"        [11, 12],\n",[79,101874,101875],{"class":81,"line":768},[79,101876,101877],{"class":89},"        [17, 18],\n",[79,101879,101880],{"class":81,"line":776},[79,101881,101882],{"class":89},"        [23, 24],\n",[79,101884,101885],{"class":81,"line":781},[79,101886,101887],{"class":89},"        [29, 30],\n",[79,101889,101890],{"class":81,"line":786},[79,101891,101892],{"class":89},"        [35, 36]])]\n",[79,101894,101895],{"class":81,"line":802},[79,101896,101717],{"class":89},[79,101898,101899],{"class":81,"line":815},[79,101900,101577],{"class":2440},[79,101902,101903,101905,101907,101909,101911,101913,101915,101917,101919],{"class":81,"line":828},[79,101904,101726],{"class":239},[79,101906,1072],{"class":96},[79,101908,2752],{"class":239},[79,101910,1049],{"class":96},[79,101912,43723],{"class":239},[79,101914,49628],{"class":7412},[79,101916,244],{"class":243},[79,101918,1072],{"class":96},[79,101920,253],{"class":239},[79,101922,101923],{"class":81,"line":842},[79,101924,95669],{"class":2440},[79,101926,101927],{"class":81,"line":859},[79,101928,96033],{"class":89},[79,101930,101931],{"class":81,"line":878},[79,101932,101933],{"class":89},"[array([[ 1],\n",[79,101935,101936],{"class":81,"line":883},[79,101937,101938],{"class":89},"        [ 7],\n",[79,101940,101941],{"class":81,"line":888},[79,101942,101943],{"class":89},"        [13],\n",[79,101945,101946],{"class":81,"line":904},[79,101947,101948],{"class":89},"        [19],\n",[79,101950,101951],{"class":81,"line":919},[79,101952,101953],{"class":89},"        [25],\n",[79,101955,101956],{"class":81,"line":930},[79,101957,101958],{"class":89},"        [31]]),\n",[79,101960,101961],{"class":81,"line":941},[79,101962,101963],{"class":89}," array([[ 2],\n",[79,101965,101966],{"class":81,"line":946},[79,101967,101968],{"class":89},"        [ 8],\n",[79,101970,101971],{"class":81,"line":969},[79,101972,101973],{"class":89},"        [14],\n",[79,101975,101976],{"class":81,"line":975},[79,101977,101978],{"class":89},"        [20],\n",[79,101980,101981],{"class":81,"line":989},[79,101982,101983],{"class":89},"        [26],\n",[79,101985,101986],{"class":81,"line":1003},[79,101987,101988],{"class":89},"        [32]]),\n",[79,101990,101991],{"class":81,"line":1019},[79,101992,101993],{"class":89}," array([[ 3,  4,  5,  6],\n",[79,101995,101996],{"class":81,"line":1024},[79,101997,101998],{"class":89},"        [ 9, 10, 11, 12],\n",[79,102000,102001],{"class":81,"line":1067},[79,102002,102003],{"class":89},"        [15, 16, 17, 18],\n",[79,102005,102006],{"class":81,"line":1101},[79,102007,102008],{"class":89},"        [21, 22, 23, 24],\n",[79,102010,102011],{"class":81,"line":1106},[79,102012,102013],{"class":89},"        [27, 28, 29, 30],\n",[79,102015,102016],{"class":81,"line":1112},[79,102017,102018],{"class":89},"        [33, 34, 35, 36]])]\n",[79,102020,102021],{"class":81,"line":1124},[79,102022,96033],{"class":89},[79,102024,102025],{"class":81,"line":1129},[79,102026,102027],{"class":2440},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[79,102029,102030,102033,102035],{"class":81,"line":1150},[79,102031,102032],{"class":239},"np.vsplit(aa,",[79,102034,1188],{"class":96},[79,102036,253],{"class":239},[79,102038,102039],{"class":81,"line":1161},[79,102040,95669],{"class":2440},[79,102042,102043],{"class":81,"line":1175},[79,102044,96033],{"class":89},[79,102046,102047],{"class":81,"line":1194},[79,102048,101687],{"class":89},[79,102050,102051],{"class":81,"line":1211},[79,102052,101692],{"class":89},[79,102054,102055],{"class":81,"line":1228},[79,102056,101697],{"class":89},[79,102058,102059],{"class":81,"line":1246},[79,102060,101702],{"class":89},[79,102062,102063],{"class":81,"line":1251},[79,102064,101707],{"class":89},[79,102066,102067],{"class":81,"line":1274},[79,102068,101712],{"class":89},[79,102070,102071],{"class":81,"line":1296},[79,102072,96033],{"class":89},[79,102074,102075,102078,102080],{"class":81,"line":1316},[79,102076,102077],{"class":239},"np.hsplit(aa,",[79,102079,1188],{"class":96},[79,102081,253],{"class":239},[79,102083,102084],{"class":81,"line":1321},[79,102085,95669],{"class":2440},[79,102087,102088],{"class":81,"line":1326},[79,102089,96033],{"class":89},[79,102091,102092],{"class":81,"line":1342},[79,102093,101807],{"class":89},[79,102095,102096],{"class":81,"line":18985},[79,102097,101812],{"class":89},[79,102099,102100],{"class":81,"line":18990},[79,102101,101817],{"class":89},[79,102103,102104],{"class":81,"line":18995},[79,102105,101822],{"class":89},[79,102107,102108],{"class":81,"line":19009},[79,102109,101827],{"class":89},[79,102111,102112],{"class":81,"line":19021},[79,102113,101832],{"class":89},[79,102115,102116],{"class":81,"line":19026},[79,102117,101837],{"class":89},[79,102119,102120],{"class":81,"line":19039},[79,102121,101842],{"class":89},[79,102123,102124],{"class":81,"line":19044},[79,102125,101847],{"class":89},[79,102127,102128],{"class":81,"line":19049},[79,102129,101852],{"class":89},[79,102131,102132],{"class":81,"line":19054},[79,102133,101857],{"class":89},[79,102135,102136],{"class":81,"line":19067},[79,102137,101862],{"class":89},[79,102139,102140],{"class":81,"line":19072},[79,102141,101867],{"class":89},[79,102143,102144],{"class":81,"line":34748},[79,102145,101872],{"class":89},[79,102147,102148],{"class":81,"line":34754},[79,102149,101877],{"class":89},[79,102151,102152],{"class":81,"line":34760},[79,102153,101882],{"class":89},[79,102155,102156],{"class":81,"line":34766},[79,102157,101887],{"class":89},[79,102159,102160],{"class":81,"line":34772},[79,102161,101892],{"class":89},[79,102163,102164],{"class":81,"line":34783},[79,102165,96033],{"class":89},[79,102167,102168,102171,102173,102175,102177],{"class":81,"line":34789},[79,102169,102170],{"class":239},"np.vsplit(aa,[",[79,102172,1049],{"class":96},[79,102174,2752],{"class":239},[79,102176,2694],{"class":96},[79,102178,1243],{"class":239},[79,102180,102181],{"class":81,"line":34809},[79,102182,95669],{"class":2440},[79,102184,102185],{"class":81,"line":34815},[79,102186,96033],{"class":89},[79,102188,102189],{"class":81,"line":34826},[79,102190,101687],{"class":89},[79,102192,102193],{"class":81,"line":34832},[79,102194,101692],{"class":89},[79,102196,102197],{"class":81,"line":34838},[79,102198,101697],{"class":89},[79,102200,102201],{"class":81,"line":34844},[79,102202,101759],{"class":89},[79,102204,102205],{"class":81,"line":34850},[79,102206,101764],{"class":89},[79,102208,102209],{"class":81,"line":34856},[79,102210,101769],{"class":89},[79,102212,102213],{"class":81,"line":34862},[79,102214,101717],{"class":89},[2287,102216,102217],{},"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":57,"searchDepth":167,"depth":167,"links":102219},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101485,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102226,"title":102227,"body":102228,"description":25516,"extension":2314,"meta":102722,"navigation":453,"path":102723,"seo":102724,"stem":102725,"__hash__":102726},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102229,"toc":102713},[102230,102233,102236,102261,102265,102324,102376,102380,102382,102418,102472,102474,102512,102583,102587,102592,102596,102599,102632,102635,102639,102642,102645,102648,102651,102656,102660,102663,102666,102669,102672,102677,102681,102686,102689,102710],[10,102231,102227],{"id":102232},"_9数学函数",[19,102234,102235],{},"补充回顾：python的列表推导式",[51,102237,102239],{"className":230,"code":102238,"language":232,"meta":57,"style":57},"[1\u002Fi for i in a]\n",[59,102240,102241],{"__ignoreMap":57},[79,102242,102243,102245,102247,102249,102252,102254,102256,102258],{"class":81,"line":82},[79,102244,3263],{"class":239},[79,102246,1072],{"class":96},[79,102248,2957],{"class":243},[79,102250,102251],{"class":239},"i ",[79,102253,1874],{"class":243},[79,102255,11622],{"class":239},[79,102257,955],{"class":243},[79,102259,102260],{"class":239}," a]\n",[14,102262,102264],{"id":102263},"_91-求倒数","9.1 求倒数",[51,102266,102268],{"className":230,"code":102267,"language":232,"meta":57,"style":57},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[59,102269,102270,102275,102303,102315],{"__ignoreMap":57},[79,102271,102272],{"class":81,"line":82},[79,102273,102274],{"class":2440},"#数组求倒数\n",[79,102276,102277,102279,102281,102283,102285,102287,102289,102291,102293,102295,102297,102299,102301],{"class":81,"line":167},[79,102278,2614],{"class":239},[79,102280,244],{"class":243},[79,102282,3263],{"class":239},[79,102284,1072],{"class":96},[79,102286,2752],{"class":239},[79,102288,1049],{"class":96},[79,102290,2752],{"class":239},[79,102292,1188],{"class":96},[79,102294,2752],{"class":239},[79,102296,2668],{"class":96},[79,102298,2752],{"class":239},[79,102300,2694],{"class":96},[79,102302,35361],{"class":239},[79,102304,102305,102307,102309,102312],{"class":81,"line":178},[79,102306,2638],{"class":239},[79,102308,244],{"class":243},[79,102310,102311],{"class":239},"np.array(a)",[79,102313,102314],{"class":2440},"#将列表转换为数组\n",[79,102316,102317,102319,102321],{"class":81,"line":457},[79,102318,1072],{"class":96},[79,102320,2957],{"class":243},[79,102322,102323],{"class":239},"b\n",[51,102325,102327],{"className":230,"code":102326,"language":232,"meta":57,"style":57},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[59,102328,102329,102357,102366,102371],{"__ignoreMap":57},[79,102330,102331,102333,102335,102337,102339,102341,102343,102345,102347,102349,102351,102353,102355],{"class":81,"line":82},[79,102332,2614],{"class":239},[79,102334,244],{"class":243},[79,102336,3263],{"class":239},[79,102338,1072],{"class":96},[79,102340,2752],{"class":239},[79,102342,1049],{"class":96},[79,102344,2752],{"class":239},[79,102346,1188],{"class":96},[79,102348,2752],{"class":239},[79,102350,2668],{"class":96},[79,102352,2752],{"class":239},[79,102354,2694],{"class":96},[79,102356,35361],{"class":239},[79,102358,102359,102361,102363],{"class":81,"line":167},[79,102360,2638],{"class":239},[79,102362,244],{"class":243},[79,102364,102365],{"class":239},"np.array(a)\n",[79,102367,102368],{"class":81,"line":178},[79,102369,102370],{"class":2440},"#调用numpy中的函数reciprocal()\n",[79,102372,102373],{"class":81,"line":457},[79,102374,102375],{"class":239},"np.reciprocal(b)\n",[14,102377,102379],{"id":102378},"_92-求平方","9.2 求平方",[19,102381,96635],{},[51,102383,102385],{"className":230,"code":102384,"language":232,"meta":57,"style":57},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[59,102386,102387,102392,102397,102413],{"__ignoreMap":57},[79,102388,102389],{"class":81,"line":82},[79,102390,102391],{"class":2440},"#square()，求平方\n",[79,102393,102394],{"class":81,"line":167},[79,102395,102396],{"class":2440},"#一维数组\n",[79,102398,102399,102401,102403,102405,102407,102409,102411],{"class":81,"line":178},[79,102400,2614],{"class":239},[79,102402,244],{"class":243},[79,102404,95107],{"class":239},[79,102406,1072],{"class":96},[79,102408,2752],{"class":239},[79,102410,2820],{"class":96},[79,102412,253],{"class":239},[79,102414,102415],{"class":81,"line":457},[79,102416,102417],{"class":239},"np.square(a)\n",[51,102419,102421],{"className":230,"code":102420,"language":232,"meta":57,"style":57},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[59,102422,102423,102428,102433,102454],{"__ignoreMap":57},[79,102424,102425],{"class":81,"line":82},[79,102426,102427],{"class":2440},"#或者通过循环遍历的形式来计算\n",[79,102429,102430],{"class":81,"line":167},[79,102431,102432],{"class":2440},"#这是一个列表\n",[79,102434,102435,102438,102440,102442,102444,102446,102448,102451],{"class":81,"line":178},[79,102436,102437],{"class":239},"[i",[79,102439,2829],{"class":243},[79,102441,102251],{"class":239},[79,102443,1874],{"class":243},[79,102445,11622],{"class":239},[79,102447,955],{"class":243},[79,102449,102450],{"class":239}," a]",[79,102452,102453],{"class":2440},"#这个求完之后在数列当中\n",[79,102455,102456,102459,102461,102463,102465,102467,102469],{"class":81,"line":457},[79,102457,102458],{"class":239},"np.array([i",[79,102460,2829],{"class":243},[79,102462,102251],{"class":239},[79,102464,1874],{"class":243},[79,102466,11622],{"class":239},[79,102468,955],{"class":243},[79,102470,102471],{"class":239}," a])\n",[19,102473,95396],{},[51,102475,102477],{"className":230,"code":102476,"language":232,"meta":57,"style":57},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[59,102478,102479,102483,102507],{"__ignoreMap":57},[79,102480,102481],{"class":81,"line":82},[79,102482,95406],{"class":2440},[79,102484,102485,102487,102489,102491,102493,102495,102497,102499,102501,102503,102505],{"class":81,"line":167},[79,102486,95411],{"class":239},[79,102488,244],{"class":243},[79,102490,95107],{"class":239},[79,102492,1072],{"class":96},[79,102494,2752],{"class":239},[79,102496,2897],{"class":96},[79,102498,95112],{"class":239},[79,102500,2668],{"class":96},[79,102502,2752],{"class":239},[79,102504,1188],{"class":96},[79,102506,253],{"class":239},[79,102508,102509],{"class":81,"line":178},[79,102510,102511],{"class":239},"np.square(aa)\n",[51,102513,102515],{"className":230,"code":102514,"language":232,"meta":57,"style":57},"#传统的方式\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",[59,102516,102517,102522,102531,102547,102563,102578],{"__ignoreMap":57},[79,102518,102519],{"class":81,"line":82},[79,102520,102521],{"class":2440},"#传统的方式\n",[79,102523,102524,102526,102528],{"class":81,"line":167},[79,102525,100290],{"class":239},[79,102527,244],{"class":243},[79,102529,102530],{"class":239},"np.empty_like(aa)\n",[79,102532,102533,102535,102537,102539,102541,102543,102545],{"class":81,"line":178},[79,102534,1874],{"class":243},[79,102536,11622],{"class":239},[79,102538,955],{"class":243},[79,102540,958],{"class":96},[79,102542,685],{"class":239},[79,102544,2668],{"class":96},[79,102546,966],{"class":239},[79,102548,102549,102551,102553,102555,102557,102559,102561],{"class":81,"line":457},[79,102550,949],{"class":243},[79,102552,11683],{"class":239},[79,102554,955],{"class":243},[79,102556,958],{"class":96},[79,102558,685],{"class":239},[79,102560,1188],{"class":96},[79,102562,966],{"class":239},[79,102564,102565,102568,102570,102573,102575],{"class":81,"line":462},[79,102566,102567],{"class":239},"        bb[i,j]",[79,102569,244],{"class":243},[79,102571,102572],{"class":239},"aa[i,j]",[79,102574,2829],{"class":243},[79,102576,102577],{"class":239},"aa[i,j]\n",[79,102579,102580],{"class":81,"line":474},[79,102581,102582],{"class":239},"bb\n",[14,102584,102586],{"id":102585},"_93-求各元素的符号","9.3 求各元素的符号",[19,102588,102589],{},[3699,102590],{"alt":57,"src":102591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102593,102595],{"id":102594},"_94-modf函数","9.4 modf函数",[19,102597,102598],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[51,102600,102602],{"className":230,"code":102601,"language":232,"meta":57,"style":57},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[59,102603,102604,102627],{"__ignoreMap":57},[79,102605,102606,102608,102610,102612,102614,102616,102618,102620,102622,102625],{"class":81,"line":82},[79,102607,2614],{"class":239},[79,102609,244],{"class":243},[79,102611,95107],{"class":239},[79,102613,320],{"class":243},[79,102615,2820],{"class":96},[79,102617,2752],{"class":239},[79,102619,2820],{"class":96},[79,102621,2752],{"class":239},[79,102623,102624],{"class":96},"0.3",[79,102626,253],{"class":239},[79,102628,102629],{"class":81,"line":167},[79,102630,102631],{"class":239},"np.modf(a)\n",[19,102633,102634],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102636,102638],{"id":102637},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102640,102641],{},"np.cell()",[19,102643,102644],{},"np.floor()",[19,102646,102647],{},"np.rint()",[19,102649,102650],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102652,102653],{},[3699,102654],{"alt":57,"src":102655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102657,102659],{"id":102658},"_96-around函数","9.6 around()函数",[19,102661,102662],{},"around()函数也可以实现对数的小数位数进行操作",[19,102664,102665],{},"其中的参数：",[19,102667,102668],{},"1.要传的数组",[19,102670,102671],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102673,102674],{},[3699,102675],{"alt":57,"src":102676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102678,102680],{"id":102679},"_97-三角函数","9.7 三角函数",[19,102682,102683],{},[3699,102684],{"alt":57,"src":102685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102687,102688],{},"引入图像模块非常重要",[51,102690,102692],{"className":230,"code":102691,"language":232,"meta":57,"style":57},"from matplotlib import pyplot as plt\n",[59,102693,102694],{"__ignoreMap":57},[79,102695,102696,102698,102701,102703,102706,102708],{"class":81,"line":82},[79,102697,32862],{"class":243},[79,102699,102700],{"class":239}," matplotlib ",[79,102702,432],{"class":243},[79,102704,102705],{"class":239}," pyplot ",[79,102707,445],{"class":243},[79,102709,33556],{"class":239},[2287,102711,102712],{},"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":57,"searchDepth":167,"depth":167,"links":102714},[102715,102716,102717,102718,102719,102720,102721],{"id":102263,"depth":167,"text":102264},{"id":102378,"depth":167,"text":102379},{"id":102585,"depth":167,"text":102586},{"id":102594,"depth":167,"text":102595},{"id":102637,"depth":167,"text":102638},{"id":102658,"depth":167,"text":102659},{"id":102679,"depth":167,"text":102680},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102227,"description":25516},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102728,"title":102729,"body":102730,"description":25516,"extension":2314,"meta":102734,"navigation":453,"path":102735,"seo":102736,"stem":102737,"__hash__":102738},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102731,"toc":102732},[],{"title":57,"searchDepth":167,"depth":167,"links":102733},[],{"category":52534},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102729,"description":25516},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102740,"title":102741,"body":102742,"description":57,"extension":2314,"meta":104687,"navigation":453,"path":104688,"seo":104689,"stem":104690,"__hash__":104691},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102743,"toc":104663},[102744,102747,102749,102752,102755,102761,102764,102786,102789,102823,102826,102867,102869,102871,102962,102965,103009,103012,103026,103029,103043,103046,103049,103090,103092,103128,103130,103133,103139,103144,103163,103167,103170,103234,103237,103255,103259,103262,103288,103298,103304,103308,103311,103317,103328,103330,103333,103362,103365,103629,103631,103634,103645,103648,103651,103673,103680,103683,103701,103704,103707,103721,103729,103732,103758,103764,103766,103769,103779,103791,103811,103820,103840,103850,103874,103887,103900,103905,103946,103963,103988,104000,104020,104026,104071,104090,104107,104120,104136,104143,104155,104164,104199,104219,104244,104257,104281,104296,104321,104324,104345,104354,104357,104368,104370,104373,104379,104391,104398,104400,104403,104415,104418,104432,104435,104445,104454,104457,104495,104498,104500,104506,104509,104523,104527,104530,104562,104566,104568,104591,104599,104602,104608,104614,104617,104619,104646,104648,104651,104657,104660],[10,102745,102741],{"id":102746},"_1环境安装与第一个-mujoco-程序",[14,102748,17],{"id":16},[19,102750,102751],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102753,102754],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[51,102756,102759],{"className":102757,"code":102758,"language":56,"meta":57},[54],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[59,102760,102758],{"__ignoreMap":57},[19,102762,102763],{},"需要掌握:",[26,102765,102766,102769,102772,102777,102782],{},[29,102767,102768],{},"Fedora 44 下 MuJoCo 的系统依赖",[29,102770,102771],{},"Python 虚拟环境创建",[29,102773,102774],{},[59,102775,102776],{},"mujoco.MjModel",[29,102778,102779],{},[59,102780,102781],{},"mujoco.MjData",[29,102783,102784],{},[59,102785,2170],{},[19,102787,102788],{},"MuJoCo 中最重要的两个对象:",[2516,102790,102791,102801],{},[2519,102792,102793],{},[2522,102794,102795,102798],{},[2525,102796,102797],{"align":25876},"对象",[2525,102799,102800],{"align":25876},"含义",[2563,102802,102803,102813],{},[2522,102804,102805,102810],{},[2568,102806,102807],{"align":25876},[59,102808,102809],{},"MjModel",[2568,102811,102812],{"align":25876},"模型结构，来自 XML，基本不随时间变化",[2522,102814,102815,102820],{},[2568,102816,102817],{"align":25876},[59,102818,102819],{},"MjData",[2568,102821,102822],{"align":25876},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102824,102825],{},"可以先用一个类比理解：",[2516,102827,102828,102838],{},[2519,102829,102830],{},[2522,102831,102832,102835],{},[2525,102833,102834],{"align":25876},"类比",[2525,102836,102837],{"align":25876},"MuJoCo 对象",[2563,102839,102840,102849,102858],{},[2522,102841,102842,102845],{},[2568,102843,102844],{"align":25876},"游戏地图和角色配置",[2568,102846,102847],{"align":25876},[59,102848,102809],{},[2522,102850,102851,102854],{},[2568,102852,102853],{"align":25876},"游戏运行到当前帧的状态",[2568,102855,102856],{"align":25876},[59,102857,102819],{},[2522,102859,102860,102863],{},[2568,102861,102862],{"align":25876},"前进一帧",[2568,102864,102865],{"align":25876},[59,102866,2170],{},[14,102868,67],{"id":66},[19,102870,70],{},[51,102872,102874],{"className":73,"code":102873,"language":75,"meta":57,"style":57},"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",[59,102875,102876,102888,102900,102912,102922,102932,102951],{"__ignoreMap":57},[79,102877,102878,102880,102882,102884,102886],{"class":81,"line":82},[79,102879,86],{"class":85},[79,102881,90],{"class":89},[79,102883,93],{"class":89},[79,102885,97],{"class":96},[79,102887,26814],{"class":96},[79,102889,102890,102893,102895,102898],{"class":81,"line":167},[79,102891,102892],{"class":89},"  python3",[79,102894,103],{"class":89},[79,102896,102897],{"class":89}," python3-virtualenv",[79,102899,26814],{"class":96},[79,102901,102902,102905,102908,102910],{"class":81,"line":178},[79,102903,102904],{"class":89},"  mesa-libGL",[79,102906,102907],{"class":89}," mesa-libGLU",[79,102909,109],{"class":89},[79,102911,26814],{"class":96},[79,102913,102914,102917,102920],{"class":81,"line":457},[79,102915,102916],{"class":89},"  libglvnd-glx",[79,102918,102919],{"class":89}," libglvnd-opengl",[79,102921,26814],{"class":96},[79,102923,102924,102927,102930],{"class":81,"line":462},[79,102925,102926],{"class":89},"  glfw",[79,102928,102929],{"class":89}," glfw-devel",[79,102931,26814],{"class":96},[79,102933,102934,102937,102940,102943,102946,102949],{"class":81,"line":474},[79,102935,102936],{"class":89},"  libX11",[79,102938,102939],{"class":89}," libXcursor",[79,102941,102942],{"class":89}," libXi",[79,102944,102945],{"class":89}," libXinerama",[79,102947,102948],{"class":89}," libXrandr",[79,102950,26814],{"class":96},[79,102952,102953,102956,102959],{"class":81,"line":480},[79,102954,102955],{"class":89},"  gcc",[79,102957,102958],{"class":89}," gcc-c++",[79,102960,102961],{"class":89}," make\n",[19,102963,102964],{},"创建 Python 环境:",[51,102966,102968],{"className":73,"code":102967,"language":75,"meta":57,"style":57},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[59,102969,102970,102984,102992],{"__ignoreMap":57},[79,102971,102972,102975,102978,102981],{"class":81,"line":82},[79,102973,102974],{"class":85},"python3",[79,102976,102977],{"class":96}," -m",[79,102979,102980],{"class":89}," venv",[79,102982,102983],{"class":89}," .venv\n",[79,102985,102986,102989],{"class":81,"line":167},[79,102987,102988],{"class":96},"source",[79,102990,102991],{"class":89}," .venv\u002Fbin\u002Factivate\n",[79,102993,102994,102996,102998,103001,103003,103006],{"class":81,"line":178},[79,102995,232],{"class":85},[79,102997,102977],{"class":96},[79,102999,103000],{"class":89}," pip",[79,103002,93],{"class":89},[79,103004,103005],{"class":96}," --upgrade",[79,103007,103008],{"class":89}," pip\n",[19,103010,103011],{},"pip 安装:",[51,103013,103014],{"className":73,"code":118,"language":75,"meta":57,"style":57},[59,103015,103016],{"__ignoreMap":57},[79,103017,103018,103020,103022,103024],{"class":81,"line":82},[79,103019,125],{"class":85},[79,103021,93],{"class":89},[79,103023,130],{"class":89},[79,103025,133],{"class":89},[19,103027,103028],{},"安装完成后，先做最小检查：",[51,103030,103032],{"className":73,"code":103031,"language":75,"meta":57,"style":57},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[59,103033,103034],{"__ignoreMap":57},[79,103035,103036,103038,103040],{"class":81,"line":82},[79,103037,232],{"class":85},[79,103039,32487],{"class":96},[79,103041,103042],{"class":89}," \"import mujoco; print(mujoco.__version__)\"\n",[19,103044,103045],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,103047,103048],{},"conda 安装:",[51,103050,103052],{"className":73,"code":103051,"language":75,"meta":57,"style":57},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[59,103053,103054,103071,103080],{"__ignoreMap":57},[79,103055,103056,103058,103060,103062,103065,103067,103069],{"class":81,"line":82},[79,103057,146],{"class":85},[79,103059,149],{"class":89},[79,103061,152],{"class":96},[79,103063,103064],{"class":89}," mujoco-study",[79,103066,158],{"class":89},[79,103068,161],{"class":96},[79,103070,164],{"class":96},[79,103072,103073,103075,103077],{"class":81,"line":167},[79,103074,146],{"class":85},[79,103076,172],{"class":89},[79,103078,103079],{"class":89}," mujoco-study\n",[79,103081,103082,103084,103086,103088],{"class":81,"line":178},[79,103083,125],{"class":85},[79,103085,93],{"class":89},[79,103087,130],{"class":89},[79,103089,133],{"class":89},[19,103091,189],{},[26,103093,103094,103100,103109,103118],{},[29,103095,103096,103097,1604],{},"不要安装 ",[59,103098,103099],{},"mujoco-py",[29,103101,103102,103103,1905,103105,103108],{},"如果旧项目里同时安装了 ",[59,103104,103099],{},[59,103106,103107],{},"mujoco","，建议新建干净虚拟环境。",[29,103110,103111,103114,103115,1604],{},[59,103112,103113],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[59,103116,103117],{},"~\u002F.mujoco\u002Fmujoco210",[29,103119,103120,103121,1601,103124,103127],{},"离屏渲染可能涉及 OpenGL 后端，",[59,103122,103123],{},"MUJOCO_GL=egl",[59,103125,103126],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,103129,215],{"id":214},[19,103131,103132],{},"MuJoCo 的基本执行流程:",[51,103134,103137],{"className":103135,"code":103136,"language":56,"meta":57},[54],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[59,103138,103136],{"__ignoreMap":57},[19,103140,103141,103143],{},[59,103142,102809],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,103145,103146,103148,103149,204,103152,204,103155,204,103158,204,103160,1604],{},[59,103147,102819],{}," 存放仿真运行时状态，例如 ",[59,103150,103151],{},"data.time",[59,103153,103154],{},"data.qpos",[59,103156,103157],{},"data.qvel",[59,103159,2163],{},[59,103161,103162],{},"data.xpos",[265,103164,103166],{"id":103165},"xml-是什么","XML 是什么",[19,103168,103169],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[51,103171,103173],{"className":383,"code":103172,"language":385,"meta":57,"style":57},"\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",[59,103174,103175,103196,103226],{"__ignoreMap":57},[79,103176,103177,103179,103181,103183,103185,103187,103189,103191,103194],{"class":81,"line":82},[79,103178,392],{"class":239},[79,103180,53913],{"class":395},[79,103182,2238],{"class":85},[79,103184,244],{"class":239},[79,103186,55601],{"class":89},[79,103188,2245],{"class":85},[79,103190,244],{"class":239},[79,103192,103193],{"class":89},"\"0 0 1\"",[79,103195,53420],{"class":239},[79,103197,103198,103200,103203,103205,103207,103210,103212,103214,103216,103219,103221,103224],{"class":81,"line":167},[79,103199,54257],{"class":239},[79,103201,103202],{"class":395},"geom",[79,103204,2238],{"class":85},[79,103206,244],{"class":239},[79,103208,103209],{"class":89},"\"box_geom\"",[79,103211,55934],{"class":85},[79,103213,244],{"class":239},[79,103215,55601],{"class":89},[79,103217,103218],{"class":85}," size",[79,103220,244],{"class":239},[79,103222,103223],{"class":89},"\"0.1 0.1 0.1\"",[79,103225,415],{"class":239},[79,103227,103228,103230,103232],{"class":81,"line":178},[79,103229,53898],{"class":239},[79,103231,53913],{"class":395},[79,103233,53420],{"class":239},[19,103235,103236],{},"这段意思是：",[26,103238,103239,103245,103252],{},[29,103240,103241,103242,103244],{},"创建一个叫 ",[59,103243,55824],{}," 的刚体。",[29,103246,103247,103248,103251],{},"它初始放在 ",[59,103249,103250],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[29,103253,103254],{},"它里面有一个盒子形状的几何体。",[265,103256,103258],{"id":103257},"timestep-是什么","timestep 是什么",[19,103260,103261],{},"XML 里的：",[51,103263,103265],{"className":383,"code":103264,"language":385,"meta":57,"style":57},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[59,103266,103267],{"__ignoreMap":57},[79,103268,103269,103271,103273,103275,103277,103279,103281,103283,103286],{"class":81,"line":82},[79,103270,392],{"class":239},[79,103272,396],{"class":395},[79,103274,399],{"class":85},[79,103276,244],{"class":239},[79,103278,404],{"class":89},[79,103280,407],{"class":85},[79,103282,244],{"class":239},[79,103284,103285],{"class":89},"\"0 0 -9.81\"",[79,103287,415],{"class":239},[19,103289,103290,103291,103294,103295,103297],{},"表示每调用一次 ",[59,103292,103293],{},"mj_step","，仿真时间前进 ",[59,103296,41100],{}," 秒。循环 100 次，大约就是 1 秒：",[51,103299,103302],{"className":103300,"code":103301,"language":56,"meta":57},[54],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[59,103303,103301],{"__ignoreMap":57},[265,103305,103307],{"id":103306},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,103309,103310],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[51,103312,103315],{"className":103313,"code":103314,"language":56,"meta":57},[54],"x y z qw qx qy qz\n",[59,103316,103314],{"__ignoreMap":57},[19,103318,103319,103320,103323,103324,103327],{},"表示一个自由刚体的位置和姿态。其中 ",[59,103321,103322],{},"x y z"," 是位置，",[59,103325,103326],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103329,422],{"id":421},[19,103331,103332],{},"新建文件:",[51,103334,103336],{"className":73,"code":103335,"language":75,"meta":57,"style":57},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[59,103337,103338,103348,103355],{"__ignoreMap":57},[79,103339,103340,103343,103345],{"class":81,"line":82},[79,103341,103342],{"class":85},"mkdir",[79,103344,31346],{"class":96},[79,103346,103347],{"class":89}," mujoco_tutorial\n",[79,103349,103350,103353],{"class":81,"line":167},[79,103351,103352],{"class":96},"cd",[79,103354,103347],{"class":89},[79,103356,103357,103359],{"class":81,"line":178},[79,103358,1358],{"class":85},[79,103360,103361],{"class":89}," ch1_first_sim.py\n",[19,103363,103364],{},"写入:",[51,103366,103368],{"className":230,"code":103367,"language":232,"meta":57,"style":57},"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",[59,103369,103370,103376,103380,103384,103392,103397,103402,103406,103410,103415,103419,103424,103429,103434,103438,103442,103446,103450,103454,103458,103470,103482,103490,103494,103506,103518,103530,103542,103554,103558,103575,103579,103583,103594,103605,103609,103613,103625],{"__ignoreMap":57},[79,103371,103372,103374],{"class":81,"line":82},[79,103373,432],{"class":243},[79,103375,435],{"class":239},[79,103377,103378],{"class":81,"line":167},[79,103379,454],{"emptyLinePlaceholder":453},[79,103381,103382],{"class":81,"line":178},[79,103383,454],{"emptyLinePlaceholder":453},[79,103385,103386,103388,103390],{"class":81,"line":457},[79,103387,465],{"class":96},[79,103389,468],{"class":243},[79,103391,471],{"class":89},[79,103393,103394],{"class":81,"line":462},[79,103395,103396],{"class":89},"\u003Cmujoco model=\"first_sim\">\n",[79,103398,103399],{"class":81,"line":474},[79,103400,103401],{"class":89},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[79,103403,103404],{"class":81,"line":480},[79,103405,454],{"emptyLinePlaceholder":453},[79,103407,103408],{"class":81,"line":486},[79,103409,494],{"class":89},[79,103411,103412],{"class":81,"line":491},[79,103413,103414],{"class":89},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[79,103416,103417],{"class":81,"line":497},[79,103418,454],{"emptyLinePlaceholder":453},[79,103420,103421],{"class":81,"line":503},[79,103422,103423],{"class":89},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[79,103425,103426],{"class":81,"line":509},[79,103427,103428],{"class":89},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[79,103430,103431],{"class":81,"line":514},[79,103432,103433],{"class":89},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[79,103435,103436],{"class":81,"line":520},[79,103437,570],{"class":89},[79,103439,103440],{"class":81,"line":526},[79,103441,576],{"class":89},[79,103443,103444],{"class":81,"line":532},[79,103445,611],{"class":89},[79,103447,103448],{"class":81,"line":537},[79,103449,617],{"class":89},[79,103451,103452],{"class":81,"line":543},[79,103453,454],{"emptyLinePlaceholder":453},[79,103455,103456],{"class":81,"line":549},[79,103457,454],{"emptyLinePlaceholder":453},[79,103459,103460,103462,103464,103466,103468],{"class":81,"line":555},[79,103461,633],{"class":243},[79,103463,893],{"class":85},[79,103465,896],{"class":239},[79,103467,899],{"class":96},[79,103469,673],{"class":239},[79,103471,103472,103474,103476,103478,103480],{"class":81,"line":561},[79,103473,907],{"class":239},[79,103475,244],{"class":243},[79,103477,912],{"class":239},[79,103479,465],{"class":96},[79,103481,253],{"class":239},[79,103483,103484,103486,103488],{"class":81,"line":567},[79,103485,922],{"class":239},[79,103487,244],{"class":243},[79,103489,927],{"class":239},[79,103491,103492],{"class":81,"line":573},[79,103493,454],{"emptyLinePlaceholder":453},[79,103495,103496,103498,103500,103503],{"class":81,"line":579},[79,103497,1254],{"class":96},[79,103499,685],{"class":239},[79,103501,103502],{"class":89},"\"nq:\"",[79,103504,103505],{"class":239},", model.nq)\n",[79,103507,103508,103510,103512,103515],{"class":81,"line":584},[79,103509,1254],{"class":96},[79,103511,685],{"class":239},[79,103513,103514],{"class":89},"\"nv:\"",[79,103516,103517],{"class":239},", model.nv)\n",[79,103519,103520,103522,103524,103527],{"class":81,"line":590},[79,103521,1254],{"class":96},[79,103523,685],{"class":239},[79,103525,103526],{"class":89},"\"nu:\"",[79,103528,103529],{"class":239},", model.nu)\n",[79,103531,103532,103534,103536,103539],{"class":81,"line":596},[79,103533,1254],{"class":96},[79,103535,685],{"class":239},[79,103537,103538],{"class":89},"\"initial time:\"",[79,103540,103541],{"class":239},", data.time)\n",[79,103543,103544,103546,103548,103551],{"class":81,"line":602},[79,103545,1254],{"class":96},[79,103547,685],{"class":239},[79,103549,103550],{"class":89},"\"initial qpos:\"",[79,103552,103553],{"class":239},", data.qpos.copy())\n",[79,103555,103556],{"class":81,"line":608},[79,103557,454],{"emptyLinePlaceholder":453},[79,103559,103560,103562,103565,103567,103569,103571,103573],{"class":81,"line":614},[79,103561,949],{"class":243},[79,103563,103564],{"class":239}," _ ",[79,103566,955],{"class":243},[79,103568,958],{"class":96},[79,103570,685],{"class":239},[79,103572,2686],{"class":96},[79,103574,966],{"class":239},[79,103576,103577],{"class":81,"line":620},[79,103578,1109],{"class":239},[79,103580,103581],{"class":81,"line":625},[79,103582,454],{"emptyLinePlaceholder":453},[79,103584,103585,103587,103589,103592],{"class":81,"line":630},[79,103586,1254],{"class":96},[79,103588,685],{"class":239},[79,103590,103591],{"class":89},"\"final time:\"",[79,103593,103541],{"class":239},[79,103595,103596,103598,103600,103603],{"class":81,"line":648},[79,103597,1254],{"class":96},[79,103599,685],{"class":239},[79,103601,103602],{"class":89},"\"final qpos:\"",[79,103604,103553],{"class":239},[79,103606,103607],{"class":81,"line":659},[79,103608,454],{"emptyLinePlaceholder":453},[79,103610,103611],{"class":81,"line":676},[79,103612,454],{"emptyLinePlaceholder":453},[79,103614,103615,103617,103619,103621,103623],{"class":81,"line":708},[79,103616,1329],{"class":243},[79,103618,1332],{"class":96},[79,103620,1143],{"class":243},[79,103622,1337],{"class":89},[79,103624,673],{"class":239},[79,103626,103627],{"class":81,"line":717},[79,103628,1345],{"class":239},[265,103630,1378],{"id":1378},[19,103632,103633],{},"导入库：",[51,103635,103637],{"className":230,"code":103636,"language":232,"meta":57,"style":57},"import mujoco\n",[59,103638,103639],{"__ignoreMap":57},[79,103640,103641,103643],{"class":81,"line":82},[79,103642,432],{"class":243},[79,103644,435],{"class":239},[19,103646,103647],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103649,103650],{},"定义 XML：",[51,103652,103654],{"className":230,"code":103653,"language":232,"meta":57,"style":57},"XML = \"\"\"\n...\n\"\"\"\n",[59,103655,103656,103664,103669],{"__ignoreMap":57},[79,103657,103658,103660,103662],{"class":81,"line":82},[79,103659,465],{"class":96},[79,103661,468],{"class":243},[79,103663,471],{"class":89},[79,103665,103666],{"class":81,"line":167},[79,103667,103668],{"class":89},"...\n",[79,103670,103671],{"class":81,"line":178},[79,103672,617],{"class":89},[19,103674,103675,103676,103679],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[59,103677,103678],{},"freejoint"," 的方块。",[19,103681,103682],{},"编译模型：",[51,103684,103686],{"className":230,"code":103685,"language":232,"meta":57,"style":57},"model = mujoco.MjModel.from_xml_string(XML)\n",[59,103687,103688],{"__ignoreMap":57},[79,103689,103690,103693,103695,103697,103699],{"class":81,"line":82},[79,103691,103692],{"class":239},"model ",[79,103694,244],{"class":243},[79,103696,912],{"class":239},[79,103698,465],{"class":96},[79,103700,253],{"class":239},[19,103702,103703],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103705,103706],{},"创建数据：",[51,103708,103710],{"className":230,"code":103709,"language":232,"meta":57,"style":57},"data = mujoco.MjData(model)\n",[59,103711,103712],{"__ignoreMap":57},[79,103713,103714,103717,103719],{"class":81,"line":82},[79,103715,103716],{"class":239},"data ",[79,103718,244],{"class":243},[79,103720,927],{"class":239},[19,103722,103723,103725,103726,103728],{},[59,103724,35516],{}," 会保存仿真当前状态。刚创建时，时间是 ",[59,103727,1030],{},"，方块还在初始位置。",[19,103730,103731],{},"推进仿真：",[51,103733,103735],{"className":230,"code":103734,"language":232,"meta":57,"style":57},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[59,103736,103737,103753],{"__ignoreMap":57},[79,103738,103739,103741,103743,103745,103747,103749,103751],{"class":81,"line":82},[79,103740,1874],{"class":243},[79,103742,103564],{"class":239},[79,103744,955],{"class":243},[79,103746,958],{"class":96},[79,103748,685],{"class":239},[79,103750,2686],{"class":96},[79,103752,966],{"class":239},[79,103754,103755],{"class":81,"line":167},[79,103756,103757],{"class":239},"    mujoco.mj_step(model, data)\n",[19,103759,103760,103761,103763],{},"每次 ",[59,103762,103293],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[265,103765,1576],{"id":1576},[19,103767,103768],{},"下面把完整代码按新手视角拆开讲。",[51,103770,103771],{"className":230,"code":103636,"language":232,"meta":57,"style":57},[59,103772,103773],{"__ignoreMap":57},[79,103774,103775,103777],{"class":81,"line":82},[79,103776,432],{"class":243},[79,103778,435],{"class":239},[19,103780,103781,103783,103784,204,103786,204,103788,1604],{},[59,103782,432],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[59,103785,102776],{},[59,103787,102781],{},[59,103789,103790],{},"mujoco.mj_step",[51,103792,103793],{"className":230,"code":103653,"language":232,"meta":57,"style":57},[59,103794,103795,103803,103807],{"__ignoreMap":57},[79,103796,103797,103799,103801],{"class":81,"line":82},[79,103798,465],{"class":96},[79,103800,468],{"class":243},[79,103802,471],{"class":89},[79,103804,103805],{"class":81,"line":167},[79,103806,103668],{"class":89},[79,103808,103809],{"class":81,"line":178},[79,103810,617],{"class":89},[19,103812,103813,103815,103816,103819],{},[59,103814,465],{}," 是一个变量名。右边的三引号 ",[59,103817,103818],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[51,103821,103822],{"className":383,"code":103396,"language":385,"meta":57,"style":57},[59,103823,103824],{"__ignoreMap":57},[79,103825,103826,103828,103830,103833,103835,103838],{"class":81,"line":82},[79,103827,392],{"class":239},[79,103829,103107],{"class":395},[79,103831,103832],{"class":85}," model",[79,103834,244],{"class":239},[79,103836,103837],{"class":89},"\"first_sim\"",[79,103839,53420],{"class":239},[19,103841,103842,103843,103846,103847,1604],{},"这是 XML 的根标签。",[59,103844,103845],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[59,103848,103849],{},"first_sim",[51,103851,103852],{"className":383,"code":103264,"language":385,"meta":57,"style":57},[59,103853,103854],{"__ignoreMap":57},[79,103855,103856,103858,103860,103862,103864,103866,103868,103870,103872],{"class":81,"line":82},[79,103857,392],{"class":239},[79,103859,396],{"class":395},[79,103861,399],{"class":85},[79,103863,244],{"class":239},[79,103865,404],{"class":89},[79,103867,407],{"class":85},[79,103869,244],{"class":239},[79,103871,103285],{"class":89},[79,103873,415],{"class":239},[19,103875,103876,103878,103879,103882,103883,103886],{},[59,103877,396],{}," 用来设置仿真参数。",[59,103880,103881],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[59,103884,103885],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[51,103888,103890],{"className":383,"code":103889,"language":385,"meta":57,"style":57},"\u003Cworldbody>\n",[59,103891,103892],{"__ignoreMap":57},[79,103893,103894,103896,103898],{"class":81,"line":82},[79,103895,392],{"class":239},[79,103897,2259],{"class":395},[79,103899,53420],{"class":239},[19,103901,103902,103904],{},[59,103903,2259],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[51,103906,103908],{"className":383,"code":103907,"language":385,"meta":57,"style":57},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[59,103909,103910],{"__ignoreMap":57},[79,103911,103912,103914,103916,103918,103920,103923,103925,103927,103930,103932,103934,103937,103939,103941,103944],{"class":81,"line":82},[79,103913,392],{"class":239},[79,103915,103202],{"class":395},[79,103917,2238],{"class":85},[79,103919,244],{"class":239},[79,103921,103922],{"class":89},"\"floor\"",[79,103924,55934],{"class":85},[79,103926,244],{"class":239},[79,103928,103929],{"class":89},"\"plane\"",[79,103931,103218],{"class":85},[79,103933,244],{"class":239},[79,103935,103936],{"class":89},"\"2 2 0.1\"",[79,103938,80875],{"class":85},[79,103940,244],{"class":239},[79,103942,103943],{"class":89},"\"0.8 0.8 0.8 1\"",[79,103945,415],{"class":239},[19,103947,103948,103949,103951,103952,103955,103956,103959,103960,103962],{},"这行创建地面。",[59,103950,103202],{}," 是几何体。",[59,103953,103954],{},"name=\"floor\""," 是名字。",[59,103957,103958],{},"type=\"plane\""," 表示平面。",[59,103961,57220],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[51,103964,103966],{"className":383,"code":103965,"language":385,"meta":57,"style":57},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[59,103967,103968],{"__ignoreMap":57},[79,103969,103970,103972,103974,103976,103978,103980,103982,103984,103986],{"class":81,"line":82},[79,103971,392],{"class":239},[79,103973,53913],{"class":395},[79,103975,2238],{"class":85},[79,103977,244],{"class":239},[79,103979,55601],{"class":89},[79,103981,2245],{"class":85},[79,103983,244],{"class":239},[79,103985,103193],{"class":89},[79,103987,53420],{"class":239},[19,103989,103990,103991,1604,103993,103996,103997,103999],{},"这行创建一个刚体，名字叫 ",[59,103992,55824],{},[59,103994,103995],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[59,103998,103250],{},"，也就是离地面 1 米高。",[51,104001,104003],{"className":383,"code":104002,"language":385,"meta":57,"style":57},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[59,104004,104005],{"__ignoreMap":57},[79,104006,104007,104009,104011,104013,104015,104018],{"class":81,"line":82},[79,104008,392],{"class":239},[79,104010,103678],{"class":395},[79,104012,2238],{"class":85},[79,104014,244],{"class":239},[79,104016,104017],{"class":89},"\"box_free\"",[79,104019,415],{"class":239},[19,104021,104022,104023,104025],{},"这行很重要。",[59,104024,103678],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[51,104027,104029],{"className":383,"code":104028,"language":385,"meta":57,"style":57},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[59,104030,104031],{"__ignoreMap":57},[79,104032,104033,104035,104037,104039,104041,104043,104045,104047,104049,104051,104053,104055,104058,104060,104062,104064,104066,104069],{"class":81,"line":82},[79,104034,392],{"class":239},[79,104036,103202],{"class":395},[79,104038,2238],{"class":85},[79,104040,244],{"class":239},[79,104042,103209],{"class":89},[79,104044,55934],{"class":85},[79,104046,244],{"class":239},[79,104048,55601],{"class":89},[79,104050,103218],{"class":85},[79,104052,244],{"class":239},[79,104054,103223],{"class":89},[79,104056,104057],{"class":85}," mass",[79,104059,244],{"class":239},[79,104061,5881],{"class":89},[79,104063,80875],{"class":85},[79,104065,244],{"class":239},[79,104067,104068],{"class":89},"\"1 0 0 1\"",[79,104070,415],{"class":239},[19,104072,104073,104074,104077,104078,104081,104082,104085,104086,104089],{},"这行给 box body 添加一个盒子形状。",[59,104075,104076],{},"type=\"box\""," 表示形状是盒子。",[59,104079,104080],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[59,104083,104084],{},"mass=\"1\""," 表示质量是 1。",[59,104087,104088],{},"rgba=\"1 0 0 1\""," 表示红色。",[51,104091,104093],{"className":230,"code":104092,"language":232,"meta":57,"style":57},"def main() -> None:\n",[59,104094,104095],{"__ignoreMap":57},[79,104096,104097,104099,104101,104103,104105],{"class":81,"line":82},[79,104098,633],{"class":243},[79,104100,893],{"class":85},[79,104102,896],{"class":239},[79,104104,899],{"class":96},[79,104106,673],{"class":239},[19,104108,104109,104111,104112,104115,104116,104119],{},[59,104110,633],{}," 用来定义函数。这里定义了一个叫 ",[59,104113,104114],{},"main"," 的函数。",[59,104117,104118],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[51,104121,104122],{"className":230,"code":103685,"language":232,"meta":57,"style":57},[59,104123,104124],{"__ignoreMap":57},[79,104125,104126,104128,104130,104132,104134],{"class":81,"line":82},[79,104127,103692],{"class":239},[79,104129,244],{"class":243},[79,104131,912],{"class":239},[79,104133,465],{"class":96},[79,104135,253],{"class":239},[19,104137,104138,104139,104142],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[59,104140,104141],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[51,104144,104145],{"className":230,"code":103709,"language":232,"meta":57,"style":57},[59,104146,104147],{"__ignoreMap":57},[79,104148,104149,104151,104153],{"class":81,"line":82},[79,104150,103716],{"class":239},[79,104152,244],{"class":243},[79,104154,927],{"class":239},[19,104156,104157,104158,104160,104161,104163],{},"这行创建仿真数据。",[59,104159,35516],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[59,104162,35516],{}," 都会变化。",[51,104165,104167],{"className":230,"code":104166,"language":232,"meta":57,"style":57},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[59,104168,104169,104179,104189],{"__ignoreMap":57},[79,104170,104171,104173,104175,104177],{"class":81,"line":82},[79,104172,32541],{"class":96},[79,104174,685],{"class":239},[79,104176,103502],{"class":89},[79,104178,103505],{"class":239},[79,104180,104181,104183,104185,104187],{"class":81,"line":167},[79,104182,32541],{"class":96},[79,104184,685],{"class":239},[79,104186,103514],{"class":89},[79,104188,103517],{"class":239},[79,104190,104191,104193,104195,104197],{"class":81,"line":178},[79,104192,32541],{"class":96},[79,104194,685],{"class":239},[79,104196,103526],{"class":89},[79,104198,103529],{"class":239},[19,104200,104201,104203,104204,104207,104208,104211,104212,104214,104215,104218],{},[59,104202,32541],{}," 用来输出信息。",[59,104205,104206],{},"model.nq"," 是位置变量数量，",[59,104209,104210],{},"model.nv"," 是速度变量数量，",[59,104213,2094],{}," 是控制输入数量。这个例子没有电机，所以 ",[59,104216,104217],{},"nu"," 是 0。",[51,104220,104222],{"className":230,"code":104221,"language":232,"meta":57,"style":57},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[59,104223,104224,104234],{"__ignoreMap":57},[79,104225,104226,104228,104230,104232],{"class":81,"line":82},[79,104227,32541],{"class":96},[79,104229,685],{"class":239},[79,104231,103538],{"class":89},[79,104233,103541],{"class":239},[79,104235,104236,104238,104240,104242],{"class":81,"line":167},[79,104237,32541],{"class":96},[79,104239,685],{"class":239},[79,104241,103550],{"class":89},[79,104243,103553],{"class":239},[19,104245,104246,104247,104249,104250,104252,104253,104256],{},"这里打印初始时间和初始位置。",[59,104248,103151],{}," 一开始是 0。",[59,104251,103154],{}," 是位置数组。",[59,104254,104255],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[51,104258,104259],{"className":230,"code":103734,"language":232,"meta":57,"style":57},[59,104260,104261,104277],{"__ignoreMap":57},[79,104262,104263,104265,104267,104269,104271,104273,104275],{"class":81,"line":82},[79,104264,1874],{"class":243},[79,104266,103564],{"class":239},[79,104268,955],{"class":243},[79,104270,958],{"class":96},[79,104272,685],{"class":239},[79,104274,2686],{"class":96},[79,104276,966],{"class":239},[79,104278,104279],{"class":81,"line":167},[79,104280,103757],{"class":239},[19,104282,104283,104285,104286,104289,104290,104292,104293,104295],{},[59,104284,1874],{}," 是循环。",[59,104287,104288],{},"range(100)"," 表示循环 100 次。",[59,104291,3362],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[59,104294,103293],{},"，仿真就前进一步。",[51,104297,104299],{"className":230,"code":104298,"language":232,"meta":57,"style":57},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[59,104300,104301,104311],{"__ignoreMap":57},[79,104302,104303,104305,104307,104309],{"class":81,"line":82},[79,104304,32541],{"class":96},[79,104306,685],{"class":239},[79,104308,103591],{"class":89},[79,104310,103541],{"class":239},[79,104312,104313,104315,104317,104319],{"class":81,"line":167},[79,104314,32541],{"class":96},[79,104316,685],{"class":239},[79,104318,103602],{"class":89},[79,104320,103553],{"class":239},[19,104322,104323],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[51,104325,104327],{"className":230,"code":104326,"language":232,"meta":57,"style":57},"if __name__ == \"__main__\":\n    main()\n",[59,104328,104329,104341],{"__ignoreMap":57},[79,104330,104331,104333,104335,104337,104339],{"class":81,"line":82},[79,104332,1329],{"class":243},[79,104334,1332],{"class":96},[79,104336,1143],{"class":243},[79,104338,1337],{"class":89},[79,104340,673],{"class":239},[79,104342,104343],{"class":81,"line":167},[79,104344,1345],{"class":239},[19,104346,104347,104348,104351,104352,1604],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[59,104349,104350],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[59,104353,104350],{},[19,104355,104356],{},"运行:",[51,104358,104360],{"className":73,"code":104359,"language":75,"meta":57,"style":57},"python ch1_first_sim.py\n",[59,104361,104362],{"__ignoreMap":57},[79,104363,104364,104366],{"class":81,"line":82},[79,104365,232],{"class":85},[79,104367,103361],{"class":89},[14,104369,2042],{"id":2041},[19,104371,104372],{},"你应该看到类似输出:",[51,104374,104377],{"className":104375,"code":104376,"language":56,"meta":57},[54],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[59,104378,104376],{"__ignoreMap":57},[19,104380,104381,104383,104384,104387,104388,1604],{},[59,104382,103678],{}," 有 7 个位置变量: ",[59,104385,104386],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[59,104389,104390],{},"vx vy vz wx wy wz",[19,104392,104393,104394,104397],{},"你还会看到 ",[59,104395,104396],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104399,2073],{"id":2072},[19,104401,104402],{},"确认版本:",[51,104404,104405],{"className":73,"code":103031,"language":75,"meta":57,"style":57},[59,104406,104407],{"__ignoreMap":57},[79,104408,104409,104411,104413],{"class":81,"line":82},[79,104410,232],{"class":85},[79,104412,32487],{"class":96},[79,104414,103042],{"class":89},[19,104416,104417],{},"确认导入的是官方 bindings:",[51,104419,104421],{"className":73,"code":104420,"language":75,"meta":57,"style":57},"python -c \"import mujoco; print(mujoco)\"\n",[59,104422,104423],{"__ignoreMap":57},[79,104424,104425,104427,104429],{"class":81,"line":82},[79,104426,232],{"class":85},[79,104428,32487],{"class":96},[79,104430,104431],{"class":89}," \"import mujoco; print(mujoco)\"\n",[19,104433,104434],{},"运行程序:",[51,104436,104437],{"className":73,"code":104359,"language":75,"meta":57,"style":57},[59,104438,104439],{"__ignoreMap":57},[79,104440,104441,104443],{"class":81,"line":82},[79,104442,232],{"class":85},[79,104444,103361],{"class":89},[19,104446,104447,104448,104451,104452,1604],{},"检查 ",[59,104449,104450],{},"final time"," 是否约等于 ",[59,104453,1057],{},[19,104455,104456],{},"再做几个小实验：",[26,104458,104459,104467,104475,104488],{},[29,104460,2100,104461,2104,104463,104466],{},[59,104462,103995],{},[59,104464,104465],{},"pos=\"0 0 2\"","，观察初始高度变化。",[29,104468,2100,104469,2104,104471,104474],{},[59,104470,103885],{},[59,104472,104473],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[29,104476,2100,104477,2104,104479,104482,104483,104485,104486,1604],{},[59,104478,103881],{},[59,104480,104481],{},"timestep=\"0.005\"","，观察 100 步后的 ",[59,104484,104450],{}," 是否变成约 ",[59,104487,37443],{},[29,104489,104490,104491,104494],{},"删除 ",[59,104492,104493],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104496,104497],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104499,2127],{"id":2126},[265,104501,104503],{"id":104502},"modulenotfounderror-no-module-named-mujoco",[59,104504,104505],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104507,104508],{},"解决:",[51,104510,104512],{"className":73,"code":104511,"language":75,"meta":57,"style":57},"pip install \"mujoco>=2.3\"\n",[59,104513,104514],{"__ignoreMap":57},[79,104515,104516,104518,104520],{"class":81,"line":82},[79,104517,125],{"class":85},[79,104519,93],{"class":89},[79,104521,104522],{"class":89}," \"mujoco>=2.3\"\n",[265,104524,104526],{"id":104525},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104528,104529],{},"先安装系统依赖:",[51,104531,104533],{"className":73,"code":104532,"language":75,"meta":57,"style":57},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[59,104534,104535],{"__ignoreMap":57},[79,104536,104537,104539,104541,104543,104545,104547,104549,104552,104554,104557,104559],{"class":81,"line":82},[79,104538,86],{"class":85},[79,104540,90],{"class":89},[79,104542,93],{"class":89},[79,104544,97],{"class":96},[79,104546,106],{"class":89},[79,104548,109],{"class":89},[79,104550,104551],{"class":89}," glfw",[79,104553,102929],{"class":89},[79,104555,104556],{"class":89}," libX11",[79,104558,102942],{"class":89},[79,104560,104561],{"class":89}," libXrandr\n",[265,104563,104565],{"id":104564},"xml-解析失败","XML 解析失败",[19,104567,2148],{},[26,104569,104570,104573,104576,104582],{},[29,104571,104572],{},"标签是否闭合",[29,104574,104575],{},"属性是否带引号",[29,104577,104578,104579],{},"根节点是否是 ",[59,104580,104581],{},"\u003Cmujoco>",[29,104583,104584,104586,104587,104590],{},[59,104585,53913],{}," 是否放在 ",[59,104588,104589],{},"\u003Cworldbody>"," 内部",[265,104592,104594,104596,104597],{"id":104593},"final-time-不是严格等于-10",[59,104595,104450],{}," 不是严格等于 ",[59,104598,1057],{},[19,104600,104601],{},"这通常不是错误。浮点数计算可能得到：",[51,104603,104606],{"className":104604,"code":104605,"language":56,"meta":57},[54],"1.0000000000000007\n",[59,104607,104605],{"__ignoreMap":57},[19,104609,104610,104611,104613],{},"只要接近 ",[59,104612,1057],{}," 就正常。",[265,104615,104616],{"id":104616},"方块没有掉下来",[19,104618,2189],{},[26,104620,104621,104627,104632,104637],{},[29,104622,104623,104624],{},"方块 body 里是否有 ",[59,104625,104626],{},"\u003Cfreejoint\u002F>",[29,104628,104629,104630],{},"重力是否是 ",[59,104631,2087],{},[29,104633,104634,104635],{},"是否真的调用了 ",[59,104636,2170],{},[29,104638,104639,104640,104642,104643],{},"你看的是否是 ",[59,104641,104396],{},"，不是 ",[59,104644,104645],{},"initial qpos",[14,104647,2270],{"id":2269},[19,104649,104650],{},"本章你已经完成了 MuJoCo 的最小闭环：",[51,104652,104655],{"className":104653,"code":104654,"language":56,"meta":57},[54],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[59,104656,104654],{"__ignoreMap":57},[19,104658,104659],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[2287,104661,104662],{},"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":57,"searchDepth":167,"depth":167,"links":104664},[104665,104666,104667,104672,104676,104677,104678,104686],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":214,"depth":167,"text":215,"children":104668},[104669,104670,104671],{"id":103165,"depth":178,"text":103166},{"id":103257,"depth":178,"text":103258},{"id":103306,"depth":178,"text":103307},{"id":421,"depth":167,"text":422,"children":104673},[104674,104675],{"id":1378,"depth":178,"text":1378},{"id":1576,"depth":178,"text":1576},{"id":2041,"depth":167,"text":2042},{"id":2072,"depth":167,"text":2073},{"id":2126,"depth":167,"text":2127,"children":104679},[104680,104681,104682,104683,104685],{"id":104502,"depth":178,"text":104505},{"id":104525,"depth":178,"text":104526},{"id":104564,"depth":178,"text":104565},{"id":104593,"depth":178,"text":104684},"final time 不是严格等于 1.0",{"id":104616,"depth":178,"text":104616},{"id":2269,"depth":167,"text":2270},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102741,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104693,"title":104694,"body":104695,"description":57,"extension":2314,"meta":106334,"navigation":453,"path":106335,"seo":106336,"stem":106337,"__hash__":106338},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104696,"toc":106310},[104697,104700,104702,104705,104708,104725,104820,104823,104829,104831,104833,104857,104859,104873,104875,104916,104918,104931,104933,104936,104984,104996,104999,105002,105008,105021,105088,105091,105110,105113,105116,105122,105124,105133,105136,105140,105149,105231,105240,105244,105249,105263,105271,105273,105598,105600,105612,105614,105625,105627,105630,105648,105651,105654,105671,105682,105685,105700,105709,105711,105732,105749,105769,105775,105814,105830,105846,105852,105855,105879,105895,105900,105929,105946,105971,105974,105989,105998,106013,106022,106037,106044,106046,106055,106068,106075,106078,106117,106124,106126,106177,106179,106185,106188,106195,106202,106205,106207,106225,106228,106231,106265,106277,106279,106282,106304,106307],[10,104698,104694],{"id":104699},"_2xml-与-mjcf-物理建模基础",[14,104701,17],{"id":16},[19,104703,104704],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104706,104707],{},"本章结束后，你应该能看懂一个简单模型里：",[26,104709,104710,104713,104716,104719,104722],{},[29,104711,104712],{},"地面在哪里。",[29,104714,104715],{},"物体初始位置在哪里。",[29,104717,104718],{},"几何体是什么形状。",[29,104720,104721],{},"哪些 body 可以自由运动。",[29,104723,104724],{},"如何用名字在 Python 里找到 XML 中的对象。",[2516,104726,104727,104737],{},[2519,104728,104729],{},[2522,104730,104731,104734],{},[2525,104732,104733],{"align":25876},"标签",[2525,104735,104736],{"align":25876},"作用",[2563,104738,104739,104748,104758,104767,104777,104787,104800,104810],{},[2522,104740,104741,104745],{},[2568,104742,104743],{"align":25876},[59,104744,104581],{},[2568,104746,104747],{"align":25876},"根节点",[2522,104749,104750,104755],{},[2568,104751,104752],{"align":25876},[59,104753,104754],{},"\u003Coption>",[2568,104756,104757],{"align":25876},"仿真参数",[2522,104759,104760,104764],{},[2568,104761,104762],{"align":25876},[59,104763,104589],{},[2568,104765,104766],{"align":25876},"世界中的物体",[2522,104768,104769,104774],{},[2568,104770,104771],{"align":25876},[59,104772,104773],{},"\u003Cbody>",[2568,104775,104776],{"align":25876},"刚体",[2522,104778,104779,104784],{},[2568,104780,104781],{"align":25876},[59,104782,104783],{},"\u003Cgeom>",[2568,104785,104786],{"align":25876},"几何体、碰撞体、可视体",[2522,104788,104789,104797],{},[2568,104790,104791,27114,104794],{"align":25876},[59,104792,104793],{},"\u003Cjoint>",[59,104795,104796],{},"\u003Cfreejoint>",[2568,104798,104799],{"align":25876},"关节",[2522,104801,104802,104807],{},[2568,104803,104804],{"align":25876},[59,104805,104806],{},"\u003Csite>",[2568,104808,104809],{"align":25876},"标记点",[2522,104811,104812,104817],{},[2568,104813,104814],{"align":25876},[59,104815,104816],{},"\u003Cactuator>",[2568,104818,104819],{"align":25876},"控制器",[19,104821,104822],{},"初学时可以先记住：",[51,104824,104827],{"className":104825,"code":104826,"language":56,"meta":57},[54],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[59,104828,104826],{"__ignoreMap":57},[14,104830,67],{"id":66},[19,104832,70],{},[51,104834,104836],{"className":73,"code":104835,"language":75,"meta":57,"style":57},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[59,104837,104838],{"__ignoreMap":57},[79,104839,104840,104842,104844,104846,104848,104850,104852,104854],{"class":81,"line":82},[79,104841,86],{"class":85},[79,104843,90],{"class":89},[79,104845,93],{"class":89},[79,104847,97],{"class":96},[79,104849,106],{"class":89},[79,104851,109],{"class":89},[79,104853,104551],{"class":89},[79,104855,104856],{"class":89}," glfw-devel\n",[19,104858,115],{},[51,104860,104861],{"className":73,"code":118,"language":75,"meta":57,"style":57},[59,104862,104863],{"__ignoreMap":57},[79,104864,104865,104867,104869,104871],{"class":81,"line":82},[79,104866,125],{"class":85},[79,104868,93],{"class":89},[79,104870,130],{"class":89},[79,104872,133],{"class":89},[19,104874,136],{},[51,104876,104878],{"className":73,"code":104877,"language":75,"meta":57,"style":57},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[59,104879,104880,104897,104906],{"__ignoreMap":57},[79,104881,104882,104884,104886,104888,104891,104893,104895],{"class":81,"line":82},[79,104883,146],{"class":85},[79,104885,149],{"class":89},[79,104887,152],{"class":96},[79,104889,104890],{"class":89}," mujoco-xml",[79,104892,158],{"class":89},[79,104894,161],{"class":96},[79,104896,164],{"class":96},[79,104898,104899,104901,104903],{"class":81,"line":167},[79,104900,146],{"class":85},[79,104902,172],{"class":89},[79,104904,104905],{"class":89}," mujoco-xml\n",[79,104907,104908,104910,104912,104914],{"class":81,"line":178},[79,104909,125],{"class":85},[79,104911,93],{"class":89},[79,104913,130],{"class":89},[79,104915,133],{"class":89},[19,104917,189],{},[26,104919,104920,104923,104928],{},[29,104921,104922],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[29,104924,104925,104926,1604],{},"本章使用基础标签，适用于 ",[59,104927,103113],{},[29,104929,104930],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104932,215],{"id":214},[19,104934,104935],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[51,104937,104939],{"className":383,"code":104938,"language":385,"meta":57,"style":57},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[59,104940,104941,104955,104963,104968,104976],{"__ignoreMap":57},[79,104942,104943,104945,104947,104949,104951,104953],{"class":81,"line":82},[79,104944,392],{"class":239},[79,104946,103107],{"class":395},[79,104948,103832],{"class":85},[79,104950,244],{"class":239},[79,104952,64789],{"class":89},[79,104954,53420],{"class":239},[79,104956,104957,104959,104961],{"class":81,"line":167},[79,104958,54257],{"class":239},[79,104960,2259],{"class":395},[79,104962,53420],{"class":239},[79,104964,104965],{"class":81,"line":178},[79,104966,104967],{"class":239},"    ...\n",[79,104969,104970,104972,104974],{"class":81,"line":457},[79,104971,54529],{"class":239},[79,104973,2259],{"class":395},[79,104975,53420],{"class":239},[79,104977,104978,104980,104982],{"class":81,"line":462},[79,104979,53898],{"class":239},[79,104981,103107],{"class":395},[79,104983,53420],{"class":239},[19,104985,104986,104988,104989,104991,104992,104995],{},[59,104987,53913],{}," 表示刚体。",[59,104990,103202],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[59,104993,104994],{},"joint"," 表示刚体相对父刚体如何运动。",[265,104997,104998],{"id":104998},"层级结构非常重要",[19,105000,105001],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[51,105003,105006],{"className":105004,"code":105005,"language":56,"meta":57},[54],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[59,105007,105005],{"__ignoreMap":57},[19,105009,105010,1905,105013,105016,105017,105020],{},[59,105011,105012],{},"red_box_geom",[59,105014,105015],{},"box_center"," 都属于 ",[59,105018,105019],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[51,105022,105024],{"className":383,"code":105023,"language":385,"meta":57,"style":57},"\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",[59,105025,105026,105046,105060,105080],{"__ignoreMap":57},[79,105027,105028,105030,105032,105034,105036,105038,105040,105042,105044],{"class":81,"line":82},[79,105029,392],{"class":239},[79,105031,53913],{"class":395},[79,105033,2238],{"class":85},[79,105035,244],{"class":239},[79,105037,55601],{"class":89},[79,105039,2245],{"class":85},[79,105041,244],{"class":239},[79,105043,103193],{"class":89},[79,105045,53420],{"class":239},[79,105047,105048,105050,105052,105054,105056,105058],{"class":81,"line":167},[79,105049,54257],{"class":239},[79,105051,103678],{"class":395},[79,105053,2238],{"class":85},[79,105055,244],{"class":239},[79,105057,104017],{"class":89},[79,105059,415],{"class":239},[79,105061,105062,105064,105066,105068,105070,105072,105074,105076,105078],{"class":81,"line":178},[79,105063,54257],{"class":239},[79,105065,103202],{"class":395},[79,105067,55934],{"class":85},[79,105069,244],{"class":239},[79,105071,55601],{"class":89},[79,105073,103218],{"class":85},[79,105075,244],{"class":239},[79,105077,103223],{"class":89},[79,105079,415],{"class":239},[79,105081,105082,105084,105086],{"class":81,"line":457},[79,105083,53898],{"class":239},[79,105085,53913],{"class":395},[79,105087,53420],{"class":239},[19,105089,105090],{},"含义:",[26,105092,105093,105099,105104,105107],{},[29,105094,105095,105096,105098],{},"创建名为 ",[59,105097,55824],{}," 的刚体",[29,105100,105101,105102],{},"初始位置在世界坐标 ",[59,105103,103250],{},[29,105105,105106],{},"它有一个自由关节",[29,105108,105109],{},"它有一个盒子几何体",[265,105111,105112],{"id":105112},"坐标怎么理解",[19,105114,105115],{},"MuJoCo 默认使用三维坐标：",[51,105117,105120],{"className":105118,"code":105119,"language":56,"meta":57},[54],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[59,105121,105119],{"__ignoreMap":57},[19,105123,1789],{},[51,105125,105127],{"className":383,"code":105126,"language":385,"meta":57,"style":57},"pos=\"0 0 1\"\n",[59,105128,105129],{"__ignoreMap":57},[79,105130,105131],{"class":81,"line":82},[79,105132,105126],{"class":239},[19,105134,105135],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[265,105137,105139],{"id":105138},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,105141,105142,105143,2113,105146,105148],{},"不同 ",[59,105144,105145],{},"type",[59,105147,33615],{}," 含义不同：",[2516,105150,105151,105166],{},[2519,105152,105153],{},[2522,105154,105155,105159,105164],{},[2525,105156,105157],{"align":25876},[59,105158,105145],{},[2525,105160,105161,105163],{"align":25876},[59,105162,33615],{}," 示例",[2525,105165,102800],{"align":25876},[2563,105167,105168,105182,105197,105216],{},[2522,105169,105170,105174,105179],{},[2568,105171,105172],{"align":25876},[59,105173,55824],{},[2568,105175,105176],{"align":25876},[59,105177,105178],{},"size=\"0.1 0.2 0.3\"",[2568,105180,105181],{"align":25876},"x\u002Fy\u002Fz 半边长，不是完整长度",[2522,105183,105184,105189,105194],{},[2568,105185,105186],{"align":25876},[59,105187,105188],{},"sphere",[2568,105190,105191],{"align":25876},[59,105192,105193],{},"size=\"0.1\"",[2568,105195,105196],{"align":25876},"球半径",[2522,105198,105199,105204,105209],{},[2568,105200,105201],{"align":25876},[59,105202,105203],{},"capsule",[2568,105205,105206],{"align":25876},[59,105207,105208],{},"size=\"0.03\"",[2568,105210,105211,105212,105215],{"align":25876},"胶囊半径，长度常用 ",[59,105213,105214],{},"fromto"," 指定",[2522,105217,105218,105223,105228],{},[2568,105219,105220],{"align":25876},[59,105221,105222],{},"plane",[2568,105224,105225],{"align":25876},[59,105226,105227],{},"size=\"3 3 0.1\"",[2568,105229,105230],{"align":25876},"可视平面大小，通常当地面",[19,105232,105233,105234,105236,105237,105239],{},"最容易踩坑的是 box：",[59,105235,104080],{}," 表示边长大约是 ",[59,105238,34153],{},"，因为 MuJoCo 用的是半边长。",[265,105241,105243],{"id":105242},"site-是什么","site 是什么",[19,105245,105246,105248],{},[59,105247,2235],{}," 是一个不参与碰撞的小标记点。它常用于：",[26,105250,105251,105254,105257,105260],{},[29,105252,105253],{},"标记机械臂末端。",[29,105255,105256],{},"标记目标位置。",[29,105258,105259],{},"放传感器或相机参考点。",[29,105261,105262],{},"在 Python 中读取某个关键点的世界坐标。",[19,105264,105265,105266,1905,105268,105270],{},"在后面的 Reacher 任务中，",[59,105267,1904],{},[59,105269,1908],{}," 就会用 site 表示。",[14,105272,422],{"id":421},[51,105274,105276],{"className":230,"code":105275,"language":232,"meta":57,"style":57},"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",[59,105277,105278,105284,105294,105298,105302,105310,105315,105319,105323,105327,105332,105336,105341,105346,105351,105356,105360,105364,105368,105372,105376,105380,105392,105404,105412,105416,105431,105444,105448,105461,105474,105486,105499,105503,105519,105523,105527,105538,105550,105562,105574,105578,105582,105594],{"__ignoreMap":57},[79,105279,105280,105282],{"class":81,"line":82},[79,105281,432],{"class":243},[79,105283,435],{"class":239},[79,105285,105286,105288,105290,105292],{"class":81,"line":167},[79,105287,432],{"class":243},[79,105289,442],{"class":239},[79,105291,445],{"class":243},[79,105293,448],{"class":239},[79,105295,105296],{"class":81,"line":178},[79,105297,454],{"emptyLinePlaceholder":453},[79,105299,105300],{"class":81,"line":457},[79,105301,454],{"emptyLinePlaceholder":453},[79,105303,105304,105306,105308],{"class":81,"line":462},[79,105305,465],{"class":96},[79,105307,468],{"class":243},[79,105309,471],{"class":89},[79,105311,105312],{"class":81,"line":474},[79,105313,105314],{"class":89},"\u003Cmujoco model=\"xml_basic\">\n",[79,105316,105317],{"class":81,"line":480},[79,105318,103401],{"class":89},[79,105320,105321],{"class":81,"line":486},[79,105322,454],{"emptyLinePlaceholder":453},[79,105324,105325],{"class":81,"line":491},[79,105326,494],{"class":89},[79,105328,105329],{"class":81,"line":497},[79,105330,105331],{"class":89},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[79,105333,105334],{"class":81,"line":503},[79,105335,454],{"emptyLinePlaceholder":453},[79,105337,105338],{"class":81,"line":509},[79,105339,105340],{"class":89},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[79,105342,105343],{"class":81,"line":514},[79,105344,105345],{"class":89},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[79,105347,105348],{"class":81,"line":520},[79,105349,105350],{"class":89},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[79,105352,105353],{"class":81,"line":526},[79,105354,105355],{"class":89},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[79,105357,105358],{"class":81,"line":532},[79,105359,570],{"class":89},[79,105361,105362],{"class":81,"line":537},[79,105363,576],{"class":89},[79,105365,105366],{"class":81,"line":543},[79,105367,611],{"class":89},[79,105369,105370],{"class":81,"line":549},[79,105371,617],{"class":89},[79,105373,105374],{"class":81,"line":555},[79,105375,454],{"emptyLinePlaceholder":453},[79,105377,105378],{"class":81,"line":561},[79,105379,454],{"emptyLinePlaceholder":453},[79,105381,105382,105384,105386,105388,105390],{"class":81,"line":567},[79,105383,633],{"class":243},[79,105385,893],{"class":85},[79,105387,896],{"class":239},[79,105389,899],{"class":96},[79,105391,673],{"class":239},[79,105393,105394,105396,105398,105400,105402],{"class":81,"line":573},[79,105395,907],{"class":239},[79,105397,244],{"class":243},[79,105399,912],{"class":239},[79,105401,465],{"class":96},[79,105403,253],{"class":239},[79,105405,105406,105408,105410],{"class":81,"line":579},[79,105407,922],{"class":239},[79,105409,244],{"class":243},[79,105411,927],{"class":239},[79,105413,105414],{"class":81,"line":584},[79,105415,454],{"emptyLinePlaceholder":453},[79,105417,105418,105421,105423,105426,105429],{"class":81,"line":590},[79,105419,105420],{"class":239},"    box_body_id ",[79,105422,244],{"class":243},[79,105424,105425],{"class":239}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[79,105427,105428],{"class":89},"\"red_box\"",[79,105430,253],{"class":239},[79,105432,105433,105435,105437,105439,105442],{"class":81,"line":596},[79,105434,651],{"class":239},[79,105436,244],{"class":243},[79,105438,247],{"class":239},[79,105440,105441],{"class":89},"\"box_center\"",[79,105443,253],{"class":239},[79,105445,105446],{"class":81,"line":602},[79,105447,454],{"emptyLinePlaceholder":453},[79,105449,105450,105452,105455,105457,105459],{"class":81,"line":608},[79,105451,662],{"class":243},[79,105453,105454],{"class":239}," box_body_id ",[79,105456,392],{"class":243},[79,105458,670],{"class":96},[79,105460,673],{"class":239},[79,105462,105463,105465,105467,105469,105472],{"class":81,"line":614},[79,105464,679],{"class":243},[79,105466,682],{"class":96},[79,105468,685],{"class":239},[79,105470,105471],{"class":89},"\"body red_box not found\"",[79,105473,253],{"class":239},[79,105475,105476,105478,105480,105482,105484],{"class":81,"line":620},[79,105477,662],{"class":243},[79,105479,665],{"class":239},[79,105481,392],{"class":243},[79,105483,670],{"class":96},[79,105485,673],{"class":239},[79,105487,105488,105490,105492,105494,105497],{"class":81,"line":625},[79,105489,679],{"class":243},[79,105491,682],{"class":96},[79,105493,685],{"class":239},[79,105495,105496],{"class":89},"\"site box_center not found\"",[79,105498,253],{"class":239},[79,105500,105501],{"class":81,"line":630},[79,105502,454],{"emptyLinePlaceholder":453},[79,105504,105505,105507,105509,105511,105513,105515,105517],{"class":81,"line":648},[79,105506,949],{"class":243},[79,105508,103564],{"class":239},[79,105510,955],{"class":243},[79,105512,958],{"class":96},[79,105514,685],{"class":239},[79,105516,3947],{"class":96},[79,105518,966],{"class":239},[79,105520,105521],{"class":81,"line":659},[79,105522,1109],{"class":239},[79,105524,105525],{"class":81,"line":676},[79,105526,454],{"emptyLinePlaceholder":453},[79,105528,105529,105531,105533,105536],{"class":81,"line":708},[79,105530,1254],{"class":96},[79,105532,685],{"class":239},[79,105534,105535],{"class":89},"\"simulation time:\"",[79,105537,103541],{"class":239},[79,105539,105540,105542,105544,105547],{"class":81,"line":717},[79,105541,1254],{"class":96},[79,105543,685],{"class":239},[79,105545,105546],{"class":89},"\"box body position:\"",[79,105548,105549],{"class":239},", data.xpos[box_body_id].copy())\n",[79,105551,105552,105554,105556,105559],{"class":81,"line":722},[79,105553,1254],{"class":96},[79,105555,685],{"class":239},[79,105557,105558],{"class":89},"\"site position:\"",[79,105560,105561],{"class":239},", data.site_xpos[site_id].copy())\n",[79,105563,105564,105566,105568,105571],{"class":81,"line":727},[79,105565,1254],{"class":96},[79,105567,685],{"class":239},[79,105569,105570],{"class":89},"\"box qpos:\"",[79,105572,105573],{"class":239},", np.array(data.qpos))\n",[79,105575,105576],{"class":81,"line":738},[79,105577,454],{"emptyLinePlaceholder":453},[79,105579,105580],{"class":81,"line":753},[79,105581,454],{"emptyLinePlaceholder":453},[79,105583,105584,105586,105588,105590,105592],{"class":81,"line":768},[79,105585,1329],{"class":243},[79,105587,1332],{"class":96},[79,105589,1143],{"class":243},[79,105591,1337],{"class":89},[79,105593,673],{"class":239},[79,105595,105596],{"class":81,"line":776},[79,105597,1345],{"class":239},[19,105599,1348],{},[51,105601,105603],{"className":73,"code":105602,"language":75,"meta":57,"style":57},"touch ch2_xml_basic.py\n",[59,105604,105605],{"__ignoreMap":57},[79,105606,105607,105609],{"class":81,"line":82},[79,105608,1358],{"class":85},[79,105610,105611],{"class":89}," ch2_xml_basic.py\n",[19,105613,104356],{},[51,105615,105617],{"className":73,"code":105616,"language":75,"meta":57,"style":57},"python ch2_xml_basic.py\n",[59,105618,105619],{"__ignoreMap":57},[79,105620,105621,105623],{"class":81,"line":82},[79,105622,232],{"class":85},[79,105624,105611],{"class":89},[265,105626,1378],{"id":1378},[19,105628,105629],{},"用名字查找 body：",[51,105631,105633],{"className":230,"code":105632,"language":232,"meta":57,"style":57},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[59,105634,105635],{"__ignoreMap":57},[79,105636,105637,105640,105642,105644,105646],{"class":81,"line":82},[79,105638,105639],{"class":239},"box_body_id ",[79,105641,244],{"class":243},[79,105643,105425],{"class":239},[79,105645,105428],{"class":89},[79,105647,253],{"class":239},[19,105649,105650],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105652,105653],{},"用名字查找 site：",[51,105655,105657],{"className":230,"code":105656,"language":232,"meta":57,"style":57},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[59,105658,105659],{"__ignoreMap":57},[79,105660,105661,105663,105665,105667,105669],{"class":81,"line":82},[79,105662,240],{"class":239},[79,105664,244],{"class":243},[79,105666,247],{"class":239},[79,105668,105441],{"class":89},[79,105670,253],{"class":239},[19,105672,105673,105674,105677,105678,105681],{},"注意第二个参数是对象类型。查 body 就用 ",[59,105675,105676],{},"mjOBJ_BODY","，查 site 就用 ",[59,105679,105680],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105683,105684],{},"读取世界坐标：",[51,105686,105688],{"className":230,"code":105687,"language":232,"meta":57,"style":57},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[59,105689,105690,105695],{"__ignoreMap":57},[79,105691,105692],{"class":81,"line":82},[79,105693,105694],{"class":239},"data.xpos[box_body_id]\n",[79,105696,105697],{"class":81,"line":167},[79,105698,105699],{"class":239},"data.site_xpos[site_id]\n",[19,105701,105702,105705,105706,105708],{},[59,105703,105704],{},"xpos"," 是 body 的世界坐标，",[59,105707,210],{}," 是 site 的世界坐标。",[265,105710,1576],{"id":1576},[51,105712,105714],{"className":230,"code":105713,"language":232,"meta":57,"style":57},"import mujoco\nimport numpy as np\n",[59,105715,105716,105722],{"__ignoreMap":57},[79,105717,105718,105720],{"class":81,"line":82},[79,105719,432],{"class":243},[79,105721,435],{"class":239},[79,105723,105724,105726,105728,105730],{"class":81,"line":167},[79,105725,432],{"class":243},[79,105727,442],{"class":239},[79,105729,445],{"class":243},[79,105731,448],{"class":239},[19,105733,105734,105735,105738,105739,105742,105743,204,105746,1604],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[59,105736,105737],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[59,105740,105741],{},"as np"," 是习惯写法，后面就可以写 ",[59,105744,105745],{},"np.array(...)",[59,105747,105748],{},"np.round(...)",[51,105750,105751],{"className":230,"code":103653,"language":232,"meta":57,"style":57},[59,105752,105753,105761,105765],{"__ignoreMap":57},[79,105754,105755,105757,105759],{"class":81,"line":82},[79,105756,465],{"class":96},[79,105758,468],{"class":243},[79,105760,471],{"class":89},[79,105762,105763],{"class":81,"line":167},[79,105764,103668],{"class":89},[79,105766,105767],{"class":81,"line":178},[79,105768,617],{"class":89},[19,105770,105771,105772,1604],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[59,105773,105774],{},"mujoco.MjModel.from_xml_string(XML)",[51,105776,105778],{"className":383,"code":105777,"language":385,"meta":57,"style":57},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[59,105779,105780],{"__ignoreMap":57},[79,105781,105782,105784,105786,105788,105790,105792,105794,105796,105798,105800,105802,105805,105807,105809,105812],{"class":81,"line":82},[79,105783,392],{"class":239},[79,105785,2235],{"class":395},[79,105787,2238],{"class":85},[79,105789,244],{"class":239},[79,105791,105441],{"class":89},[79,105793,2245],{"class":85},[79,105795,244],{"class":239},[79,105797,412],{"class":89},[79,105799,103218],{"class":85},[79,105801,244],{"class":239},[79,105803,105804],{"class":89},"\"0.03\"",[79,105806,80875],{"class":85},[79,105808,244],{"class":239},[79,105810,105811],{"class":89},"\"0 1 0 1\"",[79,105813,415],{"class":239},[19,105815,105816,105818,105819,105822,105823,105825,105826,105829],{},[59,105817,2235],{}," 是标记点。",[59,105820,105821],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[59,105824,105208],{}," 表示显示出来的小球大小。",[59,105827,105828],{},"rgba=\"0 1 0 1\""," 表示绿色。",[51,105831,105832],{"className":230,"code":105632,"language":232,"meta":57,"style":57},[59,105833,105834],{"__ignoreMap":57},[79,105835,105836,105838,105840,105842,105844],{"class":81,"line":82},[79,105837,105639],{"class":239},[79,105839,244],{"class":243},[79,105841,105425],{"class":239},[79,105843,105428],{"class":89},[79,105845,253],{"class":239},[19,105847,105848,105849,105851],{},"这行的作用是：根据名字 ",[59,105850,105428],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105853,105854],{},"拆开看：",[26,105856,105857,105863,105868,105874],{},[29,105858,105859,105862],{},[59,105860,105861],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[29,105864,105865,105867],{},[59,105866,104141],{}," 是被查询的模型。",[29,105869,105870,105873],{},[59,105871,105872],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[29,105875,105876,105878],{},[59,105877,105428],{}," 是 XML 里写的名字。",[51,105880,105881],{"className":230,"code":105656,"language":232,"meta":57,"style":57},[59,105882,105883],{"__ignoreMap":57},[79,105884,105885,105887,105889,105891,105893],{"class":81,"line":82},[79,105886,240],{"class":239},[79,105888,244],{"class":243},[79,105890,247],{"class":239},[79,105892,105441],{"class":89},[79,105894,253],{"class":239},[19,105896,105897,105898,1604],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[59,105899,105441],{},[51,105901,105903],{"className":230,"code":105902,"language":232,"meta":57,"style":57},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[59,105904,105905,105917],{"__ignoreMap":57},[79,105906,105907,105909,105911,105913,105915],{"class":81,"line":82},[79,105908,1329],{"class":243},[79,105910,105454],{"class":239},[79,105912,392],{"class":243},[79,105914,670],{"class":96},[79,105916,673],{"class":239},[79,105918,105919,105921,105923,105925,105927],{"class":81,"line":167},[79,105920,1642],{"class":243},[79,105922,682],{"class":96},[79,105924,685],{"class":239},[79,105926,105471],{"class":89},[79,105928,253],{"class":239},[19,105930,105931,105933,105934,105937,105938,105941,105942,105945],{},[59,105932,1329],{}," 是条件判断。",[59,105935,105936],{},"mj_name2id"," 找不到对象时会返回 ",[59,105939,105940],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[59,105943,105944],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[51,105947,105949],{"className":230,"code":105948,"language":232,"meta":57,"style":57},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[59,105950,105951,105967],{"__ignoreMap":57},[79,105952,105953,105955,105957,105959,105961,105963,105965],{"class":81,"line":82},[79,105954,1874],{"class":243},[79,105956,103564],{"class":239},[79,105958,955],{"class":243},[79,105960,958],{"class":96},[79,105962,685],{"class":239},[79,105964,3947],{"class":96},[79,105966,966],{"class":239},[79,105968,105969],{"class":81,"line":167},[79,105970,103757],{"class":239},[19,105972,105973],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[51,105975,105977],{"className":230,"code":105976,"language":232,"meta":57,"style":57},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[59,105978,105979],{"__ignoreMap":57},[79,105980,105981,105983,105985,105987],{"class":81,"line":82},[79,105982,32541],{"class":96},[79,105984,685],{"class":239},[79,105986,105546],{"class":89},[79,105988,105549],{"class":239},[19,105990,105991,105993,105994,105997],{},[59,105992,103162],{}," 保存所有 body 的世界坐标。",[59,105995,105996],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[51,105999,106001],{"className":230,"code":106000,"language":232,"meta":57,"style":57},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[59,106002,106003],{"__ignoreMap":57},[79,106004,106005,106007,106009,106011],{"class":81,"line":82},[79,106006,32541],{"class":96},[79,106008,685],{"class":239},[79,106010,105558],{"class":89},[79,106012,105561],{"class":239},[19,106014,106015,106018,106019,106021],{},[59,106016,106017],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[59,106020,105015],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[51,106023,106025],{"className":230,"code":106024,"language":232,"meta":57,"style":57},"print(\"box qpos:\", np.array(data.qpos))\n",[59,106026,106027],{"__ignoreMap":57},[79,106028,106029,106031,106033,106035],{"class":81,"line":82},[79,106030,32541],{"class":96},[79,106032,685],{"class":239},[79,106034,105570],{"class":89},[79,106036,105573],{"class":239},[19,106038,106039,106040,106043],{},"这里打印广义位置数组。",[59,106041,106042],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,106045,2042],{"id":2041},[19,106047,106048,106049,106052,106053,1604],{},"程序会输出 ",[59,106050,106051],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[59,106054,203],{},[19,106056,106057,106059,106060,106063,106064,106067],{},[59,106058,105996],{}," 是 body 的世界坐标位置。",[59,106061,106062],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[59,106065,106066],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,106069,84329,106070,2113,106072,106074],{},[59,106071,105015],{},[59,106073,105821],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,106076,106077],{},"如果你把 site 改成：",[51,106079,106081],{"className":383,"code":106080,"language":385,"meta":57,"style":57},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[59,106082,106083],{"__ignoreMap":57},[79,106084,106085,106087,106089,106091,106093,106096,106098,106100,106103,106105,106107,106109,106111,106113,106115],{"class":81,"line":82},[79,106086,392],{"class":239},[79,106088,2235],{"class":395},[79,106090,2238],{"class":85},[79,106092,244],{"class":239},[79,106094,106095],{"class":89},"\"box_top\"",[79,106097,2245],{"class":85},[79,106099,244],{"class":239},[79,106101,106102],{"class":89},"\"0 0 0.15\"",[79,106104,103218],{"class":85},[79,106106,244],{"class":239},[79,106108,105804],{"class":89},[79,106110,80875],{"class":85},[79,106112,244],{"class":239},[79,106114,105811],{"class":89},[79,106116,415],{"class":239},[19,106118,106119,106120,106123],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[59,106121,106122],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,106125,2073],{"id":2072},[26,106127,106128,106137,106140,106147,106153,106164],{},[29,106129,2100,106130,106132,106133,2104,106135,1604],{},[59,106131,105019],{}," 的初始高度从 ",[59,106134,1072],{},[59,106136,1049],{},[29,106138,106139],{},"重新运行程序。",[29,106141,106142,106143,106146],{},"观察 ",[59,106144,106145],{},"box qpos"," 和最终位置是否变化。",[29,106148,106149,106150,106152],{},"故意把 ",[59,106151,2235],{}," 名称改错，确认程序能报错。",[29,106154,2100,106155,106157,106158,2104,106160,106163],{},[59,106156,103202],{}," 的颜色 ",[59,106159,104088],{},[59,106161,106162],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[29,106165,2100,106166,2113,106168,2104,106170,106173,106174,106176],{},[59,106167,105015],{},[59,106169,2116],{},[59,106171,106172],{},"0 0 0.2","，观察 ",[59,106175,106122],{}," 如何变化。",[14,106178,2127],{"id":2126},[265,106180,106182],{"id":106181},"xml-error-schema-violation",[59,106183,106184],{},"XML Error: Schema violation",[19,106186,106187],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[265,106189,106191,83397,106193],{"id":106190},"mj_name2id-返回-1",[59,106192,105936],{},[59,106194,105940],{},[19,106196,106197,106198,106201],{},"说明名字没有找到。检查 XML 中 ",[59,106199,106200],{},"name=\"...\"","，并确认对象类型正确。",[265,106203,106204],{"id":106204},"物体不下落",[19,106206,2148],{},[26,106208,106209,106214,106219],{},[29,106210,106211,106212],{},"body 是否有 ",[59,106213,103678],{},[29,106215,106216,106217],{},"gravity 是否为 ",[59,106218,2087],{},[29,106220,106221,106222,106224],{},"body 是否被固定在 ",[59,106223,2259],{}," 中",[265,106226,106227],{"id":106227},"坐标看起来不符合预期",[19,106229,106230],{},"先区分两种坐标：",[2516,106232,106233,106242],{},[2519,106234,106235],{},[2522,106236,106237,106240],{},[2525,106238,106239],{"align":25876},"坐标",[2525,106241,102800],{"align":25876},[2563,106243,106244,106254],{},[2522,106245,106246,106251],{},[2568,106247,106248,106249],{"align":25876},"XML 里的 ",[59,106250,2116],{},[2568,106252,106253],{"align":25876},"相对父 body 的局部坐标",[2522,106255,106256,106262],{},[2568,106257,106258,27114,106260],{"align":25876},[59,106259,103162],{},[59,106261,106017],{},[2568,106263,106264],{"align":25876},"仿真更新后的世界坐标",[19,106266,106267,106268,106270,106271,1601,106274,106276],{},"如果你修改了 ",[59,106269,103154],{},"，但还没调用 ",[59,106272,106273],{},"mj_forward",[59,106275,103293],{},"，世界坐标可能还没有更新。",[14,106278,2270],{"id":2269},[19,106280,106281],{},"MJCF 建模先掌握四件事：",[26,106283,106284,106289,106294,106299],{},[29,106285,106286,106288],{},[59,106287,53913],{}," 表示刚体层级。",[29,106290,106291,106293],{},[59,106292,103202],{}," 表示形状、碰撞和质量。",[29,106295,106296,106298],{},[59,106297,104994],{}," 决定 body 能不能动、怎么动。",[29,106300,106301,106303],{},[59,106302,2235],{}," 用来标记关键点，方便 Python 读取位置。",[19,106305,106306],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[2287,106308,106309],{},"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":57,"searchDepth":167,"depth":167,"links":106311},[106312,106313,106314,106320,106324,106325,106326,106333],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":214,"depth":167,"text":215,"children":106315},[106316,106317,106318,106319],{"id":104998,"depth":178,"text":104998},{"id":105112,"depth":178,"text":105112},{"id":105138,"depth":178,"text":105139},{"id":105242,"depth":178,"text":105243},{"id":421,"depth":167,"text":422,"children":106321},[106322,106323],{"id":1378,"depth":178,"text":1378},{"id":1576,"depth":178,"text":1576},{"id":2041,"depth":167,"text":2042},{"id":2072,"depth":167,"text":2073},{"id":2126,"depth":167,"text":2127,"children":106327},[106328,106329,106331,106332],{"id":106181,"depth":178,"text":106184},{"id":106190,"depth":178,"text":106330},"mj_name2id 返回 -1",{"id":106204,"depth":178,"text":106204},{"id":106227,"depth":178,"text":106227},{"id":2269,"depth":167,"text":2270},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104694,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106340,"title":106341,"body":106342,"description":57,"extension":2314,"meta":107828,"navigation":453,"path":107829,"seo":107830,"stem":107831,"__hash__":107832},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106343,"toc":107800},[106344,106347,106349,106352,106354,106391,106394,106400,106403,106405,106407,106431,106433,106447,106449,106490,106492,106516,106518,106521,106529,106538,106541,106550,106558,106566,106569,106579,106582,106634,106641,106647,106655,106703,106706,106725,106728,106736,106740,106749,106781,106783,107131,107133,107145,107147,107158,107160,107163,107184,107190,107193,107218,107228,107231,107239,107242,107245,107266,107276,107278,107298,107301,107322,107331,107350,107356,107381,107384,107398,107405,107429,107432,107440,107449,107465,107477,107485,107494,107496,107499,107523,107528,107531,107553,107555,107594,107596,107603,107605,107613,107616,107619,107631,107672,107679,107690,107697,107700,107749,107752,107755,107761,107763,107768,107794,107797],[10,106345,106341],{"id":106346},"_3python-控制接口读取状态与推进仿真",[14,106348,17],{"id":16},[19,106350,106351],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,106353,24],{},[26,106355,106356,106361,106366,106370,106375,106385],{},[29,106357,106358],{},[59,106359,106360],{},"MjModel.from_xml_string",[29,106362,106363],{},[59,106364,106365],{},"MjData(model)",[29,106367,106368],{},[59,106369,103293],{},[29,106371,106372],{},[59,106373,106374],{},"mj_resetData",[29,106376,106377,106378,204,106380,204,106382],{},"读取 ",[59,106379,203],{},[59,106381,207],{},[59,106383,106384],{},"ctrl",[29,106386,106387,106388],{},"使用 ",[59,106389,106390],{},"model.opt.timestep",[19,106392,106393],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[51,106395,106398],{"className":106396,"code":106397,"language":56,"meta":57},[54],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[59,106399,106397],{"__ignoreMap":57},[19,106401,106402],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106404,67],{"id":66},[19,106406,70],{},[51,106408,106409],{"className":73,"code":74,"language":75,"meta":57,"style":57},[59,106410,106411],{"__ignoreMap":57},[79,106412,106413,106415,106417,106419,106421,106423,106425,106427,106429],{"class":81,"line":82},[79,106414,86],{"class":85},[79,106416,90],{"class":89},[79,106418,93],{"class":89},[79,106420,97],{"class":96},[79,106422,100],{"class":89},[79,106424,103],{"class":89},[79,106426,106],{"class":89},[79,106428,109],{"class":89},[79,106430,112],{"class":89},[19,106432,115],{},[51,106434,106435],{"className":73,"code":118,"language":75,"meta":57,"style":57},[59,106436,106437],{"__ignoreMap":57},[79,106438,106439,106441,106443,106445],{"class":81,"line":82},[79,106440,125],{"class":85},[79,106442,93],{"class":89},[79,106444,130],{"class":89},[79,106446,133],{"class":89},[19,106448,136],{},[51,106450,106452],{"className":73,"code":106451,"language":75,"meta":57,"style":57},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[59,106453,106454,106471,106480],{"__ignoreMap":57},[79,106455,106456,106458,106460,106462,106465,106467,106469],{"class":81,"line":82},[79,106457,146],{"class":85},[79,106459,149],{"class":89},[79,106461,152],{"class":96},[79,106463,106464],{"class":89}," mujoco-python-api",[79,106466,158],{"class":89},[79,106468,161],{"class":96},[79,106470,164],{"class":96},[79,106472,106473,106475,106477],{"class":81,"line":167},[79,106474,146],{"class":85},[79,106476,172],{"class":89},[79,106478,106479],{"class":89}," mujoco-python-api\n",[79,106481,106482,106484,106486,106488],{"class":81,"line":178},[79,106483,125],{"class":85},[79,106485,93],{"class":89},[79,106487,130],{"class":89},[79,106489,133],{"class":89},[19,106491,189],{},[26,106493,106494,106501,106510],{},[29,106495,106496,1905,106498,106500],{},[59,106497,102776],{},[59,106499,102781],{}," 是官方 Python bindings 的类名。",[29,106502,106503,106504,106507,106508,1604],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[59,106505,106506],{},"mjModel"," 在 Python 中是 ",[59,106509,102809],{},[29,106511,106512,106513,1604],{},"不要使用 ",[59,106514,106515],{},"sim = mujoco_py.MjSim(...)",[14,106517,215],{"id":214},[19,106519,106520],{},"仿真推进核心代码:",[51,106522,106523],{"className":230,"code":2008,"language":232,"meta":57,"style":57},[59,106524,106525],{"__ignoreMap":57},[79,106526,106527],{"class":81,"line":82},[79,106528,2008],{"class":239},[19,106530,106531,106532,204,106534,204,106536,1604],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[59,106533,103154],{},[59,106535,103157],{},[59,106537,103151],{},[19,106539,106540],{},"重置仿真:",[51,106542,106544],{"className":230,"code":106543,"language":232,"meta":57,"style":57},"mujoco.mj_resetData(model, data)\n",[59,106545,106546],{"__ignoreMap":57},[79,106547,106548],{"class":81,"line":82},[79,106549,106543],{"class":239},[19,106551,106552,106553,1601,106555,106557],{},"如果手动修改了 ",[59,106554,103154],{},[59,106556,103157],{},"，通常应调用:",[51,106559,106560],{"className":230,"code":1892,"language":232,"meta":57,"style":57},[59,106561,106562],{"__ignoreMap":57},[79,106563,106564],{"class":81,"line":82},[79,106565,1892],{"class":239},[19,106567,106568],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[265,106570,106572,204,106574,204,106576,106578],{"id":106571},"qposqvelctrl-是什么",[59,106573,203],{},[59,106575,207],{},[59,106577,106384],{}," 是什么",[19,106580,106581],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[2516,106583,106584,106596],{},[2519,106585,106586],{},[2522,106587,106588,106591,106593],{},[2525,106589,106590],{"align":25876},"字段",[2525,106592,102800],{"align":25876},[2525,106594,106595],{"align":25876},"谁来修改",[2563,106597,106598,106610,106622],{},[2522,106599,106600,106604,106607],{},[2568,106601,106602],{"align":25876},[59,106603,103154],{},[2568,106605,106606],{"align":25876},"广义位置，例如小车位置、关节角、自由物体位置姿态",[2568,106608,106609],{"align":25876},"MuJoCo 更新，也可以手动设置初始状态",[2522,106611,106612,106616,106619],{},[2568,106613,106614],{"align":25876},[59,106615,103157],{},[2568,106617,106618],{"align":25876},"广义速度，例如小车速度、关节角速度",[2568,106620,106621],{"align":25876},"MuJoCo 更新，也可以手动清零",[2522,106623,106624,106628,106631],{},[2568,106625,106626],{"align":25876},[59,106627,2163],{},[2568,106629,106630],{"align":25876},"actuator 的控制输入",[2568,106632,106633],{"align":25876},"主要由你的控制代码写入",[19,106635,11209,106636,1905,106638,106640],{},[59,106637,203],{},[59,106639,207],{}," 不一定同维。自由刚体就是典型例子：",[51,106642,106645],{"className":106643,"code":106644,"language":56,"meta":57},[54],"freejoint: qpos 7 维，qvel 6 维\n",[59,106646,106644],{"__ignoreMap":57},[265,106648,106650,1905,106652,106654],{"id":106649},"mj_step-和-mj_forward-的区别",[59,106651,103293],{},[59,106653,106273],{}," 的区别",[2516,106656,106657,106670],{},[2519,106658,106659],{},[2522,106660,106661,106664,106667],{},[2525,106662,106663],{"align":25876},"函数",[2525,106665,106666],{"align":25876},"是否推进时间",[2525,106668,106669],{"align":25876},"什么时候用",[2563,106671,106672,106685],{},[2522,106673,106674,106679,106682],{},[2568,106675,106676],{"align":25876},[59,106677,106678],{},"mj_step(model, data)",[2568,106680,106681],{"align":25876},"是",[2568,106683,106684],{"align":25876},"正常仿真循环，每调用一次前进一步",[2522,106686,106687,106692,106695],{},[2568,106688,106689],{"align":25876},[59,106690,106691],{},"mj_forward(model, data)",[2568,106693,106694],{"align":25876},"否",[2568,106696,106697,106698,204,106700,106702],{"align":25876},"手动改了 ",[59,106699,203],{},[59,106701,207],{}," 后，刷新派生量",[19,106704,106705],{},"例如你写：",[51,106707,106709],{"className":230,"code":106708,"language":232,"meta":57,"style":57},"data.qpos[2] = 2.0\n",[59,106710,106711],{"__ignoreMap":57},[79,106712,106713,106716,106718,106720,106722],{"class":81,"line":82},[79,106714,106715],{"class":239},"data.qpos[",[79,106717,1049],{"class":96},[79,106719,1033],{"class":239},[79,106721,244],{"class":243},[79,106723,106724],{"class":96}," 2.0\n",[19,106726,106727],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[51,106729,106730],{"className":230,"code":1892,"language":232,"meta":57,"style":57},[59,106731,106732],{"__ignoreMap":57},[79,106733,106734],{"class":81,"line":82},[79,106735,1892],{"class":239},[265,106737,106739],{"id":106738},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106741,106742,106745,106746,106748],{},[59,106743,106744],{},"mujoco.mj_resetData(model, data)"," 会把 ",[59,106747,35516],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[51,106750,106752],{"className":230,"code":106751,"language":232,"meta":57,"style":57},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[59,106753,106754,106758,106768,106777],{"__ignoreMap":57},[79,106755,106756],{"class":81,"line":82},[79,106757,106543],{"class":239},[79,106759,106760,106763,106765],{"class":81,"line":167},[79,106761,106762],{"class":239},"data.qpos[:] ",[79,106764,244],{"class":243},[79,106766,106767],{"class":239}," random_qpos\n",[79,106769,106770,106773,106775],{"class":81,"line":178},[79,106771,106772],{"class":239},"data.qvel[:] ",[79,106774,244],{"class":243},[79,106776,938],{"class":96},[79,106778,106779],{"class":81,"line":457},[79,106780,1892],{"class":239},[14,106782,422],{"id":421},[51,106784,106786],{"className":230,"code":106785,"language":232,"meta":57,"style":57},"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",[59,106787,106788,106794,106804,106808,106812,106820,106825,106829,106833,106837,106842,106846,106851,106856,106861,106865,106869,106873,106877,106881,106885,106904,106911,106923,106934,106950,106966,106970,106974,106986,106998,107006,107010,107021,107025,107041,107045,107049,107058,107062,107067,107076,107080,107093,107098,107107,107111,107115,107127],{"__ignoreMap":57},[79,106789,106790,106792],{"class":81,"line":82},[79,106791,432],{"class":243},[79,106793,435],{"class":239},[79,106795,106796,106798,106800,106802],{"class":81,"line":167},[79,106797,432],{"class":243},[79,106799,442],{"class":239},[79,106801,445],{"class":243},[79,106803,448],{"class":239},[79,106805,106806],{"class":81,"line":178},[79,106807,454],{"emptyLinePlaceholder":453},[79,106809,106810],{"class":81,"line":457},[79,106811,454],{"emptyLinePlaceholder":453},[79,106813,106814,106816,106818],{"class":81,"line":462},[79,106815,465],{"class":96},[79,106817,468],{"class":243},[79,106819,471],{"class":89},[79,106821,106822],{"class":81,"line":474},[79,106823,106824],{"class":89},"\u003Cmujoco model=\"state_api\">\n",[79,106826,106827],{"class":81,"line":480},[79,106828,103401],{"class":89},[79,106830,106831],{"class":81,"line":486},[79,106832,454],{"emptyLinePlaceholder":453},[79,106834,106835],{"class":81,"line":491},[79,106836,494],{"class":89},[79,106838,106839],{"class":81,"line":497},[79,106840,106841],{"class":89},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[79,106843,106844],{"class":81,"line":503},[79,106845,454],{"emptyLinePlaceholder":453},[79,106847,106848],{"class":81,"line":509},[79,106849,106850],{"class":89},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[79,106852,106853],{"class":81,"line":514},[79,106854,106855],{"class":89},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[79,106857,106858],{"class":81,"line":520},[79,106859,106860],{"class":89},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[79,106862,106863],{"class":81,"line":526},[79,106864,570],{"class":89},[79,106866,106867],{"class":81,"line":532},[79,106868,576],{"class":89},[79,106870,106871],{"class":81,"line":537},[79,106872,611],{"class":89},[79,106874,106875],{"class":81,"line":543},[79,106876,617],{"class":89},[79,106878,106879],{"class":81,"line":549},[79,106880,454],{"emptyLinePlaceholder":453},[79,106882,106883],{"class":81,"line":555},[79,106884,454],{"emptyLinePlaceholder":453},[79,106886,106887,106889,106892,106895,106897,106900,106902],{"class":81,"line":561},[79,106888,633],{"class":243},[79,106890,106891],{"class":85}," print_state",[79,106893,106894],{"class":239},"(prefix: ",[79,106896,642],{"class":96},[79,106898,106899],{"class":239},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[79,106901,899],{"class":96},[79,106903,673],{"class":239},[79,106905,106906,106908],{"class":81,"line":567},[79,106907,1254],{"class":96},[79,106909,106910],{"class":239},"(prefix)\n",[79,106912,106913,106915,106917,106920],{"class":81,"line":573},[79,106914,1254],{"class":96},[79,106916,685],{"class":239},[79,106918,106919],{"class":89},"\"  timestep:\"",[79,106921,106922],{"class":239},", model.opt.timestep)\n",[79,106924,106925,106927,106929,106932],{"class":81,"line":579},[79,106926,1254],{"class":96},[79,106928,685],{"class":239},[79,106930,106931],{"class":89},"\"  time:\"",[79,106933,103541],{"class":239},[79,106935,106936,106938,106940,106943,106946,106948],{"class":81,"line":584},[79,106937,1254],{"class":96},[79,106939,685],{"class":239},[79,106941,106942],{"class":89},"\"  qpos:\"",[79,106944,106945],{"class":239},", np.round(data.qpos.copy(), ",[79,106947,2668],{"class":96},[79,106949,1191],{"class":239},[79,106951,106952,106954,106956,106959,106962,106964],{"class":81,"line":590},[79,106953,1254],{"class":96},[79,106955,685],{"class":239},[79,106957,106958],{"class":89},"\"  qvel:\"",[79,106960,106961],{"class":239},", np.round(data.qvel.copy(), ",[79,106963,2668],{"class":96},[79,106965,1191],{"class":239},[79,106967,106968],{"class":81,"line":596},[79,106969,454],{"emptyLinePlaceholder":453},[79,106971,106972],{"class":81,"line":602},[79,106973,454],{"emptyLinePlaceholder":453},[79,106975,106976,106978,106980,106982,106984],{"class":81,"line":608},[79,106977,633],{"class":243},[79,106979,893],{"class":85},[79,106981,896],{"class":239},[79,106983,899],{"class":96},[79,106985,673],{"class":239},[79,106987,106988,106990,106992,106994,106996],{"class":81,"line":614},[79,106989,907],{"class":239},[79,106991,244],{"class":243},[79,106993,912],{"class":239},[79,106995,465],{"class":96},[79,106997,253],{"class":239},[79,106999,107000,107002,107004],{"class":81,"line":620},[79,107001,922],{"class":239},[79,107003,244],{"class":243},[79,107005,927],{"class":239},[79,107007,107008],{"class":81,"line":625},[79,107009,454],{"emptyLinePlaceholder":453},[79,107011,107012,107015,107018],{"class":81,"line":630},[79,107013,107014],{"class":239},"    print_state(",[79,107016,107017],{"class":89},"\"initial\"",[79,107019,107020],{"class":239},", model, data)\n",[79,107022,107023],{"class":81,"line":648},[79,107024,454],{"emptyLinePlaceholder":453},[79,107026,107027,107029,107031,107033,107035,107037,107039],{"class":81,"line":659},[79,107028,949],{"class":243},[79,107030,103564],{"class":239},[79,107032,955],{"class":243},[79,107034,958],{"class":96},[79,107036,685],{"class":239},[79,107038,3029],{"class":96},[79,107040,966],{"class":239},[79,107042,107043],{"class":81,"line":676},[79,107044,1109],{"class":239},[79,107046,107047],{"class":81,"line":708},[79,107048,454],{"emptyLinePlaceholder":453},[79,107050,107051,107053,107056],{"class":81,"line":717},[79,107052,107014],{"class":239},[79,107054,107055],{"class":89},"\"after 50 steps\"",[79,107057,107020],{"class":239},[79,107059,107060],{"class":81,"line":722},[79,107061,454],{"emptyLinePlaceholder":453},[79,107063,107064],{"class":81,"line":727},[79,107065,107066],{"class":239},"    mujoco.mj_resetData(model, data)\n",[79,107068,107069,107071,107074],{"class":81,"line":738},[79,107070,107014],{"class":239},[79,107072,107073],{"class":89},"\"after reset\"",[79,107075,107020],{"class":239},[79,107077,107078],{"class":81,"line":753},[79,107079,454],{"emptyLinePlaceholder":453},[79,107081,107082,107085,107087,107089,107091],{"class":81,"line":768},[79,107083,107084],{"class":239},"    data.qpos[",[79,107086,1049],{"class":96},[79,107088,1033],{"class":239},[79,107090,244],{"class":243},[79,107092,106724],{"class":96},[79,107094,107095],{"class":81,"line":776},[79,107096,107097],{"class":239},"    mujoco.mj_forward(model, data)\n",[79,107099,107100,107102,107105],{"class":81,"line":781},[79,107101,107014],{"class":239},[79,107103,107104],{"class":89},"\"after manual qpos edit\"",[79,107106,107020],{"class":239},[79,107108,107109],{"class":81,"line":786},[79,107110,454],{"emptyLinePlaceholder":453},[79,107112,107113],{"class":81,"line":802},[79,107114,454],{"emptyLinePlaceholder":453},[79,107116,107117,107119,107121,107123,107125],{"class":81,"line":815},[79,107118,1329],{"class":243},[79,107120,1332],{"class":96},[79,107122,1143],{"class":243},[79,107124,1337],{"class":89},[79,107126,673],{"class":239},[79,107128,107129],{"class":81,"line":828},[79,107130,1345],{"class":239},[19,107132,1348],{},[51,107134,107136],{"className":73,"code":107135,"language":75,"meta":57,"style":57},"touch ch3_python_state.py\n",[59,107137,107138],{"__ignoreMap":57},[79,107139,107140,107142],{"class":81,"line":82},[79,107141,1358],{"class":85},[79,107143,107144],{"class":89}," ch3_python_state.py\n",[19,107146,104356],{},[51,107148,107150],{"className":73,"code":107149,"language":75,"meta":57,"style":57},"python ch3_python_state.py\n",[59,107151,107152],{"__ignoreMap":57},[79,107153,107154,107156],{"class":81,"line":82},[79,107155,232],{"class":85},[79,107157,107144],{"class":89},[265,107159,1378],{"id":1378},[19,107161,107162],{},"打印状态的函数：",[51,107164,107166],{"className":230,"code":107165,"language":232,"meta":57,"style":57},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[59,107167,107168],{"__ignoreMap":57},[79,107169,107170,107172,107174,107176,107178,107180,107182],{"class":81,"line":82},[79,107171,633],{"class":243},[79,107173,106891],{"class":85},[79,107175,106894],{"class":239},[79,107177,642],{"class":96},[79,107179,106899],{"class":239},[79,107181,899],{"class":96},[79,107183,673],{"class":239},[19,107185,107186,107187,107189],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[59,107188,35516],{}," 里发生了什么。",[19,107191,107192],{},"推进 50 步：",[51,107194,107196],{"className":230,"code":107195,"language":232,"meta":57,"style":57},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[59,107197,107198,107214],{"__ignoreMap":57},[79,107199,107200,107202,107204,107206,107208,107210,107212],{"class":81,"line":82},[79,107201,1874],{"class":243},[79,107203,103564],{"class":239},[79,107205,955],{"class":243},[79,107207,958],{"class":96},[79,107209,685],{"class":239},[79,107211,3029],{"class":96},[79,107213,966],{"class":239},[79,107215,107216],{"class":81,"line":167},[79,107217,103757],{"class":239},[19,107219,107220,107221,107224,107225,107227],{},"由于 ",[59,107222,107223],{},"timestep=0.01","，所以 50 步后时间约为 ",[59,107226,37443],{}," 秒。",[19,107229,107230],{},"重置：",[51,107232,107233],{"className":230,"code":106543,"language":232,"meta":57,"style":57},[59,107234,107235],{"__ignoreMap":57},[79,107236,107237],{"class":81,"line":82},[79,107238,106543],{"class":239},[19,107240,107241],{},"这会把时间、位置、速度恢复到初始状态。",[19,107243,107244],{},"手动改高度：",[51,107246,107248],{"className":230,"code":107247,"language":232,"meta":57,"style":57},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[59,107249,107250,107262],{"__ignoreMap":57},[79,107251,107252,107254,107256,107258,107260],{"class":81,"line":82},[79,107253,106715],{"class":239},[79,107255,1049],{"class":96},[79,107257,1033],{"class":239},[79,107259,244],{"class":243},[79,107261,106724],{"class":96},[79,107263,107264],{"class":81,"line":167},[79,107265,1892],{"class":239},[19,107267,107268,107269,107272,107273,107275],{},"这个例子里 ",[59,107270,107271],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[59,107274,1041],{}," 表示把小球放到更高的位置。",[265,107277,1576],{"id":1576},[51,107279,107280],{"className":230,"code":107165,"language":232,"meta":57,"style":57},[59,107281,107282],{"__ignoreMap":57},[79,107283,107284,107286,107288,107290,107292,107294,107296],{"class":81,"line":82},[79,107285,633],{"class":243},[79,107287,106891],{"class":85},[79,107289,106894],{"class":239},[79,107291,642],{"class":96},[79,107293,106899],{"class":239},[79,107295,899],{"class":96},[79,107297,673],{"class":239},[19,107299,107300],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[26,107302,107303,107312,107317],{},[29,107304,107305,107308,107309,107311],{},[59,107306,107307],{},"prefix","：一段文字，比如 ",[59,107310,107017],{},"，用来说明现在打印的是哪个阶段。",[29,107313,107314,107316],{},[59,107315,104141],{},"：MuJoCo 模型。",[29,107318,107319,107321],{},[59,107320,35516],{},"：MuJoCo 当前状态。",[19,107323,107324,204,107327,107330],{},[59,107325,107326],{},"prefix: str",[59,107328,107329],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[51,107332,107334],{"className":230,"code":107333,"language":232,"meta":57,"style":57},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[59,107335,107336],{"__ignoreMap":57},[79,107337,107338,107340,107342,107344,107346,107348],{"class":81,"line":82},[79,107339,32541],{"class":96},[79,107341,685],{"class":239},[79,107343,106942],{"class":89},[79,107345,106945],{"class":239},[79,107347,2668],{"class":96},[79,107349,1191],{"class":239},[19,107351,107352,107355],{},[59,107353,107354],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[51,107357,107359],{"className":230,"code":107358,"language":232,"meta":57,"style":57},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[59,107360,107361,107373],{"__ignoreMap":57},[79,107362,107363,107365,107367,107369,107371],{"class":81,"line":82},[79,107364,103692],{"class":239},[79,107366,244],{"class":243},[79,107368,912],{"class":239},[79,107370,465],{"class":96},[79,107372,253],{"class":239},[79,107374,107375,107377,107379],{"class":81,"line":167},[79,107376,103716],{"class":239},[79,107378,244],{"class":243},[79,107380,927],{"class":239},[19,107382,107383],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[51,107385,107387],{"className":230,"code":107386,"language":232,"meta":57,"style":57},"print_state(\"initial\", model, data)\n",[59,107388,107389],{"__ignoreMap":57},[79,107390,107391,107394,107396],{"class":81,"line":82},[79,107392,107393],{"class":239},"print_state(",[79,107395,107017],{"class":89},[79,107397,107020],{"class":239},[19,107399,107400,107401,107404],{},"调用刚才定义的 ",[59,107402,107403],{},"print_state"," 函数，打印初始状态。",[51,107406,107407],{"className":230,"code":107195,"language":232,"meta":57,"style":57},[59,107408,107409,107425],{"__ignoreMap":57},[79,107410,107411,107413,107415,107417,107419,107421,107423],{"class":81,"line":82},[79,107412,1874],{"class":243},[79,107414,103564],{"class":239},[79,107416,955],{"class":243},[79,107418,958],{"class":96},[79,107420,685],{"class":239},[79,107422,3029],{"class":96},[79,107424,966],{"class":239},[79,107426,107427],{"class":81,"line":167},[79,107428,103757],{"class":239},[19,107430,107431],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[51,107433,107434],{"className":230,"code":106543,"language":232,"meta":57,"style":57},[59,107435,107436],{"__ignoreMap":57},[79,107437,107438],{"class":81,"line":82},[79,107439,106543],{"class":239},[19,107441,107442,107443,107445,107446,107448],{},"重置 ",[59,107444,35516],{},"。注意它不会重新创建 ",[59,107447,104141],{},"，因为模型结构没有变，只是状态回到初始值。",[51,107450,107451],{"className":230,"code":106708,"language":232,"meta":57,"style":57},[59,107452,107453],{"__ignoreMap":57},[79,107454,107455,107457,107459,107461,107463],{"class":81,"line":82},[79,107456,106715],{"class":239},[79,107458,1049],{"class":96},[79,107460,1033],{"class":239},[79,107462,244],{"class":243},[79,107464,106724],{"class":96},[19,107466,107467,107468,204,107471,204,107474,107476],{},"这行是“手动改状态”。在 freejoint 中，",[59,107469,107470],{},"qpos[0]",[59,107472,107473],{},"qpos[1]",[59,107475,107271],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[51,107478,107479],{"className":230,"code":1892,"language":232,"meta":57,"style":57},[59,107480,107481],{"__ignoreMap":57},[79,107482,107483],{"class":81,"line":82},[79,107484,1892],{"class":239},[19,107486,107487,107488,107490,107491,107493],{},"手动改完 ",[59,107489,203],{}," 后，调用 ",[59,107492,106273],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107495,2042],{"id":2041},[19,107497,107498],{},"你会看到:",[26,107500,107501,107506,107511,107514],{},[29,107502,107503,107504],{},"初始时间为 ",[59,107505,1030],{},[29,107507,107508,107509],{},"50 步后时间约为 ",[59,107510,37443],{},[29,107512,107513],{},"reset 后状态恢复",[29,107515,107516,107517,107520,107521],{},"手动修改 ",[59,107518,107519],{},"data.qpos[2]"," 后，小球高度变为 ",[59,107522,1041],{},[19,107524,107525,107527],{},[59,107526,107271],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107529,107530],{},"输出里可以重点看三件事：",[26,107532,107533,107541,107546],{},[29,107534,107535,107537,107538,107540],{},[59,107536,4602],{}," 是否随着 ",[59,107539,103293],{}," 增加。",[29,107542,107543,107545],{},[59,107544,203],{}," 的 z 坐标是否因为下落而变化。",[29,107547,107548,107550,107551,1604],{},[59,107549,106374],{}," 后时间是否回到 ",[59,107552,1030],{},[14,107554,2073],{"id":2072},[26,107556,107557,107563,107569,107575,107578,107587],{},[29,107558,107559,107560,1604],{},"修改 timestep 为 ",[59,107561,107562],{},"0.005",[29,107564,107565,107566,1604],{},"重新运行，检查 50 步后时间是否约为 ",[59,107567,107568],{},"0.25",[29,107570,107571,107572,1604],{},"修改重力为 ",[59,107573,107574],{},"0 0 -1.0",[29,107576,107577],{},"观察小球下降速度是否变慢。",[29,107579,2100,107580,2104,107583,107586],{},[59,107581,107582],{},"data.qpos[2] = 2.0",[59,107584,107585],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[29,107588,107589,107590,107593],{},"注释掉 ",[59,107591,107592],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107595,2127],{"id":2126},[265,107597,107599,107600,107602],{"id":107598},"修改-dataqpos-后位置没有更新","修改 ",[59,107601,103154],{}," 后位置没有更新",[19,107604,104508],{},[51,107606,107607],{"className":230,"code":1892,"language":232,"meta":57,"style":57},[59,107608,107609],{"__ignoreMap":57},[79,107610,107611],{"class":81,"line":82},[79,107612,1892],{"class":239},[265,107614,107615],{"id":107615},"数组维度看不懂",[19,107617,107618],{},"打印模型维度:",[51,107620,107622],{"className":230,"code":107621,"language":232,"meta":57,"style":57},"print(model.nq, model.nv, model.nu)\n",[59,107623,107624],{"__ignoreMap":57},[79,107625,107626,107628],{"class":81,"line":82},[79,107627,32541],{"class":96},[79,107629,107630],{"class":239},"(model.nq, model.nv, model.nu)\n",[2516,107632,107633,107641],{},[2519,107634,107635],{},[2522,107636,107637,107639],{},[2525,107638,106590],{"align":25876},[2525,107640,102800],{"align":25876},[2563,107642,107643,107653,107663],{},[2522,107644,107645,107650],{},[2568,107646,107647],{"align":25876},[59,107648,107649],{},"nq",[2568,107651,107652],{"align":25876},"位置变量数量",[2522,107654,107655,107660],{},[2568,107656,107657],{"align":25876},[59,107658,107659],{},"nv",[2568,107661,107662],{"align":25876},"速度变量数量",[2522,107664,107665,107669],{},[2568,107666,107667],{"align":25876},[59,107668,104217],{},[2568,107670,107671],{"align":25876},"控制输入数量",[265,107673,107675,107676,107678],{"id":107674},"误以为-qpos-一定等于关节数","误以为 ",[59,107677,203],{}," 一定等于关节数",[19,107680,107681,107682,2113,107684,107686,107687,107689],{},"不是。例如 ",[59,107683,103678],{},[59,107685,203],{}," 是 7 维，但 ",[59,107688,207],{}," 是 6 维。",[265,107691,107693,107694,107696],{"id":107692},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[59,107695,203],{}," 的第几位",[19,107698,107699],{},"初学时可以先打印：",[51,107701,107703],{"className":230,"code":107702,"language":232,"meta":57,"style":57},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[59,107704,107705,107715,107725,107737],{"__ignoreMap":57},[79,107706,107707,107709,107711,107713],{"class":81,"line":82},[79,107708,32541],{"class":96},[79,107710,685],{"class":239},[79,107712,103502],{"class":89},[79,107714,103505],{"class":239},[79,107716,107717,107719,107721,107723],{"class":81,"line":167},[79,107718,32541],{"class":96},[79,107720,685],{"class":239},[79,107722,103514],{"class":89},[79,107724,103517],{"class":239},[79,107726,107727,107729,107731,107734],{"class":81,"line":178},[79,107728,32541],{"class":96},[79,107730,685],{"class":239},[79,107732,107733],{"class":89},"\"qpos:\"",[79,107735,107736],{"class":239},", data.qpos)\n",[79,107738,107739,107741,107743,107746],{"class":81,"line":457},[79,107740,32541],{"class":96},[79,107742,685],{"class":239},[79,107744,107745],{"class":89},"\"qvel:\"",[79,107747,107748],{"class":239},", data.qvel)\n",[19,107750,107751],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[265,107753,107754],{"id":107754},"仿真结果每次都一样",[19,107756,107757,107758,107760],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[59,107759,203],{},"、目标点或控制输入。",[14,107762,2270],{"id":2269},[19,107764,107765,107766,26754],{},"Python 控制 MuJoCo 的核心就是读写 ",[59,107767,35516],{},[26,107769,107770,107778,107783,107788],{},[29,107771,107772,107773,1905,107775,107777],{},"用 ",[59,107774,103154],{},[59,107776,103157],{}," 读取状态。",[29,107779,107772,107780,107782],{},[59,107781,2163],{}," 写入控制。",[29,107784,107772,107785,107787],{},[59,107786,103293],{}," 推进时间。",[29,107789,107790,107791,107793],{},"手动改状态后用 ",[59,107792,106273],{}," 刷新派生量。",[19,107795,107796],{},"理解这一章后，就可以进入关节和 actuator 控制。",[2287,107798,107799],{},"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":57,"searchDepth":167,"depth":167,"links":107801},[107802,107803,107804,107811,107815,107816,107817,107827],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":214,"depth":167,"text":215,"children":107805},[107806,107808,107810],{"id":106571,"depth":178,"text":107807},"qpos、qvel、ctrl 是什么",{"id":106649,"depth":178,"text":107809},"mj_step 和 mj_forward 的区别",{"id":106738,"depth":178,"text":106739},{"id":421,"depth":167,"text":422,"children":107812},[107813,107814],{"id":1378,"depth":178,"text":1378},{"id":1576,"depth":178,"text":1576},{"id":2041,"depth":167,"text":2042},{"id":2072,"depth":167,"text":2073},{"id":2126,"depth":167,"text":2127,"children":107818},[107819,107821,107822,107824,107826],{"id":107598,"depth":178,"text":107820},"修改 data.qpos 后位置没有更新",{"id":107615,"depth":178,"text":107615},{"id":107674,"depth":178,"text":107823},"误以为 qpos 一定等于关节数",{"id":107692,"depth":178,"text":107825},"不知道某个元素在 qpos 的第几位",{"id":107754,"depth":178,"text":107754},{"id":2269,"depth":167,"text":2270},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106341,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107834,"title":107835,"body":107836,"description":57,"extension":2314,"meta":109519,"navigation":453,"path":109520,"seo":109521,"stem":109522,"__hash__":109523},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107837,"toc":109495},[107838,107841,107843,107846,107848,107873,107876,107894,107897,107899,107901,107925,107927,107941,107943,107984,107986,108010,108012,108015,108049,108051,108064,108067,108135,108143,108147,108150,108184,108190,108193,108197,108236,108239,108259,108263,108306,108308,108337,108340,108346,108349,108351,108741,108743,108755,108757,108768,108770,108773,108802,108810,108813,108848,108851,108853,108861,108864,108866,108877,108887,108907,108910,108946,108958,109006,109025,109067,109080,109108,109113,109134,109144,109162,109165,109199,109202,109222,109225,109244,109250,109252,109255,109261,109267,109277,109280,109286,109295,109297,109342,109344,109350,109356,109359,109362,109382,109385,109391,109397,109399,109422,109425,109428,109437,109440,109478,109480,109483,109489,109492],[10,107839,107835],{"id":107840},"_4关节actuator-与力控制",[14,107842,17],{"id":16},[19,107844,107845],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107847,24],{},[26,107849,107850,107856,107861,107865,107870],{},[29,107851,107852,107855],{},[59,107853,107854],{},"hinge"," 关节",[29,107857,107858],{},[59,107859,107860],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[29,107862,107863],{},[59,107864,2163],{},[29,107866,107867],{},[59,107868,107869],{},"ctrlrange",[29,107871,107872],{},"读取关节角和角速度",[19,107874,107875],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[51,107877,107879],{"className":230,"code":107878,"language":232,"meta":57,"style":57},"data.ctrl[0] = ...\n",[59,107880,107881],{"__ignoreMap":57},[79,107882,107883,107885,107887,107889,107891],{"class":81,"line":82},[79,107884,1510],{"class":239},[79,107886,1030],{"class":96},[79,107888,1033],{"class":239},[79,107890,244],{"class":243},[79,107892,107893],{"class":96}," ...\n",[19,107895,107896],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107898,67],{"id":66},[19,107900,70],{},[51,107902,107903],{"className":73,"code":74,"language":75,"meta":57,"style":57},[59,107904,107905],{"__ignoreMap":57},[79,107906,107907,107909,107911,107913,107915,107917,107919,107921,107923],{"class":81,"line":82},[79,107908,86],{"class":85},[79,107910,90],{"class":89},[79,107912,93],{"class":89},[79,107914,97],{"class":96},[79,107916,100],{"class":89},[79,107918,103],{"class":89},[79,107920,106],{"class":89},[79,107922,109],{"class":89},[79,107924,112],{"class":89},[19,107926,115],{},[51,107928,107929],{"className":73,"code":118,"language":75,"meta":57,"style":57},[59,107930,107931],{"__ignoreMap":57},[79,107932,107933,107935,107937,107939],{"class":81,"line":82},[79,107934,125],{"class":85},[79,107936,93],{"class":89},[79,107938,130],{"class":89},[79,107940,133],{"class":89},[19,107942,136],{},[51,107944,107946],{"className":73,"code":107945,"language":75,"meta":57,"style":57},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[59,107947,107948,107965,107974],{"__ignoreMap":57},[79,107949,107950,107952,107954,107956,107959,107961,107963],{"class":81,"line":82},[79,107951,146],{"class":85},[79,107953,149],{"class":89},[79,107955,152],{"class":96},[79,107957,107958],{"class":89}," mujoco-control",[79,107960,158],{"class":89},[79,107962,161],{"class":96},[79,107964,164],{"class":96},[79,107966,107967,107969,107971],{"class":81,"line":167},[79,107968,146],{"class":85},[79,107970,172],{"class":89},[79,107972,107973],{"class":89}," mujoco-control\n",[79,107975,107976,107978,107980,107982],{"class":81,"line":178},[79,107977,125],{"class":85},[79,107979,93],{"class":89},[79,107981,130],{"class":89},[79,107983,133],{"class":89},[19,107985,189],{},[26,107987,107988,107994,108001,108007],{},[29,107989,107990,107993],{},[59,107991,107992],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[29,107995,107996,107998,107999,1604],{},[59,107997,2163],{}," 长度等于 ",[59,108000,2094],{},[29,108002,84329,108003,108006],{},[59,108004,108005],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[29,108008,108009],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,108011,215],{"id":214},[19,108013,108014],{},"关节决定 body 如何运动:",[51,108016,108018],{"className":383,"code":108017,"language":385,"meta":57,"style":57},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[59,108019,108020],{"__ignoreMap":57},[79,108021,108022,108024,108026,108028,108030,108033,108035,108037,108039,108042,108044,108047],{"class":81,"line":82},[79,108023,392],{"class":239},[79,108025,104994],{"class":395},[79,108027,2238],{"class":85},[79,108029,244],{"class":239},[79,108031,108032],{"class":89},"\"hinge\"",[79,108034,55934],{"class":85},[79,108036,244],{"class":239},[79,108038,108032],{"class":89},[79,108040,108041],{"class":85}," axis",[79,108043,244],{"class":239},[79,108045,108046],{"class":89},"\"0 1 0\"",[79,108048,415],{"class":239},[19,108050,105090],{},[26,108052,108053,108058,108061],{},[29,108054,108055,108056],{},"名字是 ",[59,108057,107854],{},[29,108059,108060],{},"类型是旋转关节",[29,108062,108063],{},"绕 y 轴旋转",[19,108065,108066],{},"actuator 决定如何施加控制:",[51,108068,108070],{"className":383,"code":108069,"language":385,"meta":57,"style":57},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[59,108071,108072,108081,108127],{"__ignoreMap":57},[79,108073,108074,108076,108079],{"class":81,"line":82},[79,108075,392],{"class":239},[79,108077,108078],{"class":395},"actuator",[79,108080,53420],{"class":239},[79,108082,108083,108085,108088,108090,108092,108095,108098,108100,108102,108105,108107,108109,108112,108114,108117,108120,108122,108125],{"class":81,"line":167},[79,108084,54257],{"class":239},[79,108086,108087],{"class":395},"motor",[79,108089,2238],{"class":85},[79,108091,244],{"class":239},[79,108093,108094],{"class":89},"\"hinge_motor\"",[79,108096,108097],{"class":85}," joint",[79,108099,244],{"class":239},[79,108101,108032],{"class":89},[79,108103,108104],{"class":85}," gear",[79,108106,244],{"class":239},[79,108108,5881],{"class":89},[79,108110,108111],{"class":85}," ctrlrange",[79,108113,244],{"class":239},[79,108115,108116],{"class":89},"\"-2 2\"",[79,108118,108119],{"class":85}," ctrllimited",[79,108121,244],{"class":239},[79,108123,108124],{"class":89},"\"true\"",[79,108126,415],{"class":239},[79,108128,108129,108131,108133],{"class":81,"line":178},[79,108130,53898],{"class":239},[79,108132,108078],{"class":395},[79,108134,53420],{"class":239},[19,108136,108137,108139,108140,1604],{},[59,108138,2202],{}," 会变成电机输入，控制输入限制在 ",[59,108141,108142],{},"[-2, 2]",[265,108144,108146],{"id":108145},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,108148,108149],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[2516,108151,108152,108162],{},[2519,108153,108154],{},[2522,108155,108156,108158,108160],{},[2525,108157,27888],{"align":25876},[2525,108159,104736],{"align":25876},[2525,108161,102834],{"align":25876},[2563,108163,108164,108174],{},[2522,108165,108166,108168,108171],{},[2568,108167,104994],{"align":25876},[2568,108169,108170],{"align":25876},"定义能怎么动",[2568,108172,108173],{"align":25876},"门轴允许门旋转",[2522,108175,108176,108178,108181],{},[2568,108177,108078],{"align":25876},[2568,108179,108180],{"align":25876},"定义怎么施力或控制",[2568,108182,108183],{"align":25876},"人推门、马达带动门",[19,108185,108186,108187,108189],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[59,108188,2163],{}," 主动控制它。",[19,108191,108192],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[265,108194,108196],{"id":108195},"hinge-joint","hinge joint",[51,108198,108200],{"className":383,"code":108199,"language":385,"meta":57,"style":57},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[59,108201,108202],{"__ignoreMap":57},[79,108203,108204,108206,108208,108210,108212,108214,108216,108218,108220,108222,108224,108226,108229,108231,108234],{"class":81,"line":82},[79,108205,392],{"class":239},[79,108207,104994],{"class":395},[79,108209,2238],{"class":85},[79,108211,244],{"class":239},[79,108213,108032],{"class":89},[79,108215,55934],{"class":85},[79,108217,244],{"class":239},[79,108219,108032],{"class":89},[79,108221,108041],{"class":85},[79,108223,244],{"class":239},[79,108225,108046],{"class":89},[79,108227,108228],{"class":85}," damping",[79,108230,244],{"class":239},[79,108232,108233],{"class":89},"\"0.1\"",[79,108235,415],{"class":239},[19,108237,108238],{},"含义：",[26,108240,108241,108247,108253],{},[29,108242,108243,108246],{},[59,108244,108245],{},"type=\"hinge\"","：只能绕一个轴旋转。",[29,108248,108249,108252],{},[59,108250,108251],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[29,108254,108255,108258],{},[59,108256,108257],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[265,108260,108262],{"id":108261},"motor-actuator","motor actuator",[51,108264,108266],{"className":383,"code":108265,"language":385,"meta":57,"style":57},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[59,108267,108268],{"__ignoreMap":57},[79,108269,108270,108272,108274,108276,108278,108280,108282,108284,108286,108288,108290,108292,108294,108296,108298,108300,108302,108304],{"class":81,"line":82},[79,108271,392],{"class":239},[79,108273,108087],{"class":395},[79,108275,2238],{"class":85},[79,108277,244],{"class":239},[79,108279,108094],{"class":89},[79,108281,108097],{"class":85},[79,108283,244],{"class":239},[79,108285,108032],{"class":89},[79,108287,108104],{"class":85},[79,108289,244],{"class":239},[79,108291,5881],{"class":89},[79,108293,108111],{"class":85},[79,108295,244],{"class":239},[79,108297,108116],{"class":89},[79,108299,108119],{"class":85},[79,108301,244],{"class":239},[79,108303,108124],{"class":89},[79,108305,415],{"class":239},[19,108307,108238],{},[26,108309,108310,108319,108325,108331],{},[29,108311,108312,108315,108316,108318],{},[59,108313,108314],{},"joint=\"hinge\"","：这个电机作用在名为 ",[59,108317,107854],{}," 的关节上。",[29,108320,108321,108324],{},[59,108322,108323],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[29,108326,108327,108330],{},[59,108328,108329],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[29,108332,108333,108336],{},[59,108334,108335],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,108338,108339],{},"简单理解：",[51,108341,108344],{"className":108342,"code":108343,"language":56,"meta":57},[54],"实际施加效果 ≈ data.ctrl[0] * gear\n",[59,108345,108343],{"__ignoreMap":57},[19,108347,108348],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108350,422],{"id":421},[51,108352,108354],{"className":230,"code":108353,"language":232,"meta":57,"style":57},"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",[59,108355,108356,108363,108367,108373,108383,108387,108391,108399,108404,108409,108413,108417,108422,108427,108431,108436,108441,108446,108450,108454,108458,108462,108466,108471,108475,108479,108483,108487,108491,108503,108515,108523,108527,108537,108547,108557,108561,108574,108587,108591,108608,108622,108656,108660,108664,108675,108690,108705,108717,108721,108725,108737],{"__ignoreMap":57},[79,108357,108358,108360],{"class":81,"line":82},[79,108359,432],{"class":243},[79,108361,108362],{"class":239}," math\n",[79,108364,108365],{"class":81,"line":167},[79,108366,454],{"emptyLinePlaceholder":453},[79,108368,108369,108371],{"class":81,"line":178},[79,108370,432],{"class":243},[79,108372,435],{"class":239},[79,108374,108375,108377,108379,108381],{"class":81,"line":457},[79,108376,432],{"class":243},[79,108378,442],{"class":239},[79,108380,445],{"class":243},[79,108382,448],{"class":239},[79,108384,108385],{"class":81,"line":462},[79,108386,454],{"emptyLinePlaceholder":453},[79,108388,108389],{"class":81,"line":474},[79,108390,454],{"emptyLinePlaceholder":453},[79,108392,108393,108395,108397],{"class":81,"line":480},[79,108394,465],{"class":96},[79,108396,468],{"class":243},[79,108398,471],{"class":89},[79,108400,108401],{"class":81,"line":486},[79,108402,108403],{"class":89},"\u003Cmujoco model=\"one_link_motor\">\n",[79,108405,108406],{"class":81,"line":491},[79,108407,108408],{"class":89},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[79,108410,108411],{"class":81,"line":497},[79,108412,454],{"emptyLinePlaceholder":453},[79,108414,108415],{"class":81,"line":503},[79,108416,494],{"class":89},[79,108418,108419],{"class":81,"line":509},[79,108420,108421],{"class":89},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[79,108423,108424],{"class":81,"line":514},[79,108425,108426],{"class":89},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[79,108428,108429],{"class":81,"line":520},[79,108430,454],{"emptyLinePlaceholder":453},[79,108432,108433],{"class":81,"line":526},[79,108434,108435],{"class":89},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[79,108437,108438],{"class":81,"line":532},[79,108439,108440],{"class":89},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[79,108442,108443],{"class":81,"line":537},[79,108444,108445],{"class":89},"        \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",[79,108447,108448],{"class":81,"line":543},[79,108449,564],{"class":89},[79,108451,108452],{"class":81,"line":549},[79,108453,570],{"class":89},[79,108455,108456],{"class":81,"line":555},[79,108457,576],{"class":89},[79,108459,108460],{"class":81,"line":561},[79,108461,454],{"emptyLinePlaceholder":453},[79,108463,108464],{"class":81,"line":567},[79,108465,587],{"class":89},[79,108467,108468],{"class":81,"line":573},[79,108469,108470],{"class":89},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[79,108472,108473],{"class":81,"line":579},[79,108474,605],{"class":89},[79,108476,108477],{"class":81,"line":584},[79,108478,611],{"class":89},[79,108480,108481],{"class":81,"line":590},[79,108482,617],{"class":89},[79,108484,108485],{"class":81,"line":596},[79,108486,454],{"emptyLinePlaceholder":453},[79,108488,108489],{"class":81,"line":602},[79,108490,454],{"emptyLinePlaceholder":453},[79,108492,108493,108495,108497,108499,108501],{"class":81,"line":608},[79,108494,633],{"class":243},[79,108496,893],{"class":85},[79,108498,896],{"class":239},[79,108500,899],{"class":96},[79,108502,673],{"class":239},[79,108504,108505,108507,108509,108511,108513],{"class":81,"line":614},[79,108506,907],{"class":239},[79,108508,244],{"class":243},[79,108510,912],{"class":239},[79,108512,465],{"class":96},[79,108514,253],{"class":239},[79,108516,108517,108519,108521],{"class":81,"line":620},[79,108518,922],{"class":239},[79,108520,244],{"class":243},[79,108522,927],{"class":239},[79,108524,108525],{"class":81,"line":625},[79,108526,454],{"emptyLinePlaceholder":453},[79,108528,108529,108531,108533,108535],{"class":81,"line":630},[79,108530,1254],{"class":96},[79,108532,685],{"class":239},[79,108534,103502],{"class":89},[79,108536,103505],{"class":239},[79,108538,108539,108541,108543,108545],{"class":81,"line":648},[79,108540,1254],{"class":96},[79,108542,685],{"class":239},[79,108544,103514],{"class":89},[79,108546,103517],{"class":239},[79,108548,108549,108551,108553,108555],{"class":81,"line":659},[79,108550,1254],{"class":96},[79,108552,685],{"class":239},[79,108554,103526],{"class":89},[79,108556,103529],{"class":239},[79,108558,108559],{"class":81,"line":676},[79,108560,454],{"emptyLinePlaceholder":453},[79,108562,108563,108565,108568,108570,108572],{"class":81,"line":708},[79,108564,662],{"class":243},[79,108566,108567],{"class":239}," model.nu ",[79,108569,23087],{"class":243},[79,108571,27253],{"class":96},[79,108573,673],{"class":239},[79,108575,108576,108578,108580,108582,108585],{"class":81,"line":717},[79,108577,679],{"class":243},[79,108579,682],{"class":96},[79,108581,685],{"class":239},[79,108583,108584],{"class":89},"\"expected exactly one actuator\"",[79,108586,253],{"class":239},[79,108588,108589],{"class":81,"line":722},[79,108590,454],{"emptyLinePlaceholder":453},[79,108592,108593,108595,108597,108599,108601,108603,108606],{"class":81,"line":727},[79,108594,949],{"class":243},[79,108596,952],{"class":239},[79,108598,955],{"class":243},[79,108600,958],{"class":96},[79,108602,685],{"class":239},[79,108604,108605],{"class":96},"2000",[79,108607,966],{"class":239},[79,108609,108610,108613,108615,108617,108619],{"class":81,"line":738},[79,108611,108612],{"class":239},"        t ",[79,108614,244],{"class":243},[79,108616,952],{"class":239},[79,108618,2829],{"class":243},[79,108620,108621],{"class":239}," model.opt.timestep\n",[79,108623,108624,108626,108628,108630,108632,108635,108637,108640,108642,108644,108647,108649,108651,108653],{"class":81,"line":753},[79,108625,1027],{"class":239},[79,108627,1030],{"class":96},[79,108629,1033],{"class":239},[79,108631,244],{"class":243},[79,108633,108634],{"class":96}," 1.5",[79,108636,853],{"class":243},[79,108638,108639],{"class":239}," math.sin(",[79,108641,1041],{"class":96},[79,108643,853],{"class":243},[79,108645,108646],{"class":239}," math.pi ",[79,108648,2829],{"class":243},[79,108650,63977],{"class":96},[79,108652,853],{"class":243},[79,108654,108655],{"class":239}," t)\n",[79,108657,108658],{"class":81,"line":768},[79,108659,1109],{"class":239},[79,108661,108662],{"class":81,"line":776},[79,108663,454],{"emptyLinePlaceholder":453},[79,108665,108666,108668,108670,108673],{"class":81,"line":781},[79,108667,1254],{"class":96},[79,108669,685],{"class":239},[79,108671,108672],{"class":89},"\"time:\"",[79,108674,103541],{"class":239},[79,108676,108677,108679,108681,108684,108686,108688],{"class":81,"line":786},[79,108678,1254],{"class":96},[79,108680,685],{"class":239},[79,108682,108683],{"class":89},"\"joint qpos:\"",[79,108685,106945],{"class":239},[79,108687,2668],{"class":96},[79,108689,1191],{"class":239},[79,108691,108692,108694,108696,108699,108701,108703],{"class":81,"line":802},[79,108693,1254],{"class":96},[79,108695,685],{"class":239},[79,108697,108698],{"class":89},"\"joint qvel:\"",[79,108700,106961],{"class":239},[79,108702,2668],{"class":96},[79,108704,1191],{"class":239},[79,108706,108707,108709,108711,108714],{"class":81,"line":815},[79,108708,1254],{"class":96},[79,108710,685],{"class":239},[79,108712,108713],{"class":89},"\"last ctrl:\"",[79,108715,108716],{"class":239},", data.ctrl.copy())\n",[79,108718,108719],{"class":81,"line":828},[79,108720,454],{"emptyLinePlaceholder":453},[79,108722,108723],{"class":81,"line":842},[79,108724,454],{"emptyLinePlaceholder":453},[79,108726,108727,108729,108731,108733,108735],{"class":81,"line":859},[79,108728,1329],{"class":243},[79,108730,1332],{"class":96},[79,108732,1143],{"class":243},[79,108734,1337],{"class":89},[79,108736,673],{"class":239},[79,108738,108739],{"class":81,"line":878},[79,108740,1345],{"class":239},[19,108742,1348],{},[51,108744,108746],{"className":73,"code":108745,"language":75,"meta":57,"style":57},"touch ch4_joint_motor.py\n",[59,108747,108748],{"__ignoreMap":57},[79,108749,108750,108752],{"class":81,"line":82},[79,108751,1358],{"class":85},[79,108753,108754],{"class":89}," ch4_joint_motor.py\n",[19,108756,104356],{},[51,108758,108760],{"className":73,"code":108759,"language":75,"meta":57,"style":57},"python ch4_joint_motor.py\n",[59,108761,108762],{"__ignoreMap":57},[79,108763,108764,108766],{"class":81,"line":82},[79,108765,232],{"class":85},[79,108767,108754],{"class":89},[265,108769,1378],{"id":1378},[19,108771,108772],{},"检查 actuator 数量：",[51,108774,108776],{"className":230,"code":108775,"language":232,"meta":57,"style":57},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[59,108777,108778,108790],{"__ignoreMap":57},[79,108779,108780,108782,108784,108786,108788],{"class":81,"line":82},[79,108781,1329],{"class":243},[79,108783,108567],{"class":239},[79,108785,23087],{"class":243},[79,108787,27253],{"class":96},[79,108789,673],{"class":239},[79,108791,108792,108794,108796,108798,108800],{"class":81,"line":167},[79,108793,1642],{"class":243},[79,108795,682],{"class":96},[79,108797,685],{"class":239},[79,108799,108584],{"class":89},[79,108801,253],{"class":239},[19,108803,108804,108806,108807,108809],{},[59,108805,2094],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[59,108808,2163],{}," 长度应该是 1。",[19,108811,108812],{},"产生正弦控制信号：",[51,108814,108816],{"className":230,"code":108815,"language":232,"meta":57,"style":57},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[59,108817,108818],{"__ignoreMap":57},[79,108819,108820,108822,108824,108826,108828,108830,108832,108834,108836,108838,108840,108842,108844,108846],{"class":81,"line":82},[79,108821,1510],{"class":239},[79,108823,1030],{"class":96},[79,108825,1033],{"class":239},[79,108827,244],{"class":243},[79,108829,108634],{"class":96},[79,108831,853],{"class":243},[79,108833,108639],{"class":239},[79,108835,1041],{"class":96},[79,108837,853],{"class":243},[79,108839,108646],{"class":239},[79,108841,2829],{"class":243},[79,108843,63977],{"class":96},[79,108845,853],{"class":243},[79,108847,108655],{"class":239},[19,108849,108850],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108852,103731],{},[51,108854,108855],{"className":230,"code":2008,"language":232,"meta":57,"style":57},[59,108856,108857],{"__ignoreMap":57},[79,108858,108859],{"class":81,"line":82},[79,108860,2008],{"class":239},[19,108862,108863],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[265,108865,1576],{"id":1576},[51,108867,108869],{"className":230,"code":108868,"language":232,"meta":57,"style":57},"import math\n",[59,108870,108871],{"__ignoreMap":57},[79,108872,108873,108875],{"class":81,"line":82},[79,108874,432],{"class":243},[79,108876,108362],{"class":239},[19,108878,108879,108880,1905,108883,108886],{},"导入 Python 标准库里的数学模块。后面要用 ",[59,108881,108882],{},"math.sin",[59,108884,108885],{},"math.pi"," 生成周期变化的控制信号。",[51,108888,108889],{"className":230,"code":105713,"language":232,"meta":57,"style":57},[59,108890,108891,108897],{"__ignoreMap":57},[79,108892,108893,108895],{"class":81,"line":82},[79,108894,432],{"class":243},[79,108896,435],{"class":239},[79,108898,108899,108901,108903,108905],{"class":81,"line":167},[79,108900,432],{"class":243},[79,108902,442],{"class":239},[79,108904,445],{"class":243},[79,108906,448],{"class":239},[19,108908,108909],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[51,108911,108912],{"className":383,"code":108199,"language":385,"meta":57,"style":57},[59,108913,108914],{"__ignoreMap":57},[79,108915,108916,108918,108920,108922,108924,108926,108928,108930,108932,108934,108936,108938,108940,108942,108944],{"class":81,"line":82},[79,108917,392],{"class":239},[79,108919,104994],{"class":395},[79,108921,2238],{"class":85},[79,108923,244],{"class":239},[79,108925,108032],{"class":89},[79,108927,55934],{"class":85},[79,108929,244],{"class":239},[79,108931,108032],{"class":89},[79,108933,108041],{"class":85},[79,108935,244],{"class":239},[79,108937,108046],{"class":89},[79,108939,108228],{"class":85},[79,108941,244],{"class":239},[79,108943,108233],{"class":89},[79,108945,415],{"class":239},[19,108947,108948,108949,108951,108952,108954,108955,108957],{},"这行定义关节。",[59,108950,107854],{}," 表示旋转关节。",[59,108953,108251],{}," 表示绕 y 轴旋转。",[59,108956,108257],{}," 表示有一点阻尼，运动不会完全无损耗。",[51,108959,108961],{"className":383,"code":108960,"language":385,"meta":57,"style":57},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[59,108962,108963],{"__ignoreMap":57},[79,108964,108965,108967,108969,108971,108973,108976,108978,108980,108983,108986,108988,108991,108993,108995,108997,108999,109001,109004],{"class":81,"line":82},[79,108966,392],{"class":239},[79,108968,103202],{"class":395},[79,108970,2238],{"class":85},[79,108972,244],{"class":239},[79,108974,108975],{"class":89},"\"link_geom\"",[79,108977,55934],{"class":85},[79,108979,244],{"class":239},[79,108981,108982],{"class":89},"\"capsule\"",[79,108984,108985],{"class":85}," fromto",[79,108987,244],{"class":239},[79,108989,108990],{"class":89},"\"0 0 0 0 0 0.5\"",[79,108992,103218],{"class":85},[79,108994,244],{"class":239},[79,108996,105804],{"class":89},[79,108998,104057],{"class":85},[79,109000,244],{"class":239},[79,109002,109003],{"class":89},"\"0.5\"",[79,109005,415],{"class":239},[19,109007,109008,109009,109011,109012,109014,109015,109018,109019,1604,109022,109024],{},"这行定义摆杆的形状。",[59,109010,105203],{}," 是胶囊体，适合表示杆子。",[59,109013,105214],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[59,109016,109017],{},"(0,0,0)"," 延伸到 ",[59,109020,109021],{},"(0,0,0.5)",[59,109023,105208],{}," 是半径。",[51,109026,109027],{"className":383,"code":108265,"language":385,"meta":57,"style":57},[59,109028,109029],{"__ignoreMap":57},[79,109030,109031,109033,109035,109037,109039,109041,109043,109045,109047,109049,109051,109053,109055,109057,109059,109061,109063,109065],{"class":81,"line":82},[79,109032,392],{"class":239},[79,109034,108087],{"class":395},[79,109036,2238],{"class":85},[79,109038,244],{"class":239},[79,109040,108094],{"class":89},[79,109042,108097],{"class":85},[79,109044,244],{"class":239},[79,109046,108032],{"class":89},[79,109048,108104],{"class":85},[79,109050,244],{"class":239},[79,109052,5881],{"class":89},[79,109054,108111],{"class":85},[79,109056,244],{"class":239},[79,109058,108116],{"class":89},[79,109060,108119],{"class":85},[79,109062,244],{"class":239},[79,109064,108124],{"class":89},[79,109066,415],{"class":239},[19,109068,109069,109070,109072,109073,109076,109077,109079],{},"这行定义电机。它作用在 ",[59,109071,107854],{}," 关节上。",[59,109074,109075],{},"gear"," 可以理解成放大倍数。",[59,109078,107869],{}," 限制控制输入范围。",[51,109081,109082],{"className":230,"code":108775,"language":232,"meta":57,"style":57},[59,109083,109084,109096],{"__ignoreMap":57},[79,109085,109086,109088,109090,109092,109094],{"class":81,"line":82},[79,109087,1329],{"class":243},[79,109089,108567],{"class":239},[79,109091,23087],{"class":243},[79,109093,27253],{"class":96},[79,109095,673],{"class":239},[79,109097,109098,109100,109102,109104,109106],{"class":81,"line":167},[79,109099,1642],{"class":243},[79,109101,682],{"class":96},[79,109103,685],{"class":239},[79,109105,108584],{"class":89},[79,109107,253],{"class":239},[19,109109,109110,109112],{},[59,109111,2094],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[51,109114,109116],{"className":230,"code":109115,"language":232,"meta":57,"style":57},"for step in range(2000):\n",[59,109117,109118],{"__ignoreMap":57},[79,109119,109120,109122,109124,109126,109128,109130,109132],{"class":81,"line":82},[79,109121,1874],{"class":243},[79,109123,952],{"class":239},[79,109125,955],{"class":243},[79,109127,958],{"class":96},[79,109129,685],{"class":239},[79,109131,108605],{"class":96},[79,109133,966],{"class":239},[19,109135,109136,109137,109139,109140,109143],{},"循环 2000 步。这里没有用 ",[59,109138,3362],{},"，而是用 ",[59,109141,109142],{},"step","，因为后面要用当前步数计算时间。",[51,109145,109147],{"className":230,"code":109146,"language":232,"meta":57,"style":57},"t = step * model.opt.timestep\n",[59,109148,109149],{"__ignoreMap":57},[79,109150,109151,109154,109156,109158,109160],{"class":81,"line":82},[79,109152,109153],{"class":239},"t ",[79,109155,244],{"class":243},[79,109157,952],{"class":239},[79,109159,2829],{"class":243},[79,109161,108621],{"class":239},[19,109163,109164],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[51,109166,109167],{"className":230,"code":108815,"language":232,"meta":57,"style":57},[59,109168,109169],{"__ignoreMap":57},[79,109170,109171,109173,109175,109177,109179,109181,109183,109185,109187,109189,109191,109193,109195,109197],{"class":81,"line":82},[79,109172,1510],{"class":239},[79,109174,1030],{"class":96},[79,109176,1033],{"class":239},[79,109178,244],{"class":243},[79,109180,108634],{"class":96},[79,109182,853],{"class":243},[79,109184,108639],{"class":239},[79,109186,1041],{"class":96},[79,109188,853],{"class":243},[79,109190,108646],{"class":239},[79,109192,2829],{"class":243},[79,109194,63977],{"class":96},[79,109196,853],{"class":243},[79,109198,108655],{"class":239},[19,109200,109201],{},"这行给电机输入一个正弦波。拆开看：",[26,109203,109204,109210,109216],{},[29,109205,109206,109209],{},[59,109207,109208],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[29,109211,109212,109215],{},[59,109213,109214],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[29,109217,109218,109221],{},[59,109219,109220],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,109223,109224],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[51,109226,109228],{"className":230,"code":109227,"language":232,"meta":57,"style":57},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[59,109229,109230],{"__ignoreMap":57},[79,109231,109232,109234,109236,109238,109240,109242],{"class":81,"line":82},[79,109233,32541],{"class":96},[79,109235,685],{"class":239},[79,109237,108683],{"class":89},[79,109239,106945],{"class":239},[79,109241,2668],{"class":96},[79,109243,1191],{"class":239},[19,109245,109246,109247,109249],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[59,109248,103154],{}," 只有一个数。",[14,109251,2042],{"id":2041},[19,109253,109254],{},"输出类似:",[51,109256,109259],{"className":109257,"code":109258,"language":56,"meta":57},[54],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[59,109260,109258],{"__ignoreMap":57},[19,109262,109263,109264,109266],{},"这里 ",[59,109265,2202],{}," 是电机输入。",[19,109268,109269,109272,109273,109276],{},[59,109270,109271],{},"joint qpos"," 是关节角度，单位通常是弧度。",[59,109274,109275],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,109278,109279],{},"角度单位提示：",[51,109281,109284],{"className":109282,"code":109283,"language":56,"meta":57},[54],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[59,109285,109283],{"__ignoreMap":57},[19,109287,109288,109289,109291,109292,109294],{},"如果你看到 ",[59,109290,203],{}," 是 ",[59,109293,37443],{},"，大约就是 28.6 度。",[14,109296,2073],{"id":2072},[26,109298,109299,109306,109309,109315,109318,109326,109334],{},[29,109300,2100,109301,2104,109303,1604],{},[59,109302,108323],{},[59,109304,109305],{},"gear=\"5\"",[29,109307,109308],{},"重新运行，观察关节运动是否更剧烈。",[29,109310,2100,109311,2104,109313,1604],{},[59,109312,107869],{},[59,109314,2107],{},[29,109316,109317],{},"重新运行，观察控制能力是否变弱。",[29,109319,109320,109321,109323,109324,1604],{},"去掉 actuator，确认 ",[59,109322,2094],{}," 变成 ",[59,109325,1030],{},[29,109327,2100,109328,2104,109330,109333],{},[59,109329,108257],{},[59,109331,109332],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[29,109335,2100,109336,2104,109338,109341],{},[59,109337,108251],{},[59,109339,109340],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109343,2127],{"id":2126},[265,109345,109347],{"id":109346},"indexerror-index-0-is-out-of-bounds",[59,109348,109349],{},"IndexError: index 0 is out of bounds",[19,109351,109352,109353,109355],{},"原因是 ",[59,109354,108005],{},"，没有 actuator。",[265,109357,109358],{"id":109358},"关节几乎不动",[19,109360,109361],{},"可能原因:",[26,109363,109364,109369,109373,109379],{},[29,109365,109366,109368],{},[59,109367,109075],{}," 太小",[29,109370,109371,109368],{},[59,109372,107869],{},[29,109374,109375,109378],{},[59,109376,109377],{},"damping"," 太大",[29,109380,109381],{},"重力方向导致运动不明显",[265,109383,109384],{"id":109384},"模型编译失败",[19,109386,109387,109388,109390],{},"检查 actuator 引用的 ",[59,109389,108314],{}," 是否存在，joint 名称是否拼写一致。",[265,109392,109394,109396],{"id":109393},"datactrl0-写了但没有效果",[59,109395,2202],{}," 写了但没有效果",[19,109398,2189],{},[26,109400,109401,109406,109409,109414,109419],{},[29,109402,109403,109405],{},[59,109404,2094],{}," 是否大于 0。",[29,109407,109408],{},"motor 是否引用了正确 joint。",[29,109410,109411,109413],{},[59,109412,109075],{}," 是否太小。",[29,109415,109416,109418],{},[59,109417,107869],{}," 是否把输入限制得太小。",[29,109420,109421],{},"body 是否真的有可动 joint。",[265,109423,109424],{"id":109424},"控制输入超过范围会怎样",[19,109426,109427],{},"如果设置了：",[51,109429,109431],{"className":383,"code":109430,"language":385,"meta":57,"style":57},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[59,109432,109433],{"__ignoreMap":57},[79,109434,109435],{"class":81,"line":82},[79,109436,109430],{"class":239},[19,109438,109439],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[51,109441,109443],{"className":230,"code":109442,"language":232,"meta":57,"style":57},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[59,109444,109445,109465],{"__ignoreMap":57},[79,109446,109447,109450,109452,109455,109457,109459,109461,109463],{"class":81,"line":82},[79,109448,109449],{"class":239},"action ",[79,109451,244],{"class":243},[79,109453,109454],{"class":239}," np.clip(action, ",[79,109456,320],{"class":243},[79,109458,1041],{"class":96},[79,109460,1060],{"class":239},[79,109462,1041],{"class":96},[79,109464,253],{"class":239},[79,109466,109467,109469,109471,109473,109475],{"class":81,"line":167},[79,109468,1510],{"class":239},[79,109470,1030],{"class":96},[79,109472,1033],{"class":239},[79,109474,244],{"class":243},[79,109476,109477],{"class":239}," action\n",[14,109479,2270],{"id":2269},[19,109481,109482],{},"这一章建立了控制任务的基本形式：",[51,109484,109487],{"className":109485,"code":109486,"language":56,"meta":57},[54],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[59,109488,109486],{"__ignoreMap":57},[19,109490,109491],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[2287,109493,109494],{},"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":57,"searchDepth":167,"depth":167,"links":109496},[109497,109498,109499,109504,109508,109509,109510,109518],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":214,"depth":167,"text":215,"children":109500},[109501,109502,109503],{"id":108145,"depth":178,"text":108146},{"id":108195,"depth":178,"text":108196},{"id":108261,"depth":178,"text":108262},{"id":421,"depth":167,"text":422,"children":109505},[109506,109507],{"id":1378,"depth":178,"text":1378},{"id":1576,"depth":178,"text":1576},{"id":2041,"depth":167,"text":2042},{"id":2072,"depth":167,"text":2073},{"id":2126,"depth":167,"text":2127,"children":109511},[109512,109513,109514,109515,109517],{"id":109346,"depth":178,"text":109349},{"id":109358,"depth":178,"text":109358},{"id":109384,"depth":178,"text":109384},{"id":109393,"depth":178,"text":109516},"data.ctrl[0] 写了但没有效果",{"id":109424,"depth":178,"text":109424},{"id":2269,"depth":167,"text":2270},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107835,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109525,"title":109526,"body":109527,"description":57,"extension":2314,"meta":111436,"navigation":453,"path":111437,"seo":111438,"stem":111439,"__hash__":111440},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109528,"toc":111412},[109529,109532,109534,109537,109545,109548,109565,109568,109593,109596,109642,109644,109646,109701,109703,109722,109724,109767,109770,109787,109790,109806,109816,109823,109825,109828,109831,109865,109868,109916,109920,109923,109937,109946,109950,109953,109978,109981,109985,109998,110001,110007,110010,110025,110027,110030,110290,110292,110304,110307,110619,110621,110633,110635,110638,110653,110658,110661,110683,110686,110689,110723,110726,110730,110741,110744,110761,110764,110778,110785,110805,110812,110826,110829,110841,110856,110876,110879,110901,110904,110908,110923,110934,110949,110952,110982,110998,111027,111035,111059,111062,111080,111090,111102,111109,111118,111124,111133,111136,111138,111147,111150,111165,111167,111170,111181,111184,111195,111198,111216,111218,111235,111238,111266,111268,111272,111275,111305,111311,111314,111318,111326,111329,111331,111352,111355,111358,111374,111377,111393,111395,111398,111409],[10,109530,109526],{"id":109531},"_5viewer-可视化与-renderer-离屏渲染",[14,109533,17],{"id":16},[19,109535,109536],{},"本章掌握两类可视化方式:",[26,109538,109539,109542],{},[29,109540,109541],{},"交互式 viewer: 适合人工观察仿真",[29,109543,109544],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,109546,109547],{},"使用官方接口:",[51,109549,109551],{"className":230,"code":109550,"language":232,"meta":57,"style":57},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[59,109552,109553,109560],{"__ignoreMap":57},[79,109554,109555,109557],{"class":81,"line":82},[79,109556,432],{"class":243},[79,109558,109559],{"class":239}," mujoco.viewer\n",[79,109561,109562],{"class":81,"line":167},[79,109563,109564],{"class":239},"mujoco.viewer.launch_passive(model, data)\n",[19,109566,109567],{},"以及:",[51,109569,109571],{"className":230,"code":109570,"language":232,"meta":57,"style":57},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[59,109572,109573,109583],{"__ignoreMap":57},[79,109574,109575,109578,109580],{"class":81,"line":82},[79,109576,109577],{"class":239},"renderer ",[79,109579,244],{"class":243},[79,109581,109582],{"class":239}," mujoco.Renderer(model)\n",[79,109584,109585,109588,109590],{"class":81,"line":167},[79,109586,109587],{"class":239},"image ",[79,109589,244],{"class":243},[79,109591,109592],{"class":239}," renderer.render()\n",[19,109594,109595],{},"新手建议先理解二者区别：",[2516,109597,109598,109614],{},[2519,109599,109600],{},[2522,109601,109602,109605,109608,109611],{},[2525,109603,109604],{"align":25876},"工具",[2525,109606,109607],{"align":25876},"用途",[2525,109609,109610],{"align":25876},"是否打开窗口",[2525,109612,109613],{"align":25876},"常见场景",[2563,109615,109616,109629],{},[2522,109617,109618,109621,109624,109626],{},[2568,109619,109620],{"align":25876},"Viewer",[2568,109622,109623],{"align":25876},"人眼实时观察仿真",[2568,109625,106681],{"align":25876},[2568,109627,109628],{"align":25876},"调试模型、看控制效果",[2522,109630,109631,109634,109637,109639],{},[2568,109632,109633],{"align":25876},"Renderer",[2568,109635,109636],{"align":25876},"生成图像数组",[2568,109638,106694],{"align":25876},[2568,109640,109641],{"align":25876},"保存图片、训练视觉策略、服务器批量采集",[14,109643,67],{"id":66},[19,109645,70],{},[51,109647,109649],{"className":73,"code":109648,"language":75,"meta":57,"style":57},"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",[59,109650,109651,109663,109673,109681,109689],{"__ignoreMap":57},[79,109652,109653,109655,109657,109659,109661],{"class":81,"line":82},[79,109654,86],{"class":85},[79,109656,90],{"class":89},[79,109658,93],{"class":89},[79,109660,97],{"class":96},[79,109662,26814],{"class":96},[79,109664,109665,109667,109669,109671],{"class":81,"line":167},[79,109666,102904],{"class":89},[79,109668,102907],{"class":89},[79,109670,109],{"class":89},[79,109672,26814],{"class":96},[79,109674,109675,109677,109679],{"class":81,"line":178},[79,109676,102916],{"class":89},[79,109678,102919],{"class":89},[79,109680,26814],{"class":96},[79,109682,109683,109685,109687],{"class":81,"line":457},[79,109684,102926],{"class":89},[79,109686,102929],{"class":89},[79,109688,26814],{"class":96},[79,109690,109691,109693,109695,109697,109699],{"class":81,"line":462},[79,109692,102936],{"class":89},[79,109694,102939],{"class":89},[79,109696,102942],{"class":89},[79,109698,102945],{"class":89},[79,109700,104561],{"class":89},[19,109702,115],{},[51,109704,109706],{"className":73,"code":109705,"language":75,"meta":57,"style":57},"pip install \"mujoco>=2.3\" numpy pillow\n",[59,109707,109708],{"__ignoreMap":57},[79,109709,109710,109712,109714,109716,109719],{"class":81,"line":82},[79,109711,125],{"class":85},[79,109713,93],{"class":89},[79,109715,130],{"class":89},[79,109717,109718],{"class":89}," numpy",[79,109720,109721],{"class":89}," pillow\n",[19,109723,136],{},[51,109725,109727],{"className":73,"code":109726,"language":75,"meta":57,"style":57},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[59,109728,109729,109746,109755],{"__ignoreMap":57},[79,109730,109731,109733,109735,109737,109740,109742,109744],{"class":81,"line":82},[79,109732,146],{"class":85},[79,109734,149],{"class":89},[79,109736,152],{"class":96},[79,109738,109739],{"class":89}," mujoco-render",[79,109741,158],{"class":89},[79,109743,161],{"class":96},[79,109745,164],{"class":96},[79,109747,109748,109750,109752],{"class":81,"line":167},[79,109749,146],{"class":85},[79,109751,172],{"class":89},[79,109753,109754],{"class":89}," mujoco-render\n",[79,109756,109757,109759,109761,109763,109765],{"class":81,"line":178},[79,109758,125],{"class":85},[79,109760,93],{"class":89},[79,109762,130],{"class":89},[79,109764,109718],{"class":89},[79,109766,109721],{"class":89},[19,109768,109769],{},"离屏渲染后端:",[51,109771,109773],{"className":73,"code":109772,"language":75,"meta":57,"style":57},"export MUJOCO_GL=egl\n",[59,109774,109775],{"__ignoreMap":57},[79,109776,109777,109779,109782,109784],{"class":81,"line":82},[79,109778,27178],{"class":243},[79,109780,109781],{"class":239}," MUJOCO_GL",[79,109783,244],{"class":243},[79,109785,109786],{"class":239},"egl\n",[19,109788,109789],{},"或:",[51,109791,109793],{"className":73,"code":109792,"language":75,"meta":57,"style":57},"export MUJOCO_GL=osmesa\n",[59,109794,109795],{"__ignoreMap":57},[79,109796,109797,109799,109801,109803],{"class":81,"line":82},[79,109798,27178],{"class":243},[79,109800,109781],{"class":239},[79,109802,244],{"class":243},[79,109804,109805],{"class":239},"osmesa\n",[19,109807,109808,109809,109812,109813,1604],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[59,109810,109811],{},"egl"," 失败，再尝试 ",[59,109814,109815],{},"osmesa",[19,109817,109818,109819,109822],{},"如果你在本机桌面环境运行，通常先不要设置 ",[59,109820,109821],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109824,215],{"id":214},[19,109826,109827],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109829,109830],{},"典型 viewer 流程:",[51,109832,109834],{"className":230,"code":109833,"language":232,"meta":57,"style":57},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[59,109835,109836,109849,109856,109860],{"__ignoreMap":57},[79,109837,109838,109841,109844,109846],{"class":81,"line":82},[79,109839,109840],{"class":243},"with",[79,109842,109843],{"class":239}," mujoco.viewer.launch_passive(model, data) ",[79,109845,445],{"class":243},[79,109847,109848],{"class":239}," viewer:\n",[79,109850,109851,109853],{"class":81,"line":167},[79,109852,4466],{"class":243},[79,109854,109855],{"class":239}," viewer.is_running():\n",[79,109857,109858],{"class":81,"line":178},[79,109859,1109],{"class":239},[79,109861,109862],{"class":81,"line":457},[79,109863,109864],{"class":239},"        viewer.sync()\n",[19,109866,109867],{},"典型 renderer 流程:",[51,109869,109871],{"className":230,"code":109870,"language":232,"meta":57,"style":57},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[59,109872,109873,109899,109903,109908],{"__ignoreMap":57},[79,109874,109875,109877,109879,109882,109884,109886,109888,109890,109892,109894,109897],{"class":81,"line":82},[79,109876,109577],{"class":239},[79,109878,244],{"class":243},[79,109880,109881],{"class":239}," mujoco.Renderer(model, ",[79,109883,27117],{"class":7412},[79,109885,244],{"class":243},[79,109887,44456],{"class":96},[79,109889,1060],{"class":239},[79,109891,27113],{"class":7412},[79,109893,244],{"class":243},[79,109895,109896],{"class":96},"640",[79,109898,253],{"class":239},[79,109900,109901],{"class":81,"line":167},[79,109902,2008],{"class":239},[79,109904,109905],{"class":81,"line":178},[79,109906,109907],{"class":239},"renderer.update_scene(data)\n",[79,109909,109910,109912,109914],{"class":81,"line":457},[79,109911,109587],{"class":239},[79,109913,244],{"class":243},[79,109915,109592],{"class":239},[265,109917,109919],{"id":109918},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109921,109922],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[51,109924,109926],{"className":230,"code":109925,"language":232,"meta":57,"style":57},"mujoco.mj_step(model, data)\nviewer.sync()\n",[59,109927,109928,109932],{"__ignoreMap":57},[79,109929,109930],{"class":81,"line":82},[79,109931,2008],{"class":239},[79,109933,109934],{"class":81,"line":167},[79,109935,109936],{"class":239},"viewer.sync()\n",[19,109938,109939,109941,109942,109945],{},[59,109940,103293],{}," 负责算物理，",[59,109943,109944],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[265,109947,109949],{"id":109948},"为什么要-sleep","为什么要 sleep",[19,109951,109952],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[51,109954,109956],{"className":230,"code":109955,"language":232,"meta":57,"style":57},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[59,109957,109958],{"__ignoreMap":57},[79,109959,109960,109963,109965,109968,109970,109973,109975],{"class":81,"line":82},[79,109961,109962],{"class":239},"sleep_time ",[79,109964,244],{"class":243},[79,109966,109967],{"class":239}," model.opt.timestep ",[79,109969,320],{"class":243},[79,109971,109972],{"class":239}," (time.time() ",[79,109974,320],{"class":243},[79,109976,109977],{"class":239}," step_start)\n",[19,109979,109980],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[265,109982,109984],{"id":109983},"renderer-输出是什么","renderer 输出是什么",[51,109986,109988],{"className":230,"code":109987,"language":232,"meta":57,"style":57},"image = renderer.render()\n",[59,109989,109990],{"__ignoreMap":57},[79,109991,109992,109994,109996],{"class":81,"line":82},[79,109993,109587],{"class":239},[79,109995,244],{"class":243},[79,109997,109592],{"class":239},[19,109999,110000],{},"得到的是 NumPy 数组，形状通常是：",[51,110002,110005],{"className":110003,"code":110004,"language":56,"meta":57},[54],"(height, width, 3)\n",[59,110006,110004],{"__ignoreMap":57},[19,110008,110009],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[51,110011,110013],{"className":230,"code":110012,"language":232,"meta":57,"style":57},"Image.fromarray(image).save(\"render_output.png\")\n",[59,110014,110015],{"__ignoreMap":57},[79,110016,110017,110020,110023],{"class":81,"line":82},[79,110018,110019],{"class":239},"Image.fromarray(image).save(",[79,110021,110022],{"class":89},"\"render_output.png\"",[79,110024,253],{"class":239},[14,110026,422],{"id":421},[19,110028,110029],{},"交互式 Viewer:",[51,110031,110033],{"className":230,"code":110032,"language":232,"meta":57,"style":57},"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",[59,110034,110035,110041,110045,110051,110057,110061,110065,110073,110078,110082,110086,110090,110095,110100,110104,110108,110112,110117,110121,110125,110129,110133,110137,110141,110153,110165,110173,110177,110187,110207,110217,110222,110227,110231,110248,110261,110266,110270,110274,110286],{"__ignoreMap":57},[79,110036,110037,110039],{"class":81,"line":82},[79,110038,432],{"class":243},[79,110040,33947],{"class":239},[79,110042,110043],{"class":81,"line":167},[79,110044,454],{"emptyLinePlaceholder":453},[79,110046,110047,110049],{"class":81,"line":178},[79,110048,432],{"class":243},[79,110050,435],{"class":239},[79,110052,110053,110055],{"class":81,"line":457},[79,110054,432],{"class":243},[79,110056,109559],{"class":239},[79,110058,110059],{"class":81,"line":462},[79,110060,454],{"emptyLinePlaceholder":453},[79,110062,110063],{"class":81,"line":474},[79,110064,454],{"emptyLinePlaceholder":453},[79,110066,110067,110069,110071],{"class":81,"line":480},[79,110068,465],{"class":96},[79,110070,468],{"class":243},[79,110072,471],{"class":89},[79,110074,110075],{"class":81,"line":486},[79,110076,110077],{"class":89},"\u003Cmujoco model=\"viewer_demo\">\n",[79,110079,110080],{"class":81,"line":491},[79,110081,103401],{"class":89},[79,110083,110084],{"class":81,"line":497},[79,110085,454],{"emptyLinePlaceholder":453},[79,110087,110088],{"class":81,"line":503},[79,110089,494],{"class":89},[79,110091,110092],{"class":81,"line":509},[79,110093,110094],{"class":89},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[79,110096,110097],{"class":81,"line":514},[79,110098,110099],{"class":89},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[79,110101,110102],{"class":81,"line":520},[79,110103,454],{"emptyLinePlaceholder":453},[79,110105,110106],{"class":81,"line":526},[79,110107,103423],{"class":89},[79,110109,110110],{"class":81,"line":532},[79,110111,103428],{"class":89},[79,110113,110114],{"class":81,"line":537},[79,110115,110116],{"class":89},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[79,110118,110119],{"class":81,"line":543},[79,110120,570],{"class":89},[79,110122,110123],{"class":81,"line":549},[79,110124,576],{"class":89},[79,110126,110127],{"class":81,"line":555},[79,110128,611],{"class":89},[79,110130,110131],{"class":81,"line":561},[79,110132,617],{"class":89},[79,110134,110135],{"class":81,"line":567},[79,110136,454],{"emptyLinePlaceholder":453},[79,110138,110139],{"class":81,"line":573},[79,110140,454],{"emptyLinePlaceholder":453},[79,110142,110143,110145,110147,110149,110151],{"class":81,"line":579},[79,110144,633],{"class":243},[79,110146,893],{"class":85},[79,110148,896],{"class":239},[79,110150,899],{"class":96},[79,110152,673],{"class":239},[79,110154,110155,110157,110159,110161,110163],{"class":81,"line":584},[79,110156,907],{"class":239},[79,110158,244],{"class":243},[79,110160,912],{"class":239},[79,110162,465],{"class":96},[79,110164,253],{"class":239},[79,110166,110167,110169,110171],{"class":81,"line":590},[79,110168,922],{"class":239},[79,110170,244],{"class":243},[79,110172,927],{"class":239},[79,110174,110175],{"class":81,"line":596},[79,110176,454],{"emptyLinePlaceholder":453},[79,110178,110179,110181,110183,110185],{"class":81,"line":602},[79,110180,36293],{"class":243},[79,110182,109843],{"class":239},[79,110184,445],{"class":243},[79,110186,109848],{"class":239},[79,110188,110189,110192,110195,110197,110200,110202,110205],{"class":81,"line":608},[79,110190,110191],{"class":243},"        while",[79,110193,110194],{"class":239}," viewer.is_running() ",[79,110196,32588],{"class":243},[79,110198,110199],{"class":239}," data.time ",[79,110201,392],{"class":243},[79,110203,110204],{"class":96}," 5.0",[79,110206,673],{"class":239},[79,110208,110209,110212,110214],{"class":81,"line":614},[79,110210,110211],{"class":239},"            step_start ",[79,110213,244],{"class":243},[79,110215,110216],{"class":239}," time.time()\n",[79,110218,110219],{"class":81,"line":620},[79,110220,110221],{"class":239},"            mujoco.mj_step(model, data)\n",[79,110223,110224],{"class":81,"line":625},[79,110225,110226],{"class":239},"            viewer.sync()\n",[79,110228,110229],{"class":81,"line":630},[79,110230,454],{"emptyLinePlaceholder":453},[79,110232,110233,110236,110238,110240,110242,110244,110246],{"class":81,"line":648},[79,110234,110235],{"class":239},"            sleep_time ",[79,110237,244],{"class":243},[79,110239,109967],{"class":239},[79,110241,320],{"class":243},[79,110243,109972],{"class":239},[79,110245,320],{"class":243},[79,110247,109977],{"class":239},[79,110249,110250,110252,110255,110257,110259],{"class":81,"line":659},[79,110251,6841],{"class":243},[79,110253,110254],{"class":239}," sleep_time ",[79,110256,3330],{"class":243},[79,110258,670],{"class":96},[79,110260,673],{"class":239},[79,110262,110263],{"class":81,"line":676},[79,110264,110265],{"class":239},"                time.sleep(sleep_time)\n",[79,110267,110268],{"class":81,"line":708},[79,110269,454],{"emptyLinePlaceholder":453},[79,110271,110272],{"class":81,"line":717},[79,110273,454],{"emptyLinePlaceholder":453},[79,110275,110276,110278,110280,110282,110284],{"class":81,"line":722},[79,110277,1329],{"class":243},[79,110279,1332],{"class":96},[79,110281,1143],{"class":243},[79,110283,1337],{"class":89},[79,110285,673],{"class":239},[79,110287,110288],{"class":81,"line":727},[79,110289,1345],{"class":239},[19,110291,1348],{},[51,110293,110295],{"className":73,"code":110294,"language":75,"meta":57,"style":57},"touch ch5_viewer.py\n",[59,110296,110297],{"__ignoreMap":57},[79,110298,110299,110301],{"class":81,"line":82},[79,110300,1358],{"class":85},[79,110302,110303],{"class":89}," ch5_viewer.py\n",[19,110305,110306],{},"离屏 Renderer 保存图片:",[51,110308,110310],{"className":230,"code":110309,"language":232,"meta":57,"style":57},"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",[59,110311,110312,110324,110328,110334,110344,110348,110352,110360,110365,110369,110373,110377,110381,110386,110390,110394,110398,110402,110406,110410,110414,110418,110422,110426,110430,110442,110454,110462,110487,110491,110507,110511,110515,110530,110539,110543,110557,110562,110567,110571,110583,110595,110599,110603,110615],{"__ignoreMap":57},[79,110313,110314,110316,110319,110321],{"class":81,"line":82},[79,110315,32862],{"class":243},[79,110317,110318],{"class":239}," pathlib ",[79,110320,432],{"class":243},[79,110322,110323],{"class":239}," Path\n",[79,110325,110326],{"class":81,"line":167},[79,110327,454],{"emptyLinePlaceholder":453},[79,110329,110330,110332],{"class":81,"line":178},[79,110331,432],{"class":243},[79,110333,435],{"class":239},[79,110335,110336,110338,110340,110342],{"class":81,"line":457},[79,110337,32862],{"class":243},[79,110339,49377],{"class":96},[79,110341,49380],{"class":243},[79,110343,49383],{"class":239},[79,110345,110346],{"class":81,"line":462},[79,110347,454],{"emptyLinePlaceholder":453},[79,110349,110350],{"class":81,"line":474},[79,110351,454],{"emptyLinePlaceholder":453},[79,110353,110354,110356,110358],{"class":81,"line":480},[79,110355,465],{"class":96},[79,110357,468],{"class":243},[79,110359,471],{"class":89},[79,110361,110362],{"class":81,"line":486},[79,110363,110364],{"class":89},"\u003Cmujoco model=\"renderer_demo\">\n",[79,110366,110367],{"class":81,"line":491},[79,110368,103401],{"class":89},[79,110370,110371],{"class":81,"line":497},[79,110372,454],{"emptyLinePlaceholder":453},[79,110374,110375],{"class":81,"line":503},[79,110376,494],{"class":89},[79,110378,110379],{"class":81,"line":509},[79,110380,110094],{"class":89},[79,110382,110383],{"class":81,"line":514},[79,110384,110385],{"class":89},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[79,110387,110388],{"class":81,"line":520},[79,110389,110099],{"class":89},[79,110391,110392],{"class":81,"line":526},[79,110393,454],{"emptyLinePlaceholder":453},[79,110395,110396],{"class":81,"line":532},[79,110397,103423],{"class":89},[79,110399,110400],{"class":81,"line":537},[79,110401,103428],{"class":89},[79,110403,110404],{"class":81,"line":543},[79,110405,110116],{"class":89},[79,110407,110408],{"class":81,"line":549},[79,110409,570],{"class":89},[79,110411,110412],{"class":81,"line":555},[79,110413,576],{"class":89},[79,110415,110416],{"class":81,"line":561},[79,110417,611],{"class":89},[79,110419,110420],{"class":81,"line":567},[79,110421,617],{"class":89},[79,110423,110424],{"class":81,"line":573},[79,110425,454],{"emptyLinePlaceholder":453},[79,110427,110428],{"class":81,"line":579},[79,110429,454],{"emptyLinePlaceholder":453},[79,110431,110432,110434,110436,110438,110440],{"class":81,"line":584},[79,110433,633],{"class":243},[79,110435,893],{"class":85},[79,110437,896],{"class":239},[79,110439,899],{"class":96},[79,110441,673],{"class":239},[79,110443,110444,110446,110448,110450,110452],{"class":81,"line":590},[79,110445,907],{"class":239},[79,110447,244],{"class":243},[79,110449,912],{"class":239},[79,110451,465],{"class":96},[79,110453,253],{"class":239},[79,110455,110456,110458,110460],{"class":81,"line":596},[79,110457,922],{"class":239},[79,110459,244],{"class":243},[79,110461,927],{"class":239},[79,110463,110464,110467,110469,110471,110473,110475,110477,110479,110481,110483,110485],{"class":81,"line":602},[79,110465,110466],{"class":239},"    renderer ",[79,110468,244],{"class":243},[79,110470,109881],{"class":239},[79,110472,27117],{"class":7412},[79,110474,244],{"class":243},[79,110476,44456],{"class":96},[79,110478,1060],{"class":239},[79,110480,27113],{"class":7412},[79,110482,244],{"class":243},[79,110484,109896],{"class":96},[79,110486,253],{"class":239},[79,110488,110489],{"class":81,"line":608},[79,110490,454],{"emptyLinePlaceholder":453},[79,110492,110493,110495,110497,110499,110501,110503,110505],{"class":81,"line":614},[79,110494,949],{"class":243},[79,110496,103564],{"class":239},[79,110498,955],{"class":243},[79,110500,958],{"class":96},[79,110502,685],{"class":239},[79,110504,2686],{"class":96},[79,110506,966],{"class":239},[79,110508,110509],{"class":81,"line":620},[79,110510,1109],{"class":239},[79,110512,110513],{"class":81,"line":625},[79,110514,454],{"emptyLinePlaceholder":453},[79,110516,110517,110520,110523,110525,110528],{"class":81,"line":630},[79,110518,110519],{"class":239},"    renderer.update_scene(data, ",[79,110521,110522],{"class":7412},"camera",[79,110524,244],{"class":243},[79,110526,110527],{"class":89},"\"fixed_camera\"",[79,110529,253],{"class":239},[79,110531,110532,110535,110537],{"class":81,"line":648},[79,110533,110534],{"class":239},"    image ",[79,110536,244],{"class":243},[79,110538,109592],{"class":239},[79,110540,110541],{"class":81,"line":659},[79,110542,454],{"emptyLinePlaceholder":453},[79,110544,110545,110548,110550,110553,110555],{"class":81,"line":676},[79,110546,110547],{"class":239},"    output_path ",[79,110549,244],{"class":243},[79,110551,110552],{"class":239}," Path(",[79,110554,110022],{"class":89},[79,110556,253],{"class":239},[79,110558,110559],{"class":81,"line":708},[79,110560,110561],{"class":239},"    Image.fromarray(image).save(output_path)\n",[79,110563,110564],{"class":81,"line":717},[79,110565,110566],{"class":239},"    renderer.close()\n",[79,110568,110569],{"class":81,"line":722},[79,110570,454],{"emptyLinePlaceholder":453},[79,110572,110573,110575,110577,110580],{"class":81,"line":727},[79,110574,1254],{"class":96},[79,110576,685],{"class":239},[79,110578,110579],{"class":89},"\"saved:\"",[79,110581,110582],{"class":239},", output_path.resolve())\n",[79,110584,110585,110587,110589,110592],{"class":81,"line":738},[79,110586,1254],{"class":96},[79,110588,685],{"class":239},[79,110590,110591],{"class":89},"\"image shape:\"",[79,110593,110594],{"class":239},", image.shape)\n",[79,110596,110597],{"class":81,"line":753},[79,110598,454],{"emptyLinePlaceholder":453},[79,110600,110601],{"class":81,"line":768},[79,110602,454],{"emptyLinePlaceholder":453},[79,110604,110605,110607,110609,110611,110613],{"class":81,"line":776},[79,110606,1329],{"class":243},[79,110608,1332],{"class":96},[79,110610,1143],{"class":243},[79,110612,1337],{"class":89},[79,110614,673],{"class":239},[79,110616,110617],{"class":81,"line":781},[79,110618,1345],{"class":239},[19,110620,1348],{},[51,110622,110624],{"className":73,"code":110623,"language":75,"meta":57,"style":57},"touch ch5_renderer.py\n",[59,110625,110626],{"__ignoreMap":57},[79,110627,110628,110630],{"class":81,"line":82},[79,110629,1358],{"class":85},[79,110631,110632],{"class":89}," ch5_renderer.py\n",[265,110634,1378],{"id":1378},[19,110636,110637],{},"viewer 上下文：",[51,110639,110641],{"className":230,"code":110640,"language":232,"meta":57,"style":57},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[59,110642,110643],{"__ignoreMap":57},[79,110644,110645,110647,110649,110651],{"class":81,"line":82},[79,110646,109840],{"class":243},[79,110648,109843],{"class":239},[79,110650,445],{"class":243},[79,110652,109848],{"class":239},[19,110654,110655,110657],{},[59,110656,109840],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,110659,110660],{},"窗口循环：",[51,110662,110664],{"className":230,"code":110663,"language":232,"meta":57,"style":57},"while viewer.is_running() and data.time \u003C 5.0:\n",[59,110665,110666],{"__ignoreMap":57},[79,110667,110668,110671,110673,110675,110677,110679,110681],{"class":81,"line":82},[79,110669,110670],{"class":243},"while",[79,110672,110194],{"class":239},[79,110674,32588],{"class":243},[79,110676,110199],{"class":239},[79,110678,392],{"class":243},[79,110680,110204],{"class":96},[79,110682,673],{"class":239},[19,110684,110685],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110687,110688],{},"固定相机：",[51,110690,110692],{"className":383,"code":110691,"language":385,"meta":57,"style":57},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[59,110693,110694],{"__ignoreMap":57},[79,110695,110696,110698,110700,110702,110704,110706,110708,110710,110713,110716,110718,110721],{"class":81,"line":82},[79,110697,392],{"class":239},[79,110699,110522],{"class":395},[79,110701,2238],{"class":85},[79,110703,244],{"class":239},[79,110705,110527],{"class":89},[79,110707,2245],{"class":85},[79,110709,244],{"class":239},[79,110711,110712],{"class":89},"\"1.5 -2.0 1.2\"",[79,110714,110715],{"class":85}," xyaxes",[79,110717,244],{"class":239},[79,110719,110720],{"class":89},"\"1 0.75 0 0 0 1\"",[79,110722,415],{"class":239},[19,110724,110725],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[265,110727,110729],{"id":110728},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[51,110731,110733],{"className":230,"code":110732,"language":232,"meta":57,"style":57},"import time\n",[59,110734,110735],{"__ignoreMap":57},[79,110736,110737,110739],{"class":81,"line":82},[79,110738,432],{"class":243},[79,110740,33947],{"class":239},[19,110742,110743],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[51,110745,110747],{"className":230,"code":110746,"language":232,"meta":57,"style":57},"import mujoco\nimport mujoco.viewer\n",[59,110748,110749,110755],{"__ignoreMap":57},[79,110750,110751,110753],{"class":81,"line":82},[79,110752,432],{"class":243},[79,110754,435],{"class":239},[79,110756,110757,110759],{"class":81,"line":167},[79,110758,432],{"class":243},[79,110760,109559],{"class":239},[19,110762,110763],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[51,110765,110766],{"className":230,"code":110640,"language":232,"meta":57,"style":57},[59,110767,110768],{"__ignoreMap":57},[79,110769,110770,110772,110774,110776],{"class":81,"line":82},[79,110771,109840],{"class":243},[79,110773,109843],{"class":239},[79,110775,445],{"class":243},[79,110777,109848],{"class":239},[19,110779,110780,110781,110784],{},"打开一个 viewer 窗口。",[59,110782,110783],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[51,110786,110787],{"className":230,"code":110663,"language":232,"meta":57,"style":57},[59,110788,110789],{"__ignoreMap":57},[79,110790,110791,110793,110795,110797,110799,110801,110803],{"class":81,"line":82},[79,110792,110670],{"class":243},[79,110794,110194],{"class":239},[79,110796,32588],{"class":243},[79,110798,110199],{"class":239},[79,110800,392],{"class":243},[79,110802,110204],{"class":96},[79,110804,673],{"class":239},[19,110806,110807,110808,110811],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[59,110809,110810],{},"viewer.is_running()"," 会变成 false，循环结束。",[51,110813,110815],{"className":230,"code":110814,"language":232,"meta":57,"style":57},"step_start = time.time()\n",[59,110816,110817],{"__ignoreMap":57},[79,110818,110819,110822,110824],{"class":81,"line":82},[79,110820,110821],{"class":239},"step_start ",[79,110823,244],{"class":243},[79,110825,110216],{"class":239},[19,110827,110828],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[51,110830,110831],{"className":230,"code":109925,"language":232,"meta":57,"style":57},[59,110832,110833,110837],{"__ignoreMap":57},[79,110834,110835],{"class":81,"line":82},[79,110836,2008],{"class":239},[79,110838,110839],{"class":81,"line":167},[79,110840,109936],{"class":239},[19,110842,110843,110845,110846,110848,110849,110851,110852,110855],{},[59,110844,103293],{}," 推进物理仿真。",[59,110847,109944],{}," 把最新的 ",[59,110850,35516],{}," 同步到窗口里显示。没有 ",[59,110853,110854],{},"sync()","，窗口可能看不到最新状态。",[51,110857,110858],{"className":230,"code":109955,"language":232,"meta":57,"style":57},[59,110859,110860],{"__ignoreMap":57},[79,110861,110862,110864,110866,110868,110870,110872,110874],{"class":81,"line":82},[79,110863,109962],{"class":239},[79,110865,244],{"class":243},[79,110867,109967],{"class":239},[79,110869,320],{"class":243},[79,110871,109972],{"class":239},[79,110873,320],{"class":243},[79,110875,109977],{"class":239},[19,110877,110878],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[51,110880,110882],{"className":230,"code":110881,"language":232,"meta":57,"style":57},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[59,110883,110884,110896],{"__ignoreMap":57},[79,110885,110886,110888,110890,110892,110894],{"class":81,"line":82},[79,110887,1329],{"class":243},[79,110889,110254],{"class":239},[79,110891,3330],{"class":243},[79,110893,670],{"class":96},[79,110895,673],{"class":239},[79,110897,110898],{"class":81,"line":167},[79,110899,110900],{"class":239},"    time.sleep(sleep_time)\n",[19,110902,110903],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[265,110905,110907],{"id":110906},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[51,110909,110911],{"className":230,"code":110910,"language":232,"meta":57,"style":57},"from pathlib import Path\n",[59,110912,110913],{"__ignoreMap":57},[79,110914,110915,110917,110919,110921],{"class":81,"line":82},[79,110916,32862],{"class":243},[79,110918,110318],{"class":239},[79,110920,432],{"class":243},[79,110922,110323],{"class":239},[19,110924,110925,110926,110929,110930,110933],{},"导入 ",[59,110927,110928],{},"Path","，用来处理文件路径。相比直接写字符串，",[59,110931,110932],{},"Path(\"render_output.png\")"," 更清晰。",[51,110935,110937],{"className":230,"code":110936,"language":232,"meta":57,"style":57},"from PIL import Image\n",[59,110938,110939],{"__ignoreMap":57},[79,110940,110941,110943,110945,110947],{"class":81,"line":82},[79,110942,32862],{"class":243},[79,110944,49377],{"class":96},[79,110946,49380],{"class":243},[79,110948,49383],{"class":239},[19,110950,110951],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[51,110953,110954],{"className":383,"code":110691,"language":385,"meta":57,"style":57},[59,110955,110956],{"__ignoreMap":57},[79,110957,110958,110960,110962,110964,110966,110968,110970,110972,110974,110976,110978,110980],{"class":81,"line":82},[79,110959,392],{"class":239},[79,110961,110522],{"class":395},[79,110963,2238],{"class":85},[79,110965,244],{"class":239},[79,110967,110527],{"class":89},[79,110969,2245],{"class":85},[79,110971,244],{"class":239},[79,110973,110712],{"class":89},[79,110975,110715],{"class":85},[79,110977,244],{"class":239},[79,110979,110720],{"class":89},[79,110981,415],{"class":239},[19,110983,110984,110985,110987,110988,110990,110991,110994,110995,110997],{},"定义一个相机。",[59,110986,697],{}," 是相机名字。",[59,110989,2116],{}," 是相机在世界里的位置。",[59,110992,110993],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[59,110996,2116],{}," 来调视角。",[51,110999,111001],{"className":230,"code":111000,"language":232,"meta":57,"style":57},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[59,111002,111003],{"__ignoreMap":57},[79,111004,111005,111007,111009,111011,111013,111015,111017,111019,111021,111023,111025],{"class":81,"line":82},[79,111006,109577],{"class":239},[79,111008,244],{"class":243},[79,111010,109881],{"class":239},[79,111012,27117],{"class":7412},[79,111014,244],{"class":243},[79,111016,44456],{"class":96},[79,111018,1060],{"class":239},[79,111020,27113],{"class":7412},[79,111022,244],{"class":243},[79,111024,109896],{"class":96},[79,111026,253],{"class":239},[19,111028,111029,111030,1905,111032,111034],{},"创建离屏渲染器。",[59,111031,27117],{},[59,111033,27113],{}," 决定输出图片大小。",[51,111036,111037],{"className":230,"code":103734,"language":232,"meta":57,"style":57},[59,111038,111039,111055],{"__ignoreMap":57},[79,111040,111041,111043,111045,111047,111049,111051,111053],{"class":81,"line":82},[79,111042,1874],{"class":243},[79,111044,103564],{"class":239},[79,111046,955],{"class":243},[79,111048,958],{"class":96},[79,111050,685],{"class":239},[79,111052,2686],{"class":96},[79,111054,966],{"class":239},[79,111056,111057],{"class":81,"line":167},[79,111058,103757],{"class":239},[19,111060,111061],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[51,111063,111065],{"className":230,"code":111064,"language":232,"meta":57,"style":57},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[59,111066,111067],{"__ignoreMap":57},[79,111068,111069,111072,111074,111076,111078],{"class":81,"line":82},[79,111070,111071],{"class":239},"renderer.update_scene(data, ",[79,111073,110522],{"class":7412},[79,111075,244],{"class":243},[79,111077,110527],{"class":89},[79,111079,253],{"class":239},[19,111081,111082,111083,111085,111086,111089],{},"告诉 renderer：用当前 ",[59,111084,35516],{}," 的状态更新画面，并使用名为 ",[59,111087,111088],{},"fixed_camera"," 的相机视角。",[51,111091,111092],{"className":230,"code":109987,"language":232,"meta":57,"style":57},[59,111093,111094],{"__ignoreMap":57},[79,111095,111096,111098,111100],{"class":81,"line":82},[79,111097,109587],{"class":239},[79,111099,244],{"class":243},[79,111101,109592],{"class":239},[19,111103,111104,111105,111108],{},"真正渲染出图像。",[59,111106,111107],{},"image"," 是一个 NumPy 数组，不是文件。",[51,111110,111112],{"className":230,"code":111111,"language":232,"meta":57,"style":57},"Image.fromarray(image).save(output_path)\n",[59,111113,111114],{"__ignoreMap":57},[79,111115,111116],{"class":81,"line":82},[79,111117,111111],{"class":239},[19,111119,111120,111121,1604],{},"把数组转换成图片，并保存到 ",[59,111122,111123],{},"render_output.png",[51,111125,111127],{"className":230,"code":111126,"language":232,"meta":57,"style":57},"renderer.close()\n",[59,111128,111129],{"__ignoreMap":57},[79,111130,111131],{"class":81,"line":82},[79,111132,111126],{"class":239},[19,111134,111135],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,111137,2042],{"id":2041},[19,111139,111140,111141,111143,111144,1604],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[59,111142,111123],{},"，并输出图像数组形状，例如 ",[59,111145,111146],{},"(480, 640, 3)",[19,111148,111149],{},"如果图片里看不到方块，先检查：",[26,111151,111152,111155,111158],{},[29,111153,111154],{},"方块是否掉到相机视野外。",[29,111156,111157],{},"camera 位置是否合理。",[29,111159,111160,111161,111164],{},"是否在 ",[59,111162,111163],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,111166,2073],{"id":2072},[19,111168,111169],{},"运行 viewer:",[51,111171,111173],{"className":73,"code":111172,"language":75,"meta":57,"style":57},"python ch5_viewer.py\n",[59,111174,111175],{"__ignoreMap":57},[79,111176,111177,111179],{"class":81,"line":82},[79,111178,232],{"class":85},[79,111180,110303],{"class":89},[19,111182,111183],{},"运行 renderer:",[51,111185,111187],{"className":73,"code":111186,"language":75,"meta":57,"style":57},"python ch5_renderer.py\n",[59,111188,111189],{"__ignoreMap":57},[79,111190,111191,111193],{"class":81,"line":82},[79,111192,232],{"class":85},[79,111194,110632],{"class":89},[19,111196,111197],{},"如果在服务器上运行:",[51,111199,111201],{"className":73,"code":111200,"language":75,"meta":57,"style":57},"MUJOCO_GL=egl python ch5_renderer.py\n",[59,111202,111203],{"__ignoreMap":57},[79,111204,111205,111207,111209,111211,111214],{"class":81,"line":82},[79,111206,109821],{"class":239},[79,111208,244],{"class":243},[79,111210,109811],{"class":89},[79,111212,111213],{"class":85}," python",[79,111215,110632],{"class":89},[19,111217,109789],{},[51,111219,111221],{"className":73,"code":111220,"language":75,"meta":57,"style":57},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[59,111222,111223],{"__ignoreMap":57},[79,111224,111225,111227,111229,111231,111233],{"class":81,"line":82},[79,111226,109821],{"class":239},[79,111228,244],{"class":243},[79,111230,109815],{"class":89},[79,111232,111213],{"class":85},[79,111234,110632],{"class":89},[19,111236,111237],{},"再做几个练习：",[26,111239,111240,111247,111250,111256],{},[29,111241,111242,111243,111246],{},"把 renderer 分辨率改成 ",[59,111244,111245],{},"height=240, width=320","，观察输出 shape。",[29,111248,111249],{},"把方块颜色改成蓝色，重新保存图片。",[29,111251,111252,111253,111255],{},"把相机 ",[59,111254,2116],{}," 改远一点，观察画面中物体是否变小。",[29,111257,111258,111259,2104,111262,111265],{},"把 viewer 示例中的 ",[59,111260,111261],{},"data.time \u003C 5.0",[59,111263,111264],{},"data.time \u003C 20.0","，观察更长时间。",[14,111267,2127],{"id":2126},[265,111269,111271],{"id":111270},"viewer-窗口打不开","viewer 窗口打不开",[19,111273,111274],{},"安装:",[51,111276,111278],{"className":73,"code":111277,"language":75,"meta":57,"style":57},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[59,111279,111280],{"__ignoreMap":57},[79,111281,111282,111284,111286,111288,111290,111292,111294,111296,111298,111300,111302],{"class":81,"line":82},[79,111283,86],{"class":85},[79,111285,90],{"class":89},[79,111287,93],{"class":89},[79,111289,97],{"class":96},[79,111291,104551],{"class":89},[79,111293,102929],{"class":89},[79,111295,104556],{"class":89},[79,111297,102942],{"class":89},[79,111299,102948],{"class":89},[79,111301,102939],{"class":89},[79,111303,111304],{"class":89}," libXinerama\n",[265,111306,111308],{"id":111307},"glfwerror",[59,111309,111310],{},"GLFWError",[19,111312,111313],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[265,111315,111317],{"id":111316},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,111319,111320,111321,1601,111323,111325],{},"尝试 ",[59,111322,103123],{},[59,111324,103126],{},"。可能存在版本差异。",[265,111327,111328],{"id":111328},"保存图片是黑的",[19,111330,2189],{},[26,111332,111333,111336,111339,111349],{},[29,111334,111335],{},"XML 里是否有 light。",[29,111337,111338],{},"相机是否对着模型。",[29,111340,111341,111342,111345,111346,1604],{},"是否先 ",[59,111343,111344],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[59,111347,111348],{},"renderer.render()",[29,111350,111351],{},"物体是否已经掉出视野。",[265,111353,111354],{"id":111354},"远程服务器没有显示器",[19,111356,111357],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[51,111359,111360],{"className":73,"code":111200,"language":75,"meta":57,"style":57},[59,111361,111362],{"__ignoreMap":57},[79,111363,111364,111366,111368,111370,111372],{"class":81,"line":82},[79,111365,109821],{"class":239},[79,111367,244],{"class":243},[79,111369,109811],{"class":89},[79,111371,111213],{"class":85},[79,111373,110632],{"class":89},[19,111375,111376],{},"如果 EGL 不可用，再尝试：",[51,111378,111379],{"className":73,"code":111220,"language":75,"meta":57,"style":57},[59,111380,111381],{"__ignoreMap":57},[79,111382,111383,111385,111387,111389,111391],{"class":81,"line":82},[79,111384,109821],{"class":239},[79,111386,244],{"class":243},[79,111388,109815],{"class":89},[79,111390,111213],{"class":85},[79,111392,110632],{"class":89},[14,111394,2270],{"id":2269},[19,111396,111397],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[26,111399,111400,111403,111406],{},[29,111401,111402],{},"先用 viewer 看模型和控制是否正常。",[29,111404,111405],{},"再用 renderer 保存图片或构造视觉观测。",[29,111407,111408],{},"最后把状态、动作、图像、奖励组织成训练数据。",[2287,111410,111411],{},"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":57,"searchDepth":167,"depth":167,"links":111413},[111414,111415,111416,111421,111426,111427,111428,111435],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":214,"depth":167,"text":215,"children":111417},[111418,111419,111420],{"id":109918,"depth":178,"text":109919},{"id":109948,"depth":178,"text":109949},{"id":109983,"depth":178,"text":109984},{"id":421,"depth":167,"text":422,"children":111422},[111423,111424,111425],{"id":1378,"depth":178,"text":1378},{"id":110728,"depth":178,"text":110729},{"id":110906,"depth":178,"text":110907},{"id":2041,"depth":167,"text":2042},{"id":2072,"depth":167,"text":2073},{"id":2126,"depth":167,"text":2127,"children":111429},[111430,111431,111432,111433,111434],{"id":111270,"depth":178,"text":111271},{"id":111307,"depth":178,"text":111310},{"id":111316,"depth":178,"text":111317},{"id":111328,"depth":178,"text":111328},{"id":111354,"depth":178,"text":111354},{"id":2269,"depth":167,"text":2270},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109526,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111442,"title":111443,"body":111444,"description":57,"extension":2314,"meta":113338,"navigation":453,"path":113339,"seo":113340,"stem":113341,"__hash__":113342},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111445,"toc":113314},[111446,111449,111451,111454,111456,111475,111478,111484,111487,111489,111491,111515,111517,111531,111533,111574,111576,111587,111589,111592,111598,111601,111635,111638,111670,111673,111705,111709,111712,111752,111755,111761,111764,111770,111774,111777,111783,111786,111790,111792,111831,111833,111846,111849,111851,112427,112429,112441,112443,112454,112456,112458,112477,112489,112492,112513,112516,112519,112562,112565,112568,112588,112594,112596,112614,112629,112632,112638,112641,112647,112664,112671,112702,112713,112747,112758,112775,112784,112792,112797,112809,112812,112833,112839,112852,112857,112887,112897,112922,112930,112953,112956,112972,112975,112983,112989,113010,113023,113044,113053,113092,113103,113105,113108,113114,113117,113120,113126,113129,113149,113152,113154,113191,113193,113196,113204,113207,113210,113237,113240,113250,113256,113259,113265,113267,113273,113277,113280,113282,113285,113309,113312],[10,111447,111443],{"id":111448},"_6控制任务cartpole",[14,111450,17],{"id":16},[19,111452,111453],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111455,24],{},[26,111457,111458,111461,111463,111466,111469,111472],{},[29,111459,111460],{},"slide joint",[29,111462,108196],{},[29,111464,111465],{},"cart force actuator",[29,111467,111468],{},"状态观测",[29,111470,111471],{},"简单控制循环",[29,111473,111474],{},"reward 设计雏形",[19,111476,111477],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[51,111479,111482],{"className":111480,"code":111481,"language":56,"meta":57},[54],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[59,111483,111481],{"__ignoreMap":57},[19,111485,111486],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111488,67],{"id":66},[19,111490,70],{},[51,111492,111493],{"className":73,"code":74,"language":75,"meta":57,"style":57},[59,111494,111495],{"__ignoreMap":57},[79,111496,111497,111499,111501,111503,111505,111507,111509,111511,111513],{"class":81,"line":82},[79,111498,86],{"class":85},[79,111500,90],{"class":89},[79,111502,93],{"class":89},[79,111504,97],{"class":96},[79,111506,100],{"class":89},[79,111508,103],{"class":89},[79,111510,106],{"class":89},[79,111512,109],{"class":89},[79,111514,112],{"class":89},[19,111516,115],{},[51,111518,111519],{"className":73,"code":118,"language":75,"meta":57,"style":57},[59,111520,111521],{"__ignoreMap":57},[79,111522,111523,111525,111527,111529],{"class":81,"line":82},[79,111524,125],{"class":85},[79,111526,93],{"class":89},[79,111528,130],{"class":89},[79,111530,133],{"class":89},[19,111532,136],{},[51,111534,111536],{"className":73,"code":111535,"language":75,"meta":57,"style":57},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[59,111537,111538,111555,111564],{"__ignoreMap":57},[79,111539,111540,111542,111544,111546,111549,111551,111553],{"class":81,"line":82},[79,111541,146],{"class":85},[79,111543,149],{"class":89},[79,111545,152],{"class":96},[79,111547,111548],{"class":89}," mujoco-cartpole",[79,111550,158],{"class":89},[79,111552,161],{"class":96},[79,111554,164],{"class":96},[79,111556,111557,111559,111561],{"class":81,"line":167},[79,111558,146],{"class":85},[79,111560,172],{"class":89},[79,111562,111563],{"class":89}," mujoco-cartpole\n",[79,111565,111566,111568,111570,111572],{"class":81,"line":178},[79,111567,125],{"class":85},[79,111569,93],{"class":89},[79,111571,130],{"class":89},[79,111573,133],{"class":89},[19,111575,189],{},[26,111577,111578,111581,111584],{},[29,111579,111580],{},"本章不依赖 Gymnasium。",[29,111582,111583],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[29,111585,111586],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111588,215],{"id":214},[19,111590,111591],{},"Cartpole 的模型结构:",[51,111593,111596],{"className":111594,"code":111595,"language":56,"meta":57},[54],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[59,111597,111595],{"__ignoreMap":57},[19,111599,111600],{},"小车通过 slide joint 左右移动:",[51,111602,111604],{"className":383,"code":111603,"language":385,"meta":57,"style":57},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[59,111605,111606],{"__ignoreMap":57},[79,111607,111608,111610,111612,111614,111616,111619,111621,111623,111626,111628,111630,111633],{"class":81,"line":82},[79,111609,392],{"class":239},[79,111611,104994],{"class":395},[79,111613,2238],{"class":85},[79,111615,244],{"class":239},[79,111617,111618],{"class":89},"\"cart_x\"",[79,111620,55934],{"class":85},[79,111622,244],{"class":239},[79,111624,111625],{"class":89},"\"slide\"",[79,111627,108041],{"class":85},[79,111629,244],{"class":239},[79,111631,111632],{"class":89},"\"1 0 0\"",[79,111634,415],{"class":239},[19,111636,111637],{},"杆子通过 hinge joint 旋转:",[51,111639,111641],{"className":383,"code":111640,"language":385,"meta":57,"style":57},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[59,111642,111643],{"__ignoreMap":57},[79,111644,111645,111647,111649,111651,111653,111656,111658,111660,111662,111664,111666,111668],{"class":81,"line":82},[79,111646,392],{"class":239},[79,111648,104994],{"class":395},[79,111650,2238],{"class":85},[79,111652,244],{"class":239},[79,111654,111655],{"class":89},"\"pole_hinge\"",[79,111657,55934],{"class":85},[79,111659,244],{"class":239},[79,111661,108032],{"class":89},[79,111663,108041],{"class":85},[79,111665,244],{"class":239},[79,111667,108046],{"class":89},[79,111669,415],{"class":239},[19,111671,111672],{},"控制力作用在小车 slide joint 上:",[51,111674,111676],{"className":383,"code":111675,"language":385,"meta":57,"style":57},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[59,111677,111678],{"__ignoreMap":57},[79,111679,111680,111682,111684,111686,111688,111691,111693,111695,111697,111699,111701,111703],{"class":81,"line":82},[79,111681,392],{"class":239},[79,111683,108087],{"class":395},[79,111685,2238],{"class":85},[79,111687,244],{"class":239},[79,111689,111690],{"class":89},"\"cart_motor\"",[79,111692,108097],{"class":85},[79,111694,244],{"class":239},[79,111696,111618],{"class":89},[79,111698,108104],{"class":85},[79,111700,244],{"class":239},[79,111702,56426],{"class":89},[79,111704,415],{"class":239},[265,111706,111708],{"id":111707},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111710,111711],{},"这个简化模型有两个关节：",[2516,111713,111714,111725],{},[2519,111715,111716],{},[2522,111717,111718,111720,111722],{},[2525,111719,104799],{"align":25876},[2525,111721,25877],{"align":25876},[2525,111723,111724],{"align":25876},"对应状态",[2563,111726,111727,111740],{},[2522,111728,111729,111734,111737],{},[2568,111730,111731],{"align":25876},[59,111732,111733],{},"cart_x",[2568,111735,111736],{"align":25876},"slide",[2568,111738,111739],{"align":25876},"小车 x 位置",[2522,111741,111742,111747,111749],{},[2568,111743,111744],{"align":25876},[59,111745,111746],{},"pole_hinge",[2568,111748,107854],{"align":25876},[2568,111750,111751],{"align":25876},"杆子角度",[19,111753,111754],{},"所以：",[51,111756,111759],{"className":111757,"code":111758,"language":56,"meta":57},[54],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[59,111760,111758],{"__ignoreMap":57},[19,111762,111763],{},"把它们拼起来就是观测：",[51,111765,111768],{"className":111766,"code":111767,"language":56,"meta":57},[54],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[59,111769,111767],{"__ignoreMap":57},[265,111771,111773],{"id":111772},"action-是什么","action 是什么",[19,111775,111776],{},"本章只有一个 actuator：",[51,111778,111781],{"className":111779,"code":111780,"language":56,"meta":57},[54],"data.ctrl[0] = action\n",[59,111782,111780],{"__ignoreMap":57},[19,111784,111785],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[265,111787,111789],{"id":111788},"reward-是什么","reward 是什么",[19,111791,1422],{},[51,111793,111795],{"className":230,"code":111794,"language":232,"meta":57,"style":57},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[59,111796,111797],{"__ignoreMap":57},[79,111798,111799,111801,111803,111805,111807,111809,111812,111814,111817,111819,111821,111823,111826,111828],{"class":81,"line":82},[79,111800,1414],{"class":243},[79,111802,864],{"class":96},[79,111804,685],{"class":239},[79,111806,1057],{"class":96},[79,111808,333],{"class":243},[79,111810,111811],{"class":96}," 0.1",[79,111813,853],{"class":243},[79,111815,111816],{"class":239}," cart_x ",[79,111818,2829],{"class":243},[79,111820,111816],{"class":239},[79,111822,320],{"class":243},[79,111824,111825],{"class":239}," pole_angle ",[79,111827,2829],{"class":243},[79,111829,111830],{"class":239}," pole_angle)\n",[19,111832,108238],{},[26,111834,111835,111840,111843],{},[29,111836,111837,111838,1604],{},"基础奖励是 ",[59,111839,1057],{},[29,111841,111842],{},"小车离中心越远，扣分越多。",[29,111844,111845],{},"杆子角度越大，扣分越多。",[19,111847,111848],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111850,422],{"id":421},[51,111852,111854],{"className":230,"code":111853,"language":232,"meta":57,"style":57},"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",[59,111855,111856,111862,111872,111876,111880,111888,111893,111897,111901,111905,111910,111914,111919,111924,111929,111933,111938,111943,111948,111952,111956,111960,111964,111968,111973,111977,111981,111985,111989,111993,112003,112010,112014,112018,112032,112046,112059,112089,112093,112097,112109,112121,112129,112133,112146,112150,112154,112162,112166,112182,112192,112205,112218,112222,112245,112263,112267,112279,112283,112287,112297,112306,112310,112326,112365,112369,112387,112403,112407,112411,112423],{"__ignoreMap":57},[79,111857,111858,111860],{"class":81,"line":82},[79,111859,432],{"class":243},[79,111861,435],{"class":239},[79,111863,111864,111866,111868,111870],{"class":81,"line":167},[79,111865,432],{"class":243},[79,111867,442],{"class":239},[79,111869,445],{"class":243},[79,111871,448],{"class":239},[79,111873,111874],{"class":81,"line":178},[79,111875,454],{"emptyLinePlaceholder":453},[79,111877,111878],{"class":81,"line":457},[79,111879,454],{"emptyLinePlaceholder":453},[79,111881,111882,111884,111886],{"class":81,"line":462},[79,111883,465],{"class":96},[79,111885,468],{"class":243},[79,111887,471],{"class":89},[79,111889,111890],{"class":81,"line":474},[79,111891,111892],{"class":89},"\u003Cmujoco model=\"cartpole\">\n",[79,111894,111895],{"class":81,"line":480},[79,111896,103401],{"class":89},[79,111898,111899],{"class":81,"line":486},[79,111900,454],{"emptyLinePlaceholder":453},[79,111902,111903],{"class":81,"line":491},[79,111904,494],{"class":89},[79,111906,111907],{"class":81,"line":497},[79,111908,111909],{"class":89},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[79,111911,111912],{"class":81,"line":503},[79,111913,454],{"emptyLinePlaceholder":453},[79,111915,111916],{"class":81,"line":509},[79,111917,111918],{"class":89},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[79,111920,111921],{"class":81,"line":514},[79,111922,111923],{"class":89},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[79,111925,111926],{"class":81,"line":520},[79,111927,111928],{"class":89},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[79,111930,111931],{"class":81,"line":526},[79,111932,454],{"emptyLinePlaceholder":453},[79,111934,111935],{"class":81,"line":532},[79,111936,111937],{"class":89},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[79,111939,111940],{"class":81,"line":537},[79,111941,111942],{"class":89},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[79,111944,111945],{"class":81,"line":543},[79,111946,111947],{"class":89},"        \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",[79,111949,111950],{"class":81,"line":549},[79,111951,564],{"class":89},[79,111953,111954],{"class":81,"line":555},[79,111955,570],{"class":89},[79,111957,111958],{"class":81,"line":561},[79,111959,576],{"class":89},[79,111961,111962],{"class":81,"line":567},[79,111963,454],{"emptyLinePlaceholder":453},[79,111965,111966],{"class":81,"line":573},[79,111967,587],{"class":89},[79,111969,111970],{"class":81,"line":579},[79,111971,111972],{"class":89},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[79,111974,111975],{"class":81,"line":584},[79,111976,605],{"class":89},[79,111978,111979],{"class":81,"line":590},[79,111980,611],{"class":89},[79,111982,111983],{"class":81,"line":596},[79,111984,617],{"class":89},[79,111986,111987],{"class":81,"line":602},[79,111988,454],{"emptyLinePlaceholder":453},[79,111990,111991],{"class":81,"line":608},[79,111992,454],{"emptyLinePlaceholder":453},[79,111994,111995,111997,112000],{"class":81,"line":614},[79,111996,633],{"class":243},[79,111998,111999],{"class":85}," get_observation",[79,112001,112002],{"class":239},"(data: mujoco.MjData) -> np.ndarray:\n",[79,112004,112005,112007],{"class":81,"line":620},[79,112006,711],{"class":243},[79,112008,112009],{"class":239}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[79,112011,112012],{"class":81,"line":625},[79,112013,454],{"emptyLinePlaceholder":453},[79,112015,112016],{"class":81,"line":630},[79,112017,454],{"emptyLinePlaceholder":453},[79,112019,112020,112022,112025,112028,112030],{"class":81,"line":648},[79,112021,633],{"class":243},[79,112023,112024],{"class":85}," compute_reward",[79,112026,112027],{"class":239},"(obs: np.ndarray) -> ",[79,112029,797],{"class":96},[79,112031,673],{"class":239},[79,112033,112034,112037,112039,112042,112044],{"class":81,"line":659},[79,112035,112036],{"class":239},"    cart_x ",[79,112038,244],{"class":243},[79,112040,112041],{"class":239}," obs[",[79,112043,1030],{"class":96},[79,112045,35361],{"class":239},[79,112047,112048,112051,112053,112055,112057],{"class":81,"line":676},[79,112049,112050],{"class":239},"    pole_angle ",[79,112052,244],{"class":243},[79,112054,112041],{"class":239},[79,112056,1072],{"class":96},[79,112058,35361],{"class":239},[79,112060,112061,112063,112065,112067,112069,112071,112073,112075,112077,112079,112081,112083,112085,112087],{"class":81,"line":708},[79,112062,711],{"class":243},[79,112064,864],{"class":96},[79,112066,685],{"class":239},[79,112068,1057],{"class":96},[79,112070,333],{"class":243},[79,112072,111811],{"class":96},[79,112074,853],{"class":243},[79,112076,111816],{"class":239},[79,112078,2829],{"class":243},[79,112080,111816],{"class":239},[79,112082,320],{"class":243},[79,112084,111825],{"class":239},[79,112086,2829],{"class":243},[79,112088,111830],{"class":239},[79,112090,112091],{"class":81,"line":717},[79,112092,454],{"emptyLinePlaceholder":453},[79,112094,112095],{"class":81,"line":722},[79,112096,454],{"emptyLinePlaceholder":453},[79,112098,112099,112101,112103,112105,112107],{"class":81,"line":727},[79,112100,633],{"class":243},[79,112102,893],{"class":85},[79,112104,896],{"class":239},[79,112106,899],{"class":96},[79,112108,673],{"class":239},[79,112110,112111,112113,112115,112117,112119],{"class":81,"line":738},[79,112112,907],{"class":239},[79,112114,244],{"class":243},[79,112116,912],{"class":239},[79,112118,465],{"class":96},[79,112120,253],{"class":239},[79,112122,112123,112125,112127],{"class":81,"line":753},[79,112124,922],{"class":239},[79,112126,244],{"class":243},[79,112128,927],{"class":239},[79,112130,112131],{"class":81,"line":768},[79,112132,454],{"emptyLinePlaceholder":453},[79,112134,112135,112137,112139,112141,112143],{"class":81,"line":776},[79,112136,107084],{"class":239},[79,112138,1072],{"class":96},[79,112140,1033],{"class":239},[79,112142,244],{"class":243},[79,112144,112145],{"class":96}," 0.1\n",[79,112147,112148],{"class":81,"line":781},[79,112149,107097],{"class":239},[79,112151,112152],{"class":81,"line":786},[79,112153,454],{"emptyLinePlaceholder":453},[79,112155,112156,112158,112160],{"class":81,"line":802},[79,112157,933],{"class":239},[79,112159,244],{"class":243},[79,112161,938],{"class":96},[79,112163,112164],{"class":81,"line":815},[79,112165,454],{"emptyLinePlaceholder":453},[79,112167,112168,112170,112172,112174,112176,112178,112180],{"class":81,"line":828},[79,112169,949],{"class":243},[79,112171,952],{"class":239},[79,112173,955],{"class":243},[79,112175,958],{"class":96},[79,112177,685],{"class":239},[79,112179,8605],{"class":96},[79,112181,966],{"class":239},[79,112183,112184,112187,112189],{"class":81,"line":842},[79,112185,112186],{"class":239},"        obs ",[79,112188,244],{"class":243},[79,112190,112191],{"class":239}," get_observation(data)\n",[79,112193,112194,112197,112199,112201,112203],{"class":81,"line":859},[79,112195,112196],{"class":239},"        pole_angle ",[79,112198,244],{"class":243},[79,112200,112041],{"class":239},[79,112202,1072],{"class":96},[79,112204,35361],{"class":239},[79,112206,112207,112210,112212,112214,112216],{"class":81,"line":878},[79,112208,112209],{"class":239},"        pole_angular_velocity ",[79,112211,244],{"class":243},[79,112213,112041],{"class":239},[79,112215,1188],{"class":96},[79,112217,35361],{"class":239},[79,112219,112220],{"class":81,"line":883},[79,112221,454],{"emptyLinePlaceholder":453},[79,112223,112224,112227,112229,112232,112234,112236,112238,112240,112242],{"class":81,"line":888},[79,112225,112226],{"class":239},"        action ",[79,112228,244],{"class":243},[79,112230,112231],{"class":96}," 2.0",[79,112233,853],{"class":243},[79,112235,111825],{"class":239},[79,112237,2855],{"class":243},[79,112239,63977],{"class":96},[79,112241,853],{"class":243},[79,112243,112244],{"class":239}," pole_angular_velocity\n",[79,112246,112247,112249,112251,112253,112255,112257,112259,112261],{"class":81,"line":904},[79,112248,112226],{"class":239},[79,112250,244],{"class":243},[79,112252,109454],{"class":239},[79,112254,320],{"class":243},[79,112256,1057],{"class":96},[79,112258,1060],{"class":239},[79,112260,1057],{"class":96},[79,112262,253],{"class":239},[79,112264,112265],{"class":81,"line":919},[79,112266,454],{"emptyLinePlaceholder":453},[79,112268,112269,112271,112273,112275,112277],{"class":81,"line":930},[79,112270,1027],{"class":239},[79,112272,1030],{"class":96},[79,112274,1033],{"class":239},[79,112276,244],{"class":243},[79,112278,109477],{"class":239},[79,112280,112281],{"class":81,"line":941},[79,112282,1109],{"class":239},[79,112284,112285],{"class":81,"line":946},[79,112286,454],{"emptyLinePlaceholder":453},[79,112288,112289,112292,112294],{"class":81,"line":969},[79,112290,112291],{"class":239},"        reward ",[79,112293,244],{"class":243},[79,112295,112296],{"class":239}," compute_reward(get_observation(data))\n",[79,112298,112299,112301,112303],{"class":81,"line":975},[79,112300,1115],{"class":239},[79,112302,1118],{"class":243},[79,112304,112305],{"class":239}," reward\n",[79,112307,112308],{"class":81,"line":989},[79,112309,454],{"emptyLinePlaceholder":453},[79,112311,112312,112314,112316,112318,112320,112322,112324],{"class":81,"line":1003},[79,112313,1132],{"class":243},[79,112315,952],{"class":239},[79,112317,1137],{"class":243},[79,112319,1140],{"class":96},[79,112321,1143],{"class":243},[79,112323,670],{"class":96},[79,112325,673],{"class":239},[79,112327,112328,112330,112332,112334,112337,112340,112343,112345,112347,112350,112352,112354,112356,112358,112361,112363],{"class":81,"line":1019},[79,112329,1164],{"class":96},[79,112331,685],{"class":239},[79,112333,1169],{"class":89},[79,112335,112336],{"class":239},", step, ",[79,112338,112339],{"class":89},"\"obs:\"",[79,112341,112342],{"class":239},", np.round(obs, ",[79,112344,1188],{"class":96},[79,112346,1289],{"class":239},[79,112348,112349],{"class":89},"\"action:\"",[79,112351,1060],{"class":239},[79,112353,1264],{"class":96},[79,112355,685],{"class":239},[79,112357,797],{"class":96},[79,112359,112360],{"class":239},"(action), ",[79,112362,1188],{"class":96},[79,112364,1191],{"class":239},[79,112366,112367],{"class":81,"line":1024},[79,112368,454],{"emptyLinePlaceholder":453},[79,112370,112371,112373,112375,112377,112379,112381,112383,112385],{"class":81,"line":1067},[79,112372,1254],{"class":96},[79,112374,685],{"class":239},[79,112376,1259],{"class":89},[79,112378,1060],{"class":239},[79,112380,1264],{"class":96},[79,112382,1267],{"class":239},[79,112384,1188],{"class":96},[79,112386,1191],{"class":239},[79,112388,112389,112391,112393,112396,112399,112401],{"class":81,"line":1101},[79,112390,1254],{"class":96},[79,112392,685],{"class":239},[79,112394,112395],{"class":89},"\"final obs:\"",[79,112397,112398],{"class":239},", np.round(get_observation(data), ",[79,112400,1188],{"class":96},[79,112402,1191],{"class":239},[79,112404,112405],{"class":81,"line":1106},[79,112406,454],{"emptyLinePlaceholder":453},[79,112408,112409],{"class":81,"line":1112},[79,112410,454],{"emptyLinePlaceholder":453},[79,112412,112413,112415,112417,112419,112421],{"class":81,"line":1124},[79,112414,1329],{"class":243},[79,112416,1332],{"class":96},[79,112418,1143],{"class":243},[79,112420,1337],{"class":89},[79,112422,673],{"class":239},[79,112424,112425],{"class":81,"line":1129},[79,112426,1345],{"class":239},[19,112428,1348],{},[51,112430,112432],{"className":73,"code":112431,"language":75,"meta":57,"style":57},"touch ch6_cartpole.py\n",[59,112433,112434],{"__ignoreMap":57},[79,112435,112436,112438],{"class":81,"line":82},[79,112437,1358],{"class":85},[79,112439,112440],{"class":89}," ch6_cartpole.py\n",[19,112442,1364],{},[51,112444,112446],{"className":73,"code":112445,"language":75,"meta":57,"style":57},"python ch6_cartpole.py\n",[59,112447,112448],{"__ignoreMap":57},[79,112449,112450,112452],{"class":81,"line":82},[79,112451,232],{"class":85},[79,112453,112440],{"class":89},[265,112455,1378],{"id":1378},[19,112457,1404],{},[51,112459,112461],{"className":230,"code":112460,"language":232,"meta":57,"style":57},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[59,112462,112463,112471],{"__ignoreMap":57},[79,112464,112465,112467,112469],{"class":81,"line":82},[79,112466,633],{"class":243},[79,112468,111999],{"class":85},[79,112470,112002],{"class":239},[79,112472,112473,112475],{"class":81,"line":167},[79,112474,711],{"class":243},[79,112476,112009],{"class":239},[19,112478,112479,112482,112483,112485,112486,112488],{},[59,112480,112481],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[59,112484,203],{}," 2 维，",[59,112487,207],{}," 2 维，所以 obs 是 4 维。",[19,112490,112491],{},"设置初始角度：",[51,112493,112495],{"className":230,"code":112494,"language":232,"meta":57,"style":57},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[59,112496,112497,112509],{"__ignoreMap":57},[79,112498,112499,112501,112503,112505,112507],{"class":81,"line":82},[79,112500,106715],{"class":239},[79,112502,1072],{"class":96},[79,112504,1033],{"class":239},[79,112506,244],{"class":243},[79,112508,112145],{"class":96},[79,112510,112511],{"class":81,"line":167},[79,112512,1892],{"class":239},[19,112514,112515],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,112517,112518],{},"简单反馈控制：",[51,112520,112522],{"className":230,"code":112521,"language":232,"meta":57,"style":57},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[59,112523,112524,112544],{"__ignoreMap":57},[79,112525,112526,112528,112530,112532,112534,112536,112538,112540,112542],{"class":81,"line":82},[79,112527,109449],{"class":239},[79,112529,244],{"class":243},[79,112531,112231],{"class":96},[79,112533,853],{"class":243},[79,112535,111825],{"class":239},[79,112537,2855],{"class":243},[79,112539,63977],{"class":96},[79,112541,853],{"class":243},[79,112543,112244],{"class":239},[79,112545,112546,112548,112550,112552,112554,112556,112558,112560],{"class":81,"line":167},[79,112547,109449],{"class":239},[79,112549,244],{"class":243},[79,112551,109454],{"class":239},[79,112553,320],{"class":243},[79,112555,1057],{"class":96},[79,112557,1060],{"class":239},[79,112559,1057],{"class":96},[79,112561,253],{"class":239},[19,112563,112564],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,112566,112567],{},"限制动作：",[51,112569,112571],{"className":230,"code":112570,"language":232,"meta":57,"style":57},"np.clip(action, -1.0, 1.0)\n",[59,112572,112573],{"__ignoreMap":57},[79,112574,112575,112578,112580,112582,112584,112586],{"class":81,"line":82},[79,112576,112577],{"class":239},"np.clip(action, ",[79,112579,320],{"class":243},[79,112581,1057],{"class":96},[79,112583,1060],{"class":239},[79,112585,1057],{"class":96},[79,112587,253],{"class":239},[19,112589,112590,112591,112593],{},"因为 XML 里 ",[59,112592,2103],{},"，所以 Python 里也把 action 限制在这个范围内。",[265,112595,1576],{"id":1576},[51,112597,112598],{"className":230,"code":112460,"language":232,"meta":57,"style":57},[59,112599,112600,112608],{"__ignoreMap":57},[79,112601,112602,112604,112606],{"class":81,"line":82},[79,112603,633],{"class":243},[79,112605,111999],{"class":85},[79,112607,112002],{"class":239},[79,112609,112610,112612],{"class":81,"line":167},[79,112611,711],{"class":243},[79,112613,112009],{"class":239},[19,112615,112616,112617,112620,112621,112624,112625,112628],{},"这段定义了一个函数，用来获取当前观测。",[59,112618,112619],{},"data.qpos.copy()"," 是位置数组副本，",[59,112622,112623],{},"data.qvel.copy()"," 是速度数组副本。",[59,112626,112627],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,112630,112631],{},"在本章模型里：",[51,112633,112636],{"className":112634,"code":112635,"language":56,"meta":57},[54],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[59,112637,112635],{"__ignoreMap":57},[19,112639,112640],{},"所以返回的 obs 是：",[51,112642,112645],{"className":112643,"code":112644,"language":56,"meta":57},[54],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[59,112646,112644],{"__ignoreMap":57},[51,112648,112650],{"className":230,"code":112649,"language":232,"meta":57,"style":57},"def compute_reward(obs: np.ndarray) -> float:\n",[59,112651,112652],{"__ignoreMap":57},[79,112653,112654,112656,112658,112660,112662],{"class":81,"line":82},[79,112655,633],{"class":243},[79,112657,112024],{"class":85},[79,112659,112027],{"class":239},[79,112661,797],{"class":96},[79,112663,673],{"class":239},[19,112665,112666,112667,112670],{},"这行定义奖励函数。输入是观测 ",[59,112668,112669],{},"obs","，输出是一个浮点数奖励。",[51,112672,112674],{"className":230,"code":112673,"language":232,"meta":57,"style":57},"cart_x = obs[0]\npole_angle = obs[1]\n",[59,112675,112676,112689],{"__ignoreMap":57},[79,112677,112678,112681,112683,112685,112687],{"class":81,"line":82},[79,112679,112680],{"class":239},"cart_x ",[79,112682,244],{"class":243},[79,112684,112041],{"class":239},[79,112686,1030],{"class":96},[79,112688,35361],{"class":239},[79,112690,112691,112694,112696,112698,112700],{"class":81,"line":167},[79,112692,112693],{"class":239},"pole_angle ",[79,112695,244],{"class":243},[79,112697,112041],{"class":239},[79,112699,1072],{"class":96},[79,112701,35361],{"class":239},[19,112703,112704,112705,112708,112709,112712],{},"数组索引从 0 开始。",[59,112706,112707],{},"obs[0]"," 是第一个元素，也就是小车位置。",[59,112710,112711],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[51,112714,112715],{"className":230,"code":111794,"language":232,"meta":57,"style":57},[59,112716,112717],{"__ignoreMap":57},[79,112718,112719,112721,112723,112725,112727,112729,112731,112733,112735,112737,112739,112741,112743,112745],{"class":81,"line":82},[79,112720,1414],{"class":243},[79,112722,864],{"class":96},[79,112724,685],{"class":239},[79,112726,1057],{"class":96},[79,112728,333],{"class":243},[79,112730,111811],{"class":96},[79,112732,853],{"class":243},[79,112734,111816],{"class":239},[79,112736,2829],{"class":243},[79,112738,111816],{"class":239},[79,112740,320],{"class":243},[79,112742,111825],{"class":239},[79,112744,2829],{"class":243},[79,112746,111830],{"class":239},[19,112748,112749,112750,112753,112754,112757],{},"这行计算奖励。",[59,112751,112752],{},"cart_x * cart_x"," 是小车位置的平方，",[59,112755,112756],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[51,112759,112761],{"className":230,"code":112760,"language":232,"meta":57,"style":57},"data.qpos[1] = 0.1\n",[59,112762,112763],{"__ignoreMap":57},[79,112764,112765,112767,112769,112771,112773],{"class":81,"line":82},[79,112766,106715],{"class":239},[79,112768,1072],{"class":96},[79,112770,1033],{"class":239},[79,112772,244],{"class":243},[79,112774,112145],{"class":96},[19,112776,112777,112778,112780,112781,112783],{},"手动设置杆子的初始角度。因为 ",[59,112779,107470],{}," 是小车位置，",[59,112782,107473],{}," 是杆子角度，所以这里改的是杆子。",[51,112785,112786],{"className":230,"code":1892,"language":232,"meta":57,"style":57},[59,112787,112788],{"__ignoreMap":57},[79,112789,112790],{"class":81,"line":82},[79,112791,1892],{"class":239},[19,112793,107516,112794,112796],{},[59,112795,203],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[51,112798,112799],{"className":230,"code":1850,"language":232,"meta":57,"style":57},[59,112800,112801],{"__ignoreMap":57},[79,112802,112803,112805,112807],{"class":81,"line":82},[79,112804,1857],{"class":239},[79,112806,244],{"class":243},[79,112808,938],{"class":96},[19,112810,112811],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[51,112813,112815],{"className":230,"code":112814,"language":232,"meta":57,"style":57},"for step in range(1000):\n",[59,112816,112817],{"__ignoreMap":57},[79,112818,112819,112821,112823,112825,112827,112829,112831],{"class":81,"line":82},[79,112820,1874],{"class":243},[79,112822,952],{"class":239},[79,112824,955],{"class":243},[79,112826,958],{"class":96},[79,112828,685],{"class":239},[79,112830,8605],{"class":96},[79,112832,966],{"class":239},[19,112834,112835,112836,112838],{},"循环 1000 步。",[59,112837,109142],{}," 是当前步数，从 0 到 999。",[51,112840,112842],{"className":230,"code":112841,"language":232,"meta":57,"style":57},"obs = get_observation(data)\n",[59,112843,112844],{"__ignoreMap":57},[79,112845,112846,112848,112850],{"class":81,"line":82},[79,112847,2027],{"class":239},[79,112849,244],{"class":243},[79,112851,112191],{"class":239},[19,112853,112854,112855,1604],{},"读取当前状态，保存到 ",[59,112856,112669],{},[51,112858,112860],{"className":230,"code":112859,"language":232,"meta":57,"style":57},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[59,112861,112862,112874],{"__ignoreMap":57},[79,112863,112864,112866,112868,112870,112872],{"class":81,"line":82},[79,112865,112693],{"class":239},[79,112867,244],{"class":243},[79,112869,112041],{"class":239},[79,112871,1072],{"class":96},[79,112873,35361],{"class":239},[79,112875,112876,112879,112881,112883,112885],{"class":81,"line":167},[79,112877,112878],{"class":239},"pole_angular_velocity ",[79,112880,244],{"class":243},[79,112882,112041],{"class":239},[79,112884,1188],{"class":96},[79,112886,35361],{"class":239},[19,112888,112889,112890,112893,112894,1604],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[59,112891,112892],{},"obs[3]","？因为 obs 的顺序是 ",[59,112895,112896],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[51,112898,112900],{"className":230,"code":112899,"language":232,"meta":57,"style":57},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[59,112901,112902],{"__ignoreMap":57},[79,112903,112904,112906,112908,112910,112912,112914,112916,112918,112920],{"class":81,"line":82},[79,112905,109449],{"class":239},[79,112907,244],{"class":243},[79,112909,112231],{"class":96},[79,112911,853],{"class":243},[79,112913,111825],{"class":239},[79,112915,2855],{"class":243},[79,112917,63977],{"class":96},[79,112919,853],{"class":243},[79,112921,112244],{"class":239},[19,112923,112924,112925,1905,112927,112929],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[59,112926,1041],{},[59,112928,37443],{}," 是人为设置的系数，不是固定公式。",[51,112931,112933],{"className":230,"code":112932,"language":232,"meta":57,"style":57},"action = np.clip(action, -1.0, 1.0)\n",[59,112934,112935],{"__ignoreMap":57},[79,112936,112937,112939,112941,112943,112945,112947,112949,112951],{"class":81,"line":82},[79,112938,109449],{"class":239},[79,112940,244],{"class":243},[79,112942,109454],{"class":239},[79,112944,320],{"class":243},[79,112946,1057],{"class":96},[79,112948,1060],{"class":239},[79,112950,1057],{"class":96},[79,112952,253],{"class":239},[19,112954,112955],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[51,112957,112958],{"className":230,"code":111780,"language":232,"meta":57,"style":57},[59,112959,112960],{"__ignoreMap":57},[79,112961,112962,112964,112966,112968,112970],{"class":81,"line":82},[79,112963,1510],{"class":239},[79,112965,1030],{"class":96},[79,112967,1033],{"class":239},[79,112969,244],{"class":243},[79,112971,109477],{"class":239},[19,112973,112974],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[51,112976,112977],{"className":230,"code":2008,"language":232,"meta":57,"style":57},[59,112978,112979],{"__ignoreMap":57},[79,112980,112981],{"class":81,"line":82},[79,112982,2008],{"class":239},[19,112984,112985,112986,112988],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[59,112987,2202],{}," 计算小车和杆子的下一刻状态。",[51,112990,112992],{"className":230,"code":112991,"language":232,"meta":57,"style":57},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[59,112993,112994,113002],{"__ignoreMap":57},[79,112995,112996,112998,113000],{"class":81,"line":82},[79,112997,328],{"class":239},[79,112999,244],{"class":243},[79,113001,112296],{"class":239},[79,113003,113004,113006,113008],{"class":81,"line":167},[79,113005,1857],{"class":239},[79,113007,1118],{"class":243},[79,113009,112305],{"class":239},[19,113011,113012,113013,113015,113016,113019,113020,1604],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[59,113014,1118],{}," 是简写，",[59,113017,113018],{},"total_reward += reward"," 等价于 ",[59,113021,113022],{},"total_reward = total_reward + reward",[51,113024,113026],{"className":230,"code":113025,"language":232,"meta":57,"style":57},"if step % 100 == 0:\n",[59,113027,113028],{"__ignoreMap":57},[79,113029,113030,113032,113034,113036,113038,113040,113042],{"class":81,"line":82},[79,113031,1329],{"class":243},[79,113033,952],{"class":239},[79,113035,1137],{"class":243},[79,113037,1140],{"class":96},[79,113039,1143],{"class":243},[79,113041,670],{"class":96},[79,113043,673],{"class":239},[19,113045,113046,113048,113049,113052],{},[59,113047,1137],{}," 是取余数。",[59,113050,113051],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[51,113054,113056],{"className":230,"code":113055,"language":232,"meta":57,"style":57},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[59,113057,113058],{"__ignoreMap":57},[79,113059,113060,113062,113064,113066,113068,113070,113072,113074,113076,113078,113080,113082,113084,113086,113088,113090],{"class":81,"line":82},[79,113061,32541],{"class":96},[79,113063,685],{"class":239},[79,113065,1169],{"class":89},[79,113067,112336],{"class":239},[79,113069,112339],{"class":89},[79,113071,112342],{"class":239},[79,113073,1188],{"class":96},[79,113075,1289],{"class":239},[79,113077,112349],{"class":89},[79,113079,1060],{"class":239},[79,113081,1264],{"class":96},[79,113083,685],{"class":239},[79,113085,797],{"class":96},[79,113087,112360],{"class":239},[79,113089,1188],{"class":96},[79,113091,1191],{"class":239},[19,113093,113094,113095,113098,113099,113102],{},"打印当前步数、观测和动作。",[59,113096,113097],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[59,113100,113101],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,113104,2042],{"id":2041},[19,113106,113107],{},"观测向量:",[51,113109,113112],{"className":113110,"code":113111,"language":56,"meta":57},[54],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[59,113113,113111],{"__ignoreMap":57},[19,113115,113116],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,113118,113119],{},"每隔 100 步会打印一次：",[51,113121,113124],{"className":113122,"code":113123,"language":56,"meta":57},[54],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[59,113125,113123],{"__ignoreMap":57},[19,113127,113128],{},"重点观察：",[26,113130,113131,113137,113142],{},[29,113132,113133,113136],{},[59,113134,113135],{},"pole_angle"," 是否越来越大。",[29,113138,113139,113141],{},[59,113140,111733],{}," 是否跑得太远。",[29,113143,113144,113145,1601,113147,1604],{},"action 是否经常被 clip 到 ",[59,113146,105940],{},[59,113148,1072],{},[19,113150,113151],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,113153,2073],{"id":2072},[26,113155,113156,113162,113165,113171,113179,113185,113188],{},[29,113157,113158,113159,1604],{},"把初始角度改为 ",[59,113160,113161],{},"data.qpos[1] = 0.3",[29,113163,113164],{},"重新运行，观察控制是否变差。",[29,113166,113167,113168,113170],{},"把 actuator ",[59,113169,109075],{}," 改小。",[29,113172,2091,113173,2095,113176,1604],{},[59,113174,113175],{},"model.nq, model.nv, model.nu",[59,113177,113178],{},"2 2 1",[29,113180,113181,113182,113184],{},"把 reward 里的 ",[59,113183,112756],{}," 系数改大，观察总奖励变化。",[29,113186,113187],{},"把控制器改成反号，观察杆子是否更容易倒。",[29,113189,113190],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,113192,2127],{"id":2126},[265,113194,113195],{"id":113195},"杆子方向和预期不一致",[19,113197,104447,113198,113200,113201,113203],{},[59,113199,108251],{}," 和 capsule 的 ",[59,113202,105214],{},"，必要时用 viewer 可视化确认。",[265,113205,113206],{"id":113206},"控制器越控越倒",[19,113208,113209],{},"说明反馈符号可能反了，尝试:",[51,113211,113213],{"className":230,"code":113212,"language":232,"meta":57,"style":57},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[59,113214,113215],{"__ignoreMap":57},[79,113216,113217,113219,113221,113223,113225,113227,113229,113231,113233,113235],{"class":81,"line":82},[79,113218,109449],{"class":239},[79,113220,244],{"class":243},[79,113222,333],{"class":243},[79,113224,1041],{"class":96},[79,113226,853],{"class":243},[79,113228,111825],{"class":239},[79,113230,320],{"class":243},[79,113232,63977],{"class":96},[79,113234,853],{"class":243},[79,113236,112244],{"class":239},[265,113238,113239],{"id":113239},"小车飞走",[19,113241,113242,113243,113245,113246,113249],{},"降低 ",[59,113244,109075],{}," 或缩小 ",[59,113247,113248],{},"action"," 的 clip 范围。",[265,113251,113253,113255],{"id":113252},"obs3-为什么是杆子角速度",[59,113254,112892],{}," 为什么是杆子角速度",[19,113257,113258],{},"因为这个模型里：",[51,113260,113263],{"className":113261,"code":113262,"language":56,"meta":57},[54],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[59,113264,113262],{"__ignoreMap":57},[19,113266,111754],{},[51,113268,113271],{"className":113269,"code":113270,"language":56,"meta":57},[54],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[59,113272,113270],{"__ignoreMap":57},[265,113274,113276],{"id":113275},"reward-变成负数是否错误","reward 变成负数是否错误",[19,113278,113279],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,113281,2270],{"id":2269},[19,113283,113284],{},"一个控制任务通常包含：",[26,113286,113287,113290,113298,113303,113306],{},[29,113288,113289],{},"模型：Cartpole 的 body、joint、actuator。",[29,113291,113292,113293,204,113295,113297],{},"观测：从 ",[59,113294,203],{},[59,113296,207],{}," 里取状态。",[29,113299,113300,113301,1604],{},"动作：写入 ",[59,113302,2163],{},[29,113304,113305],{},"奖励：根据任务目标打分。",[29,113307,113308],{},"循环：obs -> action -> step -> reward。",[19,113310,113311],{},"这就是后面 Gymnasium 环境的基本骨架。",[2287,113313,106309],{},{"title":57,"searchDepth":167,"depth":167,"links":113315},[113316,113317,113318,113323,113327,113328,113329,113337],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":214,"depth":167,"text":215,"children":113319},[113320,113321,113322],{"id":111707,"depth":178,"text":111708},{"id":111772,"depth":178,"text":111773},{"id":111788,"depth":178,"text":111789},{"id":421,"depth":167,"text":422,"children":113324},[113325,113326],{"id":1378,"depth":178,"text":1378},{"id":1576,"depth":178,"text":1576},{"id":2041,"depth":167,"text":2042},{"id":2072,"depth":167,"text":2073},{"id":2126,"depth":167,"text":2127,"children":113330},[113331,113332,113333,113334,113336],{"id":113195,"depth":178,"text":113195},{"id":113206,"depth":178,"text":113206},{"id":113239,"depth":178,"text":113239},{"id":113252,"depth":178,"text":113335},"obs[3] 为什么是杆子角速度",{"id":113275,"depth":178,"text":113276},{"id":2269,"depth":167,"text":2270},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111443,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":4,"title":5,"body":113344,"description":57,"extension":2314,"meta":115125,"navigation":453,"path":2316,"seo":115126,"stem":2318,"__hash__":2319},{"type":7,"value":113345,"toc":115101},[113346,113348,113350,113352,113354,113366,113368,113370,113375,113377,113379,113381,113405,113407,113421,113423,113461,113463,113477,113479,113481,113486,113488,113512,113514,113518,113538,113540,113566,113570,113572,113574,113579,113581,113586,113588,113593,113595,113597,113621,113623,113625,114327,114329,114339,114341,114351,114353,114355,114371,114373,114375,114385,114387,114389,114433,114435,114445,114447,114527,114529,114531,114547,114555,114567,114569,114607,114613,114623,114629,114641,114643,114671,114673,114683,114685,114690,114706,114712,114714,114719,114735,114741,114761,114763,114775,114777,114797,114799,114807,114813,114829,114831,114899,114903,114911,114913,114925,114929,114931,114933,114938,114940,114942,114947,114951,114953,114985,114987,114991,114997,114999,115001,115017,115019,115021,115026,115028,115030,115050,115052,115054,115078,115082,115084,115086,115088,115090,115092,115097,115099],[10,113347,5],{"id":12},[14,113349,17],{"id":16},[19,113351,21],{},[19,113353,24],{},[26,113355,113356,113358,113360,113362,113364],{},[29,113357,31],{},[29,113359,34],{},[29,113361,37],{},[29,113363,40],{},[29,113365,43],{},[19,113367,46],{},[19,113369,49],{},[51,113371,113373],{"className":113372,"code":55,"language":56,"meta":57},[54],[59,113374,55],{"__ignoreMap":57},[19,113376,63],{},[14,113378,67],{"id":66},[19,113380,70],{},[51,113382,113383],{"className":73,"code":74,"language":75,"meta":57,"style":57},[59,113384,113385],{"__ignoreMap":57},[79,113386,113387,113389,113391,113393,113395,113397,113399,113401,113403],{"class":81,"line":82},[79,113388,86],{"class":85},[79,113390,90],{"class":89},[79,113392,93],{"class":89},[79,113394,97],{"class":96},[79,113396,100],{"class":89},[79,113398,103],{"class":89},[79,113400,106],{"class":89},[79,113402,109],{"class":89},[79,113404,112],{"class":89},[19,113406,115],{},[51,113408,113409],{"className":73,"code":118,"language":75,"meta":57,"style":57},[59,113410,113411],{"__ignoreMap":57},[79,113412,113413,113415,113417,113419],{"class":81,"line":82},[79,113414,125],{"class":85},[79,113416,93],{"class":89},[79,113418,130],{"class":89},[79,113420,133],{"class":89},[19,113422,136],{},[51,113424,113425],{"className":73,"code":139,"language":75,"meta":57,"style":57},[59,113426,113427,113443,113451],{"__ignoreMap":57},[79,113428,113429,113431,113433,113435,113437,113439,113441],{"class":81,"line":82},[79,113430,146],{"class":85},[79,113432,149],{"class":89},[79,113434,152],{"class":96},[79,113436,155],{"class":89},[79,113438,158],{"class":89},[79,113440,161],{"class":96},[79,113442,164],{"class":96},[79,113444,113445,113447,113449],{"class":81,"line":167},[79,113446,146],{"class":85},[79,113448,172],{"class":89},[79,113450,175],{"class":89},[79,113452,113453,113455,113457,113459],{"class":81,"line":178},[79,113454,125],{"class":85},[79,113456,93],{"class":89},[79,113458,130],{"class":89},[79,113460,133],{"class":89},[19,113462,189],{},[26,113464,113465,113467,113469],{},[29,113466,194],{},[29,113468,197],{},[29,113470,200,113471,204,113473,204,113475,211],{},[59,113472,203],{},[59,113474,207],{},[59,113476,210],{},[14,113478,215],{"id":214},[19,113480,218],{},[51,113482,113484],{"className":113483,"code":222,"language":56,"meta":57},[54],[59,113485,222],{"__ignoreMap":57},[19,113487,227],{},[51,113489,113490],{"className":230,"code":231,"language":232,"meta":57,"style":57},[59,113491,113492,113504],{"__ignoreMap":57},[79,113493,113494,113496,113498,113500,113502],{"class":81,"line":82},[79,113495,240],{"class":239},[79,113497,244],{"class":243},[79,113499,247],{"class":239},[79,113501,250],{"class":89},[79,113503,253],{"class":239},[79,113505,113506,113508,113510],{"class":81,"line":167},[79,113507,258],{"class":239},[79,113509,244],{"class":243},[79,113511,263],{"class":239},[265,113513,268],{"id":267},[19,113515,271,113516,274],{},[59,113517,203],{},[51,113519,113520],{"className":230,"code":277,"language":232,"meta":57,"style":57},[59,113521,113522,113530],{"__ignoreMap":57},[79,113523,113524,113526,113528],{"class":81,"line":82},[79,113525,284],{"class":239},[79,113527,244],{"class":243},[79,113529,289],{"class":239},[79,113531,113532,113534,113536],{"class":81,"line":167},[79,113533,294],{"class":239},[79,113535,244],{"class":243},[79,113537,299],{"class":239},[19,113539,302],{},[51,113541,113542],{"className":230,"code":305,"language":232,"meta":57,"style":57},[59,113543,113544,113556],{"__ignoreMap":57},[79,113545,113546,113548,113550,113552,113554],{"class":81,"line":82},[79,113547,312],{"class":239},[79,113549,244],{"class":243},[79,113551,317],{"class":239},[79,113553,320],{"class":243},[79,113555,323],{"class":239},[79,113557,113558,113560,113562,113564],{"class":81,"line":167},[79,113559,328],{"class":239},[79,113561,244],{"class":243},[79,113563,333],{"class":243},[79,113565,336],{"class":239},[19,113567,339,113568,343],{},[59,113569,342],{},[265,113571,346],{"id":346},[19,113573,349],{},[51,113575,113577],{"className":113576,"code":353,"language":56,"meta":57},[54],[59,113578,353],{"__ignoreMap":57},[19,113580,358],{},[51,113582,113584],{"className":113583,"code":362,"language":56,"meta":57},[54],[59,113585,362],{"__ignoreMap":57},[19,113587,367],{},[51,113589,113591],{"className":113590,"code":371,"language":56,"meta":57},[54],[59,113592,371],{"__ignoreMap":57},[265,113594,377],{"id":376},[19,113596,380],{},[51,113598,113599],{"className":383,"code":384,"language":385,"meta":57,"style":57},[59,113600,113601],{"__ignoreMap":57},[79,113602,113603,113605,113607,113609,113611,113613,113615,113617,113619],{"class":81,"line":82},[79,113604,392],{"class":239},[79,113606,396],{"class":395},[79,113608,399],{"class":85},[79,113610,244],{"class":239},[79,113612,404],{"class":89},[79,113614,407],{"class":85},[79,113616,244],{"class":239},[79,113618,412],{"class":89},[79,113620,415],{"class":239},[19,113622,418],{},[14,113624,422],{"id":421},[51,113626,113627],{"className":230,"code":425,"language":232,"meta":57,"style":57},[59,113628,113629,113635,113645,113649,113653,113661,113665,113669,113673,113677,113681,113685,113689,113693,113697,113701,113705,113709,113713,113717,113721,113725,113729,113733,113737,113741,113745,113749,113753,113757,113761,113765,113769,113781,113789,113801,113823,113829,113833,113837,113845,113857,113869,113875,113879,113883,113895,113907,113919,113931,113943,113959,113963,113967,113979,113991,113999,114007,114011,114027,114031,114043,114055,114067,114071,114103,114135,114139,114143,114151,114155,114171,114179,114189,114203,114217,114231,114245,114249,114267,114285,114303,114307,114311,114323],{"__ignoreMap":57},[79,113630,113631,113633],{"class":81,"line":82},[79,113632,432],{"class":243},[79,113634,435],{"class":239},[79,113636,113637,113639,113641,113643],{"class":81,"line":167},[79,113638,432],{"class":243},[79,113640,442],{"class":239},[79,113642,445],{"class":243},[79,113644,448],{"class":239},[79,113646,113647],{"class":81,"line":178},[79,113648,454],{"emptyLinePlaceholder":453},[79,113650,113651],{"class":81,"line":457},[79,113652,454],{"emptyLinePlaceholder":453},[79,113654,113655,113657,113659],{"class":81,"line":462},[79,113656,465],{"class":96},[79,113658,468],{"class":243},[79,113660,471],{"class":89},[79,113662,113663],{"class":81,"line":474},[79,113664,477],{"class":89},[79,113666,113667],{"class":81,"line":480},[79,113668,483],{"class":89},[79,113670,113671],{"class":81,"line":486},[79,113672,454],{"emptyLinePlaceholder":453},[79,113674,113675],{"class":81,"line":491},[79,113676,494],{"class":89},[79,113678,113679],{"class":81,"line":497},[79,113680,500],{"class":89},[79,113682,113683],{"class":81,"line":503},[79,113684,506],{"class":89},[79,113686,113687],{"class":81,"line":509},[79,113688,454],{"emptyLinePlaceholder":453},[79,113690,113691],{"class":81,"line":514},[79,113692,517],{"class":89},[79,113694,113695],{"class":81,"line":520},[79,113696,523],{"class":89},[79,113698,113699],{"class":81,"line":526},[79,113700,529],{"class":89},[79,113702,113703],{"class":81,"line":532},[79,113704,454],{"emptyLinePlaceholder":453},[79,113706,113707],{"class":81,"line":537},[79,113708,540],{"class":89},[79,113710,113711],{"class":81,"line":543},[79,113712,546],{"class":89},[79,113714,113715],{"class":81,"line":549},[79,113716,552],{"class":89},[79,113718,113719],{"class":81,"line":555},[79,113720,558],{"class":89},[79,113722,113723],{"class":81,"line":561},[79,113724,564],{"class":89},[79,113726,113727],{"class":81,"line":567},[79,113728,570],{"class":89},[79,113730,113731],{"class":81,"line":573},[79,113732,576],{"class":89},[79,113734,113735],{"class":81,"line":579},[79,113736,454],{"emptyLinePlaceholder":453},[79,113738,113739],{"class":81,"line":584},[79,113740,587],{"class":89},[79,113742,113743],{"class":81,"line":590},[79,113744,593],{"class":89},[79,113746,113747],{"class":81,"line":596},[79,113748,599],{"class":89},[79,113750,113751],{"class":81,"line":602},[79,113752,605],{"class":89},[79,113754,113755],{"class":81,"line":608},[79,113756,611],{"class":89},[79,113758,113759],{"class":81,"line":614},[79,113760,617],{"class":89},[79,113762,113763],{"class":81,"line":620},[79,113764,454],{"emptyLinePlaceholder":453},[79,113766,113767],{"class":81,"line":625},[79,113768,454],{"emptyLinePlaceholder":453},[79,113770,113771,113773,113775,113777,113779],{"class":81,"line":630},[79,113772,633],{"class":243},[79,113774,636],{"class":85},[79,113776,639],{"class":239},[79,113778,642],{"class":96},[79,113780,645],{"class":239},[79,113782,113783,113785,113787],{"class":81,"line":648},[79,113784,651],{"class":239},[79,113786,244],{"class":243},[79,113788,656],{"class":239},[79,113790,113791,113793,113795,113797,113799],{"class":81,"line":659},[79,113792,662],{"class":243},[79,113794,665],{"class":239},[79,113796,392],{"class":243},[79,113798,670],{"class":96},[79,113800,673],{"class":239},[79,113802,113803,113805,113807,113809,113811,113813,113815,113817,113819,113821],{"class":81,"line":676},[79,113804,679],{"class":243},[79,113806,682],{"class":96},[79,113808,685],{"class":239},[79,113810,688],{"class":243},[79,113812,691],{"class":89},[79,113814,694],{"class":96},[79,113816,697],{"class":239},[79,113818,700],{"class":96},[79,113820,703],{"class":89},[79,113822,253],{"class":239},[79,113824,113825,113827],{"class":81,"line":708},[79,113826,711],{"class":243},[79,113828,714],{"class":239},[79,113830,113831],{"class":81,"line":717},[79,113832,454],{"emptyLinePlaceholder":453},[79,113834,113835],{"class":81,"line":722},[79,113836,454],{"emptyLinePlaceholder":453},[79,113838,113839,113841,113843],{"class":81,"line":727},[79,113840,633],{"class":243},[79,113842,732],{"class":85},[79,113844,735],{"class":239},[79,113846,113847,113849,113851,113853,113855],{"class":81,"line":738},[79,113848,741],{"class":239},[79,113850,244],{"class":243},[79,113852,746],{"class":239},[79,113854,250],{"class":89},[79,113856,253],{"class":239},[79,113858,113859,113861,113863,113865,113867],{"class":81,"line":753},[79,113860,756],{"class":239},[79,113862,244],{"class":243},[79,113864,746],{"class":239},[79,113866,763],{"class":89},[79,113868,253],{"class":239},[79,113870,113871,113873],{"class":81,"line":768},[79,113872,711],{"class":243},[79,113874,773],{"class":239},[79,113876,113877],{"class":81,"line":776},[79,113878,454],{"emptyLinePlaceholder":453},[79,113880,113881],{"class":81,"line":781},[79,113882,454],{"emptyLinePlaceholder":453},[79,113884,113885,113887,113889,113891,113893],{"class":81,"line":786},[79,113886,633],{"class":243},[79,113888,791],{"class":85},[79,113890,794],{"class":239},[79,113892,797],{"class":96},[79,113894,673],{"class":239},[79,113896,113897,113899,113901,113903,113905],{"class":81,"line":802},[79,113898,741],{"class":239},[79,113900,244],{"class":243},[79,113902,746],{"class":239},[79,113904,250],{"class":89},[79,113906,253],{"class":239},[79,113908,113909,113911,113913,113915,113917],{"class":81,"line":815},[79,113910,756],{"class":239},[79,113912,244],{"class":243},[79,113914,746],{"class":239},[79,113916,763],{"class":89},[79,113918,253],{"class":239},[79,113920,113921,113923,113925,113927,113929],{"class":81,"line":828},[79,113922,831],{"class":239},[79,113924,244],{"class":243},[79,113926,317],{"class":239},[79,113928,320],{"class":243},[79,113930,323],{"class":239},[79,113932,113933,113935,113937,113939,113941],{"class":81,"line":842},[79,113934,845],{"class":239},[79,113936,244],{"class":243},[79,113938,850],{"class":96},[79,113940,853],{"class":243},[79,113942,856],{"class":239},[79,113944,113945,113947,113949,113951,113953,113955,113957],{"class":81,"line":859},[79,113946,711],{"class":243},[79,113948,864],{"class":96},[79,113950,685],{"class":239},[79,113952,320],{"class":243},[79,113954,312],{"class":239},[79,113956,320],{"class":243},[79,113958,875],{"class":239},[79,113960,113961],{"class":81,"line":878},[79,113962,454],{"emptyLinePlaceholder":453},[79,113964,113965],{"class":81,"line":883},[79,113966,454],{"emptyLinePlaceholder":453},[79,113968,113969,113971,113973,113975,113977],{"class":81,"line":888},[79,113970,633],{"class":243},[79,113972,893],{"class":85},[79,113974,896],{"class":239},[79,113976,899],{"class":96},[79,113978,673],{"class":239},[79,113980,113981,113983,113985,113987,113989],{"class":81,"line":904},[79,113982,907],{"class":239},[79,113984,244],{"class":243},[79,113986,912],{"class":239},[79,113988,465],{"class":96},[79,113990,253],{"class":239},[79,113992,113993,113995,113997],{"class":81,"line":919},[79,113994,922],{"class":239},[79,113996,244],{"class":243},[79,113998,927],{"class":239},[79,114000,114001,114003,114005],{"class":81,"line":930},[79,114002,933],{"class":239},[79,114004,244],{"class":243},[79,114006,938],{"class":96},[79,114008,114009],{"class":81,"line":941},[79,114010,454],{"emptyLinePlaceholder":453},[79,114012,114013,114015,114017,114019,114021,114023,114025],{"class":81,"line":946},[79,114014,949],{"class":243},[79,114016,952],{"class":239},[79,114018,955],{"class":243},[79,114020,958],{"class":96},[79,114022,685],{"class":239},[79,114024,963],{"class":96},[79,114026,966],{"class":239},[79,114028,114029],{"class":81,"line":969},[79,114030,972],{"class":239},[79,114032,114033,114035,114037,114039,114041],{"class":81,"line":975},[79,114034,978],{"class":239},[79,114036,244],{"class":243},[79,114038,746],{"class":239},[79,114040,250],{"class":89},[79,114042,253],{"class":239},[79,114044,114045,114047,114049,114051,114053],{"class":81,"line":989},[79,114046,992],{"class":239},[79,114048,244],{"class":243},[79,114050,746],{"class":239},[79,114052,763],{"class":89},[79,114054,253],{"class":239},[79,114056,114057,114059,114061,114063,114065],{"class":81,"line":1003},[79,114058,1006],{"class":239},[79,114060,244],{"class":243},[79,114062,1011],{"class":239},[79,114064,320],{"class":243},[79,114066,1016],{"class":239},[79,114068,114069],{"class":81,"line":1019},[79,114070,454],{"emptyLinePlaceholder":453},[79,114072,114073,114075,114077,114079,114081,114083,114085,114087,114089,114091,114093,114095,114097,114099,114101],{"class":81,"line":1024},[79,114074,1027],{"class":239},[79,114076,1030],{"class":96},[79,114078,1033],{"class":239},[79,114080,244],{"class":243},[79,114082,1038],{"class":239},[79,114084,1041],{"class":96},[79,114086,853],{"class":243},[79,114088,1046],{"class":239},[79,114090,1049],{"class":96},[79,114092,1052],{"class":239},[79,114094,320],{"class":243},[79,114096,1057],{"class":96},[79,114098,1060],{"class":239},[79,114100,1057],{"class":96},[79,114102,253],{"class":239},[79,114104,114105,114107,114109,114111,114113,114115,114117,114119,114121,114123,114125,114127,114129,114131,114133],{"class":81,"line":1067},[79,114106,1027],{"class":239},[79,114108,1072],{"class":96},[79,114110,1033],{"class":239},[79,114112,244],{"class":243},[79,114114,1038],{"class":239},[79,114116,1041],{"class":96},[79,114118,853],{"class":243},[79,114120,1046],{"class":239},[79,114122,1030],{"class":96},[79,114124,1052],{"class":239},[79,114126,320],{"class":243},[79,114128,1057],{"class":96},[79,114130,1060],{"class":239},[79,114132,1057],{"class":96},[79,114134,253],{"class":239},[79,114136,114137],{"class":81,"line":1101},[79,114138,454],{"emptyLinePlaceholder":453},[79,114140,114141],{"class":81,"line":1106},[79,114142,1109],{"class":239},[79,114144,114145,114147,114149],{"class":81,"line":1112},[79,114146,1115],{"class":239},[79,114148,1118],{"class":243},[79,114150,1121],{"class":239},[79,114152,114153],{"class":81,"line":1124},[79,114154,454],{"emptyLinePlaceholder":453},[79,114156,114157,114159,114161,114163,114165,114167,114169],{"class":81,"line":1129},[79,114158,1132],{"class":243},[79,114160,952],{"class":239},[79,114162,1137],{"class":243},[79,114164,1140],{"class":96},[79,114166,1143],{"class":243},[79,114168,670],{"class":96},[79,114170,673],{"class":239},[79,114172,114173,114175,114177],{"class":81,"line":1150},[79,114174,1153],{"class":239},[79,114176,244],{"class":243},[79,114178,1158],{"class":239},[79,114180,114181,114183,114185,114187],{"class":81,"line":1161},[79,114182,1164],{"class":96},[79,114184,685],{"class":239},[79,114186,1169],{"class":89},[79,114188,1172],{"class":239},[79,114190,114191,114193,114195,114197,114199,114201],{"class":81,"line":1175},[79,114192,1164],{"class":96},[79,114194,685],{"class":239},[79,114196,1182],{"class":89},[79,114198,1185],{"class":239},[79,114200,1188],{"class":96},[79,114202,1191],{"class":239},[79,114204,114205,114207,114209,114211,114213,114215],{"class":81,"line":1194},[79,114206,1164],{"class":96},[79,114208,685],{"class":239},[79,114210,1201],{"class":89},[79,114212,1204],{"class":239},[79,114214,1188],{"class":96},[79,114216,1191],{"class":239},[79,114218,114219,114221,114223,114225,114227,114229],{"class":81,"line":1211},[79,114220,1164],{"class":96},[79,114222,685],{"class":239},[79,114224,1218],{"class":89},[79,114226,1221],{"class":239},[79,114228,1188],{"class":96},[79,114230,1191],{"class":239},[79,114232,114233,114235,114237,114239,114241,114243],{"class":81,"line":1228},[79,114234,1164],{"class":96},[79,114236,685],{"class":239},[79,114238,1235],{"class":89},[79,114240,1238],{"class":239},[79,114242,1030],{"class":96},[79,114244,1243],{"class":239},[79,114246,114247],{"class":81,"line":1246},[79,114248,454],{"emptyLinePlaceholder":453},[79,114250,114251,114253,114255,114257,114259,114261,114263,114265],{"class":81,"line":1251},[79,114252,1254],{"class":96},[79,114254,685],{"class":239},[79,114256,1259],{"class":89},[79,114258,1060],{"class":239},[79,114260,1264],{"class":96},[79,114262,1267],{"class":239},[79,114264,1188],{"class":96},[79,114266,1191],{"class":239},[79,114268,114269,114271,114273,114275,114277,114279,114281,114283],{"class":81,"line":1274},[79,114270,1254],{"class":96},[79,114272,685],{"class":239},[79,114274,1281],{"class":89},[79,114276,1284],{"class":239},[79,114278,250],{"class":89},[79,114280,1289],{"class":239},[79,114282,1188],{"class":96},[79,114284,1191],{"class":239},[79,114286,114287,114289,114291,114293,114295,114297,114299,114301],{"class":81,"line":1296},[79,114288,1254],{"class":96},[79,114290,685],{"class":239},[79,114292,1303],{"class":89},[79,114294,1284],{"class":239},[79,114296,763],{"class":89},[79,114298,1289],{"class":239},[79,114300,1188],{"class":96},[79,114302,1191],{"class":239},[79,114304,114305],{"class":81,"line":1316},[79,114306,454],{"emptyLinePlaceholder":453},[79,114308,114309],{"class":81,"line":1321},[79,114310,454],{"emptyLinePlaceholder":453},[79,114312,114313,114315,114317,114319,114321],{"class":81,"line":1326},[79,114314,1329],{"class":243},[79,114316,1332],{"class":96},[79,114318,1143],{"class":243},[79,114320,1337],{"class":89},[79,114322,673],{"class":239},[79,114324,114325],{"class":81,"line":1342},[79,114326,1345],{"class":239},[19,114328,1348],{},[51,114330,114331],{"className":73,"code":1351,"language":75,"meta":57,"style":57},[59,114332,114333],{"__ignoreMap":57},[79,114334,114335,114337],{"class":81,"line":82},[79,114336,1358],{"class":85},[79,114338,1361],{"class":89},[19,114340,1364],{},[51,114342,114343],{"className":73,"code":1367,"language":75,"meta":57,"style":57},[59,114344,114345],{"__ignoreMap":57},[79,114346,114347,114349],{"class":81,"line":82},[79,114348,232],{"class":85},[79,114350,1361],{"class":89},[265,114352,1378],{"id":1378},[19,114354,1381],{},[51,114356,114357],{"className":230,"code":1384,"language":232,"meta":57,"style":57},[59,114358,114359],{"__ignoreMap":57},[79,114360,114361,114363,114365,114367,114369],{"class":81,"line":82},[79,114362,633],{"class":243},[79,114364,636],{"class":85},[79,114366,639],{"class":239},[79,114368,642],{"class":96},[79,114370,645],{"class":239},[19,114372,1401],{},[19,114374,1404],{},[51,114376,114377],{"className":230,"code":1407,"language":232,"meta":57,"style":57},[59,114378,114379],{"__ignoreMap":57},[79,114380,114381,114383],{"class":81,"line":82},[79,114382,1414],{"class":243},[79,114384,773],{"class":239},[19,114386,1419],{},[19,114388,1422],{},[51,114390,114391],{"className":230,"code":1425,"language":232,"meta":57,"style":57},[59,114392,114393,114405,114417],{"__ignoreMap":57},[79,114394,114395,114397,114399,114401,114403],{"class":81,"line":82},[79,114396,312],{"class":239},[79,114398,244],{"class":243},[79,114400,317],{"class":239},[79,114402,320],{"class":243},[79,114404,323],{"class":239},[79,114406,114407,114409,114411,114413,114415],{"class":81,"line":167},[79,114408,1444],{"class":239},[79,114410,244],{"class":243},[79,114412,850],{"class":96},[79,114414,853],{"class":243},[79,114416,856],{"class":239},[79,114418,114419,114421,114423,114425,114427,114429,114431],{"class":81,"line":178},[79,114420,1414],{"class":243},[79,114422,864],{"class":96},[79,114424,685],{"class":239},[79,114426,320],{"class":243},[79,114428,312],{"class":239},[79,114430,320],{"class":243},[79,114432,875],{"class":239},[19,114434,1471],{},[26,114436,114437,114441],{},[29,114438,114439,1478],{},[59,114440,342],{},[29,114442,114443,1484],{},[59,114444,1483],{},[19,114446,1487],{},[51,114448,114449],{"className":230,"code":1490,"language":232,"meta":57,"style":57},[59,114450,114451,114463,114495],{"__ignoreMap":57},[79,114452,114453,114455,114457,114459,114461],{"class":81,"line":82},[79,114454,1497],{"class":239},[79,114456,244],{"class":243},[79,114458,1011],{"class":239},[79,114460,320],{"class":243},[79,114462,1016],{"class":239},[79,114464,114465,114467,114469,114471,114473,114475,114477,114479,114481,114483,114485,114487,114489,114491,114493],{"class":81,"line":167},[79,114466,1510],{"class":239},[79,114468,1030],{"class":96},[79,114470,1033],{"class":239},[79,114472,244],{"class":243},[79,114474,1038],{"class":239},[79,114476,1041],{"class":96},[79,114478,853],{"class":243},[79,114480,1046],{"class":239},[79,114482,1049],{"class":96},[79,114484,1052],{"class":239},[79,114486,320],{"class":243},[79,114488,1057],{"class":96},[79,114490,1060],{"class":239},[79,114492,1057],{"class":96},[79,114494,253],{"class":239},[79,114496,114497,114499,114501,114503,114505,114507,114509,114511,114513,114515,114517,114519,114521,114523,114525],{"class":81,"line":178},[79,114498,1510],{"class":239},[79,114500,1072],{"class":96},[79,114502,1033],{"class":239},[79,114504,244],{"class":243},[79,114506,1038],{"class":239},[79,114508,1041],{"class":96},[79,114510,853],{"class":243},[79,114512,1046],{"class":239},[79,114514,1030],{"class":96},[79,114516,1052],{"class":239},[79,114518,320],{"class":243},[79,114520,1057],{"class":96},[79,114522,1060],{"class":239},[79,114524,1057],{"class":96},[79,114526,253],{"class":239},[19,114528,1573],{},[265,114530,1576],{"id":1576},[51,114532,114533],{"className":230,"code":1384,"language":232,"meta":57,"style":57},[59,114534,114535],{"__ignoreMap":57},[79,114536,114537,114539,114541,114543,114545],{"class":81,"line":82},[79,114538,633],{"class":243},[79,114540,636],{"class":85},[79,114542,639],{"class":239},[79,114544,642],{"class":96},[79,114546,645],{"class":239},[19,114548,1595,114549,1598,114551,1601,114553,1604],{},[59,114550,697],{},[59,114552,250],{},[59,114554,763],{},[51,114556,114557],{"className":230,"code":1607,"language":232,"meta":57,"style":57},[59,114558,114559],{"__ignoreMap":57},[79,114560,114561,114563,114565],{"class":81,"line":82},[79,114562,240],{"class":239},[79,114564,244],{"class":243},[79,114566,656],{"class":239},[19,114568,1620],{},[51,114570,114571],{"className":230,"code":1623,"language":232,"meta":57,"style":57},[59,114572,114573,114585],{"__ignoreMap":57},[79,114574,114575,114577,114579,114581,114583],{"class":81,"line":82},[79,114576,1329],{"class":243},[79,114578,665],{"class":239},[79,114580,392],{"class":243},[79,114582,670],{"class":96},[79,114584,673],{"class":239},[79,114586,114587,114589,114591,114593,114595,114597,114599,114601,114603,114605],{"class":81,"line":167},[79,114588,1642],{"class":243},[79,114590,682],{"class":96},[79,114592,685],{"class":239},[79,114594,688],{"class":243},[79,114596,691],{"class":89},[79,114598,694],{"class":96},[79,114600,697],{"class":239},[79,114602,700],{"class":96},[79,114604,703],{"class":89},[79,114606,253],{"class":239},[19,114608,1663,114609,1667,114611,1670],{},[59,114610,1666],{},[59,114612,697],{},[51,114614,114615],{"className":230,"code":1673,"language":232,"meta":57,"style":57},[59,114616,114617],{"__ignoreMap":57},[79,114618,114619,114621],{"class":81,"line":82},[79,114620,1414],{"class":243},[79,114622,714],{"class":239},[19,114624,1684,114625,1687,114627,1691],{},[59,114626,210],{},[59,114628,1690],{},[51,114630,114631],{"className":230,"code":1694,"language":232,"meta":57,"style":57},[59,114632,114633],{"__ignoreMap":57},[79,114634,114635,114637,114639],{"class":81,"line":82},[79,114636,633],{"class":243},[79,114638,732],{"class":85},[79,114640,735],{"class":239},[19,114642,1707],{},[51,114644,114645],{"className":230,"code":1710,"language":232,"meta":57,"style":57},[59,114646,114647,114659],{"__ignoreMap":57},[79,114648,114649,114651,114653,114655,114657],{"class":81,"line":82},[79,114650,284],{"class":239},[79,114652,244],{"class":243},[79,114654,746],{"class":239},[79,114656,250],{"class":89},[79,114658,253],{"class":239},[79,114660,114661,114663,114665,114667,114669],{"class":81,"line":167},[79,114662,294],{"class":239},[79,114664,244],{"class":243},[79,114666,746],{"class":239},[79,114668,763],{"class":89},[79,114670,253],{"class":239},[19,114672,1739],{},[51,114674,114675],{"className":230,"code":1407,"language":232,"meta":57,"style":57},[59,114676,114677],{"__ignoreMap":57},[79,114678,114679,114681],{"class":81,"line":82},[79,114680,1414],{"class":243},[79,114682,773],{"class":239},[19,114684,1752],{},[51,114686,114688],{"className":114687,"code":1756,"language":56,"meta":57},[54],[59,114689,1756],{"__ignoreMap":57},[51,114691,114692],{"className":230,"code":1761,"language":232,"meta":57,"style":57},[59,114693,114694],{"__ignoreMap":57},[79,114695,114696,114698,114700,114702,114704],{"class":81,"line":82},[79,114697,312],{"class":239},[79,114699,244],{"class":243},[79,114701,317],{"class":239},[79,114703,320],{"class":243},[79,114705,323],{"class":239},[19,114707,1778,114708,1782,114710,1786],{},[59,114709,1781],{},[59,114711,1785],{},[19,114713,1789],{},[51,114715,114717],{"className":114716,"code":1793,"language":56,"meta":57},[54],[59,114718,1793],{"__ignoreMap":57},[51,114720,114721],{"className":230,"code":1798,"language":232,"meta":57,"style":57},[59,114722,114723],{"__ignoreMap":57},[79,114724,114725,114727,114729,114731,114733],{"class":81,"line":82},[79,114726,1444],{"class":239},[79,114728,244],{"class":243},[79,114730,850],{"class":96},[79,114732,853],{"class":243},[79,114734,856],{"class":239},[19,114736,1815,114737,1819,114739,1823],{},[59,114738,1818],{},[59,114740,1822],{},[51,114742,114743],{"className":230,"code":1826,"language":232,"meta":57,"style":57},[59,114744,114745],{"__ignoreMap":57},[79,114746,114747,114749,114751,114753,114755,114757,114759],{"class":81,"line":82},[79,114748,1414],{"class":243},[79,114750,864],{"class":96},[79,114752,685],{"class":239},[79,114754,320],{"class":243},[79,114756,312],{"class":239},[79,114758,320],{"class":243},[79,114760,875],{"class":239},[19,114762,1847],{},[51,114764,114765],{"className":230,"code":1850,"language":232,"meta":57,"style":57},[59,114766,114767],{"__ignoreMap":57},[79,114768,114769,114771,114773],{"class":81,"line":82},[79,114770,1857],{"class":239},[79,114772,244],{"class":243},[79,114774,938],{"class":96},[19,114776,1864],{},[51,114778,114779],{"className":230,"code":1867,"language":232,"meta":57,"style":57},[59,114780,114781],{"__ignoreMap":57},[79,114782,114783,114785,114787,114789,114791,114793,114795],{"class":81,"line":82},[79,114784,1874],{"class":243},[79,114786,952],{"class":239},[79,114788,955],{"class":243},[79,114790,958],{"class":96},[79,114792,685],{"class":239},[79,114794,963],{"class":96},[79,114796,966],{"class":239},[19,114798,1889],{},[51,114800,114801],{"className":230,"code":1892,"language":232,"meta":57,"style":57},[59,114802,114803],{"__ignoreMap":57},[79,114804,114805],{"class":81,"line":82},[79,114806,1892],{"class":239},[19,114808,1901,114809,1905,114811,1909],{},[59,114810,1904],{},[59,114812,1908],{},[51,114814,114815],{"className":230,"code":1912,"language":232,"meta":57,"style":57},[59,114816,114817],{"__ignoreMap":57},[79,114818,114819,114821,114823,114825,114827],{"class":81,"line":82},[79,114820,1497],{"class":239},[79,114822,244],{"class":243},[79,114824,1011],{"class":239},[79,114826,320],{"class":243},[79,114828,1016],{"class":239},[19,114830,1929],{},[51,114832,114833],{"className":230,"code":1932,"language":232,"meta":57,"style":57},[59,114834,114835,114867],{"__ignoreMap":57},[79,114836,114837,114839,114841,114843,114845,114847,114849,114851,114853,114855,114857,114859,114861,114863,114865],{"class":81,"line":82},[79,114838,1510],{"class":239},[79,114840,1030],{"class":96},[79,114842,1033],{"class":239},[79,114844,244],{"class":243},[79,114846,1038],{"class":239},[79,114848,1041],{"class":96},[79,114850,853],{"class":243},[79,114852,1046],{"class":239},[79,114854,1049],{"class":96},[79,114856,1052],{"class":239},[79,114858,320],{"class":243},[79,114860,1057],{"class":96},[79,114862,1060],{"class":239},[79,114864,1057],{"class":96},[79,114866,253],{"class":239},[79,114868,114869,114871,114873,114875,114877,114879,114881,114883,114885,114887,114889,114891,114893,114895,114897],{"class":81,"line":167},[79,114870,1510],{"class":239},[79,114872,1072],{"class":96},[79,114874,1033],{"class":239},[79,114876,244],{"class":243},[79,114878,1038],{"class":239},[79,114880,1041],{"class":96},[79,114882,853],{"class":243},[79,114884,1046],{"class":239},[79,114886,1030],{"class":96},[79,114888,1052],{"class":239},[79,114890,320],{"class":243},[79,114892,1057],{"class":96},[79,114894,1060],{"class":239},[79,114896,1057],{"class":96},[79,114898,253],{"class":239},[19,114900,2001,114901,2005],{},[59,114902,2004],{},[51,114904,114905],{"className":230,"code":2008,"language":232,"meta":57,"style":57},[59,114906,114907],{"__ignoreMap":57},[79,114908,114909],{"class":81,"line":82},[79,114910,2008],{"class":239},[19,114912,2017],{},[51,114914,114915],{"className":230,"code":2020,"language":232,"meta":57,"style":57},[59,114916,114917],{"__ignoreMap":57},[79,114918,114919,114921,114923],{"class":81,"line":82},[79,114920,2027],{"class":239},[79,114922,244],{"class":243},[79,114924,1158],{"class":239},[19,114926,2034,114927,2038],{},[59,114928,2037],{},[14,114930,2042],{"id":2041},[19,114932,2045],{},[51,114934,114936],{"className":114935,"code":2049,"language":56,"meta":57},[54],[59,114937,2049],{"__ignoreMap":57},[19,114939,2054],{},[19,114941,2057],{},[51,114943,114945],{"className":114944,"code":2061,"language":56,"meta":57},[54],[59,114946,2061],{"__ignoreMap":57},[19,114948,2066,114949,2069],{},[59,114950,1904],{},[14,114952,2073],{"id":2072},[26,114954,114955,114957,114959,114963,114969,114975,114983],{},[29,114956,2078],{},[29,114958,2081],{},[29,114960,2084,114961,2088],{},[59,114962,2087],{},[29,114964,2091,114965,2095,114967,1604],{},[59,114966,2094],{},[59,114968,1049],{},[29,114970,2100,114971,2104,114973,2108],{},[59,114972,2103],{},[59,114974,2107],{},[29,114976,2100,114977,2113,114979,2104,114981,2120],{},[59,114978,1908],{},[59,114980,2116],{},[59,114982,2119],{},[29,114984,2123],{},[14,114986,2127],{"id":2126},[265,114988,114989],{"id":2130},[59,114990,2133],{},[19,114992,2136,114993,1905,114995,1604],{},[59,114994,2139],{},[59,114996,2142],{},[265,114998,2145],{"id":2145},[19,115000,2148],{},[26,115002,115003,115007,115009,115013],{},[29,115004,115005,2155],{},[59,115006,2094],{},[29,115008,2158],{},[29,115010,115011,2164],{},[59,115012,2163],{},[29,115014,2167,115015],{},[59,115016,2170],{},[265,115018,2173],{"id":2173},[19,115020,2176],{},[51,115022,115024],{"className":115023,"code":2180,"language":56,"meta":57},[54],[59,115025,2180],{"__ignoreMap":57},[265,115027,2186],{"id":2185},[19,115029,2189],{},[26,115031,115032,115036,115042,115048],{},[29,115033,2194,115034,1604],{},[59,115035,2170],{},[29,115037,2199,115038,1905,115040,1604],{},[59,115039,2202],{},[59,115041,2205],{},[29,115043,2208,115044,204,115046,1604],{},[59,115045,2211],{},[59,115047,2214],{},[29,115049,2217],{},[265,115051,2220],{"id":2220},[19,115053,2223],{},[51,115055,115056],{"className":383,"code":2226,"language":385,"meta":57,"style":57},[59,115057,115058],{"__ignoreMap":57},[79,115059,115060,115062,115064,115066,115068,115070,115072,115074,115076],{"class":81,"line":82},[79,115061,392],{"class":239},[79,115063,2235],{"class":395},[79,115065,2238],{"class":85},[79,115067,244],{"class":239},[79,115069,763],{"class":89},[79,115071,2245],{"class":85},[79,115073,244],{"class":239},[79,115075,2250],{"class":89},[79,115077,2253],{"class":239},[19,115079,2256,115080,2260],{},[59,115081,2259],{},[265,115083,2263],{"id":2263},[19,115085,2266],{},[14,115087,2270],{"id":2269},[19,115089,2273],{},[19,115091,2276],{},[51,115093,115095],{"className":115094,"code":2280,"language":56,"meta":57},[54],[59,115096,2280],{"__ignoreMap":57},[19,115098,2285],{},[2287,115100,2289],{},{"title":57,"searchDepth":167,"depth":167,"links":115102},[115103,115104,115105,115110,115114,115115,115116,115124],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":214,"depth":167,"text":215,"children":115106},[115107,115108,115109],{"id":267,"depth":178,"text":268},{"id":346,"depth":178,"text":346},{"id":376,"depth":178,"text":377},{"id":421,"depth":167,"text":422,"children":115111},[115112,115113],{"id":1378,"depth":178,"text":1378},{"id":1576,"depth":178,"text":1576},{"id":2041,"depth":167,"text":2042},{"id":2072,"depth":167,"text":2073},{"id":2126,"depth":167,"text":2127,"children":115117},[115118,115119,115120,115121,115122,115123],{"id":2130,"depth":178,"text":2133},{"id":2145,"depth":178,"text":2145},{"id":2173,"depth":178,"text":2173},{"id":2185,"depth":178,"text":2186},{"id":2220,"depth":178,"text":2220},{"id":2263,"depth":178,"text":2263},{"id":2269,"depth":167,"text":2270},{},{"title":5,"description":57},{"id":115128,"title":115129,"body":115130,"description":57,"extension":2314,"meta":118592,"navigation":453,"path":118593,"seo":118594,"stem":118595,"__hash__":118596},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115131,"toc":118563},[115132,115135,115137,115140,115143,115168,115171,115177,115180,115186,115188,115190,115214,115216,115234,115236,115279,115281,115308,115310,115313,115365,115368,115374,115383,115386,115424,115427,115466,115469,115477,115484,115487,115493,115495,115549,115556,115601,115604,115608,115624,115634,115636,116897,116899,116911,116913,116924,116926,116929,116950,116953,116956,116989,116995,116998,117031,117034,117037,117078,117083,117097,117100,117113,117118,117141,117143,117158,117168,117183,117190,117210,117225,117243,117246,117263,117271,117287,117293,117325,117338,117370,117380,117415,117429,117475,117489,117531,117542,117555,117561,117594,117597,117624,117634,117674,117684,117701,117708,117726,117729,117770,117783,117798,117801,117824,117827,117839,117842,117861,117866,117887,117890,117905,117908,117942,117954,117969,117972,117997,118000,118019,118022,118054,118057,118081,118087,118117,118124,118137,118140,118142,118144,118150,118153,118156,118168,118171,118173,118227,118229,118233,118239,118248,118251,118258,118260,118283,118286,118290,118292,118310,118316,118318,118351,118354,118360,118364,118367,118387,118392,118396,118403,118423,118428,118432,118435,118455,118458,118544,118548,118551,118557,118560],[10,115133,115129],{"id":115134},"_8gymnasium-风格强化学习接口基础",[14,115136,17],{"id":16},[19,115138,115139],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,115141,115142],{},"你将实现:",[51,115144,115146],{"className":230,"code":115145,"language":232,"meta":57,"style":57},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[59,115147,115148,115158],{"__ignoreMap":57},[79,115149,115150,115153,115155],{"class":81,"line":82},[79,115151,115152],{"class":239},"obs, info ",[79,115154,244],{"class":243},[79,115156,115157],{"class":239}," env.reset()\n",[79,115159,115160,115163,115165],{"class":81,"line":167},[79,115161,115162],{"class":239},"obs, reward, terminated, truncated, info ",[79,115164,244],{"class":243},[79,115166,115167],{"class":239}," env.step(action)\n",[19,115169,115170],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115172,115173,115174,115176],{},"前面章节的代码都是“脚本式”的：在 ",[59,115175,104350],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115178,115179],{},"可以先记住 Gymnasium 环境的核心交互：",[51,115181,115184],{"className":115182,"code":115183,"language":56,"meta":57},[54],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[59,115185,115183],{"__ignoreMap":57},[14,115187,67],{"id":66},[19,115189,70],{},[51,115191,115192],{"className":73,"code":74,"language":75,"meta":57,"style":57},[59,115193,115194],{"__ignoreMap":57},[79,115195,115196,115198,115200,115202,115204,115206,115208,115210,115212],{"class":81,"line":82},[79,115197,86],{"class":85},[79,115199,90],{"class":89},[79,115201,93],{"class":89},[79,115203,97],{"class":96},[79,115205,100],{"class":89},[79,115207,103],{"class":89},[79,115209,106],{"class":89},[79,115211,109],{"class":89},[79,115213,112],{"class":89},[19,115215,115],{},[51,115217,115219],{"className":73,"code":115218,"language":75,"meta":57,"style":57},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[59,115220,115221],{"__ignoreMap":57},[79,115222,115223,115225,115227,115229,115231],{"class":81,"line":82},[79,115224,125],{"class":85},[79,115226,93],{"class":89},[79,115228,130],{"class":89},[79,115230,109718],{"class":89},[79,115232,115233],{"class":89}," gymnasium\n",[19,115235,136],{},[51,115237,115239],{"className":73,"code":115238,"language":75,"meta":57,"style":57},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[59,115240,115241,115258,115267],{"__ignoreMap":57},[79,115242,115243,115245,115247,115249,115252,115254,115256],{"class":81,"line":82},[79,115244,146],{"class":85},[79,115246,149],{"class":89},[79,115248,152],{"class":96},[79,115250,115251],{"class":89}," mujoco-gym-api",[79,115253,158],{"class":89},[79,115255,161],{"class":96},[79,115257,164],{"class":96},[79,115259,115260,115262,115264],{"class":81,"line":167},[79,115261,146],{"class":85},[79,115263,172],{"class":89},[79,115265,115266],{"class":89}," mujoco-gym-api\n",[79,115268,115269,115271,115273,115275,115277],{"class":81,"line":178},[79,115270,125],{"class":85},[79,115272,93],{"class":89},[79,115274,130],{"class":89},[79,115276,109718],{"class":89},[79,115278,115233],{"class":89},[19,115280,189],{},[26,115282,115283,115293,115296,115302],{},[29,115284,115285,115286,115289,115290,1604],{},"本章使用 ",[59,115287,115288],{},"gymnasium","，不是旧版 ",[59,115291,115292],{},"gym",[29,115294,115295],{},"Gymnasium API 与旧 Gym API 有差异。",[29,115297,115298,115299,1604],{},"旧 Gym 常见返回值是 4 个: ",[59,115300,115301],{},"obs, reward, done, info",[29,115303,115304,115305,1604],{},"Gymnasium 返回值是 5 个: ",[59,115306,115307],{},"obs, reward, terminated, truncated, info",[14,115309,215],{"id":214},[19,115311,115312],{},"强化学习环境接口包含:",[2516,115314,115315,115324],{},[2519,115316,115317],{},[2522,115318,115319,115322],{},[2525,115320,115321],{"align":25876},"方法",[2525,115323,104736],{"align":25876},[2563,115325,115326,115336,115346,115356],{},[2522,115327,115328,115333],{},[2568,115329,115330],{"align":25876},[59,115331,115332],{},"reset()",[2568,115334,115335],{"align":25876},"重置环境",[2522,115337,115338,115343],{},[2568,115339,115340],{"align":25876},[59,115341,115342],{},"step(action)",[2568,115344,115345],{"align":25876},"执行动作",[2522,115347,115348,115353],{},[2568,115349,115350],{"align":25876},[59,115351,115352],{},"observation_space",[2568,115354,115355],{"align":25876},"观测空间",[2522,115357,115358,115363],{},[2568,115359,115360],{"align":25876},[59,115361,115362],{},"action_space",[2568,115364,25794],{"align":25876},[19,115366,115367],{},"一个最小环境需要完成:",[51,115369,115372],{"className":115370,"code":115371,"language":56,"meta":57},[54],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[59,115373,115371],{"__ignoreMap":57},[265,115375,115377,1905,115380,106654],{"id":115376},"terminated-和-truncated-的区别",[59,115378,115379],{},"terminated",[59,115381,115382],{},"truncated",[19,115384,115385],{},"Gymnasium 把“结束”拆成两个概念：",[2516,115387,115388,115398],{},[2519,115389,115390],{},[2522,115391,115392,115394,115396],{},[2525,115393,106590],{"align":25876},[2525,115395,102800],{"align":25876},[2525,115397,23326],{"align":25876},[2563,115399,115400,115412],{},[2522,115401,115402,115406,115409],{},[2568,115403,115404],{"align":25876},[59,115405,115379],{},[2568,115407,115408],{"align":25876},"任务自然结束",[2568,115410,115411],{"align":25876},"机械臂到达目标、机器人摔倒",[2522,115413,115414,115418,115421],{},[2568,115415,115416],{"align":25876},[59,115417,115382],{},[2568,115419,115420],{"align":25876},"因外部限制截断",[2568,115422,115423],{"align":25876},"达到最大步数、时间限制",[19,115425,115426],{},"本章中：",[51,115428,115430],{"className":230,"code":115429,"language":232,"meta":57,"style":57},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[59,115431,115432,115447],{"__ignoreMap":57},[79,115433,115434,115437,115439,115442,115444],{"class":81,"line":82},[79,115435,115436],{"class":239},"terminated ",[79,115438,244],{"class":243},[79,115440,115441],{"class":239}," dist ",[79,115443,392],{"class":243},[79,115445,115446],{"class":96}," 0.05\n",[79,115448,115449,115452,115454,115456,115459,115461,115463],{"class":81,"line":167},[79,115450,115451],{"class":239},"truncated ",[79,115453,244],{"class":243},[79,115455,40987],{"class":96},[79,115457,115458],{"class":239},".steps ",[79,115460,3935],{"class":243},[79,115462,40987],{"class":96},[79,115464,115465],{"class":239},".max_steps\n",[19,115467,115468],{},"也就是：",[26,115470,115471,115474],{},[29,115472,115473],{},"末端距离目标小于 0.05，任务成功结束。",[29,115475,115476],{},"步数超过上限，episode 被截断。",[265,115478,115480,1905,115482],{"id":115479},"observation_space-和-action_space",[59,115481,115352],{},[59,115483,115362],{},[19,115485,115486],{},"这两个对象告诉算法：",[51,115488,115491],{"className":115489,"code":115490,"language":56,"meta":57},[54],"观测长什么样\n动作允许多大\n",[59,115492,115490],{"__ignoreMap":57},[19,115494,1789],{},[51,115496,115498],{"className":230,"code":115497,"language":232,"meta":57,"style":57},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[59,115499,115500],{"__ignoreMap":57},[79,115501,115502,115504,115507,115509,115512,115515,115518,115520,115522,115525,115527,115529,115531,115533,115535,115537,115539,115542,115544,115546],{"class":81,"line":82},[79,115503,32947],{"class":96},[79,115505,115506],{"class":239},".action_space ",[79,115508,244],{"class":243},[79,115510,115511],{"class":239}," spaces.Box(",[79,115513,115514],{"class":7412},"low",[79,115516,115517],{"class":243},"=-",[79,115519,1057],{"class":96},[79,115521,1060],{"class":239},[79,115523,115524],{"class":7412},"high",[79,115526,244],{"class":243},[79,115528,1057],{"class":96},[79,115530,1060],{"class":239},[79,115532,98066],{"class":7412},[79,115534,244],{"class":243},[79,115536,685],{"class":239},[79,115538,1049],{"class":96},[79,115540,115541],{"class":239},",), ",[79,115543,95605],{"class":7412},[79,115545,244],{"class":243},[79,115547,115548],{"class":239},"np.float32)\n",[19,115550,115551,115552,115555],{},"表示动作是 2 维数组，每个值都在 ",[59,115553,115554],{},"[-1, 1]"," 范围内。",[51,115557,115559],{"className":230,"code":115558,"language":232,"meta":57,"style":57},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[59,115560,115561],{"__ignoreMap":57},[79,115562,115563,115565,115568,115570,115572,115574,115576,115579,115581,115583,115585,115587,115589,115591,115593,115595,115597,115599],{"class":81,"line":82},[79,115564,32947],{"class":96},[79,115566,115567],{"class":239},".observation_space ",[79,115569,244],{"class":243},[79,115571,115511],{"class":239},[79,115573,115514],{"class":7412},[79,115575,115517],{"class":243},[79,115577,115578],{"class":239},"np.inf, ",[79,115580,115524],{"class":7412},[79,115582,244],{"class":243},[79,115584,115578],{"class":239},[79,115586,98066],{"class":7412},[79,115588,244],{"class":243},[79,115590,685],{"class":239},[79,115592,2820],{"class":96},[79,115594,115541],{"class":239},[79,115596,95605],{"class":7412},[79,115598,244],{"class":243},[79,115600,115548],{"class":239},[19,115602,115603],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[265,115605,115607],{"id":115606},"frame_skip-是什么","frame_skip 是什么",[51,115609,115611],{"className":230,"code":115610,"language":232,"meta":57,"style":57},"self.frame_skip = 5\n",[59,115612,115613],{"__ignoreMap":57},[79,115614,115615,115617,115620,115622],{"class":81,"line":82},[79,115616,32947],{"class":96},[79,115618,115619],{"class":239},".frame_skip ",[79,115621,244],{"class":243},[79,115623,56537],{"class":96},[19,115625,115626,115627,115630,115631,115633],{},"表示外部调用一次 ",[59,115628,115629],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[59,115632,103293],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115635,422],{"id":421},[51,115637,115639],{"className":230,"code":115638,"language":232,"meta":57,"style":57},"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",[59,115640,115641,115653,115659,115669,115680,115684,115688,115696,115701,115705,115709,115713,115717,115721,115725,115729,115734,115738,115742,115746,115751,115755,115759,115763,115767,115771,115775,115779,115783,115787,115791,115795,115799,115803,115821,115836,115840,115853,115863,115878,115895,115899,115920,115939,115964,115978,115982,115992,116004,116014,116018,116060,116098,116102,116112,116128,116143,116162,116169,116173,116186,116201,116216,116229,116248,116264,116268,116309,116324,116339,116343,116382,116393,116406,116410,116420,116429,116433,116443,116458,116476,116480,116491,116508,116521,116525,116535,116539,116550,116561,116565,116579,116593,116609,116613,116626,116643,116658,116665,116669,116673,116685,116695,116713,116725,116737,116741,116749,116765,116774,116783,116791,116833,116846,116851,116855,116873,116877,116881,116893],{"__ignoreMap":57},[79,115642,115643,115645,115648,115650],{"class":81,"line":82},[79,115644,432],{"class":243},[79,115646,115647],{"class":239}," gymnasium ",[79,115649,445],{"class":243},[79,115651,115652],{"class":239}," gym\n",[79,115654,115655,115657],{"class":81,"line":167},[79,115656,432],{"class":243},[79,115658,435],{"class":239},[79,115660,115661,115663,115665,115667],{"class":81,"line":178},[79,115662,432],{"class":243},[79,115664,442],{"class":239},[79,115666,445],{"class":243},[79,115668,448],{"class":239},[79,115670,115671,115673,115675,115677],{"class":81,"line":457},[79,115672,32862],{"class":243},[79,115674,115647],{"class":239},[79,115676,432],{"class":243},[79,115678,115679],{"class":239}," spaces\n",[79,115681,115682],{"class":81,"line":462},[79,115683,454],{"emptyLinePlaceholder":453},[79,115685,115686],{"class":81,"line":474},[79,115687,454],{"emptyLinePlaceholder":453},[79,115689,115690,115692,115694],{"class":81,"line":480},[79,115691,465],{"class":96},[79,115693,468],{"class":243},[79,115695,471],{"class":89},[79,115697,115698],{"class":81,"line":486},[79,115699,115700],{"class":89},"\u003Cmujoco model=\"gym_reacher\">\n",[79,115702,115703],{"class":81,"line":491},[79,115704,483],{"class":89},[79,115706,115707],{"class":81,"line":497},[79,115708,454],{"emptyLinePlaceholder":453},[79,115710,115711],{"class":81,"line":503},[79,115712,494],{"class":89},[79,115714,115715],{"class":81,"line":509},[79,115716,506],{"class":89},[79,115718,115719],{"class":81,"line":514},[79,115720,454],{"emptyLinePlaceholder":453},[79,115722,115723],{"class":81,"line":520},[79,115724,517],{"class":89},[79,115726,115727],{"class":81,"line":526},[79,115728,523],{"class":89},[79,115730,115731],{"class":81,"line":532},[79,115732,115733],{"class":89},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[79,115735,115736],{"class":81,"line":537},[79,115737,454],{"emptyLinePlaceholder":453},[79,115739,115740],{"class":81,"line":543},[79,115741,540],{"class":89},[79,115743,115744],{"class":81,"line":549},[79,115745,546],{"class":89},[79,115747,115748],{"class":81,"line":555},[79,115749,115750],{"class":89},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[79,115752,115753],{"class":81,"line":561},[79,115754,558],{"class":89},[79,115756,115757],{"class":81,"line":567},[79,115758,564],{"class":89},[79,115760,115761],{"class":81,"line":573},[79,115762,570],{"class":89},[79,115764,115765],{"class":81,"line":579},[79,115766,576],{"class":89},[79,115768,115769],{"class":81,"line":584},[79,115770,454],{"emptyLinePlaceholder":453},[79,115772,115773],{"class":81,"line":590},[79,115774,587],{"class":89},[79,115776,115777],{"class":81,"line":596},[79,115778,593],{"class":89},[79,115780,115781],{"class":81,"line":602},[79,115782,599],{"class":89},[79,115784,115785],{"class":81,"line":608},[79,115786,605],{"class":89},[79,115788,115789],{"class":81,"line":614},[79,115790,611],{"class":89},[79,115792,115793],{"class":81,"line":620},[79,115794,617],{"class":89},[79,115796,115797],{"class":81,"line":625},[79,115798,454],{"emptyLinePlaceholder":453},[79,115800,115801],{"class":81,"line":630},[79,115802,454],{"emptyLinePlaceholder":453},[79,115804,115805,115807,115810,115812,115814,115816,115819],{"class":81,"line":648},[79,115806,16855],{"class":243},[79,115808,115809],{"class":85}," ReacherEnv",[79,115811,685],{"class":239},[79,115813,115292],{"class":85},[79,115815,2931],{"class":239},[79,115817,115818],{"class":85},"Env",[79,115820,966],{"class":239},[79,115822,115823,115826,115828,115830,115833],{"class":81,"line":659},[79,115824,115825],{"class":239},"    metadata ",[79,115827,244],{"class":243},[79,115829,6647],{"class":239},[79,115831,115832],{"class":89},"\"render_modes\"",[79,115834,115835],{"class":239},": []}\n",[79,115837,115838],{"class":81,"line":676},[79,115839,454],{"emptyLinePlaceholder":453},[79,115841,115842,115844,115846,115849,115851],{"class":81,"line":708},[79,115843,32925],{"class":243},[79,115845,32928],{"class":96},[79,115847,115848],{"class":239},"(self) -> ",[79,115850,899],{"class":96},[79,115852,673],{"class":239},[79,115854,115855,115857,115859,115861],{"class":81,"line":717},[79,115856,32941],{"class":96},[79,115858,19400],{"class":239},[79,115860,32953],{"class":96},[79,115862,4191],{"class":239},[79,115864,115865,115867,115870,115872,115874,115876],{"class":81,"line":722},[79,115866,32969],{"class":96},[79,115868,115869],{"class":239},".model ",[79,115871,244],{"class":243},[79,115873,912],{"class":239},[79,115875,465],{"class":96},[79,115877,253],{"class":239},[79,115879,115880,115882,115885,115887,115890,115892],{"class":81,"line":727},[79,115881,32969],{"class":96},[79,115883,115884],{"class":239},".data ",[79,115886,244],{"class":243},[79,115888,115889],{"class":239}," mujoco.MjData(",[79,115891,32947],{"class":96},[79,115893,115894],{"class":239},".model)\n",[79,115896,115897],{"class":81,"line":738},[79,115898,454],{"emptyLinePlaceholder":453},[79,115900,115901,115903,115906,115908,115911,115913,115916,115918],{"class":81,"line":753},[79,115902,32969],{"class":96},[79,115904,115905],{"class":239},".tip_site_id ",[79,115907,244],{"class":243},[79,115909,115910],{"class":239}," mujoco.mj_name2id(",[79,115912,32947],{"class":96},[79,115914,115915],{"class":239},".model, mujoco.mjtObj.mjOBJ_SITE, ",[79,115917,250],{"class":89},[79,115919,253],{"class":239},[79,115921,115922,115924,115927,115929,115931,115933,115935,115937],{"class":81,"line":768},[79,115923,32969],{"class":96},[79,115925,115926],{"class":239},".target_site_id ",[79,115928,244],{"class":243},[79,115930,115910],{"class":239},[79,115932,32947],{"class":96},[79,115934,115915],{"class":239},[79,115936,763],{"class":89},[79,115938,253],{"class":239},[79,115940,115941,115943,115945,115947,115949,115951,115954,115956,115958,115960,115962],{"class":81,"line":776},[79,115942,1132],{"class":243},[79,115944,40987],{"class":96},[79,115946,115905],{"class":239},[79,115948,392],{"class":243},[79,115950,670],{"class":96},[79,115952,115953],{"class":243}," or",[79,115955,40987],{"class":96},[79,115957,115926],{"class":239},[79,115959,392],{"class":243},[79,115961,670],{"class":96},[79,115963,673],{"class":239},[79,115965,115966,115969,115971,115973,115976],{"class":81,"line":781},[79,115967,115968],{"class":243},"            raise",[79,115970,682],{"class":96},[79,115972,685],{"class":239},[79,115974,115975],{"class":89},"\"required sites not found\"",[79,115977,253],{"class":239},[79,115979,115980],{"class":81,"line":786},[79,115981,454],{"emptyLinePlaceholder":453},[79,115983,115984,115986,115988,115990],{"class":81,"line":802},[79,115985,32969],{"class":96},[79,115987,115619],{"class":239},[79,115989,244],{"class":243},[79,115991,56537],{"class":96},[79,115993,115994,115996,115999,116001],{"class":81,"line":815},[79,115995,32969],{"class":96},[79,115997,115998],{"class":239},".max_steps ",[79,116000,244],{"class":243},[79,116002,116003],{"class":96}," 200\n",[79,116005,116006,116008,116010,116012],{"class":81,"line":828},[79,116007,32969],{"class":96},[79,116009,115458],{"class":239},[79,116011,244],{"class":243},[79,116013,49447],{"class":96},[79,116015,116016],{"class":81,"line":842},[79,116017,454],{"emptyLinePlaceholder":453},[79,116019,116020,116022,116024,116026,116028,116030,116032,116034,116036,116038,116040,116042,116044,116046,116048,116050,116052,116054,116056,116058],{"class":81,"line":859},[79,116021,32969],{"class":96},[79,116023,115506],{"class":239},[79,116025,244],{"class":243},[79,116027,115511],{"class":239},[79,116029,115514],{"class":7412},[79,116031,115517],{"class":243},[79,116033,1057],{"class":96},[79,116035,1060],{"class":239},[79,116037,115524],{"class":7412},[79,116039,244],{"class":243},[79,116041,1057],{"class":96},[79,116043,1060],{"class":239},[79,116045,98066],{"class":7412},[79,116047,244],{"class":243},[79,116049,685],{"class":239},[79,116051,1049],{"class":96},[79,116053,115541],{"class":239},[79,116055,95605],{"class":7412},[79,116057,244],{"class":243},[79,116059,115548],{"class":239},[79,116061,116062,116064,116066,116068,116070,116072,116074,116076,116078,116080,116082,116084,116086,116088,116090,116092,116094,116096],{"class":81,"line":878},[79,116063,32969],{"class":96},[79,116065,115567],{"class":239},[79,116067,244],{"class":243},[79,116069,115511],{"class":239},[79,116071,115514],{"class":7412},[79,116073,115517],{"class":243},[79,116075,115578],{"class":239},[79,116077,115524],{"class":7412},[79,116079,244],{"class":243},[79,116081,115578],{"class":239},[79,116083,98066],{"class":7412},[79,116085,244],{"class":243},[79,116087,685],{"class":239},[79,116089,2820],{"class":96},[79,116091,115541],{"class":239},[79,116093,95605],{"class":7412},[79,116095,244],{"class":243},[79,116097,115548],{"class":239},[79,116099,116100],{"class":81,"line":883},[79,116101,454],{"emptyLinePlaceholder":453},[79,116103,116104,116106,116109],{"class":81,"line":888},[79,116105,32925],{"class":243},[79,116107,116108],{"class":85}," _get_obs",[79,116110,116111],{"class":239},"(self) -> np.ndarray:\n",[79,116113,116114,116116,116118,116120,116123,116125],{"class":81,"line":904},[79,116115,978],{"class":239},[79,116117,244],{"class":243},[79,116119,40987],{"class":96},[79,116121,116122],{"class":239},".data.site_xpos[",[79,116124,32947],{"class":96},[79,116126,116127],{"class":239},".tip_site_id].copy()\n",[79,116129,116130,116132,116134,116136,116138,116140],{"class":81,"line":919},[79,116131,992],{"class":239},[79,116133,244],{"class":243},[79,116135,40987],{"class":96},[79,116137,116122],{"class":239},[79,116139,32947],{"class":96},[79,116141,116142],{"class":239},".target_site_id].copy()\n",[79,116144,116145,116147,116149,116152,116154,116157,116159],{"class":81,"line":930},[79,116146,112186],{"class":239},[79,116148,244],{"class":243},[79,116150,116151],{"class":239}," np.concatenate([",[79,116153,32947],{"class":96},[79,116155,116156],{"class":239},".data.qpos.copy(), ",[79,116158,32947],{"class":96},[79,116160,116161],{"class":239},".data.qvel.copy(), tip, target])\n",[79,116163,116164,116166],{"class":81,"line":941},[79,116165,16913],{"class":243},[79,116167,116168],{"class":239}," obs.astype(np.float32)\n",[79,116170,116171],{"class":81,"line":946},[79,116172,454],{"emptyLinePlaceholder":453},[79,116174,116175,116177,116180,116182,116184],{"class":81,"line":969},[79,116176,32925],{"class":243},[79,116178,116179],{"class":85}," _get_reward",[79,116181,115848],{"class":239},[79,116183,797],{"class":96},[79,116185,673],{"class":239},[79,116187,116188,116190,116192,116194,116196,116198],{"class":81,"line":975},[79,116189,978],{"class":239},[79,116191,244],{"class":243},[79,116193,40987],{"class":96},[79,116195,116122],{"class":239},[79,116197,32947],{"class":96},[79,116199,116200],{"class":239},".tip_site_id]\n",[79,116202,116203,116205,116207,116209,116211,116213],{"class":81,"line":989},[79,116204,992],{"class":239},[79,116206,244],{"class":243},[79,116208,40987],{"class":96},[79,116210,116122],{"class":239},[79,116212,32947],{"class":96},[79,116214,116215],{"class":239},".target_site_id]\n",[79,116217,116218,116221,116223,116225,116227],{"class":81,"line":1003},[79,116219,116220],{"class":239},"        dist ",[79,116222,244],{"class":243},[79,116224,317],{"class":239},[79,116226,320],{"class":243},[79,116228,323],{"class":239},[79,116230,116231,116234,116236,116238,116240,116243,116245],{"class":81,"line":1019},[79,116232,116233],{"class":239},"        control_cost ",[79,116235,244],{"class":243},[79,116237,850],{"class":96},[79,116239,853],{"class":243},[79,116241,116242],{"class":239}," np.sum(np.square(",[79,116244,32947],{"class":96},[79,116246,116247],{"class":239},".data.ctrl))\n",[79,116249,116250,116252,116254,116256,116258,116260,116262],{"class":81,"line":1024},[79,116251,16913],{"class":243},[79,116253,864],{"class":96},[79,116255,685],{"class":239},[79,116257,320],{"class":243},[79,116259,312],{"class":239},[79,116261,320],{"class":243},[79,116263,875],{"class":239},[79,116265,116266],{"class":81,"line":1067},[79,116267,454],{"emptyLinePlaceholder":453},[79,116269,116270,116272,116275,116278,116280,116283,116285,116287,116289,116291,116293,116296,116299,116301,116303,116305,116307],{"class":81,"line":1101},[79,116271,32925],{"class":243},[79,116273,116274],{"class":85}," reset",[79,116276,116277],{"class":239},"(self, ",[79,116279,2829],{"class":243},[79,116281,116282],{"class":239},", seed: ",[79,116284,2390],{"class":96},[79,116286,27245],{"class":243},[79,116288,41047],{"class":96},[79,116290,468],{"class":243},[79,116292,41047],{"class":96},[79,116294,116295],{"class":239},", options: ",[79,116297,116298],{"class":96},"dict",[79,116300,27245],{"class":243},[79,116302,41047],{"class":96},[79,116304,468],{"class":243},[79,116306,41047],{"class":96},[79,116308,966],{"class":239},[79,116310,116311,116313,116316,116319,116321],{"class":81,"line":1106},[79,116312,32941],{"class":96},[79,116314,116315],{"class":239},"().reset(",[79,116317,116318],{"class":7412},"seed",[79,116320,244],{"class":243},[79,116322,116323],{"class":239},"seed)\n",[79,116325,116326,116329,116331,116334,116336],{"class":81,"line":1112},[79,116327,116328],{"class":239},"        mujoco.mj_resetData(",[79,116330,32947],{"class":96},[79,116332,116333],{"class":239},".model, ",[79,116335,32947],{"class":96},[79,116337,116338],{"class":239},".data)\n",[79,116340,116341],{"class":81,"line":1124},[79,116342,454],{"emptyLinePlaceholder":453},[79,116344,116345,116347,116350,116352,116354,116357,116359,116361,116363,116365,116367,116369,116371,116373,116375,116377,116379],{"class":81,"line":1129},[79,116346,32969],{"class":96},[79,116348,116349],{"class":239},".data.qpos[:] ",[79,116351,244],{"class":243},[79,116353,40987],{"class":96},[79,116355,116356],{"class":239},".np_random.uniform(",[79,116358,115514],{"class":7412},[79,116360,115517],{"class":243},[79,116362,88315],{"class":96},[79,116364,1060],{"class":239},[79,116366,115524],{"class":7412},[79,116368,244],{"class":243},[79,116370,88315],{"class":96},[79,116372,1060],{"class":239},[79,116374,33615],{"class":7412},[79,116376,244],{"class":243},[79,116378,32947],{"class":96},[79,116380,116381],{"class":239},".model.nq)\n",[79,116383,116384,116386,116389,116391],{"class":81,"line":1150},[79,116385,32969],{"class":96},[79,116387,116388],{"class":239},".data.qvel[:] ",[79,116390,244],{"class":243},[79,116392,938],{"class":96},[79,116394,116395,116398,116400,116402,116404],{"class":81,"line":1161},[79,116396,116397],{"class":239},"        mujoco.mj_forward(",[79,116399,32947],{"class":96},[79,116401,116333],{"class":239},[79,116403,32947],{"class":96},[79,116405,116338],{"class":239},[79,116407,116408],{"class":81,"line":1175},[79,116409,454],{"emptyLinePlaceholder":453},[79,116411,116412,116414,116416,116418],{"class":81,"line":1194},[79,116413,32969],{"class":96},[79,116415,115458],{"class":239},[79,116417,244],{"class":243},[79,116419,49447],{"class":96},[79,116421,116422,116424,116426],{"class":81,"line":1211},[79,116423,16913],{"class":243},[79,116425,40987],{"class":96},[79,116427,116428],{"class":239},"._get_obs(), {}\n",[79,116430,116431],{"class":81,"line":1228},[79,116432,454],{"emptyLinePlaceholder":453},[79,116434,116435,116437,116440],{"class":81,"line":1246},[79,116436,32925],{"class":243},[79,116438,116439],{"class":85}," step",[79,116441,116442],{"class":239},"(self, action):\n",[79,116444,116445,116447,116449,116452,116454,116456],{"class":81,"line":1251},[79,116446,112226],{"class":239},[79,116448,244],{"class":243},[79,116450,116451],{"class":239}," np.asarray(action, ",[79,116453,95605],{"class":7412},[79,116455,244],{"class":243},[79,116457,115548],{"class":239},[79,116459,116460,116462,116464,116466,116468,116471,116473],{"class":81,"line":1274},[79,116461,112226],{"class":239},[79,116463,244],{"class":243},[79,116465,109454],{"class":239},[79,116467,32947],{"class":96},[79,116469,116470],{"class":239},".action_space.low, ",[79,116472,32947],{"class":96},[79,116474,116475],{"class":239},".action_space.high)\n",[79,116477,116478],{"class":81,"line":1296},[79,116479,454],{"emptyLinePlaceholder":453},[79,116481,116482,116484,116487,116489],{"class":81,"line":1316},[79,116483,32969],{"class":96},[79,116485,116486],{"class":239},".data.ctrl[:] ",[79,116488,244],{"class":243},[79,116490,109477],{"class":239},[79,116492,116493,116495,116497,116499,116501,116503,116505],{"class":81,"line":1321},[79,116494,5606],{"class":243},[79,116496,103564],{"class":239},[79,116498,955],{"class":243},[79,116500,958],{"class":96},[79,116502,685],{"class":239},[79,116504,32947],{"class":96},[79,116506,116507],{"class":239},".frame_skip):\n",[79,116509,116510,116513,116515,116517,116519],{"class":81,"line":1326},[79,116511,116512],{"class":239},"            mujoco.mj_step(",[79,116514,32947],{"class":96},[79,116516,116333],{"class":239},[79,116518,32947],{"class":96},[79,116520,116338],{"class":239},[79,116522,116523],{"class":81,"line":1342},[79,116524,454],{"emptyLinePlaceholder":453},[79,116526,116527,116529,116531,116533],{"class":81,"line":18985},[79,116528,32969],{"class":96},[79,116530,115458],{"class":239},[79,116532,1118],{"class":243},[79,116534,57809],{"class":96},[79,116536,116537],{"class":81,"line":18990},[79,116538,454],{"emptyLinePlaceholder":453},[79,116540,116541,116543,116545,116547],{"class":81,"line":18995},[79,116542,112186],{"class":239},[79,116544,244],{"class":243},[79,116546,40987],{"class":96},[79,116548,116549],{"class":239},"._get_obs()\n",[79,116551,116552,116554,116556,116558],{"class":81,"line":19009},[79,116553,112291],{"class":239},[79,116555,244],{"class":243},[79,116557,40987],{"class":96},[79,116559,116560],{"class":239},"._get_reward()\n",[79,116562,116563],{"class":81,"line":19021},[79,116564,454],{"emptyLinePlaceholder":453},[79,116566,116567,116569,116571,116573,116575,116577],{"class":81,"line":19026},[79,116568,978],{"class":239},[79,116570,244],{"class":243},[79,116572,40987],{"class":96},[79,116574,116122],{"class":239},[79,116576,32947],{"class":96},[79,116578,116200],{"class":239},[79,116580,116581,116583,116585,116587,116589,116591],{"class":81,"line":19039},[79,116582,992],{"class":239},[79,116584,244],{"class":243},[79,116586,40987],{"class":96},[79,116588,116122],{"class":239},[79,116590,32947],{"class":96},[79,116592,116215],{"class":239},[79,116594,116595,116597,116599,116601,116604,116606],{"class":81,"line":19044},[79,116596,116220],{"class":239},[79,116598,244],{"class":243},[79,116600,864],{"class":96},[79,116602,116603],{"class":239},"(np.linalg.norm(tip ",[79,116605,320],{"class":243},[79,116607,116608],{"class":239}," target))\n",[79,116610,116611],{"class":81,"line":19049},[79,116612,454],{"emptyLinePlaceholder":453},[79,116614,116615,116618,116620,116622,116624],{"class":81,"line":19054},[79,116616,116617],{"class":239},"        terminated ",[79,116619,244],{"class":243},[79,116621,115441],{"class":239},[79,116623,392],{"class":243},[79,116625,115446],{"class":96},[79,116627,116628,116631,116633,116635,116637,116639,116641],{"class":81,"line":19067},[79,116629,116630],{"class":239},"        truncated ",[79,116632,244],{"class":243},[79,116634,40987],{"class":96},[79,116636,115458],{"class":239},[79,116638,3935],{"class":243},[79,116640,40987],{"class":96},[79,116642,115465],{"class":239},[79,116644,116645,116648,116650,116652,116655],{"class":81,"line":19072},[79,116646,116647],{"class":239},"        info ",[79,116649,244],{"class":243},[79,116651,6647],{"class":239},[79,116653,116654],{"class":89},"\"distance\"",[79,116656,116657],{"class":239},": dist}\n",[79,116659,116660,116662],{"class":81,"line":34748},[79,116661,16913],{"class":243},[79,116663,116664],{"class":239}," obs, reward, terminated, truncated, info\n",[79,116666,116667],{"class":81,"line":34754},[79,116668,454],{"emptyLinePlaceholder":453},[79,116670,116671],{"class":81,"line":34760},[79,116672,454],{"emptyLinePlaceholder":453},[79,116674,116675,116677,116679,116681,116683],{"class":81,"line":34766},[79,116676,633],{"class":243},[79,116678,893],{"class":85},[79,116680,896],{"class":239},[79,116682,899],{"class":96},[79,116684,673],{"class":239},[79,116686,116687,116690,116692],{"class":81,"line":34772},[79,116688,116689],{"class":239},"    env ",[79,116691,244],{"class":243},[79,116693,116694],{"class":239}," ReacherEnv()\n",[79,116696,116697,116700,116702,116705,116707,116709,116711],{"class":81,"line":34783},[79,116698,116699],{"class":239},"    obs, info ",[79,116701,244],{"class":243},[79,116703,116704],{"class":239}," env.reset(",[79,116706,116318],{"class":7412},[79,116708,244],{"class":243},[79,116710,1030],{"class":96},[79,116712,253],{"class":239},[79,116714,116715,116717,116719,116722],{"class":81,"line":34789},[79,116716,1254],{"class":96},[79,116718,685],{"class":239},[79,116720,116721],{"class":89},"\"initial obs shape:\"",[79,116723,116724],{"class":239},", obs.shape)\n",[79,116726,116727,116729,116731,116734],{"class":81,"line":34809},[79,116728,1254],{"class":96},[79,116730,685],{"class":239},[79,116732,116733],{"class":89},"\"initial info:\"",[79,116735,116736],{"class":239},", info)\n",[79,116738,116739],{"class":81,"line":34815},[79,116740,454],{"emptyLinePlaceholder":453},[79,116742,116743,116745,116747],{"class":81,"line":34826},[79,116744,933],{"class":239},[79,116746,244],{"class":243},[79,116748,938],{"class":96},[79,116750,116751,116753,116755,116757,116759,116761,116763],{"class":81,"line":34832},[79,116752,949],{"class":243},[79,116754,952],{"class":239},[79,116756,955],{"class":243},[79,116758,958],{"class":96},[79,116760,685],{"class":239},[79,116762,3073],{"class":96},[79,116764,966],{"class":239},[79,116766,116767,116769,116771],{"class":81,"line":34838},[79,116768,112226],{"class":239},[79,116770,244],{"class":243},[79,116772,116773],{"class":239}," env.action_space.sample()\n",[79,116775,116776,116779,116781],{"class":81,"line":34844},[79,116777,116778],{"class":239},"        obs, reward, terminated, truncated, info ",[79,116780,244],{"class":243},[79,116782,115167],{"class":239},[79,116784,116785,116787,116789],{"class":81,"line":34850},[79,116786,1115],{"class":239},[79,116788,1118],{"class":243},[79,116790,112305],{"class":239},[79,116792,116793,116795,116797,116799,116801,116804,116806,116808,116811,116813,116815,116818,116820,116822,116825,116827,116829,116831],{"class":81,"line":34856},[79,116794,34566],{"class":96},[79,116796,685],{"class":239},[79,116798,1169],{"class":89},[79,116800,112336],{"class":239},[79,116802,116803],{"class":89},"\"reward:\"",[79,116805,1060],{"class":239},[79,116807,1264],{"class":96},[79,116809,116810],{"class":239},"(reward, ",[79,116812,1188],{"class":96},[79,116814,1289],{"class":239},[79,116816,116817],{"class":89},"\"distance:\"",[79,116819,1060],{"class":239},[79,116821,1264],{"class":96},[79,116823,116824],{"class":239},"(info[",[79,116826,116654],{"class":89},[79,116828,1052],{"class":239},[79,116830,1188],{"class":96},[79,116832,1191],{"class":239},[79,116834,116835,116837,116840,116843],{"class":81,"line":34862},[79,116836,1132],{"class":243},[79,116838,116839],{"class":239}," terminated ",[79,116841,116842],{"class":243},"or",[79,116844,116845],{"class":239}," truncated:\n",[79,116847,116848],{"class":81,"line":34868},[79,116849,116850],{"class":243},"            break\n",[79,116852,116853],{"class":81,"line":34888},[79,116854,454],{"emptyLinePlaceholder":453},[79,116856,116857,116859,116861,116863,116865,116867,116869,116871],{"class":81,"line":34894},[79,116858,1254],{"class":96},[79,116860,685],{"class":239},[79,116862,1259],{"class":89},[79,116864,1060],{"class":239},[79,116866,1264],{"class":96},[79,116868,1267],{"class":239},[79,116870,1188],{"class":96},[79,116872,1191],{"class":239},[79,116874,116875],{"class":81,"line":34910},[79,116876,454],{"emptyLinePlaceholder":453},[79,116878,116879],{"class":81,"line":34916},[79,116880,454],{"emptyLinePlaceholder":453},[79,116882,116883,116885,116887,116889,116891],{"class":81,"line":34930},[79,116884,1329],{"class":243},[79,116886,1332],{"class":96},[79,116888,1143],{"class":243},[79,116890,1337],{"class":89},[79,116892,673],{"class":239},[79,116894,116895],{"class":81,"line":34936},[79,116896,1345],{"class":239},[19,116898,1348],{},[51,116900,116902],{"className":73,"code":116901,"language":75,"meta":57,"style":57},"touch ch8_gym_env.py\n",[59,116903,116904],{"__ignoreMap":57},[79,116905,116906,116908],{"class":81,"line":82},[79,116907,1358],{"class":85},[79,116909,116910],{"class":89}," ch8_gym_env.py\n",[19,116912,1364],{},[51,116914,116916],{"className":73,"code":116915,"language":75,"meta":57,"style":57},"python ch8_gym_env.py\n",[59,116917,116918],{"__ignoreMap":57},[79,116919,116920,116922],{"class":81,"line":82},[79,116921,232],{"class":85},[79,116923,116910],{"class":89},[265,116925,1378],{"id":1378},[19,116927,116928],{},"继承 Gymnasium 环境：",[51,116930,116932],{"className":230,"code":116931,"language":232,"meta":57,"style":57},"class ReacherEnv(gym.Env):\n",[59,116933,116934],{"__ignoreMap":57},[79,116935,116936,116938,116940,116942,116944,116946,116948],{"class":81,"line":82},[79,116937,16855],{"class":243},[79,116939,115809],{"class":85},[79,116941,685],{"class":239},[79,116943,115292],{"class":85},[79,116945,2931],{"class":239},[79,116947,115818],{"class":85},[79,116949,966],{"class":239},[19,116951,116952],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116954,116955],{},"初始化模型：",[51,116957,116959],{"className":230,"code":116958,"language":232,"meta":57,"style":57},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[59,116960,116961,116975],{"__ignoreMap":57},[79,116962,116963,116965,116967,116969,116971,116973],{"class":81,"line":82},[79,116964,32947],{"class":96},[79,116966,115869],{"class":239},[79,116968,244],{"class":243},[79,116970,912],{"class":239},[79,116972,465],{"class":96},[79,116974,253],{"class":239},[79,116976,116977,116979,116981,116983,116985,116987],{"class":81,"line":167},[79,116978,32947],{"class":96},[79,116980,115884],{"class":239},[79,116982,244],{"class":243},[79,116984,115889],{"class":239},[79,116986,32947],{"class":96},[79,116988,115894],{"class":239},[19,116990,116991,116992,116994],{},"这和前面章节一样，只是现在放到了类的 ",[59,116993,32953],{}," 里。",[19,116996,116997],{},"缓存 site ID：",[51,116999,117001],{"className":230,"code":117000,"language":232,"meta":57,"style":57},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[59,117002,117003,117017],{"__ignoreMap":57},[79,117004,117005,117007,117009,117011,117013,117015],{"class":81,"line":82},[79,117006,32947],{"class":96},[79,117008,115905],{"class":239},[79,117010,244],{"class":243},[79,117012,115910],{"class":239},[79,117014,91659],{"class":96},[79,117016,253],{"class":239},[79,117018,117019,117021,117023,117025,117027,117029],{"class":81,"line":167},[79,117020,32947],{"class":96},[79,117022,115926],{"class":239},[79,117024,244],{"class":243},[79,117026,115910],{"class":239},[79,117028,91659],{"class":96},[79,117030,253],{"class":239},[19,117032,117033],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,117035,117036],{},"reset：",[51,117038,117040],{"className":230,"code":117039,"language":232,"meta":57,"style":57},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[59,117041,117042],{"__ignoreMap":57},[79,117043,117044,117046,117048,117050,117052,117054,117056,117058,117060,117062,117064,117066,117068,117070,117072,117074,117076],{"class":81,"line":82},[79,117045,633],{"class":243},[79,117047,116274],{"class":85},[79,117049,116277],{"class":239},[79,117051,2829],{"class":243},[79,117053,116282],{"class":239},[79,117055,2390],{"class":96},[79,117057,27245],{"class":243},[79,117059,41047],{"class":96},[79,117061,468],{"class":243},[79,117063,41047],{"class":96},[79,117065,116295],{"class":239},[79,117067,116298],{"class":96},[79,117069,27245],{"class":243},[79,117071,41047],{"class":96},[79,117073,468],{"class":243},[79,117075,41047],{"class":96},[79,117077,966],{"class":239},[19,117079,117080,117082],{},[59,117081,72164],{}," 做四件事：",[26,117084,117085,117088,117091,117094],{},[29,117086,117087],{},"设置随机种子。",[29,117089,117090],{},"重置 MuJoCo data。",[29,117092,117093],{},"随机初始化关节角。",[29,117095,117096],{},"返回初始观测和 info。",[19,117098,117099],{},"step：",[51,117101,117103],{"className":230,"code":117102,"language":232,"meta":57,"style":57},"def step(self, action):\n",[59,117104,117105],{"__ignoreMap":57},[79,117106,117107,117109,117111],{"class":81,"line":82},[79,117108,633],{"class":243},[79,117110,116439],{"class":85},[79,117112,116442],{"class":239},[19,117114,117115,117117],{},[59,117116,109142],{}," 做六件事：",[26,117119,117120,117123,117129,117132,117135,117138],{},[29,117121,117122],{},"检查并裁剪 action。",[29,117124,117125,117126,1604],{},"写入 ",[59,117127,117128],{},"self.data.ctrl",[29,117130,117131],{},"连续推进若干个 MuJoCo 物理步。",[29,117133,117134],{},"计算新观测。",[29,117136,117137],{},"计算奖励和结束条件。",[29,117139,117140],{},"返回 Gymnasium 标准五元组。",[265,117142,1576],{"id":1576},[51,117144,117146],{"className":230,"code":117145,"language":232,"meta":57,"style":57},"import gymnasium as gym\n",[59,117147,117148],{"__ignoreMap":57},[79,117149,117150,117152,117154,117156],{"class":81,"line":82},[79,117151,432],{"class":243},[79,117153,115647],{"class":239},[79,117155,445],{"class":243},[79,117157,115652],{"class":239},[19,117159,117160,117161,117163,117164,117167],{},"导入 Gymnasium，并起别名 ",[59,117162,115292],{},"。后面写 ",[59,117165,117166],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[51,117169,117171],{"className":230,"code":117170,"language":232,"meta":57,"style":57},"from gymnasium import spaces\n",[59,117172,117173],{"__ignoreMap":57},[79,117174,117175,117177,117179,117181],{"class":81,"line":82},[79,117176,32862],{"class":243},[79,117178,115647],{"class":239},[79,117180,432],{"class":243},[79,117182,115679],{"class":239},[19,117184,117185,117186,117189],{},"导入空间定义工具。",[59,117187,117188],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[51,117191,117192],{"className":230,"code":116931,"language":232,"meta":57,"style":57},[59,117193,117194],{"__ignoreMap":57},[79,117195,117196,117198,117200,117202,117204,117206,117208],{"class":81,"line":82},[79,117197,16855],{"class":243},[79,117199,115809],{"class":85},[79,117201,685],{"class":239},[79,117203,115292],{"class":85},[79,117205,2931],{"class":239},[79,117207,115818],{"class":85},[79,117209,966],{"class":239},[19,117211,117212,117213,117216,117217,117219,117220,1905,117222,117224],{},"定义一个类，名字叫 ",[59,117214,117215],{},"ReacherEnv","。括号里的 ",[59,117218,117166],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[59,117221,72164],{},[59,117223,109142],{}," 这两个核心方法。",[51,117226,117228],{"className":230,"code":117227,"language":232,"meta":57,"style":57},"metadata = {\"render_modes\": []}\n",[59,117229,117230],{"__ignoreMap":57},[79,117231,117232,117235,117237,117239,117241],{"class":81,"line":82},[79,117233,117234],{"class":239},"metadata ",[79,117236,244],{"class":243},[79,117238,6647],{"class":239},[79,117240,115832],{"class":89},[79,117242,115835],{"class":239},[19,117244,117245],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[51,117247,117249],{"className":230,"code":117248,"language":232,"meta":57,"style":57},"def __init__(self) -> None:\n",[59,117250,117251],{"__ignoreMap":57},[79,117252,117253,117255,117257,117259,117261],{"class":81,"line":82},[79,117254,633],{"class":243},[79,117256,32928],{"class":96},[79,117258,115848],{"class":239},[79,117260,899],{"class":96},[79,117262,673],{"class":239},[19,117264,117265,117267,117268,1604],{},[59,117266,32953],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[59,117269,117270],{},"env = ReacherEnv()",[51,117272,117274],{"className":230,"code":117273,"language":232,"meta":57,"style":57},"super().__init__()\n",[59,117275,117276],{"__ignoreMap":57},[79,117277,117278,117281,117283,117285],{"class":81,"line":82},[79,117279,117280],{"class":96},"super",[79,117282,19400],{"class":239},[79,117284,32953],{"class":96},[79,117286,4191],{"class":239},[19,117288,117289,117290,117292],{},"调用父类 ",[59,117291,117166],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[51,117294,117295],{"className":230,"code":116958,"language":232,"meta":57,"style":57},[59,117296,117297,117311],{"__ignoreMap":57},[79,117298,117299,117301,117303,117305,117307,117309],{"class":81,"line":82},[79,117300,32947],{"class":96},[79,117302,115869],{"class":239},[79,117304,244],{"class":243},[79,117306,912],{"class":239},[79,117308,465],{"class":96},[79,117310,253],{"class":239},[79,117312,117313,117315,117317,117319,117321,117323],{"class":81,"line":167},[79,117314,32947],{"class":96},[79,117316,115884],{"class":239},[79,117318,244],{"class":243},[79,117320,115889],{"class":239},[79,117322,32947],{"class":96},[79,117324,115894],{"class":239},[19,117326,117327,117328,117330,117331,1905,117334,117337],{},"把 MuJoCo 模型和状态保存到 ",[59,117329,32947],{}," 上。",[59,117332,117333],{},"self.model",[59,117335,117336],{},"self.data"," 表示这个环境对象自己的模型和状态。",[51,117339,117340],{"className":230,"code":117000,"language":232,"meta":57,"style":57},[59,117341,117342,117356],{"__ignoreMap":57},[79,117343,117344,117346,117348,117350,117352,117354],{"class":81,"line":82},[79,117345,32947],{"class":96},[79,117347,115905],{"class":239},[79,117349,244],{"class":243},[79,117351,115910],{"class":239},[79,117353,91659],{"class":96},[79,117355,253],{"class":239},[79,117357,117358,117360,117362,117364,117366,117368],{"class":81,"line":167},[79,117359,32947],{"class":96},[79,117361,115926],{"class":239},[79,117363,244],{"class":243},[79,117365,115910],{"class":239},[79,117367,91659],{"class":96},[79,117369,253],{"class":239},[19,117371,117372,117373,1905,117376,117379],{},"提前查好 tip 和 target 的 site ID。这样 ",[59,117374,117375],{},"_get_obs",[59,117377,117378],{},"_get_reward"," 里就不用每次按名字查找。",[51,117381,117383],{"className":230,"code":117382,"language":232,"meta":57,"style":57},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[59,117384,117385,117395,117405],{"__ignoreMap":57},[79,117386,117387,117389,117391,117393],{"class":81,"line":82},[79,117388,32947],{"class":96},[79,117390,115619],{"class":239},[79,117392,244],{"class":243},[79,117394,56537],{"class":96},[79,117396,117397,117399,117401,117403],{"class":81,"line":167},[79,117398,32947],{"class":96},[79,117400,115998],{"class":239},[79,117402,244],{"class":243},[79,117404,116003],{"class":96},[79,117406,117407,117409,117411,117413],{"class":81,"line":178},[79,117408,32947],{"class":96},[79,117410,115458],{"class":239},[79,117412,244],{"class":243},[79,117414,49447],{"class":96},[19,117416,117417,117420,117421,117424,117425,117428],{},[59,117418,117419],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[59,117422,117423],{},"max_steps"," 是一个 episode 最多运行多少步。",[59,117426,117427],{},"steps"," 记录当前 episode 已经走了多少步。",[51,117430,117431],{"className":230,"code":115497,"language":232,"meta":57,"style":57},[59,117432,117433],{"__ignoreMap":57},[79,117434,117435,117437,117439,117441,117443,117445,117447,117449,117451,117453,117455,117457,117459,117461,117463,117465,117467,117469,117471,117473],{"class":81,"line":82},[79,117436,32947],{"class":96},[79,117438,115506],{"class":239},[79,117440,244],{"class":243},[79,117442,115511],{"class":239},[79,117444,115514],{"class":7412},[79,117446,115517],{"class":243},[79,117448,1057],{"class":96},[79,117450,1060],{"class":239},[79,117452,115524],{"class":7412},[79,117454,244],{"class":243},[79,117456,1057],{"class":96},[79,117458,1060],{"class":239},[79,117460,98066],{"class":7412},[79,117462,244],{"class":243},[79,117464,685],{"class":239},[79,117466,1049],{"class":96},[79,117468,115541],{"class":239},[79,117470,95605],{"class":7412},[79,117472,244],{"class":243},[79,117474,115548],{"class":239},[19,117476,117477,117478,117481,117482,1905,117485,117488],{},"定义动作空间。",[59,117479,117480],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[59,117483,117484],{},"low=-1.0",[59,117486,117487],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[51,117490,117491],{"className":230,"code":115558,"language":232,"meta":57,"style":57},[59,117492,117493],{"__ignoreMap":57},[79,117494,117495,117497,117499,117501,117503,117505,117507,117509,117511,117513,117515,117517,117519,117521,117523,117525,117527,117529],{"class":81,"line":82},[79,117496,32947],{"class":96},[79,117498,115567],{"class":239},[79,117500,244],{"class":243},[79,117502,115511],{"class":239},[79,117504,115514],{"class":7412},[79,117506,115517],{"class":243},[79,117508,115578],{"class":239},[79,117510,115524],{"class":7412},[79,117512,244],{"class":243},[79,117514,115578],{"class":239},[79,117516,98066],{"class":7412},[79,117518,244],{"class":243},[79,117520,685],{"class":239},[79,117522,2820],{"class":96},[79,117524,115541],{"class":239},[79,117526,95605],{"class":7412},[79,117528,244],{"class":243},[79,117530,115548],{"class":239},[19,117532,117533,117534,117537,117538,117541],{},"定义观测空间。",[59,117535,117536],{},"shape=(10,)"," 表示观测是 10 个数。",[59,117539,117540],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[51,117543,117545],{"className":230,"code":117544,"language":232,"meta":57,"style":57},"def _get_obs(self) -> np.ndarray:\n",[59,117546,117547],{"__ignoreMap":57},[79,117548,117549,117551,117553],{"class":81,"line":82},[79,117550,633],{"class":243},[79,117552,116108],{"class":85},[79,117554,116111],{"class":239},[19,117556,117557,117558,117560],{},"定义内部函数，用来生成观测。函数名前面的 ",[59,117559,3362],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[51,117562,117564],{"className":230,"code":117563,"language":232,"meta":57,"style":57},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[59,117565,117566,117580],{"__ignoreMap":57},[79,117567,117568,117570,117572,117574,117576,117578],{"class":81,"line":82},[79,117569,284],{"class":239},[79,117571,244],{"class":243},[79,117573,40987],{"class":96},[79,117575,116122],{"class":239},[79,117577,32947],{"class":96},[79,117579,116127],{"class":239},[79,117581,117582,117584,117586,117588,117590,117592],{"class":81,"line":167},[79,117583,294],{"class":239},[79,117585,244],{"class":243},[79,117587,40987],{"class":96},[79,117589,116122],{"class":239},[79,117591,32947],{"class":96},[79,117593,116142],{"class":239},[19,117595,117596],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[51,117598,117600],{"className":230,"code":117599,"language":232,"meta":57,"style":57},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[59,117601,117602,117618],{"__ignoreMap":57},[79,117603,117604,117606,117608,117610,117612,117614,117616],{"class":81,"line":82},[79,117605,2027],{"class":239},[79,117607,244],{"class":243},[79,117609,116151],{"class":239},[79,117611,32947],{"class":96},[79,117613,116156],{"class":239},[79,117615,32947],{"class":96},[79,117617,116161],{"class":239},[79,117619,117620,117622],{"class":81,"line":167},[79,117621,1414],{"class":243},[79,117623,116168],{"class":239},[19,117625,117626,117627,117630,117631,117633],{},"拼接观测，并转换成 ",[59,117628,117629],{},"float32","。很多强化学习库默认使用 ",[59,117632,117629],{},"，所以这里主动转换。",[51,117635,117636],{"className":230,"code":117039,"language":232,"meta":57,"style":57},[59,117637,117638],{"__ignoreMap":57},[79,117639,117640,117642,117644,117646,117648,117650,117652,117654,117656,117658,117660,117662,117664,117666,117668,117670,117672],{"class":81,"line":82},[79,117641,633],{"class":243},[79,117643,116274],{"class":85},[79,117645,116277],{"class":239},[79,117647,2829],{"class":243},[79,117649,116282],{"class":239},[79,117651,2390],{"class":96},[79,117653,27245],{"class":243},[79,117655,41047],{"class":96},[79,117657,468],{"class":243},[79,117659,41047],{"class":96},[79,117661,116295],{"class":239},[79,117663,116298],{"class":96},[79,117665,27245],{"class":243},[79,117667,41047],{"class":96},[79,117669,468],{"class":243},[79,117671,41047],{"class":96},[79,117673,966],{"class":239},[19,117675,117676,117677,117679,117680,117683],{},"定义 reset。",[59,117678,116318],{}," 用来控制随机数，保证实验可以复现。",[59,117681,117682],{},"options"," 用来接收额外配置，本章暂时不用。",[51,117685,117687],{"className":230,"code":117686,"language":232,"meta":57,"style":57},"super().reset(seed=seed)\n",[59,117688,117689],{"__ignoreMap":57},[79,117690,117691,117693,117695,117697,117699],{"class":81,"line":82},[79,117692,117280],{"class":96},[79,117694,116315],{"class":239},[79,117696,116318],{"class":7412},[79,117698,244],{"class":243},[79,117700,116323],{"class":239},[19,117702,117703,117704,117707],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[59,117705,117706],{},"self.np_random"," 生成可复现的随机数。",[51,117709,117711],{"className":230,"code":117710,"language":232,"meta":57,"style":57},"mujoco.mj_resetData(self.model, self.data)\n",[59,117712,117713],{"__ignoreMap":57},[79,117714,117715,117718,117720,117722,117724],{"class":81,"line":82},[79,117716,117717],{"class":239},"mujoco.mj_resetData(",[79,117719,32947],{"class":96},[79,117721,116333],{"class":239},[79,117723,32947],{"class":96},[79,117725,116338],{"class":239},[19,117727,117728],{},"把 MuJoCo 状态重置到默认状态。",[51,117730,117732],{"className":230,"code":117731,"language":232,"meta":57,"style":57},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[59,117733,117734],{"__ignoreMap":57},[79,117735,117736,117738,117740,117742,117744,117746,117748,117750,117752,117754,117756,117758,117760,117762,117764,117766,117768],{"class":81,"line":82},[79,117737,32947],{"class":96},[79,117739,116349],{"class":239},[79,117741,244],{"class":243},[79,117743,40987],{"class":96},[79,117745,116356],{"class":239},[79,117747,115514],{"class":7412},[79,117749,115517],{"class":243},[79,117751,88315],{"class":96},[79,117753,1060],{"class":239},[79,117755,115524],{"class":7412},[79,117757,244],{"class":243},[79,117759,88315],{"class":96},[79,117761,1060],{"class":239},[79,117763,33615],{"class":7412},[79,117765,244],{"class":243},[79,117767,32947],{"class":96},[79,117769,116381],{"class":239},[19,117771,117093,117772,117775,117776,117779,117780,117782],{},[59,117773,117774],{},"[:]"," 表示修改整个数组。",[59,117777,117778],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[59,117781,104206],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[51,117784,117786],{"className":230,"code":117785,"language":232,"meta":57,"style":57},"self.data.qvel[:] = 0.0\n",[59,117787,117788],{"__ignoreMap":57},[79,117789,117790,117792,117794,117796],{"class":81,"line":82},[79,117791,32947],{"class":96},[79,117793,116388],{"class":239},[79,117795,244],{"class":243},[79,117797,938],{"class":96},[19,117799,117800],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[51,117802,117804],{"className":230,"code":117803,"language":232,"meta":57,"style":57},"self.steps = 0\nreturn self._get_obs(), {}\n",[59,117805,117806,117816],{"__ignoreMap":57},[79,117807,117808,117810,117812,117814],{"class":81,"line":82},[79,117809,32947],{"class":96},[79,117811,115458],{"class":239},[79,117813,244],{"class":243},[79,117815,49447],{"class":96},[79,117817,117818,117820,117822],{"class":81,"line":167},[79,117819,1414],{"class":243},[79,117821,40987],{"class":96},[79,117823,116428],{"class":239},[19,117825,117826],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[51,117828,117829],{"className":230,"code":117102,"language":232,"meta":57,"style":57},[59,117830,117831],{"__ignoreMap":57},[79,117832,117833,117835,117837],{"class":81,"line":82},[79,117834,633],{"class":243},[79,117836,116439],{"class":85},[79,117838,116442],{"class":239},[19,117840,117841],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[51,117843,117845],{"className":230,"code":117844,"language":232,"meta":57,"style":57},"action = np.asarray(action, dtype=np.float32)\n",[59,117846,117847],{"__ignoreMap":57},[79,117848,117849,117851,117853,117855,117857,117859],{"class":81,"line":82},[79,117850,109449],{"class":239},[79,117852,244],{"class":243},[79,117854,116451],{"class":239},[79,117856,95605],{"class":7412},[79,117858,244],{"class":243},[79,117860,115548],{"class":239},[19,117862,117863,117864,1604],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[59,117865,117629],{},[51,117867,117869],{"className":230,"code":117868,"language":232,"meta":57,"style":57},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[59,117870,117871],{"__ignoreMap":57},[79,117872,117873,117875,117877,117879,117881,117883,117885],{"class":81,"line":82},[79,117874,109449],{"class":239},[79,117876,244],{"class":243},[79,117878,109454],{"class":239},[79,117880,32947],{"class":96},[79,117882,116470],{"class":239},[79,117884,32947],{"class":96},[79,117886,116475],{"class":239},[19,117888,117889],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[51,117891,117893],{"className":230,"code":117892,"language":232,"meta":57,"style":57},"self.data.ctrl[:] = action\n",[59,117894,117895],{"__ignoreMap":57},[79,117896,117897,117899,117901,117903],{"class":81,"line":82},[79,117898,32947],{"class":96},[79,117900,116486],{"class":239},[79,117902,244],{"class":243},[79,117904,109477],{"class":239},[19,117906,117907],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[51,117909,117911],{"className":230,"code":117910,"language":232,"meta":57,"style":57},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[59,117912,117913,117929],{"__ignoreMap":57},[79,117914,117915,117917,117919,117921,117923,117925,117927],{"class":81,"line":82},[79,117916,1874],{"class":243},[79,117918,103564],{"class":239},[79,117920,955],{"class":243},[79,117922,958],{"class":96},[79,117924,685],{"class":239},[79,117926,32947],{"class":96},[79,117928,116507],{"class":239},[79,117930,117931,117934,117936,117938,117940],{"class":81,"line":167},[79,117932,117933],{"class":239},"    mujoco.mj_step(",[79,117935,32947],{"class":96},[79,117937,116333],{"class":239},[79,117939,32947],{"class":96},[79,117941,116338],{"class":239},[19,117943,117944,117945,117948,117949,117951,117952,1604],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[59,117946,117947],{},"frame_skip=5","，所以外部调用一次 ",[59,117950,115629],{},"，内部实际执行 5 次 ",[59,117953,103293],{},[51,117955,117957],{"className":230,"code":117956,"language":232,"meta":57,"style":57},"self.steps += 1\n",[59,117958,117959],{"__ignoreMap":57},[79,117960,117961,117963,117965,117967],{"class":81,"line":82},[79,117962,32947],{"class":96},[79,117964,115458],{"class":239},[79,117966,1118],{"class":243},[79,117968,57809],{"class":96},[19,117970,117971],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[51,117973,117975],{"className":230,"code":117974,"language":232,"meta":57,"style":57},"obs = self._get_obs()\nreward = self._get_reward()\n",[59,117976,117977,117987],{"__ignoreMap":57},[79,117978,117979,117981,117983,117985],{"class":81,"line":82},[79,117980,2027],{"class":239},[79,117982,244],{"class":243},[79,117984,40987],{"class":96},[79,117986,116549],{"class":239},[79,117988,117989,117991,117993,117995],{"class":81,"line":167},[79,117990,328],{"class":239},[79,117992,244],{"class":243},[79,117994,40987],{"class":96},[79,117996,116560],{"class":239},[19,117998,117999],{},"计算新的观测和奖励。",[51,118001,118003],{"className":230,"code":118002,"language":232,"meta":57,"style":57},"dist = float(np.linalg.norm(tip - target))\n",[59,118004,118005],{"__ignoreMap":57},[79,118006,118007,118009,118011,118013,118015,118017],{"class":81,"line":82},[79,118008,312],{"class":239},[79,118010,244],{"class":243},[79,118012,864],{"class":96},[79,118014,116603],{"class":239},[79,118016,320],{"class":243},[79,118018,116608],{"class":239},[19,118020,118021],{},"计算末端到目标的距离，并转换成 Python float。",[51,118023,118024],{"className":230,"code":115429,"language":232,"meta":57,"style":57},[59,118025,118026,118038],{"__ignoreMap":57},[79,118027,118028,118030,118032,118034,118036],{"class":81,"line":82},[79,118029,115436],{"class":239},[79,118031,244],{"class":243},[79,118033,115441],{"class":239},[79,118035,392],{"class":243},[79,118037,115446],{"class":96},[79,118039,118040,118042,118044,118046,118048,118050,118052],{"class":81,"line":167},[79,118041,115451],{"class":239},[79,118043,244],{"class":243},[79,118045,40987],{"class":96},[79,118047,115458],{"class":239},[79,118049,3935],{"class":243},[79,118051,40987],{"class":96},[79,118053,115465],{"class":239},[19,118055,118056],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[51,118058,118060],{"className":230,"code":118059,"language":232,"meta":57,"style":57},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[59,118061,118062,118075],{"__ignoreMap":57},[79,118063,118064,118067,118069,118071,118073],{"class":81,"line":82},[79,118065,118066],{"class":239},"info ",[79,118068,244],{"class":243},[79,118070,6647],{"class":239},[79,118072,116654],{"class":89},[79,118074,116657],{"class":239},[79,118076,118077,118079],{"class":81,"line":167},[79,118078,1414],{"class":243},[79,118080,116664],{"class":239},[19,118082,118083,118086],{},[59,118084,118085],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[51,118088,118090],{"className":230,"code":118089,"language":232,"meta":57,"style":57},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[59,118091,118092,118101],{"__ignoreMap":57},[79,118093,118094,118097,118099],{"class":81,"line":82},[79,118095,118096],{"class":239},"env ",[79,118098,244],{"class":243},[79,118100,116694],{"class":239},[79,118102,118103,118105,118107,118109,118111,118113,118115],{"class":81,"line":167},[79,118104,115152],{"class":239},[79,118106,244],{"class":243},[79,118108,116704],{"class":239},[79,118110,116318],{"class":7412},[79,118112,244],{"class":243},[79,118114,1030],{"class":96},[79,118116,253],{"class":239},[19,118118,118119,118120,118123],{},"创建环境并重置。",[59,118121,118122],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[51,118125,118127],{"className":230,"code":118126,"language":232,"meta":57,"style":57},"action = env.action_space.sample()\n",[59,118128,118129],{"__ignoreMap":57},[79,118130,118131,118133,118135],{"class":81,"line":82},[79,118132,109449],{"class":239},[79,118134,244],{"class":243},[79,118136,116773],{"class":239},[19,118138,118139],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118141,2042],{"id":2041},[19,118143,107498],{},[51,118145,118148],{"className":118146,"code":118147,"language":56,"meta":57},[54],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[59,118149,118147],{"__ignoreMap":57},[19,118151,118152],{},"这个环境已经具备强化学习环境的基本结构。",[19,118154,118155],{},"主函数里使用随机动作：",[51,118157,118158],{"className":230,"code":118126,"language":232,"meta":57,"style":57},[59,118159,118160],{"__ignoreMap":57},[79,118161,118162,118164,118166],{"class":81,"line":82},[79,118163,109449],{"class":239},[79,118165,244],{"class":243},[79,118167,116773],{"class":239},[19,118169,118170],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118172,2073],{"id":2072},[26,118174,118175,118178,118184,118193,118202,118211,118217],{},[29,118176,118177],{},"运行程序。",[29,118179,118180,118181,1604],{},"确认 ",[59,118182,118183],{},"obs.shape == (10,)",[29,118185,2091,118186,118189,118190,1604],{},[59,118187,118188],{},"env.action_space","，应类似 ",[59,118191,118192],{},"Box(-1.0, 1.0, (2,), float32)",[29,118194,107599,118195,118198,118199,1604],{},[59,118196,118197],{},"self.max_steps = 10","，确认环境会更快 ",[59,118200,118201],{},"truncated=True",[29,118203,2100,118204,2104,118207,118210],{},[59,118205,118206],{},"terminated = dist \u003C 0.05",[59,118208,118209],{},"dist \u003C 0.2","，观察是否更容易结束。",[29,118212,2100,118213,118216],{},[59,118214,118215],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[29,118218,118219,118220,118222,118223,118226],{},"在 ",[59,118221,118085],{}," 里加入 ",[59,118224,118225],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118228,2127],{"id":2126},[265,118230,118232],{"id":118231},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118234,118235,118236,118238],{},"Gymnasium 的 ",[59,118237,109142],{}," 返回 5 个值:",[51,118240,118242],{"className":230,"code":118241,"language":232,"meta":57,"style":57},"obs, reward, terminated, truncated, info\n",[59,118243,118244],{"__ignoreMap":57},[79,118245,118246],{"class":81,"line":82},[79,118247,118241],{"class":239},[19,118249,118250],{},"不是旧 Gym 的 4 个值。",[265,118252,118254,118257],{"id":118253},"datactrl-action-维度错误",[59,118255,118256],{},"data.ctrl[:] = action"," 维度错误",[19,118259,2148],{},[51,118261,118263],{"className":230,"code":118262,"language":232,"meta":57,"style":57},"print(self.model.nu)\nprint(action.shape)\n",[59,118264,118265,118276],{"__ignoreMap":57},[79,118266,118267,118269,118271,118273],{"class":81,"line":82},[79,118268,32541],{"class":96},[79,118270,685],{"class":239},[79,118272,32947],{"class":96},[79,118274,118275],{"class":239},".model.nu)\n",[79,118277,118278,118280],{"class":81,"line":167},[79,118279,32541],{"class":96},[79,118281,118282],{"class":239},"(action.shape)\n",[19,118284,118285],{},"两者必须匹配。",[265,118287,118289],{"id":118288},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,118291,104508],{},[51,118293,118295],{"className":230,"code":118294,"language":232,"meta":57,"style":57},"mujoco.mj_forward(self.model, self.data)\n",[59,118296,118297],{"__ignoreMap":57},[79,118298,118299,118302,118304,118306,118308],{"class":81,"line":82},[79,118300,118301],{"class":239},"mujoco.mj_forward(",[79,118303,32947],{"class":96},[79,118305,116333],{"class":239},[79,118307,32947],{"class":96},[79,118309,116338],{"class":239},[265,118311,118313,118315],{"id":118312},"observation_space-维度和-obs-不一致",[59,118314,115352],{}," 维度和 obs 不一致",[19,118317,2189],{},[51,118319,118321],{"className":230,"code":118320,"language":232,"meta":57,"style":57},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[59,118322,118323,118333,118340],{"__ignoreMap":57},[79,118324,118325,118327,118329,118331],{"class":81,"line":82},[79,118326,2027],{"class":239},[79,118328,244],{"class":243},[79,118330,40987],{"class":96},[79,118332,116549],{"class":239},[79,118334,118335,118337],{"class":81,"line":167},[79,118336,32541],{"class":96},[79,118338,118339],{"class":239},"(obs.shape)\n",[79,118341,118342,118344,118346,118348],{"class":81,"line":178},[79,118343,32541],{"class":96},[79,118345,685],{"class":239},[79,118347,32947],{"class":96},[79,118349,118350],{"class":239},".observation_space.shape)\n",[19,118352,118353],{},"两者必须一致。本章观测是：",[51,118355,118358],{"className":118356,"code":118357,"language":56,"meta":57},[54],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[59,118359,118357],{"__ignoreMap":57},[265,118361,118363],{"id":118362},"action-超过范围","action 超过范围",[19,118365,118366],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[51,118368,118369],{"className":230,"code":117868,"language":232,"meta":57,"style":57},[59,118370,118371],{"__ignoreMap":57},[79,118372,118373,118375,118377,118379,118381,118383,118385],{"class":81,"line":82},[79,118374,109449],{"class":239},[79,118376,244],{"class":243},[79,118378,109454],{"class":239},[79,118380,32947],{"class":96},[79,118382,116470],{"class":239},[79,118384,32947],{"class":96},[79,118386,116475],{"class":239},[19,118388,118389,118390,1604],{},"这能避免无效动作直接写入 ",[59,118391,2163],{},[265,118393,118395],{"id":118394},"忘记返回-info","忘记返回 info",[19,118397,118235,118398,1905,118400,118402],{},[59,118399,72164],{},[59,118401,109142],{}," 都会返回 info：",[51,118404,118405],{"className":230,"code":115145,"language":232,"meta":57,"style":57},[59,118406,118407,118415],{"__ignoreMap":57},[79,118408,118409,118411,118413],{"class":81,"line":82},[79,118410,115152],{"class":239},[79,118412,244],{"class":243},[79,118414,115157],{"class":239},[79,118416,118417,118419,118421],{"class":81,"line":167},[79,118418,115162],{"class":239},[79,118420,244],{"class":243},[79,118422,115167],{"class":239},[19,118424,118425,118426,1604],{},"即使暂时没有额外信息，也返回 ",[59,118427,34574],{},[14,118429,118431],{"id":118430},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118433,118434],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[26,118436,118437,118440,118443,118446,118449,118452],{},[29,118438,118439],{},"更稳定的 reward。",[29,118441,118442],{},"合理的 episode 长度。",[29,118444,118445],{},"可重复的随机目标采样。",[29,118447,118448],{},"render 接口。",[29,118450,118451],{},"环境注册代码。",[29,118453,118454],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118456,118457],{},"如果只是自己写训练循环，最小形式是：",[51,118459,118461],{"className":230,"code":118460,"language":232,"meta":57,"style":57},"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",[59,118462,118463,118471,118487,118491,118507,118516,118525,118535],{"__ignoreMap":57},[79,118464,118465,118467,118469],{"class":81,"line":82},[79,118466,118096],{"class":239},[79,118468,244],{"class":243},[79,118470,116694],{"class":239},[79,118472,118473,118475,118477,118479,118481,118483,118485],{"class":81,"line":167},[79,118474,115152],{"class":239},[79,118476,244],{"class":243},[79,118478,116704],{"class":239},[79,118480,116318],{"class":7412},[79,118482,244],{"class":243},[79,118484,1030],{"class":96},[79,118486,253],{"class":239},[79,118488,118489],{"class":81,"line":178},[79,118490,454],{"emptyLinePlaceholder":453},[79,118492,118493,118495,118497,118499,118501,118503,118505],{"class":81,"line":457},[79,118494,1874],{"class":243},[79,118496,103564],{"class":239},[79,118498,955],{"class":243},[79,118500,958],{"class":96},[79,118502,685],{"class":239},[79,118504,8605],{"class":96},[79,118506,966],{"class":239},[79,118508,118509,118512,118514],{"class":81,"line":462},[79,118510,118511],{"class":239},"    action ",[79,118513,244],{"class":243},[79,118515,116773],{"class":239},[79,118517,118518,118521,118523],{"class":81,"line":474},[79,118519,118520],{"class":239},"    obs, reward, terminated, truncated, info ",[79,118522,244],{"class":243},[79,118524,115167],{"class":239},[79,118526,118527,118529,118531,118533],{"class":81,"line":480},[79,118528,662],{"class":243},[79,118530,116839],{"class":239},[79,118532,116842],{"class":243},[79,118534,116845],{"class":239},[79,118536,118537,118540,118542],{"class":81,"line":486},[79,118538,118539],{"class":239},"        obs, info ",[79,118541,244],{"class":243},[79,118543,115157],{"class":239},[14,118545,118547],{"id":118546},"_9本章小结","9.本章小结",[19,118549,118550],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[51,118552,118555],{"className":118553,"code":118554,"language":56,"meta":57},[54],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[59,118556,118554],{"__ignoreMap":57},[19,118558,118559],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[2287,118561,118562],{},"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":57,"searchDepth":167,"depth":167,"links":118564},[118565,118566,118567,118574,118578,118579,118580,118590,118591],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":214,"depth":167,"text":215,"children":118568},[118569,118571,118573],{"id":115376,"depth":178,"text":118570},"terminated 和 truncated 的区别",{"id":115479,"depth":178,"text":118572},"observation_space 和 action_space",{"id":115606,"depth":178,"text":115607},{"id":421,"depth":167,"text":422,"children":118575},[118576,118577],{"id":1378,"depth":178,"text":1378},{"id":1576,"depth":178,"text":1576},{"id":2041,"depth":167,"text":2042},{"id":2072,"depth":167,"text":2073},{"id":2126,"depth":167,"text":2127,"children":118581},[118582,118583,118585,118586,118588,118589],{"id":118231,"depth":178,"text":118232},{"id":118253,"depth":178,"text":118584},"data.ctrl[:] = action 维度错误",{"id":118288,"depth":178,"text":118289},{"id":118312,"depth":178,"text":118587},"observation_space 维度和 obs 不一致",{"id":118362,"depth":178,"text":118363},{"id":118394,"depth":178,"text":118395},{"id":118430,"depth":167,"text":118431},{"id":118546,"depth":167,"text":118547},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115129,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118598,"title":118599,"body":118600,"description":119023,"extension":2314,"meta":119024,"navigation":453,"path":119025,"seo":119026,"stem":119027,"__hash__":119028},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118601,"toc":119013},[118602,118606,118609,118612,118632,118638,118644,118654,118657,118660,118680,118683,118687,118690,118696,118699,118713,118716,118719,118793,118796,118802,118805,118828,118831,118881,118884,118890,118893,118896,118899,118918,118921,118927,118930,118933,118936,118956,118959,118962,118965,119010],[10,118603,118605],{"id":118604},"mujoco-学习","MuJoCo 学习",[19,118607,118608],{},"初版",[19,118610,118611],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[26,118613,118614,118617,118620,118629],{},[29,118615,118616],{},"MuJoCo 模型文件在描述什么。",[29,118618,118619],{},"Python 代码怎样读取和推进仿真。",[29,118621,118622,204,118624,204,118626,118628],{},[59,118623,203],{},[59,118625,207],{},[59,118627,106384],{}," 这些数组为什么重要。",[29,118630,118631],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118633,118634,118635,118637],{},"默认环境为 Fedora 44、Python >= 3.10、",[59,118636,103113],{}," 官方 Python bindings。",[19,118639,118640,118641,118643],{},"注意：本文禁止使用 ",[59,118642,103099],{},"。所有示例均使用：",[51,118645,118646],{"className":230,"code":103636,"language":232,"meta":57,"style":57},[59,118647,118648],{"__ignoreMap":57},[79,118649,118650,118652],{"class":81,"line":82},[79,118651,432],{"class":243},[79,118653,435],{"class":239},[14,118655,118656],{"id":118656},"适合谁阅读",[19,118658,118659],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[26,118661,118662,118665,118668,118671],{},[29,118663,118664],{},"没学过 MuJoCo，只会一点 Python。",[29,118666,118667],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[29,118669,118670],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[29,118672,118673,118674,118676,118677,118679],{},"以前接触过 ",[59,118675,103099],{},"，现在想迁移到官方 ",[59,118678,103107],{}," Python bindings。",[19,118681,118682],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118684,118686],{"id":118685},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118688,118689],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[51,118691,118694],{"className":118692,"code":118693,"language":56,"meta":57},[54],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[59,118695,118693],{"__ignoreMap":57},[19,118697,118698],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[26,118700,118701,118704,118707,118710],{},[29,118702,118703],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[29,118705,118706],{},"快速测试控制算法，不必一开始就上真实机器人。",[29,118708,118709],{},"生成强化学习环境。",[29,118711,118712],{},"采集状态、动作、图像、奖励等训练数据。",[14,118714,118715],{"id":118715},"学习前的心智模型",[19,118717,118718],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[2516,118720,118721,118733],{},[2519,118722,118723],{},[2522,118724,118725,118728,118731],{},[2525,118726,118727],{"align":25876},"部分",[2525,118729,118730],{"align":25876},"负责什么",[2525,118732,23326],{"align":25876},[2563,118734,118735,118746,118758,118770,118782],{},[2522,118736,118737,118740,118743],{},[2568,118738,118739],{"align":25876},"MJCF XML",[2568,118741,118742],{"align":25876},"定义世界和机器人结构",[2568,118744,118745],{"align":25876},"地面、盒子、关节、电机、摄像头",[2522,118747,118748,118752,118755],{},[2568,118749,118750],{"align":25876},[59,118751,102809],{},[2568,118753,118754],{"align":25876},"编译后的静态模型",[2568,118756,118757],{"align":25876},"有几个关节、有几个电机、时间步长是多少",[2522,118759,118760,118764,118767],{},[2568,118761,118762],{"align":25876},[59,118763,102819],{},[2568,118765,118766],{"align":25876},"运行中的动态状态",[2568,118768,118769],{"align":25876},"当前时间、位置、速度、电机输入",[2522,118771,118772,118776,118779],{},[2568,118773,118774],{"align":25876},[59,118775,103293],{},[2568,118777,118778],{"align":25876},"推进一步物理仿真",[2568,118780,118781],{"align":25876},"根据重力、力、碰撞更新状态",[2522,118783,118784,118787,118790],{},[2568,118785,118786],{"align":25876},"Viewer \u002F Renderer",[2568,118788,118789],{"align":25876},"把仿真显示出来",[2568,118791,118792],{"align":25876},"打开窗口或保存图片",[19,118794,118795],{},"一句话总结：",[51,118797,118800],{"className":118798,"code":118799,"language":56,"meta":57},[54],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[59,118801,118799],{"__ignoreMap":57},[19,118803,118804],{},"参考来源：",[3377,118806,118807,118814,118821],{},[29,118808,118809,118810],{},"MuJoCo Python 官方文档：",[2614,118811,118812],{"href":118812,"rel":118813},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[26001],[29,118815,118816,118817],{},"MuJoCo XML Reference：",[2614,118818,118819],{"href":118819,"rel":118820},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[26001],[29,118822,118823,118824],{},"MuJoCo Overview：",[2614,118825,118826],{"href":118826,"rel":118827},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[26001],[14,118829,118830],{"id":118830},"章节目录",[26,118832,118833,118839,118845,118851,118857,118863,118869,118875],{},[29,118834,118835],{},[2614,118836,118838],{"href":118837},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[29,118840,118841],{},[2614,118842,118844],{"href":118843},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[29,118846,118847],{},[2614,118848,118850],{"href":118849},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[29,118852,118853],{},[2614,118854,118856],{"href":118855},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[29,118858,118859],{},[2614,118860,118862],{"href":118861},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[29,118864,118865],{},[2614,118866,118868],{"href":118867},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[29,118870,118871],{},[2614,118872,118874],{"href":118873},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[29,118876,118877],{},[2614,118878,118880],{"href":118879},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118882,118883],{"id":118883},"推荐学习路线",[51,118885,118888],{"className":118886,"code":118887,"language":56,"meta":57},[54],"环境安装\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",[59,118889,118887],{"__ignoreMap":57},[19,118891,118892],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118894,118895],{"id":118895},"建议的目录结构",[19,118897,118898],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[51,118900,118902],{"className":73,"code":118901,"language":75,"meta":57,"style":57},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[59,118903,118904,118912],{"__ignoreMap":57},[79,118905,118906,118908,118910],{"class":81,"line":82},[79,118907,103342],{"class":85},[79,118909,31346],{"class":96},[79,118911,103347],{"class":89},[79,118913,118914,118916],{"class":81,"line":167},[79,118915,103352],{"class":96},[79,118917,103347],{"class":89},[19,118919,118920],{},"每一章的代码都单独保存：",[51,118922,118925],{"className":118923,"code":118924,"language":56,"meta":57},[54],"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",[59,118926,118924],{"__ignoreMap":57},[19,118928,118929],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118931,118932],{"id":118932},"学习方法",[19,118934,118935],{},"每章建议按这个顺序操作：",[26,118937,118938,118941,118944,118947,118950,118953],{},[29,118939,118940],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[29,118942,118943],{},"复制最小可运行代码，保存成指定文件。",[29,118945,118946],{},"运行代码，确认没有报错。",[29,118948,118949],{},"对照“运行结果说明”理解输出。",[29,118951,118952],{},"做“验证步骤”，主动改一两个参数。",[29,118954,118955],{},"遇到报错先看“常见错误与解决方案”。",[19,118957,118958],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118960,118961],{"id":118961},"全局排错顺序",[19,118963,118964],{},"遇到问题时，按下面顺序查：",[26,118966,118967,118973,118979,118984,118987,118990,118997,119007],{},[29,118968,118969,118970],{},"Python 环境是否激活：",[59,118971,118972],{},"which python",[29,118974,118975,118976],{},"MuJoCo 是否能导入：",[59,118977,118978],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[29,118980,118981,118982],{},"是否误装了 ",[59,118983,103099],{},[29,118985,118986],{},"XML 标签是否闭合、属性是否拼写正确",[29,118988,118989],{},"actuator 引用的 joint 名字是否存在",[29,118991,118992,118994,118995],{},[59,118993,2163],{}," 的长度是否等于 ",[59,118996,2094],{},[29,118998,107599,118999,1601,119001,119003,119004],{},[59,119000,203],{},[59,119002,207],{}," 后是否调用了 ",[59,119005,119006],{},"mujoco.mj_forward",[29,119008,119009],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[2287,119011,119012],{},"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":57,"searchDepth":167,"depth":167,"links":119014},[119015,119016,119017,119018,119019,119020,119021,119022],{"id":118656,"depth":167,"text":118656},{"id":118685,"depth":167,"text":118686},{"id":118715,"depth":167,"text":118715},{"id":118830,"depth":167,"text":118830},{"id":118883,"depth":167,"text":118883},{"id":118895,"depth":167,"text":118895},{"id":118932,"depth":167,"text":118932},{"id":118961,"depth":167,"text":118961},"仿真搭建。",{"category":25518},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118599,"description":119023},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119030,"title":119031,"body":119032,"description":25516,"extension":2314,"meta":119487,"navigation":453,"path":119488,"seo":119489,"stem":119490,"__hash__":119491},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119033,"toc":119485},[119034,119037,119040,119046,119482],[10,119035,119031],{"id":119036},"_1-最常用的基本操作更新",[19,119038,119039],{},"装linux系统教程：",[19,119041,119042],{},[2614,119043,119044],{"href":119044,"rel":119045},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[26001],[51,119047,119051],{"className":119048,"code":119049,"language":119050,"meta":57,"style":57},"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",[59,119052,119053,119058,119063,119072,119077,119086,119091,119111,119116,119127,119132,119141,119146,119174,119179,119198,119203,119222,119226,119231,119247,119251,119256,119286,119290,119295,119311,119315,119320,119335,119339,119344,119360,119364,119369,119381,119393,119397,119402,119419,119423,119428,119446,119450,119455,119464,119468,119473],{"__ignoreMap":57},[79,119054,119055],{"class":81,"line":82},[79,119056,119057],{"class":2440},"#更新相关的知识\n",[79,119059,119060],{"class":81,"line":167},[79,119061,119062],{"class":2440},"# 更新软件包列表（从服务器获取最新软件信息）\n",[79,119064,119065,119067,119070],{"class":81,"line":178},[79,119066,86],{"class":85},[79,119068,119069],{"class":89}," apt",[79,119071,28376],{"class":89},[79,119073,119074],{"class":81,"line":457},[79,119075,119076],{"class":2440},"# 升级所有可更新的软件包（不删除旧包）\n",[79,119078,119079,119081,119083],{"class":81,"line":462},[79,119080,86],{"class":85},[79,119082,119069],{"class":89},[79,119084,119085],{"class":89}," upgrade\n",[79,119087,119088],{"class":81,"line":474},[79,119089,119090],{"class":2440},"#更新和升级软件包\n",[79,119092,119093,119095,119097,119100,119102,119104,119106,119109],{"class":81,"line":480},[79,119094,86],{"class":85},[79,119096,119069],{"class":89},[79,119098,119099],{"class":89}," update",[79,119101,28324],{"class":239},[79,119103,86],{"class":85},[79,119105,119069],{"class":89},[79,119107,119108],{"class":89}," upgrade",[79,119110,164],{"class":96},[79,119112,119113],{"class":81,"line":486},[79,119114,119115],{"class":2440},"#列出可更新的软件包及版本信息\n",[79,119117,119118,119121,119124],{"class":81,"line":491},[79,119119,119120],{"class":85},"apt",[79,119122,119123],{"class":89}," list",[79,119125,119126],{"class":96}," --upgradable\n",[79,119128,119129],{"class":81,"line":497},[79,119130,119131],{"class":2440},"#彻底升级（处理依赖关系，可能删除旧包）\n",[79,119133,119134,119136,119138],{"class":81,"line":503},[79,119135,86],{"class":85},[79,119137,119069],{"class":89},[79,119139,119140],{"class":89}," full-upgrade\n",[79,119142,119143],{"class":81,"line":509},[79,119144,119145],{"class":2440},"#设置指定版本\n",[79,119147,119148,119150,119152,119154,119156,119159,119161,119163,119165,119167,119170,119172],{"class":81,"line":514},[79,119149,86],{"class":85},[79,119151,119069],{"class":89},[79,119153,93],{"class":89},[79,119155,31033],{"class":243},[79,119157,119158],{"class":89},"package_nam",[79,119160,2455],{"class":239},[79,119162,3330],{"class":243},[79,119164,244],{"class":89},[79,119166,392],{"class":243},[79,119168,119169],{"class":89},"version_numbe",[79,119171,3043],{"class":239},[79,119173,53420],{"class":243},[79,119175,119176],{"class":81,"line":520},[79,119177,119178],{"class":2440},"#只安装软件包不升级\n",[79,119180,119181,119183,119185,119187,119189,119191,119193,119195],{"class":81,"line":526},[79,119182,86],{"class":85},[79,119184,119069],{"class":89},[79,119186,93],{"class":89},[79,119188,31033],{"class":243},[79,119190,119158],{"class":89},[79,119192,2455],{"class":239},[79,119194,3330],{"class":243},[79,119196,119197],{"class":96}," --no-upgrade\n",[79,119199,119200],{"class":81,"line":532},[79,119201,119202],{"class":2440},"#只升级，不存在就不安装\n",[79,119204,119205,119207,119209,119211,119213,119215,119217,119219],{"class":81,"line":537},[79,119206,86],{"class":85},[79,119208,119069],{"class":89},[79,119210,93],{"class":89},[79,119212,31033],{"class":243},[79,119214,119158],{"class":89},[79,119216,2455],{"class":239},[79,119218,3330],{"class":243},[79,119220,119221],{"class":96}," --only-upgrade\n",[79,119223,119224],{"class":81,"line":543},[79,119225,454],{"emptyLinePlaceholder":453},[79,119227,119228],{"class":81,"line":549},[79,119229,119230],{"class":2440},"#安装指定的软件命令\n",[79,119232,119233,119235,119237,119239,119241,119243,119245],{"class":81,"line":555},[79,119234,86],{"class":85},[79,119236,119069],{"class":89},[79,119238,93],{"class":89},[79,119240,31033],{"class":243},[79,119242,119158],{"class":89},[79,119244,2455],{"class":239},[79,119246,53420],{"class":243},[79,119248,119249],{"class":81,"line":561},[79,119250,454],{"emptyLinePlaceholder":453},[79,119252,119253],{"class":81,"line":567},[79,119254,119255],{"class":2440},"#安装多个软件包\n",[79,119257,119258,119260,119262,119264,119266,119269,119272,119274,119276,119279,119281,119283],{"class":81,"line":573},[79,119259,86],{"class":85},[79,119261,119069],{"class":89},[79,119263,93],{"class":89},[79,119265,31033],{"class":243},[79,119267,119268],{"class":89},"package_",[79,119270,119271],{"class":243},"1>",[79,119273,31033],{"class":243},[79,119275,119268],{"class":89},[79,119277,119278],{"class":243},"2>",[79,119280,31033],{"class":243},[79,119282,119268],{"class":89},[79,119284,119285],{"class":243},"3>\n",[79,119287,119288],{"class":81,"line":579},[79,119289,454],{"emptyLinePlaceholder":453},[79,119291,119292],{"class":81,"line":584},[79,119293,119294],{"class":2440},"#更新指定的软件命令\n",[79,119296,119297,119299,119301,119303,119305,119307,119309],{"class":81,"line":590},[79,119298,86],{"class":85},[79,119300,119069],{"class":89},[79,119302,119099],{"class":89},[79,119304,31033],{"class":243},[79,119306,119158],{"class":89},[79,119308,2455],{"class":239},[79,119310,53420],{"class":243},[79,119312,119313],{"class":81,"line":596},[79,119314,454],{"emptyLinePlaceholder":453},[79,119316,119317],{"class":81,"line":602},[79,119318,119319],{"class":2440},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[79,119321,119322,119324,119327,119329,119331,119333],{"class":81,"line":608},[79,119323,119120],{"class":85},[79,119325,119326],{"class":89}," show",[79,119328,31033],{"class":243},[79,119330,119158],{"class":89},[79,119332,2455],{"class":239},[79,119334,53420],{"class":243},[79,119336,119337],{"class":81,"line":614},[79,119338,454],{"emptyLinePlaceholder":453},[79,119340,119341],{"class":81,"line":620},[79,119342,119343],{"class":2440},"#删除软件包命令\n",[79,119345,119346,119348,119350,119352,119354,119356,119358],{"class":81,"line":625},[79,119347,86],{"class":85},[79,119349,119069],{"class":89},[79,119351,28213],{"class":89},[79,119353,31033],{"class":243},[79,119355,119158],{"class":89},[79,119357,2455],{"class":239},[79,119359,53420],{"class":243},[79,119361,119362],{"class":81,"line":630},[79,119363,454],{"emptyLinePlaceholder":453},[79,119365,119366],{"class":81,"line":648},[79,119367,119368],{"class":2440},"# 清理旧版本和缓存（释放磁盘空间）\n",[79,119370,119371,119373,119375,119378],{"class":81,"line":659},[79,119372,86],{"class":85},[79,119374,119069],{"class":89},[79,119376,119377],{"class":89}," autoremove",[79,119379,119380],{"class":2440},"  # 删除不再需要的依赖和库文件\n",[79,119382,119383,119385,119387,119390],{"class":81,"line":676},[79,119384,86],{"class":85},[79,119386,119069],{"class":89},[79,119388,119389],{"class":89}," clean",[79,119391,119392],{"class":2440},"       # 清理下载的缓存包\n",[79,119394,119395],{"class":81,"line":708},[79,119396,454],{"emptyLinePlaceholder":453},[79,119398,119399],{"class":81,"line":717},[79,119400,119401],{"class":2440},"#移除软件包及配置文件\n",[79,119403,119404,119406,119408,119411,119413,119415,119417],{"class":81,"line":722},[79,119405,86],{"class":85},[79,119407,119069],{"class":89},[79,119409,119410],{"class":89}," purge",[79,119412,31033],{"class":243},[79,119414,119158],{"class":89},[79,119416,2455],{"class":239},[79,119418,53420],{"class":243},[79,119420,119421],{"class":81,"line":727},[79,119422,454],{"emptyLinePlaceholder":453},[79,119424,119425],{"class":81,"line":738},[79,119426,119427],{"class":2440},"#查找软件包命令\n",[79,119429,119430,119432,119434,119437,119439,119442,119444],{"class":81,"line":753},[79,119431,86],{"class":85},[79,119433,119069],{"class":89},[79,119435,119436],{"class":89}," search",[79,119438,31033],{"class":243},[79,119440,119441],{"class":89},"keywor",[79,119443,2689],{"class":239},[79,119445,53420],{"class":243},[79,119447,119448],{"class":81,"line":768},[79,119449,454],{"emptyLinePlaceholder":453},[79,119451,119452],{"class":81,"line":776},[79,119453,119454],{"class":2440},"#列出所有已安装的包\n",[79,119456,119457,119459,119461],{"class":81,"line":781},[79,119458,119120],{"class":85},[79,119460,119123],{"class":89},[79,119462,119463],{"class":96}," --installed\n",[79,119465,119466],{"class":81,"line":786},[79,119467,454],{"emptyLinePlaceholder":453},[79,119469,119470],{"class":81,"line":802},[79,119471,119472],{"class":2440},"#列出所有已安装的包的版本信息\n",[79,119474,119475,119477,119479],{"class":81,"line":815},[79,119476,119120],{"class":85},[79,119478,119123],{"class":89},[79,119480,119481],{"class":96}," --all-versions\n",[2287,119483,119484],{},"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":57,"searchDepth":167,"depth":167,"links":119486},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119031,"description":25516},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119493,"title":119494,"body":119495,"description":25516,"extension":2314,"meta":120236,"navigation":453,"path":120237,"seo":120238,"stem":120239,"__hash__":120240},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119496,"toc":120223},[119497,119500,119504,119507,119513,119517,119521,119527,119532,119537,119542,119547,119552,119555,119558,119561,119564,119568,119571,119576,119579,119584,119587,119592,119599,119602,119605,119608,119611,119614,119625,119629,119633,119638,119643,119647,119652,119656,119661,119665,119669,119674,119677,119722,119727,119731,119735,119740,119746,119751,119761,119766,119776,119781,119786,119813,119817,119820,119825,119828,119853,119857,119862,119865,119870,119875,119895,119900,119903,119918,119922,119975,119978,119983,119987,119990,120005,120008,120011,120016,120020,120024,120027,120031,120035,120038,120043,120048,120052,120059,120067,120070,120077,120082,120087,120090,120095,120102,120107,120114,120118,120120,120125,120129,120132,120135,120140,120143,120148,120151,120156,120161,120166,120170,120175,120179,120220],[10,119498,119494],{"id":119499},"_2-linux装机教程",[14,119501,119503],{"id":119502},"_21-实体机","2.1 实体机",[19,119505,119506],{},"使用清华源：（Ubuntu24.04）",[19,119508,119509],{},[2614,119510,119511],{"href":119511,"rel":119512},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[26001],[14,119514,119516],{"id":119515},"_22-普通虚拟机","2.2 普通虚拟机",[265,119518,119520],{"id":119519},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119522,119523],{},[2614,119524,119525],{"href":119525,"rel":119526},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[26001],[19,119528,119529],{},[3699,119530],{"alt":57,"src":119531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119533,119534],{},[3699,119535],{"alt":57,"src":119536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119538,119539],{},[3699,119540],{"alt":57,"src":119541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119543,119544],{},[3699,119545],{"alt":57,"src":119546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119548,119549],{},[3699,119550],{"alt":57,"src":119551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119553,119554],{},"内存4G（4096MB）；",[19,119556,119557],{},"CPU给4个核；",[19,119559,119560],{},"硬盘动态分配60G；",[19,119562,119563],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[265,119565,119567],{"id":119566},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119569,119570],{},"按照1.1的步骤下载Ubuntu",[19,119572,119573],{},[3699,119574],{"alt":57,"src":119575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119577,119578],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119580,119581],{},[3699,119582],{"alt":57,"src":119583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119585,119586],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119588,119589],{},[3699,119590],{"alt":57,"src":119591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119593,119594,119595,119598],{},"选择“正常安装”(找不到都用Alt+F7)， ",[2528,119596,119597],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119600,119601],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119603,119604],{},"将改动写入磁盘吗 继续",[19,119606,119607],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119609,119610],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119612,119613],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119615,119616,119617,119620,119621,119624],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[2528,119618,119619],{},"除了"," 选不发送系统信息与不升级之外， ",[2528,119622,119623],{},"其它"," 都跳过或前进）",[265,119626,119628],{"id":119627},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[24137,119630,119632],{"id":119631},"_2231-全屏","2.2.3.1 全屏",[19,119634,119635],{},[3699,119636],{"alt":57,"src":119637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119639,119640],{},[3699,119641],{"alt":57,"src":119642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[24137,119644,119646],{"id":119645},"_2232-文件交换","2.2.3.2 文件交换",[19,119648,119649],{},[3699,119650],{"alt":57,"src":119651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[24137,119653,119655],{"id":119654},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119657,119658],{},[3699,119659],{"alt":57,"src":119660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119662,119664],{"id":119663},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[265,119666,119668],{"id":119667},"_231-简介与优缺点","2.3.1 简介与优缺点",[26,119670,119671],{},[29,119672,119673],{},"什么情况下推荐？",[19,119675,119676],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[26,119678,119679],{"start":167},[29,119680,119681,119682],{},"优缺点：",[26,119683,119684,119714],{},[29,119685,119686,119687],{},"优点：",[26,119688,119689,119692,119699,119702,119705,119708,119711],{},[29,119690,119691],{},"WSL2是最好的Linux发行版;(bushi)",[29,119693,119694,119695,119698],{},"性能损耗极低。且比在Windows上跑深度性能 ",[2528,119696,119697],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[29,119700,119701],{},"非常方便调用USB设备，可以USB直通;",[29,119703,119704],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[29,119706,119707],{},"非常方便Win与WSL2互相传文件等协同操作;",[29,119709,119710],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[29,119712,119713],{},"非常方便使用Windows的VScode远程开发;",[29,119715,119716,119717],{},"缺点：",[26,119718,119719],{},[29,119720,119721],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119723,119724],{},[3699,119725],{"alt":57,"src":119726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[265,119728,119730],{"id":119729},"_232-安装教程","2.3.2 安装教程",[24137,119732,119734],{"id":119733},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[26,119736,119737],{},[29,119738,119739],{},"方法一(图形界面)",[19,119741,119742,119743,26754],{},"用Win+R输入",[59,119744,119745],{},"appwiz.cpl",[19,119747,119748],{},[3699,119749],{"alt":57,"src":119750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119752,119753,119754,119757,119758,28605],{},"点击OK进入 ",[2528,119755,119756],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[2528,119759,119760],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119762,119763],{},[3699,119764],{"alt":57,"src":119765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119767,119768,119769,1905,119772,119775],{},"选择 ",[2528,119770,119771],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[2528,119773,119774],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119777,119778],{},[3699,119779],{"alt":57,"src":119780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[26,119782,119783],{"start":167},[29,119784,119785],{},"方法二(命令行)",[51,119787,119791],{"className":119788,"code":119789,"language":119790,"meta":57,"style":57},"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",[59,119792,119793,119798,119803,119808],{"__ignoreMap":57},[79,119794,119795],{"class":81,"line":82},[79,119796,119797],{},"# 开启 Linux 子系统\n",[79,119799,119800],{"class":81,"line":167},[79,119801,119802],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[79,119804,119805],{"class":81,"line":178},[79,119806,119807],{},"# 开启虚拟机平台\n",[79,119809,119810],{"class":81,"line":457},[79,119811,119812],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[24137,119814,119816],{"id":119815},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119818,119819],{},"用管理员权限打开powershell",[19,119821,119822],{},[3699,119823],{"alt":57,"src":119824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119826,119827],{},"升级WSL并设置默认版本为WSL2",[51,119829,119831],{"className":119788,"code":119830,"language":119790,"meta":57,"style":57},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[59,119832,119833,119838,119843,119848],{"__ignoreMap":57},[79,119834,119835],{"class":81,"line":82},[79,119836,119837],{},"# 更新 wsl\n",[79,119839,119840],{"class":81,"line":167},[79,119841,119842],{},"wsl --update\n",[79,119844,119845],{"class":81,"line":178},[79,119846,119847],{},"# 将 wsl 版本设置为 wsl2\n",[79,119849,119850],{"class":81,"line":457},[79,119851,119852],{},"wsl --set-default-version 2\n",[24137,119854,119856],{"id":119855},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[26,119858,119859],{},[29,119860,119861],{},"方式一(商店下载)",[19,119863,119864],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119866,119867],{},[3699,119868],{"alt":57,"src":119869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[26,119871,119872],{"start":167},[29,119873,119874],{},"方式二(命令行安装)",[51,119876,119878],{"className":119788,"code":119877,"language":119790,"meta":57,"style":57},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[59,119879,119880,119885,119890],{"__ignoreMap":57},[79,119881,119882],{"class":81,"line":82},[79,119883,119884],{},"# 列出可安装的 Linux 版本\n",[79,119886,119887],{"class":81,"line":167},[79,119888,119889],{},"#（需要科学手段）\n",[79,119891,119892],{"class":81,"line":178},[79,119893,119894],{},"wsl --list --online\n",[19,119896,119897],{},[3699,119898],{"alt":57,"src":119899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119901,119902],{},"选择对应发行版并安装",[51,119904,119906],{"className":119788,"code":119905,"language":119790,"meta":57,"style":57},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[59,119907,119908,119913],{"__ignoreMap":57},[79,119909,119910],{"class":81,"line":82},[79,119911,119912],{},"# Ubuntu安装完毕后需要重启系统\n",[79,119914,119915],{"class":81,"line":167},[79,119916,119917],{},"wsl --install -d Ubuntu-24.04\n",[24137,119919,119921],{"id":119920},"_2324-查看系统状态","2.3.2.4 查看系统状态",[51,119923,119925],{"className":119788,"code":119924,"language":119790,"meta":57,"style":57},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[59,119926,119927,119932,119937,119942,119947,119951,119955,119960,119965,119970],{"__ignoreMap":57},[79,119928,119929],{"class":81,"line":82},[79,119930,119931],{},"# 查看 wsl\n",[79,119933,119934],{"class":81,"line":167},[79,119935,119936],{},"wsl -l\n",[79,119938,119939],{"class":81,"line":178},[79,119940,119941],{},"# 查看 wsl 运行版本或模式\n",[79,119943,119944],{"class":81,"line":457},[79,119945,119946],{},"wsl -l -v\n",[79,119948,119949],{"class":81,"line":462},[79,119950,454],{"emptyLinePlaceholder":453},[79,119952,119953],{"class":81,"line":474},[79,119954,454],{"emptyLinePlaceholder":453},[79,119956,119957],{"class":81,"line":480},[79,119958,119959],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[79,119961,119962],{"class":81,"line":486},[79,119963,119964],{},"wsl --set-version \u003Cdistro> 2\n",[79,119966,119967],{"class":81,"line":491},[79,119968,119969],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[79,119971,119972],{"class":81,"line":497},[79,119973,119974],{},"wsl --unregister \u003Cdistro>\n",[19,119976,119977],{},"输出Version为2即正常",[19,119979,119980],{},[3699,119981],{"alt":57,"src":119982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[24137,119984,119986],{"id":119985},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119988,119989],{},"直接在Powershell里输入wsl命令进入子系统",[51,119991,119993],{"className":119788,"code":119992,"language":119790,"meta":57,"style":57},"# 进入子系统\nwsl\n",[59,119994,119995,120000],{"__ignoreMap":57},[79,119996,119997],{"class":81,"line":82},[79,119998,119999],{},"# 进入子系统\n",[79,120001,120002],{"class":81,"line":167},[79,120003,120004],{},"wsl\n",[19,120006,120007],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,120009,120010],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,120012,120013],{},[3699,120014],{"alt":57,"src":120015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[265,120017,120019],{"id":120018},"_233-配置各种环境","2.3.3 配置各种环境",[24137,120021,120023],{"id":120022},"_2331-换源","2.3.3.1 换源",[19,120025,120026],{},"(同实体机LINUX，往下找教程)",[24137,120028,120030],{"id":120029},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[25049,120032,120034],{"id":120033},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,120036,120037],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,120039,120040],{},[3699,120041],{"alt":57,"src":120042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,120044,120045],{},[3699,120046],{"alt":57,"src":120047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[25049,120049,120051],{"id":120050},"_23322-cuda","2.3.3.2.2 CUDA",[19,120053,120054,120055],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2614,120056,120057],{"href":120057,"rel":120058},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[26001],[19,120060,120061,120064],{},[3699,120062],{"alt":57,"src":120063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3699,120065],{"alt":57,"src":120066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,120068,120069],{},"在下方的网站，选择合适的版本。",[19,120071,120072,120073],{},"WSL2 专属 CUDA 指南：",[2614,120074,120075],{"href":120075,"rel":120076},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[26001],[19,120078,120079],{},[2528,120080,120081],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,120083,120084],{},[3699,120085],{"alt":57,"src":120086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,120088,120089],{},"挨行敲一遍",[19,120091,120092],{},[3699,120093],{"alt":57,"src":120094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,120096,120097,120098,120101],{},"敲完后，输入",[59,120099,120100],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,120103,120104],{},[3699,120105],{"alt":57,"src":120106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,120108,120109,120110,120113],{},"（请详看下方教程的",[2528,120111,120112],{},"安装CUDA的配置环境来看","如何配置环境）",[25049,120115,120117],{"id":120116},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,120119,120026],{},[19,120121,120122],{},[3699,120123],{"alt":57,"src":120124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[24137,120126,120128],{"id":120127},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,120130,120131],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,120133,120134],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,120136,120137],{},[3699,120138],{"alt":57,"src":120139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,120141,120142],{},"连接WSL2",[19,120144,120145],{},[3699,120146],{"alt":57,"src":120147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,120149,120150],{},"远程开发成功。",[19,120152,120153],{},[3699,120154],{"alt":57,"src":120155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,120157,120158],{},[3699,120159],{"alt":57,"src":120160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120162,120163],{},[3699,120164],{"alt":57,"src":120165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[24137,120167,120169],{"id":120168},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120171,120172],{},[3699,120173],{"alt":57,"src":120174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[24137,120176,120178],{"id":120177},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[51,120180,120182],{"className":119048,"code":120181,"language":119050,"meta":57,"style":57},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[59,120183,120184,120192,120200,120211,120215],{"__ignoreMap":57},[79,120185,120186,120188,120190],{"class":81,"line":82},[79,120187,86],{"class":85},[79,120189,119069],{"class":89},[79,120191,28376],{"class":89},[79,120193,120194,120196,120198],{"class":81,"line":167},[79,120195,86],{"class":85},[79,120197,119069],{"class":89},[79,120199,119085],{"class":89},[79,120201,120202,120204,120206,120208],{"class":81,"line":178},[79,120203,86],{"class":85},[79,120205,119069],{"class":89},[79,120207,93],{"class":89},[79,120209,120210],{"class":89}," mesa-utils\n",[79,120212,120213],{"class":81,"line":457},[79,120214,454],{"emptyLinePlaceholder":453},[79,120216,120217],{"class":81,"line":462},[79,120218,120219],{"class":2440},"#然后重启wsl2即可\n",[2287,120221,120222],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":57,"searchDepth":167,"depth":167,"links":120224},[120225,120226,120231],{"id":119502,"depth":167,"text":119503},{"id":119515,"depth":167,"text":119516,"children":120227},[120228,120229,120230],{"id":119519,"depth":178,"text":119520},{"id":119566,"depth":178,"text":119567},{"id":119627,"depth":178,"text":119628},{"id":119663,"depth":167,"text":119664,"children":120232},[120233,120234,120235],{"id":119667,"depth":178,"text":119668},{"id":119729,"depth":178,"text":119730},{"id":120018,"depth":178,"text":120019},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119494,"description":25516},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120242,"title":120243,"body":120244,"description":25516,"extension":2314,"meta":123180,"navigation":453,"path":123181,"seo":123182,"stem":123183,"__hash__":123184},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120245,"toc":123152},[120246,120249,120253,120259,120263,120269,120273,120461,120464,120469,120473,120477,120480,120483,120489,120494,120497,120500,120505,120538,120543,120547,120624,120627,120632,120636,120639,120678,120681,120690,120708,120713,120720,120837,120842,120845,120872,120877,120881,120890,120940,120947,120951,120954,120968,120975,121009,121014,121018,121041,121044,121049,121053,121056,121059,121062,121104,121108,121111,121114,121155,121159,121163,121166,121171,121176,121179,121202,121205,121213,121218,121221,121226,121231,121234,121239,121243,121248,121271,121276,121338,121346,121351,121356,121359,121364,121367,121372,121377,121395,121400,121406,121411,121425,121429,121432,121435,121438,121481,121484,121489,121590,121593,121598,121602,121606,121643,121647,121651,121655,121701,121705,121750,121754,121761,121769,121824,121827,121904,121907,121930,121934,121937,121942,121947,121955,121958,121963,121968,121973,121976,121981,121990,121993,121998,122001,122072,122077,122080,122085,122088,122093,122096,122101,122104,122109,122114,122117,122192,122195,122208,122213,122216,122230,122233,122262,122267,122296,122299,122304,122308,122313,122322,122325,122330,122333,122338,122341,122344,122349,122352,122357,122362,122365,122370,122373,122498,122503,122533,122536,122541,122546,122563,122566,122609,122612,122639,122644,122657,122800,122804,122809,122823,122826,122877,122880,122910,122913,122929,122934,122948,122951,123018,123023,123032,123037,123040,123052,123057,123064,123088,123091,123096,123099,123118,123123,123130,123142,123149],[10,120247,120243],{"id":120248},"_3-安装必备配置",[14,120250,120252],{"id":120251},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[51,120254,120257],{"className":120255,"code":120256,"language":56},[54],"  打开下方网站（注意，该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",[59,120258,120256],{"__ignoreMap":57},[265,120260,120262],{"id":120261},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[51,120264,120267],{"className":120265,"code":120266,"language":56},[54],"  输入以下命令\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",[59,120268,120266],{"__ignoreMap":57},[265,120270,120272],{"id":120271},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[51,120274,120278],{"className":120275,"code":120276,"language":120277,"meta":57,"style":57},"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",[59,120279,120280,120288,120299,120311,120325,120329,120339,120344,120348,120352,120357,120361,120373,120377,120382,120386,120397,120401,120417,120421,120432,120436,120441,120445,120453],{"__ignoreMap":57},[79,120281,120282,120284,120286],{"class":81,"line":82},[79,120283,86],{"class":85},[79,120285,119069],{"class":89},[79,120287,28376],{"class":89},[79,120289,120290,120292,120294,120296],{"class":81,"line":167},[79,120291,86],{"class":85},[79,120293,119069],{"class":89},[79,120295,93],{"class":89},[79,120297,120298],{"class":89}," vim\n",[79,120300,120301,120303,120306,120308],{"class":81,"line":178},[79,120302,86],{"class":85},[79,120304,120305],{"class":89}," rm",[79,120307,27460],{"class":96},[79,120309,120310],{"class":89}," \u002Fetc\u002Fapt\u002Fsources.list\n",[79,120312,120313,120315,120317,120319,120322],{"class":81,"line":457},[79,120314,86],{"class":85},[79,120316,120305],{"class":89},[79,120318,27460],{"class":96},[79,120320,120321],{"class":89}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[79,120323,120324],{"class":96},"**\n",[79,120326,120327],{"class":81,"line":462},[79,120328,454],{"emptyLinePlaceholder":453},[79,120330,120331,120333,120336],{"class":81,"line":474},[79,120332,86],{"class":85},[79,120334,120335],{"class":89}," vim",[79,120337,120338],{"class":89}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[79,120340,120341],{"class":81,"line":480},[79,120342,120343],{"class":89},"```\n",[79,120345,120346],{"class":81,"line":486},[79,120347,454],{"emptyLinePlaceholder":453},[79,120349,120350],{"class":81,"line":491},[79,120351,454],{"emptyLinePlaceholder":453},[79,120353,120354],{"class":81,"line":497},[79,120355,120356],{"class":85},"选择好Ubuntu版本后，复制下方的内容。\n",[79,120358,120359],{"class":81,"line":503},[79,120360,454],{"emptyLinePlaceholder":453},[79,120362,120363,120365,120368,120371],{"class":81,"line":509},[79,120364,2602],{"class":243},[79,120366,120367],{"class":89},"[](",[79,120369,120370],{"class":85},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[79,120372,253],{"class":89},[79,120374,120375],{"class":81,"line":514},[79,120376,454],{"emptyLinePlaceholder":453},[79,120378,120379],{"class":81,"line":520},[79,120380,120381],{"class":85},"粘贴进去\n",[79,120383,120384],{"class":81,"line":526},[79,120385,454],{"emptyLinePlaceholder":453},[79,120387,120388,120390,120392,120395],{"class":81,"line":532},[79,120389,2602],{"class":243},[79,120391,120367],{"class":89},[79,120393,120394],{"class":85},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[79,120396,253],{"class":89},[79,120398,120399],{"class":81,"line":537},[79,120400,454],{"emptyLinePlaceholder":453},[79,120402,120403,120406,120409,120412,120414],{"class":81,"line":543},[79,120404,120405],{"class":85},"按一下ESC，然后英文冒号，输入",[79,120407,120408],{"class":89}," `",[79,120410,120411],{"class":85},":wq!",[79,120413,3342],{"class":89},[79,120415,120416],{"class":85},"然后回车\n",[79,120418,120419],{"class":81,"line":549},[79,120420,454],{"emptyLinePlaceholder":453},[79,120422,120423,120425,120427,120430],{"class":81,"line":555},[79,120424,2602],{"class":243},[79,120426,120367],{"class":89},[79,120428,120429],{"class":85},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[79,120431,253],{"class":89},[79,120433,120434],{"class":81,"line":561},[79,120435,454],{"emptyLinePlaceholder":453},[79,120437,120438],{"class":81,"line":567},[79,120439,120440],{"class":85},"输入以下命令\n",[79,120442,120443],{"class":81,"line":573},[79,120444,454],{"emptyLinePlaceholder":453},[79,120446,120447,120450],{"class":81,"line":579},[79,120448,120449],{"class":89},"```",[79,120451,120452],{"class":85},"Bash\n",[79,120454,120455,120457,120459],{"class":81,"line":584},[79,120456,86],{"class":85},[79,120458,119069],{"class":89},[79,120460,28376],{"class":89},[19,120462,120463],{},"这里被替换成对应学校则成功",[19,120465,120466],{},[3699,120467],{"alt":57,"src":120468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120470,120472],{"id":120471},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[265,120474,120476],{"id":120475},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120478,120479],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120481,120482],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120484,120485],{},[2614,120486,120487],{"href":120487,"rel":120488},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[26001],[19,120490,120491],{},[3699,120492],{"alt":57,"src":120493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120495,120496],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120498,120499],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120501,120502],{},[3699,120503],{"alt":57,"src":120504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[51,120506,120508],{"className":119048,"code":120507,"language":119050,"meta":57,"style":57},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[59,120509,120510,120515,120522,120527],{"__ignoreMap":57},[79,120511,120512],{"class":81,"line":82},[79,120513,120514],{"class":2440},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[79,120516,120517,120519],{"class":81,"line":167},[79,120518,103352],{"class":96},[79,120520,120521],{"class":89}," ~\u002FDownloads\n",[79,120523,120524],{"class":81,"line":178},[79,120525,120526],{"class":2440},"#下方chrome安装包名不一定是这个，根据名字来看\n",[79,120528,120529,120531,120533,120535],{"class":81,"line":457},[79,120530,86],{"class":85},[79,120532,119069],{"class":89},[79,120534,93],{"class":89},[79,120536,120537],{"class":89}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120539,120540],{},[3699,120541],{"alt":57,"src":120542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[265,120544,120546],{"id":120545},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[51,120548,120550],{"className":119048,"code":120549,"language":119050,"meta":57,"style":57},"# 老版\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",[59,120551,120552,120557,120565,120576,120581,120585,120590,120600,120608,120619],{"__ignoreMap":57},[79,120553,120554],{"class":81,"line":82},[79,120555,120556],{"class":2440},"# 老版\n",[79,120558,120559,120561,120563],{"class":81,"line":167},[79,120560,86],{"class":85},[79,120562,119069],{"class":89},[79,120564,28376],{"class":89},[79,120566,120567,120569,120571,120573],{"class":81,"line":178},[79,120568,86],{"class":85},[79,120570,119069],{"class":89},[79,120572,93],{"class":89},[79,120574,120575],{"class":89}," neofetch\n",[79,120577,120578],{"class":81,"line":457},[79,120579,120580],{"class":85},"neofetch\n",[79,120582,120583],{"class":81,"line":462},[79,120584,454],{"emptyLinePlaceholder":453},[79,120586,120587],{"class":81,"line":474},[79,120588,120589],{"class":2440},"# 新版\n",[79,120591,120592,120594,120597],{"class":81,"line":480},[79,120593,86],{"class":85},[79,120595,120596],{"class":89}," add-apt-repository",[79,120598,120599],{"class":89}," ppa:zhangsongcui3371\u002Ffastfetch\n",[79,120601,120602,120604,120606],{"class":81,"line":486},[79,120603,86],{"class":85},[79,120605,119069],{"class":89},[79,120607,28376],{"class":89},[79,120609,120610,120612,120614,120616],{"class":81,"line":491},[79,120611,86],{"class":85},[79,120613,119069],{"class":89},[79,120615,93],{"class":89},[79,120617,120618],{"class":89}," fastfetch\n",[79,120620,120621],{"class":81,"line":497},[79,120622,120623],{"class":85},"fastfetch\n",[19,120625,120626],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120628,120629],{},[3699,120630],{"alt":57,"src":120631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[265,120633,120635],{"id":120634},"_323-移除snap应用","3.2.3 移除snap应用",[19,120637,120638],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[51,120640,120642],{"className":119048,"code":120641,"language":119050,"meta":57,"style":57},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[59,120643,120644,120656,120667],{"__ignoreMap":57},[79,120645,120646,120648,120650,120653],{"class":81,"line":82},[79,120647,86],{"class":85},[79,120649,28645],{"class":89},[79,120651,120652],{"class":89}," disable",[79,120654,120655],{"class":89}," snapd.service\n",[79,120657,120658,120660,120662,120664],{"class":81,"line":167},[79,120659,86],{"class":85},[79,120661,28645],{"class":89},[79,120663,120652],{"class":89},[79,120665,120666],{"class":89}," snapd.socket\n",[79,120668,120669,120671,120673,120675],{"class":81,"line":178},[79,120670,86],{"class":85},[79,120672,28645],{"class":89},[79,120674,120652],{"class":89},[79,120676,120677],{"class":89}," snapd.seeded.service\n",[19,120679,120680],{},"然后查看snap应用列表",[19,120682,120683,120684,120689],{},"根据你安装的选择不同（最小安装或普通安装），有",[2614,120685,120688],{"href":120686,"rel":120687},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[26001],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[51,120691,120693],{"className":119048,"code":120692,"language":119050,"meta":57,"style":57},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[59,120694,120695,120700],{"__ignoreMap":57},[79,120696,120697],{"class":81,"line":82},[79,120698,120699],{"class":2440},"# 查询当前系统上snap安装了哪些app\n",[79,120701,120702,120705],{"class":81,"line":167},[79,120703,120704],{"class":85},"snap",[79,120706,120707],{"class":89}," list\n",[19,120709,120710],{},[3699,120711],{"alt":57,"src":120712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120714,120715,120716,120719],{},"卸载掉图中所有应用，按照 ",[2528,120717,120718],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[51,120721,120723],{"className":119048,"code":120722,"language":119050,"meta":57,"style":57},"#移除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",[59,120724,120725,120730,120742,120747,120758,120763,120774,120779,120790,120795,120799,120804,120815,120826],{"__ignoreMap":57},[79,120726,120727],{"class":81,"line":82},[79,120728,120729],{"class":2440},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[79,120731,120732,120734,120737,120739],{"class":81,"line":167},[79,120733,86],{"class":85},[79,120735,120736],{"class":89}," snap",[79,120738,28213],{"class":89},[79,120740,120741],{"class":89}," snap-store\n",[79,120743,120744],{"class":81,"line":178},[79,120745,120746],{"class":2440},"#移除firefox浏览器\n",[79,120748,120749,120751,120753,120755],{"class":81,"line":457},[79,120750,86],{"class":85},[79,120752,120736],{"class":89},[79,120754,28213],{"class":89},[79,120756,120757],{"class":89}," firefox\n",[79,120759,120760],{"class":81,"line":462},[79,120761,120762],{"class":2440},"#移除gnome-42-2204\n",[79,120764,120765,120767,120769,120771],{"class":81,"line":474},[79,120766,86],{"class":85},[79,120768,120736],{"class":89},[79,120770,28213],{"class":89},[79,120772,120773],{"class":89}," gnome-42-2204\n",[79,120775,120776],{"class":81,"line":480},[79,120777,120778],{"class":2440},"#移除gtk-common-themes\n",[79,120780,120781,120783,120785,120787],{"class":81,"line":486},[79,120782,86],{"class":85},[79,120784,120736],{"class":89},[79,120786,28213],{"class":89},[79,120788,120789],{"class":89}," gtk-common-themes\n",[79,120791,120792],{"class":81,"line":491},[79,120793,120794],{"class":2440},"#移除其它...\n",[79,120796,120797],{"class":81,"line":497},[79,120798,4880],{"class":239},[79,120800,120801],{"class":81,"line":503},[79,120802,120803],{"class":2440},"#移除core22,bare以及snapd\n",[79,120805,120806,120808,120810,120812],{"class":81,"line":509},[79,120807,86],{"class":85},[79,120809,120736],{"class":89},[79,120811,28213],{"class":89},[79,120813,120814],{"class":89}," core22\n",[79,120816,120817,120819,120821,120823],{"class":81,"line":514},[79,120818,86],{"class":85},[79,120820,120736],{"class":89},[79,120822,28213],{"class":89},[79,120824,120825],{"class":89}," bare\n",[79,120827,120828,120830,120832,120834],{"class":81,"line":520},[79,120829,86],{"class":85},[79,120831,120736],{"class":89},[79,120833,28213],{"class":89},[79,120835,120836],{"class":89}," snapd\n",[19,120838,120839],{},[3699,120840],{"alt":57,"src":120841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120843,120844],{},"输入以下命令查看是否还有snap包",[51,120846,120848],{"className":119048,"code":120847,"language":119050,"meta":57,"style":57},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[59,120849,120850,120856,120860,120864,120868],{"__ignoreMap":57},[79,120851,120852,120854],{"class":81,"line":82},[79,120853,120704],{"class":85},[79,120855,120707],{"class":89},[79,120857,120858],{"class":81,"line":167},[79,120859,120556],{"class":2440},[79,120861,120862],{"class":81,"line":178},[79,120863,120580],{"class":85},[79,120865,120866],{"class":81,"line":457},[79,120867,120589],{"class":2440},[79,120869,120870],{"class":81,"line":462},[79,120871,120623],{"class":85},[19,120873,120874],{},[3699,120875],{"alt":57,"src":120876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[265,120878,120880],{"id":120879},"_324-移除snap","3.2.4 移除snap",[19,120882,120883,120884,120889],{},"在删除掉",[2614,120885,120888],{"href":120886,"rel":120887},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[26001],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[51,120891,120893],{"className":119048,"code":120892,"language":119050,"meta":57,"style":57}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[59,120894,120895,120900,120913,120918,120929],{"__ignoreMap":57},[79,120896,120897],{"class":81,"line":82},[79,120898,120899],{"class":2440}," #使用apt移除掉snap\n",[79,120901,120902,120904,120906,120908,120911],{"class":81,"line":167},[79,120903,86],{"class":85},[79,120905,119069],{"class":89},[79,120907,119377],{"class":89},[79,120909,120910],{"class":96}," --purge",[79,120912,120836],{"class":89},[79,120914,120915],{"class":81,"line":178},[79,120916,120917],{"class":2440},"#移除snapd的一些目录\n",[79,120919,120920,120922,120924,120926],{"class":81,"line":457},[79,120921,86],{"class":85},[79,120923,120305],{"class":89},[79,120925,27460],{"class":96},[79,120927,120928],{"class":89}," \u002Fvar\u002Fcache\u002Fsnapd\n",[79,120930,120931,120933,120935,120937],{"class":81,"line":462},[79,120932,86],{"class":85},[79,120934,120305],{"class":89},[79,120936,27460],{"class":96},[79,120938,120939],{"class":89}," ~\u002Fsnap\n",[19,120941,120942,120943,120946],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[59,120944,120945],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[265,120948,120950],{"id":120949},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120952,120953],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[51,120955,120957],{"className":119048,"code":120956,"language":119050,"meta":57,"style":57},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[59,120958,120959],{"__ignoreMap":57},[79,120960,120961,120963,120965],{"class":81,"line":82},[79,120962,86],{"class":85},[79,120964,120335],{"class":89},[79,120966,120967],{"class":89}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120969,120970,120971,120974],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[59,120972,120973],{},":wq"," 回车",[51,120976,120978],{"className":119048,"code":120977,"language":119050,"meta":57,"style":57},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[59,120979,120980,120987,121001],{"__ignoreMap":57},[79,120981,120982,120985],{"class":81,"line":82},[79,120983,120984],{"class":85},"Package:",[79,120986,120836],{"class":89},[79,120988,120989,120992,120995,120998],{"class":81,"line":167},[79,120990,120991],{"class":85},"Pin:",[79,120993,120994],{"class":89}," release",[79,120996,120997],{"class":89}," a=",[79,120999,121000],{"class":96},"*\n",[79,121002,121003,121006],{"class":81,"line":178},[79,121004,121005],{"class":85},"Pin-Priority:",[79,121007,121008],{"class":96}," -10\n",[19,121010,121011],{},[3699,121012],{"alt":57,"src":121013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[265,121015,121017],{"id":121016},"_326-测试是否成功","3.2.6 测试是否成功",[51,121019,121021],{"className":119048,"code":121020,"language":119050,"meta":57,"style":57},"sudo apt update\nsudo apt install firefox\n",[59,121022,121023,121031],{"__ignoreMap":57},[79,121024,121025,121027,121029],{"class":81,"line":82},[79,121026,86],{"class":85},[79,121028,119069],{"class":89},[79,121030,28376],{"class":89},[79,121032,121033,121035,121037,121039],{"class":81,"line":167},[79,121034,86],{"class":85},[79,121036,119069],{"class":89},[79,121038,93],{"class":89},[79,121040,120757],{"class":89},[19,121042,121043],{},"这里提示snapd无法被安装，就证明成功了",[19,121045,121046],{},[3699,121047],{"alt":57,"src":121048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[265,121050,121052],{"id":121051},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,121054,121055],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,121057,121058],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,121060,121061],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[51,121063,121065],{"className":119048,"code":121064,"language":119050,"meta":57,"style":57},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[59,121066,121067,121072,121081,121086,121094],{"__ignoreMap":57},[79,121068,121069],{"class":81,"line":82},[79,121070,121071],{"class":2440},"# 添加Mozilla提供的源\n",[79,121073,121074,121076,121078],{"class":81,"line":167},[79,121075,86],{"class":85},[79,121077,120596],{"class":89},[79,121079,121080],{"class":89}," ppa:mozillateam\u002Fppa\n",[79,121082,121083],{"class":81,"line":178},[79,121084,121085],{"class":2440},"# 安装Firefox\n",[79,121087,121088,121090,121092],{"class":81,"line":457},[79,121089,86],{"class":85},[79,121091,119069],{"class":89},[79,121093,28376],{"class":89},[79,121095,121096,121098,121100,121102],{"class":81,"line":462},[79,121097,86],{"class":85},[79,121099,119069],{"class":89},[79,121101,93],{"class":89},[79,121103,120757],{"class":89},[265,121105,121107],{"id":121106},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,121109,121110],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,121112,121113],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[51,121115,121117],{"className":119048,"code":121116,"language":119050,"meta":57,"style":57},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[59,121118,121119,121124,121134,121142,121146],{"__ignoreMap":57},[79,121120,121121],{"class":81,"line":82},[79,121122,121123],{"class":2440},"#删掉禁止安装snap的配置文件\n",[79,121125,121126,121128,121130,121132],{"class":81,"line":167},[79,121127,86],{"class":85},[79,121129,120305],{"class":89},[79,121131,27460],{"class":96},[79,121133,120967],{"class":89},[79,121135,121136,121138,121140],{"class":81,"line":178},[79,121137,86],{"class":85},[79,121139,119069],{"class":89},[79,121141,28376],{"class":89},[79,121143,121144],{"class":81,"line":457},[79,121145,454],{"emptyLinePlaceholder":453},[79,121147,121148,121150,121152],{"class":81,"line":462},[79,121149,86],{"class":85},[79,121151,119069],{"class":89},[79,121153,121154],{"class":89}," dist-update\n",[14,121156,121158],{"id":121157},"_33-中文输入法","3.3 中文输入法",[265,121160,121162],{"id":121161},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121164,121165],{},"官网下载搜狗输入法",[19,121167,121168],{},[3699,121169],{"alt":57,"src":121170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121172,121173],{},[3699,121174],{"alt":57,"src":121175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121177,121178],{},"打开终端输入如下",[51,121180,121182],{"className":119048,"code":121181,"language":119050,"meta":57,"style":57},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[59,121183,121184,121191],{"__ignoreMap":57},[79,121185,121186,121188],{"class":81,"line":82},[79,121187,103352],{"class":96},[79,121189,121190],{"class":89}," ~\u002FDownloads\u002F\n",[79,121192,121193,121195,121197,121199],{"class":81,"line":167},[79,121194,86],{"class":85},[79,121196,119069],{"class":89},[79,121198,93],{"class":89},[79,121200,121201],{"class":89}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121203,121204],{},"打开Fcitx",[19,121206,121207,121210],{},[3699,121208],{"alt":57,"src":121209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3699,121211],{"alt":57,"src":121212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121214,121215],{},[3699,121216],{"alt":57,"src":121217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121219,121220],{},"添加搜狗输入法",[19,121222,121223],{},[3699,121224],{"alt":57,"src":121225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121227,121228],{},[3699,121229],{"alt":57,"src":121230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121232,121233],{},"将搜狗输入法设置为唯一输入法",[19,121235,121236],{},[3699,121237],{"alt":57,"src":121238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[265,121240,121242],{"id":121241},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[26,121244,121245],{},[29,121246,121247],{},"卸载旧输入法",[51,121249,121251],{"className":120275,"code":121250,"language":120277,"meta":57,"style":57},"sudo apt purge fcitx* ibus*\n",[59,121252,121253],{"__ignoreMap":57},[79,121254,121255,121257,121259,121261,121264,121266,121269],{"class":81,"line":82},[79,121256,86],{"class":85},[79,121258,119069],{"class":89},[79,121260,119410],{"class":89},[79,121262,121263],{"class":89}," fcitx",[79,121265,2829],{"class":96},[79,121267,121268],{"class":89}," ibus",[79,121270,121000],{"class":96},[26,121272,121273],{"start":167},[29,121274,121275],{},"安装Fcitx5",[51,121277,121279],{"className":119048,"code":121278,"language":119050,"meta":57,"style":57},"# 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",[59,121280,121281,121286,121300,121304,121309,121318,121326],{"__ignoreMap":57},[79,121282,121283],{"class":81,"line":82},[79,121284,121285],{"class":2440},"# Ubuntu22.04及以上、Debian12及以上\n",[79,121287,121288,121290,121292,121294,121297],{"class":81,"line":167},[79,121289,86],{"class":85},[79,121291,119069],{"class":89},[79,121293,93],{"class":89},[79,121295,121296],{"class":89}," fcitx5",[79,121298,121299],{"class":89}," fcitx5-chinese-addons\n",[79,121301,121302],{"class":81,"line":178},[79,121303,454],{"emptyLinePlaceholder":453},[79,121305,121306],{"class":81,"line":457},[79,121307,121308],{"class":2440},"# Ubuntu20.04\n",[79,121310,121311,121313,121315],{"class":81,"line":462},[79,121312,86],{"class":85},[79,121314,120596],{"class":89},[79,121316,121317],{"class":89}," ppa:zhsj\u002Ffcitx5\n",[79,121319,121320,121322,121324],{"class":81,"line":474},[79,121321,86],{"class":85},[79,121323,119069],{"class":89},[79,121325,28376],{"class":89},[79,121327,121328,121330,121332,121334,121336],{"class":81,"line":480},[79,121329,86],{"class":85},[79,121331,119069],{"class":89},[79,121333,93],{"class":89},[79,121335,121296],{"class":89},[79,121337,121299],{"class":89},[26,121339,121340,121343],{"start":178},[29,121341,121342],{},"Reboot System",[29,121344,121345],{},"启动Fcitx5",[19,121347,121348],{},[3699,121349],{"alt":57,"src":121350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[26,121352,121353],{"start":462},[29,121354,121355],{},"修改一些设置",[19,121357,121358],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121360,121361],{},[3699,121362],{"alt":57,"src":121363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,121365,121366],{},"添加快捷键以便于更好切换中英文",[19,121368,121369],{},[3699,121370],{"alt":57,"src":121371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[26,121373,121374],{"start":474},[29,121375,121376],{},"重启",[51,121378,121380],{"className":120275,"code":121379,"language":120277,"meta":57,"style":57},"sudo shutdown -r now\n",[59,121381,121382],{"__ignoreMap":57},[79,121383,121384,121386,121389,121392],{"class":81,"line":82},[79,121385,86],{"class":85},[79,121387,121388],{"class":89}," shutdown",[79,121390,121391],{"class":96}," -r",[79,121393,121394],{"class":89}," now\n",[26,121396,121397],{"start":480},[29,121398,121399],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121401,121402],{},[2614,121403,121404],{"href":121404,"rel":121405},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[26001],[26,121407,121408],{"start":486},[29,121409,121410],{},"再重启",[51,121412,121413],{"className":120275,"code":121379,"language":120277,"meta":57,"style":57},[59,121414,121415],{"__ignoreMap":57},[79,121416,121417,121419,121421,121423],{"class":81,"line":82},[79,121418,86],{"class":85},[79,121420,121388],{"class":89},[79,121422,121391],{"class":96},[79,121424,121394],{"class":89},[14,121426,121428],{"id":121427},"_34-pip3源替换","3.4 pip3源替换",[19,121430,121431],{},"非Debian系发行版需要做。",[19,121433,121434],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121436,121437],{},"使用dnf的系统也可能不用做。",[51,121439,121441],{"className":119048,"code":121440,"language":119050,"meta":57,"style":57},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[59,121442,121443,121448,121455,121460,121465],{"__ignoreMap":57},[79,121444,121445],{"class":81,"line":82},[79,121446,121447],{"class":2440},"# 检查是否已安装 pip\n",[79,121449,121450,121453],{"class":81,"line":167},[79,121451,121452],{"class":85},"pip3",[79,121454,28427],{"class":96},[79,121456,121457],{"class":81,"line":178},[79,121458,121459],{"class":2440},"# 如果未安装，先安装 pip3（见下方）\n",[79,121461,121462],{"class":81,"line":457},[79,121463,121464],{"class":2440},"# 配置 pip 使用清华源\n",[79,121466,121467,121469,121472,121475,121478],{"class":81,"line":462},[79,121468,121452],{"class":85},[79,121470,121471],{"class":89}," config",[79,121473,121474],{"class":89}," set",[79,121476,121477],{"class":89}," global.index-url",[79,121479,121480],{"class":89}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121482,121483],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121485,121486],{},[3699,121487],{"alt":57,"src":121488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[51,121490,121492],{"className":119048,"code":121491,"language":119050,"meta":57,"style":57},"#安装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",[59,121493,121494,121499,121507,121518,121522,121527,121546,121550,121555,121567,121571,121576],{"__ignoreMap":57},[79,121495,121496],{"class":81,"line":82},[79,121497,121498],{"class":2440},"#安装pip3\n",[79,121500,121501,121503,121505],{"class":81,"line":167},[79,121502,86],{"class":85},[79,121504,119069],{"class":89},[79,121506,28376],{"class":89},[79,121508,121509,121511,121513,121515],{"class":81,"line":178},[79,121510,86],{"class":85},[79,121512,28210],{"class":89},[79,121514,93],{"class":89},[79,121516,121517],{"class":89}," python3-pip\n",[79,121519,121520],{"class":81,"line":457},[79,121521,454],{"emptyLinePlaceholder":453},[79,121523,121524],{"class":81,"line":462},[79,121525,121526],{"class":2440},"#更新pip3\n",[79,121528,121529,121531,121533,121535,121537,121539,121542,121544],{"class":81,"line":474},[79,121530,102974],{"class":85},[79,121532,102977],{"class":96},[79,121534,103000],{"class":89},[79,121536,93],{"class":89},[79,121538,28562],{"class":96},[79,121540,121541],{"class":89}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[79,121543,103005],{"class":96},[79,121545,103008],{"class":89},[79,121547,121548],{"class":81,"line":480},[79,121549,454],{"emptyLinePlaceholder":453},[79,121551,121552],{"class":81,"line":486},[79,121553,121554],{"class":2440},"#设置pip源为清华源\n",[79,121556,121557,121559,121561,121563,121565],{"class":81,"line":491},[79,121558,121452],{"class":85},[79,121560,121471],{"class":89},[79,121562,121474],{"class":89},[79,121564,121477],{"class":89},[79,121566,121480],{"class":89},[79,121568,121569],{"class":81,"line":497},[79,121570,454],{"emptyLinePlaceholder":453},[79,121572,121573],{"class":81,"line":503},[79,121574,121575],{"class":2440},"#测试\n",[79,121577,121578,121580,121582,121584,121586,121588],{"class":81,"line":509},[79,121579,102974],{"class":85},[79,121581,102977],{"class":96},[79,121583,103000],{"class":89},[79,121585,93],{"class":89},[79,121587,103005],{"class":96},[79,121589,103008],{"class":89},[19,121591,121592],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121594,121595],{},[3699,121596],{"alt":57,"src":121597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121599,121601],{"id":121600},"_35-显卡驱动安装","3.5 显卡驱动安装",[265,121603,121605],{"id":121604},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[51,121607,121609],{"className":120275,"code":121608,"language":120277,"meta":57,"style":57},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[59,121610,121611,121616,121631,121636],{"__ignoreMap":57},[79,121612,121613],{"class":81,"line":82},[79,121614,121615],{"class":2440},"# 如果是使用apt安装的驱动\n",[79,121617,121618,121620,121622,121624,121626,121629],{"class":81,"line":167},[79,121619,86],{"class":85},[79,121621,28210],{"class":89},[79,121623,28213],{"class":89},[79,121625,120910],{"class":96},[79,121627,121628],{"class":89}," nvidia",[79,121630,121000],{"class":96},[79,121632,121633],{"class":81,"line":178},[79,121634,121635],{"class":2440},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[79,121637,121638,121640],{"class":81,"line":457},[79,121639,86],{"class":85},[79,121641,121642],{"class":89}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[265,121644,121646],{"id":121645},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[24137,121648,121650],{"id":121649},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[25049,121652,121654],{"id":121653},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[51,121656,121658],{"className":120275,"code":121657,"language":120277,"meta":57,"style":57},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[59,121659,121660,121665,121676,121681,121691,121696],{"__ignoreMap":57},[79,121661,121662],{"class":81,"line":82},[79,121663,121664],{"class":2440},"# 安装英伟达驱动\n",[79,121666,121667,121669,121671,121673],{"class":81,"line":167},[79,121668,86],{"class":85},[79,121670,119069],{"class":89},[79,121672,93],{"class":89},[79,121674,121675],{"class":89}," nvidia-driver-版本号\n",[79,121677,121678],{"class":81,"line":178},[79,121679,121680],{"class":2440},"# 重启 \n",[79,121682,121683,121685,121687,121689],{"class":81,"line":457},[79,121684,86],{"class":85},[79,121686,121388],{"class":89},[79,121688,121391],{"class":96},[79,121690,121394],{"class":89},[79,121692,121693],{"class":81,"line":462},[79,121694,121695],{"class":2440},"# 检查驱动是否安装成功\n",[79,121697,121698],{"class":81,"line":474},[79,121699,121700],{"class":85},"nvidia-smi\n",[25049,121702,121704],{"id":121703},"_35212-debian","3.5.2.1.2 Debian",[51,121706,121708],{"className":120275,"code":121707,"language":120277,"meta":57,"style":57},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[59,121709,121710,121714,121728,121732,121742,121746],{"__ignoreMap":57},[79,121711,121712],{"class":81,"line":82},[79,121713,121664],{"class":2440},[79,121715,121716,121718,121720,121722,121725],{"class":81,"line":167},[79,121717,86],{"class":85},[79,121719,119069],{"class":89},[79,121721,93],{"class":89},[79,121723,121724],{"class":89}," nvidia-driver",[79,121726,121727],{"class":89}," nvidia-settings\n",[79,121729,121730],{"class":81,"line":178},[79,121731,121680],{"class":2440},[79,121733,121734,121736,121738,121740],{"class":81,"line":457},[79,121735,86],{"class":85},[79,121737,121388],{"class":89},[79,121739,121391],{"class":96},[79,121741,121394],{"class":89},[79,121743,121744],{"class":81,"line":462},[79,121745,121695],{"class":2440},[79,121747,121748],{"class":81,"line":474},[79,121749,121700],{"class":85},[24137,121751,121753],{"id":121752},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121755,121756,121757,121760],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[2528,121758,121759],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121762,121763,121764],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25693,121765,121766],{},[2528,121767,121768],{},"（也可以不禁用桌面环境，直接进行下一步。）",[51,121770,121772],{"className":120275,"code":121771,"language":120277,"meta":57,"style":57},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[59,121773,121774,121779,121789,121794,121807,121812],{"__ignoreMap":57},[79,121775,121776],{"class":81,"line":82},[79,121777,121778],{"class":2440},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[79,121780,121781,121783,121786],{"class":81,"line":167},[79,121782,86],{"class":85},[79,121784,121785],{"class":89}," telinit",[79,121787,121788],{"class":96}," 3\n",[79,121790,121791],{"class":81,"line":178},[79,121792,121793],{"class":2440},"# ubuntu 使用下方命令\n",[79,121795,121796,121798,121801,121804],{"class":81,"line":457},[79,121797,86],{"class":85},[79,121799,121800],{"class":89}," service",[79,121802,121803],{"class":89}," lightdm",[79,121805,121806],{"class":89}," stop\n",[79,121808,121809],{"class":81,"line":462},[79,121810,121811],{"class":2440},"# Fedora 使用下方命令\n",[79,121813,121814,121816,121818,121821],{"class":81,"line":474},[79,121815,86],{"class":85},[79,121817,28645],{"class":89},[79,121819,121820],{"class":89}," isolate",[79,121822,121823],{"class":89}," multi-user.target\n",[19,121825,121826],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[51,121828,121830],{"className":120275,"code":121829,"language":120277,"meta":57,"style":57},"# 编译环境+准备工作\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",[59,121831,121832,121837,121848,121853,121860,121865,121877,121882,121889,121894],{"__ignoreMap":57},[79,121833,121834],{"class":81,"line":82},[79,121835,121836],{"class":2440},"# 编译环境+准备工作\n",[79,121838,121839,121841,121843,121845],{"class":81,"line":167},[79,121840,86],{"class":85},[79,121842,119069],{"class":89},[79,121844,93],{"class":89},[79,121846,121847],{"class":89}," build-essential\n",[79,121849,121850],{"class":81,"line":178},[79,121851,121852],{"class":2440},"# 进入到.run目录中\n",[79,121854,121855,121857],{"class":81,"line":457},[79,121856,103352],{"class":96},[79,121858,121859],{"class":89}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[79,121861,121862],{"class":81,"line":462},[79,121863,121864],{"class":2440},"# 给驱动文件增加可执行权限：\n",[79,121866,121867,121869,121871,121874],{"class":81,"line":474},[79,121868,86],{"class":85},[79,121870,26715],{"class":89},[79,121872,121873],{"class":89}," a+x",[79,121875,121876],{"class":89}," NVIDIA-Linux-x86_64-550.107.02.run\n",[79,121878,121879],{"class":81,"line":480},[79,121880,121881],{"class":2440},"# 然后执行安装：\n",[79,121883,121884,121886],{"class":81,"line":486},[79,121885,86],{"class":85},[79,121887,121888],{"class":89}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[79,121890,121891],{"class":81,"line":491},[79,121892,121893],{"class":2440},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[79,121895,121896,121898,121901],{"class":81,"line":497},[79,121897,86],{"class":85},[79,121899,121900],{"class":89}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[79,121902,121903],{"class":96},"  --no-opengl-files\n",[19,121905,121906],{},"安装完毕重启即可",[51,121908,121910],{"className":120275,"code":121909,"language":120277,"meta":57,"style":57},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[59,121911,121912,121916,121922,121926],{"__ignoreMap":57},[79,121913,121914],{"class":81,"line":82},[79,121915,121680],{"class":2440},[79,121917,121918,121920],{"class":81,"line":167},[79,121919,86],{"class":85},[79,121921,28779],{"class":89},[79,121923,121924],{"class":81,"line":178},[79,121925,121695],{"class":2440},[79,121927,121928],{"class":81,"line":457},[79,121929,121700],{"class":85},[265,121931,121933],{"id":121932},"_353-安装cuda","3.5.3 安装CUDA",[19,121935,121936],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121938,121939],{},[3699,121940],{"alt":57,"src":121941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[26,121943,121944],{},[29,121945,121946],{},"先查看显卡驱动所支持的最高CUDA版本",[51,121948,121949],{"className":120275,"code":121700,"language":120277,"meta":57,"style":57},[59,121950,121951],{"__ignoreMap":57},[79,121952,121953],{"class":81,"line":82},[79,121954,121700],{"class":85},[19,121956,121957],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121959,121960],{},[3699,121961],{"alt":57,"src":121962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[26,121964,121965],{"start":167},[29,121966,121967],{},"下载CUDA并安装CUDA",[19,121969,120054,121970],{},[2614,121971,120057],{"href":120057,"rel":121972},[26001],[19,121974,121975],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121977,121978],{},[3699,121979],{"alt":57,"src":121980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121982,121983,121984,121989],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2614,121985,121988],{"href":121986,"rel":121987},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[26001],"Vinci机器人队单片机教程","）",[19,121991,121992],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121994,121995],{},[3699,121996],{"alt":57,"src":121997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121999,122000],{},"将最下方框框里的命令敲入终端",[51,122002,122004],{"className":120275,"code":122003,"language":120277,"meta":57,"style":57},"# 在当前文件夹下创建一个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",[59,122005,122006,122011,122020,122025,122032,122037,122045,122050,122061,122066],{"__ignoreMap":57},[79,122007,122008],{"class":81,"line":82},[79,122009,122010],{"class":2440},"# 在当前文件夹下创建一个ttt的子文件夹\n",[79,122012,122013,122015,122017],{"class":81,"line":167},[79,122014,103342],{"class":85},[79,122016,31346],{"class":96},[79,122018,122019],{"class":89}," .\u002Fttt\n",[79,122021,122022],{"class":81,"line":178},[79,122023,122024],{"class":2440},"# 进入ttt文件夹\n",[79,122026,122027,122029],{"class":81,"line":457},[79,122028,103352],{"class":96},[79,122030,122031],{"class":89}," ttt\n",[79,122033,122034],{"class":81,"line":462},[79,122035,122036],{"class":2440},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[79,122038,122039,122042],{"class":81,"line":474},[79,122040,122041],{"class":85},"wget",[79,122043,122044],{"class":89}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[79,122046,122047],{"class":81,"line":480},[79,122048,122049],{"class":2440},"# 给予权限\n",[79,122051,122052,122054,122056,122058],{"class":81,"line":486},[79,122053,86],{"class":85},[79,122055,26715],{"class":89},[79,122057,121873],{"class":89},[79,122059,122060],{"class":89}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[79,122062,122063],{"class":81,"line":491},[79,122064,122065],{"class":2440},"# 运行脚本\n",[79,122067,122068,122070],{"class":81,"line":497},[79,122069,86],{"class":85},[79,122071,122060],{"class":89},[19,122073,122074],{},[3699,122075],{"alt":57,"src":122076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,122078,122079],{},"正在安装中：",[19,122081,122082],{},[3699,122083],{"alt":57,"src":122084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,122086,122087],{},"输入accept接受即可",[19,122089,122090],{},[3699,122091],{"alt":57,"src":122092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,122094,122095],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,122097,122098],{},[3699,122099],{"alt":57,"src":122100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,122102,122103],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,122105,122106],{},[3699,122107],{"alt":57,"src":122108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[26,122110,122111],{"start":178},[29,122112,122113],{},"配置环境",[19,122115,122116],{},"根据上方确认一下路径，比如我上面红色框起来的为",[51,122118,122120],{"className":120275,"code":122119,"language":120277,"meta":57,"style":57},"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",[59,122121,122122,122138,122153],{"__ignoreMap":57},[79,122123,122124,122127,122130,122133,122136],{"class":81,"line":82},[79,122125,122126],{"class":85},"Please",[79,122128,122129],{"class":89}," make",[79,122131,122132],{"class":89}," sure",[79,122134,122135],{"class":89}," that",[79,122137,4880],{"class":239},[79,122139,122140,122142,122145,122148,122151],{"class":81,"line":167},[79,122141,333],{"class":85},[79,122143,122144],{"class":89},"   PATH",[79,122146,122147],{"class":89}," includes",[79,122149,122150],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[79,122152,4880],{"class":239},[79,122154,122155,122157,122160,122162,122165,122168,122170,122173,122176,122179,122182,122184,122187,122189],{"class":81,"line":178},[79,122156,333],{"class":85},[79,122158,122159],{"class":89},"   LD_LIBRARY_PATH",[79,122161,122147],{"class":89},[79,122163,122164],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[79,122166,122167],{"class":89}," or,",[79,122169,7405],{"class":89},[79,122171,122172],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[79,122174,122175],{"class":89}," to",[79,122177,122178],{"class":89}," \u002Fetc\u002Fld.so.conf",[79,122180,122181],{"class":89}," and",[79,122183,29362],{"class":89},[79,122185,122186],{"class":89}," ldconfig",[79,122188,66714],{"class":89},[79,122190,122191],{"class":89}," root\n",[19,122193,122194],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[51,122196,122198],{"className":120275,"code":122197,"language":120277,"meta":57,"style":57},"which nvcc\n",[59,122199,122200],{"__ignoreMap":57},[79,122201,122202,122205],{"class":81,"line":82},[79,122203,122204],{"class":96},"which",[79,122206,122207],{"class":89}," nvcc\n",[19,122209,122210],{},[3699,122211],{"alt":57,"src":122212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122214,122215],{},"所以我进行以下操作：",[51,122217,122219],{"className":120275,"code":122218,"language":120277,"meta":57,"style":57},"sudo vim ~\u002F.bashrc\n",[59,122220,122221],{"__ignoreMap":57},[79,122222,122223,122225,122227],{"class":81,"line":82},[79,122224,86],{"class":85},[79,122226,120335],{"class":89},[79,122228,122229],{"class":89}," ~\u002F.bashrc\n",[19,122231,122232],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[51,122234,122236],{"className":120275,"code":122235,"language":120277,"meta":57,"style":57},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[59,122237,122238,122250],{"__ignoreMap":57},[79,122239,122240,122242,122245,122247],{"class":81,"line":82},[79,122241,27178],{"class":243},[79,122243,122244],{"class":239}," PATH",[79,122246,244],{"class":243},[79,122248,122249],{"class":239},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[79,122251,122252,122254,122257,122259],{"class":81,"line":167},[79,122253,27178],{"class":243},[79,122255,122256],{"class":239}," LD_LIBRARY_PATH",[79,122258,244],{"class":243},[79,122260,122261],{"class":239},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122263,122264],{},[3699,122265],{"alt":57,"src":122266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[51,122268,122270],{"className":120275,"code":122269,"language":120277,"meta":57,"style":57},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[59,122271,122272,122277,122283,122288],{"__ignoreMap":57},[79,122273,122274],{"class":81,"line":82},[79,122275,122276],{"class":2440},"# 刷新当前终端的环境变量\n",[79,122278,122279,122281],{"class":81,"line":167},[79,122280,102988],{"class":96},[79,122282,122229],{"class":89},[79,122284,122285],{"class":81,"line":178},[79,122286,122287],{"class":2440},"# 验证CUDA是否安装成功\n",[79,122289,122290,122293],{"class":81,"line":457},[79,122291,122292],{"class":85},"nvcc",[79,122294,122295],{"class":96}," -V\n",[19,122297,122298],{},"出现下图这种则安装成功。",[19,122300,122301],{},[3699,122302],{"alt":57,"src":122303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[265,122305,122307],{"id":122306},"_354-安装cudnn","3.5.4 安装cuDNN",[26,122309,122310],{},[29,122311,122312],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122314,122315,122316,122321],{},"前往 NVIDIA cuDNN 下载页面：",[2614,122317,122320],{"href":122318,"rel":122319},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[26001],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122323,122324],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122326,122327],{},[3699,122328],{"alt":57,"src":122329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122331,122332],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122334,122335],{},[3699,122336],{"alt":57,"src":122337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122339,122340],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122342,122343],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122345,122346],{},[2528,122347,122348],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122350,122351],{},"下载好的：",[19,122353,122354],{},[3699,122355],{"alt":57,"src":122356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[26,122358,122359],{"start":167},[29,122360,122361],{},"安装cuDNN",[19,122363,122364],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,122366,122367],{},[3699,122368],{"alt":57,"src":122369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,122371,122372],{},"解压文件，并复制到对应位置完成安装",[51,122374,122376],{"className":120275,"code":122375,"language":120277,"meta":57,"style":57},"# 解压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",[59,122377,122378,122383,122394,122399,122406,122411,122427,122441,122446,122457,122466,122470,122486],{"__ignoreMap":57},[79,122379,122380],{"class":81,"line":82},[79,122381,122382],{"class":2440},"# 解压cuDNN文件\n",[79,122384,122385,122388,122391],{"class":81,"line":167},[79,122386,122387],{"class":85},"tar",[79,122389,122390],{"class":96}," -xvf",[79,122392,122393],{"class":89}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[79,122395,122396],{"class":81,"line":178},[79,122397,122398],{"class":2440},"# cd进文件夹\n",[79,122400,122401,122403],{"class":81,"line":457},[79,122402,103352],{"class":96},[79,122404,122405],{"class":89}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[79,122407,122408],{"class":81,"line":462},[79,122409,122410],{"class":2440},"# 复制cuDNN文件到CUDA目录\n",[79,122412,122413,122415,122417,122420,122422,122425],{"class":81,"line":474},[79,122414,86],{"class":85},[79,122416,29993],{"class":89},[79,122418,122419],{"class":89}," include\u002Fcudnn",[79,122421,2829],{"class":96},[79,122423,122424],{"class":89},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[79,122426,4880],{"class":239},[79,122428,122429,122431,122433,122436,122438],{"class":81,"line":480},[79,122430,86],{"class":85},[79,122432,29993],{"class":89},[79,122434,122435],{"class":89}," lib\u002Flibcudnn",[79,122437,2829],{"class":96},[79,122439,122440],{"class":89},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[79,122442,122443],{"class":81,"line":486},[79,122444,122445],{"class":2440},"# 对比一下有没有缺文件\n",[79,122447,122448,122450,122453,122455],{"class":81,"line":491},[79,122449,28893],{"class":85},[79,122451,122452],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[79,122454,2829],{"class":96},[79,122456,4880],{"class":239},[79,122458,122459,122461,122464],{"class":81,"line":497},[79,122460,28893],{"class":85},[79,122462,122463],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[79,122465,121000],{"class":96},[79,122467,122468],{"class":81,"line":503},[79,122469,122049],{"class":2440},[79,122471,122472,122474,122476,122479,122481,122483],{"class":81,"line":509},[79,122473,86],{"class":85},[79,122475,26715],{"class":89},[79,122477,122478],{"class":89}," a+r",[79,122480,122452],{"class":89},[79,122482,2829],{"class":96},[79,122484,122485],{"class":239},"   \n",[79,122487,122488,122490,122492,122494,122496],{"class":81,"line":514},[79,122489,86],{"class":85},[79,122491,26715],{"class":89},[79,122493,122478],{"class":89},[79,122495,122463],{"class":89},[79,122497,121000],{"class":96},[26,122499,122500],{"start":178},[29,122501,122502],{},"检查是否安装成功",[51,122504,122506],{"className":120275,"code":122505,"language":120277,"meta":57,"style":57},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[59,122507,122508,122513],{"__ignoreMap":57},[79,122509,122510],{"class":81,"line":82},[79,122511,122512],{"class":2440},"# 检查cuDNN版本命令\n",[79,122514,122515,122518,122521,122523,122525,122528,122531],{"class":81,"line":167},[79,122516,122517],{"class":85},"cat",[79,122519,122520],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[79,122522,27245],{"class":243},[79,122524,32366],{"class":85},[79,122526,122527],{"class":89}," CUDNN_MAJOR",[79,122529,122530],{"class":96}," -A",[79,122532,49837],{"class":96},[19,122534,122535],{},"出现下图这样的就是安装成功了",[19,122537,122538],{},[3699,122539],{"alt":57,"src":122540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[26,122542,122543],{"start":457},[29,122544,122545],{},"软链接(一般不需要)",[51,122547,122549],{"className":120275,"code":122548,"language":120277,"meta":57,"style":57},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[59,122550,122551,122556],{"__ignoreMap":57},[79,122552,122553],{"class":81,"line":82},[79,122554,122555],{"class":2440},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[79,122557,122558,122560],{"class":81,"line":167},[79,122559,86],{"class":85},[79,122561,122562],{"class":89}," ldconfig\n",[19,122564,122565],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[51,122567,122572],{"className":122568,"code":122569,"language":122570,"meta":122571,"style":57},"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",[59,122573,122574,122579,122584,122589,122594,122599,122604],{"__ignoreMap":57},[79,122575,122576],{"class":81,"line":82},[79,122577,122578],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[79,122580,122581],{"class":81,"line":167},[79,122582,122583],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[79,122585,122586],{"class":81,"line":178},[79,122587,122588],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[79,122590,122591],{"class":81,"line":457},[79,122592,122593],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[79,122595,122596],{"class":81,"line":462},[79,122597,122598],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[79,122600,122601],{"class":81,"line":474},[79,122602,122603],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[79,122605,122606],{"class":81,"line":480},[79,122607,122608],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122610,122611],{},"运行下方的命令",[51,122613,122615],{"className":120275,"code":122614,"language":120277,"meta":57,"style":57},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[59,122616,122617,122622,122629,122634],{"__ignoreMap":57},[79,122618,122619],{"class":81,"line":82},[79,122620,122621],{"class":2440},"# cd进入CUDA路径\n",[79,122623,122624,122626],{"class":81,"line":167},[79,122625,103352],{"class":96},[79,122627,122628],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[79,122630,122631],{"class":81,"line":178},[79,122632,122633],{"class":2440}," # 查看本路径下的需要软链接的文件名\n",[79,122635,122636],{"class":81,"line":457},[79,122637,122638],{"class":85}," ls\n",[19,122640,122641],{},[3699,122642],{"alt":57,"src":122643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122645,122646,122647,20549,122650,20549,122653,122656],{},"如上图，我需要将",[59,122648,122649],{},"libcudnn_xxx_xxxxx.so.8.9.7",[59,122651,122652],{},"libcudnn_xxx_xxxxx.so.8",[59,122654,122655],{},"libcudnn_xxx_xxxxx.so","软链接",[51,122658,122660],{"className":120275,"code":122659,"language":120277,"meta":57,"style":57},"# 创建符号链接。对于每个 .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",[59,122661,122662,122667,122683,122697,122711,122725,122739,122753,122767,122772,122778,122783],{"__ignoreMap":57},[79,122663,122664],{"class":81,"line":82},[79,122665,122666],{"class":2440},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[79,122668,122669,122671,122674,122677,122680],{"class":81,"line":167},[79,122670,86],{"class":85},[79,122672,122673],{"class":89}," ln",[79,122675,122676],{"class":96}," -sf",[79,122678,122679],{"class":89}," libcudnn_cnn_train.so.8.9.7",[79,122681,122682],{"class":89}," libcudnn_cnn_train.so.8\n",[79,122684,122685,122687,122689,122691,122694],{"class":81,"line":178},[79,122686,86],{"class":85},[79,122688,122673],{"class":89},[79,122690,122676],{"class":96},[79,122692,122693],{"class":89}," libcudnn_adv_infer.so.8.9.7",[79,122695,122696],{"class":89}," libcudnn_adv_infer.so.8\n",[79,122698,122699,122701,122703,122705,122708],{"class":81,"line":457},[79,122700,86],{"class":85},[79,122702,122673],{"class":89},[79,122704,122676],{"class":96},[79,122706,122707],{"class":89}," libcudnn_adv_train.so.8.9.7",[79,122709,122710],{"class":89}," libcudnn_adv_train.so.8\n",[79,122712,122713,122715,122717,122719,122722],{"class":81,"line":462},[79,122714,86],{"class":85},[79,122716,122673],{"class":89},[79,122718,122676],{"class":96},[79,122720,122721],{"class":89}," libcudnn_cnn_infer.so.8.9.7",[79,122723,122724],{"class":89}," libcudnn_cnn_infer.so.8\n",[79,122726,122727,122729,122731,122733,122736],{"class":81,"line":474},[79,122728,86],{"class":85},[79,122730,122673],{"class":89},[79,122732,122676],{"class":96},[79,122734,122735],{"class":89}," libcudnn.so.8.9.7",[79,122737,122738],{"class":89}," libcudnn.so.8\n",[79,122740,122741,122743,122745,122747,122750],{"class":81,"line":480},[79,122742,86],{"class":85},[79,122744,122673],{"class":89},[79,122746,122676],{"class":96},[79,122748,122749],{"class":89}," libcudnn_ops_infer.so.8.9.7",[79,122751,122752],{"class":89}," libcudnn_ops_infer.so.8\n",[79,122754,122755,122757,122759,122761,122764],{"class":81,"line":486},[79,122756,86],{"class":85},[79,122758,122673],{"class":89},[79,122760,122676],{"class":96},[79,122762,122763],{"class":89}," libcudnn_ops_train.so.8.9.7",[79,122765,122766],{"class":89}," libcudnn_ops_train.so.8\n",[79,122768,122769],{"class":81,"line":491},[79,122770,122771],{"class":2440},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[79,122773,122774,122776],{"class":81,"line":497},[79,122775,86],{"class":85},[79,122777,122562],{"class":89},[79,122779,122780],{"class":81,"line":503},[79,122781,122782],{"class":2440},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[79,122784,122785,122787,122790,122793,122795,122798],{"class":81,"line":509},[79,122786,28893],{"class":85},[79,122788,122789],{"class":96}," -l",[79,122791,122792],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[79,122794,2829],{"class":96},[79,122796,122797],{"class":89},".so",[79,122799,121000],{"class":96},[265,122801,122803],{"id":122802},"_355-常见问题","3.5.5 常见问题",[26,122805,122806],{},[29,122807,122808],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[51,122810,122812],{"className":120275,"code":122811,"language":120277,"meta":57,"style":57},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[59,122813,122814],{"__ignoreMap":57},[79,122815,122816,122818,122820],{"class":81,"line":82},[79,122817,86],{"class":85},[79,122819,120335],{"class":89},[79,122821,122822],{"class":89}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122824,122825],{},"blacklist-nouveau.conf文件内容如下：",[51,122827,122829],{"className":120275,"code":122828,"language":120277,"meta":57,"style":57},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[59,122830,122831,122839,122846,122858,122868],{"__ignoreMap":57},[79,122832,122833,122836],{"class":81,"line":82},[79,122834,122835],{"class":85},"blacklist",[79,122837,122838],{"class":89}," nouveau\n",[79,122840,122841,122843],{"class":81,"line":167},[79,122842,122835],{"class":85},[79,122844,122845],{"class":89}," lbm-nouveau\n",[79,122847,122848,122850,122853,122856],{"class":81,"line":178},[79,122849,117682],{"class":85},[79,122851,122852],{"class":89}," nouveau",[79,122854,122855],{"class":89}," modeset=",[79,122857,5290],{"class":96},[79,122859,122860,122863,122865],{"class":81,"line":457},[79,122861,122862],{"class":96},"alias",[79,122864,122852],{"class":89},[79,122866,122867],{"class":89}," off\n",[79,122869,122870,122872,122875],{"class":81,"line":462},[79,122871,122862],{"class":96},[79,122873,122874],{"class":89}," lbm-nouveau",[79,122876,122867],{"class":89},[19,122878,122879],{},"接着运行下方命令",[51,122881,122883],{"className":120275,"code":122882,"language":120277,"meta":57,"style":57},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[59,122884,122885,122895,122900],{"__ignoreMap":57},[79,122886,122887,122889,122892],{"class":81,"line":82},[79,122888,86],{"class":85},[79,122890,122891],{"class":89}," update-initramfs",[79,122893,122894],{"class":96}," -u\n",[79,122896,122897],{"class":81,"line":167},[79,122898,122899],{"class":85},"或者\n",[79,122901,122902,122904,122907],{"class":81,"line":178},[79,122903,86],{"class":85},[79,122905,122906],{"class":89}," dracut",[79,122908,122909],{"class":96}," --force\n",[19,122911,122912],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[51,122914,122916],{"className":120275,"code":122915,"language":120277,"meta":57,"style":57},"lsmod | grep nouveau\n",[59,122917,122918],{"__ignoreMap":57},[79,122919,122920,122923,122925,122927],{"class":81,"line":82},[79,122921,122922],{"class":85},"lsmod",[79,122924,27245],{"class":243},[79,122926,32366],{"class":85},[79,122928,122838],{"class":89},[26,122930,122931],{"start":167},[29,122932,122933],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[51,122935,122937],{"className":120275,"code":122936,"language":120277,"meta":57,"style":57},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[59,122938,122939],{"__ignoreMap":57},[79,122940,122941,122943,122945],{"class":81,"line":82},[79,122942,86],{"class":85},[79,122944,120335],{"class":89},[79,122946,122947],{"class":89}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122949,122950],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[51,122952,122954],{"className":120275,"code":122953,"language":120277,"meta":57,"style":57},"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",[59,122955,122956,122964,122972,122980,122987,122995,123005,123013],{"__ignoreMap":57},[79,122957,122958,122961],{"class":81,"line":82},[79,122959,122960],{"class":85},"Section",[79,122962,122963],{"class":89}," \"OutputClass\"\n",[79,122965,122966,122969],{"class":81,"line":167},[79,122967,122968],{"class":85},"   Identifier",[79,122970,122971],{"class":89}," \"nvidia\"\n",[79,122973,122974,122977],{"class":81,"line":178},[79,122975,122976],{"class":85},"   MatchDriver",[79,122978,122979],{"class":89}," \"nvidia-drm\"\n",[79,122981,122982,122985],{"class":81,"line":457},[79,122983,122984],{"class":85},"   Driver",[79,122986,122971],{"class":89},[79,122988,122989,122992],{"class":81,"line":462},[79,122990,122991],{"class":85},"   Option",[79,122993,122994],{"class":89}," \"AllowEmptyInitialConfiguration\"\n",[79,122996,122997,122999,123002],{"class":81,"line":474},[79,122998,122991],{"class":85},[79,123000,123001],{"class":89}," \"PrimaryGPU\"",[79,123003,123004],{"class":89}," \"yes\"\n",[79,123006,123007,123010],{"class":81,"line":480},[79,123008,123009],{"class":85},"   ModulePath",[79,123011,123012],{"class":89}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[79,123014,123015],{"class":81,"line":486},[79,123016,123017],{"class":85},"EndSection\n",[26,123019,123020],{"start":178},[29,123021,123022],{},"安装N卡驱动提示错误",[51,123024,123026],{"className":122568,"code":123025,"language":122570,"meta":122571,"style":57},"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",[59,123027,123028],{"__ignoreMap":57},[79,123029,123030],{"class":81,"line":82},[79,123031,123025],{},[26,123033,123034],{},[29,123035,123036],{},"检查当前运行的内核版本：",[19,123038,123039],{},"运行以下命令以查看你当前正在使用的内核版本：",[51,123041,123043],{"className":119048,"code":123042,"language":119050,"meta":57,"style":57},"uname -r\n",[59,123044,123045],{"__ignoreMap":57},[79,123046,123047,123049],{"class":81,"line":82},[79,123048,72312],{"class":85},[79,123050,123051],{"class":96}," -r\n",[26,123053,123054],{"start":167},[29,123055,123056],{},"安装内核开发文件：",[19,123058,123059,123060,123063],{},"确保你已经安装了与当前内核版本相匹配的 ",[59,123061,123062],{},"kernel-devel"," 包。运行以下命令来安装：",[51,123065,123067],{"className":119048,"code":123066,"language":119050,"meta":57,"style":57},"sudo dnf install kernel-devel-$(uname -r)\n",[59,123068,123069],{"__ignoreMap":57},[79,123070,123071,123073,123075,123077,123080,123082,123084,123086],{"class":81,"line":82},[79,123072,86],{"class":85},[79,123074,90],{"class":89},[79,123076,93],{"class":89},[79,123078,123079],{"class":89}," kernel-devel-",[79,123081,27235],{"class":239},[79,123083,72312],{"class":85},[79,123085,121391],{"class":96},[79,123087,253],{"class":239},[19,123089,123090],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[26,123092,123093],{"start":178},[29,123094,123095],{},"安装内核源代码（如果需要）：",[19,123097,123098],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[51,123100,123102],{"className":119048,"code":123101,"language":119050,"meta":57,"style":57},"sudo dnf install kernel-headers kernel-source\n",[59,123103,123104],{"__ignoreMap":57},[79,123105,123106,123108,123110,123112,123115],{"class":81,"line":82},[79,123107,86],{"class":85},[79,123109,90],{"class":89},[79,123111,93],{"class":89},[79,123113,123114],{"class":89}," kernel-headers",[79,123116,123117],{"class":89}," kernel-source\n",[26,123119,123120],{"start":457},[29,123121,123122],{},"检查安装：",[19,123124,123125,123126,123129],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[59,123127,123128],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[51,123131,123133],{"className":119048,"code":123132,"language":119050,"meta":57,"style":57},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[59,123134,123135],{"__ignoreMap":57},[79,123136,123137,123139],{"class":81,"line":82},[79,123138,28893],{"class":85},[79,123140,123141],{"class":89}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,123143,123144,123145,123148],{},"如果仍然遇到问题，可以通过 ",[59,123146,123147],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[2287,123150,123151],{},"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":57,"searchDepth":167,"depth":167,"links":123153},[123154,123158,123168,123172,123173],{"id":120251,"depth":167,"text":120252,"children":123155},[123156,123157],{"id":120261,"depth":178,"text":120262},{"id":120271,"depth":178,"text":120272},{"id":120471,"depth":167,"text":120472,"children":123159},[123160,123161,123162,123163,123164,123165,123166,123167],{"id":120475,"depth":178,"text":120476},{"id":120545,"depth":178,"text":120546},{"id":120634,"depth":178,"text":120635},{"id":120879,"depth":178,"text":120880},{"id":120949,"depth":178,"text":120950},{"id":121016,"depth":178,"text":121017},{"id":121051,"depth":178,"text":121052},{"id":121106,"depth":178,"text":121107},{"id":121157,"depth":167,"text":121158,"children":123169},[123170,123171],{"id":121161,"depth":178,"text":121162},{"id":121241,"depth":178,"text":121242},{"id":121427,"depth":167,"text":121428},{"id":121600,"depth":167,"text":121601,"children":123174},[123175,123176,123177,123178,123179],{"id":121604,"depth":178,"text":121605},{"id":121645,"depth":178,"text":121646},{"id":121932,"depth":178,"text":121933},{"id":122306,"depth":178,"text":122307},{"id":122802,"depth":178,"text":122803},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120243,"description":25516},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123186,"title":123187,"body":123188,"description":25516,"extension":2314,"meta":123528,"navigation":453,"path":123529,"seo":123530,"stem":123531,"__hash__":123532},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123189,"toc":123526},[123190,123193,123198,123201,123447,123452,123455,123491,123494,123523],[10,123191,123187],{"id":123192},"_4-命令教程长期积累",[26,123194,123195],{},[29,123196,123197],{},"大多数命令",[19,123199,123200],{},"常用 Linux 命令速查：",[51,123202,123204],{"className":119048,"code":123203,"language":119050,"meta":57,"style":57},"# 文件与目录\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",[59,123205,123206,123211,123218,123225,123233,123240,123247,123255,123263,123270,123277,123285,123289,123294,123301,123309,123316,123320,123325,123332,123340,123348,123356,123364,123368,123373,123381,123388,123395,123403,123411,123415,123420,123429,123438],{"__ignoreMap":57},[79,123207,123208],{"class":81,"line":82},[79,123209,123210],{"class":2440},"# 文件与目录\n",[79,123212,123213,123215],{"class":81,"line":167},[79,123214,28893],{"class":85},[79,123216,123217],{"class":2440},"        # 列出目录内容\n",[79,123219,123220,123222],{"class":81,"line":178},[79,123221,103352],{"class":96},[79,123223,123224],{"class":2440},"        # 切换目录\n",[79,123226,123227,123230],{"class":81,"line":457},[79,123228,123229],{"class":96},"pwd",[79,123231,123232],{"class":2440},"       # 显示当前路径\n",[79,123234,123235,123237],{"class":81,"line":462},[79,123236,103342],{"class":85},[79,123238,123239],{"class":2440},"     # 创建目录\n",[79,123241,123242,123244],{"class":81,"line":474},[79,123243,27457],{"class":85},[79,123245,123246],{"class":2440},"        # 删除文件或目录\n",[79,123248,123249,123252],{"class":81,"line":480},[79,123250,123251],{"class":85},"cp",[79,123253,123254],{"class":2440},"        # 复制文件或目录\n",[79,123256,123257,123260],{"class":81,"line":486},[79,123258,123259],{"class":85},"mv",[79,123261,123262],{"class":2440},"        # 移动\u002F重命名文件或目录\n",[79,123264,123265,123267],{"class":81,"line":491},[79,123266,1358],{"class":85},[79,123268,123269],{"class":2440},"     # 创建空文件\n",[79,123271,123272,123274],{"class":81,"line":497},[79,123273,122517],{"class":85},[79,123275,123276],{"class":2440},"       # 查看文件内容\n",[79,123278,123279,123282],{"class":81,"line":503},[79,123280,123281],{"class":85},"head\u002Ftail",[79,123283,123284],{"class":2440}," # 查看文件头部\u002F尾部\n",[79,123286,123287],{"class":81,"line":509},[79,123288,454],{"emptyLinePlaceholder":453},[79,123290,123291],{"class":81,"line":514},[79,123292,123293],{"class":2440},"# 权限管理\n",[79,123295,123296,123298],{"class":81,"line":520},[79,123297,26747],{"class":85},[79,123299,123300],{"class":2440},"     # 修改文件权限\n",[79,123302,123303,123306],{"class":81,"line":526},[79,123304,123305],{"class":85},"chown",[79,123307,123308],{"class":2440},"     # 修改文件所有者\n",[79,123310,123311,123313],{"class":81,"line":532},[79,123312,86],{"class":85},[79,123314,123315],{"class":2440},"      # 以管理员身份执行\n",[79,123317,123318],{"class":81,"line":537},[79,123319,454],{"emptyLinePlaceholder":453},[79,123321,123322],{"class":81,"line":543},[79,123323,123324],{"class":2440},"# 系统信息\n",[79,123326,123327,123329],{"class":81,"line":549},[79,123328,72312],{"class":85},[79,123330,123331],{"class":2440},"     # 系统信息\n",[79,123333,123334,123337],{"class":81,"line":555},[79,123335,123336],{"class":85},"df",[79,123338,123339],{"class":2440},"        # 磁盘使用情况\n",[79,123341,123342,123345],{"class":81,"line":561},[79,123343,123344],{"class":85},"free",[79,123346,123347],{"class":2440},"      # 内存使用情况\n",[79,123349,123350,123353],{"class":81,"line":567},[79,123351,123352],{"class":85},"top\u002Fhtop",[79,123354,123355],{"class":2440},"  # 进程监控\n",[79,123357,123358,123361],{"class":81,"line":573},[79,123359,123360],{"class":85},"ps",[79,123362,123363],{"class":2440},"        # 查看进程\n",[79,123365,123366],{"class":81,"line":579},[79,123367,454],{"emptyLinePlaceholder":453},[79,123369,123370],{"class":81,"line":584},[79,123371,123372],{"class":2440},"# 网络\n",[79,123374,123375,123378],{"class":81,"line":590},[79,123376,123377],{"class":85},"ping",[79,123379,123380],{"class":2440},"      # 测试网络连通性\n",[79,123382,123383,123385],{"class":81,"line":596},[79,123384,28981],{"class":85},[79,123386,123387],{"class":2440},"      # 发送 HTTP 请求\n",[79,123389,123390,123392],{"class":81,"line":602},[79,123391,122041],{"class":85},[79,123393,123394],{"class":2440},"      # 下载文件\n",[79,123396,123397,123400],{"class":81,"line":608},[79,123398,123399],{"class":85},"ssh",[79,123401,123402],{"class":2440},"       # 远程登录\n",[79,123404,123405,123408],{"class":81,"line":614},[79,123406,123407],{"class":85},"scp",[79,123409,123410],{"class":2440},"       # 远程文件传输\n",[79,123412,123413],{"class":81,"line":620},[79,123414,454],{"emptyLinePlaceholder":453},[79,123416,123417],{"class":81,"line":625},[79,123418,123419],{"class":2440},"# 包管理（Debian\u002FUbuntu）\n",[79,123421,123422,123424,123426],{"class":81,"line":630},[79,123423,119120],{"class":85},[79,123425,119099],{"class":89},[79,123427,123428],{"class":2440},"   # 更新软件源\n",[79,123430,123431,123433,123435],{"class":81,"line":648},[79,123432,119120],{"class":85},[79,123434,93],{"class":89},[79,123436,123437],{"class":2440},"  # 安装软件包\n",[79,123439,123440,123442,123444],{"class":81,"line":659},[79,123441,119120],{"class":85},[79,123443,28213],{"class":89},[79,123445,123446],{"class":2440},"   # 卸载软件包\n",[26,123448,123449],{"start":167},[29,123450,123451],{},"KDE Dolphin 以root打开",[19,123453,123454],{},"kde5",[51,123456,123458],{"className":119048,"code":123457,"language":119050,"meta":57,"style":57},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[59,123459,123460],{"__ignoreMap":57},[79,123461,123462,123465,123468,123471,123473,123475,123478,123481,123483,123486,123488],{"class":81,"line":82},[79,123463,123464],{"class":85},"pkexec",[79,123466,123467],{"class":89}," env",[79,123469,123470],{"class":89}," DISPLAY=",[79,123472,30275],{"class":239},[79,123474,30333],{"class":89},[79,123476,123477],{"class":239},"$XAUTHORITY ",[79,123479,123480],{"class":89},"KDE_SESSION_VERSION=",[79,123482,2694],{"class":96},[79,123484,123485],{"class":89}," KDE_FULL_SESSION=",[79,123487,3599],{"class":96},[79,123489,123490],{"class":89}," dolphin\n",[19,123492,123493],{},"kde6",[51,123495,123497],{"className":119048,"code":123496,"language":119050,"meta":57,"style":57},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[59,123498,123499],{"__ignoreMap":57},[79,123500,123501,123503,123505,123507,123509,123511,123513,123515,123517,123519,123521],{"class":81,"line":82},[79,123502,123464],{"class":85},[79,123504,123467],{"class":89},[79,123506,123470],{"class":89},[79,123508,30275],{"class":239},[79,123510,30333],{"class":89},[79,123512,123477],{"class":239},[79,123514,123480],{"class":89},[79,123516,2718],{"class":96},[79,123518,123485],{"class":89},[79,123520,3599],{"class":96},[79,123522,123490],{"class":89},[2287,123524,123525],{},"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":57,"searchDepth":167,"depth":167,"links":123527},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123187,"description":25516},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123534,"title":123535,"body":123536,"description":25516,"extension":2314,"meta":123550,"navigation":453,"path":123551,"seo":123552,"stem":123553,"__hash__":123554},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123537,"toc":123548},[123538,123541],[10,123539,123535],{"id":123540},"_5-各种环境配置",[19,123542,123543],{},[2614,123544,123547],{"href":123545,"rel":123546},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[26001],"电控组环境搭建大全",{"title":57,"searchDepth":167,"depth":167,"links":123549},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123535,"description":25516},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123556,"title":123557,"body":123558,"description":25516,"extension":2314,"meta":123906,"navigation":453,"path":123907,"seo":123908,"stem":123909,"__hash__":123910},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123559,"toc":123898},[123560,123563,123567,123571,123575,123580,123587,123591,123884,123888,123895],[10,123561,123557],{"id":123562},"_6-拓展功能",[14,123564,123566],{"id":123565},"_61-wine","6.1 Wine",[14,123568,123570],{"id":123569},"_62-android","6.2 Android",[265,123572,123574],{"id":123573},"_621-i卡a卡","6.2.1 I卡、A卡",[26,123576,123577],{},[29,123578,123579],{},"Wayland-Waydroid(体验超级好)",[19,123581,123582,123583],{},"Waydroid 官网与安装指南：",[2614,123584,123585],{"href":123585,"rel":123586},"https:\u002F\u002Fwaydro.id\u002F",[26001],[265,123588,123590],{"id":123589},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[26,123592,123593],{},[29,123594,123595,123596,123598,123599,123603,123605,123608,123613,123810],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55826,123597],{},"BlissOS 官网下载：",[2614,123600,123601],{"href":123601,"rel":123602},"https:\u002F\u002Fblissos.org\u002F",[26001],[55826,123604],{},[3699,123606],{"alt":57,"src":123607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[26,123609,123610],{"start":178},[29,123611,123612],{},"比较推荐的配置",[51,123614,123616],{"className":119048,"code":123615,"language":119050,"meta":57,"style":57},"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",[59,123617,123618,123625,123635,123645,123655,123667,123677,123684,123694,123703,123712,123722,123732,123741,123751,123761,123773,123783,123792,123802],{"__ignoreMap":57},[79,123619,123620,123623],{"class":81,"line":82},[79,123621,123622],{"class":85},"qemu-system-x86_64",[79,123624,26814],{"class":96},[79,123626,123627,123630,123633],{"class":81,"line":167},[79,123628,123629],{"class":96},"        -M",[79,123631,123632],{"class":89}," q35,vmport=off",[79,123634,26814],{"class":96},[79,123636,123637,123640,123643],{"class":81,"line":178},[79,123638,123639],{"class":96},"        -accel",[79,123641,123642],{"class":89}," kvm",[79,123644,26814],{"class":96},[79,123646,123647,123650,123653],{"class":81,"line":457},[79,123648,123649],{"class":96},"        -cpu",[79,123651,123652],{"class":89}," qemu64,+sse3,+sse4.2",[79,123654,26814],{"class":96},[79,123656,123657,123660,123663,123665],{"class":81,"line":462},[79,123658,123659],{"class":96},"        -smp",[79,123661,123662],{"class":89}," 8,cores=",[79,123664,2668],{"class":96},[79,123666,26814],{"class":96},[79,123668,123669,123672,123675],{"class":81,"line":474},[79,123670,123671],{"class":96},"        -m",[79,123673,123674],{"class":89}," 6G",[79,123676,26814],{"class":96},[79,123678,123679,123682],{"class":81,"line":480},[79,123680,123681],{"class":96},"        -usb",[79,123683,26814],{"class":96},[79,123685,123686,123689,123692],{"class":81,"line":486},[79,123687,123688],{"class":96},"        -device",[79,123690,123691],{"class":89}," virtio-tablet",[79,123693,26814],{"class":96},[79,123695,123696,123698,123701],{"class":81,"line":491},[79,123697,123688],{"class":96},[79,123699,123700],{"class":89}," virtio-keyboard",[79,123702,26814],{"class":96},[79,123704,123705,123707,123710],{"class":81,"line":497},[79,123706,123688],{"class":96},[79,123708,123709],{"class":89}," usb-tablet",[79,123711,26814],{"class":96},[79,123713,123714,123717,123720],{"class":81,"line":503},[79,123715,123716],{"class":96},"        -bios",[79,123718,123719],{"class":89}," OVMF-pure-efi64.fd",[79,123721,26814],{"class":96},[79,123723,123724,123727,123730],{"class":81,"line":509},[79,123725,123726],{"class":96},"        -net",[79,123728,123729],{"class":89}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[79,123731,26814],{"class":96},[79,123733,123734,123736,123739],{"class":81,"line":514},[79,123735,123726],{"class":96},[79,123737,123738],{"class":89}," nic,model=virtio",[79,123740,26814],{"class":96},[79,123742,123743,123746,123749],{"class":81,"line":520},[79,123744,123745],{"class":96},"        -audio",[79,123747,123748],{"class":89}," sdl,model=hda",[79,123750,26814],{"class":96},[79,123752,123753,123756,123759],{"class":81,"line":526},[79,123754,123755],{"class":96},"        -display",[79,123757,123758],{"class":89}," sdl,gl=on,show-cursor=on",[79,123760,26814],{"class":96},[79,123762,123763,123765,123768,123771],{"class":81,"line":532},[79,123764,123688],{"class":96},[79,123766,123767],{"class":89}," virtio-vga-gl,xres=1920,yres=",[79,123769,123770],{"class":96},"1080",[79,123772,26814],{"class":96},[79,123774,123775,123778,123781],{"class":81,"line":537},[79,123776,123777],{"class":96},"        -drive",[79,123779,123780],{"class":89}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[79,123782,26814],{"class":96},[79,123784,123785,123787,123790],{"class":81,"line":543},[79,123786,123777],{"class":96},[79,123788,123789],{"class":89}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[79,123791,26814],{"class":96},[79,123793,123794,123797,123800],{"class":81,"line":549},[79,123795,123796],{"class":96},"        -monitor",[79,123798,123799],{"class":89}," stdio",[79,123801,26814],{"class":96},[79,123803,123804,123807],{"class":81,"line":555},[79,123805,123806],{"class":96},"        -serial",[79,123808,123809],{"class":89}," none\n",[26,123811,123812],{"start":462},[29,123813,123814,123815],{},"常用操作：",[26,123816,123817,123820,123876],{},[29,123818,123819],{},"全屏：Ctrl+Alt+F",[29,123821,123822,123823,123828],{},"adb调试",[26,123824,123825],{},[29,123826,123827],{},"使Linux与Android用ADB连接。",[51,123829,123831],{"className":119048,"code":123830,"language":119050,"meta":57,"style":57},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[59,123832,123833,123838,123849,123854,123866,123871],{"__ignoreMap":57},[79,123834,123835],{"class":81,"line":82},[79,123836,123837],{"class":2440},"# 连接安卓\n",[79,123839,123840,123843,123846],{"class":81,"line":167},[79,123841,123842],{"class":85},"adb",[79,123844,123845],{"class":89}," connect",[79,123847,123848],{"class":96}," 127.0.0.1\n",[79,123850,123851],{"class":81,"line":178},[79,123852,123853],{"class":2440},"# 打开shell\n",[79,123855,123856,123858,123860,123863],{"class":81,"line":457},[79,123857,123842],{"class":85},[79,123859,29015],{"class":96},[79,123861,123862],{"class":89}," 127.0.0.1:5555",[79,123864,123865],{"class":89}," shell\n",[79,123867,123868],{"class":81,"line":462},[79,123869,123870],{"class":2440},"# 使用root权限\n",[79,123872,123873],{"class":81,"line":474},[79,123874,123875],{"class":85},"su\n",[29,123877,123878,123879],{},"中文输入法",[26,123880,123881],{},[29,123882,123883],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123885,123887],{"id":123886},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123889,123890,123891],{},"rEFInd 官网与文档：",[2614,123892,123893],{"href":123893,"rel":123894},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[26001],[2287,123896,123897],{},"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":57,"searchDepth":167,"depth":167,"links":123899},[123900,123901,123905],{"id":123565,"depth":167,"text":123566},{"id":123569,"depth":167,"text":123570,"children":123902},[123903,123904],{"id":123573,"depth":178,"text":123574},{"id":123589,"depth":178,"text":123590},{"id":123886,"depth":167,"text":123887},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123557,"description":25516},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123912,"title":123913,"body":123914,"description":25516,"extension":2314,"meta":127213,"navigation":453,"path":127214,"seo":127215,"stem":127216,"__hash__":127217},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123915,"toc":127187},[123916,123919,123923,123926,123933,124183,124186,124258,124261,124265,124269,124274,124277,124280,124283,124288,124291,124294,124297,124302,124305,124310,124313,124316,124321,124324,124329,124332,124336,124340,124343,124348,124351,124365,124368,124371,124380,124383,124392,124395,124398,124407,124410,124419,124422,124425,124434,124437,124440,124455,124458,124461,124470,124475,124478,124481,124490,124493,124502,124505,124514,124517,124526,124531,124534,124542,124547,124550,124559,124562,124570,124575,124578,124587,124590,124593,124597,124600,124605,124608,124613,124627,124632,124637,124648,124653,124659,124664,124679,124684,124687,124692,124697,124702,124710,124715,124722,124727,124738,124743,124746,124750,124753,124756,124761,124764,124783,124788,124791,124800,124805,124808,124830,124833,124863,124866,124871,124874,124888,124893,124912,124915,124918,124923,124935,124940,124945,124948,124953,124956,124971,124974,124979,124984,124988,124993,125033,125036,125040,125046,125052,125057,125060,125067,125072,125079,125082,125085,125092,125106,125109,125169,125172,125186,125198,125201,125204,125207,125271,125274,125277,125280,125300,125303,125308,125315,125319,125322,125326,125331,125336,125340,125343,125346,125388,125393,125396,125418,125433,125435,125440,125452,125512,125514,125516,125570,125572,125574,125580,125585,125588,125593,125597,125600,125662,125667,125670,125672,125676,125688,125770,125772,125774,125828,125834,125836,125840,125845,125847,125852,125856,125876,125911,125915,125918,125921,125924,125931,125934,125946,125949,125964,125967,125986,126034,126037,126054,126057,126071,126076,126079,126088,126103,126115,126153,126158,126167,126172,126177,126203,126212,126216,126220,126225,126228,126232,126236,126241,126244,126249,126252,126257,126260,126265,126268,126272,126277,126280,126285,126288,126292,126297,126300,126305,126308,126313,126316,126320,126325,126328,126333,126336,126341,126344,126348,126353,126356,126361,126364,126369,126372,126377,126380,126385,126388,126393,126396,126400,126405,126408,126413,126420,126424,126429,126432,126437,126440,126444,126449,126452,126455,126458,126461,126464,126468,126471,126481,126486,126491,126513,126518,126523,126530,126534,126539,126542,126545,126550,126553,126556,126559,126562,126565,126568,126571,126574,126577,126580,126583,126586,126591,126596,126601,126606,126611,126616,126621,126624,126628,126631,126635,126640,126645,126650,126655,126659,126665,126673,126678,126681,126686,126701,126704,126709,126743,126758,126761,126816,126842,126854,126857,126866,126869,126884,126889,126892,126898,126903,126906,126911,126914,126919,126924,126931,126934,126949,126952,126987,126992,127000,127038,127041,127044,127049,127052,127057,127068,127102,127107,127110,127119,127124,127130,127133,127138,127147,127152,127155,127158,127163,127171,127174,127179,127184],[10,123917,123913],{"id":123918},"_7-其他操作",[14,123920,123922],{"id":123921},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123924,123925],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123927,123928,123929,123932],{},"进入工控机的硬盘目录，进入",[59,123930,123931],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[51,123934,123938],{"className":123935,"code":123936,"language":123937,"meta":57,"style":57},"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",[59,123939,123940,123948,123959,123966,123973,123985,123992,124004,124015,124026,124033,124040,124047,124059,124071,124078,124090,124102,124109,124121,124133,124145,124156,124163,124174],{"__ignoreMap":57},[79,123941,123942,123945],{"class":81,"line":82},[79,123943,123944],{"class":395},"network",[79,123946,123947],{"class":239},": \n",[79,123949,123950,123953,123955,123957],{"class":81,"line":167},[79,123951,123952],{"class":395},"  version",[79,123954,53550],{"class":239},[79,123956,1049],{"class":96},[79,123958,4880],{"class":239},[79,123960,123961,123964],{"class":81,"line":178},[79,123962,123963],{"class":395},"  wifis",[79,123965,123947],{"class":239},[79,123967,123968,123971],{"class":81,"line":457},[79,123969,123970],{"class":395},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[79,123972,123947],{"class":239},[79,123974,123975,123978,123980,123983],{"class":81,"line":462},[79,123976,123977],{"class":395},"      renderer",[79,123979,53550],{"class":239},[79,123981,123982],{"class":89},"NetworkManager",[79,123984,4880],{"class":239},[79,123986,123987,123990],{"class":81,"line":474},[79,123988,123989],{"class":395},"      match",[79,123991,123947],{"class":239},[79,123993,123994,123997,123999,124002],{"class":81,"line":480},[79,123995,123996],{"class":395},"        name",[79,123998,53550],{"class":239},[79,124000,124001],{"class":89},"\"wlan0\"",[79,124003,4880],{"class":239},[79,124005,124006,124009,124011,124013],{"class":81,"line":486},[79,124007,124008],{"class":395},"      dhcp4",[79,124010,53550],{"class":239},[79,124012,3599],{"class":96},[79,124014,4880],{"class":239},[79,124016,124017,124020,124022,124024],{"class":81,"line":491},[79,124018,124019],{"class":395},"      dhcp6",[79,124021,53550],{"class":239},[79,124023,3599],{"class":96},[79,124025,4880],{"class":239},[79,124027,124028,124031],{"class":81,"line":497},[79,124029,124030],{"class":395},"      access-points",[79,124032,123947],{"class":239},[79,124034,124035,124038],{"class":81,"line":503},[79,124036,124037],{"class":89},"        \"EMIS_Vinci_Robocon_5G\"",[79,124039,123947],{"class":239},[79,124041,124042,124045],{"class":81,"line":509},[79,124043,124044],{"class":395},"          auth",[79,124046,123947],{"class":239},[79,124048,124049,124052,124054,124057],{"class":81,"line":514},[79,124050,124051],{"class":395},"            key-management",[79,124053,53550],{"class":239},[79,124055,124056],{"class":89},"\"psk\"",[79,124058,4880],{"class":239},[79,124060,124061,124064,124066,124069],{"class":81,"line":520},[79,124062,124063],{"class":395},"            password",[79,124065,53550],{"class":239},[79,124067,124068],{"class":89},"\"vinci666\"",[79,124070,4880],{"class":239},[79,124072,124073,124076],{"class":81,"line":526},[79,124074,124075],{"class":395},"          networkmanager",[79,124077,123947],{"class":239},[79,124079,124080,124083,124085,124088],{"class":81,"line":532},[79,124081,124082],{"class":395},"            uuid",[79,124084,53550],{"class":239},[79,124086,124087],{"class":89},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[79,124089,4880],{"class":239},[79,124091,124092,124095,124097,124100],{"class":81,"line":537},[79,124093,124094],{"class":395},"            name",[79,124096,53550],{"class":239},[79,124098,124099],{"class":89},"\"EMIS_Vinci_Robocon_5G\"",[79,124101,4880],{"class":239},[79,124103,124104,124107],{"class":81,"line":543},[79,124105,124106],{"class":395},"            passthrough",[79,124108,123947],{"class":239},[79,124110,124111,124114,124116,124119],{"class":81,"line":549},[79,124112,124113],{"class":395},"              wifi-security.auth-alg",[79,124115,53550],{"class":239},[79,124117,124118],{"class":89},"\"open\"",[79,124120,4880],{"class":239},[79,124122,124123,124126,124128,124131],{"class":81,"line":555},[79,124124,124125],{"class":395},"              ipv6.addr-gen-mode",[79,124127,53550],{"class":239},[79,124129,124130],{"class":89},"\"default\"",[79,124132,4880],{"class":239},[79,124134,124135,124138,124140,124143],{"class":81,"line":561},[79,124136,124137],{"class":395},"              ipv6.ip6-privacy",[79,124139,53550],{"class":239},[79,124141,124142],{"class":89},"\"-1\"",[79,124144,4880],{"class":239},[79,124146,124147,124150,124152,124154],{"class":81,"line":567},[79,124148,124149],{"class":395},"              proxy._",[79,124151,53550],{"class":239},[79,124153,9846],{"class":89},[79,124155,4880],{"class":239},[79,124157,124158,124161],{"class":81,"line":573},[79,124159,124160],{"class":395},"      networkmanager",[79,124162,123947],{"class":239},[79,124164,124165,124168,124170,124172],{"class":81,"line":579},[79,124166,124167],{"class":395},"        uuid",[79,124169,53550],{"class":239},[79,124171,124087],{"class":89},[79,124173,4880],{"class":239},[79,124175,124176,124178,124180],{"class":81,"line":584},[79,124177,123996],{"class":395},[79,124179,53550],{"class":239},[79,124181,124182],{"class":89},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124184,124185],{},"将其改为新wifi的名和密码：",[51,124187,124189],{"className":123935,"code":124188,"language":123937,"meta":57,"style":57},"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",[59,124190,124191,124197,124206,124212,124219,124228,124236,124242,124248],{"__ignoreMap":57},[79,124192,124193,124195],{"class":81,"line":82},[79,124194,123944],{"class":395},[79,124196,673],{"class":239},[79,124198,124199,124201,124203],{"class":81,"line":167},[79,124200,123952],{"class":395},[79,124202,53550],{"class":239},[79,124204,124205],{"class":96},"2\n",[79,124207,124208,124210],{"class":81,"line":178},[79,124209,123963],{"class":395},[79,124211,673],{"class":239},[79,124213,124214,124217],{"class":81,"line":457},[79,124215,124216],{"class":395},"    wlan0",[79,124218,673],{"class":239},[79,124220,124221,124223,124225],{"class":81,"line":462},[79,124222,124008],{"class":395},[79,124224,53550],{"class":239},[79,124226,124227],{"class":96},"true\n",[79,124229,124230,124232,124234],{"class":81,"line":474},[79,124231,124019],{"class":395},[79,124233,53550],{"class":239},[79,124235,124227],{"class":96},[79,124237,124238,124240],{"class":81,"line":480},[79,124239,124030],{"class":395},[79,124241,673],{"class":239},[79,124243,124244,124246],{"class":81,"line":486},[79,124245,124037],{"class":89},[79,124247,673],{"class":239},[79,124249,124250,124253,124255],{"class":81,"line":491},[79,124251,124252],{"class":395},"          password",[79,124254,53550],{"class":239},[79,124256,124257],{"class":89},"\"vinci666\"\n",[19,124259,124260],{},"工控机开机即可连上网。",[14,124262,124264],{"id":124263},"_72-ssh远程开发","7.2 SSH远程开发",[265,124266,124268],{"id":124267},"_721-环境准备","7.2.1 环境准备",[19,124270,124271],{},[2528,124272,124273],{},"1.硬件准备",[19,124275,124276],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124278,124279],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124281,124282],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124284,124285],{},[2528,124286,124287],{},"2.设置固定IP",[19,124289,124290],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,124292,124293],{},"1.进入设置界面",[19,124295,124296],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,124298,124299],{},[3699,124300],{"alt":57,"src":124301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,124303,124304],{},"2.配置所连接的网络",[19,124306,124307],{},[3699,124308],{"alt":57,"src":124309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,124311,124312],{},"3.设置固定IP",[19,124314,124315],{},"查看当前IP地址。",[19,124317,124318],{},[3699,124319],{"alt":57,"src":124320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124322,124323],{},"设置固定IP。",[19,124325,124326],{},[3699,124327],{"alt":57,"src":124328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124330,124331],{},"至此，IP配置完毕。",[265,124333,124335],{"id":124334},"_722-环境搭建","7.2.2 环境搭建",[19,124337,124338],{},[2528,124339,27888],{},[19,124341,124342],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124344,124345],{},[2528,124346,124347],{},"实现",[19,124349,124350],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[26,124352,124353,124356,124359,124362],{},[29,124354,124355],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[29,124357,124358],{},"远程主机启动SSH服务；",[29,124360,124361],{},"本地主机登陆远程主机；",[29,124363,124364],{},"实现数据传输。",[19,124366,124367],{},"1.安装SSH客户端与服务端",[19,124369,124370],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[51,124372,124374],{"className":122568,"code":124373,"language":122570,"meta":122571,"style":57}," sudo apt install openssh-server\n",[59,124375,124376],{"__ignoreMap":57},[79,124377,124378],{"class":81,"line":82},[79,124379,124373],{},[19,124381,124382],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[51,124384,124386],{"className":122568,"code":124385,"language":122570,"meta":122571,"style":57},"sudo apt install openssh-client\n",[59,124387,124388],{"__ignoreMap":57},[79,124389,124390],{"class":81,"line":82},[79,124391,124385],{},[19,124393,124394],{},"2.远程主机启动SSH服务",[19,124396,124397],{},"远程主机启动 ssh 服务命令如下：",[51,124399,124401],{"className":122568,"code":124400,"language":122570,"meta":122571,"style":57},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[59,124402,124403],{"__ignoreMap":57},[79,124404,124405],{"class":81,"line":82},[79,124406,124400],{},[19,124408,124409],{},"启动后可使用如下命令查看服务是否正常运行：",[51,124411,124413],{"className":122568,"code":124412,"language":122570,"meta":122571,"style":57},"ps -e | grep ssh\n",[59,124414,124415],{"__ignoreMap":57},[79,124416,124417],{"class":81,"line":82},[79,124418,124412],{},[19,124420,124421],{},"如果启动成功，会包含 sshd 程序。",[19,124423,124424],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[51,124426,124428],{"className":122568,"code":124427,"language":122570,"meta":122571,"style":57},"sudo systemctl enable ssh\n",[59,124429,124430],{"__ignoreMap":57},[79,124431,124432],{"class":81,"line":82},[79,124433,124427],{},[19,124435,124436],{},"3.本地远程登录",[19,124438,124439],{},"登录远程主机可以调用如下命令:",[51,124441,124443],{"className":119048,"code":124442,"language":119050,"meta":57,"style":57},"ssh -X 用户名@ip地址\n",[59,124444,124445],{"__ignoreMap":57},[79,124446,124447,124449,124452],{"class":81,"line":82},[79,124448,123399],{"class":85},[79,124450,124451],{"class":96}," -X",[79,124453,124454],{"class":89}," 用户名@ip地址\n",[19,124456,124457],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124459,124460],{},"如果退出，可以调用exit命令：",[51,124462,124464],{"className":122568,"code":124463,"language":122570,"meta":122571,"style":57},"exit\n",[59,124465,124466],{"__ignoreMap":57},[79,124467,124468],{"class":81,"line":82},[79,124469,124463],{},[19,124471,124472],{},[2528,124473,124474],{},"4.实现数据传输",[19,124476,124477],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124479,124480],{},"上传文件指令格式如下：",[51,124482,124484],{"className":122568,"code":124483,"language":122570,"meta":122571,"style":57},"scp 本地文件路径 账号@ip:路径\n",[59,124485,124486],{"__ignoreMap":57},[79,124487,124488],{"class":81,"line":82},[79,124489,124483],{},[19,124491,124492],{},"上传文件夹指令格式如下：",[51,124494,124496],{"className":122568,"code":124495,"language":122570,"meta":122571,"style":57},"scp -r 本地文件夹路径 账号@ip:路径\n",[59,124497,124498],{"__ignoreMap":57},[79,124499,124500],{"class":81,"line":82},[79,124501,124495],{},[19,124503,124504],{},"下载文件指令格式如下：",[51,124506,124508],{"className":122568,"code":124507,"language":122570,"meta":122571,"style":57},"scp 账号@ip:路径 本地文件夹路径\n",[59,124509,124510],{"__ignoreMap":57},[79,124511,124512],{"class":81,"line":82},[79,124513,124507],{},[19,124515,124516],{},"下载文件夹指令格式如下：",[51,124518,124520],{"className":122568,"code":124519,"language":122570,"meta":122571,"style":57},"scp -r 账号@ip:路径 本地文件夹路径\n",[59,124521,124522],{"__ignoreMap":57},[79,124523,124524],{"class":81,"line":82},[79,124525,124519],{},[19,124527,124528],{},[2528,124529,124530],{},"优化",[19,124532,124533],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[26,124535,124536,124539],{},[29,124537,124538],{},"本地生成密钥对；",[29,124540,124541],{},"将公钥上传至远程主机。",[19,124543,124544],{},[2528,124545,124546],{},"1.生成密钥对",[19,124548,124549],{},"本地客户端生成公私钥：（一路回车默认即可）",[51,124551,124553],{"className":122568,"code":124552,"language":122570,"meta":122571,"style":57},"ssh-keygen\n",[59,124554,124555],{"__ignoreMap":57},[79,124556,124557],{"class":81,"line":82},[79,124558,124552],{},[19,124560,124561],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[26,124563,124564,124567],{},[29,124565,124566],{},"id_rsa （私钥）；",[29,124568,124569],{},"id_rsa.pub (公钥)。",[19,124571,124572],{},[2528,124573,124574],{},"2.公钥上传",[19,124576,124577],{},"上传指令如下：",[51,124579,124581],{"className":122568,"code":124580,"language":122570,"meta":122571,"style":57},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[59,124582,124583],{"__ignoreMap":57},[79,124584,124585],{"class":81,"line":82},[79,124586,124580],{},[19,124588,124589],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124591,124592],{},"以后再远程登录就无需录入密码了。",[265,124594,124596],{"id":124595},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124598,124599],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124601,124602],{},[2528,124603,124604],{},"1.准备工作",[19,124606,124607],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124609,124610],{},[2528,124611,124612],{},"2.为VScode安装远程开发插件",[19,124614,124615,124616,124619,124620,124623,124624,1604],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[59,124617,124618],{},"扩展：商店","的搜索栏输入",[59,124621,124622],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[59,124625,124626],{},"安装",[19,124628,124629],{},[3699,124630],{"alt":57,"src":124631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124633,124634],{},[2528,124635,124636],{},"3.配置远程连接",[19,124638,124639,124640,124643,124644,124647],{},"步骤1：使用快捷键",[59,124641,124642],{},"ctrl + shift + p","打开命令输入窗口，并输入",[59,124645,124646],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124649,124650],{},[3699,124651],{"alt":57,"src":124652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124654,124655,124656,1604],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[59,124657,124658],{},"Add New SSH Host",[19,124660,124661],{},[3699,124662],{"alt":57,"src":124663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124665,124666,124667,124670,124671,124674,124675,124678],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[59,124668,124669],{},"ssh +X ubuntu@192.168.43.164","，其中，",[59,124672,124673],{},"ubuntu","需要替换为你的登录用户名，",[59,124676,124677],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124680,124681],{},[3699,124682],{"alt":57,"src":124683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124685,124686],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124688,124689],{},[3699,124690],{"alt":57,"src":124691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124693,124694],{},[3699,124695],{"alt":57,"src":124696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124698,124699],{},[2528,124700,124701],{},"4.使用",[19,124703,124704,124705,124643,124707,124709],{},"步骤1：继续使用快捷键",[59,124706,124642],{},[59,124708,124646],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124711,124712],{},[3699,124713],{"alt":57,"src":124714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124716,124717,124718,124721],{},"或者，也可以点击侧边栏的",[59,124719,124720],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124723,124724],{},[3699,124725],{"alt":57,"src":124726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124728,124729,124730,124733,124734,124737],{},"步骤2：选择菜单栏的",[59,124731,124732],{},"文件","下的",[59,124735,124736],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124739,124740],{},[3699,124741],{"alt":57,"src":124742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124744,124745],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124747,124749],{"id":124748},"_73-远程桌面","7.3 远程桌面",[19,124751,124752],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124754,124755],{},"我们选择使用VNC来看。",[26,124757,124758],{},[29,124759,124760],{},"安装VNC服务器：",[19,124762,124763],{},"这里以TigerVNC为例进行安装：",[51,124765,124767],{"className":119048,"code":124766,"language":119050,"meta":57,"style":57},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[59,124768,124769],{"__ignoreMap":57},[79,124770,124771,124773,124775,124777,124780],{"class":81,"line":82},[79,124772,86],{"class":85},[79,124774,119069],{"class":89},[79,124776,93],{"class":89},[79,124778,124779],{"class":89}," tigervnc-standalone-server",[79,124781,124782],{"class":89}," tigervnc-common\n",[26,124784,124785],{"start":167},[29,124786,124787],{},"设置VNC密码：",[19,124789,124790],{},"为VNC用户设置密码，运行以下命令：",[51,124792,124794],{"className":119048,"code":124793,"language":119050,"meta":57,"style":57},"vncpasswd\n",[59,124795,124796],{"__ignoreMap":57},[79,124797,124798],{"class":81,"line":82},[79,124799,124793],{"class":85},[26,124801,124802],{"start":178},[29,124803,124804],{},"配置VNC启动脚本:",[19,124806,124807],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[51,124809,124811],{"className":119048,"code":124810,"language":119050,"meta":57,"style":57},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[59,124812,124813,124822],{"__ignoreMap":57},[79,124814,124815,124817,124819],{"class":81,"line":82},[79,124816,103342],{"class":85},[79,124818,31346],{"class":96},[79,124820,124821],{"class":89}," ~\u002F.vnc\n",[79,124823,124824,124827],{"class":81,"line":167},[79,124825,124826],{"class":85},"nano",[79,124828,124829],{"class":89}," ~\u002F.vnc\u002Fxstartup\n",[19,124831,124832],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[51,124834,124836],{"className":119048,"code":124835,"language":119050,"meta":57,"style":57},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[59,124837,124838,124843,124851,124858],{"__ignoreMap":57},[79,124839,124840],{"class":81,"line":82},[79,124841,124842],{"class":2440},"#!\u002Fbin\u002Fsh\n",[79,124844,124845,124848],{"class":81,"line":167},[79,124846,124847],{"class":96},"unset",[79,124849,124850],{"class":89}," SESSION_MANAGER\n",[79,124852,124853,124855],{"class":81,"line":178},[79,124854,124847],{"class":96},[79,124856,124857],{"class":89}," DBUS_SESSION_BUS_ADDRESS\n",[79,124859,124860],{"class":81,"line":457},[79,124861,124862],{"class":85},"gnome-session\n",[19,124864,124865],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[26,124867,124868],{"start":457},[29,124869,124870],{},"给予执行权限：",[19,124872,124873],{},"为xstartup文件设置执行权限：",[51,124875,124877],{"className":119048,"code":124876,"language":119050,"meta":57,"style":57},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[59,124878,124879],{"__ignoreMap":57},[79,124880,124881,124883,124886],{"class":81,"line":82},[79,124882,26747],{"class":85},[79,124884,124885],{"class":89}," +x",[79,124887,124829],{"class":89},[26,124889,124890],{"start":462},[29,124891,124892],{},"启动VNC服务器：",[51,124894,124896],{"className":119048,"code":124895,"language":119050,"meta":57,"style":57},"vncserver -geometry 1920x1080 -localhost=0\n",[59,124897,124898],{"__ignoreMap":57},[79,124899,124900,124903,124906,124909],{"class":81,"line":82},[79,124901,124902],{"class":85},"vncserver",[79,124904,124905],{"class":96}," -geometry",[79,124907,124908],{"class":89}," 1920x1080",[79,124910,124911],{"class":96}," -localhost=0\n",[19,124913,124914],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124916,124917],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[26,124919,124920],{"start":474},[29,124921,124922],{},"查看已开启的VNC服务器：",[51,124924,124926],{"className":119048,"code":124925,"language":119050,"meta":57,"style":57},"vncserver -list\n",[59,124927,124928],{"__ignoreMap":57},[79,124929,124930,124932],{"class":81,"line":82},[79,124931,124902],{"class":85},[79,124933,124934],{"class":96}," -list\n",[19,124936,124937],{},[3699,124938],{"alt":57,"src":124939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[26,124941,124942],{"start":480},[29,124943,124944],{},"连接到VNC服务器：",[19,124946,124947],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[26,124949,124950],{"start":486},[29,124951,124952],{},"停止VNC服务器：",[19,124954,124955],{},"如果需要停止VNC服务器，可以使用以下命令：",[51,124957,124959],{"className":119048,"code":124958,"language":119050,"meta":57,"style":57},"vncserver -kill :1\n",[59,124960,124961],{"__ignoreMap":57},[79,124962,124963,124965,124968],{"class":81,"line":82},[79,124964,124902],{"class":85},[79,124966,124967],{"class":96}," -kill",[79,124969,124970],{"class":89}," :1\n",[19,124972,124973],{},"将:1替换为你实际使用的显示编号。",[19,124975,124976],{},[3699,124977],{"alt":57,"src":124978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124980,124981],{},[3699,124982],{"alt":57,"src":124983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124985,124987],{"id":124986},"_74-usb端口设置","7.4 USB端口设置",[19,124989,124990],{},[2528,124991,124992],{},"首先先配置好权限",[51,124994,124996],{"className":119048,"code":124995,"language":119050,"meta":57,"style":57},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[59,124997,124998,125003,125016,125023,125028],{"__ignoreMap":57},[79,124999,125000],{"class":81,"line":82},[79,125001,125002],{"class":2440},"# 将用户权限提高\n",[79,125004,125005,125007,125009,125011,125014],{"class":81,"line":167},[79,125006,86],{"class":85},[79,125008,28706],{"class":89},[79,125010,28709],{"class":96},[79,125012,125013],{"class":89}," dialout",[79,125015,28714],{"class":239},[79,125017,125018,125020],{"class":81,"line":178},[79,125019,28733],{"class":85},[79,125021,125022],{"class":89}," dialout\n",[79,125024,125025],{"class":81,"line":457},[79,125026,125027],{"class":2440},"# 查看下面命令是否输出dialout（若输出才正常）\n",[79,125029,125030],{"class":81,"line":462},[79,125031,125032],{"class":85},"groups\n",[19,125034,125035],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[265,125037,125039],{"id":125038},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,125041,125042,125045],{},[2528,125043,125044],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,125047,125048,125051],{},[2528,125049,125050],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,125053,125054],{},[2528,125055,125056],{},"流程如下：",[19,125058,125059],{},"（1）.查找设备idVendor和idProduct",[19,125061,125062,125063,125066],{},"接入两个USB设备，在终端调用指令",[59,125064,125065],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,125068,125069],{},[3699,125070],{"alt":57,"src":125071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,125073,125074,125075,125078],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[59,125076,125077],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,125080,125081],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,125083,125084],{},"（2）.编写映射规则",[19,125086,125087,125088,125091],{},"在",[59,125089,125090],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[51,125093,125095],{"className":119048,"code":125094,"language":119050,"meta":57,"style":57},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[59,125096,125097],{"__ignoreMap":57},[79,125098,125099,125101,125103],{"class":81,"line":82},[79,125100,86],{"class":85},[79,125102,120335],{"class":89},[79,125104,125105],{"class":89}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,125107,125108],{},"输入如下内容：",[51,125110,125112],{"className":119048,"code":125111,"language":119050,"meta":57,"style":57},"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",[59,125113,125114,125144],{"__ignoreMap":57},[79,125115,125116,125119,125121,125124,125127,125130,125133,125135,125138,125141],{"class":81,"line":82},[79,125117,125118],{"class":239},"KERNEL",[79,125120,244],{"class":243},[79,125122,125123],{"class":89},"=\"ttyUSB*\",",[79,125125,125126],{"class":85}," ATTRS",[79,125128,125129],{"class":89},"{idVendor}==",[79,125131,125132],{"class":85},"\"10c4\"",[79,125134,2752],{"class":85},[79,125136,125137],{"class":89}," ATTRS{idProduct}==\"ea60\",",[79,125139,125140],{"class":89}," MODE:=\"0777\",",[79,125142,125143],{"class":89}," SYMLINK+=\"mylidar\"\n",[79,125145,125146,125148,125150,125152,125154,125156,125159,125161,125164,125166],{"class":81,"line":167},[79,125147,125118],{"class":239},[79,125149,244],{"class":243},[79,125151,125123],{"class":89},[79,125153,125126],{"class":85},[79,125155,125129],{"class":89},[79,125157,125158],{"class":85},"\"1a86\"",[79,125160,2752],{"class":85},[79,125162,125163],{"class":89}," ATTRS{idProduct}==\"7523\",",[79,125165,125140],{"class":89},[79,125167,125168],{"class":89}," SYMLINK+=\"mycar\"\n",[19,125170,125171],{},"代码解释：",[3377,125173,125174,125177,125180,125183],{},[29,125175,125176],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[29,125178,125179],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[29,125181,125182],{},"SYMLINK是符号连接，即绑定的别名；",[29,125184,125185],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125187,125188,125189,125192,125195],{},"***小提示：***",[25693,125190,125191],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[59,125193,125194],{},"\u002Fetc\u002Fudev\u002Frule.d",[25693,125196,125197],{},"目录即可。",[19,125199,125200],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125202,125203],{},"（3）.使规则生效",[19,125205,125206],{},"在终端下输入如下指令：",[51,125208,125210],{"className":119048,"code":125209,"language":119050,"meta":57,"style":57},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[59,125211,125212,125217,125229,125240,125244,125249,125262],{"__ignoreMap":57},[79,125213,125214],{"class":81,"line":82},[79,125215,125216],{"class":2440},"# Ubuntu用下方命令\n",[79,125218,125219,125221,125223,125226],{"class":81,"line":167},[79,125220,86],{"class":85},[79,125222,121800],{"class":89},[79,125224,125225],{"class":89}," udev",[79,125227,125228],{"class":89}," reload\n",[79,125230,125231,125233,125235,125237],{"class":81,"line":178},[79,125232,86],{"class":85},[79,125234,121800],{"class":89},[79,125236,125225],{"class":89},[79,125238,125239],{"class":89}," restart\n",[79,125241,125242],{"class":81,"line":457},[79,125243,454],{"emptyLinePlaceholder":453},[79,125245,125246],{"class":81,"line":462},[79,125247,125248],{"class":2440},"#Fedora用下方命令\n",[79,125250,125251,125253,125256,125259],{"class":81,"line":474},[79,125252,86],{"class":85},[79,125254,125255],{"class":89}," udevadm",[79,125257,125258],{"class":89}," control",[79,125260,125261],{"class":96}," --reload\n",[79,125263,125264,125266,125268],{"class":81,"line":480},[79,125265,86],{"class":85},[79,125267,125255],{"class":89},[79,125269,125270],{"class":89}," trigger\n",[19,125272,125273],{},"再重新插拔设备即可。",[19,125275,125276],{},"（4）.测试",[19,125278,125279],{},"终端下输入如下指令",[51,125281,125283],{"className":119048,"code":125282,"language":119050,"meta":57,"style":57},"ll \u002Fdev | grep ttyUSB\n",[59,125284,125285],{"__ignoreMap":57},[79,125286,125287,125290,125293,125295,125297],{"class":81,"line":82},[79,125288,125289],{"class":85},"ll",[79,125291,125292],{"class":89}," \u002Fdev",[79,125294,27245],{"class":243},[79,125296,32366],{"class":85},[79,125298,125299],{"class":89}," ttyUSB\n",[19,125301,125302],{},"运行结果如下：",[19,125304,125305],{},[3699,125306],{"alt":57,"src":125307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,125309,125310,125311,125314],{},"也可以多次插拔USB设备，会发现设备端口",[59,125312,125313],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125316,125317],{},[2528,125318,119716],{},[19,125320,125321],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[265,125323,125325],{"id":125324},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125327,125328,125330],{},[2528,125329,125044],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125332,125333,125335],{},[2528,125334,125050],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125337,125338],{},[2528,125339,125056],{},[19,125341,125342],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125344,125345],{},"调用如下指令查看第一台雷达的USB信息：",[51,125347,125349],{"className":119048,"code":125348,"language":119050,"meta":57,"style":57},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[59,125350,125351,125371],{"__ignoreMap":57},[79,125352,125353,125356,125358,125361,125364,125366,125368],{"class":81,"line":82},[79,125354,125355],{"class":85},"udevadm",[79,125357,71929],{"class":89},[79,125359,125360],{"class":96}," --attribute-walk",[79,125362,125363],{"class":96}," --name=\u002Fdev\u002FttyUSB0",[79,125365,27245],{"class":243},[79,125367,32366],{"class":85},[79,125369,125370],{"class":89}," KERNELS\n",[79,125372,125373,125375,125377,125379,125382,125384,125386],{"class":81,"line":167},[79,125374,125355],{"class":85},[79,125376,71929],{"class":89},[79,125378,125360],{"class":96},[79,125380,125381],{"class":96}," --name=\u002Fdev\u002FttyACM0",[79,125383,27245],{"class":243},[79,125385,32366],{"class":85},[79,125387,125370],{"class":89},[19,125389,125390],{},[3699,125391],{"alt":57,"src":125392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125394,125395],{},"调用如下指令查看第二台雷达的USB信息：",[51,125397,125399],{"className":119048,"code":125398,"language":119050,"meta":57,"style":57},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[59,125400,125401],{"__ignoreMap":57},[79,125402,125403,125405,125407,125409,125412,125414,125416],{"class":81,"line":82},[79,125404,125355],{"class":85},[79,125406,71929],{"class":89},[79,125408,125360],{"class":96},[79,125410,125411],{"class":96}," --name=\u002Fdev\u002FttyUSB1",[79,125413,27245],{"class":243},[79,125415,32366],{"class":85},[79,125417,125370],{"class":89},[19,125419,125420,125421,125424,125425,125428,125429,125432],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[59,125422,125423],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[59,125426,125427],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[2528,125430,125431],{},"唯一性标识","”。",[19,125434,125084],{},[19,125436,125087,125437,125439],{},[59,125438,125090],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[51,125441,125442],{"className":119048,"code":125094,"language":119050,"meta":57,"style":57},[59,125443,125444],{"__ignoreMap":57},[79,125445,125446,125448,125450],{"class":81,"line":82},[79,125447,86],{"class":85},[79,125449,120335],{"class":89},[79,125451,125105],{"class":89},[51,125453,125455],{"className":119048,"code":125454,"language":119050,"meta":57,"style":57},"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",[59,125456,125457,125486],{"__ignoreMap":57},[79,125458,125459,125461,125463,125465,125468,125470,125473,125476,125478,125481,125483],{"class":81,"line":82},[79,125460,125118],{"class":239},[79,125462,244],{"class":243},[79,125464,125123],{"class":89},[79,125466,125467],{"class":239}," KERNELS",[79,125469,244],{"class":243},[79,125471,125472],{"class":89},"=\"1-1.3:1.0\",",[79,125474,125475],{"class":85}," MODE:",[79,125477,244],{"class":89},[79,125479,125480],{"class":85},"\"0777\"",[79,125482,2752],{"class":85},[79,125484,125485],{"class":89}," SYMLINK+=\"rplidar_front\"\n",[79,125487,125488,125490,125492,125494,125496,125498,125501,125503,125505,125507,125509],{"class":81,"line":167},[79,125489,125118],{"class":239},[79,125491,244],{"class":243},[79,125493,125123],{"class":89},[79,125495,125467],{"class":239},[79,125497,244],{"class":243},[79,125499,125500],{"class":89},"=\"1-1.4:1.0\",",[79,125502,125475],{"class":85},[79,125504,244],{"class":89},[79,125506,125480],{"class":85},[79,125508,2752],{"class":85},[79,125510,125511],{"class":89}," SYMLINK+=\"rplidar_back\"\n",[19,125513,125203],{},[19,125515,125206],{},[51,125517,125518],{"className":119048,"code":125209,"language":119050,"meta":57,"style":57},[59,125519,125520,125524,125534,125544,125548,125552,125562],{"__ignoreMap":57},[79,125521,125522],{"class":81,"line":82},[79,125523,125216],{"class":2440},[79,125525,125526,125528,125530,125532],{"class":81,"line":167},[79,125527,86],{"class":85},[79,125529,121800],{"class":89},[79,125531,125225],{"class":89},[79,125533,125228],{"class":89},[79,125535,125536,125538,125540,125542],{"class":81,"line":178},[79,125537,86],{"class":85},[79,125539,121800],{"class":89},[79,125541,125225],{"class":89},[79,125543,125239],{"class":89},[79,125545,125546],{"class":81,"line":457},[79,125547,454],{"emptyLinePlaceholder":453},[79,125549,125550],{"class":81,"line":462},[79,125551,125248],{"class":2440},[79,125553,125554,125556,125558,125560],{"class":81,"line":474},[79,125555,86],{"class":85},[79,125557,125255],{"class":89},[79,125559,125258],{"class":89},[79,125561,125261],{"class":96},[79,125563,125564,125566,125568],{"class":81,"line":480},[79,125565,86],{"class":85},[79,125567,125255],{"class":89},[79,125569,125270],{"class":89},[19,125571,125273],{},[19,125573,125276],{},[19,125575,125279,125576,125579],{},[59,125577,125578],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125581,125582],{},[3699,125583],{"alt":57,"src":125584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125586,125587],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125589,125590,125592],{},[2528,125591,119716],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[265,125594,125596],{"id":125595},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125598,125599],{},"（1）.查看所连接的主机USB接口的信息",[51,125601,125603],{"className":119048,"code":125602,"language":119050,"meta":57,"style":57},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[59,125604,125605,125635],{"__ignoreMap":57},[79,125606,125607,125609,125611,125614,125616,125618,125620,125622,125625,125628,125630,125633],{"class":81,"line":82},[79,125608,125355],{"class":85},[79,125610,71929],{"class":89},[79,125612,125613],{"class":96}," -a",[79,125615,31346],{"class":96},[79,125617,30553],{"class":239},[79,125619,125355],{"class":85},[79,125621,71929],{"class":89},[79,125623,125624],{"class":96}," -q",[79,125626,125627],{"class":89}," path",[79,125629,152],{"class":96},[79,125631,125632],{"class":89}," \u002Fdev\u002FttyACM0",[79,125634,253],{"class":239},[79,125636,125637,125639,125641,125643,125645,125647,125649,125651,125653,125655,125657,125660],{"class":81,"line":167},[79,125638,125355],{"class":85},[79,125640,71929],{"class":89},[79,125642,125613],{"class":96},[79,125644,31346],{"class":96},[79,125646,30553],{"class":239},[79,125648,125355],{"class":85},[79,125650,71929],{"class":89},[79,125652,125624],{"class":96},[79,125654,125627],{"class":89},[79,125656,152],{"class":96},[79,125658,125659],{"class":89}," \u002Fdev\u002FttyUSB0",[79,125661,253],{"class":239},[19,125663,125664],{},[3699,125665],{"alt":57,"src":125666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125668,125669],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125671,125084],{},[19,125673,125087,125674,125439],{},[59,125675,125090],{},[51,125677,125678],{"className":119048,"code":125094,"language":119050,"meta":57,"style":57},[59,125679,125680],{"__ignoreMap":57},[79,125681,125682,125684,125686],{"class":81,"line":82},[79,125683,86],{"class":85},[79,125685,120335],{"class":89},[79,125687,125105],{"class":89},[51,125689,125691],{"className":119048,"code":125690,"language":119050,"meta":57,"style":57},"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",[59,125692,125693,125721,125747],{"__ignoreMap":57},[79,125694,125695,125697,125699,125702,125704,125706,125708,125710,125713,125716,125718],{"class":81,"line":82},[79,125696,125118],{"class":239},[79,125698,244],{"class":243},[79,125700,125701],{"class":89},"=\"ttyACM*\",",[79,125703,125126],{"class":85},[79,125705,125129],{"class":89},[79,125707,125158],{"class":85},[79,125709,2752],{"class":85},[79,125711,125712],{"class":89}," ATTRS{idProduct}==\"55d4\",",[79,125714,125715],{"class":89}," ATTRS{serial}==\"0001\",",[79,125717,125140],{"class":89},[79,125719,125720],{"class":89}," SYMLINK+=\"ttyACM_MCU\"\n",[79,125722,125723,125725,125727,125729,125731,125733,125735,125737,125739,125742,125744],{"class":81,"line":167},[79,125724,125118],{"class":239},[79,125726,244],{"class":243},[79,125728,125701],{"class":89},[79,125730,125126],{"class":85},[79,125732,125129],{"class":89},[79,125734,125158],{"class":85},[79,125736,2752],{"class":85},[79,125738,125712],{"class":89},[79,125740,125741],{"class":89}," ATTRS{serial}==\"0002\",",[79,125743,125140],{"class":89},[79,125745,125746],{"class":89}," SYMLINK+=\"ttyACM_Lidar\"\n",[79,125748,125749,125751,125753,125755,125757,125759,125761,125763,125765,125767],{"class":81,"line":178},[79,125750,125118],{"class":239},[79,125752,244],{"class":243},[79,125754,125123],{"class":89},[79,125756,125126],{"class":85},[79,125758,125129],{"class":89},[79,125760,125158],{"class":85},[79,125762,2752],{"class":85},[79,125764,125163],{"class":89},[79,125766,125140],{"class":89},[79,125768,125769],{"class":89}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125771,125203],{},[19,125773,125206],{},[51,125775,125776],{"className":119048,"code":125209,"language":119050,"meta":57,"style":57},[59,125777,125778,125782,125792,125802,125806,125810,125820],{"__ignoreMap":57},[79,125779,125780],{"class":81,"line":82},[79,125781,125216],{"class":2440},[79,125783,125784,125786,125788,125790],{"class":81,"line":167},[79,125785,86],{"class":85},[79,125787,121800],{"class":89},[79,125789,125225],{"class":89},[79,125791,125228],{"class":89},[79,125793,125794,125796,125798,125800],{"class":81,"line":178},[79,125795,86],{"class":85},[79,125797,121800],{"class":89},[79,125799,125225],{"class":89},[79,125801,125239],{"class":89},[79,125803,125804],{"class":81,"line":457},[79,125805,454],{"emptyLinePlaceholder":453},[79,125807,125808],{"class":81,"line":462},[79,125809,125248],{"class":2440},[79,125811,125812,125814,125816,125818],{"class":81,"line":474},[79,125813,86],{"class":85},[79,125815,125255],{"class":89},[79,125817,125258],{"class":89},[79,125819,125261],{"class":96},[79,125821,125822,125824,125826],{"class":81,"line":480},[79,125823,86],{"class":85},[79,125825,125255],{"class":89},[79,125827,125270],{"class":89},[19,125829,125830,125831],{},"再重新插拔设备即可，或者 ",[2528,125832,125833],{},"直接重启系统。",[19,125835,125276],{},[19,125837,125279,125838,125579],{},[59,125839,125578],{},[19,125841,125842],{},[3699,125843],{"alt":57,"src":125844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125846,125587],{},[19,125848,125849,125851],{},[2528,125850,119716],{}," 一些设备可能没有串口号等。",[265,125853,125855],{"id":125854},"_744-其他注意事项","7.4.4 其他注意事项",[19,125857,125858,125859,125861,125862,125865,125866,20549,125869,125872,125873,125875],{},"并非所有的USB设备端口号都是",[59,125860,125313],{},"的格式，比如Arduino的端口号可能是",[59,125863,125864],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[59,125867,125868],{},"videon",[59,125870,125871],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[59,125874,125868],{},"端口，绑定时需要关联的也是该接口。",[19,125877,125878,125879,125882,125883,125886,125887,125889,125890,125893,125894,125897,125898,125901,125902,125901,125905,125901,125908,1604],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[59,125880,125881],{},"KERNEL==\"ttyUSB*\"","修改为",[59,125884,125885],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[59,125888,125881],{},"修改为类似于",[59,125891,125892],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[59,125895,125896],{},"video[0,2,4,6]","表示可以绑定的端口为",[59,125899,125900],{},"video0","或",[59,125903,125904],{},"video2",[59,125906,125907],{},"video4",[59,125909,125910],{},"video6",[14,125912,125914],{"id":125913},"_75-挂载内网网页","7.5 挂载内网网页",[19,125916,125917],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125919,125920],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125922,125923],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125925,125926,125927],{},"Termux 下载地址（F-Droid）：",[2614,125928,125929],{"href":125929,"rel":125930},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[26001],[19,125932,125933],{},"首先打开app后，先更新软件缓存：",[51,125935,125937],{"className":119048,"code":125936,"language":119050,"meta":57,"style":57},"pkg update\n",[59,125938,125939],{"__ignoreMap":57},[79,125940,125941,125944],{"class":81,"line":82},[79,125942,125943],{"class":85},"pkg",[79,125945,28376],{"class":89},[19,125947,125948],{},"然后换源",[51,125950,125952],{"className":119048,"code":125951,"language":119050,"meta":57,"style":57},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[59,125953,125954],{"__ignoreMap":57},[79,125955,125956,125958,125961],{"class":81,"line":82},[79,125957,124826],{"class":85},[79,125959,125960],{"class":239}," $PREFIX",[79,125962,125963],{"class":89},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125965,125966],{},"将该文件内容替换为下面：",[51,125968,125970],{"className":119048,"code":125969,"language":119050,"meta":57,"style":57},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[59,125971,125972],{"__ignoreMap":57},[79,125973,125974,125977,125980,125983],{"class":81,"line":82},[79,125975,125976],{"class":85},"deb",[79,125978,125979],{"class":89}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[79,125981,125982],{"class":89}," stable",[79,125984,125985],{"class":89}," main\n",[3377,125987,125988,126015],{},[29,125989,125990,125991,125993,125994],{},"如果你使用的是",[59,125992,124826],{},"编辑器：",[3377,125995,125996,126003,126009],{},[29,125997,125998,125999,126002],{},"按 ",[59,126000,126001],{},"Ctrl+O"," 保存文件。",[29,126004,125998,126005,126008],{},[59,126006,126007],{},"Enter"," 确认文件名。",[29,126010,125998,126011,126014],{},[59,126012,126013],{},"Ctrl+X"," 退出编辑器。",[29,126016,125990,126017,125993,126020],{},[59,126018,126019],{},"vim",[3377,126021,126022,126028],{},[29,126023,125998,126024,126027],{},[59,126025,126026],{},"Esc"," 退出编辑模式。",[29,126029,126030,126031,126033],{},"输入 ",[59,126032,120973],{}," 保存并退出。",[19,126035,126036],{},"接下来重新更新软件源：",[51,126038,126040],{"className":119048,"code":126039,"language":119050,"meta":57,"style":57},"pkg update && pkg upgrade\n",[59,126041,126042],{"__ignoreMap":57},[79,126043,126044,126046,126048,126050,126052],{"class":81,"line":82},[79,126045,125943],{"class":85},[79,126047,119099],{"class":89},[79,126049,28324],{"class":239},[79,126051,125943],{"class":85},[79,126053,119085],{"class":89},[19,126055,126056],{},"安装python：",[51,126058,126060],{"className":119048,"code":126059,"language":119050,"meta":57,"style":57},"pkg install python\n",[59,126061,126062],{"__ignoreMap":57},[79,126063,126064,126066,126068],{"class":81,"line":82},[79,126065,125943],{"class":85},[79,126067,93],{"class":89},[79,126069,126070],{"class":89}," python\n",[19,126072,126073,28605],{},[2528,126074,126075],{},"通过Termux访问设备存储",[19,126077,126078],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[51,126080,126082],{"className":119048,"code":126081,"language":119050,"meta":57,"style":57},"termux-setup-storage\n",[59,126083,126084],{"__ignoreMap":57},[79,126085,126086],{"class":81,"line":82},[79,126087,126081],{"class":85},[26,126089,126090],{},[29,126091,126092,28605,126095],{},[2528,126093,126094],{},"进入HTML文件所在的目录",[26,126096,126097],{},[29,126098,126099,126100,126102],{},"使用",[59,126101,103352],{},"命令进入HTML文件所在的目录：",[51,126104,126106],{"className":119048,"code":126105,"language":119050,"meta":57,"style":57},"cd ~\u002Fyour_html_folder\n",[59,126107,126108],{"__ignoreMap":57},[79,126109,126110,126112],{"class":81,"line":82},[79,126111,103352],{"class":96},[79,126113,126114],{"class":89}," ~\u002Fyour_html_folder\n",[26,126116,126117],{"start":167},[29,126118,126119,28605,126122,126127,126144],{},[2528,126120,126121],{},"启动Python HTTP服务器",[26,126123,126124],{},[29,126125,126126],{},"运行以下命令启动一个简单的HTTP服务器：",[51,126128,126130],{"className":119048,"code":126129,"language":119050,"meta":57,"style":57},"python -m http.server 8000\n",[59,126131,126132],{"__ignoreMap":57},[79,126133,126134,126136,126138,126141],{"class":81,"line":82},[79,126135,232],{"class":85},[79,126137,102977],{"class":96},[79,126139,126140],{"class":89}," http.server",[79,126142,126143],{"class":96}," 8000\n",[26,126145,126146],{"start":178},[29,126147,126148,126149,126152],{},"这会在端口",[59,126150,126151],{},"8000","上启动一个Web服务器。",[3377,126154,126155],{},[29,126156,126157],{},"启动服务器后，Termux会显示日志信息，例如：",[51,126159,126161],{"className":122568,"code":126160,"language":122570,"meta":122571,"style":57},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[59,126162,126163],{"__ignoreMap":57},[79,126164,126165],{"class":81,"line":82},[79,126166,126160],{},[3377,126168,126169],{},[29,126170,126171],{},"这表示服务器已成功启动。",[19,126173,126174],{},[2528,126175,126176],{},"在浏览器中访问HTML文件",[26,126178,126179],{},[29,126180,126181,28605,126184,126189],{},[2528,126182,126183],{},"在同一设备上访问",[26,126185,126186],{},[29,126187,126188],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[51,126190,126193],{"className":126191,"code":126192,"language":73772,"meta":57,"style":57},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[59,126194,126195],{"__ignoreMap":57},[79,126196,126197,126200],{"class":81,"line":82},[79,126198,126199],{"class":239},"http:",[79,126201,126202],{"class":2440},"\u002F\u002Flocalhost:8000\n",[3377,126204,126205],{},[29,126206,126207,126208,126211],{},"如果HTML文件中有",[59,126209,126210],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126213,126215],{"id":126214},"_76-linux重点知识","7.6 Linux重点知识",[265,126217,126219],{"id":126218},"_761-关于点的说明","7.6.1 关于点的说明",[19,126221,126222],{},[3699,126223],{"alt":57,"src":126224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126226,126227],{},"一点本目录，两点上目录",[265,126229,126231],{"id":126230},"_762-目录","7.6.2 目录",[24137,126233,126235],{"id":126234},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126237,126238],{},[2528,126239,126240],{},"\u002Fboot:",[19,126242,126243],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126245,126246],{},[2528,126247,126248],{},"\u002Fetc:",[19,126250,126251],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126253,126254],{},[2528,126255,126256],{},"\u002Flib：",[19,126258,126259],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126261,126262],{},[2528,126263,126264],{},"\u002Fsys:",[19,126266,126267],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[24137,126269,126271],{"id":126270},"_7622-指令集合","7.6.2.2 指令集合",[19,126273,126274],{},[2528,126275,126276],{},"\u002Fbin:",[19,126278,126279],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126281,126282],{},[2528,126283,126284],{},"\u002Fsbin:",[19,126286,126287],{},"只有系统管理员才能使用的程序和指令",[24137,126289,126291],{"id":126290},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,126293,126294],{},[2528,126295,126296],{},"\u002Fdev:",[19,126298,126299],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,126301,126302],{},[2528,126303,126304],{},"\u002Fmedia:",[19,126306,126307],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,126309,126310],{},[2528,126311,126312],{},"\u002Fmnt:",[19,126314,126315],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[24137,126317,126319],{"id":126318},"_7624-临时文件","7.6.2.4 临时文件",[19,126321,126322],{},[2528,126323,126324],{},"\u002Frun:",[19,126326,126327],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126329,126330],{},[2528,126331,126332],{},"\u002Flost+found:",[19,126334,126335],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126337,126338],{},[2528,126339,126340],{},"\u002Ftmp:",[19,126342,126343],{},"这个目录是用来存放一些临时文件的",[24137,126345,126347],{"id":126346},"_7625-账户","7.6.2.5 账户",[19,126349,126350],{},[2528,126351,126352],{},"\u002Froot：",[19,126354,126355],{},"系统管理员的用户主目录",[19,126357,126358,28605],{},[2528,126359,126360],{},"\u002Fhome",[19,126362,126363],{},"用户的主目录，以用户的账号命名的",[19,126365,126366,28605],{},[2528,126367,126368],{},"\u002Fusr",[19,126370,126371],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,126373,126374],{},[2528,126375,126376],{},"\u002Fusr\u002Fbin：",[19,126378,126379],{},"系统用户使用的应用程序与指令",[19,126381,126382],{},[2528,126383,126384],{},"\u002Fusr\u002Fsbin：",[19,126386,126387],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126389,126390],{},[2528,126391,126392],{},"\u002Fusr\u002Fsrc：",[19,126394,126395],{},"内核源代码默认的放置目录",[24137,126397,126399],{"id":126398},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126401,126402],{},[2528,126403,126404],{},"\u002Fvar：",[19,126406,126407],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126409,126410],{},[2528,126411,126412],{},"\u002Fproc:",[19,126414,126415,126416,126419],{},"管理 ",[2528,126417,126418],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[24137,126421,126423],{"id":126422},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126425,126426],{},[2528,126427,126428],{},"\u002Fopt:",[19,126430,126431],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126433,126434],{},[2528,126435,126436],{},"\u002Fsrv:",[19,126438,126439],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[265,126441,126443],{"id":126442},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126445,126446],{},[3699,126447],{"alt":57,"src":126448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126450,126451],{},"windows-->linux:",[19,126453,126454],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126456,126457],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126459,126460],{},"linux传输文件到windows",[19,126462,126463],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[265,126465,126467],{"id":126466},"_764-易忘知识","7.6.4 易忘知识",[19,126469,126470],{},"操作系统内核查看",[51,126472,126473],{"className":119048,"code":123042,"language":119050,"meta":57,"style":57},[59,126474,126475],{"__ignoreMap":57},[79,126476,126477,126479],{"class":81,"line":82},[79,126478,72312],{"class":85},[79,126480,123051],{"class":96},[19,126482,126483],{},[3699,126484],{"alt":57,"src":126485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126487,126488],{},[3699,126489],{"alt":57,"src":126490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[51,126492,126494],{"className":119048,"code":126493,"language":119050,"meta":57,"style":57},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[59,126495,126496,126508],{"__ignoreMap":57},[79,126497,126498,126500,126503,126506],{"class":81,"line":82},[79,126499,123259],{"class":85},[79,126501,126502],{"class":89}," mvtest",[79,126504,126505],{"class":89}," mvtest2",[79,126507,4880],{"class":239},[79,126509,126510],{"class":81,"line":167},[79,126511,126512],{"class":85},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126514,126515],{},[3699,126516],{"alt":57,"src":126517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126519,126520],{},[3699,126521],{"alt":57,"src":126522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126524,126525,126526,126529],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[59,126527,126528],{},"du -a"," 可以快速查看磁盘使用细节。",[265,126531,126533],{"id":126532},"_765-vim","7.6.5 Vim",[19,126535,126536],{},[3699,126537],{"alt":57,"src":126538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126540,126541],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126543,126544],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126546,126547],{},[2528,126548,126549],{},"1.命令模式：",[19,126551,126552],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126554,126555],{},"x 删除当前光标所在处的字符",[19,126557,126558],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126560,126561],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126563,126564],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126566,126567],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126569,126570],{},"dd 剪切当前行",[19,126572,126573],{},"yy 复制当前行",[19,126575,126576],{},"p 粘贴剪贴板内容到光标下方",[19,126578,126579],{},"P 粘贴剪贴板内容到光标上方",[19,126581,126582],{},"u 撤销上一次操作",[19,126584,126585],{},"ctrl+r 重做上一次操作",[19,126587,126588,126590],{},[3168,126589],{}," 保存文件",[19,126592,126593,126595],{},[3018,126594],{}," 退出Vim编辑器",[19,126597,126598,126600],{},[3018,126599],{},"! 强制退出Vim编辑器，不保存修改",[19,126602,126603],{},[2528,126604,126605],{},"2.输入模式：",[19,126607,126608],{},[3699,126609],{"alt":57,"src":126610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126612,126613],{},[2528,126614,126615],{},"3.底线命令模式：",[19,126617,126618],{},[3699,126619],{"alt":57,"src":126620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126622,126623],{},"按下esc可以退出底线命令模式",[265,126625,126627],{"id":126626},"_766-apt","7.6.6 apt",[19,126629,126630],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[265,126632,126634],{"id":126633},"_767-home与root的区别","7.6.7 home与root的区别",[19,126636,126637],{},[3699,126638],{"alt":57,"src":126639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126641,126642],{},[3699,126643],{"alt":57,"src":126644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126646,126647],{},[3699,126648],{"alt":57,"src":126649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126651,126652],{},[3699,126653],{"alt":57,"src":126654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[265,126656,126658],{"id":126657},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126660,126661],{},[2614,126662,126663],{"href":126663,"rel":126664},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[26001],[26,126666,126667,126670],{},[29,126668,126669],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[29,126671,126672],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126674,126675],{},[3699,126676],{"alt":57,"src":126677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126679,126680],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126682,126683],{},[3699,126684],{"alt":57,"src":126685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[51,126687,126689],{"className":122568,"code":126688,"language":122570,"meta":122571,"style":57},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[59,126690,126691,126696],{"__ignoreMap":57},[79,126692,126693],{"class":81,"line":82},[79,126694,126695],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[79,126697,126698],{"class":81,"line":167},[79,126699,126700],{},".\u002Fpycharm.sh\n",[19,126702,126703],{},"3️⃣创建.desktop文件",[19,126705,126706],{},[2528,126707,126708],{},"原理：",[3377,126710,126711,126721],{},[29,126712,126713,126714,126720],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[2528,126715,126716,126719],{},[59,126717,126718],{},".desktop"," 文件"," 来识别应用。",[29,126722,126723,126725,126726],{},[59,126724,126718],{}," 文件相当于一个“应用注册表”，告诉系统：",[3377,126727,126728,126731,126734,126737,126740],{},[29,126729,126730],{},"应用名字（Name）",[29,126732,126733],{},"图标（Icon）",[29,126735,126736],{},"执行命令（Exec）",[29,126738,126739],{},"分类（Categories）",[29,126741,126742],{},"是否需要终端（Terminal）",[51,126744,126746],{"className":122568,"code":126745,"language":122570,"meta":122571,"style":57},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[59,126747,126748,126753],{"__ignoreMap":57},[79,126749,126750],{"class":81,"line":82},[79,126751,126752],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[79,126754,126755],{"class":81,"line":167},[79,126756,126757],{},"nano pycharm.desktop\n",[19,126759,126760],{},"nano是一个命令行下的编辑器，也可以使用vim",[51,126762,126764],{"className":122568,"code":126763,"language":122570,"meta":122571,"style":57},"[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",[59,126765,126766,126771,126776,126781,126786,126791,126796,126801,126806,126811],{"__ignoreMap":57},[79,126767,126768],{"class":81,"line":82},[79,126769,126770],{},"[Desktop Entry]\n",[79,126772,126773],{"class":81,"line":167},[79,126774,126775],{},"Version=1.0\n",[79,126777,126778],{"class":81,"line":178},[79,126779,126780],{},"Type=Application\n",[79,126782,126783],{"class":81,"line":457},[79,126784,126785],{},"Name=PyCharm\n",[79,126787,126788],{"class":81,"line":462},[79,126789,126790],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[79,126792,126793],{"class":81,"line":474},[79,126794,126795],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[79,126797,126798],{"class":81,"line":480},[79,126799,126800],{},"Comment=JetBrains PyCharm IDE\n",[79,126802,126803],{"class":81,"line":486},[79,126804,126805],{},"Categories=Development;IDE;\n",[79,126807,126808],{"class":81,"line":491},[79,126809,126810],{},"Terminal=false\n",[79,126812,126813],{"class":81,"line":497},[79,126814,126815],{},"StartupWMClass=jetbrains-pycharm\n",[3377,126817,126818,126824,126830,126836],{},[29,126819,126820,126823],{},[59,126821,126822],{},"Exec"," → 点击图标时执行的命令",[29,126825,126826,126829],{},[59,126827,126828],{},"Icon"," → 显示在菜单和桌面上的图标",[29,126831,126832,126835],{},[59,126833,126834],{},"Terminal=false"," → 不打开终端",[29,126837,126838,126841],{},[59,126839,126840],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126843,126844,126845],"blockquote",{},[19,126846,126847,126848,126850,126851],{},"可以理解成 ",[59,126849,126718],{}," 文件是 Linux 的 ",[2528,126852,126853],{},"快捷方式配置文件",[19,126855,126856],{},"4️⃣设置可执行权限",[51,126858,126860],{"className":122568,"code":126859,"language":122570,"meta":122571,"style":57},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[59,126861,126862],{"__ignoreMap":57},[79,126863,126864],{"class":81,"line":82},[79,126865,126859],{},[19,126867,126868],{},"5️⃣桌面图标启动的话如下：",[51,126870,126872],{"className":122568,"code":126871,"language":122570,"meta":122571,"style":57},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[59,126873,126874,126879],{"__ignoreMap":57},[79,126875,126876],{"class":81,"line":82},[79,126877,126878],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[79,126880,126881],{"class":81,"line":167},[79,126882,126883],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,126885,126886],{"start":178},[29,126887,126888],{},"下载Appimage文件实现软件的安装",[19,126890,126891],{},"1️⃣先下载appimage",[19,126893,126894],{},[2614,126895,126896],{"href":126896,"rel":126897},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[26001],[19,126899,126900],{},[3699,126901],{"alt":57,"src":126902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126904,126905],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126907,126908],{},[3699,126909],{"alt":57,"src":126910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126912,126913],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126915,126916],{},[3699,126917],{"alt":57,"src":126918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126920,126921],{},[3699,126922],{"alt":57,"src":126923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126925,126926,126927,126930],{},"3️⃣给他们放在",[59,126928,126929],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126932,126933],{},"4️⃣给软件执行权限",[51,126935,126937],{"className":122568,"code":126936,"language":122570,"meta":122571,"style":57},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[59,126938,126939,126944],{"__ignoreMap":57},[79,126940,126941],{"class":81,"line":82},[79,126942,126943],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[79,126945,126946],{"class":81,"line":167},[79,126947,126948],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126950,126951],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[51,126953,126955],{"className":119048,"code":126954,"language":119050,"meta":57,"style":57},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[59,126956,126957,126964,126971,126977],{"__ignoreMap":57},[79,126958,126959,126961],{"class":81,"line":82},[79,126960,103352],{"class":96},[79,126962,126963],{"class":89}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[79,126965,126966,126968],{"class":81,"line":167},[79,126967,1358],{"class":85},[79,126969,126970],{"class":89}," .\u002Fqqmusic.desktop\n",[79,126972,126973,126975],{"class":81,"line":178},[79,126974,126019],{"class":85},[79,126976,126970],{"class":89},[79,126978,126979,126981,126983,126985],{"class":81,"line":457},[79,126980,86],{"class":85},[79,126982,26715],{"class":89},[79,126984,124885],{"class":89},[79,126986,126970],{"class":89},[19,126988,126989,126991],{},[59,126990,1358],{},"：一个 Linux 命令，主要功能是：",[3377,126993,126994,126997],{},[29,126995,126996],{},"如果文件不存在，就创建一个新的空文件",[29,126998,126999],{},"如果文件已存在，就更新该文件的最后修改时间",[51,127001,127003],{"className":122568,"code":127002,"language":122570,"meta":122571,"style":57},"[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",[59,127004,127005,127009,127014,127019,127024,127028,127033],{"__ignoreMap":57},[79,127006,127007],{"class":81,"line":82},[79,127008,126770],{},[79,127010,127011],{"class":81,"line":167},[79,127012,127013],{},"Name=QQ音乐\n",[79,127015,127016],{"class":81,"line":178},[79,127017,127018],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[79,127020,127021],{"class":81,"line":457},[79,127022,127023],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[79,127025,127026],{"class":81,"line":462},[79,127027,126780],{},[79,127029,127030],{"class":81,"line":474},[79,127031,127032],{},"Categories=Audio;Music;Player;\n",[79,127034,127035],{"class":81,"line":480},[79,127036,127037],{},"Comment=QQ Music Client for Linux\n",[19,127039,127040],{},"将文件复制进去",[19,127042,127043],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,127045,127046],{},[3699,127047],{"alt":57,"src":127048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,127050,127051],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,127053,127054],{},[3699,127055],{"alt":57,"src":127056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,127058,127059,127060,127063,127064,127067],{},"如果你用的不是KDE，那么也可以直接修改",[59,127061,127062],{},"qqmuic.desktop","：在exec的末尾加上",[59,127065,127066],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[51,127069,127071],{"className":122568,"code":127070,"language":122570,"meta":122571,"style":57},"[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",[59,127072,127073,127077,127081,127086,127090,127094,127098],{"__ignoreMap":57},[79,127074,127075],{"class":81,"line":82},[79,127076,126770],{},[79,127078,127079],{"class":81,"line":167},[79,127080,127013],{},[79,127082,127083],{"class":81,"line":178},[79,127084,127085],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[79,127087,127088],{"class":81,"line":457},[79,127089,127023],{},[79,127091,127092],{"class":81,"line":462},[79,127093,126780],{},[79,127095,127096],{"class":81,"line":474},[79,127097,127032],{},[79,127099,127100],{"class":81,"line":480},[79,127101,127037],{},[19,127103,127104],{},[3699,127105],{"alt":57,"src":127106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,127108,127109],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[51,127111,127113],{"className":122568,"code":127112,"language":122570,"meta":122571,"style":57},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[59,127114,127115],{"__ignoreMap":57},[79,127116,127117],{"class":81,"line":82},[79,127118,127112],{},[26,127120,127121],{"start":457},[29,127122,127123],{},"去Flathub上安装软件",[19,127125,127126],{},[2614,127127,127128],{"href":127128,"rel":127129},"https:\u002F\u002Fflathub.org\u002F",[26001],[19,127131,127132],{},"1️⃣去上面的官网搜索软件+下载软件",[19,127134,127135],{},[3699,127136],{"alt":57,"src":127137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[51,127139,127141],{"className":122568,"code":127140,"language":122570,"meta":122571,"style":57},"flatpak install flathub com.obsproject.Studio\n",[59,127142,127143],{"__ignoreMap":57},[79,127144,127145],{"class":81,"line":82},[79,127146,127140],{},[19,127148,127149],{},[3699,127150],{"alt":57,"src":127151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,127153,127154],{},"2️⃣运行软件",[19,127156,127157],{},"a.官方方式：",[19,127159,127160],{},[3699,127161],{"alt":57,"src":127162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[51,127164,127165],{"className":122568,"code":127140,"language":122570,"meta":122571,"style":57},[59,127166,127167],{"__ignoreMap":57},[79,127168,127169],{"class":81,"line":82},[79,127170,127140],{},[19,127172,127173],{},"b.当普通软件运行：",[19,127175,127176],{},[3699,127177],{"alt":57,"src":127178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127180,127181],{},[3699,127182],{"alt":57,"src":127183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[2287,127185,127186],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":57,"searchDepth":167,"depth":167,"links":127188},[127189,127190,127195,127196,127202,127203],{"id":123921,"depth":167,"text":123922},{"id":124263,"depth":167,"text":124264,"children":127191},[127192,127193,127194],{"id":124267,"depth":178,"text":124268},{"id":124334,"depth":178,"text":124335},{"id":124595,"depth":178,"text":124596},{"id":124748,"depth":167,"text":124749},{"id":124986,"depth":167,"text":124987,"children":127197},[127198,127199,127200,127201],{"id":125038,"depth":178,"text":125039},{"id":125324,"depth":178,"text":125325},{"id":125595,"depth":178,"text":125596},{"id":125854,"depth":178,"text":125855},{"id":125913,"depth":167,"text":125914},{"id":126214,"depth":167,"text":126215,"children":127204},[127205,127206,127207,127208,127209,127210,127211,127212],{"id":126218,"depth":178,"text":126219},{"id":126230,"depth":178,"text":126231},{"id":126442,"depth":178,"text":126443},{"id":126466,"depth":178,"text":126467},{"id":126532,"depth":178,"text":126533},{"id":126626,"depth":178,"text":126627},{"id":126633,"depth":178,"text":126634},{"id":126657,"depth":178,"text":126658},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123913,"description":25516},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127219,"title":127220,"body":127221,"description":25516,"extension":2314,"meta":127225,"navigation":453,"path":127226,"seo":127227,"stem":127228,"__hash__":127229},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127222,"toc":127223},[],{"title":57,"searchDepth":167,"depth":167,"links":127224},[],{"category":32393},"\u002Fwiki\u002F2025-01-27-linux",{"title":127220,"description":25516},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127231,"title":127232,"body":127233,"description":127237,"extension":2314,"meta":127628,"navigation":453,"path":127629,"seo":127630,"stem":127631,"__hash__":127632},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127234,"toc":127626},[127235,127238,127242,127259,127262,127315,127319,127321,127361,127370,127374,127377,127618,127623],[19,127236,127237],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127239,127241],{"id":127240},"_1ubuntu环境配置","1.Ubuntu环境配置",[26,127243,127244,127247,127250,127253,127256],{},[29,127245,127246],{},"ubuntu环境换源",[29,127248,127249],{},"安装cuda",[29,127251,127252],{},"安装miniconda",[29,127254,127255],{},"安装pytorch",[29,127257,127258],{},"安装genesis",[19,127260,127261],{},"参考链接：",[51,127263,127265],{"className":73,"code":127264,"language":75,"meta":57,"style":57},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[59,127266,127267],{"__ignoreMap":57},[79,127268,127269,127272,127275,127278,127280,127283,127286,127288,127291,127294,127296,127299,127302,127304,127307,127310,127312],{"class":81,"line":82},[79,127270,127271],{"class":85},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[79,127273,127274],{"class":89},"=blogdetail",[79,127276,127277],{"class":239},"&sharetype",[79,127279,244],{"class":243},[79,127281,127282],{"class":89},"blogdetail",[79,127284,127285],{"class":239},"&sharerId",[79,127287,244],{"class":243},[79,127289,127290],{"class":89},"144728092",[79,127292,127293],{"class":239},"&sharerefer",[79,127295,244],{"class":243},[79,127297,127298],{"class":89},"PC",[79,127300,127301],{"class":239},"&sharesource",[79,127303,244],{"class":243},[79,127305,127306],{"class":89},"qq_69379513",[79,127308,127309],{"class":239},"&sharefrom",[79,127311,244],{"class":243},[79,127313,127314],{"class":89},"from_link\n",[10,127316,127318],{"id":127317},"_2genesis-报错issue","2.Genesis 报错issue",[19,127320,127261],{},[51,127322,127323],{"className":73,"code":127264,"language":75,"meta":57,"style":57},[59,127324,127325],{"__ignoreMap":57},[79,127326,127327,127329,127331,127333,127335,127337,127339,127341,127343,127345,127347,127349,127351,127353,127355,127357,127359],{"class":81,"line":82},[79,127328,127271],{"class":85},[79,127330,127274],{"class":89},[79,127332,127277],{"class":239},[79,127334,244],{"class":243},[79,127336,127282],{"class":89},[79,127338,127285],{"class":239},[79,127340,244],{"class":243},[79,127342,127290],{"class":89},[79,127344,127293],{"class":239},[79,127346,244],{"class":243},[79,127348,127298],{"class":89},[79,127350,127301],{"class":239},[79,127352,244],{"class":243},[79,127354,127306],{"class":89},[79,127356,127309],{"class":239},[79,127358,244],{"class":243},[79,127360,127314],{"class":89},[51,127362,127364],{"className":73,"code":127363,"language":75,"meta":57,"style":57},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[59,127365,127366],{"__ignoreMap":57},[79,127367,127368],{"class":81,"line":82},[79,127369,127363],{"class":85},[10,127371,127373],{"id":127372},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,127375,127376],{},"hello_robot.py",[51,127378,127380],{"className":230,"code":127379,"language":232,"meta":57,"style":57},"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",[59,127381,127382,127388,127403,127407,127419,127431,127435,127448,127452,127471,127481,127491,127505,127509,127513,127518,127522,127532,127539,127553,127560,127570,127575,127579,127597,127602,127606,127613],{"__ignoreMap":57},[79,127383,127384,127386],{"class":81,"line":82},[79,127385,432],{"class":243},[79,127387,47419],{"class":239},[79,127389,127390,127393,127396,127398,127400],{"class":81,"line":167},[79,127391,127392],{"class":239},"os.environ[",[79,127394,127395],{"class":89},"'PYOPENGL_PLATFORM'",[79,127397,1033],{"class":239},[79,127399,244],{"class":243},[79,127401,127402],{"class":89}," 'glx'\n",[79,127404,127405],{"class":81,"line":178},[79,127406,454],{"emptyLinePlaceholder":453},[79,127408,127409,127411,127414,127416],{"class":81,"line":457},[79,127410,432],{"class":243},[79,127412,127413],{"class":239}," genesis ",[79,127415,445],{"class":243},[79,127417,127418],{"class":239}," gs\n",[79,127420,127421,127423,127426,127428],{"class":81,"line":462},[79,127422,32862],{"class":243},[79,127424,127425],{"class":239}," pynput ",[79,127427,432],{"class":243},[79,127429,127430],{"class":239}," keyboard\n",[79,127432,127433],{"class":81,"line":474},[79,127434,454],{"emptyLinePlaceholder":453},[79,127436,127437,127440,127443,127445],{"class":81,"line":480},[79,127438,127439],{"class":239},"gs.init(",[79,127441,127442],{"class":7412},"backend",[79,127444,244],{"class":243},[79,127446,127447],{"class":239},"gs.gpu)\n",[79,127449,127450],{"class":81,"line":486},[79,127451,454],{"emptyLinePlaceholder":453},[79,127453,127454,127457,127459,127462,127465,127467,127469],{"class":81,"line":491},[79,127455,127456],{"class":239},"scene ",[79,127458,244],{"class":243},[79,127460,127461],{"class":239}," gs.Scene(",[79,127463,127464],{"class":7412},"show_viewer",[79,127466,244],{"class":243},[79,127468,33595],{"class":96},[79,127470,253],{"class":239},[79,127472,127473,127476,127478],{"class":81,"line":497},[79,127474,127475],{"class":239},"plane ",[79,127477,244],{"class":243},[79,127479,127480],{"class":239}," scene.add_entity(gs.morphs.Plane())\n",[79,127482,127483,127486,127488],{"class":81,"line":503},[79,127484,127485],{"class":239},"franka ",[79,127487,244],{"class":243},[79,127489,127490],{"class":239}," scene.add_entity(\n",[79,127492,127493,127496,127498,127500,127503],{"class":81,"line":509},[79,127494,127495],{"class":239},"    gs.morphs.MJCF(",[79,127497,47468],{"class":7412},[79,127499,244],{"class":243},[79,127501,127502],{"class":89},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[79,127504,40161],{"class":239},[79,127506,127507],{"class":81,"line":514},[79,127508,253],{"class":239},[79,127510,127511],{"class":81,"line":520},[79,127512,454],{"emptyLinePlaceholder":453},[79,127514,127515],{"class":81,"line":526},[79,127516,127517],{"class":239},"scene.build()\n",[79,127519,127520],{"class":81,"line":532},[79,127521,454],{"emptyLinePlaceholder":453},[79,127523,127524,127526,127529],{"class":81,"line":537},[79,127525,633],{"class":243},[79,127527,127528],{"class":85}," on_press",[79,127530,127531],{"class":239},"(key):\n",[79,127533,127534,127537],{"class":81,"line":543},[79,127535,127536],{"class":243},"    try",[79,127538,673],{"class":239},[79,127540,127541,127543,127546,127548,127551],{"class":81,"line":549},[79,127542,1132],{"class":243},[79,127544,127545],{"class":239}," key.char ",[79,127547,5155],{"class":243},[79,127549,127550],{"class":89}," 'q'",[79,127552,673],{"class":239},[79,127554,127555,127557],{"class":81,"line":555},[79,127556,17892],{"class":243},[79,127558,127559],{"class":96}," False\n",[79,127561,127562,127565,127568],{"class":81,"line":561},[79,127563,127564],{"class":243},"    except",[79,127566,127567],{"class":96}," AttributeError",[79,127569,673],{"class":239},[79,127571,127572],{"class":81,"line":567},[79,127573,127574],{"class":243},"        pass\n",[79,127576,127577],{"class":81,"line":573},[79,127578,454],{"emptyLinePlaceholder":453},[79,127580,127581,127584,127586,127589,127592,127594],{"class":81,"line":579},[79,127582,127583],{"class":239},"listener ",[79,127585,244],{"class":243},[79,127587,127588],{"class":239}," keyboard.Listener(",[79,127590,127591],{"class":7412},"on_press",[79,127593,244],{"class":243},[79,127595,127596],{"class":239},"on_press)\n",[79,127598,127599],{"class":81,"line":584},[79,127600,127601],{"class":239},"listener.start()\n",[79,127603,127604],{"class":81,"line":590},[79,127605,454],{"emptyLinePlaceholder":453},[79,127607,127608,127610],{"class":81,"line":596},[79,127609,110670],{"class":243},[79,127611,127612],{"class":239}," listener.running:\n",[79,127614,127615],{"class":81,"line":602},[79,127616,127617],{"class":239},"    scene.step()\n",[19,127619,127620],{},[3699,127621],{"alt":57,"src":127622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[2287,127624,127625],{},"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":57,"searchDepth":167,"depth":167,"links":127627},[],{"category":25518},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127232,"description":127237},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127634,"title":127635,"body":127636,"description":25516,"extension":2314,"meta":127651,"navigation":453,"path":127652,"seo":127653,"stem":127654,"__hash__":127655},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127637,"toc":127648},[127638,127641,127645],[10,127639,127635],{"id":127640},"_1-基础知识",[14,127642,127644],{"id":127643},"_11-js的组成","1.1 js的组成",[19,127646,127647],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":57,"searchDepth":167,"depth":167,"links":127649},[127650],{"id":127643,"depth":167,"text":127644},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127635,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127657,"title":127658,"body":127659,"description":25516,"extension":2314,"meta":127798,"navigation":453,"path":127799,"seo":127800,"stem":127801,"__hash__":127802},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127660,"toc":127786},[127661,127664,127668,127671,127675,127685,127689,127692,127695,127698,127702,127709,127715,127719,127725,127736,127740,127743,127747,127750,127754,127757,127761,127764,127768,127771,127774,127777,127780,127783],[10,127662,127658],{"id":127663},"_2-vscode必备内容",[14,127665,127667],{"id":127666},"_21-标签分类","2.1 标签分类",[19,127669,127670],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127672,127674],{"id":127673},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127676,127677,127678,127680,127681,127684],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[59,127679,2602],{}," 然后按 ",[59,127682,127683],{},"Tab","，快速自动生成基本结构。",[14,127686,127688],{"id":127687},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127690,127691],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127693,127694],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127696,127697],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127699,127701],{"id":127700},"_24-视图缩放","2.4 视图缩放",[19,127703,127704,127705,127708],{},"缩放视图 ",[59,127706,127707],{},"ctrl+"," 可实现代码增大。",[19,127710,127711,127714],{},[59,127712,127713],{},"ctrl-"," 可实现代码减小。",[14,127716,127718],{"id":127717},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127720,127721,127722,1604],{},"VSCode 新建文件快捷键为 ",[59,127723,127724],{},"ctrl+N",[19,127726,127727,127728,127731,127732,127735],{},"保存快捷键为 ",[59,127729,127730],{},"ctrl+S","，将文本保存为 ",[59,127733,127734],{},".html"," 文件。",[14,127737,127739],{"id":127738},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127741,127742],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127744,127746],{"id":127745},"_27-vscode-icons","2.7 vscode-icons",[19,127748,127749],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127751,127753],{"id":127752},"_28-easy-less","2.8 Easy LESS",[19,127755,127756],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127758,127760],{"id":127759},"_29-会了吧插件","2.9 会了吧插件",[19,127762,127763],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127765,127767],{"id":127766},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127769,127770],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127772,127773],{},"②选定多个相同的单词:ctrl+D",[19,127775,127776],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127778,127779],{},"④全局替换某些单词:ctrl+h",[19,127781,127782],{},"⑤快速定位到某一行:ctrl+g",[19,127784,127785],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":57,"searchDepth":167,"depth":167,"links":127787},[127788,127789,127790,127791,127792,127793,127794,127795,127796,127797],{"id":127666,"depth":167,"text":127667},{"id":127673,"depth":167,"text":127674},{"id":127687,"depth":167,"text":127688},{"id":127700,"depth":167,"text":127701},{"id":127717,"depth":167,"text":127718},{"id":127738,"depth":167,"text":127739},{"id":127745,"depth":167,"text":127746},{"id":127752,"depth":167,"text":127753},{"id":127759,"depth":167,"text":127760},{"id":127766,"depth":167,"text":127767},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127658,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127804,"title":127805,"body":127806,"description":25516,"extension":2314,"meta":127965,"navigation":453,"path":127966,"seo":127967,"stem":127968,"__hash__":127969},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127807,"toc":127957},[127808,127811,127815,127825,127831,127837,127841,127850,127854,127859,127862,127865,127869,127872,127882,127891,127900,127909,127919,127926,127931,127936,127949],[10,127809,127805],{"id":127810},"_3-html文本与容器标签",[14,127812,127814],{"id":127813},"_31-标题标签","3.1 标题标签",[19,127816,127817,127820,127821,127824],{},[59,127818,127819],{},"\u003Ch1>","我是一级标签",[59,127822,127823],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127826,127827,127820,127829],{},[59,127828,127819],{},[59,127830,127823],{},[19,127832,125087,127833,127836],{},[59,127834,127835],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127838,127840],{"id":127839},"_32-段落标签","3.2 段落标签",[19,127842,127843,127846,127847],{},[59,127844,127845],{},"\u003Cp>","....",[59,127848,127849],{},"\u003C\u002Fp>",[14,127851,127853],{"id":127852},"_33-换行标签","3.3 换行标签",[19,127855,127856],{},[59,127857,127858],{},"\u003Cbr \u002F>",[19,127860,127861],{},"具有强制换行的作用",[19,127863,127864],{},"单标签",[14,127866,127868],{"id":127867},"_34-文本格式化标签","3.4 文本格式化标签",[19,127870,127871],{},"提供粗体、斜体和下划线等效果",[19,127873,127874,127875,1601,127878,127881],{},"加粗：",[59,127876,127877],{},"\u003Cstrong>...\u003C\u002Fstrong>",[59,127879,127880],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127883,127884,127885,1601,127888,127881],{},"斜体：",[59,127886,127887],{},"\u003Cem>...\u003C\u002Fem>",[59,127889,127890],{},"\u003Ci>...\u003C\u002Fi>",[19,127892,127893,127894,1601,127897,127881],{},"删除线：",[59,127895,127896],{},"\u003Cdel>...\u003C\u002Fdel>",[59,127898,127899],{},"\u003Cs>...\u003C\u002Fs>",[19,127901,127902,127903,1601,127906,127881],{},"下划线：",[59,127904,127905],{},"\u003Cins>...\u003C\u002Fins>",[59,127907,127908],{},"\u003Cu>...\u003C\u002Fu>",[14,127910,127912,127913,20549,127916,104733],{"id":127911},"_35-div和span标签","3.5 ",[59,127914,127915],{},"\u003Cdiv>",[59,127917,127918],{},"\u003Cspan>",[19,127920,127921,1905,127923,127925],{},[59,127922,127915],{},[59,127924,127918],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127927,127928],{},[59,127929,127930],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127932,127933],{},[59,127934,127935],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127937,127938,127939,127941,127942,127944,127945,127948],{},"两者特点：①",[59,127940,127915],{}," 标签用来布局，但一行通常只放一个 ",[59,127943,127915],{},"。可以理解为一个大盒子，独占一行，在 ",[59,127946,127947],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127950,79357,127951,127953,127954,127956],{},[59,127952,127918],{}," 标签也可用于布局，一行可以放多个 ",[59,127955,127918],{},"，可理解为小盒子。",{"title":57,"searchDepth":167,"depth":167,"links":127958},[127959,127960,127961,127962,127963],{"id":127813,"depth":167,"text":127814},{"id":127839,"depth":167,"text":127840},{"id":127852,"depth":167,"text":127853},{"id":127867,"depth":167,"text":127868},{"id":127911,"depth":167,"text":127964},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127805,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127971,"title":127972,"body":127973,"description":25516,"extension":2314,"meta":128170,"navigation":453,"path":128171,"seo":128172,"stem":128173,"__hash__":128174},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127974,"toc":128162},[127975,127978,127982,127985,127991,127998,128004,128010,128013,128016,128019,128022,128025,128028,128031,128035,128038,128041,128044,128050,128056,128062,128069,128073,128079,128085,128088,128091,128097,128103,128109,128112,128115,128119,128122,128132,128138,128142,128151,128155,128158],[10,127976,127972],{"id":127977},"_4-html图像与链接",[14,127979,127981],{"id":127980},"_41-图像标签","4.1 图像标签",[19,127983,127984],{},"（1）标签",[19,127986,127987,127990],{},[59,127988,127989],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127992,127993,127994,127997],{},"src是",[59,127995,127996],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127999,128000,128001],{},"alt:文本，替换文本。图像不能显示的文字 ",[59,128002,128003],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,128005,128006,128007],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[59,128008,128009],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,128011,128012],{},"width:像素，设置图像的宽度",[19,128014,128015],{},"height:像素，设置图像的高度",[19,128017,128018],{},"border：像素，设置图像的边框粗细",[19,128020,128021],{},"（2）图像标签属性的注意点：",[19,128023,128024],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,128026,128027],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,128029,128030],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128032,128034],{"id":128033},"_42-路径注意要点","4.2 路径注意要点：",[19,128036,128037],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,128039,128040],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,128042,128043],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,128045,128046,128047],{},"①同一级路径：图像文件位于HTML文件同一级，如",[59,128048,128049],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,128051,128052,128053],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[59,128054,128055],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,128057,128058,128059],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[59,128060,128061],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,128063,128064,128065,703],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2614,128066,128067],{"href":128067,"rel":128068},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[26001],[14,128070,128072],{"id":128071},"_43-超链接标签","4.3 超链接标签",[19,128074,128075,128078],{},[59,128076,128077],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,128080,128081,128082],{},"①语法格式：",[59,128083,128084],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,128086,128087],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,128089,128090],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,128092,128093,128094],{},"③链接分类：外部链接：",[59,128095,128096],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,128098,128099,128100],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[59,128101,128102],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,128104,128105,128106],{},"空链接：如果当时没有确定链接目标时，",[59,128107,128108],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,128110,128111],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,128113,128114],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128116,128118],{"id":128117},"_44-锚点链接","4.4 锚点链接",[19,128120,128121],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,128123,128124,128125,128128,128129],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[59,128126,128127],{},"\u003Ca href=\"#two\">","第二级",[59,128130,128131],{},"\u003C\u002Fa>",[19,128133,128134,128135],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[59,128136,128137],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128139,128141],{"id":128140},"_45-注释标签","4.5 注释标签",[19,128143,128144,128147,128148],{},[59,128145,128146],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[59,128149,128150],{},"ctrl+\u002F",[14,128152,128154],{"id":128153},"_46-特殊字符","4.6 特殊字符",[19,128156,128157],{},"可以实现添加多个空格",[3699,128159],{"style":128160,"src":128161},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":57,"searchDepth":167,"depth":167,"links":128163},[128164,128165,128166,128167,128168,128169],{"id":127980,"depth":167,"text":127981},{"id":128033,"depth":167,"text":128034},{"id":128071,"depth":167,"text":128072},{"id":128117,"depth":167,"text":128118},{"id":128140,"depth":167,"text":128141},{"id":128153,"depth":167,"text":128154},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127972,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128176,"title":128177,"body":128178,"description":25516,"extension":2314,"meta":128471,"navigation":453,"path":128472,"seo":128473,"stem":128474,"__hash__":128475},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128179,"toc":128462},[128180,128183,128187,128190,128193,128196,128199,128202,128205,128208,128211,128214,128234,128240,128244,128247,128250,128253,128256,128259,128262,128266,128269,128272,128275,128278,128291,128296,128299,128302,128317,128320,128323,128326,128329,128332,128336,128339,128346,128349,128352,128355,128358,128361,128367,128370,128373,128379,128382,128385,128388,128394,128397,128400,128414,128421,128424,128427,128434,128443,128446,128449,128452,128456,128459],[10,128181,128177],{"id":128182},"_5-html表格列表与表单",[14,128184,128186],{"id":128185},"_51-表格标签","5.1 表格标签",[19,128188,128189],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128191,128192],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128194,128195],{},"②表格基本语法：",[3699,128197],{"style":128160,"src":128198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128200,128201],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3699,128203],{"style":128160,"src":128204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128206,128207],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3699,128209],{"style":128160,"src":128210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128212,128213],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128215,128216,128219,128220,128222,128223,128226,128227,128229,128230,128233],{},[59,128217,128218],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[59,128221,128218],{},"内部必须拥有",[59,128224,128225],{},"\u003Ctr>","标签，一般位于第一行，",[59,128228,128218],{},"比",[59,128231,128232],{},"\u003Cth>","范围广",[19,128235,128236,128239],{},[59,128237,128238],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128241,128243],{"id":128242},"_52-合并单元格","5.2 合并单元格",[19,128245,128246],{},"（1）合并单元格方式：",[19,128248,128249],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128251,128252],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128254,128255],{},"（2）目标单元格：",[19,128257,128258],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128260,128261],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128263,128265],{"id":128264},"_53-列表标签","5.3 列表标签",[19,128267,128268],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128270,128271],{},"①无序列表：",[3699,128273],{"style":128160,"src":128274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128276,128277],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128279,128280,128283,128284,128287,128288,128290],{},[59,128281,128282],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[59,128285,128286],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[59,128289,128282],{},"中输入其他标签或文字是不对的",[19,128292,128293,128295],{},[59,128294,128286],{},"之间相当于一个容器，可以容纳所有元素",[19,128297,128298],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,128300,128301],{},"在css中去除前边的小圆点采用如下代码:",[51,128303,128307],{"className":128304,"code":128305,"language":128306,"meta":57,"style":57},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[59,128308,128309],{"__ignoreMap":57},[79,128310,128311,128314],{"class":81,"line":82},[79,128312,128313],{"class":395},"list-style",[79,128315,128316],{"class":239},": none;\n",[19,128318,128319],{},"②有序列表：",[3699,128321],{"style":128160,"src":128322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128324,128325],{},"③自定义列表：",[3699,128327],{"style":128160,"src":128328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3699,128330],{"style":128160,"src":128331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128333,128335],{"id":128334},"_54-表单标签","5.4 表单标签",[19,128337,128338],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128340,128341,128342,128345],{},"（1）表单域：包含单元素的区域，",[59,128343,128344],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3699,128347],{"style":128160,"src":128348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128350,128351],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128353,128354],{},"表单元素提交必须有name属性",[19,128356,128357],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128359,128360],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128362,79334,128363,128366],{},[59,128364,128365],{},"\u003Cinput>","输入表单元素",[3699,128368],{"style":128160,"src":128369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3699,128371],{"style":128160,"src":128372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,128374,128375,128376],{},"单选按钮：",[59,128377,128378],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3699,128380],{"style":128160,"src":128381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,128383,128384],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3699,128386],{"style":128160,"src":128387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128389,128390,128393],{},[2528,128391,128392],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128395,128396],{},"②select下拉表单元素：可以节约页面控件",[3699,128398],{"style":128160,"src":128399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128401,128402,15957,128404,128407,128408,128410,128411,128413],{},[2528,128403,2415],{},[59,128405,128406],{},"\u003Cselect>","中至少包含一对",[59,128409,104754],{},"；在",[59,128412,104754],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128415,128416,128417,128420],{},"③",[59,128418,128419],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3699,128422],{"style":128160,"src":128423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128425,128426],{},"3行20列",[14,128428,128430,128431,104733],{"id":128429},"_55-lable标签","5.5 ",[59,128432,128433],{},"\u003Clable>",[19,128435,128436,128437,128439,128440,128442],{},"它不是表单标签，但常常与表单标签搭配使用，",[59,128438,128433],{},"标签用于绑定一个表单标签，当点击",[59,128441,128433],{},"标签内的文本",[19,128444,128445],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3699,128447],{"style":128160,"src":128448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3699,128450],{"style":128160,"src":128451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128453,128455],{"id":128454},"_56-实例","5.6 实例",[3699,128457],{"style":128160,"src":128458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[2287,128460,128461],{},"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":57,"searchDepth":167,"depth":167,"links":128463},[128464,128465,128466,128467,128468,128470],{"id":128185,"depth":167,"text":128186},{"id":128242,"depth":167,"text":128243},{"id":128264,"depth":167,"text":128265},{"id":128334,"depth":167,"text":128335},{"id":128429,"depth":167,"text":128469},"5.5 \u003Clable>标签",{"id":128454,"depth":167,"text":128455},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128177,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128477,"title":128478,"body":128479,"description":25516,"extension":2314,"meta":129028,"navigation":453,"path":129029,"seo":129030,"stem":129031,"__hash__":129032},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128480,"toc":129003},[128481,128484,128488,128491,128494,128498,128501,128504,128507,128510,128513,128516,128519,128523,128526,128530,128533,128536,128539,128543,128546,128549,128552,128558,128561,128564,128567,128570,128573,128576,128579,128612,128616,128619,128622,128625,128629,128632,128635,128638,128641,128644,128648,128651,128654,128657,128661,128664,128668,128671,128675,128678,128683,128687,128690,128694,128697,128700,128703,128706,128733,128736,128740,128743,128746,128751,128754,128757,128761,128764,128769,128772,128775,128778,128782,128785,128788,128791,128795,128798,128801,128804,128808,128812,128815,128855,128858,128862,128869,128872,128876,128879,128925,128929,128932,128935,128938,128966,128970,128973,129000],[10,128482,128478],{"id":128483},"_6-css语法与文本样式",[14,128485,128487],{"id":128486},"_61-css语法规范","6.1 css语法规范",[19,128489,128490],{},"由两部分组成，选择器及一条或多条声明",[3699,128492],{"style":128160,"src":128493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128495,128496],{},[2528,128497,2415],{},[19,128499,128500],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128502,128503],{},"②属性与属性值以“键值对”的形式出现",[19,128505,128506],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128508,128509],{},"④属性和属性值之间用英文“;”分开",[3699,128511],{"style":128160,"src":128512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3699,128514],{"style":128160,"src":128515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3699,128517],{"style":128160,"src":128518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128520,128522],{"id":128521},"_62-css选择器","6.2 css选择器",[19,128524,128525],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[265,128527,128529],{"id":128528},"_621-标签选择器","6.2.1 标签选择器",[19,128531,128532],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128534,128535],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3699,128537],{"style":128160,"src":128538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[265,128540,128542],{"id":128541},"_622-类选择器","6.2.2 类选择器",[19,128544,128545],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128547,128548],{},"②样例",[3699,128550],{"style":128160,"src":128551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128553,128554,128555,128557],{},"③ ",[2528,128556,128392],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128559,128560],{},"可以理解为给这个标签起了个名字，来表示；",[19,128562,128563],{},"长名称或词组可以使用横线来为选择器命名；",[19,128565,128566],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128568,128569],{},"命名要有意义；",[3699,128571],{"style":128160,"src":128572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128574,128575],{},"类选择器也可以指定特殊的元素p.center{}",[19,128577,128578],{},"p.center和.center都对",[51,128580,128582],{"className":128304,"code":128581,"language":128306,"meta":57,"style":57},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[59,128583,128584,128589,128598,128608],{"__ignoreMap":57},[79,128585,128586],{"class":81,"line":82},[79,128587,128588],{"class":2440},"\u002F* 类选择器指定特殊元素 *\u002F\n",[79,128590,128591,128593,128596],{"class":81,"line":167},[79,128592,19],{"class":395},[79,128594,128595],{"class":85},".center",[79,128597,17732],{"class":239},[79,128599,128600,128602,128604,128606],{"class":81,"line":178},[79,128601,72634],{"class":96},[79,128603,53550],{"class":239},[79,128605,53705],{"class":96},[79,128607,3531],{"class":239},[79,128609,128610],{"class":81,"line":457},[79,128611,3801],{"class":239},[265,128613,128615],{"id":128614},"_623-多类名使用","6.2.3 多类名使用",[19,128617,128618],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3699,128620],{"style":128160,"src":128621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128623,128624],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[265,128626,128628],{"id":128627},"_624-id选择器","6.2.4 id选择器",[19,128630,128631],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128633,128634],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3699,128636],{"style":128160,"src":128637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128639,128640],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128642,128643],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[265,128645,128647],{"id":128646},"_625-通配符选择器","6.2.5 通配符选择器",[19,128649,128650],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128652,128653],{},"* {",[19,128655,128656],{},"color=\"red\"}",[265,128658,128660],{"id":128659},"_626-总结","6.2.6 总结",[3699,128662],{"style":128160,"src":128663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128665,128667],{"id":128666},"_63-css字体属性","6.3 css字体属性",[19,128669,128670],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[265,128672,128674],{"id":128673},"_631-字体系列","6.3.1 字体系列",[19,128676,128677],{},"font-family: '宋体';",[19,128679,128680,128682],{},[2528,128681,2415],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[265,128684,128686],{"id":128685},"_632-字体大小","6.3.2 字体大小",[19,128688,128689],{},"font-size: 20px",[19,128691,128692,28605],{},[2528,128693,128392],{},[19,128695,128696],{},"①px（像素）大小是网页的最常用单位",[19,128698,128699],{},"②谷歌浏览器默认为16px",[19,128701,128702],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128704,128705],{},"④可以给body指定整个页面的大小：会自动引用",[51,128707,128709],{"className":128304,"code":128708,"language":128306,"meta":57,"style":57},"body {\n  font-size: 16px;\n}\n",[59,128710,128711,128717,128729],{"__ignoreMap":57},[79,128712,128713,128715],{"class":81,"line":82},[79,128714,53913],{"class":395},[79,128716,17732],{"class":239},[79,128718,128719,128721,128723,128725,128727],{"class":81,"line":167},[79,128720,72734],{"class":96},[79,128722,53550],{"class":239},[79,128724,2974],{"class":96},[79,128726,53605],{"class":243},[79,128728,3531],{"class":239},[79,128730,128731],{"class":81,"line":178},[79,128732,3801],{"class":239},[19,128734,128735],{},"⑤标题标签比较特殊，需要单独指定大小",[265,128737,128739],{"id":128738},"_633-字体粗细","6.3.3 字体粗细",[19,128741,128742],{},"font-weight: bold;",[19,128744,128745],{},"font-weight: 100；",[19,128747,128748,128750],{},[2528,128749,2415],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128752,128753],{},"font-weight= 400;",[19,128755,128756],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[265,128758,128760],{"id":128759},"_634-文字样式","6.3.4 文字样式",[19,128762,128763],{},"font-style: normal；",[19,128765,128766,28605],{},[2528,128767,128768],{},"属性值",[19,128770,128771],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128773,128774],{},"②italic：浏览器会显示斜体的字体样式",[3699,128776],{"style":128160,"src":128777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[265,128779,128781],{"id":128780},"_635-字体符合属性","6.3.5 字体符合属性",[3699,128783],{"style":128160,"src":128784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3699,128786],{"style":128160,"src":128787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128789,128790],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128792,128793,28605],{},[2528,128794,128392],{},[19,128796,128797],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128799,128800],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128802,128803],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128805,128807],{"id":128806},"_64-css-test文本属性","6.4 css test文本属性",[265,128809,128811],{"id":128810},"_641-文本颜色","6.4.1 文本颜色",[19,128813,128814],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[51,128816,128818],{"className":128304,"code":128817,"language":128306,"meta":57,"style":57},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[59,128819,128820,128825,128831,128841,128846,128851],{"__ignoreMap":57},[79,128821,128822],{"class":81,"line":82},[79,128823,128824],{"class":2440},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[79,128826,128827,128829],{"class":81,"line":167},[79,128828,19],{"class":395},[79,128830,17732],{"class":239},[79,128832,128833,128835,128837,128839],{"class":81,"line":178},[79,128834,73013],{"class":96},[79,128836,53550],{"class":239},[79,128838,59531],{"class":96},[79,128840,3531],{"class":239},[79,128842,128843],{"class":81,"line":457},[79,128844,128845],{"class":2440},"  \u002F* color: #ff0000; *\u002F\n",[79,128847,128848],{"class":81,"line":462},[79,128849,128850],{"class":2440},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[79,128852,128853],{"class":81,"line":474},[79,128854,3801],{"class":239},[3699,128856],{"style":128160,"src":128857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[265,128859,128861],{"id":128860},"_642-对齐文本","6.4.2 对齐文本",[19,128863,128864,128865,128868],{},"text-align属于用于设置元素内文本内容的 ",[2528,128866,128867],{},"水平对齐"," 方式",[19,128870,128871],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[265,128873,128875],{"id":128874},"_643-装饰文本","6.4.3 装饰文本",[19,128877,128878],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[51,128880,128882],{"className":128304,"code":128881,"language":128306,"meta":57,"style":57},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[59,128883,128884,128890,128900,128904,128910,128921],{"__ignoreMap":57},[79,128885,128886,128888],{"class":81,"line":82},[79,128887,2614],{"class":395},[79,128889,17732],{"class":239},[79,128891,128892,128894,128896,128898],{"class":81,"line":167},[79,128893,72610],{"class":96},[79,128895,53550],{"class":239},[79,128897,56847],{"class":96},[79,128899,3531],{"class":239},[79,128901,128902],{"class":81,"line":178},[79,128903,3801],{"class":239},[79,128905,128906,128908],{"class":81,"line":457},[79,128907,19],{"class":395},[79,128909,17732],{"class":239},[79,128911,128912,128914,128916,128919],{"class":81,"line":462},[79,128913,72610],{"class":96},[79,128915,53550],{"class":239},[79,128917,128918],{"class":96},"underline",[79,128920,3531],{"class":239},[79,128922,128923],{"class":81,"line":474},[79,128924,3801],{"class":239},[265,128926,128928],{"id":128927},"_644-文本缩进","6.4.4 文本缩进",[19,128930,128931],{},"实现文本的第一行首行缩进自己指定的距离",[19,128933,128934],{},"20px往右边走；-20px往左边走",[19,128936,128937],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[51,128939,128941],{"className":128304,"code":128940,"language":128306,"meta":57,"style":57},"p {\n  text-indent: 2em;\n}\n",[59,128942,128943,128949,128962],{"__ignoreMap":57},[79,128944,128945,128947],{"class":81,"line":82},[79,128946,19],{"class":395},[79,128948,17732],{"class":239},[79,128950,128951,128954,128956,128958,128960],{"class":81,"line":167},[79,128952,128953],{"class":96},"  text-indent",[79,128955,53550],{"class":239},[79,128957,1049],{"class":96},[79,128959,25693],{"class":243},[79,128961,3531],{"class":239},[79,128963,128964],{"class":81,"line":178},[79,128965,3801],{"class":239},[265,128967,128969],{"id":128968},"_645-行间距","6.4.5 行间距",[19,128971,128972],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[51,128974,128976],{"className":128304,"code":128975,"language":128306,"meta":57,"style":57},"p {\n  line-height: 1.6;\n}\n",[59,128977,128978,128984,128996],{"__ignoreMap":57},[79,128979,128980,128982],{"class":81,"line":82},[79,128981,19],{"class":395},[79,128983,17732],{"class":239},[79,128985,128986,128989,128991,128994],{"class":81,"line":167},[79,128987,128988],{"class":96},"  line-height",[79,128990,53550],{"class":239},[79,128992,128993],{"class":96},"1.6",[79,128995,3531],{"class":239},[79,128997,128998],{"class":81,"line":178},[79,128999,3801],{"class":239},[2287,129001,129002],{},"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":57,"searchDepth":167,"depth":167,"links":129004},[129005,129006,129014,129021],{"id":128486,"depth":167,"text":128487},{"id":128521,"depth":167,"text":128522,"children":129007},[129008,129009,129010,129011,129012,129013],{"id":128528,"depth":178,"text":128529},{"id":128541,"depth":178,"text":128542},{"id":128614,"depth":178,"text":128615},{"id":128627,"depth":178,"text":128628},{"id":128646,"depth":178,"text":128647},{"id":128659,"depth":178,"text":128660},{"id":128666,"depth":167,"text":128667,"children":129015},[129016,129017,129018,129019,129020],{"id":128673,"depth":178,"text":128674},{"id":128685,"depth":178,"text":128686},{"id":128738,"depth":178,"text":128739},{"id":128759,"depth":178,"text":128760},{"id":128780,"depth":178,"text":128781},{"id":128806,"depth":167,"text":128807,"children":129022},[129023,129024,129025,129026,129027],{"id":128810,"depth":178,"text":128811},{"id":128860,"depth":178,"text":128861},{"id":128874,"depth":178,"text":128875},{"id":128927,"depth":178,"text":128928},{"id":128968,"depth":178,"text":128969},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128478,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129034,"title":129035,"body":129036,"description":25516,"extension":2314,"meta":129685,"navigation":453,"path":129686,"seo":129687,"stem":129688,"__hash__":129689},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129037,"toc":129666},[129038,129041,129045,129049,129109,129113,129123,129126,129129,129133,129158,129162,129165,129168,129171,129174,129177,129181,129184,129187,129229,129232,129258,129264,129267,129271,129275,129281,129284,129287,129290,129293,129296,129299,129344,129348,129351,129354,129358,129362,129391,129394,129399,129402,129405,129408,129411,129415,129419,129422,129424,129427,129431,129434,129438,129441,129444,129447,129451,129455,129461,129471,129474,129477,129480,129483,129486,129609,129617,129625,129663],[10,129039,129035],{"id":129040},"_7-css引入方式与选择器进阶",[14,129042,129044],{"id":129043},"_71-css引入方式","7.1 css引入方式",[265,129046,129048],{"id":129047},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[51,129050,129054],{"className":129051,"code":129052,"language":129053,"meta":57,"style":57},"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",[59,129055,129056,129064,129071,129083,129096,129101],{"__ignoreMap":57},[79,129057,129058,129060,129062],{"class":81,"line":82},[79,129059,392],{"class":239},[79,129061,2287],{"class":395},[79,129063,53420],{"class":239},[79,129065,129066,129069],{"class":81,"line":167},[79,129067,129068],{"class":395},"  h1",[79,129070,17732],{"class":239},[79,129072,129073,129076,129078,129081],{"class":81,"line":178},[79,129074,129075],{"class":96},"    color",[79,129077,53550],{"class":239},[79,129079,129080],{"class":96},"blue",[79,129082,3531],{"class":239},[79,129084,129085,129088,129090,129092,129094],{"class":81,"line":457},[79,129086,129087],{"class":96},"    font-size",[79,129089,53550],{"class":239},[79,129091,3173],{"class":96},[79,129093,53605],{"class":243},[79,129095,3531],{"class":239},[79,129097,129098],{"class":81,"line":462},[79,129099,129100],{"class":239},"  }\n",[79,129102,129103,129105,129107],{"class":81,"line":474},[79,129104,53898],{"class":239},[79,129106,2287],{"class":395},[79,129108,53420],{"class":239},[19,129110,129111,28605],{},[2528,129112,128392],{},[19,129114,79334,129115,129118,129119,129122],{},[59,129116,129117],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[59,129120,129121],{},"\u003Chead>","标签中",[19,129124,129125],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129127,129128],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[265,129130,129132],{"id":129131},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[51,129134,129136],{"className":129051,"code":129135,"language":129053,"meta":57,"style":57},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[59,129137,129138],{"__ignoreMap":57},[79,129139,129140,129142,129144,129146,129148,129151,129154,129156],{"class":81,"line":82},[79,129141,392],{"class":239},[79,129143,19],{"class":395},[79,129145,64736],{"class":85},[79,129147,244],{"class":239},[79,129149,129150],{"class":89},"\"color: red; font-size: 16px;\"",[79,129152,129153],{"class":239},">这是一个段落\u003C\u002F",[79,129155,19],{"class":395},[79,129157,53420],{"class":239},[19,129159,129160,28605],{},[2528,129161,128392],{},[19,129163,129164],{},"①style其实就是标签的属性",[19,129166,129167],{},"②在双引号中间，写法要符合css规范",[19,129169,129170],{},"③可以控制当前的标签设置样式",[19,129172,129173],{},"④书写繁琐，简单时才用",[19,129175,129176],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[265,129178,129180],{"id":129179},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129182,129183],{},"使用最多，单独建一个css文件，然后html引用",[19,129185,129186],{},"①css文件部分： style.css",[51,129188,129190],{"className":128304,"code":129189,"language":128306,"meta":57,"style":57},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[59,129191,129192,129197,129203,129213,129225],{"__ignoreMap":57},[79,129193,129194],{"class":81,"line":82},[79,129195,129196],{"class":2440},"\u002F* style.css *\u002F\n",[79,129198,129199,129201],{"class":81,"line":167},[79,129200,10],{"class":395},[79,129202,17732],{"class":239},[79,129204,129205,129207,129209,129211],{"class":81,"line":178},[79,129206,73013],{"class":96},[79,129208,53550],{"class":239},[79,129210,129080],{"class":96},[79,129212,3531],{"class":239},[79,129214,129215,129217,129219,129221,129223],{"class":81,"line":457},[79,129216,72734],{"class":96},[79,129218,53550],{"class":239},[79,129220,3173],{"class":96},[79,129222,53605],{"class":243},[79,129224,3531],{"class":239},[79,129226,129227],{"class":81,"line":462},[79,129228,3801],{"class":239},[19,129230,129231],{},"②html部分",[51,129233,129235],{"className":129051,"code":129234,"language":129053,"meta":57,"style":57},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[59,129236,129237],{"__ignoreMap":57},[79,129238,129239,129241,129243,129245,129247,129249,129251,129253,129256],{"class":81,"line":82},[79,129240,392],{"class":239},[79,129242,71114],{"class":395},[79,129244,71117],{"class":85},[79,129246,244],{"class":239},[79,129248,71122],{"class":89},[79,129250,63167],{"class":85},[79,129252,244],{"class":239},[79,129254,129255],{"class":89},"\"style.css\"",[79,129257,53420],{"class":239},[19,129259,129260,129263],{},[59,129261,129262],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129265,129266],{},"ctrl+0回到页面原来大小",[14,129268,129270],{"id":129269},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[265,129272,129274],{"id":129273},"_721-快速生成html","7.2.1 快速生成html",[19,129276,129277,129278],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[59,129279,129280],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129282,129283],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129285,129286],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129288,129289],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,129291,129292],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,129294,129295],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,129297,129298],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[51,129300,129302],{"className":129051,"code":129301,"language":129053,"meta":57,"style":57},"\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",[59,129303,129304,129309,129314,129319,129324,129329,129334,129339],{"__ignoreMap":57},[79,129305,129306],{"class":81,"line":82},[79,129307,129308],{"class":2440},"\u003C!-- Emmet 语法示例 -->\n",[79,129310,129311],{"class":81,"line":167},[79,129312,129313],{"class":2440},"\u003C!-- div*3        → 生成3个div -->\n",[79,129315,129316],{"class":81,"line":178},[79,129317,129318],{"class":2440},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[79,129320,129321],{"class":81,"line":457},[79,129322,129323],{"class":2440},"\u003C!-- div+p        → 兄弟div和p -->\n",[79,129325,129326],{"class":81,"line":462},[79,129327,129328],{"class":2440},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[79,129330,129331],{"class":81,"line":474},[79,129332,129333],{"class":2440},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[79,129335,129336],{"class":81,"line":480},[79,129337,129338],{"class":2440},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[79,129340,129341],{"class":81,"line":486},[79,129342,129343],{"class":2440},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[265,129345,129347],{"id":129346},"_722-快速生成css","7.2.2 快速生成css",[19,129349,129350],{},"简写开头",[19,129352,129353],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129355,129357],{"id":129356},"_73-css复合选择器","7.3 css复合选择器",[265,129359,129361],{"id":129360},"_731-后代选择器","7.3.1 后代选择器",[51,129363,129365],{"className":128304,"code":129364,"language":128306,"meta":57,"style":57},".parent .child {\n  color: blue;\n}\n",[59,129366,129367,129377,129387],{"__ignoreMap":57},[79,129368,129369,129372,129375],{"class":81,"line":82},[79,129370,129371],{"class":85},".parent",[79,129373,129374],{"class":85}," .child",[79,129376,17732],{"class":239},[79,129378,129379,129381,129383,129385],{"class":81,"line":167},[79,129380,73013],{"class":96},[79,129382,53550],{"class":239},[79,129384,129080],{"class":96},[79,129386,3531],{"class":239},[79,129388,129389],{"class":81,"line":178},[79,129390,3801],{"class":239},[19,129392,129393],{},"元素1 元素2 {样式声明}",[19,129395,129396],{},[2528,129397,129398],{},"注意点:",[19,129400,129401],{},"①元素1和元素2中间用空格隔开",[19,129403,129404],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129406,129407],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129409,129410],{},"④元素1和元素2可以是任意基础选择器",[265,129412,129414],{"id":129413},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129416,129417],{},[2528,129418,129398],{},[19,129420,129421],{},"①元素1和元素2中间用大于号隔开",[19,129423,129404],{},[19,129425,129426],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[265,129428,129430],{"id":129429},"_733-并集选择器","7.3.3 并集选择器",[19,129432,129433],{},"元素1，元素2 {样式声明}",[19,129435,129436],{},[2528,129437,129398],{},[19,129439,129440],{},"①元素1和元素2中间用逗号隔开",[19,129442,129443],{},"②逗号可以理解为和的意思",[19,129445,129446],{},"③并集选择器通常用于集体声明",[265,129448,129450],{"id":129449},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129452,129453],{},[2528,129454,129398],{},[19,129456,129457,129458,129460],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[71114,129459],{},"－:visited－:hover－:active。",[19,129462,129463,129464,129467,129468,27875],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129465,129466],"hover",{}," 、 ",[129469,129470],"first-child",{},[19,129472,129473],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129475,129476],{},"link对没访问的进行设置",[19,129478,129479],{},"vistied对已访问的进行改变",[19,129481,129482],{},"hover鼠标经过就会变",[19,129484,129485],{},"active常按(点)就会变",[51,129487,129489],{"className":128304,"code":129488,"language":128306,"meta":57,"style":57},"\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",[59,129490,129491,129496,129505,129515,129525,129529,129538,129549,129553,129561,129571,129581,129585,129594,129605],{"__ignoreMap":57},[79,129492,129493],{"class":81,"line":82},[79,129494,129495],{"class":2440},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[79,129497,129498,129500,129503],{"class":81,"line":167},[79,129499,2614],{"class":395},[79,129501,129502],{"class":85},":link",[79,129504,17732],{"class":239},[79,129506,129507,129509,129511,129513],{"class":81,"line":178},[79,129508,73013],{"class":96},[79,129510,53550],{"class":239},[79,129512,64479],{"class":96},[79,129514,3531],{"class":239},[79,129516,129517,129519,129521,129523],{"class":81,"line":457},[79,129518,72610],{"class":96},[79,129520,53550],{"class":239},[79,129522,56847],{"class":96},[79,129524,3531],{"class":239},[79,129526,129527],{"class":81,"line":462},[79,129528,3801],{"class":239},[79,129530,129531,129533,129536],{"class":81,"line":474},[79,129532,2614],{"class":395},[79,129534,129535],{"class":85},":visited",[79,129537,17732],{"class":239},[79,129539,129540,129542,129544,129547],{"class":81,"line":480},[79,129541,73013],{"class":96},[79,129543,53550],{"class":239},[79,129545,129546],{"class":96},"purple",[79,129548,3531],{"class":239},[79,129550,129551],{"class":81,"line":486},[79,129552,3801],{"class":239},[79,129554,129555,129557,129559],{"class":81,"line":491},[79,129556,2614],{"class":395},[79,129558,63050],{"class":85},[79,129560,17732],{"class":239},[79,129562,129563,129565,129567,129569],{"class":81,"line":497},[79,129564,73013],{"class":96},[79,129566,53550],{"class":239},[79,129568,56999],{"class":96},[79,129570,3531],{"class":239},[79,129572,129573,129575,129577,129579],{"class":81,"line":503},[79,129574,72610],{"class":96},[79,129576,53550],{"class":239},[79,129578,128918],{"class":96},[79,129580,3531],{"class":239},[79,129582,129583],{"class":81,"line":509},[79,129584,3801],{"class":239},[79,129586,129587,129589,129592],{"class":81,"line":514},[79,129588,2614],{"class":395},[79,129590,129591],{"class":85},":active",[79,129593,17732],{"class":239},[79,129595,129596,129598,129600,129603],{"class":81,"line":520},[79,129597,73013],{"class":96},[79,129599,53550],{"class":239},[79,129601,129602],{"class":96},"green",[79,129604,3531],{"class":239},[79,129606,129607],{"class":81,"line":526},[79,129608,3801],{"class":239},[265,129610,129612,129613,129616],{"id":129611},"_735-伪类选择器","7.3.5 ",[129614,129615],"focus",{},"伪类选择器",[19,129618,129619,129621,129622,129624],{},[129614,129620],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[59,129623,128365],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[51,129626,129628],{"className":128304,"code":129627,"language":128306,"meta":57,"style":57},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[59,129629,129630,129638,129649,129659],{"__ignoreMap":57},[79,129631,129632,129634,129636],{"class":81,"line":82},[79,129633,55931],{"class":395},[79,129635,64010],{"class":85},[79,129637,17732],{"class":239},[79,129639,129640,129643,129645,129647],{"class":81,"line":167},[79,129641,129642],{"class":96},"  border-color",[79,129644,53550],{"class":239},[79,129646,56999],{"class":96},[79,129648,3531],{"class":239},[79,129650,129651,129653,129655,129657],{"class":81,"line":178},[79,129652,72906],{"class":96},[79,129654,53550],{"class":239},[79,129656,56847],{"class":96},[79,129658,3531],{"class":239},[79,129660,129661],{"class":81,"line":457},[79,129662,3801],{"class":239},[2287,129664,129665],{},"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":57,"searchDepth":167,"depth":167,"links":129667},[129668,129673,129677],{"id":129043,"depth":167,"text":129044,"children":129669},[129670,129671,129672],{"id":129047,"depth":178,"text":129048},{"id":129131,"depth":178,"text":129132},{"id":129179,"depth":178,"text":129180},{"id":129269,"depth":167,"text":129270,"children":129674},[129675,129676],{"id":129273,"depth":178,"text":129274},{"id":129346,"depth":178,"text":129347},{"id":129356,"depth":167,"text":129357,"children":129678},[129679,129680,129681,129682,129683],{"id":129360,"depth":178,"text":129361},{"id":129413,"depth":178,"text":129414},{"id":129429,"depth":178,"text":129430},{"id":129449,"depth":178,"text":129450},{"id":129611,"depth":178,"text":129684},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129035,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129691,"title":129692,"body":129693,"description":25516,"extension":2314,"meta":131616,"navigation":453,"path":131617,"seo":131618,"stem":131619,"__hash__":131620},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129694,"toc":131590},[129695,129698,129702,129711,129715,129741,129746,129749,129752,129755,129758,129762,129765,129775,129783,129787,129822,129827,129830,129833,129836,129839,129843,129846,129855,129859,129872,129877,129880,129883,129886,129890,129893,129897,129900,129955,129958,129989,129992,130046,130050,130053,130219,130342,130345,130348,130351,130354,130358,130361,130365,130368,130371,130375,130378,130409,130436,130464,130467,130471,130497,130540,130544,130638,130641,130668,130671,130674,130677,130680,130683,130686,130689,130692,130695,130699,130756,130783,130787,130835,130839,130880,130882,130885,130888,130891,130894,130898,130990,130993,130996,130999,131003,131126,131327,131331,131335,131338,131341,131344,131348,131351,131354,131379,131382,131385,131388,131391,131394,131398,131406,131468,131471,131529,131532,131535,131538,131541,131544,131547,131550,131587],[10,129696,129692],{"id":129697},"_8-css显示模式与背景特性",[14,129699,129701],{"id":129700},"_81-css元素显示模式","8.1 css元素显示模式",[19,129703,129704,129705,129707,129708,129710],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[59,129706,127915],{},"自己占一行，比如一行可以放多个",[59,129709,127918],{},"，HTML 元素一般分为块元素和行内元素两种类型",[265,129712,129714],{"id":129713},"_811-块元素","8.1.1 块元素",[19,129716,129717,129718,129720,129721,204,129724,204,129726,204,129728,204,129731,204,129734,129737,129738,129740],{},"常见的块元素有",[59,129719,127819],{},"~",[59,129722,129723],{},"\u003Ch6>",[59,129725,127845],{},[59,129727,127915],{},[59,129729,129730],{},"\u003Cul>",[59,129732,129733],{},"\u003Col>",[59,129735,129736],{},"\u003Cli>","等，其中 ",[59,129739,127915],{}," 标签是最典型的块元素",[19,129742,129743],{},[2528,129744,129745],{},"块级元素的特点：",[19,129747,129748],{},"① 比较霸道，自己独占一行。",[19,129750,129751],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129753,129754],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129756,129757],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129759,129760],{},[2528,129761,2415],{},[19,129763,129764],{},"①文字类的元素内不能使用块级元素",[19,129766,79357,129767,129769,129770,129772,129773],{},[59,129768,127845],{}," 标签主要用于存放文字，因此 ",[59,129771,127845],{}," 里面不能放块级元素，特别是不能放",[59,129774,127915],{},[19,129776,129777,129778,129720,129780,129782],{},"⑥同理， ",[59,129779,127819],{},[59,129781,129723],{},"等都是文字类块级标签，里面也不能放其他块级元素",[265,129784,129786],{"id":129785},"_812-行内元素","8.1.2 行内元素",[19,129788,129789,129790,204,129792,204,129795,204,129798,204,129801,204,129804,204,129807,204,129810,204,129813,204,129816,129818,129819,129821],{},"常见的行内元素有 ",[59,129791,128077],{},[59,129793,129794],{},"\u003Cstrong>",[59,129796,129797],{},"\u003Cb>",[59,129799,129800],{},"\u003Cem>",[59,129802,129803],{},"\u003Ci>",[59,129805,129806],{},"\u003Cdel>",[59,129808,129809],{},"\u003Cs>",[59,129811,129812],{},"\u003Cins>",[59,129814,129815],{},"\u003Cu>",[59,129817,127918],{}," 等，其中 ",[59,129820,127918],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129823,129824],{},[2528,129825,129826],{},"特点：",[19,129828,129829],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129831,129832],{},"② 高、宽直接设置是无效的。",[19,129834,129835],{},"③ 默认宽度就是它本身内容的宽度。",[19,129837,129838],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129840,129841],{},[2528,129842,2415],{},[19,129844,129845],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129847,129848,129849,129851,129852,129854],{},"②特殊情况链接 ",[59,129850,128077],{}," 里面可以放块级元素，但是给 ",[59,129853,128077],{}," 转换一下块级模式最安全",[265,129856,129858],{"id":129857},"_813-行内块元素","8.1.3 行内块元素",[19,129860,129861,129862,204,129865,204,129868,129871],{},"在行内元素中有几个特殊的标签 —— ",[59,129863,129864],{},"\u003Cimg \u002F>",[59,129866,129867],{},"\u003Cinput \u002F>",[59,129869,129870],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129873,129874],{},[2528,129875,129876],{},"行内块元素的特点：",[19,129878,129879],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129881,129882],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129884,129885],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[265,129887,129889],{"id":129888},"_814-总结","8.1.4 总结",[3699,129891],{"style":128160,"src":129892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[265,129894,129896],{"id":129895},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129898,129899],{},"①转换为块元素：display:block;",[51,129901,129903],{"className":128304,"code":129902,"language":128306,"meta":57,"style":57},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[59,129904,129905,129910,129916,129927,129939,129951],{"__ignoreMap":57},[79,129906,129907],{"class":81,"line":82},[79,129908,129909],{"class":2440},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[79,129911,129912,129914],{"class":81,"line":167},[79,129913,2614],{"class":395},[79,129915,17732],{"class":239},[79,129917,129918,129921,129923,129925],{"class":81,"line":178},[79,129919,129920],{"class":96},"  display",[79,129922,53550],{"class":239},[79,129924,62979],{"class":96},[79,129926,3531],{"class":239},[79,129928,129929,129931,129933,129935,129937],{"class":81,"line":457},[79,129930,72676],{"class":96},[79,129932,53550],{"class":239},[79,129934,2686],{"class":96},[79,129936,53605],{"class":243},[79,129938,3531],{"class":239},[79,129940,129941,129943,129945,129947,129949],{"class":81,"line":462},[79,129942,72896],{"class":96},[79,129944,53550],{"class":239},[79,129946,2775],{"class":96},[79,129948,53605],{"class":243},[79,129950,3531],{"class":239},[79,129952,129953],{"class":81,"line":474},[79,129954,3801],{"class":239},[19,129956,129957],{},"②转换为行内元素：display:inline;",[51,129959,129961],{"className":128304,"code":129960,"language":128306,"meta":57,"style":57},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[59,129962,129963,129968,129974,129985],{"__ignoreMap":57},[79,129964,129965],{"class":81,"line":82},[79,129966,129967],{"class":2440},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[79,129969,129970,129972],{"class":81,"line":167},[79,129971,53724],{"class":395},[79,129973,17732],{"class":239},[79,129975,129976,129978,129980,129983],{"class":81,"line":178},[79,129977,129920],{"class":96},[79,129979,53550],{"class":239},[79,129981,129982],{"class":96},"inline",[79,129984,3531],{"class":239},[79,129986,129987],{"class":81,"line":457},[79,129988,3801],{"class":239},[19,129990,129991],{},"③转换为行内块：display:inline-block;",[51,129993,129995],{"className":128304,"code":129994,"language":128306,"meta":57,"style":57},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[59,129996,129997,130002,130008,130018,130030,130042],{"__ignoreMap":57},[79,129998,129999],{"class":81,"line":82},[79,130000,130001],{"class":2440},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[79,130003,130004,130006],{"class":81,"line":167},[79,130005,79],{"class":395},[79,130007,17732],{"class":239},[79,130009,130010,130012,130014,130016],{"class":81,"line":178},[79,130011,129920],{"class":96},[79,130013,53550],{"class":239},[79,130015,74491],{"class":96},[79,130017,3531],{"class":239},[79,130019,130020,130022,130024,130026,130028],{"class":81,"line":457},[79,130021,72676],{"class":96},[79,130023,53550],{"class":239},[79,130025,2985],{"class":96},[79,130027,53605],{"class":243},[79,130029,3531],{"class":239},[79,130031,130032,130034,130036,130038,130040],{"class":81,"line":462},[79,130033,72896],{"class":96},[79,130035,53550],{"class":239},[79,130037,3321],{"class":96},[79,130039,53605],{"class":243},[79,130041,3531],{"class":239},[79,130043,130044],{"class":81,"line":474},[79,130045,3801],{"class":239},[265,130047,130049],{"id":130048},"_816-小米侧边栏","8.1.6 小米侧边栏",[3699,130051],{"style":128160,"src":130052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[51,130054,130056],{"className":129051,"code":130055,"language":129053,"meta":57,"style":57},"\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",[59,130057,130058,130063,130078,130097,130116,130135,130154,130173,130192,130211],{"__ignoreMap":57},[79,130059,130060],{"class":81,"line":82},[79,130061,130062],{"class":2440},"\u003C!-- 小米侧边栏案例 -->\n",[79,130064,130065,130067,130069,130071,130073,130076],{"class":81,"line":167},[79,130066,392],{"class":239},[79,130068,53724],{"class":395},[79,130070,55596],{"class":85},[79,130072,244],{"class":239},[79,130074,130075],{"class":89},"\"sidebar\"",[79,130077,53420],{"class":239},[79,130079,130080,130082,130084,130086,130088,130090,130093,130095],{"class":81,"line":178},[79,130081,54257],{"class":239},[79,130083,2614],{"class":395},[79,130085,63167],{"class":85},[79,130087,244],{"class":239},[79,130089,63172],{"class":89},[79,130091,130092],{"class":239},">手机 电话卡\u003C\u002F",[79,130094,2614],{"class":395},[79,130096,53420],{"class":239},[79,130098,130099,130101,130103,130105,130107,130109,130112,130114],{"class":81,"line":457},[79,130100,54257],{"class":239},[79,130102,2614],{"class":395},[79,130104,63167],{"class":85},[79,130106,244],{"class":239},[79,130108,63172],{"class":89},[79,130110,130111],{"class":239},">电视 盒子\u003C\u002F",[79,130113,2614],{"class":395},[79,130115,53420],{"class":239},[79,130117,130118,130120,130122,130124,130126,130128,130131,130133],{"class":81,"line":462},[79,130119,54257],{"class":239},[79,130121,2614],{"class":395},[79,130123,63167],{"class":85},[79,130125,244],{"class":239},[79,130127,63172],{"class":89},[79,130129,130130],{"class":239},">笔记本 平板\u003C\u002F",[79,130132,2614],{"class":395},[79,130134,53420],{"class":239},[79,130136,130137,130139,130141,130143,130145,130147,130150,130152],{"class":81,"line":474},[79,130138,54257],{"class":239},[79,130140,2614],{"class":395},[79,130142,63167],{"class":85},[79,130144,244],{"class":239},[79,130146,63172],{"class":89},[79,130148,130149],{"class":239},">出行 穿戴\u003C\u002F",[79,130151,2614],{"class":395},[79,130153,53420],{"class":239},[79,130155,130156,130158,130160,130162,130164,130166,130169,130171],{"class":81,"line":480},[79,130157,54257],{"class":239},[79,130159,2614],{"class":395},[79,130161,63167],{"class":85},[79,130163,244],{"class":239},[79,130165,63172],{"class":89},[79,130167,130168],{"class":239},">智能 路由器\u003C\u002F",[79,130170,2614],{"class":395},[79,130172,53420],{"class":239},[79,130174,130175,130177,130179,130181,130183,130185,130188,130190],{"class":81,"line":486},[79,130176,54257],{"class":239},[79,130178,2614],{"class":395},[79,130180,63167],{"class":85},[79,130182,244],{"class":239},[79,130184,63172],{"class":89},[79,130186,130187],{"class":239},">健康 儿童\u003C\u002F",[79,130189,2614],{"class":395},[79,130191,53420],{"class":239},[79,130193,130194,130196,130198,130200,130202,130204,130207,130209],{"class":81,"line":491},[79,130195,54257],{"class":239},[79,130197,2614],{"class":395},[79,130199,63167],{"class":85},[79,130201,244],{"class":239},[79,130203,63172],{"class":89},[79,130205,130206],{"class":239},">耳机 音响\u003C\u002F",[79,130208,2614],{"class":395},[79,130210,53420],{"class":239},[79,130212,130213,130215,130217],{"class":81,"line":497},[79,130214,53898],{"class":239},[79,130216,53724],{"class":395},[79,130218,53420],{"class":239},[51,130220,130222],{"className":128304,"code":130221,"language":128306,"meta":57,"style":57},".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",[59,130223,130224,130233,130243,130256,130268,130280,130292,130302,130313,130317,130327,130338],{"__ignoreMap":57},[79,130225,130226,130229,130231],{"class":81,"line":82},[79,130227,130228],{"class":85},".sidebar",[79,130230,3635],{"class":395},[79,130232,17732],{"class":239},[79,130234,130235,130237,130239,130241],{"class":81,"line":167},[79,130236,129920],{"class":96},[79,130238,53550],{"class":239},[79,130240,62979],{"class":96},[79,130242,3531],{"class":239},[79,130244,130245,130247,130249,130252,130254],{"class":81,"line":178},[79,130246,72676],{"class":96},[79,130248,53550],{"class":239},[79,130250,130251],{"class":96},"234",[79,130253,53605],{"class":243},[79,130255,3531],{"class":239},[79,130257,130258,130260,130262,130264,130266],{"class":81,"line":457},[79,130259,72896],{"class":96},[79,130261,53550],{"class":239},[79,130263,2826],{"class":96},[79,130265,53605],{"class":243},[79,130267,3531],{"class":239},[79,130269,130270,130272,130274,130276,130278],{"class":81,"line":462},[79,130271,128988],{"class":96},[79,130273,53550],{"class":239},[79,130275,2826],{"class":96},[79,130277,53605],{"class":243},[79,130279,3531],{"class":239},[79,130281,130282,130284,130286,130288,130290],{"class":81,"line":474},[79,130283,72931],{"class":96},[79,130285,53550],{"class":239},[79,130287,3321],{"class":96},[79,130289,53605],{"class":243},[79,130291,3531],{"class":239},[79,130293,130294,130296,130298,130300],{"class":81,"line":480},[79,130295,73013],{"class":96},[79,130297,53550],{"class":239},[79,130299,62952],{"class":96},[79,130301,3531],{"class":239},[79,130303,130304,130306,130308,130311],{"class":81,"line":486},[79,130305,72986],{"class":96},[79,130307,53550],{"class":239},[79,130309,130310],{"class":96},"#55585a",[79,130312,3531],{"class":239},[79,130314,130315],{"class":81,"line":491},[79,130316,3801],{"class":239},[79,130318,130319,130321,130323,130325],{"class":81,"line":497},[79,130320,130228],{"class":85},[79,130322,3635],{"class":395},[79,130324,63050],{"class":85},[79,130326,17732],{"class":239},[79,130328,130329,130331,130333,130336],{"class":81,"line":503},[79,130330,72986],{"class":96},[79,130332,53550],{"class":239},[79,130334,130335],{"class":96},"#ff6700",[79,130337,3531],{"class":239},[79,130339,130340],{"class":81,"line":509},[79,130341,3801],{"class":239},[3699,130343],{"style":128160,"src":130344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,130346,130347],{},"行高=盒子高度：实现文字的垂直居中",[19,130349,130350],{},"原理讲解：",[3699,130352],{"style":128160,"src":130353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130355,130357],{"id":130356},"_82-css背景","8.2 css背景",[19,130359,130360],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[265,130362,130364],{"id":130363},"_821-背景颜色","8.2.1 背景颜色",[19,130366,130367],{},"background-color:颜色值;",[19,130369,130370],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[265,130372,130374],{"id":130373},"_822-背景图片","8.2.2 背景图片",[19,130376,130377],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[51,130379,130381],{"className":128304,"code":130380,"language":128306,"meta":57,"style":57},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[59,130382,130383,130389,130405],{"__ignoreMap":57},[79,130384,130385,130387],{"class":81,"line":82},[79,130386,53724],{"class":395},[79,130388,17732],{"class":239},[79,130390,130391,130394,130396,130398,130400,130403],{"class":81,"line":167},[79,130392,130393],{"class":96},"  background-image",[79,130395,53550],{"class":239},[79,130397,63836],{"class":96},[79,130399,685],{"class":239},[79,130401,130402],{"class":7412},"images\u002Fbg.png",[79,130404,4925],{"class":239},[79,130406,130407],{"class":81,"line":178},[79,130408,3801],{"class":239},[2516,130410,130411,130420],{},[2519,130412,130413],{},[2522,130414,130415,130418],{},[2525,130416,130417],{"align":25876},"参数值",[2525,130419,104736],{"align":25876},[2563,130421,130422,130429],{},[2522,130423,130424,130426],{},[2568,130425,56847],{"align":25876},[2568,130427,130428],{"align":25876},"无背景图（默认的）",[2522,130430,130431,130433],{},[2568,130432,63836],{"align":25876},[2568,130434,130435],{"align":25876},"使用绝对或相对地址指定背景图像",[51,130437,130438],{"className":128304,"code":130380,"language":128306,"meta":57,"style":57},[59,130439,130440,130446,130460],{"__ignoreMap":57},[79,130441,130442,130444],{"class":81,"line":82},[79,130443,53724],{"class":395},[79,130445,17732],{"class":239},[79,130447,130448,130450,130452,130454,130456,130458],{"class":81,"line":167},[79,130449,130393],{"class":96},[79,130451,53550],{"class":239},[79,130453,63836],{"class":96},[79,130455,685],{"class":239},[79,130457,130402],{"class":7412},[79,130459,4925],{"class":239},[79,130461,130462],{"class":81,"line":178},[79,130463,3801],{"class":239},[19,130465,130466],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[265,130468,130470],{"id":130469},"_823-背景平铺","8.2.3 背景平铺",[51,130472,130474],{"className":128304,"code":130473,"language":128306,"meta":57,"style":57},"div {\n  background-repeat: no-repeat;\n}\n",[59,130475,130476,130482,130493],{"__ignoreMap":57},[79,130477,130478,130480],{"class":81,"line":82},[79,130479,53724],{"class":395},[79,130481,17732],{"class":239},[79,130483,130484,130487,130489,130491],{"class":81,"line":167},[79,130485,130486],{"class":96},"  background-repeat",[79,130488,53550],{"class":239},[79,130490,63846],{"class":96},[79,130492,3531],{"class":239},[79,130494,130495],{"class":81,"line":178},[79,130496,3801],{"class":239},[2516,130498,130499,130507],{},[2519,130500,130501],{},[2522,130502,130503,130505],{},[2525,130504,130417],{"align":25876},[2525,130506,104736],{"align":25876},[2563,130508,130509,130517,130524,130532],{},[2522,130510,130511,130514],{},[2568,130512,130513],{"align":25876},"repeat",[2568,130515,130516],{"align":25876},"背景图像在纵向和横向上平铺（默认的）",[2522,130518,130519,130521],{},[2568,130520,63846],{"align":25876},[2568,130522,130523],{"align":25876},"背景图像不平铺",[2522,130525,130526,130529],{},[2568,130527,130528],{"align":25876},"repeat-x",[2568,130530,130531],{"align":25876},"背景图像在横向上平铺",[2522,130533,130534,130537],{},[2568,130535,130536],{"align":25876},"repeat-y",[2568,130538,130539],{"align":25876},"背景图像在纵向平铺",[265,130541,130543],{"id":130542},"_824-背景图片位置","8.2.4 背景图片位置",[51,130545,130547],{"className":128304,"code":130546,"language":128306,"meta":57,"style":57},"\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",[59,130548,130549,130554,130560,130574,130578,130583,130589,130605,130609,130614,130620,130634],{"__ignoreMap":57},[79,130550,130551],{"class":81,"line":82},[79,130552,130553],{"class":2440},"\u002F* 方位名词 *\u002F\n",[79,130555,130556,130558],{"class":81,"line":167},[79,130557,53724],{"class":395},[79,130559,17732],{"class":239},[79,130561,130562,130565,130567,130569,130572],{"class":81,"line":178},[79,130563,130564],{"class":96},"  background-position",[79,130566,53550],{"class":239},[79,130568,53705],{"class":96},[79,130570,130571],{"class":96}," top",[79,130573,3531],{"class":239},[79,130575,130576],{"class":81,"line":457},[79,130577,3801],{"class":239},[79,130579,130580],{"class":81,"line":462},[79,130581,130582],{"class":2440},"\u002F* 精确单位 *\u002F\n",[79,130584,130585,130587],{"class":81,"line":474},[79,130586,53724],{"class":395},[79,130588,17732],{"class":239},[79,130590,130591,130593,130595,130597,130599,130601,130603],{"class":81,"line":480},[79,130592,130564],{"class":96},[79,130594,53550],{"class":239},[79,130596,3073],{"class":96},[79,130598,53605],{"class":243},[79,130600,59614],{"class":96},[79,130602,53605],{"class":243},[79,130604,3531],{"class":239},[79,130606,130607],{"class":81,"line":486},[79,130608,3801],{"class":239},[79,130610,130611],{"class":81,"line":491},[79,130612,130613],{"class":2440},"\u002F* 混合单位 *\u002F\n",[79,130615,130616,130618],{"class":81,"line":497},[79,130617,53724],{"class":395},[79,130619,17732],{"class":239},[79,130621,130622,130624,130626,130628,130630,130632],{"class":81,"line":503},[79,130623,130564],{"class":96},[79,130625,53550],{"class":239},[79,130627,3073],{"class":96},[79,130629,53605],{"class":243},[79,130631,19283],{"class":96},[79,130633,3531],{"class":239},[79,130635,130636],{"class":81,"line":509},[79,130637,3801],{"class":239},[19,130639,130640],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[2516,130642,130643,130651],{},[2519,130644,130645],{},[2522,130646,130647,130649],{},[2525,130648,130417],{"align":25876},[2525,130650,28004],{"align":25876},[2563,130652,130653,130660],{},[2522,130654,130655,130657],{},[2568,130656,54081],{"align":25876},[2568,130658,130659],{"align":25876},"百分数|由浮点数和单位标识符组成的长度值",[2522,130661,130662,130665],{},[2568,130663,130664],{"align":25876},"position",[2568,130666,130667],{"align":25876},"top|center|bottom|left|center|right 方位名词",[19,130669,130670],{},"其他说明：",[19,130672,130673],{},"①参数是方位名词",[19,130675,130676],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130678,130679],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130681,130682],{},"②参数是精确单位",[19,130684,130685],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130687,130688],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130690,130691],{},"③参数是混合单位",[19,130693,130694],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[265,130696,130698],{"id":130697},"_825-背景图片固定","8.2.5 背景图片固定",[51,130700,130702],{"className":128304,"code":130701,"language":128306,"meta":57,"style":57},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[59,130703,130704,130709,130715,130727,130731,130736,130742,130752],{"__ignoreMap":57},[79,130705,130706],{"class":81,"line":82},[79,130707,130708],{"class":2440},"\u002F* 背景滚动（默认） *\u002F\n",[79,130710,130711,130713],{"class":81,"line":167},[79,130712,53724],{"class":395},[79,130714,17732],{"class":239},[79,130716,130717,130720,130722,130725],{"class":81,"line":178},[79,130718,130719],{"class":96},"  background-attachment",[79,130721,53550],{"class":239},[79,130723,130724],{"class":96},"scroll",[79,130726,3531],{"class":239},[79,130728,130729],{"class":81,"line":457},[79,130730,3801],{"class":239},[79,130732,130733],{"class":81,"line":462},[79,130734,130735],{"class":2440},"\u002F* 背景固定 *\u002F\n",[79,130737,130738,130740],{"class":81,"line":474},[79,130739,53724],{"class":395},[79,130741,17732],{"class":239},[79,130743,130744,130746,130748,130750],{"class":81,"line":480},[79,130745,130719],{"class":96},[79,130747,53550],{"class":239},[79,130749,88338],{"class":96},[79,130751,3531],{"class":239},[79,130753,130754],{"class":81,"line":486},[79,130755,3801],{"class":239},[2516,130757,130758,130767],{},[2519,130759,130760],{},[2522,130761,130762,130765],{},[2525,130763,130764],{"align":25876},"参数",[2525,130766,104736],{"align":25876},[2563,130768,130769,130776],{},[2522,130770,130771,130773],{},[2568,130772,130724],{"align":25876},[2568,130774,130775],{"align":25876},"背景图像是随对象内容滚动",[2522,130777,130778,130780],{},[2568,130779,88338],{"align":25876},[2568,130781,130782],{"align":25876},"背景图像固定",[265,130784,130786],{"id":130785},"_826-背景样式合写","8.2.6 背景样式合写",[51,130788,130790],{"className":128304,"code":130789,"language":128306,"meta":57,"style":57},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[59,130791,130792,130797,130803,130831],{"__ignoreMap":57},[79,130793,130794],{"class":81,"line":82},[79,130795,130796],{"class":2440},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[79,130798,130799,130801],{"class":81,"line":167},[79,130800,53724],{"class":395},[79,130802,17732],{"class":239},[79,130804,130805,130807,130809,130811,130814,130816,130818,130820,130822,130825,130827,130829],{"class":81,"line":178},[79,130806,72719],{"class":96},[79,130808,53550],{"class":239},[79,130810,62952],{"class":96},[79,130812,130813],{"class":96}," url",[79,130815,685],{"class":239},[79,130817,130402],{"class":7412},[79,130819,15876],{"class":239},[79,130821,63846],{"class":96},[79,130823,130824],{"class":96}," fixed",[79,130826,19283],{"class":96},[79,130828,130571],{"class":96},[79,130830,3531],{"class":239},[79,130832,130833],{"class":81,"line":457},[79,130834,3801],{"class":239},[265,130836,130838],{"id":130837},"_827-背景色半透明","8.2.7 背景色半透明",[51,130840,130842],{"className":128304,"code":130841,"language":128306,"meta":57,"style":57},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[59,130843,130844,130850,130876],{"__ignoreMap":57},[79,130845,130846,130848],{"class":81,"line":82},[79,130847,53724],{"class":395},[79,130849,17732],{"class":239},[79,130851,130852,130854,130856,130858,130860,130862,130864,130866,130868,130870,130872,130874],{"class":81,"line":167},[79,130853,72719],{"class":96},[79,130855,53550],{"class":239},[79,130857,57220],{"class":96},[79,130859,685],{"class":239},[79,130861,1030],{"class":96},[79,130863,1060],{"class":239},[79,130865,1030],{"class":96},[79,130867,1060],{"class":239},[79,130869,1030],{"class":96},[79,130871,1060],{"class":239},[79,130873,102624],{"class":96},[79,130875,4925],{"class":239},[79,130877,130878],{"class":81,"line":178},[79,130879,3801],{"class":239},[19,130881,101499],{},[19,130883,130884],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130886,130887],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130889,130890],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130892,130893],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[265,130895,130897],{"id":130896},"_828-总结","8.2.8 总结",[2516,130899,130900,130911],{},[2519,130901,130902],{},[2522,130903,130904,130907,130909],{},[2525,130905,130906],{"align":25876},"属性",[2525,130908,104736],{"align":25876},[2525,130910,2531],{"align":25876},[2563,130912,130913,130924,130935,130946,130957,130968,130979],{},[2522,130914,130915,130918,130921],{},[2568,130916,130917],{"align":25876},"background-color",[2568,130919,130920],{"align":25876},"背景颜色",[2568,130922,130923],{"align":25876},"预定义的颜色值\u002F十六进制\u002FRGB代码",[2522,130925,130926,130929,130932],{},[2568,130927,130928],{"align":25876},"background-image",[2568,130930,130931],{"align":25876},"背景图片",[2568,130933,130934],{"align":25876},"url(图片路径)",[2522,130936,130937,130940,130943],{},[2568,130938,130939],{"align":25876},"background-repeat",[2568,130941,130942],{"align":25876},"是否平铺",[2568,130944,130945],{"align":25876},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[2522,130947,130948,130951,130954],{},[2568,130949,130950],{"align":25876},"background-position",[2568,130952,130953],{"align":25876},"背景位置",[2568,130955,130956],{"align":25876},"length\u002Fposition 分别是x和y坐标",[2522,130958,130959,130962,130965],{},[2568,130960,130961],{"align":25876},"background-attachment",[2568,130963,130964],{"align":25876},"背景附着",[2568,130966,130967],{"align":25876},"scroll(背景滚动) \u002Ffixed (背景固定)",[2522,130969,130970,130973,130976],{},[2568,130971,130972],{"align":25876},"背景简写",[2568,130974,130975],{"align":25876},"书写更简单",[2568,130977,130978],{"align":25876},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[2522,130980,130981,130984,130987],{},[2568,130982,130983],{"align":25876},"背景半透明",[2568,130985,130986],{"align":25876},"背景颜色半透明",[2568,130988,130989],{"align":25876},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130991,130992],{},"颜色渐变：",[3699,130994],{"style":128160,"src":130995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3699,130997],{"style":128160,"src":130998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[265,131000,131002],{"id":131001},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[51,131004,131006],{"className":129051,"code":131005,"language":129053,"meta":57,"style":57},"\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",[59,131007,131008,131023,131042,131061,131080,131099,131118],{"__ignoreMap":57},[79,131009,131010,131012,131014,131016,131018,131021],{"class":81,"line":82},[79,131011,392],{"class":239},[79,131013,53724],{"class":395},[79,131015,55596],{"class":85},[79,131017,244],{"class":239},[79,131019,131020],{"class":89},"\"nav\"",[79,131022,53420],{"class":239},[79,131024,131025,131027,131029,131031,131033,131035,131038,131040],{"class":81,"line":167},[79,131026,54257],{"class":239},[79,131028,2614],{"class":395},[79,131030,63167],{"class":85},[79,131032,244],{"class":239},[79,131034,63172],{"class":89},[79,131036,131037],{"class":239},">五彩导航1\u003C\u002F",[79,131039,2614],{"class":395},[79,131041,53420],{"class":239},[79,131043,131044,131046,131048,131050,131052,131054,131057,131059],{"class":81,"line":178},[79,131045,54257],{"class":239},[79,131047,2614],{"class":395},[79,131049,63167],{"class":85},[79,131051,244],{"class":239},[79,131053,63172],{"class":89},[79,131055,131056],{"class":239},">五彩导航2\u003C\u002F",[79,131058,2614],{"class":395},[79,131060,53420],{"class":239},[79,131062,131063,131065,131067,131069,131071,131073,131076,131078],{"class":81,"line":457},[79,131064,54257],{"class":239},[79,131066,2614],{"class":395},[79,131068,63167],{"class":85},[79,131070,244],{"class":239},[79,131072,63172],{"class":89},[79,131074,131075],{"class":239},">五彩导航3\u003C\u002F",[79,131077,2614],{"class":395},[79,131079,53420],{"class":239},[79,131081,131082,131084,131086,131088,131090,131092,131095,131097],{"class":81,"line":462},[79,131083,54257],{"class":239},[79,131085,2614],{"class":395},[79,131087,63167],{"class":85},[79,131089,244],{"class":239},[79,131091,63172],{"class":89},[79,131093,131094],{"class":239},">五彩导航4\u003C\u002F",[79,131096,2614],{"class":395},[79,131098,53420],{"class":239},[79,131100,131101,131103,131105,131107,131109,131111,131114,131116],{"class":81,"line":474},[79,131102,54257],{"class":239},[79,131104,2614],{"class":395},[79,131106,63167],{"class":85},[79,131108,244],{"class":239},[79,131110,63172],{"class":89},[79,131112,131113],{"class":239},">五彩导航5\u003C\u002F",[79,131115,2614],{"class":395},[79,131117,53420],{"class":239},[79,131119,131120,131122,131124],{"class":81,"line":480},[79,131121,53898],{"class":239},[79,131123,53724],{"class":395},[79,131125,53420],{"class":239},[51,131127,131129],{"className":128304,"code":131128,"language":128306,"meta":57,"style":57},".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",[59,131130,131131,131140,131150,131162,131174,131184,131196,131206,131210,131235,131258,131281,131304],{"__ignoreMap":57},[79,131132,131133,131136,131138],{"class":81,"line":82},[79,131134,131135],{"class":85},".nav",[79,131137,3635],{"class":395},[79,131139,17732],{"class":239},[79,131141,131142,131144,131146,131148],{"class":81,"line":167},[79,131143,129920],{"class":96},[79,131145,53550],{"class":239},[79,131147,74491],{"class":96},[79,131149,3531],{"class":239},[79,131151,131152,131154,131156,131158,131160],{"class":81,"line":178},[79,131153,72676],{"class":96},[79,131155,53550],{"class":239},[79,131157,3190],{"class":96},[79,131159,53605],{"class":243},[79,131161,3531],{"class":239},[79,131163,131164,131166,131168,131170,131172],{"class":81,"line":457},[79,131165,72896],{"class":96},[79,131167,53550],{"class":239},[79,131169,3229],{"class":96},[79,131171,53605],{"class":243},[79,131173,3531],{"class":239},[79,131175,131176,131178,131180,131182],{"class":81,"line":462},[79,131177,72634],{"class":96},[79,131179,53550],{"class":239},[79,131181,53705],{"class":96},[79,131183,3531],{"class":239},[79,131185,131186,131188,131190,131192,131194],{"class":81,"line":474},[79,131187,128988],{"class":96},[79,131189,53550],{"class":239},[79,131191,3229],{"class":96},[79,131193,53605],{"class":243},[79,131195,3531],{"class":239},[79,131197,131198,131200,131202,131204],{"class":81,"line":480},[79,131199,73013],{"class":96},[79,131201,53550],{"class":239},[79,131203,62952],{"class":96},[79,131205,3531],{"class":239},[79,131207,131208],{"class":81,"line":486},[79,131209,3801],{"class":239},[79,131211,131212,131214,131216,131219,131221,131223,131226,131228,131230,131232],{"class":81,"line":491},[79,131213,131135],{"class":85},[79,131215,3635],{"class":395},[79,131217,131218],{"class":85},":nth-child",[79,131220,685],{"class":239},[79,131222,1072],{"class":96},[79,131224,131225],{"class":239},") { ",[79,131227,130917],{"class":96},[79,131229,53550],{"class":239},[79,131231,130335],{"class":96},[79,131233,131234],{"class":239},"; }\n",[79,131236,131237,131239,131241,131243,131245,131247,131249,131251,131253,131256],{"class":81,"line":497},[79,131238,131135],{"class":85},[79,131240,3635],{"class":395},[79,131242,131218],{"class":85},[79,131244,685],{"class":239},[79,131246,1049],{"class":96},[79,131248,131225],{"class":239},[79,131250,130917],{"class":96},[79,131252,53550],{"class":239},[79,131254,131255],{"class":96},"#ff0000",[79,131257,131234],{"class":239},[79,131259,131260,131262,131264,131266,131268,131270,131272,131274,131276,131279],{"class":81,"line":503},[79,131261,131135],{"class":85},[79,131263,3635],{"class":395},[79,131265,131218],{"class":85},[79,131267,685],{"class":239},[79,131269,1188],{"class":96},[79,131271,131225],{"class":239},[79,131273,130917],{"class":96},[79,131275,53550],{"class":239},[79,131277,131278],{"class":96},"#00a4ff",[79,131280,131234],{"class":239},[79,131282,131283,131285,131287,131289,131291,131293,131295,131297,131299,131302],{"class":81,"line":509},[79,131284,131135],{"class":85},[79,131286,3635],{"class":395},[79,131288,131218],{"class":85},[79,131290,685],{"class":239},[79,131292,2668],{"class":96},[79,131294,131225],{"class":239},[79,131296,130917],{"class":96},[79,131298,53550],{"class":239},[79,131300,131301],{"class":96},"#ff00ff",[79,131303,131234],{"class":239},[79,131305,131306,131308,131310,131312,131314,131316,131318,131320,131322,131325],{"class":81,"line":514},[79,131307,131135],{"class":85},[79,131309,3635],{"class":395},[79,131311,131218],{"class":85},[79,131313,685],{"class":239},[79,131315,2694],{"class":96},[79,131317,131225],{"class":239},[79,131319,130917],{"class":96},[79,131321,53550],{"class":239},[79,131323,131324],{"class":96},"#00ff00",[79,131326,131234],{"class":239},[14,131328,131330],{"id":131329},"_83-css三大特性","8.3 css三大特性",[265,131332,131334],{"id":131333},"_831-层叠性","8.3.1 层叠性",[19,131336,131337],{},"为了解决样式冲突问题",[19,131339,131340],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,131342,131343],{},"   ②样式不冲突，不会层叠",[265,131345,131347],{"id":131346},"_832-继承性","8.3.2 继承性",[19,131349,131350],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,131352,131353],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[51,131355,131357],{"className":128304,"code":131356,"language":128306,"meta":57,"style":57},"p {\n  color: #333;\n}\n",[59,131358,131359,131365,131375],{"__ignoreMap":57},[79,131360,131361,131363],{"class":81,"line":82},[79,131362,19],{"class":395},[79,131364,17732],{"class":239},[79,131366,131367,131369,131371,131373],{"class":81,"line":167},[79,131368,73013],{"class":96},[79,131370,53550],{"class":239},[79,131372,64479],{"class":96},[79,131374,3531],{"class":239},[79,131376,131377],{"class":81,"line":178},[79,131378,3801],{"class":239},[3699,131380],{"style":128160,"src":131381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,131383,131384],{},"解释：①行高可以跟单位也可以不跟单位",[19,131386,131387],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,131389,131390],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,131392,131393],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[265,131395,131397],{"id":131396},"_833-优先级","8.3.3 优先级",[26,131399,131400,131403],{},[29,131401,131402],{},"选择器相同，则执行层叠性",[29,131404,131405],{},"选择器不同，则根据选择器权重执行",[2516,131407,131408,131418],{},[2519,131409,131410],{},[2522,131411,131412,131415],{},[2525,131413,131414],{"align":25876},"选择器",[2525,131416,131417],{"align":25876},"选择器权重",[2563,131419,131420,131428,131436,131444,131452,131460],{},[2522,131421,131422,131425],{},[2568,131423,131424],{"align":25876},"继承 或者*",[2568,131426,131427],{"align":25876},"0，0，0，0",[2522,131429,131430,131433],{},[2568,131431,131432],{"align":25876},"标签选择器",[2568,131434,131435],{"align":25876},"0，0，0，1",[2522,131437,131438,131441],{},[2568,131439,131440],{"align":25876},"类选择器，伪类选择器",[2568,131442,131443],{"align":25876},"0，0，1，0",[2522,131445,131446,131449],{},[2568,131447,131448],{"align":25876},"ID选择器",[2568,131450,131451],{"align":25876},"0，1，0，0",[2522,131453,131454,131457],{},[2568,131455,131456],{"align":25876},"行内样式",[2568,131458,131459],{"align":25876},"1，0，0，0",[2522,131461,131462,131465],{},[2568,131463,131464],{"align":25876},"！important",[2568,131466,131467],{"align":25876},"无穷大",[19,131469,131470],{},"! important用法：",[51,131472,131474],{"className":128304,"code":131473,"language":128306,"meta":57,"style":57},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[59,131475,131476,131481,131487,131500,131504,131509,131515,131525],{"__ignoreMap":57},[79,131477,131478],{"class":81,"line":82},[79,131479,131480],{"class":2440},"\u002F* !important 拥有最高优先级 *\u002F\n",[79,131482,131483,131485],{"class":81,"line":167},[79,131484,53724],{"class":395},[79,131486,17732],{"class":239},[79,131488,131489,131491,131493,131495,131498],{"class":81,"line":178},[79,131490,73013],{"class":96},[79,131492,53550],{"class":239},[79,131494,53758],{"class":96},[79,131496,131497],{"class":243}," !important",[79,131499,3531],{"class":239},[79,131501,131502],{"class":81,"line":457},[79,131503,3801],{"class":239},[79,131505,131506],{"class":81,"line":462},[79,131507,131508],{"class":2440},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[79,131510,131511,131513],{"class":81,"line":474},[79,131512,53724],{"class":395},[79,131514,17732],{"class":239},[79,131516,131517,131519,131521,131523],{"class":81,"line":480},[79,131518,73013],{"class":96},[79,131520,53550],{"class":239},[79,131522,59531],{"class":96},[79,131524,3531],{"class":239},[79,131526,131527],{"class":81,"line":486},[79,131528,3801],{"class":239},[19,131530,131531],{},"优先级注意点：",[19,131533,131534],{},"①权重是有4组数字组成,但是不会有进位",[19,131536,131537],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131539,131540],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131542,131543],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131545,131546],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131548,131549],{},"⑥复合选择器",[2516,131551,131552,131562],{},[2519,131553,131554],{},[2522,131555,131556,131559],{},[2525,131557,131558],{"align":25876},"div ul li",[2525,131560,131561],{"align":25876},"0,0,0,3",[2563,131563,131564,131572,131580],{},[2522,131565,131566,131569],{},[2568,131567,131568],{"align":25876},".nav ul li",[2568,131570,131571],{"align":25876},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[2522,131573,131574,131577],{},[2568,131575,131576],{"align":25876},"a:hover",[2568,131578,131579],{"align":25876},"0,0,1,1",[2522,131581,131582,131585],{},[2568,131583,131584],{"align":25876},".nav a",[2568,131586,131579],{"align":25876},[2287,131588,131589],{},"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":57,"searchDepth":167,"depth":167,"links":131591},[131592,131600,131611],{"id":129700,"depth":167,"text":129701,"children":131593},[131594,131595,131596,131597,131598,131599],{"id":129713,"depth":178,"text":129714},{"id":129785,"depth":178,"text":129786},{"id":129857,"depth":178,"text":129858},{"id":129888,"depth":178,"text":129889},{"id":129895,"depth":178,"text":129896},{"id":130048,"depth":178,"text":130049},{"id":130356,"depth":167,"text":130357,"children":131601},[131602,131603,131604,131605,131606,131607,131608,131609,131610],{"id":130363,"depth":178,"text":130364},{"id":130373,"depth":178,"text":130374},{"id":130469,"depth":178,"text":130470},{"id":130542,"depth":178,"text":130543},{"id":130697,"depth":178,"text":130698},{"id":130785,"depth":178,"text":130786},{"id":130837,"depth":178,"text":130838},{"id":130896,"depth":178,"text":130897},{"id":131001,"depth":178,"text":131002},{"id":131329,"depth":167,"text":131330,"children":131612},[131613,131614,131615],{"id":131333,"depth":178,"text":131334},{"id":131346,"depth":178,"text":131347},{"id":131396,"depth":178,"text":131397},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129692,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131622,"title":131623,"body":131624,"description":25516,"extension":2314,"meta":133214,"navigation":453,"path":133215,"seo":133216,"stem":133217,"__hash__":133218},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131625,"toc":133193},[131626,131629,131633,131636,131639,131642,131645,131648,131651,131654,131658,131666,131703,131739,131742,131756,131761,131795,131798,131891,131896,131899,131929,131932,131937,131945,131949,131956,132002,132046,132051,132054,132057,132060,132063,132066,132069,132071,132074,132078,132083,132127,132132,132135,132138,132175,132180,132183,132186,132189,132192,132224,132227,132230,132233,132265,132268,132271,132274,132278,132281,132313,132316,132320,132340,132343,132351,132354,132358,132363,132366,132398,132403,132406,132444,132448,132453,132456,132459,132490,132493,132510,132515,132567,132627,132632,132686,132724,132728,132732,132735,132739,132747,132750,132752,132763,132768,132816,132850,132853,132856,132859,132862,132906,132909,132912,132915,132918,132921,132924,132968,132971,132974,132977,132980,132983,132986,132992,132995,133039,133042,133045,133048,133051,133054,133098,133101,133103,133106,133110,133114,133152,133156,133159,133162,133166,133174,133178,133181,133184,133187,133190],[10,131627,131623],{"id":131628},"_9-css盒模型浮动与切图",[14,131630,131632],{"id":131631},"_91-盒子模型","9.1 盒子模型",[19,131634,131635],{},"利用盒子来设计网页",[19,131637,131638],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131640,131641],{},"网页布局设置：",[19,131643,131644],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131646,131647],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131649,131650],{},"③往盒子里装内容",[3699,131652],{"style":128160,"src":131653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[265,131655,131657],{"id":131656},"_911-边框border","9.1.1 边框（border）",[26,131659,131660,131663],{},[29,131661,131662],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[29,131664,131665],{},"语法",[51,131667,131669],{"className":128304,"code":131668,"language":128306,"meta":57,"style":57},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[59,131670,131671,131676,131682,131699],{"__ignoreMap":57},[79,131672,131673],{"class":81,"line":82},[79,131674,131675],{"class":2440},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[79,131677,131678,131680],{"class":81,"line":167},[79,131679,53724],{"class":395},[79,131681,17732],{"class":239},[79,131683,131684,131686,131688,131690,131692,131694,131697],{"class":81,"line":178},[79,131685,73004],{"class":96},[79,131687,53550],{"class":239},[79,131689,1072],{"class":96},[79,131691,53605],{"class":243},[79,131693,53634],{"class":96},[79,131695,131696],{"class":96}," #ccc",[79,131698,3531],{"class":239},[79,131700,131701],{"class":81,"line":457},[79,131702,3801],{"class":239},[2516,131704,131705,131713],{},[2519,131706,131707],{},[2522,131708,131709,131711],{},[2525,131710,130906],{"align":25876},[2525,131712,104736],{"align":25876},[2563,131714,131715,131723,131731],{},[2522,131716,131717,131720],{},[2568,131718,131719],{"align":25876},"border-width",[2568,131721,131722],{"align":25876},"定义边框粗细，单位是px",[2522,131724,131725,131728],{},[2568,131726,131727],{"align":25876},"border-style",[2568,131729,131730],{"align":25876},"边框的样式",[2522,131732,131733,131736],{},[2568,131734,131735],{"align":25876},"border-color",[2568,131737,131738],{"align":25876},"边框的颜色",[19,131740,131741],{},"边框样式 border-style 可以设置如下值：",[3377,131743,131744,131747,131750,131753],{},[29,131745,131746],{},"none：没有边框即忽略所有边框的宽度（默认值）",[29,131748,131749],{},"solid：边框为单实线(最为常用的)",[29,131751,131752],{},"dashed：边框为虚线",[29,131754,131755],{},"dotted：边框为点线",[26,131757,131758],{"start":178},[29,131759,131760],{},"边框的合写分写",[51,131762,131763],{"className":128304,"code":131668,"language":128306,"meta":57,"style":57},[59,131764,131765,131769,131775,131791],{"__ignoreMap":57},[79,131766,131767],{"class":81,"line":82},[79,131768,131675],{"class":2440},[79,131770,131771,131773],{"class":81,"line":167},[79,131772,53724],{"class":395},[79,131774,17732],{"class":239},[79,131776,131777,131779,131781,131783,131785,131787,131789],{"class":81,"line":178},[79,131778,73004],{"class":96},[79,131780,53550],{"class":239},[79,131782,1072],{"class":96},[79,131784,53605],{"class":243},[79,131786,53634],{"class":96},[79,131788,131696],{"class":96},[79,131790,3531],{"class":239},[79,131792,131793],{"class":81,"line":457},[79,131794,3801],{"class":239},[19,131796,131797],{},"边框分开写法：",[51,131799,131801],{"className":128304,"code":131800,"language":128306,"meta":57,"style":57},"\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",[59,131802,131803,131808,131814,131832,131850,131869,131887],{"__ignoreMap":57},[79,131804,131805],{"class":81,"line":82},[79,131806,131807],{"class":2440},"\u002F* 边框分开写法 *\u002F\n",[79,131809,131810,131812],{"class":81,"line":167},[79,131811,53724],{"class":395},[79,131813,17732],{"class":239},[79,131815,131816,131819,131821,131823,131825,131827,131830],{"class":81,"line":178},[79,131817,131818],{"class":96},"  border-top",[79,131820,53550],{"class":239},[79,131822,1072],{"class":96},[79,131824,53605],{"class":243},[79,131826,53634],{"class":96},[79,131828,131829],{"class":96}," #000",[79,131831,3531],{"class":239},[79,131833,131834,131837,131839,131841,131843,131845,131848],{"class":81,"line":457},[79,131835,131836],{"class":96},"  border-right",[79,131838,53550],{"class":239},[79,131840,1049],{"class":96},[79,131842,53605],{"class":243},[79,131844,64351],{"class":96},[79,131846,131847],{"class":96}," #333",[79,131849,3531],{"class":239},[79,131851,131852,131855,131857,131859,131861,131864,131867],{"class":81,"line":462},[79,131853,131854],{"class":96},"  border-bottom",[79,131856,53550],{"class":239},[79,131858,1188],{"class":96},[79,131860,53605],{"class":243},[79,131862,131863],{"class":96}," dotted",[79,131865,131866],{"class":96}," #666",[79,131868,3531],{"class":239},[79,131870,131871,131874,131876,131878,131880,131882,131885],{"class":81,"line":474},[79,131872,131873],{"class":96},"  border-left",[79,131875,53550],{"class":239},[79,131877,1072],{"class":96},[79,131879,53605],{"class":243},[79,131881,53634],{"class":96},[79,131883,131884],{"class":96}," #999",[79,131886,3531],{"class":239},[79,131888,131889],{"class":81,"line":480},[79,131890,3801],{"class":239},[26,131892,131893],{"start":457},[29,131894,131895],{},"表格的细线边框",[19,131897,131898],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[51,131900,131902],{"className":128304,"code":131901,"language":128306,"meta":57,"style":57},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[59,131903,131904,131909,131915,131925],{"__ignoreMap":57},[79,131905,131906],{"class":81,"line":82},[79,131907,131908],{"class":2440},"\u002F* 表格细线边框合并 *\u002F\n",[79,131910,131911,131913],{"class":81,"line":167},[79,131912,2516],{"class":395},[79,131914,17732],{"class":239},[79,131916,131917,131919,131921,131923],{"class":81,"line":178},[79,131918,72686],{"class":96},[79,131920,53550],{"class":239},[79,131922,67145],{"class":96},[79,131924,3531],{"class":239},[79,131926,131927],{"class":81,"line":457},[79,131928,3801],{"class":239},[19,131930,131931],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[26,131933,131934],{"start":462},[29,131935,131936],{},"解决边框额外增加盒子的实际大小的方法：",[3377,131938,131939,131942],{},[29,131940,131941],{},"测量盒子大小的时候,不量边框",[29,131943,131944],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[265,131946,131948],{"id":131947},"_912-内边距","9.1.2 内边距",[26,131950,131951,131954],{},[29,131952,131953],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[29,131955,131665],{},[2516,131957,131958,131968],{},[2519,131959,131960],{},[2522,131961,131962,131965],{},[2525,131963,131964],{"align":25876},"值的个数",[2525,131966,131967],{"align":25876},"表达意思",[2563,131969,131970,131978,131986,131994],{},[2522,131971,131972,131975],{},[2568,131973,131974],{"align":25876},"padding: 5px;",[2568,131976,131977],{"align":25876},"1个值，代表上下左右都有5个元素",[2522,131979,131980,131983],{},[2568,131981,131982],{"align":25876},"padding: 5px 10px;",[2568,131984,131985],{"align":25876},"2个值，代表上下内边距为5像素，左右内边距为10像素",[2522,131987,131988,131991],{},[2568,131989,131990],{"align":25876},"padding: 5px 10px 20px;",[2568,131992,131993],{"align":25876},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[2522,131995,131996,131999],{},[2568,131997,131998],{"align":25876},"padding: 5px 10px 20px 30px;",[2568,132000,132001],{"align":25876},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[2516,132003,132004,132012],{},[2519,132005,132006],{},[2522,132007,132008,132010],{},[2525,132009,130906],{"align":25876},[2525,132011,104736],{"align":25876},[2563,132013,132014,132022,132030,132038],{},[2522,132015,132016,132019],{},[2568,132017,132018],{"align":25876},"padding-left",[2568,132020,132021],{"align":25876},"左内边距",[2522,132023,132024,132027],{},[2568,132025,132026],{"align":25876},"padding-right",[2568,132028,132029],{"align":25876},"右内边距",[2522,132031,132032,132035],{},[2568,132033,132034],{"align":25876},"padding-top",[2568,132036,132037],{"align":25876},"上内边距",[2522,132039,132040,132043],{},[2568,132041,132042],{"align":25876},"padding-bottom",[2568,132044,132045],{"align":25876},"下内边距",[26,132047,132048],{"start":178},[29,132049,132050],{},"内边距会影响盒子的实际大小",[19,132052,132053],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,132055,132056],{},"①内容和边框有了距离，添加了内边距",[19,132058,132059],{},"②padding影响了盒子实际大小",[19,132061,132062],{},"内边距对盒子大小的影响：",[19,132064,132065],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,132067,132068],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,132070,97325],{},[19,132072,132073],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[265,132075,132077],{"id":132076},"_913-外边距","9.1.3 外边距",[26,132079,132080],{},[29,132081,132082],{},"控制盒子与盒子之间的距离",[2516,132084,132085,132093],{},[2519,132086,132087],{},[2522,132088,132089,132091],{},[2525,132090,130906],{"align":25876},[2525,132092,104736],{"align":25876},[2563,132094,132095,132103,132111,132119],{},[2522,132096,132097,132100],{},[2568,132098,132099],{"align":25876},"margin-left",[2568,132101,132102],{"align":25876},"左外边距",[2522,132104,132105,132108],{},[2568,132106,132107],{"align":25876},"margin-right",[2568,132109,132110],{"align":25876},"右外边距",[2522,132112,132113,132116],{},[2568,132114,132115],{"align":25876},"margin-top",[2568,132117,132118],{"align":25876},"上外边距",[2522,132120,132121,132124],{},[2568,132122,132123],{"align":25876},"margin-bottom",[2568,132125,132126],{"align":25876},"下外边距",[26,132128,132129],{"start":167},[29,132130,132131],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132133,132134],{},"①盒子必须指定了宽度（width）",[19,132136,132137],{},"②盒子左右的外边距都设置为 auto",[51,132139,132141],{"className":128304,"code":132140,"language":128306,"meta":57,"style":57},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[59,132142,132143,132148,132155,132171],{"__ignoreMap":57},[79,132144,132145],{"class":81,"line":82},[79,132146,132147],{"class":2440},"\u002F* margin 复合写法（同上） *\u002F\n",[79,132149,132150,132153],{"class":81,"line":167},[79,132151,132152],{"class":85},".box",[79,132154,17732],{"class":239},[79,132156,132157,132159,132161,132163,132165,132168],{"class":81,"line":178},[79,132158,72578],{"class":96},[79,132160,53550],{"class":239},[79,132162,1030],{"class":96},[79,132164,53669],{"class":96},[79,132166,132167],{"class":239},";  ",[79,132169,132170],{"class":2440},"\u002F* 块级盒子水平居中 *\u002F\n",[79,132172,132173],{"class":81,"line":457},[79,132174,3801],{"class":239},[26,132176,132177],{"start":178},[29,132178,132179],{},"外边距塌陷问题",[19,132181,132182],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3699,132184],{"style":128160,"src":132185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132187,132188],{},"解决方案：",[19,132190,132191],{},"①可以为父亲元素定义上边距",[51,132193,132194],{"className":128304,"code":132140,"language":128306,"meta":57,"style":57},[59,132195,132196,132200,132206,132220],{"__ignoreMap":57},[79,132197,132198],{"class":81,"line":82},[79,132199,132147],{"class":2440},[79,132201,132202,132204],{"class":81,"line":167},[79,132203,132152],{"class":85},[79,132205,17732],{"class":239},[79,132207,132208,132210,132212,132214,132216,132218],{"class":81,"line":178},[79,132209,72578],{"class":96},[79,132211,53550],{"class":239},[79,132213,1030],{"class":96},[79,132215,53669],{"class":96},[79,132217,132167],{"class":239},[79,132219,132170],{"class":2440},[79,132221,132222],{"class":81,"line":457},[79,132223,3801],{"class":239},[19,132225,132226],{},"②可以为父亲元素定义上内边距",[19,132228,132229],{},"③可以为父亲元素添加overflow:hidden",[3699,132231],{"style":128160,"src":132232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[51,132234,132235],{"className":128304,"code":132140,"language":128306,"meta":57,"style":57},[59,132236,132237,132241,132247,132261],{"__ignoreMap":57},[79,132238,132239],{"class":81,"line":82},[79,132240,132147],{"class":2440},[79,132242,132243,132245],{"class":81,"line":167},[79,132244,132152],{"class":85},[79,132246,17732],{"class":239},[79,132248,132249,132251,132253,132255,132257,132259],{"class":81,"line":178},[79,132250,72578],{"class":96},[79,132252,53550],{"class":239},[79,132254,1030],{"class":96},[79,132256,53669],{"class":96},[79,132258,132167],{"class":239},[79,132260,132170],{"class":2440},[79,132262,132263],{"class":81,"line":457},[79,132264,3801],{"class":239},[3699,132266],{"style":128160,"src":132267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,132269,132270],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,132272,132273],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[265,132275,132277],{"id":132276},"_914-清除内外边距","9.1.4 清除内外边距",[19,132279,132280],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[51,132282,132283],{"className":128304,"code":132140,"language":128306,"meta":57,"style":57},[59,132284,132285,132289,132295,132309],{"__ignoreMap":57},[79,132286,132287],{"class":81,"line":82},[79,132288,132147],{"class":2440},[79,132290,132291,132293],{"class":81,"line":167},[79,132292,132152],{"class":85},[79,132294,17732],{"class":239},[79,132296,132297,132299,132301,132303,132305,132307],{"class":81,"line":178},[79,132298,72578],{"class":96},[79,132300,53550],{"class":239},[79,132302,1030],{"class":96},[79,132304,53669],{"class":96},[79,132306,132167],{"class":239},[79,132308,132170],{"class":2440},[79,132310,132311],{"class":81,"line":457},[79,132312,3801],{"class":239},[19,132314,132315],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[265,132317,132319],{"id":132318},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[3377,132321,132322,132325,132328,132331,132334,132337],{},[29,132323,132324],{},"文件→打开 ：可以打开我们要测量的图片",[29,132326,132327],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[29,132329,132330],{},"右击标尺，把里面的单位改为像素",[29,132332,132333],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[29,132335,132336],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[29,132338,132339],{},"用选区拖动 可以测量大小",[3699,132341],{"style":128160,"src":132342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[3377,132344,132345,132348],{},[29,132346,132347],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[29,132349,132350],{},"吸管取色工具",[3699,132352],{"style":128160,"src":132353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[265,132355,132357],{"id":132356},"_916-案例","9.1.6 案例",[26,132359,132360],{},[29,132361,132362],{},"小米商品",[3699,132364],{"style":128160,"src":132365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[51,132367,132368],{"className":128304,"code":132140,"language":128306,"meta":57,"style":57},[59,132369,132370,132374,132380,132394],{"__ignoreMap":57},[79,132371,132372],{"class":81,"line":82},[79,132373,132147],{"class":2440},[79,132375,132376,132378],{"class":81,"line":167},[79,132377,132152],{"class":85},[79,132379,17732],{"class":239},[79,132381,132382,132384,132386,132388,132390,132392],{"class":81,"line":178},[79,132383,72578],{"class":96},[79,132385,53550],{"class":239},[79,132387,1030],{"class":96},[79,132389,53669],{"class":96},[79,132391,132167],{"class":239},[79,132393,132170],{"class":2440},[79,132395,132396],{"class":81,"line":457},[79,132397,3801],{"class":239},[26,132399,132400],{"start":167},[29,132401,132402],{},"快报模块",[3699,132404],{"style":128160,"src":132405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[51,132407,132409],{"className":129051,"code":132408,"language":129053,"meta":57,"style":57},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[59,132410,132411,132416,132431,132436],{"__ignoreMap":57},[79,132412,132413],{"class":81,"line":82},[79,132414,132415],{"class":2440},"\u003C!-- HTML 代码示例 -->\n",[79,132417,132418,132420,132422,132424,132426,132429],{"class":81,"line":167},[79,132419,392],{"class":239},[79,132421,53724],{"class":395},[79,132423,55596],{"class":85},[79,132425,244],{"class":239},[79,132427,132428],{"class":89},"\"example\"",[79,132430,53420],{"class":239},[79,132432,132433],{"class":81,"line":178},[79,132434,132435],{"class":239},"  示例内容\n",[79,132437,132438,132440,132442],{"class":81,"line":457},[79,132439,53898],{"class":239},[79,132441,53724],{"class":395},[79,132443,53420],{"class":239},[265,132445,132447],{"id":132446},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[26,132449,132450],{},[29,132451,132452],{},"圆角边框",[19,132454,132455],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3699,132457],{"style":128160,"src":132458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[51,132460,132462],{"className":128304,"code":132461,"language":128306,"meta":57,"style":57},"div {\n  border: 1px solid #ccc;\n}\n",[59,132463,132464,132470,132486],{"__ignoreMap":57},[79,132465,132466,132468],{"class":81,"line":82},[79,132467,53724],{"class":395},[79,132469,17732],{"class":239},[79,132471,132472,132474,132476,132478,132480,132482,132484],{"class":81,"line":167},[79,132473,73004],{"class":96},[79,132475,53550],{"class":239},[79,132477,1072],{"class":96},[79,132479,53605],{"class":243},[79,132481,53634],{"class":96},[79,132483,131696],{"class":96},[79,132485,3531],{"class":239},[79,132487,132488],{"class":81,"line":178},[79,132489,3801],{"class":239},[19,132491,132492],{},"解释:",[3377,132494,132495,132498,132501,132504,132507],{},[29,132496,132497],{},"参数值可以为数值或百分比的形式",[29,132499,132500],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[29,132502,132503],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[29,132505,132506],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[29,132508,132509],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[26,132511,132512],{"start":167},[29,132513,132514],{},"盒子阴影",[51,132516,132518],{"className":128304,"code":132517,"language":128306,"meta":57,"style":57},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[59,132519,132520,132526,132563],{"__ignoreMap":57},[79,132521,132522,132524],{"class":81,"line":82},[79,132523,53724],{"class":395},[79,132525,17732],{"class":239},[79,132527,132528,132531,132533,132535,132537,132539,132541,132543,132545,132547,132549,132551,132553,132555,132557,132559,132561],{"class":81,"line":167},[79,132529,132530],{"class":96},"  box-shadow",[79,132532,53550],{"class":239},[79,132534,1030],{"class":96},[79,132536,16916],{"class":96},[79,132538,53605],{"class":243},[79,132540,4253],{"class":96},[79,132542,53605],{"class":243},[79,132544,80875],{"class":96},[79,132546,685],{"class":239},[79,132548,1030],{"class":96},[79,132550,1060],{"class":239},[79,132552,1030],{"class":96},[79,132554,1060],{"class":239},[79,132556,1030],{"class":96},[79,132558,1060],{"class":239},[79,132560,88315],{"class":96},[79,132562,4925],{"class":239},[79,132564,132565],{"class":81,"line":178},[79,132566,3801],{"class":239},[2516,132568,132569,132577],{},[2519,132570,132571],{},[2522,132572,132573,132575],{},[2525,132574,2531],{"align":25876},[2525,132576,29621],{"align":25876},[2563,132578,132579,132587,132595,132603,132611,132619],{},[2522,132580,132581,132584],{},[2568,132582,132583],{"align":25876},"h-shadow",[2568,132585,132586],{"align":25876},"必需,水平阴影的位置,允许负值",[2522,132588,132589,132592],{},[2568,132590,132591],{"align":25876},"v-shadow",[2568,132593,132594],{"align":25876},"必需,垂直阴影的位置,允许负值",[2522,132596,132597,132600],{},[2568,132598,132599],{"align":25876},"blur",[2568,132601,132602],{"align":25876},"可选,模糊距离,就是影子的虚实",[2522,132604,132605,132608],{},[2568,132606,132607],{"align":25876},"spread",[2568,132609,132610],{"align":25876},"可选,阴影尺寸",[2522,132612,132613,132616],{},[2568,132614,132615],{"align":25876},"color",[2568,132617,132618],{"align":25876},"可选,阴影的颜色",[2522,132620,132621,132624],{},[2568,132622,132623],{"align":25876},"inset",[2568,132625,132626],{"align":25876},"可选,将外部阴影(outset)改为内部阴影",[26,132628,132629],{"start":178},[29,132630,132631],{},"文字阴影",[51,132633,132635],{"className":128304,"code":132634,"language":128306,"meta":57,"style":57},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[59,132636,132637,132643,132682],{"__ignoreMap":57},[79,132638,132639,132641],{"class":81,"line":82},[79,132640,19],{"class":395},[79,132642,17732],{"class":239},[79,132644,132645,132648,132650,132652,132654,132656,132658,132660,132662,132664,132666,132668,132670,132672,132674,132676,132678,132680],{"class":81,"line":167},[79,132646,132647],{"class":96},"  text-shadow",[79,132649,53550],{"class":239},[79,132651,1072],{"class":96},[79,132653,53605],{"class":243},[79,132655,27253],{"class":96},[79,132657,53605],{"class":243},[79,132659,16916],{"class":96},[79,132661,53605],{"class":243},[79,132663,80875],{"class":96},[79,132665,685],{"class":239},[79,132667,1030],{"class":96},[79,132669,1060],{"class":239},[79,132671,1030],{"class":96},[79,132673,1060],{"class":239},[79,132675,1030],{"class":96},[79,132677,1060],{"class":239},[79,132679,102624],{"class":96},[79,132681,4925],{"class":239},[79,132683,132684],{"class":81,"line":178},[79,132685,3801],{"class":239},[2516,132687,132688,132696],{},[2519,132689,132690],{},[2522,132691,132692,132694],{},[2525,132693,2531],{"align":25876},[2525,132695,29621],{"align":25876},[2563,132697,132698,132704,132711,132718],{},[2522,132699,132700,132702],{},[2568,132701,132583],{"align":25876},[2568,132703,132586],{"align":25876},[2522,132705,132706,132708],{},[2568,132707,132591],{"align":25876},[2568,132709,132710],{"align":25876},"必需,垂直阴影位置,允许负值",[2522,132712,132713,132715],{},[2568,132714,132599],{"align":25876},[2568,132716,132717],{"align":25876},"可选,模糊的距离",[2522,132719,132720,132722],{},[2568,132721,132615],{"align":25876},[2568,132723,132618],{"align":25876},[14,132725,132727],{"id":132726},"_92-浮动","9.2 浮动",[265,132729,132731],{"id":132730},"_921-浮动介绍","9.2.1 浮动介绍",[19,132733,132734],{},"在16.2中详细介绍",[265,132736,132738],{"id":132737},"_922-清除浮动","9.2.2 清除浮动",[26,132740,132741,132744],{},[29,132742,132743],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[29,132745,132746],{},"清除浮动的本质",[19,132748,132749],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132751,11209],{},[3377,132753,132754,132757,132760],{},[29,132755,132756],{},"如果父盒子本身有高度，则不需要清除浮动",[29,132758,132759],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[29,132761,132762],{},"父级有了高度，就不会影响下面的标准流了",[26,132764,132765],{"start":178},[29,132766,132767],{},"清除浮动样式",[51,132769,132771],{"className":128304,"code":132770,"language":128306,"meta":57,"style":57},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[59,132772,132773,132780,132791,132795,132802,132812],{"__ignoreMap":57},[79,132774,132775,132778],{"class":81,"line":82},[79,132776,132777],{"class":85},".left",[79,132779,17732],{"class":239},[79,132781,132782,132785,132787,132789],{"class":81,"line":167},[79,132783,132784],{"class":96},"  float",[79,132786,53550],{"class":239},[79,132788,25876],{"class":96},[79,132790,3531],{"class":239},[79,132792,132793],{"class":81,"line":178},[79,132794,3801],{"class":239},[79,132796,132797,132800],{"class":81,"line":457},[79,132798,132799],{"class":85},".right",[79,132801,17732],{"class":239},[79,132803,132804,132806,132808,132810],{"class":81,"line":462},[79,132805,132784],{"class":96},[79,132807,53550],{"class":239},[79,132809,74630],{"class":96},[79,132811,3531],{"class":239},[79,132813,132814],{"class":81,"line":474},[79,132815,3801],{"class":239},[2516,132817,132818,132826],{},[2519,132819,132820],{},[2522,132821,132822,132824],{},[2525,132823,128768],{"align":25876},[2525,132825,29621],{"align":25876},[2563,132827,132828,132835,132842],{},[2522,132829,132830,132832],{},[2568,132831,25876],{"align":25876},[2568,132833,132834],{"align":25876},"不允许左侧有浮动元素（清除左侧浮动的影响）",[2522,132836,132837,132839],{},[2568,132838,74630],{"align":25876},[2568,132840,132841],{"align":25876},"不允许右侧有浮动元素（清除右侧浮动的影响）",[2522,132843,132844,132847],{},[2568,132845,132846],{"align":25876},"both",[2568,132848,132849],{"align":25876},"同时清除左右侧浮动的影响",[19,132851,132852],{},"法一",[19,132854,132855],{},"额外标签法也称为隔墙法",[19,132857,132858],{},"使用方式：",[19,132860,132861],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[51,132863,132864],{"className":128304,"code":132770,"language":128306,"meta":57,"style":57},[59,132865,132866,132872,132882,132886,132892,132902],{"__ignoreMap":57},[79,132867,132868,132870],{"class":81,"line":82},[79,132869,132777],{"class":85},[79,132871,17732],{"class":239},[79,132873,132874,132876,132878,132880],{"class":81,"line":167},[79,132875,132784],{"class":96},[79,132877,53550],{"class":239},[79,132879,25876],{"class":96},[79,132881,3531],{"class":239},[79,132883,132884],{"class":81,"line":178},[79,132885,3801],{"class":239},[79,132887,132888,132890],{"class":81,"line":457},[79,132889,132799],{"class":85},[79,132891,17732],{"class":239},[79,132893,132894,132896,132898,132900],{"class":81,"line":462},[79,132895,132784],{"class":96},[79,132897,53550],{"class":239},[79,132899,74630],{"class":96},[79,132901,3531],{"class":239},[79,132903,132904],{"class":81,"line":474},[79,132905,3801],{"class":239},[19,132907,132908],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132910,132911],{},"优点： 通俗易懂，书写方便",[19,132913,132914],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132916,132917],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132919,132920],{},"法二",[19,132922,132923],{},"父级添加overflow属性",[51,132925,132926],{"className":128304,"code":132770,"language":128306,"meta":57,"style":57},[59,132927,132928,132934,132944,132948,132954,132964],{"__ignoreMap":57},[79,132929,132930,132932],{"class":81,"line":82},[79,132931,132777],{"class":85},[79,132933,17732],{"class":239},[79,132935,132936,132938,132940,132942],{"class":81,"line":167},[79,132937,132784],{"class":96},[79,132939,53550],{"class":239},[79,132941,25876],{"class":96},[79,132943,3531],{"class":239},[79,132945,132946],{"class":81,"line":178},[79,132947,3801],{"class":239},[79,132949,132950,132952],{"class":81,"line":457},[79,132951,132799],{"class":85},[79,132953,17732],{"class":239},[79,132955,132956,132958,132960,132962],{"class":81,"line":462},[79,132957,132784],{"class":96},[79,132959,53550],{"class":239},[79,132961,74630],{"class":96},[79,132963,3531],{"class":239},[79,132965,132966],{"class":81,"line":474},[79,132967,3801],{"class":239},[19,132969,132970],{},"overflow: hidden;",[19,132972,132973],{},"优点：代码简洁",[19,132975,132976],{},"缺点：无法显示溢出的部分",[19,132978,132979],{},"注意：是给父元素添加代码",[19,132981,132982],{},"法三",[19,132984,132985],{},"父级添加after伪元素",[19,132987,132988,132991],{},[132989,132990],"after",{}," 方式是额外标签法的升级版",[19,132993,132994],{},"使用的时候复制就可以",[51,132996,132997],{"className":128304,"code":132770,"language":128306,"meta":57,"style":57},[59,132998,132999,133005,133015,133019,133025,133035],{"__ignoreMap":57},[79,133000,133001,133003],{"class":81,"line":82},[79,133002,132777],{"class":85},[79,133004,17732],{"class":239},[79,133006,133007,133009,133011,133013],{"class":81,"line":167},[79,133008,132784],{"class":96},[79,133010,53550],{"class":239},[79,133012,25876],{"class":96},[79,133014,3531],{"class":239},[79,133016,133017],{"class":81,"line":178},[79,133018,3801],{"class":239},[79,133020,133021,133023],{"class":81,"line":457},[79,133022,132799],{"class":85},[79,133024,17732],{"class":239},[79,133026,133027,133029,133031,133033],{"class":81,"line":462},[79,133028,132784],{"class":96},[79,133030,53550],{"class":239},[79,133032,74630],{"class":96},[79,133034,3531],{"class":239},[79,133036,133037],{"class":81,"line":474},[79,133038,3801],{"class":239},[19,133040,133041],{},"优点：没有增加标签，结构更简单",[19,133043,133044],{},"缺点：照顾低版本浏览器",[19,133046,133047],{},"代表网站： 百度、淘宝网、网易等",[19,133049,133050],{},"法四",[19,133052,133053],{},"父级添加双伪元素",[51,133055,133056],{"className":128304,"code":132770,"language":128306,"meta":57,"style":57},[59,133057,133058,133064,133074,133078,133084,133094],{"__ignoreMap":57},[79,133059,133060,133062],{"class":81,"line":82},[79,133061,132777],{"class":85},[79,133063,17732],{"class":239},[79,133065,133066,133068,133070,133072],{"class":81,"line":167},[79,133067,132784],{"class":96},[79,133069,53550],{"class":239},[79,133071,25876],{"class":96},[79,133073,3531],{"class":239},[79,133075,133076],{"class":81,"line":178},[79,133077,3801],{"class":239},[79,133079,133080,133082],{"class":81,"line":457},[79,133081,132799],{"class":85},[79,133083,17732],{"class":239},[79,133085,133086,133088,133090,133092],{"class":81,"line":462},[79,133087,132784],{"class":96},[79,133089,53550],{"class":239},[79,133091,74630],{"class":96},[79,133093,3531],{"class":239},[79,133095,133096],{"class":81,"line":474},[79,133097,3801],{"class":239},[19,133099,133100],{},"优点：代码更简洁",[19,133102,133044],{},[19,133104,133105],{},"代表网站：小米、腾讯等",[14,133107,133109],{"id":133108},"_93-ps切图","9.3 PS切图",[265,133111,133113],{"id":133112},"_931-常见图片格式","9.3.1 常见图片格式",[2516,133115,133116,133126],{},[2519,133117,133118],{},[2522,133119,133120,133123],{},[2525,133121,133122],{"align":25876},"jpg图像格式",[2525,133124,133125],{"align":25876},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[2563,133127,133128,133136,133144],{},[2522,133129,133130,133133],{},[2568,133131,133132],{"align":25876},"gif图像格式",[2568,133134,133135],{"align":25876},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[2522,133137,133138,133141],{},[2568,133139,133140],{"align":25876},"png图像格式",[2568,133142,133143],{"align":25876},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[2522,133145,133146,133149],{},[2568,133147,133148],{"align":25876},"PSD图像格式",[2568,133150,133151],{"align":25876},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[265,133153,133155],{"id":133154},"_932-图层切图","9.3.2 图层切图",[19,133157,133158],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133160,133161],{},"按住shift选中两个图层->图层菜单->合并图层",[265,133163,133165],{"id":133164},"_933-切片切图","9.3.3 切片切图",[3377,133167,133168,133171],{},[29,133169,133170],{},"利用切片工具手动划出",[29,133172,133173],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[265,133175,133177],{"id":133176},"_934-切图步骤","9.3.4 切图步骤",[19,133179,133180],{},"用切片工具选中：",[3699,133182],{"style":128160,"src":133183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133185,133186],{},"文件 -> 导出",[3699,133188],{"style":128160,"src":133189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[2287,133191,133192],{},"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":57,"searchDepth":167,"depth":167,"links":133194},[133195,133204,133208],{"id":131631,"depth":167,"text":131632,"children":133196},[133197,133198,133199,133200,133201,133202,133203],{"id":131656,"depth":178,"text":131657},{"id":131947,"depth":178,"text":131948},{"id":132076,"depth":178,"text":132077},{"id":132276,"depth":178,"text":132277},{"id":132318,"depth":178,"text":132319},{"id":132356,"depth":178,"text":132357},{"id":132446,"depth":178,"text":132447},{"id":132726,"depth":167,"text":132727,"children":133205},[133206,133207],{"id":132730,"depth":178,"text":132731},{"id":132737,"depth":178,"text":132738},{"id":133108,"depth":167,"text":133109,"children":133209},[133210,133211,133212,133213],{"id":133112,"depth":178,"text":133113},{"id":133154,"depth":178,"text":133155},{"id":133164,"depth":178,"text":133165},{"id":133176,"depth":178,"text":133177},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131623,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133220,"title":133221,"body":133222,"description":25516,"extension":2314,"meta":133863,"navigation":453,"path":133864,"seo":133865,"stem":133866,"__hash__":133867},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133223,"toc":133851},[133224,133227,133231,133257,133291,133295,133299,133302,133344,133351,133361,133369,133371,133374,133377,133380,133387,133401,133405,133408,133437,133441,133444,133458,133462,133465,133493,133497,133500,133526,133530,133535,133568,133573,133601,133605,133622,133668,133673,133717,133734,133841,133849],[10,133225,133221],{"id":133226},"_10-css规范与学成在线案例",[14,133228,133230],{"id":133229},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[26,133232,133233,133239,133245,133251],{},[29,133234,133235,133238],{},[2528,133236,133237],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[29,133240,133241,133244],{},[2528,133242,133243],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[29,133246,133247,133250],{},[2528,133248,133249],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[29,133252,133253,133256],{},[2528,133254,133255],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[51,133258,133259],{"className":128304,"code":131668,"language":128306,"meta":57,"style":57},[59,133260,133261,133265,133271,133287],{"__ignoreMap":57},[79,133262,133263],{"class":81,"line":82},[79,133264,131675],{"class":2440},[79,133266,133267,133269],{"class":81,"line":167},[79,133268,53724],{"class":395},[79,133270,17732],{"class":239},[79,133272,133273,133275,133277,133279,133281,133283,133285],{"class":81,"line":178},[79,133274,73004],{"class":96},[79,133276,53550],{"class":239},[79,133278,1072],{"class":96},[79,133280,53605],{"class":243},[79,133282,53634],{"class":96},[79,133284,131696],{"class":96},[79,133286,3531],{"class":239},[79,133288,133289],{"class":81,"line":457},[79,133290,3801],{"class":239},[14,133292,133294],{"id":133293},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[265,133296,133298],{"id":133297},"_1021-header头部制作","10.2.1 header头部制作",[3699,133300],{"style":128160,"src":133301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[3377,133303,133304,133311,133318,133324,133331,133338],{},[29,133305,133306,133307,133310],{},"1号是版心盒子 ",[2528,133308,133309],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[29,133312,133313,133314,133317],{},"版心盒子 里面包含 2号盒子 ",[2528,133315,133316],{},"logo"," 图标",[29,133319,133320,133321,133323],{},"版心盒子 里面包含 3号盒子 ",[2528,133322,55823],{}," 导航栏",[29,133325,133326,133327,133330],{},"版心盒子 里面包含 4号盒子 ",[2528,133328,133329],{},"search"," 搜索框",[29,133332,133333,133334,133337],{},"版心盒子 里面包含 5号盒子 ",[2528,133335,133336],{},"user"," 个人信息",[29,133339,133340,133341],{},"注意，要求里面的 ",[2528,133342,133343],{},"4个子盒子 必须都浮动",[26,133345,133346],{},[29,133347,133348],{},[2528,133349,133350],{},"导航栏注意点:",[19,133352,133353,133354,133357,133358],{},"实际开发中， ",[2528,133355,133356],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[2528,133359,133360],{},"用 li 包含链接(li+a)的做法",[3377,133362,133363,133366],{},[29,133364,133365],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[29,133367,133368],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,133370,11209],{},[19,133372,133373],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,133375,133376],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,133378,133379],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[26,133381,133382],{"start":167},[29,133383,133384],{},[2528,133385,133386],{},"4号盒子search的细节：",[3377,133388,133389,133392,133395],{},[29,133390,133391],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[29,133393,133394],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[29,133396,133397,133400],{},[59,133398,133399],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[265,133402,133404],{"id":133403},"_1022-banner制作","10.2.2 banner制作",[3699,133406],{"style":128160,"src":133407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[3377,133409,133410,133417,133423,133430],{},[29,133411,133412,133413,133416],{},"1号盒子是通栏的大盒子 ",[2528,133414,133415],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[29,133418,133419,133420,133422],{},"2号盒子是版心 ",[2528,133421,3168],{}," ， 要水平居中对齐",[29,133424,133425,133426,133429],{},"3号盒子版心内，左对齐 ",[2528,133427,133428],{},"subnav"," 侧导航栏",[29,133431,133432,133433,133436],{},"4号盒子版心内，右对齐 ",[2528,133434,133435],{},"course"," 课程",[265,133438,133440],{"id":133439},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3699,133442],{"style":128160,"src":133443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[3377,133445,133446,133449,133452,133455],{},[29,133447,133448],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[29,133450,133451],{},"1号盒子是标题 H3 左侧浮动",[29,133453,133454],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[29,133456,133457],{},"3号盒子 右浮动 mod 修改",[265,133459,133461],{"id":133460},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3699,133463],{"style":128160,"src":133464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[3377,133466,133467,133473,133480,133487,133490],{},[29,133468,133469,133470,133472],{},"1号盒子为最大的盒子 ",[2528,133471,55824],{}," 版心水平居中对齐",[29,133474,133475,133476,133479],{},"2号盒子为上面部分 ",[2528,133477,133478],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[29,133481,133482,133483,133486],{},"3号盒子为底下部分 ",[2528,133484,133485],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[29,133488,133489],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[29,133491,133492],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[265,133494,133496],{"id":133495},"_1025-底部模块制作","10.2.5 底部模块制作",[3699,133498],{"style":128160,"src":133499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[3377,133501,133502,133509,133512,133519],{},[29,133503,133504,133505,133508],{},"1号盒子通栏大盒子 底部 ",[2528,133506,133507],{},"footer"," 给高度 底色是白色",[29,133510,133511],{},"2号盒子版心水平居中",[29,133513,133514,133515,133518],{},"3号盒子版权 ",[2528,133516,133517],{},"copyright"," 左对齐",[29,133520,133521,133522,133525],{},"4号盒子 链接组 ",[2528,133523,133524],{},"links"," 右对齐",[265,133527,133529],{"id":133528},"_1026-代码模块","10.2.6 代码模块",[26,133531,133532],{},[29,133533,133534],{},"html部分",[51,133536,133538],{"className":129051,"code":133537,"language":129053,"meta":57,"style":57},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[59,133539,133540],{"__ignoreMap":57},[79,133541,133542,133544,133546,133548,133550,133553,133556,133558,133561,133564,133566],{"class":81,"line":82},[79,133543,392],{"class":239},[79,133545,2614],{"class":395},[79,133547,63167],{"class":85},[79,133549,244],{"class":239},[79,133551,133552],{"class":89},"\"https:\u002F\u002Fexample.com\"",[79,133554,133555],{"class":85}," target",[79,133557,244],{"class":239},[79,133559,133560],{"class":89},"\"_blank\"",[79,133562,133563],{"class":239},">链接文字\u003C\u002F",[79,133565,2614],{"class":395},[79,133567,53420],{"class":239},[26,133569,133570],{"start":167},[29,133571,133572],{},"css部分",[51,133574,133575],{"className":129051,"code":133537,"language":129053,"meta":57,"style":57},[59,133576,133577],{"__ignoreMap":57},[79,133578,133579,133581,133583,133585,133587,133589,133591,133593,133595,133597,133599],{"class":81,"line":82},[79,133580,392],{"class":239},[79,133582,2614],{"class":395},[79,133584,63167],{"class":85},[79,133586,244],{"class":239},[79,133588,133552],{"class":89},[79,133590,133555],{"class":85},[79,133592,244],{"class":239},[79,133594,133560],{"class":89},[79,133596,133563],{"class":239},[79,133598,2614],{"class":395},[79,133600,53420],{"class":239},[265,133602,133604],{"id":133603},"_1027-收获","10.2.7 收获",[26,133606,133607,133610,133613,133616,133619],{},[29,133608,133609],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[29,133611,133612],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[29,133614,133615],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[29,133617,133618],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[29,133620,133621],{},"遗忘代码",[51,133623,133625],{"className":128304,"code":133624,"language":128306,"meta":57,"style":57},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[59,133626,133627,133649,133654,133664],{"__ignoreMap":57},[79,133628,133629,133631,133633,133635,133637,133639,133641,133643,133645,133647],{"class":81,"line":82},[79,133630,53724],{"class":395},[79,133632,1060],{"class":239},[79,133634,19],{"class":395},[79,133636,1060],{"class":239},[79,133638,10],{"class":395},[79,133640,1060],{"class":239},[79,133642,3377],{"class":395},[79,133644,1060],{"class":239},[79,133646,29],{"class":395},[79,133648,17732],{"class":239},[79,133650,133651],{"class":81,"line":167},[79,133652,133653],{"class":2440},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[79,133655,133656,133658,133660,133662],{"class":81,"line":178},[79,133657,129920],{"class":96},[79,133659,53550],{"class":239},[79,133661,62979],{"class":96},[79,133663,3531],{"class":239},[79,133665,133666],{"class":81,"line":457},[79,133667,3801],{"class":239},[26,133669,133670],{"start":474},[29,133671,133672],{},"html引css的程序",[51,133674,133675],{"className":128304,"code":133624,"language":128306,"meta":57,"style":57},[59,133676,133677,133699,133703,133713],{"__ignoreMap":57},[79,133678,133679,133681,133683,133685,133687,133689,133691,133693,133695,133697],{"class":81,"line":82},[79,133680,53724],{"class":395},[79,133682,1060],{"class":239},[79,133684,19],{"class":395},[79,133686,1060],{"class":239},[79,133688,10],{"class":395},[79,133690,1060],{"class":239},[79,133692,3377],{"class":395},[79,133694,1060],{"class":239},[79,133696,29],{"class":395},[79,133698,17732],{"class":239},[79,133700,133701],{"class":81,"line":167},[79,133702,133653],{"class":2440},[79,133704,133705,133707,133709,133711],{"class":81,"line":178},[79,133706,129920],{"class":96},[79,133708,53550],{"class":239},[79,133710,62979],{"class":96},[79,133712,3531],{"class":239},[79,133714,133715],{"class":81,"line":457},[79,133716,3801],{"class":239},[26,133718,133719,133722,133725,133728,133731],{"start":480},[29,133720,133721],{},"浮动的盒子不会有外边距合并问题",[29,133723,133724],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[29,133726,133727],{},"ctrl+g快速定位行；shift+alt多个光标",[29,133729,133730],{},"学习上方各个模块的选择器起名方法，以后就这样用",[29,133732,133733],{},"在写选择器时尽量写全一些，例如",[51,133735,133737],{"className":128304,"code":133736,"language":128306,"meta":57,"style":57},"\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",[59,133738,133739,133744,133760,133765,133780,133785,133800,133805,133820,133825],{"__ignoreMap":57},[79,133740,133741],{"class":81,"line":82},[79,133742,133743],{"class":2440},"\u002F* 静态定位（默认） *\u002F\n",[79,133745,133746,133749,133751,133753,133755,133758],{"class":81,"line":167},[79,133747,133748],{"class":85},".static",[79,133750,81915],{"class":239},[79,133752,130664],{"class":96},[79,133754,53550],{"class":239},[79,133756,133757],{"class":96},"static",[79,133759,131234],{"class":239},[79,133761,133762],{"class":81,"line":178},[79,133763,133764],{"class":2440},"\u002F* 相对定位 *\u002F\n",[79,133766,133767,133770,133772,133774,133776,133778],{"class":81,"line":457},[79,133768,133769],{"class":85},".relative",[79,133771,81915],{"class":239},[79,133773,130664],{"class":96},[79,133775,53550],{"class":239},[79,133777,56874],{"class":96},[79,133779,131234],{"class":239},[79,133781,133782],{"class":81,"line":462},[79,133783,133784],{"class":2440},"\u002F* 绝对定位 *\u002F\n",[79,133786,133787,133790,133792,133794,133796,133798],{"class":81,"line":474},[79,133788,133789],{"class":85},".absolute",[79,133791,81915],{"class":239},[79,133793,130664],{"class":96},[79,133795,53550],{"class":239},[79,133797,56941],{"class":96},[79,133799,131234],{"class":239},[79,133801,133802],{"class":81,"line":480},[79,133803,133804],{"class":2440},"\u002F* 固定定位 *\u002F\n",[79,133806,133807,133810,133812,133814,133816,133818],{"class":81,"line":486},[79,133808,133809],{"class":85},".fixed",[79,133811,81915],{"class":239},[79,133813,130664],{"class":96},[79,133815,53550],{"class":239},[79,133817,88338],{"class":96},[79,133819,131234],{"class":239},[79,133821,133822],{"class":81,"line":491},[79,133823,133824],{"class":2440},"\u002F* 粘性定位 *\u002F\n",[79,133826,133827,133830,133832,133834,133836,133839],{"class":81,"line":497},[79,133828,133829],{"class":85},".sticky",[79,133831,81915],{"class":239},[79,133833,130664],{"class":96},[79,133835,53550],{"class":239},[79,133837,133838],{"class":96},"sticky",[79,133840,131234],{"class":239},[26,133842,133843,133846],{"start":509},[29,133844,133845],{},"一定要用好注释",[29,133847,133848],{},"浮动的盒子不会有外边距合并的问题",[2287,133850,133192],{},{"title":57,"searchDepth":167,"depth":167,"links":133852},[133853,133854],{"id":133229,"depth":167,"text":133230},{"id":133293,"depth":167,"text":133294,"children":133855},[133856,133857,133858,133859,133860,133861,133862],{"id":133297,"depth":178,"text":133298},{"id":133403,"depth":178,"text":133404},{"id":133439,"depth":178,"text":133440},{"id":133460,"depth":178,"text":133461},{"id":133495,"depth":178,"text":133496},{"id":133528,"depth":178,"text":133529},{"id":133603,"depth":178,"text":133604},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133221,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133869,"title":133870,"body":133871,"description":25516,"extension":2314,"meta":135357,"navigation":453,"path":135358,"seo":135359,"stem":135360,"__hash__":135361},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133872,"toc":135349},[133873,133876,133880,133884,133895,133899,133916,133960,133993,133996,134013,134016,134019,134063,134067,134071,134074,134077,134081,134084,134095,134158,134199,134202,134217,134271,134279,134282,134293,134347,134373,134376,134389,134443,134475,134529,134552,134606,134609,134612,134619,134673,134694,134748,134751,134754,134839,134847,134904,134927,134931,134934,134952,134956,134975,135029,135067,135071,135074,135077,135099,135103,135111,135114,135119,135130,135133,135137,135151,135195,135198,135202,135205,135210,135236,135241,135318,135321,135325,135328,135331,135334,135337,135340,135343,135346],[10,133874,133870],{"id":133875},"_11-传统布局与定位体系",[14,133877,133879],{"id":133878},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[265,133881,133883],{"id":133882},"_1111-普通流标准流","11.1.1 普通流（标准流）",[3377,133885,133886,133889,133892],{},[29,133887,133888],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[29,133890,133891],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[29,133893,133894],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[265,133896,133898],{"id":133897},"_1112-浮动","11.1.2 浮动",[3377,133900,133901,133904,133907,133910,133913],{},[29,133902,133903],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[29,133905,133906],{},"浮动可以改变元素标签默认的排列方式",[29,133908,133909],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[29,133911,133912],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[29,133914,133915],{},"在使用行内块转换时盒子之间是有空隙的",[51,133917,133918],{"className":128304,"code":132770,"language":128306,"meta":57,"style":57},[59,133919,133920,133926,133936,133940,133946,133956],{"__ignoreMap":57},[79,133921,133922,133924],{"class":81,"line":82},[79,133923,132777],{"class":85},[79,133925,17732],{"class":239},[79,133927,133928,133930,133932,133934],{"class":81,"line":167},[79,133929,132784],{"class":96},[79,133931,53550],{"class":239},[79,133933,25876],{"class":96},[79,133935,3531],{"class":239},[79,133937,133938],{"class":81,"line":178},[79,133939,3801],{"class":239},[79,133941,133942,133944],{"class":81,"line":457},[79,133943,132799],{"class":85},[79,133945,17732],{"class":239},[79,133947,133948,133950,133952,133954],{"class":81,"line":462},[79,133949,132784],{"class":96},[79,133951,53550],{"class":239},[79,133953,74630],{"class":96},[79,133955,3531],{"class":239},[79,133957,133958],{"class":81,"line":474},[79,133959,3801],{"class":239},[2516,133961,133962,133970],{},[2519,133963,133964],{},[2522,133965,133966,133968],{},[2525,133967,128768],{"align":25876},[2525,133969,29621],{"align":25876},[2563,133971,133972,133979,133986],{},[2522,133973,133974,133976],{},[2568,133975,56847],{"align":25876},[2568,133977,133978],{"align":25876},"元素不浮动（默认值）",[2522,133980,133981,133983],{},[2568,133982,25876],{"align":25876},[2568,133984,133985],{"align":25876},"元素向左浮动",[2522,133987,133988,133990],{},[2568,133989,74630],{"align":25876},[2568,133991,133992],{"align":25876},"元素向右浮动",[19,133994,133995],{},"浮动重点：",[3377,133997,133998,134001,134004,134007,134010],{},[29,133999,134000],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[29,134002,134003],{},"浮动的元素会一行内显示并且元素顶部对齐",[29,134005,134006],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[29,134008,134009],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[29,134011,134012],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,134014,134015],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,134017,134018],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[51,134020,134021],{"className":128304,"code":132770,"language":128306,"meta":57,"style":57},[59,134022,134023,134029,134039,134043,134049,134059],{"__ignoreMap":57},[79,134024,134025,134027],{"class":81,"line":82},[79,134026,132777],{"class":85},[79,134028,17732],{"class":239},[79,134030,134031,134033,134035,134037],{"class":81,"line":167},[79,134032,132784],{"class":96},[79,134034,53550],{"class":239},[79,134036,25876],{"class":96},[79,134038,3531],{"class":239},[79,134040,134041],{"class":81,"line":178},[79,134042,3801],{"class":239},[79,134044,134045,134047],{"class":81,"line":457},[79,134046,132799],{"class":85},[79,134048,17732],{"class":239},[79,134050,134051,134053,134055,134057],{"class":81,"line":462},[79,134052,132784],{"class":96},[79,134054,53550],{"class":239},[79,134056,74630],{"class":96},[79,134058,3531],{"class":239},[79,134060,134061],{"class":81,"line":474},[79,134062,3801],{"class":239},[265,134064,134066],{"id":134065},"_1113-定位","11.1.3 定位",[24137,134068,134070],{"id":134069},"_11131-使用场景","11.1.3.1 使用场景",[19,134072,134073],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,134075,134076],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[24137,134078,134080],{"id":134079},"_11132-定位组成","11.1.3.2 定位组成",[19,134082,134083],{},"定位 = 定位模式 + 边偏移",[26,134085,134086],{},[29,134087,134088,134091,134092],{},[2528,134089,134090],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[2528,134093,134094],{},"定位模式",[51,134096,134098],{"className":128304,"code":134097,"language":128306,"meta":57,"style":57},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[59,134099,134100,134106,134120,134137,134154],{"__ignoreMap":57},[79,134101,134102,134104],{"class":81,"line":82},[79,134103,132152],{"class":85},[79,134105,17732],{"class":239},[79,134107,134108,134111,134113,134115,134117],{"class":81,"line":167},[79,134109,134110],{"class":96},"  position",[79,134112,53550],{"class":239},[79,134114,56874],{"class":96},[79,134116,132167],{"class":239},[79,134118,134119],{"class":2440},"\u002F* 定位模式 *\u002F\n",[79,134121,134122,134125,134127,134129,134131,134134],{"class":81,"line":178},[79,134123,134124],{"class":96},"  top",[79,134126,53550],{"class":239},[79,134128,2820],{"class":96},[79,134130,53605],{"class":243},[79,134132,134133],{"class":239},";           ",[79,134135,134136],{"class":2440},"\u002F* 边偏移：上 *\u002F\n",[79,134138,134139,134142,134144,134146,134148,134151],{"class":81,"line":457},[79,134140,134141],{"class":96},"  left",[79,134143,53550],{"class":239},[79,134145,3073],{"class":96},[79,134147,53605],{"class":243},[79,134149,134150],{"class":239},";          ",[79,134152,134153],{"class":2440},"\u002F* 边偏移：左 *\u002F\n",[79,134155,134156],{"class":81,"line":462},[79,134157,3801],{"class":239},[2516,134159,134160,134169],{},[2519,134161,134162],{},[2522,134163,134164,134166],{},[2525,134165,2531],{"align":25876},[2525,134167,134168],{"align":25876},"语义",[2563,134170,134171,134178,134185,134192],{},[2522,134172,134173,134175],{},[2568,134174,133757],{"align":25876},[2568,134176,134177],{"align":25876},"静态定位",[2522,134179,134180,134182],{},[2568,134181,56874],{"align":25876},[2568,134183,134184],{"align":25876},"相对定位",[2522,134186,134187,134189],{},[2568,134188,56941],{"align":25876},[2568,134190,134191],{"align":25876},"绝对定位",[2522,134193,134194,134196],{},[2568,134195,88338],{"align":25876},[2568,134197,134198],{"align":25876},"固定定位",[19,134200,134201],{},"（1）静态定位：",[3377,134203,134204,134215],{},[29,134205,134206,134207,134210,134211,134214],{},"静态定位是元素的 ",[2528,134208,134209],{},"默认定位方式"," ， ",[2528,134212,134213],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[29,134216,7379],{},[51,134218,134219],{"className":128304,"code":134097,"language":128306,"meta":57,"style":57},[59,134220,134221,134227,134239,134253,134267],{"__ignoreMap":57},[79,134222,134223,134225],{"class":81,"line":82},[79,134224,132152],{"class":85},[79,134226,17732],{"class":239},[79,134228,134229,134231,134233,134235,134237],{"class":81,"line":167},[79,134230,134110],{"class":96},[79,134232,53550],{"class":239},[79,134234,56874],{"class":96},[79,134236,132167],{"class":239},[79,134238,134119],{"class":2440},[79,134240,134241,134243,134245,134247,134249,134251],{"class":81,"line":178},[79,134242,134124],{"class":96},[79,134244,53550],{"class":239},[79,134246,2820],{"class":96},[79,134248,53605],{"class":243},[79,134250,134133],{"class":239},[79,134252,134136],{"class":2440},[79,134254,134255,134257,134259,134261,134263,134265],{"class":81,"line":457},[79,134256,134141],{"class":96},[79,134258,53550],{"class":239},[79,134260,3073],{"class":96},[79,134262,53605],{"class":243},[79,134264,134150],{"class":239},[79,134266,134153],{"class":2440},[79,134268,134269],{"class":81,"line":462},[79,134270,3801],{"class":239},[3377,134272,134273,134276],{},[29,134274,134275],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[29,134277,134278],{},"静态定位在布局时我们几乎不用的",[19,134280,134281],{},"（2）相对定位",[3377,134283,134284,134291],{},[29,134285,134286,134287,134290],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[2528,134288,134289],{},"原来的位置"," 来说的（自恋型）",[29,134292,7379],{},[51,134294,134295],{"className":128304,"code":134097,"language":128306,"meta":57,"style":57},[59,134296,134297,134303,134315,134329,134343],{"__ignoreMap":57},[79,134298,134299,134301],{"class":81,"line":82},[79,134300,132152],{"class":85},[79,134302,17732],{"class":239},[79,134304,134305,134307,134309,134311,134313],{"class":81,"line":167},[79,134306,134110],{"class":96},[79,134308,53550],{"class":239},[79,134310,56874],{"class":96},[79,134312,132167],{"class":239},[79,134314,134119],{"class":2440},[79,134316,134317,134319,134321,134323,134325,134327],{"class":81,"line":178},[79,134318,134124],{"class":96},[79,134320,53550],{"class":239},[79,134322,2820],{"class":96},[79,134324,53605],{"class":243},[79,134326,134133],{"class":239},[79,134328,134136],{"class":2440},[79,134330,134331,134333,134335,134337,134339,134341],{"class":81,"line":457},[79,134332,134141],{"class":96},[79,134334,53550],{"class":239},[79,134336,3073],{"class":96},[79,134338,53605],{"class":243},[79,134340,134150],{"class":239},[79,134342,134153],{"class":2440},[79,134344,134345],{"class":81,"line":462},[79,134346,3801],{"class":239},[3377,134348,134349],{},[29,134350,134351,134352,134354,134355,134357,134358,134361,134362,134365,134366,134368,134369,134372],{},"相对定位的特点：",[55826,134353],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55826,134356],{},"  ② ",[2528,134359,134360],{},"原来"," 在标准流的 ",[2528,134363,134364],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55826,134367],{},"  ③因此， ",[2528,134370,134371],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,134374,134375],{},"（3）绝对定位",[3377,134377,134378,134387],{},[29,134379,134380,134382,134383,134386],{},[2528,134381,134191],{}," 是元素在移动位置的时候，是相对于它 ",[2528,134384,134385],{},"祖先元素"," 来说的（拼爹型）",[29,134388,7379],{},[51,134390,134391],{"className":128304,"code":134097,"language":128306,"meta":57,"style":57},[59,134392,134393,134399,134411,134425,134439],{"__ignoreMap":57},[79,134394,134395,134397],{"class":81,"line":82},[79,134396,132152],{"class":85},[79,134398,17732],{"class":239},[79,134400,134401,134403,134405,134407,134409],{"class":81,"line":167},[79,134402,134110],{"class":96},[79,134404,53550],{"class":239},[79,134406,56874],{"class":96},[79,134408,132167],{"class":239},[79,134410,134119],{"class":2440},[79,134412,134413,134415,134417,134419,134421,134423],{"class":81,"line":178},[79,134414,134124],{"class":96},[79,134416,53550],{"class":239},[79,134418,2820],{"class":96},[79,134420,53605],{"class":243},[79,134422,134133],{"class":239},[79,134424,134136],{"class":2440},[79,134426,134427,134429,134431,134433,134435,134437],{"class":81,"line":457},[79,134428,134141],{"class":96},[79,134430,53550],{"class":239},[79,134432,3073],{"class":96},[79,134434,53605],{"class":243},[79,134436,134150],{"class":239},[79,134438,134153],{"class":2440},[79,134440,134441],{"class":81,"line":462},[79,134442,3801],{"class":239},[3377,134444,134445,134460,134469,134472],{},[29,134446,134447,134448,134450,134451,134453,134454,134456,134457,134459],{},"绝对定位的特点：",[55826,134449],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55826,134452],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55826,134455],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55826,134458],{},"  (4)固定定位",[29,134461,134462,134464,134465,134468],{},[2528,134463,134198],{}," 是元素 ",[2528,134466,134467],{},"固定于浏览器可视区的位置"," 。（认死理型）",[29,134470,134471],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[29,134473,134474],{},"语法:",[51,134476,134477],{"className":128304,"code":134097,"language":128306,"meta":57,"style":57},[59,134478,134479,134485,134497,134511,134525],{"__ignoreMap":57},[79,134480,134481,134483],{"class":81,"line":82},[79,134482,132152],{"class":85},[79,134484,17732],{"class":239},[79,134486,134487,134489,134491,134493,134495],{"class":81,"line":167},[79,134488,134110],{"class":96},[79,134490,53550],{"class":239},[79,134492,56874],{"class":96},[79,134494,132167],{"class":239},[79,134496,134119],{"class":2440},[79,134498,134499,134501,134503,134505,134507,134509],{"class":81,"line":178},[79,134500,134124],{"class":96},[79,134502,53550],{"class":239},[79,134504,2820],{"class":96},[79,134506,53605],{"class":243},[79,134508,134133],{"class":239},[79,134510,134136],{"class":2440},[79,134512,134513,134515,134517,134519,134521,134523],{"class":81,"line":457},[79,134514,134141],{"class":96},[79,134516,53550],{"class":239},[79,134518,3073],{"class":96},[79,134520,53605],{"class":243},[79,134522,134150],{"class":239},[79,134524,134153],{"class":2440},[79,134526,134527],{"class":81,"line":462},[79,134528,3801],{"class":239},[3377,134530,134531,134540],{},[29,134532,134533,134534,134536,134537,134539],{},"特点:",[55826,134535],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55826,134538],{},"  ②固定定位不再占有原先的位置,完全脱标",[29,134541,134542,134543,134545,134546,134548,134549,134551],{},"固定在版心位置的方法:",[55826,134544],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55826,134547],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55826,134550],{},"  实例：",[51,134553,134554],{"className":128304,"code":134097,"language":128306,"meta":57,"style":57},[59,134555,134556,134562,134574,134588,134602],{"__ignoreMap":57},[79,134557,134558,134560],{"class":81,"line":82},[79,134559,132152],{"class":85},[79,134561,17732],{"class":239},[79,134563,134564,134566,134568,134570,134572],{"class":81,"line":167},[79,134565,134110],{"class":96},[79,134567,53550],{"class":239},[79,134569,56874],{"class":96},[79,134571,132167],{"class":239},[79,134573,134119],{"class":2440},[79,134575,134576,134578,134580,134582,134584,134586],{"class":81,"line":178},[79,134577,134124],{"class":96},[79,134579,53550],{"class":239},[79,134581,2820],{"class":96},[79,134583,53605],{"class":243},[79,134585,134133],{"class":239},[79,134587,134136],{"class":2440},[79,134589,134590,134592,134594,134596,134598,134600],{"class":81,"line":457},[79,134591,134141],{"class":96},[79,134593,53550],{"class":239},[79,134595,3073],{"class":96},[79,134597,53605],{"class":243},[79,134599,134150],{"class":239},[79,134601,134153],{"class":2440},[79,134603,134604],{"class":81,"line":462},[79,134605,3801],{"class":239},[3699,134607],{"style":128160,"src":134608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134610,134611],{},"(5)粘性定位",[3377,134613,134614,134617],{},[29,134615,134616],{},"粘性定位可以被认为是相对定位和固定定位的混合",[29,134618,7379],{},[51,134620,134621],{"className":128304,"code":134097,"language":128306,"meta":57,"style":57},[59,134622,134623,134629,134641,134655,134669],{"__ignoreMap":57},[79,134624,134625,134627],{"class":81,"line":82},[79,134626,132152],{"class":85},[79,134628,17732],{"class":239},[79,134630,134631,134633,134635,134637,134639],{"class":81,"line":167},[79,134632,134110],{"class":96},[79,134634,53550],{"class":239},[79,134636,56874],{"class":96},[79,134638,132167],{"class":239},[79,134640,134119],{"class":2440},[79,134642,134643,134645,134647,134649,134651,134653],{"class":81,"line":178},[79,134644,134124],{"class":96},[79,134646,53550],{"class":239},[79,134648,2820],{"class":96},[79,134650,53605],{"class":243},[79,134652,134133],{"class":239},[79,134654,134136],{"class":2440},[79,134656,134657,134659,134661,134663,134665,134667],{"class":81,"line":457},[79,134658,134141],{"class":96},[79,134660,53550],{"class":239},[79,134662,3073],{"class":96},[79,134664,53605],{"class":243},[79,134666,134150],{"class":239},[79,134668,134153],{"class":2440},[79,134670,134671],{"class":81,"line":462},[79,134672,3801],{"class":239},[3377,134674,134675],{},[29,134676,134677,134678,134680,134681,134683,134684,134686,134687,134690,134691,134693],{},"粘性定位的特点：",[55826,134679],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55826,134682],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55826,134685],{},"  ③必须添加 top 、left、right、bottom ",[2528,134688,134689],{},"其中一个"," 才有效",[55826,134692],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[51,134695,134696],{"className":128304,"code":134097,"language":128306,"meta":57,"style":57},[59,134697,134698,134704,134716,134730,134744],{"__ignoreMap":57},[79,134699,134700,134702],{"class":81,"line":82},[79,134701,132152],{"class":85},[79,134703,17732],{"class":239},[79,134705,134706,134708,134710,134712,134714],{"class":81,"line":167},[79,134707,134110],{"class":96},[79,134709,53550],{"class":239},[79,134711,56874],{"class":96},[79,134713,132167],{"class":239},[79,134715,134119],{"class":2440},[79,134717,134718,134720,134722,134724,134726,134728],{"class":81,"line":178},[79,134719,134124],{"class":96},[79,134721,53550],{"class":239},[79,134723,2820],{"class":96},[79,134725,53605],{"class":243},[79,134727,134133],{"class":239},[79,134729,134136],{"class":2440},[79,134731,134732,134734,134736,134738,134740,134742],{"class":81,"line":457},[79,134733,134141],{"class":96},[79,134735,53550],{"class":239},[79,134737,3073],{"class":96},[79,134739,53605],{"class":243},[79,134741,134150],{"class":239},[79,134743,134153],{"class":2440},[79,134745,134746],{"class":81,"line":462},[79,134747,3801],{"class":239},[3699,134749],{"style":128160,"src":134750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134752,134753],{},"(6)总结",[2516,134755,134756,134771],{},[2519,134757,134758],{},[2522,134759,134760,134762,134765,134768],{},[2525,134761,134094],{"align":25876},[2525,134763,134764],{"align":25876},"是否脱标",[2525,134766,134767],{"align":25876},"移动位置",[2525,134769,134770],{"align":25876},"是否常用",[2563,134772,134773,134786,134800,134814,134827],{},[2522,134774,134775,134778,134780,134783],{},[2568,134776,134777],{"align":25876},"Static 静态定位",[2568,134779,106694],{"align":25876},[2568,134781,134782],{"align":25876},"不能使用边偏移",[2568,134784,134785],{"align":25876},"很少",[2522,134787,134788,134791,134794,134797],{},[2568,134789,134790],{"align":25876},"Relative 相对定位",[2568,134792,134793],{"align":25876},"否(占有位置)",[2568,134795,134796],{"align":25876},"相对于自身位置移动",[2568,134798,134799],{"align":25876},"基本单独使用",[2522,134801,134802,134805,134808,134811],{},[2568,134803,134804],{"align":25876},"Absolute 绝对定位",[2568,134806,134807],{"align":25876},"是(不占有位置)",[2568,134809,134810],{"align":25876},"带有定位的父级",[2568,134812,134813],{"align":25876},"要和定位父级元素搭配使用",[2522,134815,134816,134819,134821,134824],{},[2568,134817,134818],{"align":25876},"Fixed 固定定位",[2568,134820,134807],{"align":25876},[2568,134822,134823],{"align":25876},"浏览器可视区",[2568,134825,134826],{"align":25876},"单独使用,不需要父级",[2522,134828,134829,134832,134834,134836],{},[2568,134830,134831],{"align":25876},"Sticky 粘性定位",[2568,134833,134793],{"align":25876},[2568,134835,134823],{"align":25876},[2568,134837,134838],{"align":25876},"当前阶段少",[26,134840,134841],{"start":167},[29,134842,134843,134846],{},[2528,134844,134845],{},"边偏移"," 则决定了该元素的最终位置",[2516,134848,134849,134860],{},[2519,134850,134851],{},[2522,134852,134853,134856,134858],{},[2525,134854,134855],{"align":25876},"边偏移属性",[2525,134857,29624],{"align":25876},[2525,134859,29621],{"align":25876},[2563,134861,134862,134873,134884,134894],{},[2522,134863,134864,134867,134870],{},[2568,134865,134866],{"align":25876},"top",[2568,134868,134869],{"align":25876},"top: 80px;",[2568,134871,134872],{"align":25876},"顶端偏移量，定义元素相对于父元素上边线的距离",[2522,134874,134875,134878,134881],{},[2568,134876,134877],{"align":25876},"bottom",[2568,134879,134880],{"align":25876},"bottom: 80px ;",[2568,134882,134883],{"align":25876},"底部偏移量，定义元素相对于其父元素下边线的距离",[2522,134885,134886,134888,134891],{},[2568,134887,25876],{"align":25876},[2568,134889,134890],{"align":25876},"left: 80px ;",[2568,134892,134893],{"align":25876},"左侧偏移量，定义元素相对于其父元素左边线的距离",[2522,134895,134896,134898,134901],{},[2568,134897,74630],{"align":25876},[2568,134899,134900],{"align":25876},"right: 80px ;",[2568,134902,134903],{"align":25876},"右侧偏移量，定义元素相对于其父元素右边线的距离",[3377,134905,134906],{},[29,134907,11209,134908,134910,134911,134913,134914,134916,134917,134920,134921,134923,134924,134926],{},[55826,134909],{},"  ① ",[2528,134912,134845],{}," 需要和 ",[2528,134915,134094],{}," 联合使用， ",[2528,134918,134919],{},"单独使用无效"," ；",[55826,134922],{},"  ②top和bottom不要同时使用",[55826,134925],{},"  ③left和right不要同时使用",[24137,134928,134930],{"id":134929},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134932,134933],{},"子级是绝对定位的话，父级要用相对定位",[3377,134935,134936,134939,134942,134945],{},[29,134937,134938],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[29,134940,134941],{},"父盒子需要加定位限制子盒子在父盒子内显示",[29,134943,134944],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[29,134946,134947,134948,134951],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[2528,134949,134950],{},"子绝父绝"," 也会遇到",[24137,134953,134955],{"id":134954},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[3377,134957,134958,134973],{},[29,134959,134960,134961,134964,134965,134968,134969,134972],{},"在使用 ",[2528,134962,134963],{},"定位"," 布局时，可能会 ",[2528,134966,134967],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[2528,134970,134971],{},"z-index"," 来控制盒子的前后次序 (z轴)",[29,134974,7379],{},[51,134976,134977],{"className":128304,"code":134097,"language":128306,"meta":57,"style":57},[59,134978,134979,134985,134997,135011,135025],{"__ignoreMap":57},[79,134980,134981,134983],{"class":81,"line":82},[79,134982,132152],{"class":85},[79,134984,17732],{"class":239},[79,134986,134987,134989,134991,134993,134995],{"class":81,"line":167},[79,134988,134110],{"class":96},[79,134990,53550],{"class":239},[79,134992,56874],{"class":96},[79,134994,132167],{"class":239},[79,134996,134119],{"class":2440},[79,134998,134999,135001,135003,135005,135007,135009],{"class":81,"line":178},[79,135000,134124],{"class":96},[79,135002,53550],{"class":239},[79,135004,2820],{"class":96},[79,135006,53605],{"class":243},[79,135008,134133],{"class":239},[79,135010,134136],{"class":2440},[79,135012,135013,135015,135017,135019,135021,135023],{"class":81,"line":457},[79,135014,134141],{"class":96},[79,135016,53550],{"class":239},[79,135018,3073],{"class":96},[79,135020,53605],{"class":243},[79,135022,134150],{"class":239},[79,135024,134153],{"class":2440},[79,135026,135027],{"class":81,"line":462},[79,135028,3801],{"class":239},[3377,135030,135031],{},[29,135032,135033,135034,134910,135036,135038,135039,129467,135042,1601,135045,135047,135048,135050,135051,135054,135055,134920,135058,135060,135061,135064,135066],{},"z-index的特性",[55826,135035],{},[2528,135037,128768],{}," ： ",[2528,135040,135041],{},"正整数",[2528,135043,135044],{},"负整数",[2528,135046,1030],{}," ，默认值是 0，数值越大，盒子越靠上；",[55826,135049],{},"  ②如果 ",[2528,135052,135053],{},"属性值相同"," ，则按照书写顺序， ",[2528,135056,135057],{},"后来居上",[55826,135059],{},"  ③数字后面 ",[2528,135062,135063],{},"不能加单位",[55826,135065],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[24137,135068,135070],{"id":135069},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,135072,135073],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,135075,135076],{},"方法:",[3377,135078,135079,135089],{},[29,135080,135081,135082,135085,135086],{},"left: 50%; 让 ",[2528,135083,135084],{},"盒子的左侧"," 移动到 ",[2528,135087,135088],{},"父级元素的水平中心位置",[29,135090,135091,135092,135095,135096],{},"margin-left: -100px; 让盒子 ",[2528,135093,135094],{},"向左"," 移动 ",[2528,135097,135098],{},"自身宽度的一半",[24137,135100,135102],{"id":135101},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[26,135104,135105,135108],{},[29,135106,135107],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[29,135109,135110],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,135112,135113],{},"也就是说绝对定位和固定定位和浮动类似",[26,135115,135116],{"start":178},[29,135117,135118],{},"display 是显示模式， 可以改变显示模式有以下方式:",[3377,135120,135121,135124,135127],{},[29,135122,135123],{},"可以用inline-block 转换为行内块",[29,135125,135126],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[29,135128,135129],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135131,135132],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[24137,135134,135136],{"id":135135},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[26,135138,135139,135142,135145,135148],{},[29,135140,135141],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[29,135143,135144],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[29,135146,135147],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[29,135149,135150],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[51,135152,135153],{"className":128304,"code":132770,"language":128306,"meta":57,"style":57},[59,135154,135155,135161,135171,135175,135181,135191],{"__ignoreMap":57},[79,135156,135157,135159],{"class":81,"line":82},[79,135158,132777],{"class":85},[79,135160,17732],{"class":239},[79,135162,135163,135165,135167,135169],{"class":81,"line":167},[79,135164,132784],{"class":96},[79,135166,53550],{"class":239},[79,135168,25876],{"class":96},[79,135170,3531],{"class":239},[79,135172,135173],{"class":81,"line":178},[79,135174,3801],{"class":239},[79,135176,135177,135179],{"class":81,"line":457},[79,135178,132799],{"class":85},[79,135180,17732],{"class":239},[79,135182,135183,135185,135187,135189],{"class":81,"line":462},[79,135184,132784],{"class":96},[79,135186,53550],{"class":239},[79,135188,74630],{"class":96},[79,135190,3531],{"class":239},[79,135192,135193],{"class":81,"line":474},[79,135194,3801],{"class":239},[3699,135196],{"style":128160,"src":135197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[24137,135199,135201],{"id":135200},"_11138-轮播图","11.1.3.8 轮播图",[3699,135203],{"style":128160,"src":135204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[26,135206,135207],{},[29,135208,135209],{},"制作顺序:",[3377,135211,135212,135215,135218,135227],{},[29,135213,135214],{},"大盒子我们类名为： tb-promo 淘宝广告",[29,135216,135217],{},"里面先放一张图片",[29,135219,135220,135221,135223,135224,135226],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55826,135222],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55826,135225],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[29,135228,135229,135230,135232,135233,135235],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55826,135231],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55826,135234],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[26,135237,135238],{"start":167},[29,135239,135240],{},"代码模块",[51,135242,135244],{"className":128304,"code":135243,"language":128306,"meta":57,"style":57},"\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",[59,135245,135246,135251,135258,135268,135278,135288,135292,135297,135304,135314],{"__ignoreMap":57},[79,135247,135248],{"class":81,"line":82},[79,135249,135250],{"class":2440},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[79,135252,135253,135256],{"class":81,"line":167},[79,135254,135255],{"class":85},".son",[79,135257,17732],{"class":239},[79,135259,135260,135262,135264,135266],{"class":81,"line":178},[79,135261,134110],{"class":96},[79,135263,53550],{"class":239},[79,135265,56941],{"class":96},[79,135267,3531],{"class":239},[79,135269,135270,135272,135274,135276],{"class":81,"line":457},[79,135271,134124],{"class":96},[79,135273,53550],{"class":239},[79,135275,1030],{"class":96},[79,135277,3531],{"class":239},[79,135279,135280,135282,135284,135286],{"class":81,"line":462},[79,135281,134141],{"class":96},[79,135283,53550],{"class":239},[79,135285,1030],{"class":96},[79,135287,3531],{"class":239},[79,135289,135290],{"class":81,"line":474},[79,135291,3801],{"class":239},[79,135293,135294],{"class":81,"line":480},[79,135295,135296],{"class":2440},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[79,135298,135299,135302],{"class":81,"line":486},[79,135300,135301],{"class":85},".father",[79,135303,17732],{"class":239},[79,135305,135306,135308,135310,135312],{"class":81,"line":491},[79,135307,134110],{"class":96},[79,135309,53550],{"class":239},[79,135311,56874],{"class":96},[79,135313,3531],{"class":239},[79,135315,135316],{"class":81,"line":497},[79,135317,3801],{"class":239},[19,135319,135320],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[265,135322,135324],{"id":135323},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3699,135326],{"style":128160,"src":135327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,135329,135330],{},"✨ 黄金口诀：",[19,135332,135333],{},"\"TOP正下负上，LEFT正右负左\"",[19,135335,135336],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,135338,135339],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,135341,135342],{},"✨ 简单记：",[19,135344,135345],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[2287,135347,135348],{},"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":57,"searchDepth":167,"depth":167,"links":135350},[135351],{"id":133878,"depth":167,"text":133879,"children":135352},[135353,135354,135355,135356],{"id":133882,"depth":178,"text":133883},{"id":133897,"depth":178,"text":133898},{"id":134065,"depth":178,"text":134066},{"id":135323,"depth":178,"text":135324},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133870,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135363,"title":135364,"body":135365,"description":25516,"extension":2314,"meta":136788,"navigation":453,"path":136789,"seo":136790,"stem":136791,"__hash__":136792},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135366,"toc":136767},[135367,135370,135374,135382,135386,135391,135399,135411,135415,135420,135428,135439,135443,135448,135489,135497,135501,135504,135507,135510,135604,135607,135701,135704,135798,135801,135804,135839,135842,135845,135875,135878,135881,135884,135887,135890,135893,135896,135966,135969,135973,135977,136018,136022,136028,136031,136034,136038,136041,136044,136047,136128,136131,136134,136138,136142,136145,136148,136151,136154,136157,136163,136172,136176,136195,136199,136209,136212,136215,136218,136221,136224,136227,136230,136233,136242,136246,136255,136258,136263,136316,136321,136487,136490,136493,136498,136501,136504,136507,136510,136515,136663,136666,136669,136674,136677,136682,136716,136719,136722,136726,136729,136736,136739,136742,136745,136748,136751,136754,136757,136761,136764],[10,135368,135364],{"id":135369},"_12-显示隐藏与图形资源",[14,135371,135373],{"id":135372},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[3377,135375,135376,135379],{},[29,135377,135378],{},"目的:让一个元素在页面中消失或者显示出来",[29,135380,135381],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[265,135383,135385],{"id":135384},"_1211-display-显示","12.1.1 display 显示",[26,135387,135388],{},[29,135389,135390],{},"display 设置或检索对象是否及如何显示",[3377,135392,135393,135396],{},[29,135394,135395],{},"display: none;隐藏对象",[29,135397,135398],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[26,135400,135401,135408],{"start":167},[29,135402,135403,135404,135407],{},"特点： display 隐藏元素后， ",[2528,135405,135406],{},"不再占"," 有原来的位置",[29,135409,135410],{},"在js中使用非常的广泛",[265,135412,135414],{"id":135413},"_1212-visibility可见性","12.1.2 visibility可见性",[26,135416,135417],{},[29,135418,135419],{},"visibility 属性用于指定一个元素应可见还是隐藏",[3377,135421,135422,135425],{},[29,135423,135424],{},"visibility： visible；元素可见",[29,135426,135427],{},"visibility：hidden；元素隐藏",[26,135429,135430,135433,135436],{"start":167},[29,135431,135432],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[29,135434,135435],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[29,135437,135438],{},"隐藏后继续占有原有位置",[265,135440,135442],{"id":135441},"_1213-overflow溢出","12.1.3 overflow溢出",[3377,135444,135445],{},[29,135446,135447],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[2516,135449,135450,135458],{},[2519,135451,135452],{},[2522,135453,135454,135456],{},[2525,135455,128768],{"align":25876},[2525,135457,29621],{"align":25876},[2563,135459,135460,135468,135475,135482],{},[2522,135461,135462,135465],{},[2568,135463,135464],{"align":25876},"visible",[2568,135466,135467],{"align":25876},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[2522,135469,135470,135472],{},[2568,135471,63824],{"align":25876},[2568,135473,135474],{"align":25876},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[2522,135476,135477,135479],{},[2568,135478,130724],{"align":25876},[2568,135480,135481],{"align":25876},"不管超出内容否，总是显示滚动条",[2522,135483,135484,135486],{},[2568,135485,74771],{"align":25876},[2568,135487,135488],{"align":25876},"超出自动显示滚动条，不超出不显示滚动条",[3377,135490,135491,135494],{},[29,135492,135493],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[29,135495,135496],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[265,135498,135500],{"id":135499},"_1214-案例收获","12.1.4 案例收获",[3699,135502],{"style":128160,"src":135503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135505,135506],{},"问题：没做出来动态效果，使用hover没实现",[19,135508,135509],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[51,135511,135512],{"className":128304,"code":133736,"language":128306,"meta":57,"style":57},[59,135513,135514,135518,135532,135536,135550,135554,135568,135572,135586,135590],{"__ignoreMap":57},[79,135515,135516],{"class":81,"line":82},[79,135517,133743],{"class":2440},[79,135519,135520,135522,135524,135526,135528,135530],{"class":81,"line":167},[79,135521,133748],{"class":85},[79,135523,81915],{"class":239},[79,135525,130664],{"class":96},[79,135527,53550],{"class":239},[79,135529,133757],{"class":96},[79,135531,131234],{"class":239},[79,135533,135534],{"class":81,"line":178},[79,135535,133764],{"class":2440},[79,135537,135538,135540,135542,135544,135546,135548],{"class":81,"line":457},[79,135539,133769],{"class":85},[79,135541,81915],{"class":239},[79,135543,130664],{"class":96},[79,135545,53550],{"class":239},[79,135547,56874],{"class":96},[79,135549,131234],{"class":239},[79,135551,135552],{"class":81,"line":462},[79,135553,133784],{"class":2440},[79,135555,135556,135558,135560,135562,135564,135566],{"class":81,"line":474},[79,135557,133789],{"class":85},[79,135559,81915],{"class":239},[79,135561,130664],{"class":96},[79,135563,53550],{"class":239},[79,135565,56941],{"class":96},[79,135567,131234],{"class":239},[79,135569,135570],{"class":81,"line":480},[79,135571,133804],{"class":2440},[79,135573,135574,135576,135578,135580,135582,135584],{"class":81,"line":486},[79,135575,133809],{"class":85},[79,135577,81915],{"class":239},[79,135579,130664],{"class":96},[79,135581,53550],{"class":239},[79,135583,88338],{"class":96},[79,135585,131234],{"class":239},[79,135587,135588],{"class":81,"line":491},[79,135589,133824],{"class":2440},[79,135591,135592,135594,135596,135598,135600,135602],{"class":81,"line":497},[79,135593,133829],{"class":85},[79,135595,81915],{"class":239},[79,135597,130664],{"class":96},[79,135599,53550],{"class":239},[79,135601,133838],{"class":96},[79,135603,131234],{"class":239},[19,135605,135606],{},"完整代码：",[51,135608,135609],{"className":128304,"code":133736,"language":128306,"meta":57,"style":57},[59,135610,135611,135615,135629,135633,135647,135651,135665,135669,135683,135687],{"__ignoreMap":57},[79,135612,135613],{"class":81,"line":82},[79,135614,133743],{"class":2440},[79,135616,135617,135619,135621,135623,135625,135627],{"class":81,"line":167},[79,135618,133748],{"class":85},[79,135620,81915],{"class":239},[79,135622,130664],{"class":96},[79,135624,53550],{"class":239},[79,135626,133757],{"class":96},[79,135628,131234],{"class":239},[79,135630,135631],{"class":81,"line":178},[79,135632,133764],{"class":2440},[79,135634,135635,135637,135639,135641,135643,135645],{"class":81,"line":457},[79,135636,133769],{"class":85},[79,135638,81915],{"class":239},[79,135640,130664],{"class":96},[79,135642,53550],{"class":239},[79,135644,56874],{"class":96},[79,135646,131234],{"class":239},[79,135648,135649],{"class":81,"line":462},[79,135650,133784],{"class":2440},[79,135652,135653,135655,135657,135659,135661,135663],{"class":81,"line":474},[79,135654,133789],{"class":85},[79,135656,81915],{"class":239},[79,135658,130664],{"class":96},[79,135660,53550],{"class":239},[79,135662,56941],{"class":96},[79,135664,131234],{"class":239},[79,135666,135667],{"class":81,"line":480},[79,135668,133804],{"class":2440},[79,135670,135671,135673,135675,135677,135679,135681],{"class":81,"line":486},[79,135672,133809],{"class":85},[79,135674,81915],{"class":239},[79,135676,130664],{"class":96},[79,135678,53550],{"class":239},[79,135680,88338],{"class":96},[79,135682,131234],{"class":239},[79,135684,135685],{"class":81,"line":491},[79,135686,133824],{"class":2440},[79,135688,135689,135691,135693,135695,135697,135699],{"class":81,"line":497},[79,135690,133829],{"class":85},[79,135692,81915],{"class":239},[79,135694,130664],{"class":96},[79,135696,53550],{"class":239},[79,135698,133838],{"class":96},[79,135700,131234],{"class":239},[19,135702,135703],{},"分布思路重点详解：",[51,135705,135706],{"className":128304,"code":133736,"language":128306,"meta":57,"style":57},[59,135707,135708,135712,135726,135730,135744,135748,135762,135766,135780,135784],{"__ignoreMap":57},[79,135709,135710],{"class":81,"line":82},[79,135711,133743],{"class":2440},[79,135713,135714,135716,135718,135720,135722,135724],{"class":81,"line":167},[79,135715,133748],{"class":85},[79,135717,81915],{"class":239},[79,135719,130664],{"class":96},[79,135721,53550],{"class":239},[79,135723,133757],{"class":96},[79,135725,131234],{"class":239},[79,135727,135728],{"class":81,"line":178},[79,135729,133764],{"class":2440},[79,135731,135732,135734,135736,135738,135740,135742],{"class":81,"line":457},[79,135733,133769],{"class":85},[79,135735,81915],{"class":239},[79,135737,130664],{"class":96},[79,135739,53550],{"class":239},[79,135741,56874],{"class":96},[79,135743,131234],{"class":239},[79,135745,135746],{"class":81,"line":462},[79,135747,133784],{"class":2440},[79,135749,135750,135752,135754,135756,135758,135760],{"class":81,"line":474},[79,135751,133789],{"class":85},[79,135753,81915],{"class":239},[79,135755,130664],{"class":96},[79,135757,53550],{"class":239},[79,135759,56941],{"class":96},[79,135761,131234],{"class":239},[79,135763,135764],{"class":81,"line":480},[79,135765,133804],{"class":2440},[79,135767,135768,135770,135772,135774,135776,135778],{"class":81,"line":486},[79,135769,133809],{"class":85},[79,135771,81915],{"class":239},[79,135773,130664],{"class":96},[79,135775,53550],{"class":239},[79,135777,88338],{"class":96},[79,135779,131234],{"class":239},[79,135781,135782],{"class":81,"line":491},[79,135783,133824],{"class":2440},[79,135785,135786,135788,135790,135792,135794,135796],{"class":81,"line":497},[79,135787,133829],{"class":85},[79,135789,81915],{"class":239},[79,135791,130664],{"class":96},[79,135793,53550],{"class":239},[79,135795,133838],{"class":96},[79,135797,131234],{"class":239},[3699,135799],{"style":128160,"src":135800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135802,135803],{},"图片太大，盒子太小，此时需要修改图片的大小",[51,135805,135807],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[59,135808,135809],{"__ignoreMap":57},[79,135810,135811,135813,135815,135817,135819,135822,135824,135826,135829,135832,135834,135837],{"class":81,"line":82},[79,135812,392],{"class":239},[79,135814,3699],{"class":395},[79,135816,57349],{"class":85},[79,135818,244],{"class":239},[79,135820,135821],{"class":89},"\"images\u002Fpic.jpg\"",[79,135823,57357],{"class":85},[79,135825,244],{"class":239},[79,135827,135828],{"class":89},"\"描述文字\"",[79,135830,135831],{"class":85}," title",[79,135833,244],{"class":239},[79,135835,135836],{"class":89},"\"悬停提示\"",[79,135838,53420],{"class":239},[3699,135840],{"style":128160,"src":135841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135843,135844],{},"制造遮罩层",[51,135846,135847],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,135848,135849],{"__ignoreMap":57},[79,135850,135851,135853,135855,135857,135859,135861,135863,135865,135867,135869,135871,135873],{"class":81,"line":82},[79,135852,392],{"class":239},[79,135854,3699],{"class":395},[79,135856,57349],{"class":85},[79,135858,244],{"class":239},[79,135860,135821],{"class":89},[79,135862,57357],{"class":85},[79,135864,244],{"class":239},[79,135866,135828],{"class":89},[79,135868,135831],{"class":85},[79,135870,244],{"class":239},[79,135872,135836],{"class":89},[79,135874,53420],{"class":239},[19,135876,135877],{},"此时是这样的为标准流",[3699,135879],{"style":128160,"src":135880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135882,135883],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135885,135886],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135888,135889],{},"让他在中间，用center(background-position)",[19,135891,135892],{},"将需要变的尽可能放到一个盒子中",[19,135894,135895],{},"放大盒子上内部盒子发生变化",[51,135897,135899],{"className":128304,"code":135898,"language":128306,"meta":57,"style":57},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[59,135900,135901,135907,135917,135921,135928,135938,135950,135962],{"__ignoreMap":57},[79,135902,135903,135905],{"class":81,"line":82},[79,135904,129371],{"class":85},[79,135906,17732],{"class":239},[79,135908,135909,135911,135913,135915],{"class":81,"line":167},[79,135910,134110],{"class":96},[79,135912,53550],{"class":239},[79,135914,56874],{"class":96},[79,135916,3531],{"class":239},[79,135918,135919],{"class":81,"line":178},[79,135920,3801],{"class":239},[79,135922,135923,135926],{"class":81,"line":457},[79,135924,135925],{"class":85},".child",[79,135927,17732],{"class":239},[79,135929,135930,135932,135934,135936],{"class":81,"line":462},[79,135931,134110],{"class":96},[79,135933,53550],{"class":239},[79,135935,56941],{"class":96},[79,135937,3531],{"class":239},[79,135939,135940,135942,135944,135946,135948],{"class":81,"line":474},[79,135941,134124],{"class":96},[79,135943,53550],{"class":239},[79,135945,3029],{"class":96},[79,135947,1137],{"class":243},[79,135949,3531],{"class":239},[79,135951,135952,135954,135956,135958,135960],{"class":81,"line":480},[79,135953,134141],{"class":96},[79,135955,53550],{"class":239},[79,135957,3029],{"class":96},[79,135959,1137],{"class":243},[79,135961,3531],{"class":239},[79,135963,135964],{"class":81,"line":486},[79,135965,3801],{"class":239},[19,135967,135968],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135970,135972],{"id":135971},"_122-精灵图","12.2 精灵图",[265,135974,135976],{"id":135975},"_1221-理解","12.2.1 理解",[26,135978,135979,135997],{},[29,135980,135981,135982,134210,135985,135988,135989,135992,135993,135996],{},"目的： ",[2528,135983,135984],{},"为了有效地减少服务器接收和发送请求的次数",[2528,135986,135987],{},"提高"," 页面的 ",[2528,135990,135991],{},"加载速度"," ，出现了 ",[2528,135994,135995],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[29,135998,135999,136000,136002,136003,136005,136006,136008,136009,136011,136012,136014,136015,136017],{},"使用精灵图核心：",[55826,136001],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55826,136004],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55826,136007],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55826,136010],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55826,136013],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55826,136016],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[265,136019,136021],{"id":136020},"_1222-扒图","12.2.2 扒图",[51,136023,136026],{"className":136024,"code":136025,"language":56},[54],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[59,136027,136025],{"__ignoreMap":57},[3699,136029],{"style":128160,"src":136030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3699,136032],{"style":128160,"src":136033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[265,136035,136037],{"id":136036},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3699,136039],{"style":128160,"src":136040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,136042,136043],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3699,136045],{"style":128160,"src":136046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[51,136048,136050],{"className":128304,"code":136049,"language":128306,"meta":57,"style":57},"\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",[59,136051,136052,136057,136064,136076,136088,136107,136124],{"__ignoreMap":57},[79,136053,136054],{"class":81,"line":82},[79,136055,136056],{"class":2440},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[79,136058,136059,136062],{"class":81,"line":167},[79,136060,136061],{"class":85},".icon",[79,136063,17732],{"class":239},[79,136065,136066,136068,136070,136072,136074],{"class":81,"line":178},[79,136067,72676],{"class":96},[79,136069,53550],{"class":239},[79,136071,3073],{"class":96},[79,136073,53605],{"class":243},[79,136075,3531],{"class":239},[79,136077,136078,136080,136082,136084,136086],{"class":81,"line":457},[79,136079,72896],{"class":96},[79,136081,53550],{"class":239},[79,136083,3073],{"class":96},[79,136085,53605],{"class":243},[79,136087,3531],{"class":239},[79,136089,136090,136092,136094,136096,136098,136101,136103,136105],{"class":81,"line":462},[79,136091,72719],{"class":96},[79,136093,53550],{"class":239},[79,136095,63836],{"class":96},[79,136097,685],{"class":239},[79,136099,136100],{"class":7412},"sprites.png",[79,136102,15876],{"class":239},[79,136104,63846],{"class":96},[79,136106,3531],{"class":239},[79,136108,136109,136111,136113,136115,136117,136120,136122],{"class":81,"line":474},[79,136110,130564],{"class":96},[79,136112,53550],{"class":239},[79,136114,53876],{"class":96},[79,136116,53605],{"class":243},[79,136118,136119],{"class":96}," -20",[79,136121,53605],{"class":243},[79,136123,3531],{"class":239},[79,136125,136126],{"class":81,"line":480},[79,136127,3801],{"class":239},[3699,136129],{"style":128160,"src":136130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136132,136133],{},"在前端中坐标轴的正方向是右和下",[14,136135,136137],{"id":136136},"_123-字体图标","12.3 字体图标",[265,136139,136141],{"id":136140},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136143,136144],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136146,136147],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136149,136150],{},"1.图片文件还是比较大的。",[19,136152,136153],{},"2.图片本身放大和缩小会失真。",[19,136155,136156],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136158,136159,136160,27875],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[2528,136161,136162],{},"字体图标 iconfont",[19,136164,136165,136168,136169,1604],{},[2528,136166,136167],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[2528,136170,136171],{},"展示的是图标，本质属于字体",[265,136173,136175],{"id":136174},"_1232-字体图标的优点","12.3.2 字体图标的优点",[3377,136177,136178,136183,136186,136189,136192],{},[29,136179,136180,136182],{},[2528,136181,28011],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[29,136184,136185],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[29,136187,136188],{},"兼容性：几乎支持所有的浏览器，请放心使用",[29,136190,136191],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[29,136193,136194],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[265,136196,136198],{"id":136197},"_1233-字体库下载网站","12.3.3 字体库下载网站",[3377,136200,136201],{},[29,136202,136203,136204],{},"icomoon字体库：",[2614,136205,136208],{"href":136206,"rel":136207},"http:\u002F\u002Ficomoon.io\u002F",[26001],"http:\u002F\u002Ficomoon.io",[19,136210,136211],{},"进去之后点icomoon app",[3699,136213],{"style":128160,"src":136214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,136216,136217],{},"可以对其编辑：",[3699,136219],{"style":128160,"src":136220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,136222,136223],{},"生成字体：",[3699,136225],{"style":128160,"src":136226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,136228,136229],{},"下载：",[3699,136231],{"style":128160,"src":136232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[3377,136234,136235],{},[29,136236,136237,136238],{},"阿里iconfont字体库： ",[2614,136239,136240],{"href":136240,"rel":136241},"http:\u002F\u002Fwww.iconfont.cn\u002F",[26001],[265,136243,136245],{"id":136244},"_1234-字体图标的引入","12.3.4 字体图标的引入",[26,136247,136248],{},[29,136249,136250,136251,136254],{},"把下载包里面的 ",[2528,136252,136253],{},"fonts"," 文件夹放入页面根目录下",[3699,136256],{"style":128160,"src":136257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[26,136259,136260],{"start":167},[29,136261,136262],{},"字体文件格式",[2516,136264,136265,136274],{},[2519,136266,136267],{},[2522,136268,136269,136272],{},[2525,136270,136271],{"align":25876},"格式",[2525,136273,25880],{"align":25876},[2563,136275,136276,136286,136296,136306],{},[2522,136277,136278,136283],{},[2568,136279,136280],{"align":25876},[2528,136281,136282],{},".ttf",[2568,136284,136285],{"align":25876},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[2522,136287,136288,136293],{},[2568,136289,136290],{"align":25876},[2528,136291,136292],{},".woff",[2568,136294,136295],{"align":25876},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[2522,136297,136298,136303],{},[2568,136299,136300],{"align":25876},[2528,136301,136302],{},".eot",[2568,136304,136305],{"align":25876},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[2522,136307,136308,136313],{},[2568,136309,136310],{"align":25876},[2528,136311,136312],{},"svg",[2568,136314,136315],{"align":25876},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[26,136317,136318],{"start":178},[29,136319,136320],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[51,136322,136324],{"className":128304,"code":136323,"language":128306,"meta":57,"style":57},"\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",[59,136325,136326,136331,136338,136350,136366,136391,136412,136432,136452,136456,136462,136472,136483],{"__ignoreMap":57},[79,136327,136328],{"class":81,"line":82},[79,136329,136330],{"class":2440},"\u002F* 引入字体图标 *\u002F\n",[79,136332,136333,136336],{"class":81,"line":167},[79,136334,136335],{"class":243},"@font-face",[79,136337,17732],{"class":239},[79,136339,136340,136343,136345,136348],{"class":81,"line":178},[79,136341,136342],{"class":96},"  font-family",[79,136344,53550],{"class":239},[79,136346,136347],{"class":89},"'icomoon'",[79,136349,3531],{"class":239},[79,136351,136352,136355,136357,136359,136361,136364],{"class":81,"line":457},[79,136353,136354],{"class":96},"  src",[79,136356,53550],{"class":239},[79,136358,63836],{"class":96},[79,136360,685],{"class":239},[79,136362,136363],{"class":89},"'fonts\u002Ficomoon.eot'",[79,136365,4925],{"class":239},[79,136367,136368,136370,136372,136374,136376,136379,136381,136384,136386,136389],{"class":81,"line":462},[79,136369,136354],{"class":96},[79,136371,53550],{"class":239},[79,136373,63836],{"class":96},[79,136375,685],{"class":239},[79,136377,136378],{"class":89},"'fonts\u002Ficomoon.eot?#iefix'",[79,136380,15876],{"class":239},[79,136382,136383],{"class":96},"format",[79,136385,685],{"class":239},[79,136387,136388],{"class":89},"'embedded-opentype'",[79,136390,40161],{"class":239},[79,136392,136393,136396,136398,136401,136403,136405,136407,136410],{"class":81,"line":474},[79,136394,136395],{"class":96},"       url",[79,136397,685],{"class":239},[79,136399,136400],{"class":89},"'fonts\u002Ficomoon.woff'",[79,136402,15876],{"class":239},[79,136404,136383],{"class":96},[79,136406,685],{"class":239},[79,136408,136409],{"class":89},"'woff'",[79,136411,40161],{"class":239},[79,136413,136414,136416,136418,136421,136423,136425,136427,136430],{"class":81,"line":480},[79,136415,136395],{"class":96},[79,136417,685],{"class":239},[79,136419,136420],{"class":89},"'fonts\u002Ficomoon.ttf'",[79,136422,15876],{"class":239},[79,136424,136383],{"class":96},[79,136426,685],{"class":239},[79,136428,136429],{"class":89},"'truetype'",[79,136431,40161],{"class":239},[79,136433,136434,136436,136438,136441,136443,136445,136447,136450],{"class":81,"line":486},[79,136435,136395],{"class":96},[79,136437,685],{"class":239},[79,136439,136440],{"class":89},"'fonts\u002Ficomoon.svg#icomoon'",[79,136442,15876],{"class":239},[79,136444,136383],{"class":96},[79,136446,685],{"class":239},[79,136448,136449],{"class":89},"'svg'",[79,136451,4925],{"class":239},[79,136453,136454],{"class":81,"line":491},[79,136455,3801],{"class":239},[79,136457,136458,136460],{"class":81,"line":497},[79,136459,136061],{"class":85},[79,136461,17732],{"class":239},[79,136463,136464,136466,136468,136470],{"class":81,"line":503},[79,136465,136342],{"class":96},[79,136467,53550],{"class":239},[79,136469,136347],{"class":89},[79,136471,3531],{"class":239},[79,136473,136474,136477,136479,136481],{"class":81,"line":509},[79,136475,136476],{"class":96},"  font-style",[79,136478,53550],{"class":239},[79,136480,65951],{"class":96},[79,136482,3531],{"class":239},[79,136484,136485],{"class":81,"line":514},[79,136486,3801],{"class":239},[19,136488,136489],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3699,136491],{"style":128160,"src":136492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[26,136494,136495],{"start":457},[29,136496,136497],{},"添加字体",[3699,136499],{"style":128160,"src":136500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136502,136503],{},"复制：",[3699,136505],{"style":128160,"src":136506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136508,136509],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[26,136511,136512],{"start":462},[29,136513,136514],{},"代码展示：",[51,136516,136517],{"className":128304,"code":136323,"language":128306,"meta":57,"style":57},[59,136518,136519,136523,136529,136539,136553,136575,136593,136611,136629,136633,136639,136649,136659],{"__ignoreMap":57},[79,136520,136521],{"class":81,"line":82},[79,136522,136330],{"class":2440},[79,136524,136525,136527],{"class":81,"line":167},[79,136526,136335],{"class":243},[79,136528,17732],{"class":239},[79,136530,136531,136533,136535,136537],{"class":81,"line":178},[79,136532,136342],{"class":96},[79,136534,53550],{"class":239},[79,136536,136347],{"class":89},[79,136538,3531],{"class":239},[79,136540,136541,136543,136545,136547,136549,136551],{"class":81,"line":457},[79,136542,136354],{"class":96},[79,136544,53550],{"class":239},[79,136546,63836],{"class":96},[79,136548,685],{"class":239},[79,136550,136363],{"class":89},[79,136552,4925],{"class":239},[79,136554,136555,136557,136559,136561,136563,136565,136567,136569,136571,136573],{"class":81,"line":462},[79,136556,136354],{"class":96},[79,136558,53550],{"class":239},[79,136560,63836],{"class":96},[79,136562,685],{"class":239},[79,136564,136378],{"class":89},[79,136566,15876],{"class":239},[79,136568,136383],{"class":96},[79,136570,685],{"class":239},[79,136572,136388],{"class":89},[79,136574,40161],{"class":239},[79,136576,136577,136579,136581,136583,136585,136587,136589,136591],{"class":81,"line":474},[79,136578,136395],{"class":96},[79,136580,685],{"class":239},[79,136582,136400],{"class":89},[79,136584,15876],{"class":239},[79,136586,136383],{"class":96},[79,136588,685],{"class":239},[79,136590,136409],{"class":89},[79,136592,40161],{"class":239},[79,136594,136595,136597,136599,136601,136603,136605,136607,136609],{"class":81,"line":480},[79,136596,136395],{"class":96},[79,136598,685],{"class":239},[79,136600,136420],{"class":89},[79,136602,15876],{"class":239},[79,136604,136383],{"class":96},[79,136606,685],{"class":239},[79,136608,136429],{"class":89},[79,136610,40161],{"class":239},[79,136612,136613,136615,136617,136619,136621,136623,136625,136627],{"class":81,"line":486},[79,136614,136395],{"class":96},[79,136616,685],{"class":239},[79,136618,136440],{"class":89},[79,136620,15876],{"class":239},[79,136622,136383],{"class":96},[79,136624,685],{"class":239},[79,136626,136449],{"class":89},[79,136628,4925],{"class":239},[79,136630,136631],{"class":81,"line":491},[79,136632,3801],{"class":239},[79,136634,136635,136637],{"class":81,"line":497},[79,136636,136061],{"class":85},[79,136638,17732],{"class":239},[79,136640,136641,136643,136645,136647],{"class":81,"line":503},[79,136642,136342],{"class":96},[79,136644,53550],{"class":239},[79,136646,136347],{"class":89},[79,136648,3531],{"class":239},[79,136650,136651,136653,136655,136657],{"class":81,"line":509},[79,136652,136476],{"class":96},[79,136654,53550],{"class":239},[79,136656,65951],{"class":96},[79,136658,3531],{"class":239},[79,136660,136661],{"class":81,"line":514},[79,136662,3801],{"class":239},[3699,136664],{"style":128160,"src":136665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136667,136668],{},"更加细节展示：",[26,136670,136671],{},[29,136672,136673],{},"html 标签内添加小图标",[3699,136675],{"style":128160,"src":136676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[26,136678,136679],{"start":167},[29,136680,136681],{},"给标签定义字体",[51,136683,136684],{"className":129051,"code":132408,"language":129053,"meta":57,"style":57},[59,136685,136686,136690,136704,136708],{"__ignoreMap":57},[79,136687,136688],{"class":81,"line":82},[79,136689,132415],{"class":2440},[79,136691,136692,136694,136696,136698,136700,136702],{"class":81,"line":167},[79,136693,392],{"class":239},[79,136695,53724],{"class":395},[79,136697,55596],{"class":85},[79,136699,244],{"class":239},[79,136701,132428],{"class":89},[79,136703,53420],{"class":239},[79,136705,136706],{"class":81,"line":178},[79,136707,132435],{"class":239},[79,136709,136710,136712,136714],{"class":81,"line":457},[79,136711,53898],{"class":239},[79,136713,53724],{"class":395},[79,136715,53420],{"class":239},[19,136717,136718],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3699,136720],{"style":128160,"src":136721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[265,136723,136725],{"id":136724},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136727,136728],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136730,136731,136732,136735],{},"把压缩包里面的 ",[2528,136733,136734],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136737,136738],{},"打开网站，点下方：",[3699,136740],{"style":128160,"src":136741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3699,136743],{"style":128160,"src":136744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3699,136746],{"style":128160,"src":136747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136749,136750],{},"点yes重新加载",[19,136752,136753],{},"然后重复之前的操作就可以实现了",[19,136755,136756],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[265,136758,136760],{"id":136759},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3699,136762],{"style":128160,"src":136763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[2287,136765,136766],{},"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":57,"searchDepth":167,"depth":167,"links":136768},[136769,136775,136780],{"id":135372,"depth":167,"text":135373,"children":136770},[136771,136772,136773,136774],{"id":135384,"depth":178,"text":135385},{"id":135413,"depth":178,"text":135414},{"id":135441,"depth":178,"text":135442},{"id":135499,"depth":178,"text":135500},{"id":135971,"depth":167,"text":135972,"children":136776},[136777,136778,136779],{"id":135975,"depth":178,"text":135976},{"id":136020,"depth":178,"text":136021},{"id":136036,"depth":178,"text":136037},{"id":136136,"depth":167,"text":136137,"children":136781},[136782,136783,136784,136785,136786,136787],{"id":136140,"depth":178,"text":136141},{"id":136174,"depth":178,"text":136175},{"id":136197,"depth":178,"text":136198},{"id":136244,"depth":178,"text":136245},{"id":136724,"depth":178,"text":136725},{"id":136759,"depth":178,"text":136760},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135364,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136794,"title":136795,"body":136796,"description":25516,"extension":2314,"meta":138023,"navigation":453,"path":138024,"seo":138025,"stem":138026,"__hash__":138027},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136797,"toc":138004},[136798,136801,136805,136808,136822,136890,136920,136923,136927,136931,137033,137080,137084,137087,137090,137124,137127,137130,137133,137136,137139,137142,137145,137147,137150,137153,137156,137159,137162,137165,137168,137196,137199,137203,137206,137213,137216,137219,137245,137248,137252,137255,137258,137265,137269,137272,137274,137306,137309,137312,137324,137330,137333,137336,137339,137341,137345,137348,137351,137354,137399,137403,137405,137408,137415,137457,137460,137464,137469,137483,137487,137490,137493,137496,137499,137502,137536,137539,137542,137596,137599,137602,137605,137608,137660,137663,137666,137715,137719,137721,137724,137727,137730,137733,137736,137794,137797,137803,137806,137809,137841,137844,137848,137852,137855,137887,137891,137894,137938,137942,137945,137948,137951,137954,137957,137960,137963,137965,137968,137970,137973,137976,137979,137982,137987,137990,137992,137995,137998,138001],[10,136799,136795],{"id":136800},"_13-界面样式与布局技巧",[14,136802,136804],{"id":136803},"_131-css三角","13.1 css三角",[19,136806,136807],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[3377,136809,136810,136813,136816,136819],{},[29,136811,136812],{},"用css 边框可以模拟三角效果",[29,136814,136815],{},"宽度高度为0",[29,136817,136818],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[29,136820,136821],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[51,136823,136825],{"className":128304,"code":136824,"language":128306,"meta":57,"style":57},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[59,136826,136827,136832,136839,136849,136859,136875,136886],{"__ignoreMap":57},[79,136828,136829],{"class":81,"line":82},[79,136830,136831],{"class":2440},"\u002F* CSS 实现三角形 *\u002F\n",[79,136833,136834,136837],{"class":81,"line":167},[79,136835,136836],{"class":85},".triangle",[79,136838,17732],{"class":239},[79,136840,136841,136843,136845,136847],{"class":81,"line":178},[79,136842,72676],{"class":96},[79,136844,53550],{"class":239},[79,136846,1030],{"class":96},[79,136848,3531],{"class":239},[79,136850,136851,136853,136855,136857],{"class":81,"line":457},[79,136852,72896],{"class":96},[79,136854,53550],{"class":239},[79,136856,1030],{"class":96},[79,136858,3531],{"class":239},[79,136860,136861,136863,136865,136867,136869,136871,136873],{"class":81,"line":462},[79,136862,73004],{"class":96},[79,136864,53550],{"class":239},[79,136866,2820],{"class":96},[79,136868,53605],{"class":243},[79,136870,53634],{"class":96},[79,136872,66101],{"class":96},[79,136874,3531],{"class":239},[79,136876,136877,136880,136882,136884],{"class":81,"line":474},[79,136878,136879],{"class":96},"  border-bottom-color",[79,136881,53550],{"class":239},[79,136883,64479],{"class":96},[79,136885,3531],{"class":239},[79,136887,136888],{"class":81,"line":480},[79,136889,3801],{"class":239},[51,136891,136892],{"className":128304,"code":132461,"language":128306,"meta":57,"style":57},[59,136893,136894,136900,136916],{"__ignoreMap":57},[79,136895,136896,136898],{"class":81,"line":82},[79,136897,53724],{"class":395},[79,136899,17732],{"class":239},[79,136901,136902,136904,136906,136908,136910,136912,136914],{"class":81,"line":167},[79,136903,73004],{"class":96},[79,136905,53550],{"class":239},[79,136907,1072],{"class":96},[79,136909,53605],{"class":243},[79,136911,53634],{"class":96},[79,136913,131696],{"class":96},[79,136915,3531],{"class":239},[79,136917,136918],{"class":81,"line":178},[79,136919,3801],{"class":239},[3699,136921],{"style":128160,"src":136922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136924,136926],{"id":136925},"_132-css用户界面样式","13.2 css用户界面样式",[265,136928,136930],{"id":136929},"_1321-鼠标样式","13.2.1 鼠标样式",[51,136932,136934],{"className":128304,"code":136933,"language":128306,"meta":57,"style":57},"\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",[59,136935,136936,136941,136960,136978,136997,137014],{"__ignoreMap":57},[79,136937,136938],{"class":81,"line":82},[79,136939,136940],{"class":2440},"\u002F* 鼠标样式 *\u002F\n",[79,136942,136943,136945,136947,136950,136952,136954,136957],{"class":81,"line":167},[79,136944,53724],{"class":395},[79,136946,81915],{"class":239},[79,136948,136949],{"class":96},"cursor",[79,136951,53550],{"class":239},[79,136953,64140],{"class":96},[79,136955,136956],{"class":239},"; }   ",[79,136958,136959],{"class":2440},"\u002F* 手型 *\u002F\n",[79,136961,136962,136964,136966,136968,136970,136973,136975],{"class":81,"line":178},[79,136963,53724],{"class":395},[79,136965,81915],{"class":239},[79,136967,136949],{"class":96},[79,136969,53550],{"class":239},[79,136971,136972],{"class":96},"default",[79,136974,136956],{"class":239},[79,136976,136977],{"class":2440},"\u002F* 默认 *\u002F\n",[79,136979,136980,136982,136984,136986,136988,136991,136994],{"class":81,"line":457},[79,136981,53724],{"class":395},[79,136983,81915],{"class":239},[79,136985,136949],{"class":96},[79,136987,53550],{"class":239},[79,136989,136990],{"class":96},"move",[79,136992,136993],{"class":239},"; }      ",[79,136995,136996],{"class":2440},"\u002F* 移动 *\u002F\n",[79,136998,136999,137001,137003,137005,137007,137009,137011],{"class":81,"line":462},[79,137000,53724],{"class":395},[79,137002,81915],{"class":239},[79,137004,136949],{"class":96},[79,137006,53550],{"class":239},[79,137008,56],{"class":96},[79,137010,136993],{"class":239},[79,137012,137013],{"class":2440},"\u002F* 文本 *\u002F\n",[79,137015,137016,137018,137020,137022,137024,137027,137030],{"class":81,"line":474},[79,137017,53724],{"class":395},[79,137019,81915],{"class":239},[79,137021,136949],{"class":96},[79,137023,53550],{"class":239},[79,137025,137026],{"class":96},"not-allowed",[79,137028,137029],{"class":239},"; } ",[79,137031,137032],{"class":2440},"\u002F* 禁止 *\u002F\n",[2516,137034,137035,137043],{},[2519,137036,137037],{},[2522,137038,137039,137041],{},[2525,137040,128768],{"align":25876},[2525,137042,29621],{"align":25876},[2563,137044,137045,137052,137059,137066,137073],{},[2522,137046,137047,137049],{},[2568,137048,136972],{"align":25876},[2568,137050,137051],{"align":25876},"小白 默认",[2522,137053,137054,137056],{},[2568,137055,64140],{"align":25876},[2568,137057,137058],{"align":25876},"小手",[2522,137060,137061,137063],{},[2568,137062,136990],{"align":25876},[2568,137064,137065],{"align":25876},"移动",[2522,137067,137068,137070],{},[2568,137069,56],{"align":25876},[2568,137071,137072],{"align":25876},"文本",[2522,137074,137075,137077],{},[2568,137076,137026],{"align":25876},[2568,137078,137079],{"align":25876},"禁止",[265,137081,137083],{"id":137082},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,137085,137086],{},"去除表单轮廓线",[19,137088,137089],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[51,137091,137092],{"className":128304,"code":131668,"language":128306,"meta":57,"style":57},[59,137093,137094,137098,137104,137120],{"__ignoreMap":57},[79,137095,137096],{"class":81,"line":82},[79,137097,131675],{"class":2440},[79,137099,137100,137102],{"class":81,"line":167},[79,137101,53724],{"class":395},[79,137103,17732],{"class":239},[79,137105,137106,137108,137110,137112,137114,137116,137118],{"class":81,"line":178},[79,137107,73004],{"class":96},[79,137109,53550],{"class":239},[79,137111,1072],{"class":96},[79,137113,53605],{"class":243},[79,137115,53634],{"class":96},[79,137117,131696],{"class":96},[79,137119,3531],{"class":239},[79,137121,137122],{"class":81,"line":457},[79,137123,3801],{"class":239},[19,137125,137126],{},"文本域：",[3699,137128],{"style":128160,"src":137129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137131,137132],{},"此时会有一个空白区域",[3699,137134],{"style":128160,"src":137135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137137,137138],{},"写在同一行就不会出现这个问题",[3699,137140],{"style":128160,"src":137141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137143,137144],{},"文本域是行内块元素，一定记住！！！",[19,137146,100336],{},[3699,137148],{"style":128160,"src":137149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137151,137152],{},"文本域尽量放在一行",[19,137154,137155],{},"知识回顾：cols是列，rols是行",[3699,137157],{"style":128160,"src":137158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137160,137161],{},"它可以进行拖动，显然这是我们不愿意看到的",[3699,137163],{"style":128160,"src":137164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137166,137167],{},"使用resize进行解决",[51,137169,137171],{"className":128304,"code":137170,"language":128306,"meta":57,"style":57},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[59,137172,137173,137179,137192],{"__ignoreMap":57},[79,137174,137175,137177],{"class":81,"line":82},[79,137176,55931],{"class":395},[79,137178,17732],{"class":239},[79,137180,137181,137183,137185,137187,137189],{"class":81,"line":167},[79,137182,72906],{"class":96},[79,137184,53550],{"class":239},[79,137186,56847],{"class":96},[79,137188,132167],{"class":239},[79,137190,137191],{"class":2440},"\u002F* 取消表单轮廓线 *\u002F\n",[79,137193,137194],{"class":81,"line":178},[79,137195,3801],{"class":239},[19,137197,137198],{},"此时就无法通过右下方实现拖动了",[265,137200,137202],{"id":137201},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137204,137205],{},"实现一个盒子中的文字和图片对齐",[19,137207,137208,137209,137212],{},"用于设置一个元素的 ",[2528,137210,137211],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,137214,137215],{},"图片和文字默认是基线对齐",[3699,137217],{"style":128160,"src":137218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[51,137220,137221],{"className":128304,"code":137170,"language":128306,"meta":57,"style":57},[59,137222,137223,137229,137241],{"__ignoreMap":57},[79,137224,137225,137227],{"class":81,"line":82},[79,137226,55931],{"class":395},[79,137228,17732],{"class":239},[79,137230,137231,137233,137235,137237,137239],{"class":81,"line":167},[79,137232,72906],{"class":96},[79,137234,53550],{"class":239},[79,137236,56847],{"class":96},[79,137238,132167],{"class":239},[79,137240,137191],{"class":2440},[79,137242,137243],{"class":81,"line":178},[79,137244,3801],{"class":239},[3699,137246],{"style":128160,"src":137247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[24137,137249,137251],{"id":137250},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,137253,137254],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3699,137256],{"style":128160,"src":137257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,137259,137260,137261,137264],{},"此时可以给图片、表单这些行内块元素的 ",[2528,137262,137263],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[24137,137266,137268],{"id":137267},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,137270,137271],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,137273,1789],{},[51,137275,137277],{"className":128304,"code":137276,"language":128306,"meta":57,"style":57},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[59,137278,137279,137284,137290,137302],{"__ignoreMap":57},[79,137280,137281],{"class":81,"line":82},[79,137282,137283],{"class":2440},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[79,137285,137286,137288],{"class":81,"line":167},[79,137287,3699],{"class":395},[79,137289,17732],{"class":239},[79,137291,137292,137295,137297,137300],{"class":81,"line":178},[79,137293,137294],{"class":96},"  vertical-align",[79,137296,53550],{"class":239},[79,137298,137299],{"class":96},"middle",[79,137301,3531],{"class":239},[79,137303,137304],{"class":81,"line":457},[79,137305,3801],{"class":239},[3699,137307],{"style":128160,"src":137308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,137310,137311],{},"主要解决方法有两种：",[26,137313,137314],{},[29,137315,137316,137319,137320,137323],{},[2528,137317,137318],{},"给图片"," 添加 ",[2528,137321,137322],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,137325,137326,137327],{},"2.把图片转换为块级元素 ",[2528,137328,137329],{},"display: block",[19,137331,137332],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,137334,137335],{},"img {",[19,137337,137338],{},"vertical-align:middle;",[19,137340,700],{},[265,137342,137344],{"id":137343},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,137346,137347],{},"效果：",[3699,137349],{"style":128160,"src":137350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,137352,137353],{},"单行文本溢出显示省略号--必须满足三个条件：",[51,137355,137357],{"className":128304,"code":137356,"language":128306,"meta":57,"style":57},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[59,137358,137359,137364,137370,137380,137385,137395],{"__ignoreMap":57},[79,137360,137361],{"class":81,"line":82},[79,137362,137363],{"class":2440},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[79,137365,137366,137368],{"class":81,"line":167},[79,137367,3699],{"class":395},[79,137369,17732],{"class":239},[79,137371,137372,137374,137376,137378],{"class":81,"line":178},[79,137373,137294],{"class":96},[79,137375,53550],{"class":239},[79,137377,137299],{"class":96},[79,137379,3531],{"class":239},[79,137381,137382],{"class":81,"line":457},[79,137383,137384],{"class":2440},"  \u002F* 或 *\u002F\n",[79,137386,137387,137389,137391,137393],{"class":81,"line":462},[79,137388,129920],{"class":96},[79,137390,53550],{"class":239},[79,137392,62979],{"class":96},[79,137394,3531],{"class":239},[79,137396,137397],{"class":81,"line":474},[79,137398,3801],{"class":239},[265,137400,137402],{"id":137401},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,137404,137347],{},[3699,137406],{"style":128160,"src":137407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,137409,137410,137411,137414],{},"多行文本溢出显示省略号， ",[2528,137412,137413],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[51,137416,137417],{"className":128304,"code":137356,"language":128306,"meta":57,"style":57},[59,137418,137419,137423,137429,137439,137443,137453],{"__ignoreMap":57},[79,137420,137421],{"class":81,"line":82},[79,137422,137363],{"class":2440},[79,137424,137425,137427],{"class":81,"line":167},[79,137426,3699],{"class":395},[79,137428,17732],{"class":239},[79,137430,137431,137433,137435,137437],{"class":81,"line":178},[79,137432,137294],{"class":96},[79,137434,53550],{"class":239},[79,137436,137299],{"class":96},[79,137438,3531],{"class":239},[79,137440,137441],{"class":81,"line":457},[79,137442,137384],{"class":2440},[79,137444,137445,137447,137449,137451],{"class":81,"line":462},[79,137446,129920],{"class":96},[79,137448,53550],{"class":239},[79,137450,62979],{"class":96},[79,137452,3531],{"class":239},[79,137454,137455],{"class":81,"line":474},[79,137456,3801],{"class":239},[19,137458,137459],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137461,137463],{"id":137462},"_133-常见布局技巧","13.3 常见布局技巧",[19,137465,137466],{},[2528,137467,137468],{},"巧妙利用一个技术更快更好的布局：",[26,137470,137471,137474,137477,137480],{},[29,137472,137473],{},"margin负值的运用",[29,137475,137476],{},"文字围绕浮动元素",[29,137478,137479],{},"行内块的巧妙运用",[29,137481,137482],{},"CSS三角强化",[265,137484,137486],{"id":137485},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137488,137489],{},"应用场景：",[3699,137491],{"style":128160,"src":137492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3699,137494],{"style":128160,"src":137495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137497,137498],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137500,137501],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[51,137503,137504],{"className":128304,"code":131668,"language":128306,"meta":57,"style":57},[59,137505,137506,137510,137516,137532],{"__ignoreMap":57},[79,137507,137508],{"class":81,"line":82},[79,137509,131675],{"class":2440},[79,137511,137512,137514],{"class":81,"line":167},[79,137513,53724],{"class":395},[79,137515,17732],{"class":239},[79,137517,137518,137520,137522,137524,137526,137528,137530],{"class":81,"line":178},[79,137519,73004],{"class":96},[79,137521,53550],{"class":239},[79,137523,1072],{"class":96},[79,137525,53605],{"class":243},[79,137527,53634],{"class":96},[79,137529,131696],{"class":96},[79,137531,3531],{"class":239},[79,137533,137534],{"class":81,"line":457},[79,137535,3801],{"class":239},[3699,137537],{"style":128160,"src":137538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137540,137541],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[51,137543,137545],{"className":128304,"code":137544,"language":128306,"meta":57,"style":57},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[59,137546,137547,137552,137558,137568,137580,137592],{"__ignoreMap":57},[79,137548,137549],{"class":81,"line":82},[79,137550,137551],{"class":2440},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[79,137553,137554,137556],{"class":81,"line":167},[79,137555,132152],{"class":85},[79,137557,17732],{"class":239},[79,137559,137560,137562,137564,137566],{"class":81,"line":178},[79,137561,134110],{"class":96},[79,137563,53550],{"class":239},[79,137565,56874],{"class":96},[79,137567,3531],{"class":239},[79,137569,137570,137572,137574,137576,137578],{"class":81,"line":457},[79,137571,134124],{"class":96},[79,137573,53550],{"class":239},[79,137575,2820],{"class":96},[79,137577,53605],{"class":243},[79,137579,3531],{"class":239},[79,137581,137582,137584,137586,137588,137590],{"class":81,"line":462},[79,137583,134141],{"class":96},[79,137585,53550],{"class":239},[79,137587,3073],{"class":96},[79,137589,53605],{"class":243},[79,137591,3531],{"class":239},[79,137593,137594],{"class":81,"line":474},[79,137595,3801],{"class":239},[19,137597,137598],{},"加上上述代码会发现：",[3699,137600],{"style":128160,"src":137601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137603,137604],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137606,137607],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[51,137609,137610],{"className":128304,"code":137544,"language":128306,"meta":57,"style":57},[59,137611,137612,137616,137622,137632,137644,137656],{"__ignoreMap":57},[79,137613,137614],{"class":81,"line":82},[79,137615,137551],{"class":2440},[79,137617,137618,137620],{"class":81,"line":167},[79,137619,132152],{"class":85},[79,137621,17732],{"class":239},[79,137623,137624,137626,137628,137630],{"class":81,"line":178},[79,137625,134110],{"class":96},[79,137627,53550],{"class":239},[79,137629,56874],{"class":96},[79,137631,3531],{"class":239},[79,137633,137634,137636,137638,137640,137642],{"class":81,"line":457},[79,137635,134124],{"class":96},[79,137637,53550],{"class":239},[79,137639,2820],{"class":96},[79,137641,53605],{"class":243},[79,137643,3531],{"class":239},[79,137645,137646,137648,137650,137652,137654],{"class":81,"line":462},[79,137647,134141],{"class":96},[79,137649,53550],{"class":239},[79,137651,3073],{"class":96},[79,137653,53605],{"class":243},[79,137655,3531],{"class":239},[79,137657,137658],{"class":81,"line":474},[79,137659,3801],{"class":239},[19,137661,137662],{},"解决方式2：",[19,137664,137665],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[51,137667,137669],{"className":128304,"code":137668,"language":128306,"meta":57,"style":57},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[59,137670,137671,137677,137687,137699,137711],{"__ignoreMap":57},[79,137672,137673,137675],{"class":81,"line":82},[79,137674,53724],{"class":395},[79,137676,17732],{"class":239},[79,137678,137679,137681,137683,137685],{"class":81,"line":167},[79,137680,134110],{"class":96},[79,137682,53550],{"class":239},[79,137684,56874],{"class":96},[79,137686,3531],{"class":239},[79,137688,137689,137691,137693,137695,137697],{"class":81,"line":178},[79,137690,134124],{"class":96},[79,137692,53550],{"class":239},[79,137694,2820],{"class":96},[79,137696,53605],{"class":243},[79,137698,3531],{"class":239},[79,137700,137701,137703,137705,137707,137709],{"class":81,"line":457},[79,137702,134141],{"class":96},[79,137704,53550],{"class":239},[79,137706,3073],{"class":96},[79,137708,53605],{"class":243},[79,137710,3531],{"class":239},[79,137712,137713],{"class":81,"line":462},[79,137714,3801],{"class":239},[265,137716,137718],{"id":137717},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137720,137489],{},[3699,137722],{"style":128160,"src":137723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137725,137726],{},"实现结构图：",[3699,137728],{"style":128160,"src":137729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137731,137732],{},"巧妙运用浮动元素不会压住文字的特性",[19,137734,137735],{},"代码显示：",[51,137737,137739],{"className":128304,"code":137738,"language":128306,"meta":57,"style":57},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[59,137740,137741,137747,137757,137761,137766,137770,137776,137790],{"__ignoreMap":57},[79,137742,137743,137745],{"class":81,"line":82},[79,137744,132152],{"class":85},[79,137746,17732],{"class":239},[79,137748,137749,137751,137753,137755],{"class":81,"line":167},[79,137750,132784],{"class":96},[79,137752,53550],{"class":239},[79,137754,25876],{"class":96},[79,137756,3531],{"class":239},[79,137758,137759],{"class":81,"line":178},[79,137760,3801],{"class":239},[79,137762,137763],{"class":81,"line":457},[79,137764,137765],{"class":239},"```Css\n",[79,137767,137768],{"class":81,"line":462},[79,137769,132147],{"class":2440},[79,137771,137772,137774],{"class":81,"line":474},[79,137773,132152],{"class":85},[79,137775,17732],{"class":239},[79,137777,137778,137780,137782,137784,137786,137788],{"class":81,"line":480},[79,137779,72578],{"class":96},[79,137781,53550],{"class":239},[79,137783,1030],{"class":96},[79,137785,53669],{"class":96},[79,137787,132167],{"class":239},[79,137789,132170],{"class":2440},[79,137791,137792],{"class":81,"line":486},[79,137793,3801],{"class":239},[19,137795,137796],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[51,137798,137801],{"className":137799,"code":137800,"language":56},[54],"\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",[59,137802,137800],{"__ignoreMap":57},[3699,137804],{"style":128160,"src":137805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137807,137808],{},"最终展示结果：",[51,137810,137811],{"className":128304,"code":132140,"language":128306,"meta":57,"style":57},[59,137812,137813,137817,137823,137837],{"__ignoreMap":57},[79,137814,137815],{"class":81,"line":82},[79,137816,132147],{"class":2440},[79,137818,137819,137821],{"class":81,"line":167},[79,137820,132152],{"class":85},[79,137822,17732],{"class":239},[79,137824,137825,137827,137829,137831,137833,137835],{"class":81,"line":178},[79,137826,72578],{"class":96},[79,137828,53550],{"class":239},[79,137830,1030],{"class":96},[79,137832,53669],{"class":96},[79,137834,132167],{"class":239},[79,137836,132170],{"class":2440},[79,137838,137839],{"class":81,"line":457},[79,137840,3801],{"class":239},[3699,137842],{"style":128160,"src":137843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137845,137847],{"id":137846},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[265,137849,137851],{"id":137850},"_1341-原理","13.4.1 原理",[3699,137853],{"style":128160,"src":137854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[51,137856,137857],{"className":128304,"code":132140,"language":128306,"meta":57,"style":57},[59,137858,137859,137863,137869,137883],{"__ignoreMap":57},[79,137860,137861],{"class":81,"line":82},[79,137862,132147],{"class":2440},[79,137864,137865,137867],{"class":81,"line":167},[79,137866,132152],{"class":85},[79,137868,17732],{"class":239},[79,137870,137871,137873,137875,137877,137879,137881],{"class":81,"line":178},[79,137872,72578],{"class":96},[79,137874,53550],{"class":239},[79,137876,1030],{"class":96},[79,137878,53669],{"class":96},[79,137880,132167],{"class":239},[79,137882,132170],{"class":2440},[79,137884,137885],{"class":81,"line":457},[79,137886,3801],{"class":239},[265,137888,137890],{"id":137889},"_1342-实例","13.4.2 实例",[3699,137892],{"style":128160,"src":137893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[51,137895,137896],{"className":128304,"code":132770,"language":128306,"meta":57,"style":57},[59,137897,137898,137904,137914,137918,137924,137934],{"__ignoreMap":57},[79,137899,137900,137902],{"class":81,"line":82},[79,137901,132777],{"class":85},[79,137903,17732],{"class":239},[79,137905,137906,137908,137910,137912],{"class":81,"line":167},[79,137907,132784],{"class":96},[79,137909,53550],{"class":239},[79,137911,25876],{"class":96},[79,137913,3531],{"class":239},[79,137915,137916],{"class":81,"line":178},[79,137917,3801],{"class":239},[79,137919,137920,137922],{"class":81,"line":457},[79,137921,132799],{"class":85},[79,137923,17732],{"class":239},[79,137925,137926,137928,137930,137932],{"class":81,"line":462},[79,137927,132784],{"class":96},[79,137929,53550],{"class":239},[79,137931,74630],{"class":96},[79,137933,3531],{"class":239},[79,137935,137936],{"class":81,"line":474},[79,137937,3801],{"class":239},[14,137939,137941],{"id":137940},"_135-css的初始化","13.5 css的初始化",[19,137943,137944],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137946,137947],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137949,137950],{},"每个网页都必须首先进行 CSS初始化。",[19,137952,137953],{},"这里我们以 京东CSS初始化代码为例。",[19,137955,137956],{},"在网页右键查看网页源代码",[19,137958,137959],{},"找到css的link引入语句",[19,137961,137962],{},"然后ctrl+f 输入body",[19,137964,79334],{},[3699,137966],{"style":128160,"src":137967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137969,79357],{},[3699,137971],{"style":128160,"src":137972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137974,137975],{},"③打开了网页上传压缩的代码",[3699,137977],{"style":128160,"src":137978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137980,137981],{},"④从body前可以查看这个网页的初始化代码",[19,137983,137984],{},[2528,137985,137986],{},"Unicode编码字体：",[19,137988,137989],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137991,85312],{},[19,137993,137994],{},"黑体 \\9ED1\\4F53",[19,137996,137997],{},"宋体 \\5B8B\\4F53",[19,137999,138000],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[2287,138002,138003],{},"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":57,"searchDepth":167,"depth":167,"links":138005},[138006,138007,138014,138018,138022],{"id":136803,"depth":167,"text":136804},{"id":136925,"depth":167,"text":136926,"children":138008},[138009,138010,138011,138012,138013],{"id":136929,"depth":178,"text":136930},{"id":137082,"depth":178,"text":137083},{"id":137201,"depth":178,"text":137202},{"id":137343,"depth":178,"text":137344},{"id":137401,"depth":178,"text":137402},{"id":137462,"depth":167,"text":137463,"children":138015},[138016,138017],{"id":137485,"depth":178,"text":137486},{"id":137717,"depth":178,"text":137718},{"id":137846,"depth":167,"text":137847,"children":138019},[138020,138021],{"id":137850,"depth":178,"text":137851},{"id":137889,"depth":178,"text":137890},{"id":137940,"depth":167,"text":137941},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136795,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138029,"title":138030,"body":138031,"description":25516,"extension":2314,"meta":139717,"navigation":453,"path":139718,"seo":139719,"stem":139720,"__hash__":139721},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138032,"toc":139706},[138033,138036,138040,138044,138047,138054,138057,138060,138098,138101,138103,138117,138121,138130,138134,138139,138142,138145,138148,138183,138188,138191,138221,138224,138229,138232,138235,138265,138268,138322,138325,138329,138334,138346,138349,138353,138383,138386,138391,138394,138424,138427,138431,138448,138452,138456,138459,138492,138495,138499,138502,138505,138508,138511,138514,138625,138628,138631,138634,138736,138739,138743,138747,138751,138754,138794,138797,138799,138815,138819,138822,138827,138908,138911,138914,139040,139045,139048,139056,139059,139064,139149,139152,139156,139159,139162,139166,139186,139191,139275,139278,139283,139286,139289,139367,139370,139373,139376,139379,139382,139387,139390,139393,139465,139468,139473,139476,139573,139576,139582,139585,139588,139591,139594,139597,139600,139603,139606,139610,139615,139618,139651,139656,139659,139700,139703],[10,138034,138030],{"id":138035},"_14-html5与css3新特性",[14,138037,138039],{"id":138038},"_141-html5的新特性","14.1 HTML5的新特性",[265,138041,138043],{"id":138042},"_1411-基本标签","14.1.1 基本标签",[19,138045,138046],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,138048,138049,138050,138053],{},"这些新特性都有兼容性问题，基本是 ",[2528,138051,138052],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,138055,138056],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,138058,138059],{},"现在使用的是新特性：",[3377,138061,138062,138068,138074,138080,138086,138092],{},[29,138063,138064,138067],{},[59,138065,138066],{},"\u003Cheader>"," 头部标签",[29,138069,138070,138073],{},[59,138071,138072],{},"\u003Cnav>"," 导航标签",[29,138075,138076,138079],{},[59,138077,138078],{},"\u003Carticle>"," 内容标签",[29,138081,138082,138085],{},[59,138083,138084],{},"\u003Csection>"," 定义文档某个区域",[29,138087,138088,138091],{},[59,138089,138090],{},"\u003Caside>"," 侧边栏标签",[29,138093,138094,138097],{},[59,138095,138096],{},"\u003Cfooter>"," 尾部标签",[3699,138099],{"style":128160,"src":138100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,138102,2415],{},[3377,138104,138105,138108,138111,138114],{},[29,138106,138107],{},"这种语义化标准主要是针对搜索引擎的",[29,138109,138110],{},"这些标签页面中可以经常使用",[29,138112,138113],{},"在IE9中，需要把这些元素转换为块级元素",[29,138115,138116],{},"移动端更喜欢使用这些标签",[265,138118,138120],{"id":138119},"_1412-多媒体标签","14.1.2 多媒体标签",[19,138122,138123,138124,138126,138127,138129],{},"音频 ",[2528,138125,30306],{}," 和视频 ",[2528,138128,30315],{}," 两个标签",[24137,138131,138133],{"id":138132},"_14121-视频标签-video","14.1.2.1 视频标签- video",[26,138135,138136],{},[29,138137,138138],{},"支持格式：",[3699,138140],{"style":128160,"src":138141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138143,138144],{},"尽量使用MP4，兼容性好",[19,138146,138147],{},"用MP4就可以",[51,138149,138151],{"className":129051,"code":138150,"language":129053,"meta":57,"style":57},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[59,138152,138153],{"__ignoreMap":57},[79,138154,138155,138157,138159,138161,138163,138166,138168,138171,138174,138177,138179,138181],{"class":81,"line":82},[79,138156,392],{"class":239},[79,138158,30315],{"class":395},[79,138160,57349],{"class":85},[79,138162,244],{"class":239},[79,138164,138165],{"class":89},"\"movie.mp4\"",[79,138167,94528],{"class":85},[79,138169,138170],{"class":85}," autoplay",[79,138172,138173],{"class":85}," muted",[79,138175,138176],{"class":85}," loop",[79,138178,57424],{"class":239},[79,138180,30315],{"class":395},[79,138182,53420],{"class":239},[26,138184,138185],{"start":167},[29,138186,138187],{},"兼容写法",[19,138189,138190],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[51,138192,138193],{"className":129051,"code":138150,"language":129053,"meta":57,"style":57},[59,138194,138195],{"__ignoreMap":57},[79,138196,138197,138199,138201,138203,138205,138207,138209,138211,138213,138215,138217,138219],{"class":81,"line":82},[79,138198,392],{"class":239},[79,138200,30315],{"class":395},[79,138202,57349],{"class":85},[79,138204,244],{"class":239},[79,138206,138165],{"class":89},[79,138208,94528],{"class":85},[79,138210,138170],{"class":85},[79,138212,138173],{"class":85},[79,138214,138176],{"class":85},[79,138216,57424],{"class":239},[79,138218,30315],{"class":395},[79,138220,53420],{"class":239},[19,138222,138223],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,138225,138226],{"start":178},[29,138227,138228],{},"video常用属性",[3699,138230],{"style":128160,"src":138231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,138233,138234],{},"poster属性后面是跟的等待加载图片的地址",[51,138236,138237],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,138238,138239],{"__ignoreMap":57},[79,138240,138241,138243,138245,138247,138249,138251,138253,138255,138257,138259,138261,138263],{"class":81,"line":82},[79,138242,392],{"class":239},[79,138244,3699],{"class":395},[79,138246,57349],{"class":85},[79,138248,244],{"class":239},[79,138250,135821],{"class":89},[79,138252,57357],{"class":85},[79,138254,244],{"class":239},[79,138256,135828],{"class":89},[79,138258,135831],{"class":85},[79,138260,244],{"class":239},[79,138262,135836],{"class":89},[79,138264,53420],{"class":239},[19,138266,138267],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[51,138269,138271],{"className":128304,"code":138270,"language":128306,"meta":57,"style":57},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[59,138272,138273,138278,138284,138308,138313,138318],{"__ignoreMap":57},[79,138274,138275],{"class":81,"line":82},[79,138276,138277],{"class":2440},"\u002F* 2D 位移 *\u002F\n",[79,138279,138280,138282],{"class":81,"line":167},[79,138281,53724],{"class":395},[79,138283,17732],{"class":239},[79,138285,138286,138289,138291,138294,138296,138298,138300,138302,138304,138306],{"class":81,"line":178},[79,138287,138288],{"class":96},"  transform",[79,138290,53550],{"class":239},[79,138292,138293],{"class":96},"translate",[79,138295,685],{"class":239},[79,138297,2686],{"class":96},[79,138299,53605],{"class":243},[79,138301,1060],{"class":239},[79,138303,3029],{"class":96},[79,138305,53605],{"class":243},[79,138307,4925],{"class":239},[79,138309,138310],{"class":81,"line":457},[79,138311,138312],{"class":2440},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[79,138314,138315],{"class":81,"line":462},[79,138316,138317],{"class":2440},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[79,138319,138320],{"class":81,"line":474},[79,138321,3801],{"class":239},[19,138323,138324],{},"muted:自动静音属性",[24137,138326,138328],{"id":138327},"_14122-音频标签audio","14.1.2.2 音频标签audio",[26,138330,138331],{},[29,138332,138333],{},"基本使用",[19,138335,138336,138337,138342,138343],{},"当前 ",[2528,138338,138339],{},[59,138340,138341],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[2528,138344,138345],{},"mp3格式",[3699,138347],{"style":128160,"src":138348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[26,138350,138351],{"start":167},[29,138352,138187],{},[51,138354,138355],{"className":129051,"code":138150,"language":129053,"meta":57,"style":57},[59,138356,138357],{"__ignoreMap":57},[79,138358,138359,138361,138363,138365,138367,138369,138371,138373,138375,138377,138379,138381],{"class":81,"line":82},[79,138360,392],{"class":239},[79,138362,30315],{"class":395},[79,138364,57349],{"class":85},[79,138366,244],{"class":239},[79,138368,138165],{"class":89},[79,138370,94528],{"class":85},[79,138372,138170],{"class":85},[79,138374,138173],{"class":85},[79,138376,138176],{"class":85},[79,138378,57424],{"class":239},[79,138380,30315],{"class":395},[79,138382,53420],{"class":239},[19,138384,138385],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,138387,138388],{"start":178},[29,138389,138390],{},"常用属性",[3699,138392],{"style":128160,"src":138393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[51,138395,138396],{"className":129051,"code":138150,"language":129053,"meta":57,"style":57},[59,138397,138398],{"__ignoreMap":57},[79,138399,138400,138402,138404,138406,138408,138410,138412,138414,138416,138418,138420,138422],{"class":81,"line":82},[79,138401,392],{"class":239},[79,138403,30315],{"class":395},[79,138405,57349],{"class":85},[79,138407,244],{"class":239},[79,138409,138165],{"class":89},[79,138411,94528],{"class":85},[79,138413,138170],{"class":85},[79,138415,138173],{"class":85},[79,138417,138176],{"class":85},[79,138419,57424],{"class":239},[79,138421,30315],{"class":395},[79,138423,53420],{"class":239},[19,138425,138426],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[24137,138428,138430],{"id":138429},"_14123-总结","14.1.2.3 总结",[3377,138432,138433,138436,138439,138442,138445],{},[29,138434,138435],{},"音频标签和视频标签使用方式基本一致",[29,138437,138438],{},"浏览器支持情况不同",[29,138440,138441],{},"谷歌浏览器把音频和视频自动播放禁止了",[29,138443,138444],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[29,138446,138447],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[265,138449,138451],{"id":138450},"_1413-表单元素","14.1.3 表单元素",[24137,138453,138455],{"id":138454},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3699,138457],{"style":128160,"src":138458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[51,138460,138462],{"className":129051,"code":138461,"language":129053,"meta":57,"style":57},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[59,138463,138464],{"__ignoreMap":57},[79,138465,138466,138468,138470,138472,138474,138476,138478,138480,138483,138485,138487,138490],{"class":81,"line":82},[79,138467,392],{"class":239},[79,138469,55931],{"class":395},[79,138471,55934],{"class":85},[79,138473,244],{"class":239},[79,138475,64809],{"class":89},[79,138477,2238],{"class":85},[79,138479,244],{"class":239},[79,138481,138482],{"class":89},"\"username\"",[79,138484,63130],{"class":85},[79,138486,244],{"class":239},[79,138488,138489],{"class":89},"\"请输入用户名\"",[79,138491,53420],{"class":239},[3699,138493],{"style":128160,"src":138494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[24137,138496,138498],{"id":138497},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3699,138500],{"style":128160,"src":138501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138503,138504],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138506,138507],{},"快捷操作：",[3699,138509],{"style":128160,"src":138510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138512,138513],{},"例子1：",[51,138515,138517],{"className":129051,"code":138516,"language":129053,"meta":57,"style":57},"\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",[59,138518,138519,138542,138569,138598,138617],{"__ignoreMap":57},[79,138520,138521,138523,138525,138527,138529,138532,138535,138537,138540],{"class":81,"line":82},[79,138522,392],{"class":239},[79,138524,68734],{"class":395},[79,138526,68737],{"class":85},[79,138528,244],{"class":239},[79,138530,138531],{"class":89},"\"\u002Fsubmit\"",[79,138533,138534],{"class":85}," method",[79,138536,244],{"class":239},[79,138538,138539],{"class":89},"\"post\"",[79,138541,53420],{"class":239},[79,138543,138544,138546,138548,138550,138552,138554,138556,138558,138560,138562,138564,138567],{"class":81,"line":167},[79,138545,54257],{"class":239},[79,138547,55931],{"class":395},[79,138549,55934],{"class":85},[79,138551,244],{"class":239},[79,138553,64809],{"class":89},[79,138555,2238],{"class":85},[79,138557,244],{"class":239},[79,138559,138482],{"class":89},[79,138561,63130],{"class":85},[79,138563,244],{"class":239},[79,138565,138566],{"class":89},"\"用户名\"",[79,138568,53420],{"class":239},[79,138570,138571,138573,138575,138577,138579,138582,138584,138586,138589,138591,138593,138596],{"class":81,"line":178},[79,138572,54257],{"class":239},[79,138574,55931],{"class":395},[79,138576,55934],{"class":85},[79,138578,244],{"class":239},[79,138580,138581],{"class":89},"\"password\"",[79,138583,2238],{"class":85},[79,138585,244],{"class":239},[79,138587,138588],{"class":89},"\"pwd\"",[79,138590,63130],{"class":85},[79,138592,244],{"class":239},[79,138594,138595],{"class":89},"\"密码\"",[79,138597,53420],{"class":239},[79,138599,138600,138602,138604,138606,138608,138610,138613,138615],{"class":81,"line":457},[79,138601,54257],{"class":239},[79,138603,55997],{"class":395},[79,138605,55934],{"class":85},[79,138607,244],{"class":239},[79,138609,68757],{"class":89},[79,138611,138612],{"class":239},">提交\u003C\u002F",[79,138614,55997],{"class":395},[79,138616,53420],{"class":239},[79,138618,138619,138621,138623],{"class":81,"line":462},[79,138620,53898],{"class":239},[79,138622,68734],{"class":395},[79,138624,53420],{"class":239},[3699,138626],{"style":128160,"src":138627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138629,138630],{},"value是表单域的内容",[19,138632,138633],{},"例子2：",[51,138635,138636],{"className":129051,"code":138516,"language":129053,"meta":57,"style":57},[59,138637,138638,138658,138684,138710,138728],{"__ignoreMap":57},[79,138639,138640,138642,138644,138646,138648,138650,138652,138654,138656],{"class":81,"line":82},[79,138641,392],{"class":239},[79,138643,68734],{"class":395},[79,138645,68737],{"class":85},[79,138647,244],{"class":239},[79,138649,138531],{"class":89},[79,138651,138534],{"class":85},[79,138653,244],{"class":239},[79,138655,138539],{"class":89},[79,138657,53420],{"class":239},[79,138659,138660,138662,138664,138666,138668,138670,138672,138674,138676,138678,138680,138682],{"class":81,"line":167},[79,138661,54257],{"class":239},[79,138663,55931],{"class":395},[79,138665,55934],{"class":85},[79,138667,244],{"class":239},[79,138669,64809],{"class":89},[79,138671,2238],{"class":85},[79,138673,244],{"class":239},[79,138675,138482],{"class":89},[79,138677,63130],{"class":85},[79,138679,244],{"class":239},[79,138681,138566],{"class":89},[79,138683,53420],{"class":239},[79,138685,138686,138688,138690,138692,138694,138696,138698,138700,138702,138704,138706,138708],{"class":81,"line":178},[79,138687,54257],{"class":239},[79,138689,55931],{"class":395},[79,138691,55934],{"class":85},[79,138693,244],{"class":239},[79,138695,138581],{"class":89},[79,138697,2238],{"class":85},[79,138699,244],{"class":239},[79,138701,138588],{"class":89},[79,138703,63130],{"class":85},[79,138705,244],{"class":239},[79,138707,138595],{"class":89},[79,138709,53420],{"class":239},[79,138711,138712,138714,138716,138718,138720,138722,138724,138726],{"class":81,"line":457},[79,138713,54257],{"class":239},[79,138715,55997],{"class":395},[79,138717,55934],{"class":85},[79,138719,244],{"class":239},[79,138721,68757],{"class":89},[79,138723,138612],{"class":239},[79,138725,55997],{"class":395},[79,138727,53420],{"class":239},[79,138729,138730,138732,138734],{"class":81,"line":462},[79,138731,53898],{"class":239},[79,138733,68734],{"class":395},[79,138735,53420],{"class":239},[3699,138737],{"style":128160,"src":138738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138740,138742],{"id":138741},"_142-css新特性","14.2 CSS新特性",[265,138744,138746],{"id":138745},"_1421-新增选择器","14.2.1 新增选择器",[24137,138748,138750],{"id":138749},"_14211-属性选择器","14.2.1.1 属性选择器",[3699,138752],{"style":128160,"src":138753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[51,138755,138757],{"className":128304,"code":138756,"language":128306,"meta":57,"style":57},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[59,138758,138759,138774,138790],{"__ignoreMap":57},[79,138760,138761,138763,138765,138767,138769,138771],{"class":81,"line":82},[79,138762,55931],{"class":395},[79,138764,3263],{"class":239},[79,138766,105145],{"class":85},[79,138768,244],{"class":243},[79,138770,64809],{"class":89},[79,138772,138773],{"class":239},"] {\n",[79,138775,138776,138778,138780,138782,138784,138786,138788],{"class":81,"line":167},[79,138777,73004],{"class":96},[79,138779,53550],{"class":239},[79,138781,1072],{"class":96},[79,138783,53605],{"class":243},[79,138785,53634],{"class":96},[79,138787,131884],{"class":96},[79,138789,3531],{"class":239},[79,138791,138792],{"class":81,"line":178},[79,138793,3801],{"class":239},[3699,138795],{"style":128160,"src":138796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138798,2415],{},[3377,138800,138801,138804,138807,138810],{},[29,138802,138803],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[29,138805,138806],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[29,138808,138809],{},"属性选择器也可以选择出来自定义的属性",[29,138811,138812,138814],{},[2528,138813,11209],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[24137,138816,138818],{"id":138817},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3699,138820],{"style":128160,"src":138821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[26,138823,138824],{},[29,138825,138826],{},"fist-child",[51,138828,138830],{"className":128304,"code":138829,"language":128306,"meta":57,"style":57},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[59,138831,138832,138837,138852,138872,138890],{"__ignoreMap":57},[79,138833,138834],{"class":81,"line":82},[79,138835,138836],{"class":2440},"\u002F* 属性选择器 *\u002F\n",[79,138838,138839,138841,138843,138845,138847,138849],{"class":81,"line":167},[79,138840,55931],{"class":395},[79,138842,3263],{"class":239},[79,138844,105145],{"class":85},[79,138846,244],{"class":243},[79,138848,64809],{"class":89},[79,138850,138851],{"class":239},"] { }\n",[79,138853,138854,138856,138858,138860,138863,138866,138869],{"class":81,"line":178},[79,138855,55931],{"class":395},[79,138857,3263],{"class":239},[79,138859,16855],{"class":85},[79,138861,138862],{"class":243},"^=",[79,138864,138865],{"class":89},"\"icon\"",[79,138867,138868],{"class":239},"] { }  ",[79,138870,138871],{"class":2440},"\u002F* 以 icon 开头 *\u002F\n",[79,138873,138874,138876,138878,138880,138883,138885,138887],{"class":81,"line":457},[79,138875,55931],{"class":395},[79,138877,3263],{"class":239},[79,138879,16855],{"class":85},[79,138881,138882],{"class":243},"$=",[79,138884,138865],{"class":89},[79,138886,138868],{"class":239},[79,138888,138889],{"class":2440},"\u002F* 以 icon 结尾 *\u002F\n",[79,138891,138892,138894,138896,138898,138901,138903,138905],{"class":81,"line":462},[79,138893,55931],{"class":395},[79,138895,3263],{"class":239},[79,138897,16855],{"class":85},[79,138899,138900],{"class":243},"*=",[79,138902,138865],{"class":89},[79,138904,138868],{"class":239},[79,138906,138907],{"class":2440},"\u002F* 包含 icon *\u002F\n",[19,138909,138910],{},"ul的第一个儿子文本为红色",[19,138912,138913],{},"一定要在冒号前加空格，不然就是选中所有的了",[51,138915,138917],{"className":128304,"code":138916,"language":128306,"meta":57,"style":57},".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",[59,138918,138919,138925,138935,138939,138943,138948,138961,138974,138990,139007,139024],{"__ignoreMap":57},[79,138920,138921,138923],{"class":81,"line":82},[79,138922,128595],{"class":85},[79,138924,17732],{"class":239},[79,138926,138927,138929,138931,138933],{"class":81,"line":167},[79,138928,73013],{"class":96},[79,138930,53550],{"class":239},[79,138932,59531],{"class":96},[79,138934,3531],{"class":239},[79,138936,138937],{"class":81,"line":178},[79,138938,3801],{"class":239},[79,138940,138941],{"class":81,"line":457},[79,138942,137765],{"class":239},[79,138944,138945],{"class":81,"line":462},[79,138946,138947],{"class":2440},"\u002F* 结构伪类选择器 *\u002F\n",[79,138949,138950,138952,138955,138958],{"class":81,"line":474},[79,138951,29],{"class":395},[79,138953,138954],{"class":85},":first-child",[79,138956,138957],{"class":239}," { }           ",[79,138959,138960],{"class":2440},"\u002F* 第一个 *\u002F\n",[79,138962,138963,138965,138968,138971],{"class":81,"line":480},[79,138964,29],{"class":395},[79,138966,138967],{"class":85},":last-child",[79,138969,138970],{"class":239}," { }            ",[79,138972,138973],{"class":2440},"\u002F* 最后一个 *\u002F\n",[79,138975,138976,138978,138980,138982,138984,138987],{"class":81,"line":486},[79,138977,29],{"class":395},[79,138979,131218],{"class":85},[79,138981,685],{"class":239},[79,138983,1049],{"class":96},[79,138985,138986],{"class":239},") { }          ",[79,138988,138989],{"class":2440},"\u002F* 第2个 *\u002F\n",[79,138991,138992,138994,138996,138998,139001,139004],{"class":81,"line":491},[79,138993,29],{"class":395},[79,138995,131218],{"class":85},[79,138997,685],{"class":239},[79,138999,139000],{"class":96},"2n",[79,139002,139003],{"class":239},") { }         ",[79,139005,139006],{"class":2440},"\u002F* 偶数 *\u002F\n",[79,139008,139009,139011,139013,139015,139018,139021],{"class":81,"line":497},[79,139010,29],{"class":395},[79,139012,131218],{"class":85},[79,139014,685],{"class":239},[79,139016,139017],{"class":96},"2n+1",[79,139019,139020],{"class":239},") { }       ",[79,139022,139023],{"class":2440},"\u002F* 奇数 *\u002F\n",[79,139025,139026,139028,139030,139032,139035,139037],{"class":81,"line":503},[79,139027,29],{"class":395},[79,139029,131218],{"class":85},[79,139031,685],{"class":239},[79,139033,139034],{"class":96},"-n+3",[79,139036,139020],{"class":239},[79,139038,139039],{"class":2440},"\u002F* 前3个 *\u002F\n",[53724,139041,139044],{"className":139042},[139043],"example","\n  示例内容\n",[19,139046,139047],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[3377,139049,139050],{},[29,139051,139052,139055],{},[59,139053,139054],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,139057,139058],{},"也就是说它选择的是熊大",[26,139060,139061],{"start":474},[29,139062,139063],{},"权重",[51,139065,139067],{"className":128304,"code":139066,"language":128306,"meta":57,"style":57},"\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",[59,139068,139069,139073,139083,139093,139107,139121,139135],{"__ignoreMap":57},[79,139070,139071],{"class":81,"line":82},[79,139072,138947],{"class":2440},[79,139074,139075,139077,139079,139081],{"class":81,"line":167},[79,139076,29],{"class":395},[79,139078,138954],{"class":85},[79,139080,138957],{"class":239},[79,139082,138960],{"class":2440},[79,139084,139085,139087,139089,139091],{"class":81,"line":178},[79,139086,29],{"class":395},[79,139088,138967],{"class":85},[79,139090,138970],{"class":239},[79,139092,138973],{"class":2440},[79,139094,139095,139097,139099,139101,139103,139105],{"class":81,"line":457},[79,139096,29],{"class":395},[79,139098,131218],{"class":85},[79,139100,685],{"class":239},[79,139102,1049],{"class":96},[79,139104,138986],{"class":239},[79,139106,138989],{"class":2440},[79,139108,139109,139111,139113,139115,139117,139119],{"class":81,"line":462},[79,139110,29],{"class":395},[79,139112,131218],{"class":85},[79,139114,685],{"class":239},[79,139116,139000],{"class":96},[79,139118,139003],{"class":239},[79,139120,139006],{"class":2440},[79,139122,139123,139125,139127,139129,139131,139133],{"class":81,"line":474},[79,139124,29],{"class":395},[79,139126,131218],{"class":85},[79,139128,685],{"class":239},[79,139130,139017],{"class":96},[79,139132,139020],{"class":239},[79,139134,139023],{"class":2440},[79,139136,139137,139139,139141,139143,139145,139147],{"class":81,"line":480},[79,139138,29],{"class":395},[79,139140,131218],{"class":85},[79,139142,685],{"class":239},[79,139144,139034],{"class":96},[79,139146,139020],{"class":239},[79,139148,139039],{"class":2440},[19,139150,139151],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[24137,139153,139155],{"id":139154},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139157,139158],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3699,139160],{"style":128160,"src":139161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[26,139163,139164],{},[29,139165,2415],{},[3377,139167,139168,139171,139174,139177,139180,139183],{},[29,139169,139170],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[29,139172,139173],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[29,139175,139176],{},"语法： element::before {}",[29,139178,139179],{},"before 和 after 必须有 content 属性",[29,139181,139182],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[29,139184,139185],{},"伪元素选择器和标签选择器一样，权重为 1",[26,139187,139188],{"start":167},[29,139189,139190],{},"实例",[51,139192,139193],{"className":128304,"code":139066,"language":128306,"meta":57,"style":57},[59,139194,139195,139199,139209,139219,139233,139247,139261],{"__ignoreMap":57},[79,139196,139197],{"class":81,"line":82},[79,139198,138947],{"class":2440},[79,139200,139201,139203,139205,139207],{"class":81,"line":167},[79,139202,29],{"class":395},[79,139204,138954],{"class":85},[79,139206,138957],{"class":239},[79,139208,138960],{"class":2440},[79,139210,139211,139213,139215,139217],{"class":81,"line":178},[79,139212,29],{"class":395},[79,139214,138967],{"class":85},[79,139216,138970],{"class":239},[79,139218,138973],{"class":2440},[79,139220,139221,139223,139225,139227,139229,139231],{"class":81,"line":457},[79,139222,29],{"class":395},[79,139224,131218],{"class":85},[79,139226,685],{"class":239},[79,139228,1049],{"class":96},[79,139230,138986],{"class":239},[79,139232,138989],{"class":2440},[79,139234,139235,139237,139239,139241,139243,139245],{"class":81,"line":462},[79,139236,29],{"class":395},[79,139238,131218],{"class":85},[79,139240,685],{"class":239},[79,139242,139000],{"class":96},[79,139244,139003],{"class":239},[79,139246,139006],{"class":2440},[79,139248,139249,139251,139253,139255,139257,139259],{"class":81,"line":474},[79,139250,29],{"class":395},[79,139252,131218],{"class":85},[79,139254,685],{"class":239},[79,139256,139017],{"class":96},[79,139258,139020],{"class":239},[79,139260,139023],{"class":2440},[79,139262,139263,139265,139267,139269,139271,139273],{"class":81,"line":480},[79,139264,29],{"class":395},[79,139266,131218],{"class":85},[79,139268,685],{"class":239},[79,139270,139034],{"class":96},[79,139272,139020],{"class":239},[79,139274,139039],{"class":2440},[3699,139276],{"style":128160,"src":139277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[26,139279,139280],{"start":178},[29,139281,139282],{},"使用场景1",[3699,139284],{"style":128160,"src":139285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,139287,139288],{},"不需要再加盒子来整红色那部分了",[51,139290,139292],{"className":128304,"code":139291,"language":128306,"meta":57,"style":57},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[59,139293,139294,139299,139308,139319,139329,139333,139342,139353,139363],{"__ignoreMap":57},[79,139295,139296],{"class":81,"line":82},[79,139297,139298],{"class":2440},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[79,139300,139301,139303,139306],{"class":81,"line":167},[79,139302,53724],{"class":395},[79,139304,139305],{"class":85},"::before",[79,139307,17732],{"class":239},[79,139309,139310,139313,139315,139317],{"class":81,"line":178},[79,139311,139312],{"class":96},"  content",[79,139314,53550],{"class":239},[79,139316,9846],{"class":89},[79,139318,3531],{"class":239},[79,139320,139321,139323,139325,139327],{"class":81,"line":457},[79,139322,129920],{"class":96},[79,139324,53550],{"class":239},[79,139326,62979],{"class":96},[79,139328,3531],{"class":239},[79,139330,139331],{"class":81,"line":462},[79,139332,3801],{"class":239},[79,139334,139335,139337,139340],{"class":81,"line":474},[79,139336,53724],{"class":395},[79,139338,139339],{"class":85},"::after",[79,139341,17732],{"class":239},[79,139343,139344,139346,139348,139351],{"class":81,"line":480},[79,139345,139312],{"class":96},[79,139347,53550],{"class":239},[79,139349,139350],{"class":89},"\"→\"",[79,139352,3531],{"class":239},[79,139354,139355,139357,139359,139361],{"class":81,"line":486},[79,139356,73013],{"class":96},[79,139358,53550],{"class":239},[79,139360,64180],{"class":96},[79,139362,3531],{"class":239},[79,139364,139365],{"class":81,"line":491},[79,139366,3801],{"class":239},[3699,139368],{"style":128160,"src":139369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,139371,139372],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3699,139374],{"style":128160,"src":139375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,139377,139378],{},"但是在引用时需要先转义一下",[19,139380,139381],{},"content='\\e930'",[26,139383,139384],{"start":457},[29,139385,139386],{},"使用场景2",[19,139388,139389],{},"仿土豆效果",[19,139391,139392],{},"通过使用伪元素选择器可以减少body中盒子的数量",[51,139394,139395],{"className":128304,"code":139291,"language":128306,"meta":57,"style":57},[59,139396,139397,139401,139409,139419,139429,139433,139441,139451,139461],{"__ignoreMap":57},[79,139398,139399],{"class":81,"line":82},[79,139400,139298],{"class":2440},[79,139402,139403,139405,139407],{"class":81,"line":167},[79,139404,53724],{"class":395},[79,139406,139305],{"class":85},[79,139408,17732],{"class":239},[79,139410,139411,139413,139415,139417],{"class":81,"line":178},[79,139412,139312],{"class":96},[79,139414,53550],{"class":239},[79,139416,9846],{"class":89},[79,139418,3531],{"class":239},[79,139420,139421,139423,139425,139427],{"class":81,"line":457},[79,139422,129920],{"class":96},[79,139424,53550],{"class":239},[79,139426,62979],{"class":96},[79,139428,3531],{"class":239},[79,139430,139431],{"class":81,"line":462},[79,139432,3801],{"class":239},[79,139434,139435,139437,139439],{"class":81,"line":474},[79,139436,53724],{"class":395},[79,139438,139339],{"class":85},[79,139440,17732],{"class":239},[79,139442,139443,139445,139447,139449],{"class":81,"line":480},[79,139444,139312],{"class":96},[79,139446,53550],{"class":239},[79,139448,139350],{"class":89},[79,139450,3531],{"class":239},[79,139452,139453,139455,139457,139459],{"class":81,"line":486},[79,139454,73013],{"class":96},[79,139456,53550],{"class":239},[79,139458,64180],{"class":96},[79,139460,3531],{"class":239},[79,139462,139463],{"class":81,"line":491},[79,139464,3801],{"class":239},[3699,139466],{"style":128160,"src":139467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[26,139469,139470],{"start":462},[29,139471,139472],{},"使用场景3",[19,139474,139475],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[51,139477,139479],{"className":128304,"code":139478,"language":128306,"meta":57,"style":57},".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",[59,139480,139481,139487,139497,139501,139505,139509,139517,139527,139537,139541,139549,139559,139569],{"__ignoreMap":57},[79,139482,139483,139485],{"class":81,"line":82},[79,139484,132152],{"class":85},[79,139486,17732],{"class":239},[79,139488,139489,139491,139493,139495],{"class":81,"line":167},[79,139490,132784],{"class":96},[79,139492,53550],{"class":239},[79,139494,25876],{"class":96},[79,139496,3531],{"class":239},[79,139498,139499],{"class":81,"line":178},[79,139500,3801],{"class":239},[79,139502,139503],{"class":81,"line":457},[79,139504,137765],{"class":239},[79,139506,139507],{"class":81,"line":462},[79,139508,139298],{"class":2440},[79,139510,139511,139513,139515],{"class":81,"line":474},[79,139512,53724],{"class":395},[79,139514,139305],{"class":85},[79,139516,17732],{"class":239},[79,139518,139519,139521,139523,139525],{"class":81,"line":480},[79,139520,139312],{"class":96},[79,139522,53550],{"class":239},[79,139524,9846],{"class":89},[79,139526,3531],{"class":239},[79,139528,139529,139531,139533,139535],{"class":81,"line":486},[79,139530,129920],{"class":96},[79,139532,53550],{"class":239},[79,139534,62979],{"class":96},[79,139536,3531],{"class":239},[79,139538,139539],{"class":81,"line":491},[79,139540,3801],{"class":239},[79,139542,139543,139545,139547],{"class":81,"line":497},[79,139544,53724],{"class":395},[79,139546,139339],{"class":85},[79,139548,17732],{"class":239},[79,139550,139551,139553,139555,139557],{"class":81,"line":503},[79,139552,139312],{"class":96},[79,139554,53550],{"class":239},[79,139556,139350],{"class":89},[79,139558,3531],{"class":239},[79,139560,139561,139563,139565,139567],{"class":81,"line":509},[79,139562,73013],{"class":96},[79,139564,53550],{"class":239},[79,139566,64180],{"class":96},[79,139568,3531],{"class":239},[79,139570,139571],{"class":81,"line":514},[79,139572,3801],{"class":239},[19,139574,139575],{},"div {\nmargin: 0 auto;\n}",[51,139577,139580],{"className":139578,"code":139579,"language":56},[54],"\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",[59,139581,139579],{"__ignoreMap":57},[19,139583,139584],{},"如果想让多个元素都发生变化",[19,139586,139587],{},"不能如下操作：",[19,139589,139590],{},"transition: width 2s ease 0.5s;",[19,139592,139593],{},"transition: height 2s ease 0.5s;不对！！！",[19,139595,139596],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139598,139599],{},"使用如下：加逗号隔开",[19,139601,139602],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139604,139605],{},"transition all 2s ease;",[265,139607,139609],{"id":139608},"_1426-过渡练习","14.2.6 过渡练习",[26,139611,139612],{},[29,139613,139614],{},"进度条",[3699,139616],{"style":128160,"src":139617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[51,139619,139621],{"className":128304,"code":139620,"language":128306,"meta":57,"style":57},"div {\n  transition: all 0.3s ease;\n}\n",[59,139622,139623,139629,139647],{"__ignoreMap":57},[79,139624,139625,139627],{"class":81,"line":82},[79,139626,53724],{"class":395},[79,139628,17732],{"class":239},[79,139630,139631,139634,139636,139638,139641,139643,139645],{"class":81,"line":167},[79,139632,139633],{"class":96},"  transition",[79,139635,53550],{"class":239},[79,139637,30253],{"class":96},[79,139639,139640],{"class":96}," 0.3",[79,139642,3068],{"class":243},[79,139644,80788],{"class":96},[79,139646,3531],{"class":239},[79,139648,139649],{"class":81,"line":178},[79,139650,3801],{"class":239},[26,139652,139653],{"start":167},[29,139654,139655],{},"小米logo",[19,139657,139658],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[51,139660,139662],{"className":128304,"code":139661,"language":128306,"meta":57,"style":57},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[59,139663,139664,139669,139675,139691,139696],{"__ignoreMap":57},[79,139665,139666],{"class":81,"line":82},[79,139667,139668],{"class":2440},"\u002F* CSS3 过渡 *\u002F\n",[79,139670,139671,139673],{"class":81,"line":167},[79,139672,53724],{"class":395},[79,139674,17732],{"class":239},[79,139676,139677,139679,139681,139683,139685,139687,139689],{"class":81,"line":178},[79,139678,139633],{"class":96},[79,139680,53550],{"class":239},[79,139682,30253],{"class":96},[79,139684,139640],{"class":96},[79,139686,3068],{"class":243},[79,139688,80788],{"class":96},[79,139690,3531],{"class":239},[79,139692,139693],{"class":81,"line":457},[79,139694,139695],{"class":2440},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[79,139697,139698],{"class":81,"line":462},[79,139699,3801],{"class":239},[19,139701,139702],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[2287,139704,139705],{},"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":57,"searchDepth":167,"depth":167,"links":139707},[139708,139713],{"id":138038,"depth":167,"text":138039,"children":139709},[139710,139711,139712],{"id":138042,"depth":178,"text":138043},{"id":138119,"depth":178,"text":138120},{"id":138450,"depth":178,"text":138451},{"id":138741,"depth":167,"text":138742,"children":139714},[139715,139716],{"id":138745,"depth":178,"text":138746},{"id":139608,"depth":178,"text":139609},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138030,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139723,"title":139724,"body":139725,"description":25516,"extension":2314,"meta":141469,"navigation":453,"path":141470,"seo":141471,"stem":141472,"__hash__":141473},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139726,"toc":141450},[139727,139730,139734,139737,139743,139749,139753,139755,139758,139761,139764,139767,139770,139773,139776,139780,139784,139787,139790,139793,139797,139800,139803,139808,139811,139814,139817,139821,139824,139833,139836,139839,139843,139846,139849,139854,139861,139875,139883,139890,139895,139898,139901,139904,139911,139915,139921,139927,139930,139933,139938,139944,139946,139954,139959,139962,139968,139970,139975,139980,139983,139985,139990,139993,139998,140003,140037,140041,140045,140048,140052,140055,140141,140144,140181,140184,140220,140224,140229,140242,140296,140298,140326,140328,140356,140362,140376,140378,140422,140424,140468,140471,140478,140489,140491,140518,140520,140546,140553,140569,140571,140665,140667,140761,140768,140771,140776,140782,140856,140859,140861,140897,140899,140935,140938,140945,140964,140967,140970,140972,140997,140999,141023,141026,141029,141059,141063,141066,141129,141131,141197,141199,141263,141266,141298,141300,141326,141328,141354,141357,141388,141390,141416,141418,141444,141447],[10,139728,139724],{"id":139729},"_15-品优购项目上篇-搭建与公共模块",[14,139731,139733],{"id":139732},"_151-项目规划","15.1 项目规划",[3699,139735],{"style":128160,"src":139736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139738,139739,139742],{},[2528,139740,139741],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139744,139745,139748],{},[2528,139746,139747],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139750,139752],{"id":139751},"_152-项目介绍","15.2 项目介绍",[19,139754,139741],{},[3699,139756],{"style":128160,"src":139757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139759,139760],{},"主页：",[3699,139762],{"style":128160,"src":139763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139765,139766],{},"列表页：",[3699,139768],{"style":128160,"src":139769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139771,139772],{},"注册页：",[3699,139774],{"style":128160,"src":139775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139777,139779],{"id":139778},"_153-项目搭建工作","15.3 项目搭建工作",[265,139781,139783],{"id":139782},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3699,139785],{"style":128160,"src":139786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139788,139789],{},"经常更换的图片要放到upload文件夹中",[19,139791,139792],{},"不经常换的放到images文件夹中",[265,139794,139796],{"id":139795},"_1532-创建文件如下","15.3.2 创建文件如下",[3699,139798],{"style":128160,"src":139799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3699,139801],{"style":128160,"src":139802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139804,139805],{},[2528,139806,139807],{},"初始化样式：",[19,139809,139810],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139812,139813],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139815,139816],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[265,139818,139820],{"id":139819},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139822,139823],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139825,139826,139827,139832],{},"这里最典型的应用就是 ",[2528,139828,139829],{},[59,139830,139831],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3699,139834],{"style":128160,"src":139835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139837,139838],{},"通过link方法来引入",[265,139840,139842],{"id":139841},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3699,139844],{"style":128160,"src":139845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139847,139848],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[26,139850,139851],{},[29,139852,139853],{},"制作favicon图标",[19,139855,139856,139857,139860],{},"①把品优购图标切成 ",[59,139858,139859],{},"png"," 图片",[19,139862,139863,139864,139866,139867,139870,139871],{},"②把 ",[59,139865,139859],{}," 图片转换为 ",[59,139868,139869],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2614,139872,139873],{"href":139873,"rel":139874},"http:\u002F\u002Fwww.bitbug.net\u002F",[26001],[26,139876,139877,139880],{"start":167},[29,139878,139879],{},"favicon图标放到网站根目录下",[29,139881,139882],{},"HTML页面引入favicon",[19,139884,139885,139886,139889],{},"在html 页面里面的 ",[59,139887,139888],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139891,139892],{},[59,139893,139894],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139896,139897],{},"复制这行代码或者在生成这个的网站进行复制",[3699,139899],{"style":128160,"src":139900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139902,139903],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139905,139906,139907],{},"例如:",[2614,139908,139909],{"href":139909,"rel":139910},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[26001],[265,139912,139914],{"id":139913},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139916,139917,139920],{},[2528,139918,139919],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139922,139923,139926],{},[2528,139924,139925],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139928,139929],{},"页面必须有三个标签用来符合 SEO 优化",[3699,139931],{"style":128160,"src":139932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[26,139934,139935],{},[29,139936,139937],{},"title网站标题",[19,139939,139940,139943],{},[2528,139941,139942],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139945,70899],{},[3377,139947,139948,139951],{},[29,139949,139950],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[29,139952,139953],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[26,139955,139956],{"start":167},[29,139957,139958],{},"description网站描述",[19,139960,139961],{},"简要说明我们网站主要是做什么的",[19,139963,139964,139967],{},[2528,139965,139966],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139969,70899],{},[19,139971,139972],{},[59,139973,139974],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[26,139976,139977],{"start":178},[29,139978,139979],{},"keywords关键词",[19,139981,139982],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139984,70899],{},[19,139986,139987],{},[59,139988,139989],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139991,139992],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139994,139995],{},[2528,139996,139997],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[26,139999,140000],{"start":457},[29,140001,140002],{},"代码总结",[51,140004,140005],{"className":129051,"code":132408,"language":129053,"meta":57,"style":57},[59,140006,140007,140011,140025,140029],{"__ignoreMap":57},[79,140008,140009],{"class":81,"line":82},[79,140010,132415],{"class":2440},[79,140012,140013,140015,140017,140019,140021,140023],{"class":81,"line":167},[79,140014,392],{"class":239},[79,140016,53724],{"class":395},[79,140018,55596],{"class":85},[79,140020,244],{"class":239},[79,140022,132428],{"class":89},[79,140024,53420],{"class":239},[79,140026,140027],{"class":81,"line":178},[79,140028,132435],{"class":239},[79,140030,140031,140033,140035],{"class":81,"line":457},[79,140032,53898],{"class":239},[79,140034,53724],{"class":395},[79,140036,53420],{"class":239},[14,140038,140040],{"id":140039},"_154-项目公共部分制作","15.4 项目公共部分制作",[265,140042,140044],{"id":140043},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3699,140046],{"style":128160,"src":140047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[265,140049,140051],{"id":140050},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,140053,140054],{},"布局思路：",[3377,140056,140057,140060,140063,140085,140118],{},[29,140058,140059],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[29,140061,140062],{},"里面包含版心的盒子",[29,140064,140065,140066],{},"版心盒子里面包含 1 号左侧盒子左浮动",[3377,140067,140068,140076,140082],{},[29,140069,140070,140071,23639,140073,140075],{},"1 号盒子 里面包含一个",[59,140072,3377],{},[59,140074,3377],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[29,140077,140078,140079,140081],{},"里面的内容是水平排列，所以需要给",[59,140080,29],{},"设置浮动",[29,140083,140084],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[29,140086,140087,140088],{},"版心盒子里面包含 2 号右侧盒子右浮动",[3377,140089,140090,140104,140109],{},[29,140091,140092,140093,23639,140095,140097,140098,140100,140101,140103],{},"2 号盒子 里面包含一个",[59,140094,3377],{},[59,140096,3377],{},"包裹",[59,140099,29],{},"，中间的",[59,140102,3292],{},"可以用样式去设置，也可以用字符 |",[29,140105,140106,140107,140081],{},"里面内容水平排列，给",[59,140108,29],{},[29,140110,140111,140112,140114,140115,140117],{},"找到里面所有偶数的 ",[59,140113,29],{}," 设置样式（偶数的 ",[59,140116,29],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[29,140119,140120,140121],{},"需要用到字体图标",[3377,140122,140123,140129,140132,140135,140138],{},[29,140124,140125,140126],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[59,140127,140128],{},"arrow-icon",[29,140130,140131],{},"先要引入字体图片的资源",[29,140133,140134],{},"在样式里面利用 font-face 来进行声明",[29,140136,140137],{},"在伪元素的 content属性设置 图标的编码",[29,140139,140140],{},"给伪元素设置font-family属性",[19,140142,140143],{},"结构实例代码：",[51,140145,140147],{"className":128304,"code":140146,"language":128306,"meta":57,"style":57},"div::before {\n  content: \"\";\n  display: block;\n}\n",[59,140148,140149,140157,140167,140177],{"__ignoreMap":57},[79,140150,140151,140153,140155],{"class":81,"line":82},[79,140152,53724],{"class":395},[79,140154,139305],{"class":85},[79,140156,17732],{"class":239},[79,140158,140159,140161,140163,140165],{"class":81,"line":167},[79,140160,139312],{"class":96},[79,140162,53550],{"class":239},[79,140164,9846],{"class":89},[79,140166,3531],{"class":239},[79,140168,140169,140171,140173,140175],{"class":81,"line":178},[79,140170,129920],{"class":96},[79,140172,53550],{"class":239},[79,140174,62979],{"class":96},[79,140176,3531],{"class":239},[79,140178,140179],{"class":81,"line":457},[79,140180,3801],{"class":239},[19,140182,140183],{},"样式实例代码：",[51,140185,140186],{"className":128304,"code":140146,"language":128306,"meta":57,"style":57},[59,140187,140188,140196,140206,140216],{"__ignoreMap":57},[79,140189,140190,140192,140194],{"class":81,"line":82},[79,140191,53724],{"class":395},[79,140193,139305],{"class":85},[79,140195,17732],{"class":239},[79,140197,140198,140200,140202,140204],{"class":81,"line":167},[79,140199,139312],{"class":96},[79,140201,53550],{"class":239},[79,140203,9846],{"class":89},[79,140205,3531],{"class":239},[79,140207,140208,140210,140212,140214],{"class":81,"line":178},[79,140209,129920],{"class":96},[79,140211,53550],{"class":239},[79,140213,62979],{"class":96},[79,140215,3531],{"class":239},[79,140217,140218],{"class":81,"line":457},[79,140219,3801],{"class":239},[265,140221,140223],{"id":140222},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[3377,140225,140226],{},[29,140227,140228],{},"header 盒子必须要有高度",[19,140230,140231,140232,140234,140235],{},"1 号盒子是 ",[59,140233,133316],{}," 标志定位，在正常开发过程中， ",[2528,140236,140237,140238,140241],{},"logo的布局其实是有讲究的，需要进行 ",[59,140239,140240],{},"logoSEO","的优化 （★★★）",[3377,140243,140244,140252,140260,140287],{},[29,140245,140246,140248,140249,140251],{},[59,140247,133316],{}," 里面首先放一个 ",[59,140250,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[29,140253,140254,140256,140257,140259],{},[59,140255,10],{}," 里面再放一个链接，可以返回首页的，把 ",[59,140258,133316],{}," 的背景图片给链接即可",[29,140261,140262,140263],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[3377,140264,140265,140280],{},[29,140266,140267,140268,140271,140272,140275,140276,140279],{},"方法1：",[59,140269,140270],{},"text-indent"," 移到盒子外面（",[59,140273,140274],{},"text-indent: -9999px",") ，然后 ",[59,140277,140278],{},"overflow:hidden"," ，淘宝的做法",[29,140281,140282,140283,140286],{},"方法2：直接给 ",[59,140284,140285],{},"font-size: 0;"," 就看不到文字了，京东的做法",[29,140288,140289,140290,140292,140293,140295],{},"最后给链接一个 ",[59,140291,53520],{}," 属性，这样鼠标放到 ",[59,140294,133316],{}," 上就可以看到提示文字了",[19,140297,140143],{},[51,140299,140300],{"className":129051,"code":133537,"language":129053,"meta":57,"style":57},[59,140301,140302],{"__ignoreMap":57},[79,140303,140304,140306,140308,140310,140312,140314,140316,140318,140320,140322,140324],{"class":81,"line":82},[79,140305,392],{"class":239},[79,140307,2614],{"class":395},[79,140309,63167],{"class":85},[79,140311,244],{"class":239},[79,140313,133552],{"class":89},[79,140315,133555],{"class":85},[79,140317,244],{"class":239},[79,140319,133560],{"class":89},[79,140321,133563],{"class":239},[79,140323,2614],{"class":395},[79,140325,53420],{"class":239},[19,140327,140183],{},[51,140329,140330],{"className":129051,"code":133537,"language":129053,"meta":57,"style":57},[59,140331,140332],{"__ignoreMap":57},[79,140333,140334,140336,140338,140340,140342,140344,140346,140348,140350,140352,140354],{"class":81,"line":82},[79,140335,392],{"class":239},[79,140337,2614],{"class":395},[79,140339,63167],{"class":85},[79,140341,244],{"class":239},[79,140343,133552],{"class":89},[79,140345,133555],{"class":85},[79,140347,244],{"class":239},[79,140349,133560],{"class":89},[79,140351,133563],{"class":239},[79,140353,2614],{"class":395},[79,140355,53420],{"class":239},[19,140357,140358,140359,140361],{},"2 号盒子是 ",[59,140360,133329],{}," 搜索模块定位",[3377,140363,140364,140367,140370,140373],{},[29,140365,140366],{},"search盒子利用定位的方式放在对应的位置",[29,140368,140369],{},"search盒子设置绝对定位，header盒子设置相对定位",[29,140371,140372],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[29,140374,140375],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,140377,140143],{},[51,140379,140380],{"className":128304,"code":133624,"language":128306,"meta":57,"style":57},[59,140381,140382,140404,140408,140418],{"__ignoreMap":57},[79,140383,140384,140386,140388,140390,140392,140394,140396,140398,140400,140402],{"class":81,"line":82},[79,140385,53724],{"class":395},[79,140387,1060],{"class":239},[79,140389,19],{"class":395},[79,140391,1060],{"class":239},[79,140393,10],{"class":395},[79,140395,1060],{"class":239},[79,140397,3377],{"class":395},[79,140399,1060],{"class":239},[79,140401,29],{"class":395},[79,140403,17732],{"class":239},[79,140405,140406],{"class":81,"line":167},[79,140407,133653],{"class":2440},[79,140409,140410,140412,140414,140416],{"class":81,"line":178},[79,140411,129920],{"class":96},[79,140413,53550],{"class":239},[79,140415,62979],{"class":96},[79,140417,3531],{"class":239},[79,140419,140420],{"class":81,"line":457},[79,140421,3801],{"class":239},[19,140423,140183],{},[51,140425,140426],{"className":128304,"code":133624,"language":128306,"meta":57,"style":57},[59,140427,140428,140450,140454,140464],{"__ignoreMap":57},[79,140429,140430,140432,140434,140436,140438,140440,140442,140444,140446,140448],{"class":81,"line":82},[79,140431,53724],{"class":395},[79,140433,1060],{"class":239},[79,140435,19],{"class":395},[79,140437,1060],{"class":239},[79,140439,10],{"class":395},[79,140441,1060],{"class":239},[79,140443,3377],{"class":395},[79,140445,1060],{"class":239},[79,140447,29],{"class":395},[79,140449,17732],{"class":239},[79,140451,140452],{"class":81,"line":167},[79,140453,133653],{"class":2440},[79,140455,140456,140458,140460,140462],{"class":81,"line":178},[79,140457,129920],{"class":96},[79,140459,53550],{"class":239},[79,140461,62979],{"class":96},[79,140463,3531],{"class":239},[79,140465,140466],{"class":81,"line":457},[79,140467,3801],{"class":239},[19,140469,140470],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140472,140473,140474,140477],{},"3 号盒子是 ",[59,140475,140476],{},"hotwords"," 热词模块定位",[3377,140479,140480,140483,140486],{},[29,140481,140482],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[29,140484,140485],{},"给里面所有的a标签设置 左右10px的外边距",[29,140487,140488],{},"给第一个a标签设置文字变红色（#c81623）",[19,140490,140143],{},[51,140492,140494],{"className":128304,"code":140493,"language":128306,"meta":57,"style":57},"div {\n  margin: 0 auto;\n}\n",[59,140495,140496,140502,140514],{"__ignoreMap":57},[79,140497,140498,140500],{"class":81,"line":82},[79,140499,53724],{"class":395},[79,140501,17732],{"class":239},[79,140503,140504,140506,140508,140510,140512],{"class":81,"line":167},[79,140505,72578],{"class":96},[79,140507,53550],{"class":239},[79,140509,1030],{"class":96},[79,140511,53669],{"class":96},[79,140513,3531],{"class":239},[79,140515,140516],{"class":81,"line":178},[79,140517,3801],{"class":239},[19,140519,140183],{},[51,140521,140522],{"className":128304,"code":140493,"language":128306,"meta":57,"style":57},[59,140523,140524,140530,140542],{"__ignoreMap":57},[79,140525,140526,140528],{"class":81,"line":82},[79,140527,53724],{"class":395},[79,140529,17732],{"class":239},[79,140531,140532,140534,140536,140538,140540],{"class":81,"line":167},[79,140533,72578],{"class":96},[79,140535,53550],{"class":239},[79,140537,1030],{"class":96},[79,140539,53669],{"class":96},[79,140541,3531],{"class":239},[79,140543,140544],{"class":81,"line":178},[79,140545,3801],{"class":239},[19,140547,140548,140549,140552],{},"4 号盒子是 ",[59,140550,140551],{},"shopcar"," 购物车模块",[3377,140554,140555,140560,140563,140566],{},[29,140556,125087,140557,140559],{},[59,140558,140551],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[29,140561,140562],{},"count 统计部分用绝对定位做",[29,140564,140565],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[29,140567,140568],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140570,140143],{},[51,140572,140573],{"className":128304,"code":133736,"language":128306,"meta":57,"style":57},[59,140574,140575,140579,140593,140597,140611,140615,140629,140633,140647,140651],{"__ignoreMap":57},[79,140576,140577],{"class":81,"line":82},[79,140578,133743],{"class":2440},[79,140580,140581,140583,140585,140587,140589,140591],{"class":81,"line":167},[79,140582,133748],{"class":85},[79,140584,81915],{"class":239},[79,140586,130664],{"class":96},[79,140588,53550],{"class":239},[79,140590,133757],{"class":96},[79,140592,131234],{"class":239},[79,140594,140595],{"class":81,"line":178},[79,140596,133764],{"class":2440},[79,140598,140599,140601,140603,140605,140607,140609],{"class":81,"line":457},[79,140600,133769],{"class":85},[79,140602,81915],{"class":239},[79,140604,130664],{"class":96},[79,140606,53550],{"class":239},[79,140608,56874],{"class":96},[79,140610,131234],{"class":239},[79,140612,140613],{"class":81,"line":462},[79,140614,133784],{"class":2440},[79,140616,140617,140619,140621,140623,140625,140627],{"class":81,"line":474},[79,140618,133789],{"class":85},[79,140620,81915],{"class":239},[79,140622,130664],{"class":96},[79,140624,53550],{"class":239},[79,140626,56941],{"class":96},[79,140628,131234],{"class":239},[79,140630,140631],{"class":81,"line":480},[79,140632,133804],{"class":2440},[79,140634,140635,140637,140639,140641,140643,140645],{"class":81,"line":486},[79,140636,133809],{"class":85},[79,140638,81915],{"class":239},[79,140640,130664],{"class":96},[79,140642,53550],{"class":239},[79,140644,88338],{"class":96},[79,140646,131234],{"class":239},[79,140648,140649],{"class":81,"line":491},[79,140650,133824],{"class":2440},[79,140652,140653,140655,140657,140659,140661,140663],{"class":81,"line":497},[79,140654,133829],{"class":85},[79,140656,81915],{"class":239},[79,140658,130664],{"class":96},[79,140660,53550],{"class":239},[79,140662,133838],{"class":96},[79,140664,131234],{"class":239},[19,140666,140183],{},[51,140668,140669],{"className":128304,"code":133736,"language":128306,"meta":57,"style":57},[59,140670,140671,140675,140689,140693,140707,140711,140725,140729,140743,140747],{"__ignoreMap":57},[79,140672,140673],{"class":81,"line":82},[79,140674,133743],{"class":2440},[79,140676,140677,140679,140681,140683,140685,140687],{"class":81,"line":167},[79,140678,133748],{"class":85},[79,140680,81915],{"class":239},[79,140682,130664],{"class":96},[79,140684,53550],{"class":239},[79,140686,133757],{"class":96},[79,140688,131234],{"class":239},[79,140690,140691],{"class":81,"line":178},[79,140692,133764],{"class":2440},[79,140694,140695,140697,140699,140701,140703,140705],{"class":81,"line":457},[79,140696,133769],{"class":85},[79,140698,81915],{"class":239},[79,140700,130664],{"class":96},[79,140702,53550],{"class":239},[79,140704,56874],{"class":96},[79,140706,131234],{"class":239},[79,140708,140709],{"class":81,"line":462},[79,140710,133784],{"class":2440},[79,140712,140713,140715,140717,140719,140721,140723],{"class":81,"line":474},[79,140714,133789],{"class":85},[79,140716,81915],{"class":239},[79,140718,130664],{"class":96},[79,140720,53550],{"class":239},[79,140722,56941],{"class":96},[79,140724,131234],{"class":239},[79,140726,140727],{"class":81,"line":480},[79,140728,133804],{"class":2440},[79,140730,140731,140733,140735,140737,140739,140741],{"class":81,"line":486},[79,140732,133809],{"class":85},[79,140734,81915],{"class":239},[79,140736,130664],{"class":96},[79,140738,53550],{"class":239},[79,140740,88338],{"class":96},[79,140742,131234],{"class":239},[79,140744,140745],{"class":81,"line":491},[79,140746,133824],{"class":2440},[79,140748,140749,140751,140753,140755,140757,140759],{"class":81,"line":497},[79,140750,133829],{"class":85},[79,140752,81915],{"class":239},[79,140754,130664],{"class":96},[79,140756,53550],{"class":239},[79,140758,133838],{"class":96},[79,140760,131234],{"class":239},[265,140762,140764,140765,140767],{"id":140763},"_1544-nav导航模块制作","15.4.4 ",[59,140766,55823],{},"导航模块制作",[3699,140769],{"style":128160,"src":140770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140772,140773,140775],{},[59,140774,55823],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140777,140778,140779],{},"1 号盒子左侧浮动，",[59,140780,140781],{},"dropdown",[3377,140783,140784,140794,140802,140808,140816,140826,140834,140845],{},[29,140785,140786,140787,1905,140790,140793],{},"1号盒子有讲究，根据相关性 里面包含 ",[59,140788,140789],{},".dt",[59,140791,140792],{},".dd"," 两个盒子",[29,140795,140796,140798,140799,140801],{},[59,140797,140789],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[59,140800,140792],{}," 挤到下面去了",[29,140803,140804,140805,140807],{},"给 ",[59,140806,140792],{}," 盒子设置宽度 和 高度，以及背景颜色",[29,140809,140804,140810,140812,140813,121989],{},[59,140811,140792],{}," 盒子里面定义 无序列表 （",[59,140814,140815],{},"ul > li > a",[29,140817,140818,140819,140821,140822,140825],{},"每个 ",[59,140820,29],{}," 都有一个高度（",[59,140823,140824],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[29,140827,140804,140828,140830,140831,121989],{},[59,140829,29],{}," 里面的a设置文字大小（",[59,140832,140833],{},"14px",[29,140835,140804,140836,140838,140839,140841,140842,140844],{},[59,140837,29],{}," 设置 ",[59,140840,129465],{},"，当鼠标移入的时候，让",[59,140843,29],{},"的背景变成白色，让里面的文字变成红色",[29,140846,140847,140849,140850,140852,140853,140855],{},[59,140848,29],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[59,140851,29],{},"的右侧，那么给",[59,140854,29],{},"设置相对定位",[19,140857,140858],{},"一定要注意相关性",[19,140860,140143],{},[51,140862,140863],{"className":128304,"code":140146,"language":128306,"meta":57,"style":57},[59,140864,140865,140873,140883,140893],{"__ignoreMap":57},[79,140866,140867,140869,140871],{"class":81,"line":82},[79,140868,53724],{"class":395},[79,140870,139305],{"class":85},[79,140872,17732],{"class":239},[79,140874,140875,140877,140879,140881],{"class":81,"line":167},[79,140876,139312],{"class":96},[79,140878,53550],{"class":239},[79,140880,9846],{"class":89},[79,140882,3531],{"class":239},[79,140884,140885,140887,140889,140891],{"class":81,"line":178},[79,140886,129920],{"class":96},[79,140888,53550],{"class":239},[79,140890,62979],{"class":96},[79,140892,3531],{"class":239},[79,140894,140895],{"class":81,"line":457},[79,140896,3801],{"class":239},[19,140898,140183],{},[51,140900,140901],{"className":128304,"code":140146,"language":128306,"meta":57,"style":57},[59,140902,140903,140911,140921,140931],{"__ignoreMap":57},[79,140904,140905,140907,140909],{"class":81,"line":82},[79,140906,53724],{"class":395},[79,140908,139305],{"class":85},[79,140910,17732],{"class":239},[79,140912,140913,140915,140917,140919],{"class":81,"line":167},[79,140914,139312],{"class":96},[79,140916,53550],{"class":239},[79,140918,9846],{"class":89},[79,140920,3531],{"class":239},[79,140922,140923,140925,140927,140929],{"class":81,"line":178},[79,140924,129920],{"class":96},[79,140926,53550],{"class":239},[79,140928,62979],{"class":96},[79,140930,3531],{"class":239},[79,140932,140933],{"class":81,"line":457},[79,140934,3801],{"class":239},[19,140936,140937],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140939,140940,140941,140944],{},"2 号盒子左侧浮动，",[59,140942,140943],{},"navitems"," 导航栏组",[3377,140946,140947,140952,140961],{},[29,140948,140949,140950],{},"里面结构是 ",[59,140951,140815],{},[29,140953,140954,140955,140957,140958,140960],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[59,140956,2614],{},"左右的",[59,140959,33007],{},"把两侧撑开",[29,140962,140963],{},"让文字垂直居中（行高等于高度）",[3699,140965],{"style":128160,"src":140966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140968,140969],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140971,140143],{},[51,140973,140975],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},".box {\n  float: left;\n}\n",[59,140976,140977,140983,140993],{"__ignoreMap":57},[79,140978,140979,140981],{"class":81,"line":82},[79,140980,132152],{"class":85},[79,140982,17732],{"class":239},[79,140984,140985,140987,140989,140991],{"class":81,"line":167},[79,140986,132784],{"class":96},[79,140988,53550],{"class":239},[79,140990,25876],{"class":96},[79,140992,3531],{"class":239},[79,140994,140995],{"class":81,"line":178},[79,140996,3801],{"class":239},[19,140998,140183],{},[51,141000,141001],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},[59,141002,141003,141009,141019],{"__ignoreMap":57},[79,141004,141005,141007],{"class":81,"line":82},[79,141006,132152],{"class":85},[79,141008,17732],{"class":239},[79,141010,141011,141013,141015,141017],{"class":81,"line":167},[79,141012,132784],{"class":96},[79,141014,53550],{"class":239},[79,141016,25876],{"class":96},[79,141018,3531],{"class":239},[79,141020,141021],{"class":81,"line":178},[79,141022,3801],{"class":239},[19,141024,141025],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3699,141027],{"style":128160,"src":141028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[51,141030,141031],{"className":128304,"code":132461,"language":128306,"meta":57,"style":57},[59,141032,141033,141039,141055],{"__ignoreMap":57},[79,141034,141035,141037],{"class":81,"line":82},[79,141036,53724],{"class":395},[79,141038,17732],{"class":239},[79,141040,141041,141043,141045,141047,141049,141051,141053],{"class":81,"line":167},[79,141042,73004],{"class":96},[79,141044,53550],{"class":239},[79,141046,1072],{"class":96},[79,141048,53605],{"class":243},[79,141050,53634],{"class":96},[79,141052,131696],{"class":96},[79,141054,3531],{"class":239},[79,141056,141057],{"class":81,"line":178},[79,141058,3801],{"class":239},[265,141060,141062],{"id":141061},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3699,141064],{"style":128160,"src":141065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[3377,141067,141068,141073,141078],{},[29,141069,141070,141072],{},[59,141071,133507],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[29,141074,141075,141077],{},[59,141076,133507],{}," 里面有一个大的版心",[29,141079,141080,141081,141084,141085],{},"版心里面包含 1 号盒子，",[59,141082,141083],{},"mod_service"," 是服务模块，mod 是模块的意思",[3377,141086,141087,141092,141105,141121,141126],{},[29,141088,140804,141089,141091],{},[59,141090,141083],{}," 设置高度（80px）和下边框",[29,141093,141094,141095,141098,141099,141101,141102,141104],{},"在里面定义 ",[59,141096,141097],{},"ul > li"," ,每个",[59,141100,29],{}," 宽度是300px 高度是 50px，给每个",[59,141103,29],{},"设置35px的左内边距",[29,141106,141107,141108,141110,141111,141113,141114,141116,141117,20549,141119,121989],{},"在每个",[59,141109,29],{},"里面，放一个 ",[59,141112,25049],{},"（里面放图标），一个",[59,141115,53724],{},"（里面放",[59,141118,53724],{},[59,141120,19],{},[29,141122,140804,141123,141125],{},[59,141124,25049],{},"设置浮动，让h5与这个div左右排列",[29,141127,141128],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141130,140143],{},[51,141132,141134],{"className":128304,"code":141133,"language":128306,"meta":57,"style":57},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[59,141135,141136,141142,141154,141166,141193],{"__ignoreMap":57},[79,141137,141138,141140],{"class":81,"line":82},[79,141139,136061],{"class":85},[79,141141,17732],{"class":239},[79,141143,141144,141146,141148,141150,141152],{"class":81,"line":167},[79,141145,72676],{"class":96},[79,141147,53550],{"class":239},[79,141149,3073],{"class":96},[79,141151,53605],{"class":243},[79,141153,3531],{"class":239},[79,141155,141156,141158,141160,141162,141164],{"class":81,"line":178},[79,141157,72896],{"class":96},[79,141159,53550],{"class":239},[79,141161,3073],{"class":96},[79,141163,53605],{"class":243},[79,141165,3531],{"class":239},[79,141167,141168,141170,141172,141174,141176,141178,141180,141182,141185,141187,141189,141191],{"class":81,"line":457},[79,141169,72719],{"class":96},[79,141171,53550],{"class":239},[79,141173,63836],{"class":96},[79,141175,685],{"class":239},[79,141177,136100],{"class":7412},[79,141179,15876],{"class":239},[79,141181,63846],{"class":96},[79,141183,141184],{"class":96}," -10",[79,141186,53605],{"class":243},[79,141188,136119],{"class":96},[79,141190,53605],{"class":243},[79,141192,3531],{"class":239},[79,141194,141195],{"class":81,"line":462},[79,141196,3801],{"class":239},[19,141198,140183],{},[51,141200,141201],{"className":128304,"code":141133,"language":128306,"meta":57,"style":57},[59,141202,141203,141209,141221,141233,141259],{"__ignoreMap":57},[79,141204,141205,141207],{"class":81,"line":82},[79,141206,136061],{"class":85},[79,141208,17732],{"class":239},[79,141210,141211,141213,141215,141217,141219],{"class":81,"line":167},[79,141212,72676],{"class":96},[79,141214,53550],{"class":239},[79,141216,3073],{"class":96},[79,141218,53605],{"class":243},[79,141220,3531],{"class":239},[79,141222,141223,141225,141227,141229,141231],{"class":81,"line":178},[79,141224,72896],{"class":96},[79,141226,53550],{"class":239},[79,141228,3073],{"class":96},[79,141230,53605],{"class":243},[79,141232,3531],{"class":239},[79,141234,141235,141237,141239,141241,141243,141245,141247,141249,141251,141253,141255,141257],{"class":81,"line":457},[79,141236,72719],{"class":96},[79,141238,53550],{"class":239},[79,141240,63836],{"class":96},[79,141242,685],{"class":239},[79,141244,136100],{"class":7412},[79,141246,15876],{"class":239},[79,141248,63846],{"class":96},[79,141250,141184],{"class":96},[79,141252,53605],{"class":243},[79,141254,136119],{"class":96},[79,141256,53605],{"class":243},[79,141258,3531],{"class":239},[79,141260,141261],{"class":81,"line":462},[79,141262,3801],{"class":239},[19,141264,141265],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[3377,141267,141268,141271,141277,141283,141295],{},[29,141269,141270],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[29,141272,141273,141274,121989],{},"里面的布局利用 自定义列表来实现（",[59,141275,141276],{},"dl > dt + dd",[29,141278,140804,141279,141282],{},[59,141280,141281],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[29,141284,140804,141285,141288,141289,20549,141291,141294],{},[59,141286,141287],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[59,141290,141287],{},[59,141292,141293],{},"dd","之间有些距离",[29,141296,141297],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,141299,140143],{},[51,141301,141302],{"className":128304,"code":140493,"language":128306,"meta":57,"style":57},[59,141303,141304,141310,141322],{"__ignoreMap":57},[79,141305,141306,141308],{"class":81,"line":82},[79,141307,53724],{"class":395},[79,141309,17732],{"class":239},[79,141311,141312,141314,141316,141318,141320],{"class":81,"line":167},[79,141313,72578],{"class":96},[79,141315,53550],{"class":239},[79,141317,1030],{"class":96},[79,141319,53669],{"class":96},[79,141321,3531],{"class":239},[79,141323,141324],{"class":81,"line":178},[79,141325,3801],{"class":239},[19,141327,140183],{},[51,141329,141330],{"className":128304,"code":140493,"language":128306,"meta":57,"style":57},[59,141331,141332,141338,141350],{"__ignoreMap":57},[79,141333,141334,141336],{"class":81,"line":82},[79,141335,53724],{"class":395},[79,141337,17732],{"class":239},[79,141339,141340,141342,141344,141346,141348],{"class":81,"line":167},[79,141341,72578],{"class":96},[79,141343,53550],{"class":239},[79,141345,1030],{"class":96},[79,141347,53669],{"class":96},[79,141349,3531],{"class":239},[79,141351,141352],{"class":81,"line":178},[79,141353,3801],{"class":239},[19,141355,141356],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[3377,141358,141359,141368,141371,141382],{},[29,141360,141361,141362,141364,141365,141367],{},"分为上下两块，上面是 ",[59,141363,133524],{}," 友情链接，下面是 ",[59,141366,133517],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[29,141369,141370],{},"把内容分别复制到相应模块中",[29,141372,140804,141373,141375,141376,141378,141379,141381],{},[59,141374,133524],{}," 设置 15px 的下外边距，给",[59,141377,133524],{}," 里面 的 ",[59,141380,2614],{}," 标签设置 左右 3px 的外边距",[29,141383,141384,141385,141387],{},"给",[59,141386,133517],{}," 设置 20px 的行高",[19,141389,140143],{},[51,141391,141392],{"className":128304,"code":140493,"language":128306,"meta":57,"style":57},[59,141393,141394,141400,141412],{"__ignoreMap":57},[79,141395,141396,141398],{"class":81,"line":82},[79,141397,53724],{"class":395},[79,141399,17732],{"class":239},[79,141401,141402,141404,141406,141408,141410],{"class":81,"line":167},[79,141403,72578],{"class":96},[79,141405,53550],{"class":239},[79,141407,1030],{"class":96},[79,141409,53669],{"class":96},[79,141411,3531],{"class":239},[79,141413,141414],{"class":81,"line":178},[79,141415,3801],{"class":239},[19,141417,140183],{},[51,141419,141420],{"className":128304,"code":140493,"language":128306,"meta":57,"style":57},[59,141421,141422,141428,141440],{"__ignoreMap":57},[79,141423,141424,141426],{"class":81,"line":82},[79,141425,53724],{"class":395},[79,141427,17732],{"class":239},[79,141429,141430,141432,141434,141436,141438],{"class":81,"line":167},[79,141431,72578],{"class":96},[79,141433,53550],{"class":239},[79,141435,1030],{"class":96},[79,141437,53669],{"class":96},[79,141439,3531],{"class":239},[79,141441,141442],{"class":81,"line":178},[79,141443,3801],{"class":239},[19,141445,141446],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[2287,141448,141449],{},"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":57,"searchDepth":167,"depth":167,"links":141451},[141452,141453,141454,141461],{"id":139732,"depth":167,"text":139733},{"id":139751,"depth":167,"text":139752},{"id":139778,"depth":167,"text":139779,"children":141455},[141456,141457,141458,141459,141460],{"id":139782,"depth":178,"text":139783},{"id":139795,"depth":178,"text":139796},{"id":139819,"depth":178,"text":139820},{"id":139841,"depth":178,"text":139842},{"id":139913,"depth":178,"text":139914},{"id":140039,"depth":167,"text":140040,"children":141462},[141463,141464,141465,141466,141468],{"id":140043,"depth":178,"text":140044},{"id":140050,"depth":178,"text":140051},{"id":140222,"depth":178,"text":140223},{"id":140763,"depth":178,"text":141467},"15.4.4 nav导航模块制作",{"id":141061,"depth":178,"text":141062},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139724,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141475,"title":141476,"body":141477,"description":25516,"extension":2314,"meta":143879,"navigation":453,"path":143880,"seo":143881,"stem":143882,"__hash__":143883},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141478,"toc":143856},[141479,141482,141486,141490,141502,141505,141508,141511,141522,141524,141548,141550,141574,141579,141582,141584,141620,141622,141658,141661,141666,141669,141672,141675,141705,141712,141715,141725,141727,141761,141764,141798,141804,141821,141823,141859,141861,141897,141902,141927,141929,141955,141957,141981,141988,141991,142055,142057,142099,142101,142141,142148,142153,142155,142185,142187,142217,142221,142224,142231,142243,142245,142271,142273,142297,142300,142302,142326,142332,142342,142344,142374,142376,142406,142413,142454,142456,142492,142494,142530,142534,142537,142540,142543,142549,142554,142557,142580,142583,142607,142610,142634,142639,142642,142645,142648,142651,142654,142728,142730,142760,142762,142792,142795,142798,142830,142834,142838,142852,142861,142864,142869,142871,142965,142967,143061,143084,143086,143110,143112,143136,143143,143146,143156,143158,143182,143187,143195,143197,143227,143232,143272,143274,143300,143302,143328,143332,143335,143340,143343,143347,143355,143362,143370,143372,143402,143404,143434,143442,143445,143448,143450,143480,143482,143512,143515,143520,143522,143546,143548,143572,143575,143660,143662,143686,143688,143712,143716,143718,143742,143744,143778,143782,143796,143799,143804,143807,143812,143815,143845,143853],[10,141480,141476],{"id":141481},"_16-品优购项目下篇-主体与页面开发",[14,141483,141485],{"id":141484},"_161-项目主体模块制作","16.1 项目主体模块制作",[265,141487,141489],{"id":141488},"_1611-首页制作","16.1.1 首页制作",[19,141491,141492,141494,141495,141497,141498,141501],{},[2528,141493,104114],{}," 主体模块是 ",[2528,141496,76166],{}," 里面专有的，注意需要新的样式文件 ",[2528,141499,141500],{},"index.css，"," 就不要写在common.css中了",[3699,141503],{"style":128160,"src":141504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3699,141506],{"style":128160,"src":141507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141509,141510],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[3377,141512,141513,141516,141519],{},[29,141514,141515],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[29,141517,141518],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[29,141520,141521],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141523,140143],{},[51,141525,141526],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},[59,141527,141528,141534,141544],{"__ignoreMap":57},[79,141529,141530,141532],{"class":81,"line":82},[79,141531,132152],{"class":85},[79,141533,17732],{"class":239},[79,141535,141536,141538,141540,141542],{"class":81,"line":167},[79,141537,132784],{"class":96},[79,141539,53550],{"class":239},[79,141541,25876],{"class":96},[79,141543,3531],{"class":239},[79,141545,141546],{"class":81,"line":178},[79,141547,3801],{"class":239},[19,141549,140183],{},[51,141551,141552],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},[59,141553,141554,141560,141570],{"__ignoreMap":57},[79,141555,141556,141558],{"class":81,"line":82},[79,141557,132152],{"class":85},[79,141559,17732],{"class":239},[79,141561,141562,141564,141566,141568],{"class":81,"line":167},[79,141563,132784],{"class":96},[79,141565,53550],{"class":239},[79,141567,25876],{"class":96},[79,141569,3531],{"class":239},[79,141571,141572],{"class":81,"line":178},[79,141573,3801],{"class":239},[26,141575,141576],{},[29,141577,141578],{},"左侧focus模块制作",[3699,141580],{"style":128160,"src":141581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141583,140143],{},[51,141585,141586],{"className":128304,"code":129627,"language":128306,"meta":57,"style":57},[59,141587,141588,141596,141606,141616],{"__ignoreMap":57},[79,141589,141590,141592,141594],{"class":81,"line":82},[79,141591,55931],{"class":395},[79,141593,64010],{"class":85},[79,141595,17732],{"class":239},[79,141597,141598,141600,141602,141604],{"class":81,"line":167},[79,141599,129642],{"class":96},[79,141601,53550],{"class":239},[79,141603,56999],{"class":96},[79,141605,3531],{"class":239},[79,141607,141608,141610,141612,141614],{"class":81,"line":178},[79,141609,72906],{"class":96},[79,141611,53550],{"class":239},[79,141613,56847],{"class":96},[79,141615,3531],{"class":239},[79,141617,141618],{"class":81,"line":457},[79,141619,3801],{"class":239},[19,141621,140183],{},[51,141623,141624],{"className":128304,"code":129627,"language":128306,"meta":57,"style":57},[59,141625,141626,141634,141644,141654],{"__ignoreMap":57},[79,141627,141628,141630,141632],{"class":81,"line":82},[79,141629,55931],{"class":395},[79,141631,64010],{"class":85},[79,141633,17732],{"class":239},[79,141635,141636,141638,141640,141642],{"class":81,"line":167},[79,141637,129642],{"class":96},[79,141639,53550],{"class":239},[79,141641,56999],{"class":96},[79,141643,3531],{"class":239},[79,141645,141646,141648,141650,141652],{"class":81,"line":178},[79,141647,72906],{"class":96},[79,141649,53550],{"class":239},[79,141651,56847],{"class":96},[79,141653,3531],{"class":239},[79,141655,141656],{"class":81,"line":457},[79,141657,3801],{"class":239},[19,141659,141660],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[26,141662,141663],{"start":167},[29,141664,141665],{},"右侧newsflash模块制作",[3699,141667],{"style":128160,"src":141668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141670,141671],{},"右侧的模块 分为上中下三个盒子",[19,141673,141674],{},"结构代码：",[51,141676,141677],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,141678,141679],{"__ignoreMap":57},[79,141680,141681,141683,141685,141687,141689,141691,141693,141695,141697,141699,141701,141703],{"class":81,"line":82},[79,141682,392],{"class":239},[79,141684,3699],{"class":395},[79,141686,57349],{"class":85},[79,141688,244],{"class":239},[79,141690,135821],{"class":89},[79,141692,57357],{"class":85},[79,141694,244],{"class":239},[79,141696,135828],{"class":89},[79,141698,135831],{"class":85},[79,141700,244],{"class":239},[79,141702,135836],{"class":89},[79,141704,53420],{"class":239},[19,141706,141707,141708,141711],{},"1 号盒子为 ",[59,141709,141710],{},"news"," 新闻模块 高度为 165px",[3699,141713],{"style":128160,"src":141714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141716,141717,141718,141721,141722],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[59,141719,141720],{},"news-hd","，下面是 ",[59,141723,141724],{},"news-bd",[19,141726,141674],{},[51,141728,141729],{"className":129051,"code":132408,"language":129053,"meta":57,"style":57},[59,141730,141731,141735,141749,141753],{"__ignoreMap":57},[79,141732,141733],{"class":81,"line":82},[79,141734,132415],{"class":2440},[79,141736,141737,141739,141741,141743,141745,141747],{"class":81,"line":167},[79,141738,392],{"class":239},[79,141740,53724],{"class":395},[79,141742,55596],{"class":85},[79,141744,244],{"class":239},[79,141746,132428],{"class":89},[79,141748,53420],{"class":239},[79,141750,141751],{"class":81,"line":178},[79,141752,132435],{"class":239},[79,141754,141755,141757,141759],{"class":81,"line":457},[79,141756,53898],{"class":239},[79,141758,53724],{"class":395},[79,141760,53420],{"class":239},[19,141762,141763],{},"样式代码：",[51,141765,141766],{"className":129051,"code":132408,"language":129053,"meta":57,"style":57},[59,141767,141768,141772,141786,141790],{"__ignoreMap":57},[79,141769,141770],{"class":81,"line":82},[79,141771,132415],{"class":2440},[79,141773,141774,141776,141778,141780,141782,141784],{"class":81,"line":167},[79,141775,392],{"class":239},[79,141777,53724],{"class":395},[79,141779,55596],{"class":85},[79,141781,244],{"class":239},[79,141783,132428],{"class":89},[79,141785,53420],{"class":239},[79,141787,141788],{"class":81,"line":178},[79,141789,132435],{"class":239},[79,141791,141792,141794,141796],{"class":81,"line":457},[79,141793,53898],{"class":239},[79,141795,53724],{"class":395},[79,141797,53420],{"class":239},[19,141799,141800,141801,141803],{},"上面是",[59,141802,141720],{},"，设置高度是 33px，设置下边框",[3377,141805,141806,141812],{},[29,141807,141808,141809,141811],{},"里面放一个",[59,141810,25049],{}," 标题",[29,141813,141814,141815,141817,141818,141820],{},"放一个a",[59,141816,104733],{},"，内容是 更多，然后让 ",[59,141819,2614],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141822,141674],{},[51,141824,141825],{"className":128304,"code":140146,"language":128306,"meta":57,"style":57},[59,141826,141827,141835,141845,141855],{"__ignoreMap":57},[79,141828,141829,141831,141833],{"class":81,"line":82},[79,141830,53724],{"class":395},[79,141832,139305],{"class":85},[79,141834,17732],{"class":239},[79,141836,141837,141839,141841,141843],{"class":81,"line":167},[79,141838,139312],{"class":96},[79,141840,53550],{"class":239},[79,141842,9846],{"class":89},[79,141844,3531],{"class":239},[79,141846,141847,141849,141851,141853],{"class":81,"line":178},[79,141848,129920],{"class":96},[79,141850,53550],{"class":239},[79,141852,62979],{"class":96},[79,141854,3531],{"class":239},[79,141856,141857],{"class":81,"line":457},[79,141858,3801],{"class":239},[19,141860,141763],{},[51,141862,141863],{"className":128304,"code":140146,"language":128306,"meta":57,"style":57},[59,141864,141865,141873,141883,141893],{"__ignoreMap":57},[79,141866,141867,141869,141871],{"class":81,"line":82},[79,141868,53724],{"class":395},[79,141870,139305],{"class":85},[79,141872,17732],{"class":239},[79,141874,141875,141877,141879,141881],{"class":81,"line":167},[79,141876,139312],{"class":96},[79,141878,53550],{"class":239},[79,141880,9846],{"class":89},[79,141882,3531],{"class":239},[79,141884,141885,141887,141889,141891],{"class":81,"line":178},[79,141886,129920],{"class":96},[79,141888,53550],{"class":239},[79,141890,62979],{"class":96},[79,141892,3531],{"class":239},[79,141894,141895],{"class":81,"line":457},[79,141896,3801],{"class":239},[19,141898,141899,141900],{},"下面是",[59,141901,141724],{},[3377,141903,141904,141912],{},[29,141905,141906,141907,1905,141909,141911],{},"里面包含 ",[59,141908,3377],{},[59,141910,29],{}," 还有链接",[29,141913,141384,141914,141916,141917,141919,141920,141923,141924],{},[59,141915,29],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[59,141918,132970],{}," 2.设置 ",[59,141921,141922],{},"white-space: nowrap;"," 3. 设置 ",[59,141925,141926],{},"text-overflow: ellipsis;",[19,141928,141674],{},[51,141930,141932],{"className":128304,"code":141931,"language":128306,"meta":57,"style":57},"div {\n  overflow: hidden;\n}\n",[59,141933,141934,141940,141951],{"__ignoreMap":57},[79,141935,141936,141938],{"class":81,"line":82},[79,141937,53724],{"class":395},[79,141939,17732],{"class":239},[79,141941,141942,141945,141947,141949],{"class":81,"line":167},[79,141943,141944],{"class":96},"  overflow",[79,141946,53550],{"class":239},[79,141948,63824],{"class":96},[79,141950,3531],{"class":239},[79,141952,141953],{"class":81,"line":178},[79,141954,3801],{"class":239},[19,141956,141763],{},[51,141958,141959],{"className":128304,"code":141931,"language":128306,"meta":57,"style":57},[59,141960,141961,141967,141977],{"__ignoreMap":57},[79,141962,141963,141965],{"class":81,"line":82},[79,141964,53724],{"class":395},[79,141966,17732],{"class":239},[79,141968,141969,141971,141973,141975],{"class":81,"line":167},[79,141970,141944],{"class":96},[79,141972,53550],{"class":239},[79,141974,63824],{"class":96},[79,141976,3531],{"class":239},[79,141978,141979],{"class":81,"line":178},[79,141980,3801],{"class":239},[19,141982,141983,141984,141987],{},"2 号盒子为 ",[59,141985,141986],{},"lifeservice"," 生活服务模块 高度为 209px",[3699,141989],{"style":128160,"src":141990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[3377,141992,141993,141996,142006,142030,142041],{},[29,141994,141995],{},"设置边框（左右下边框）",[29,141997,141998,141999,142002,142003,142005],{},"里面的内容 是 ",[59,142000,142001],{},"ul > 12*li","，给",[59,142004,29],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[29,142007,142008,142009],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[3377,142010,142011,142016,142025],{},[29,142012,142013,142015],{},[59,142014,141986],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[29,142017,142018,142019,142021,142022,142024],{},"可以让 ",[59,142020,141986],{}," 里面的 ",[59,142023,3377],{}," 宽度为 252，就可以装的下 4 个 小 li",[29,142026,142027,142029],{},[59,142028,141986],{}," 盒子 overflow 隐藏多余的部分就可以了",[29,142031,118219,142032,142034,142035,142037,142038,142040],{},[59,142033,29],{}," 里面放一个 ",[59,142036,2815],{},"（里面放图标），下面的文本用 ",[59,142039,19],{}," 标签包裹",[29,142042,140804,142043,142045,142046,142048,142049,140838,142051,142054],{},[59,142044,2815],{}," 设置 24px宽和28px的高（注意 ",[59,142047,2815],{}," 是行内元素， 转成行内块），给 ",[59,142050,29],{},[59,142052,142053],{},"text-align:center"," 让里面内容居中显示",[19,142056,141674],{},[51,142058,142060],{"className":128304,"code":142059,"language":128306,"meta":57,"style":57},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[59,142061,142062,142080,142085,142095],{"__ignoreMap":57},[79,142063,142064,142066,142068,142070,142072,142074,142076,142078],{"class":81,"line":82},[79,142065,79],{"class":395},[79,142067,1060],{"class":239},[79,142069,2614],{"class":395},[79,142071,1060],{"class":239},[79,142073,25693],{"class":395},[79,142075,1060],{"class":239},[79,142077,2528],{"class":395},[79,142079,17732],{"class":239},[79,142081,142082],{"class":81,"line":167},[79,142083,142084],{"class":2440},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[79,142086,142087,142089,142091,142093],{"class":81,"line":178},[79,142088,129920],{"class":96},[79,142090,53550],{"class":239},[79,142092,129982],{"class":96},[79,142094,3531],{"class":239},[79,142096,142097],{"class":81,"line":457},[79,142098,3801],{"class":239},[19,142100,141763],{},[51,142102,142103],{"className":128304,"code":142059,"language":128306,"meta":57,"style":57},[59,142104,142105,142123,142127,142137],{"__ignoreMap":57},[79,142106,142107,142109,142111,142113,142115,142117,142119,142121],{"class":81,"line":82},[79,142108,79],{"class":395},[79,142110,1060],{"class":239},[79,142112,2614],{"class":395},[79,142114,1060],{"class":239},[79,142116,25693],{"class":395},[79,142118,1060],{"class":239},[79,142120,2528],{"class":395},[79,142122,17732],{"class":239},[79,142124,142125],{"class":81,"line":167},[79,142126,142084],{"class":2440},[79,142128,142129,142131,142133,142135],{"class":81,"line":178},[79,142130,129920],{"class":96},[79,142132,53550],{"class":239},[79,142134,129982],{"class":96},[79,142136,3531],{"class":239},[79,142138,142139],{"class":81,"line":457},[79,142140,3801],{"class":239},[19,142142,142143,142144,142147],{},"3 号盒子为 ",[59,142145,142146],{},"bargain"," 特价商品",[3377,142149,142150],{},[29,142151,142152],{},"这个比较简单，直接插入一张图片即可",[19,142154,141674],{},[51,142156,142157],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,142158,142159],{"__ignoreMap":57},[79,142160,142161,142163,142165,142167,142169,142171,142173,142175,142177,142179,142181,142183],{"class":81,"line":82},[79,142162,392],{"class":239},[79,142164,3699],{"class":395},[79,142166,57349],{"class":85},[79,142168,244],{"class":239},[79,142170,135821],{"class":89},[79,142172,57357],{"class":85},[79,142174,244],{"class":239},[79,142176,135828],{"class":89},[79,142178,135831],{"class":85},[79,142180,244],{"class":239},[79,142182,135836],{"class":89},[79,142184,53420],{"class":239},[19,142186,141763],{},[51,142188,142189],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,142190,142191],{"__ignoreMap":57},[79,142192,142193,142195,142197,142199,142201,142203,142205,142207,142209,142211,142213,142215],{"class":81,"line":82},[79,142194,392],{"class":239},[79,142196,3699],{"class":395},[79,142198,57349],{"class":85},[79,142200,244],{"class":239},[79,142202,135821],{"class":89},[79,142204,57357],{"class":85},[79,142206,244],{"class":239},[79,142208,135828],{"class":89},[79,142210,135831],{"class":85},[79,142212,244],{"class":239},[79,142214,135836],{"class":89},[79,142216,53420],{"class":239},[265,142218,142220],{"id":142219},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3699,142222],{"style":128160,"src":142223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,142225,142226,142227,142230],{},"大盒子 ",[59,142228,142229],{},"recom"," 推荐模块 recommend",[3377,142232,142233],{},[29,142234,142235,142236,142238,142239,142242],{},"给这个 ",[59,142237,142229],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[59,142240,142241],{},"#ebebeb","），设置距离上边 12px",[19,142244,141674],{},[51,142246,142248],{"className":128304,"code":142247,"language":128306,"meta":57,"style":57},"div {\n  background-color: #f0f0f0;\n}\n",[59,142249,142250,142256,142267],{"__ignoreMap":57},[79,142251,142252,142254],{"class":81,"line":82},[79,142253,53724],{"class":395},[79,142255,17732],{"class":239},[79,142257,142258,142260,142262,142265],{"class":81,"line":167},[79,142259,72986],{"class":96},[79,142261,53550],{"class":239},[79,142263,142264],{"class":96},"#f0f0f0",[79,142266,3531],{"class":239},[79,142268,142269],{"class":81,"line":178},[79,142270,3801],{"class":239},[19,142272,141763],{},[51,142274,142275],{"className":128304,"code":142247,"language":128306,"meta":57,"style":57},[59,142276,142277,142283,142293],{"__ignoreMap":57},[79,142278,142279,142281],{"class":81,"line":82},[79,142280,53724],{"class":395},[79,142282,17732],{"class":239},[79,142284,142285,142287,142289,142291],{"class":81,"line":167},[79,142286,72986],{"class":96},[79,142288,53550],{"class":239},[79,142290,142264],{"class":96},[79,142292,3531],{"class":239},[79,142294,142295],{"class":81,"line":178},[79,142296,3801],{"class":239},[19,142298,142299],{},"里面包含 2 个盒子， 浮动即可",[19,142301,141674],{},[51,142303,142304],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},[59,142305,142306,142312,142322],{"__ignoreMap":57},[79,142307,142308,142310],{"class":81,"line":82},[79,142309,132152],{"class":85},[79,142311,17732],{"class":239},[79,142313,142314,142316,142318,142320],{"class":81,"line":167},[79,142315,132784],{"class":96},[79,142317,53550],{"class":239},[79,142319,25876],{"class":96},[79,142321,3531],{"class":239},[79,142323,142324],{"class":81,"line":178},[79,142325,3801],{"class":239},[19,142327,142328,142329],{},"1 号盒子 ",[59,142330,142331],{},"recom_hd",[3377,142333,142334,142337],{},[29,142335,142336],{},"设置宽度205px，高度163px",[29,142338,141808,142339,142341],{},[59,142340,3699],{},"标签，插入图片即可",[19,142343,141674],{},[51,142345,142346],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,142347,142348],{"__ignoreMap":57},[79,142349,142350,142352,142354,142356,142358,142360,142362,142364,142366,142368,142370,142372],{"class":81,"line":82},[79,142351,392],{"class":239},[79,142353,3699],{"class":395},[79,142355,57349],{"class":85},[79,142357,244],{"class":239},[79,142359,135821],{"class":89},[79,142361,57357],{"class":85},[79,142363,244],{"class":239},[79,142365,135828],{"class":89},[79,142367,135831],{"class":85},[79,142369,244],{"class":239},[79,142371,135836],{"class":89},[79,142373,53420],{"class":239},[19,142375,141763],{},[51,142377,142378],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,142379,142380],{"__ignoreMap":57},[79,142381,142382,142384,142386,142388,142390,142392,142394,142396,142398,142400,142402,142404],{"class":81,"line":82},[79,142383,392],{"class":239},[79,142385,3699],{"class":395},[79,142387,57349],{"class":85},[79,142389,244],{"class":239},[79,142391,135821],{"class":89},[79,142393,57357],{"class":85},[79,142395,244],{"class":239},[79,142397,135828],{"class":89},[79,142399,135831],{"class":85},[79,142401,244],{"class":239},[79,142403,135836],{"class":89},[79,142405,53420],{"class":239},[19,142407,142408,142409,142412],{},"2 号盒子 ",[59,142410,142411],{},"recom_bd"," ，注意里面的小竖线",[3377,142414,142415,142426,142429,142434,142439],{},[29,142416,142417,142418,142420,142421,142423,142424],{},"右侧结构里面放 ",[59,142419,3377],{}," 包含 4个 ",[59,142422,29],{},"，每个li里面包含一个",[59,142425,3699],{},[29,142427,142428],{},"直接利用切片工具把里面的内容当成一张图片",[29,142430,140804,142431,142433],{},[59,142432,29],{}," 设置浮动",[29,142435,140804,142436,142438],{},[59,142437,3699],{}," 设置宽高，宽度 248px，高度 163px",[29,142440,142441,142442,142002,142445,142447,142448,142450,142451],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[59,142443,142444],{},"top 10px",[59,142446,29],{},"设置相对定位（注意，最后一个",[59,142449,29],{},"不用设置伪元素），可以利用 ",[59,142452,142453],{},"nth-child(-n+3){...}",[19,142455,141674],{},[51,142457,142458],{"className":128304,"code":140146,"language":128306,"meta":57,"style":57},[59,142459,142460,142468,142478,142488],{"__ignoreMap":57},[79,142461,142462,142464,142466],{"class":81,"line":82},[79,142463,53724],{"class":395},[79,142465,139305],{"class":85},[79,142467,17732],{"class":239},[79,142469,142470,142472,142474,142476],{"class":81,"line":167},[79,142471,139312],{"class":96},[79,142473,53550],{"class":239},[79,142475,9846],{"class":89},[79,142477,3531],{"class":239},[79,142479,142480,142482,142484,142486],{"class":81,"line":178},[79,142481,129920],{"class":96},[79,142483,53550],{"class":239},[79,142485,62979],{"class":96},[79,142487,3531],{"class":239},[79,142489,142490],{"class":81,"line":457},[79,142491,3801],{"class":239},[19,142493,141763],{},[51,142495,142496],{"className":128304,"code":140146,"language":128306,"meta":57,"style":57},[59,142497,142498,142506,142516,142526],{"__ignoreMap":57},[79,142499,142500,142502,142504],{"class":81,"line":82},[79,142501,53724],{"class":395},[79,142503,139305],{"class":85},[79,142505,17732],{"class":239},[79,142507,142508,142510,142512,142514],{"class":81,"line":167},[79,142509,139312],{"class":96},[79,142511,53550],{"class":239},[79,142513,9846],{"class":89},[79,142515,3531],{"class":239},[79,142517,142518,142520,142522,142524],{"class":81,"line":178},[79,142519,129920],{"class":96},[79,142521,53550],{"class":239},[79,142523,62979],{"class":96},[79,142525,3531],{"class":239},[79,142527,142528],{"class":81,"line":457},[79,142529,3801],{"class":239},[265,142531,142533],{"id":142532},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3699,142535],{"style":128160,"src":142536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142538,142539],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142541,142542],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142544,142545,142548],{},[59,142546,142547],{},"box_hd"," 制作",[19,142550,142328,142551,142553],{},[59,142552,142547],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3699,142555],{"style":128160,"src":142556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[3377,142558,142559,142564,142569,142572],{},[29,142560,142561,142563],{},[59,142562,142547],{}," 给 30px 的高度，2个像素的下边框",[29,142565,142566,142567],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[59,142568,140815],{},[29,142570,142571],{},"左侧盒左浮动，右侧盒子右浮动",[29,142573,142574,142576,142577,142579],{},[59,142575,2614],{},"标签之间的距离用左右的",[59,142578,33007],{},"撑开即可",[19,142581,142582],{},"结构代码",[51,142584,142585],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},[59,142586,142587,142593,142603],{"__ignoreMap":57},[79,142588,142589,142591],{"class":81,"line":82},[79,142590,132152],{"class":85},[79,142592,17732],{"class":239},[79,142594,142595,142597,142599,142601],{"class":81,"line":167},[79,142596,132784],{"class":96},[79,142598,53550],{"class":239},[79,142600,25876],{"class":96},[79,142602,3531],{"class":239},[79,142604,142605],{"class":81,"line":178},[79,142606,3801],{"class":239},[19,142608,142609],{},"样式代码",[51,142611,142612],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},[59,142613,142614,142620,142630],{"__ignoreMap":57},[79,142615,142616,142618],{"class":81,"line":82},[79,142617,132152],{"class":85},[79,142619,17732],{"class":239},[79,142621,142622,142624,142626,142628],{"class":81,"line":167},[79,142623,132784],{"class":96},[79,142625,53550],{"class":239},[79,142627,25876],{"class":96},[79,142629,3531],{"class":239},[79,142631,142632],{"class":81,"line":178},[79,142633,3801],{"class":239},[19,142635,142636,142548],{},[59,142637,142638],{},"box_bd",[19,142640,142641],{},"2 号盒子 box_bd，不要给高度",[3699,142643],{"style":128160,"src":142644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142646,142647],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142649,142650],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142652,142653],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[3377,142655,142656,142668,142684],{},[29,142657,142658,142660,142661,142664,142665,142667],{},[59,142659,142638],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[59,142662,142663],{},"tab_content","，在",[59,142666,142663],{}," 里面包裹tab选项卡对应的内容",[29,142669,142670,142671,142674,142675,142677,142678,142680,142681,142683],{},"内容被一个大盒子包裹（",[59,142672,142673],{},"tab_list_item","），里面是 ",[59,142676,3377],{}," 包裹 5个 ",[59,142679,29],{},"，每个",[59,142682,29],{},"设置对应的宽度，然后设置浮动",[29,142685,142686,142687,142689,142690,142692,142693],{},"而这5个",[59,142688,29],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[59,142691,29],{},"设置",[3377,142694,142695,142713,142716],{},[29,142696,142697,142698,142700,142701,142703,142704,142706,142707,142709,142710,142712],{},"第一个小 ",[59,142699,29],{}," 分为上下结构，上面是 ",[59,142702,3377],{}," 包裹 ",[59,142705,29],{}," ，",[59,142708,29],{},"里面包裹 ",[59,142711,2614],{},"，下面插入一张图片",[29,142714,142715],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[29,142717,142718,142719,142721,142722,142724,142725,142727],{},"后面的小 ",[59,142720,29],{}," 里面先放一个",[59,142723,2614],{},"标签，然后在",[59,142726,2614],{},"标签里面插入图片即可",[19,142729,142582],{},[51,142731,142732],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,142733,142734],{"__ignoreMap":57},[79,142735,142736,142738,142740,142742,142744,142746,142748,142750,142752,142754,142756,142758],{"class":81,"line":82},[79,142737,392],{"class":239},[79,142739,3699],{"class":395},[79,142741,57349],{"class":85},[79,142743,244],{"class":239},[79,142745,135821],{"class":89},[79,142747,57357],{"class":85},[79,142749,244],{"class":239},[79,142751,135828],{"class":89},[79,142753,135831],{"class":85},[79,142755,244],{"class":239},[79,142757,135836],{"class":89},[79,142759,53420],{"class":239},[19,142761,142609],{},[51,142763,142764],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,142765,142766],{"__ignoreMap":57},[79,142767,142768,142770,142772,142774,142776,142778,142780,142782,142784,142786,142788,142790],{"class":81,"line":82},[79,142769,392],{"class":239},[79,142771,3699],{"class":395},[79,142773,57349],{"class":85},[79,142775,244],{"class":239},[79,142777,135821],{"class":89},[79,142779,57357],{"class":85},[79,142781,244],{"class":239},[79,142783,135828],{"class":89},[79,142785,135831],{"class":85},[79,142787,244],{"class":239},[79,142789,135836],{"class":89},[79,142791,53420],{"class":239},[19,142793,142794],{},"tab栏切换需求！！！！！！介绍：",[3699,142796],{"style":128160,"src":142797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[3377,142799,142800,142808,142814,142817],{},[29,142801,142802,142805,142806],{},[59,142803,142804],{},"tab","栏的布局是 ",[59,142807,140815],{},[29,142809,142810,142811,142813],{},"有多少个",[59,142812,142804],{},"选项卡，那么对应就有多少个内容",[29,142815,142816],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[29,142818,142819,142820,142823,142824,142826,142827,142829],{},"等后面我们学习了",[59,142821,142822],{},"js","之后，我们就会配合",[59,142825,142822],{},"来实现，",[59,142828,142804],{},"栏的切换",[14,142831,142833],{"id":142832},"_162-列表制作","16.2 列表制作",[265,142835,142837],{"id":142836},"_1621-准备工作","16.2.1 准备工作",[3377,142839,142840,142843,142846,142849],{},[29,142841,142842],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[29,142844,142845],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[29,142847,142848],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[29,142850,142851],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[265,142853,142855,142856,1905,142858,142860],{"id":142854},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[59,142857,133309],{},[59,142859,55823],{}," 修改",[3699,142862],{"style":128160,"src":142863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[3377,142865,142866],{},[29,142867,142868],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142870,141674],{},[51,142872,142873],{"className":128304,"code":133736,"language":128306,"meta":57,"style":57},[59,142874,142875,142879,142893,142897,142911,142915,142929,142933,142947,142951],{"__ignoreMap":57},[79,142876,142877],{"class":81,"line":82},[79,142878,133743],{"class":2440},[79,142880,142881,142883,142885,142887,142889,142891],{"class":81,"line":167},[79,142882,133748],{"class":85},[79,142884,81915],{"class":239},[79,142886,130664],{"class":96},[79,142888,53550],{"class":239},[79,142890,133757],{"class":96},[79,142892,131234],{"class":239},[79,142894,142895],{"class":81,"line":178},[79,142896,133764],{"class":2440},[79,142898,142899,142901,142903,142905,142907,142909],{"class":81,"line":457},[79,142900,133769],{"class":85},[79,142902,81915],{"class":239},[79,142904,130664],{"class":96},[79,142906,53550],{"class":239},[79,142908,56874],{"class":96},[79,142910,131234],{"class":239},[79,142912,142913],{"class":81,"line":462},[79,142914,133784],{"class":2440},[79,142916,142917,142919,142921,142923,142925,142927],{"class":81,"line":474},[79,142918,133789],{"class":85},[79,142920,81915],{"class":239},[79,142922,130664],{"class":96},[79,142924,53550],{"class":239},[79,142926,56941],{"class":96},[79,142928,131234],{"class":239},[79,142930,142931],{"class":81,"line":480},[79,142932,133804],{"class":2440},[79,142934,142935,142937,142939,142941,142943,142945],{"class":81,"line":486},[79,142936,133809],{"class":85},[79,142938,81915],{"class":239},[79,142940,130664],{"class":96},[79,142942,53550],{"class":239},[79,142944,88338],{"class":96},[79,142946,131234],{"class":239},[79,142948,142949],{"class":81,"line":491},[79,142950,133824],{"class":2440},[79,142952,142953,142955,142957,142959,142961,142963],{"class":81,"line":497},[79,142954,133829],{"class":85},[79,142956,81915],{"class":239},[79,142958,130664],{"class":96},[79,142960,53550],{"class":239},[79,142962,133838],{"class":96},[79,142964,131234],{"class":239},[19,142966,141763],{},[51,142968,142969],{"className":128304,"code":133736,"language":128306,"meta":57,"style":57},[59,142970,142971,142975,142989,142993,143007,143011,143025,143029,143043,143047],{"__ignoreMap":57},[79,142972,142973],{"class":81,"line":82},[79,142974,133743],{"class":2440},[79,142976,142977,142979,142981,142983,142985,142987],{"class":81,"line":167},[79,142978,133748],{"class":85},[79,142980,81915],{"class":239},[79,142982,130664],{"class":96},[79,142984,53550],{"class":239},[79,142986,133757],{"class":96},[79,142988,131234],{"class":239},[79,142990,142991],{"class":81,"line":178},[79,142992,133764],{"class":2440},[79,142994,142995,142997,142999,143001,143003,143005],{"class":81,"line":457},[79,142996,133769],{"class":85},[79,142998,81915],{"class":239},[79,143000,130664],{"class":96},[79,143002,53550],{"class":239},[79,143004,56874],{"class":96},[79,143006,131234],{"class":239},[79,143008,143009],{"class":81,"line":462},[79,143010,133784],{"class":2440},[79,143012,143013,143015,143017,143019,143021,143023],{"class":81,"line":474},[79,143014,133789],{"class":85},[79,143016,81915],{"class":239},[79,143018,130664],{"class":96},[79,143020,53550],{"class":239},[79,143022,56941],{"class":96},[79,143024,131234],{"class":239},[79,143026,143027],{"class":81,"line":480},[79,143028,133804],{"class":2440},[79,143030,143031,143033,143035,143037,143039,143041],{"class":81,"line":486},[79,143032,133809],{"class":85},[79,143034,81915],{"class":239},[79,143036,130664],{"class":96},[79,143038,53550],{"class":239},[79,143040,88338],{"class":96},[79,143042,131234],{"class":239},[79,143044,143045],{"class":81,"line":491},[79,143046,133824],{"class":2440},[79,143048,143049,143051,143053,143055,143057,143059],{"class":81,"line":497},[79,143050,133829],{"class":85},[79,143052,81915],{"class":239},[79,143054,130664],{"class":96},[79,143056,53550],{"class":239},[79,143058,133838],{"class":96},[79,143060,131234],{"class":239},[3377,143062,143063,143074],{},[29,143064,143065,143066,143069,143070,1905,143072],{},"1 号盒子左侧浮动 ",[59,143067,143068],{},"sk_list"," 里面包含 ",[59,143071,3377],{},[59,143073,29],{},[29,143075,143076,143077,143069,143080,1905,143082],{},"2 号盒子左侧浮动 ",[59,143078,143079],{},"sk_con",[59,143081,3377],{},[59,143083,29],{},[19,143085,141674],{},[51,143087,143088],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},[59,143089,143090,143096,143106],{"__ignoreMap":57},[79,143091,143092,143094],{"class":81,"line":82},[79,143093,132152],{"class":85},[79,143095,17732],{"class":239},[79,143097,143098,143100,143102,143104],{"class":81,"line":167},[79,143099,132784],{"class":96},[79,143101,53550],{"class":239},[79,143103,25876],{"class":96},[79,143105,3531],{"class":239},[79,143107,143108],{"class":81,"line":178},[79,143109,3801],{"class":239},[19,143111,141763],{},[51,143113,143114],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},[59,143115,143116,143122,143132],{"__ignoreMap":57},[79,143117,143118,143120],{"class":81,"line":82},[79,143119,132152],{"class":85},[79,143121,17732],{"class":239},[79,143123,143124,143126,143128,143130],{"class":81,"line":167},[79,143125,132784],{"class":96},[79,143127,53550],{"class":239},[79,143129,25876],{"class":96},[79,143131,3531],{"class":239},[79,143133,143134],{"class":81,"line":178},[79,143135,3801],{"class":239},[265,143137,143139,143140],{"id":143138},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[59,143141,143142],{},"sk_container",[3699,143144],{"style":128160,"src":143145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[3377,143147,143148,143153],{},[29,143149,142328,143150,143152],{},[59,143151,143142],{}," 给宽度 1200，不要给高度",[29,143154,143155],{},"一定不要忘记清除浮动",[19,143157,141674],{},[51,143159,143160],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},[59,143161,143162,143168,143178],{"__ignoreMap":57},[79,143163,143164,143166],{"class":81,"line":82},[79,143165,132152],{"class":85},[79,143167,17732],{"class":239},[79,143169,143170,143172,143174,143176],{"class":81,"line":167},[79,143171,132784],{"class":96},[79,143173,53550],{"class":239},[79,143175,25876],{"class":96},[79,143177,3531],{"class":239},[79,143179,143180],{"class":81,"line":178},[79,143181,3801],{"class":239},[26,143183,143184],{},[29,143185,143186],{},"sk_hd制作",[3377,143188,143189],{},[29,143190,142408,143191,143194],{},[59,143192,143193],{},"sk_hd"," ，插入图片即可",[19,143196,141674],{},[51,143198,143199],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,143200,143201],{"__ignoreMap":57},[79,143202,143203,143205,143207,143209,143211,143213,143215,143217,143219,143221,143223,143225],{"class":81,"line":82},[79,143204,392],{"class":239},[79,143206,3699],{"class":395},[79,143208,57349],{"class":85},[79,143210,244],{"class":239},[79,143212,135821],{"class":89},[79,143214,57357],{"class":85},[79,143216,244],{"class":239},[79,143218,135828],{"class":89},[79,143220,135831],{"class":85},[79,143222,244],{"class":239},[79,143224,135836],{"class":89},[79,143226,53420],{"class":239},[26,143228,143229],{"start":167},[29,143230,143231],{},"sk_bd制作",[3377,143233,143234],{},[29,143235,143236,143237,143240,143241,1905,143243,143245],{},"3 号盒子 ",[59,143238,143239],{},"sk_bd"," ，里面包含很多的 ",[59,143242,3377],{},[59,143244,29],{},[3377,143246,143247,143256],{},[29,143248,143249,143250,143252,143253,143255],{},"当鼠标移入到 ",[59,143251,29],{}," 上面的时候显示红色的边框，在这里先给 ",[59,143254,29],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[29,143257,143258,143259,143261,143262,143264,143265,143268,143269,143271],{},"由于给每个 ",[59,143260,29],{}," 都设置了外边距，导致一行的最后一个 ",[59,143263,29],{}," 掉了下来，在这里我们利用 ",[59,143266,143267],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[59,143270,29],{},"，去掉外边距就好了",[19,143273,141674],{},[51,143275,143276],{"className":128304,"code":140493,"language":128306,"meta":57,"style":57},[59,143277,143278,143284,143296],{"__ignoreMap":57},[79,143279,143280,143282],{"class":81,"line":82},[79,143281,53724],{"class":395},[79,143283,17732],{"class":239},[79,143285,143286,143288,143290,143292,143294],{"class":81,"line":167},[79,143287,72578],{"class":96},[79,143289,53550],{"class":239},[79,143291,1030],{"class":96},[79,143293,53669],{"class":96},[79,143295,3531],{"class":239},[79,143297,143298],{"class":81,"line":178},[79,143299,3801],{"class":239},[19,143301,141763],{},[51,143303,143304],{"className":128304,"code":140493,"language":128306,"meta":57,"style":57},[59,143305,143306,143312,143324],{"__ignoreMap":57},[79,143307,143308,143310],{"class":81,"line":82},[79,143309,53724],{"class":395},[79,143311,17732],{"class":239},[79,143313,143314,143316,143318,143320,143322],{"class":81,"line":167},[79,143315,72578],{"class":96},[79,143317,53550],{"class":239},[79,143319,1030],{"class":96},[79,143321,53669],{"class":96},[79,143323,3531],{"class":239},[79,143325,143326],{"class":81,"line":178},[79,143327,3801],{"class":239},[14,143329,143331],{"id":143330},"_163-注册页面制作","16.3 注册页面制作",[3699,143333],{"style":128160,"src":143334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,143336,143337,143339],{},[2528,143338,11209],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3699,143341],{"style":128160,"src":143342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[265,143344,143346],{"id":143345},"_1631-准备工作","16.3.1 准备工作",[3377,143348,143349,143352],{},[29,143350,143351],{},"创建register.html，引入 base.css，引入favicon图标",[29,143353,143354],{},"创建register.css ，在html页面进行引入",[265,143356,143358,143359,143361],{"id":143357},"_1632-header-头部实现","16.3.2 ",[59,143360,133309],{}," 头部实现",[3377,143363,143364,143367],{},[29,143365,143366],{},"整个内容用 版心 进行包裹",[29,143368,143369],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,143371,141674],{},[51,143373,143374],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,143375,143376],{"__ignoreMap":57},[79,143377,143378,143380,143382,143384,143386,143388,143390,143392,143394,143396,143398,143400],{"class":81,"line":82},[79,143379,392],{"class":239},[79,143381,3699],{"class":395},[79,143383,57349],{"class":85},[79,143385,244],{"class":239},[79,143387,135821],{"class":89},[79,143389,57357],{"class":85},[79,143391,244],{"class":239},[79,143393,135828],{"class":89},[79,143395,135831],{"class":85},[79,143397,244],{"class":239},[79,143399,135836],{"class":89},[79,143401,53420],{"class":239},[19,143403,141763],{},[51,143405,143406],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,143407,143408],{"__ignoreMap":57},[79,143409,143410,143412,143414,143416,143418,143420,143422,143424,143426,143428,143430,143432],{"class":81,"line":82},[79,143411,392],{"class":239},[79,143413,3699],{"class":395},[79,143415,57349],{"class":85},[79,143417,244],{"class":239},[79,143419,135821],{"class":89},[79,143421,57357],{"class":85},[79,143423,244],{"class":239},[79,143425,135828],{"class":89},[79,143427,135831],{"class":85},[79,143429,244],{"class":239},[79,143431,135836],{"class":89},[79,143433,53420],{"class":239},[265,143435,143437,143438,143441],{"id":143436},"_1633-registerarea-主体模块实现","16.3.3 ",[59,143439,143440],{},"registerarea"," 主体模块实现",[3699,143443],{"style":128160,"src":143444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143446,143447],{},"整个大盒子 高度为 522px，设置4个边框",[19,143449,141674],{},[51,143451,143452],{"className":128304,"code":132461,"language":128306,"meta":57,"style":57},[59,143453,143454,143460,143476],{"__ignoreMap":57},[79,143455,143456,143458],{"class":81,"line":82},[79,143457,53724],{"class":395},[79,143459,17732],{"class":239},[79,143461,143462,143464,143466,143468,143470,143472,143474],{"class":81,"line":167},[79,143463,73004],{"class":96},[79,143465,53550],{"class":239},[79,143467,1072],{"class":96},[79,143469,53605],{"class":243},[79,143471,53634],{"class":96},[79,143473,131696],{"class":96},[79,143475,3531],{"class":239},[79,143477,143478],{"class":81,"line":178},[79,143479,3801],{"class":239},[19,143481,141763],{},[51,143483,143484],{"className":128304,"code":132461,"language":128306,"meta":57,"style":57},[59,143485,143486,143492,143508],{"__ignoreMap":57},[79,143487,143488,143490],{"class":81,"line":82},[79,143489,53724],{"class":395},[79,143491,17732],{"class":239},[79,143493,143494,143496,143498,143500,143502,143504,143506],{"class":81,"line":167},[79,143495,73004],{"class":96},[79,143497,53550],{"class":239},[79,143499,1072],{"class":96},[79,143501,53605],{"class":243},[79,143503,53634],{"class":96},[79,143505,131696],{"class":96},[79,143507,3531],{"class":239},[79,143509,143510],{"class":81,"line":178},[79,143511,3801],{"class":239},[19,143513,143514],{},"1号盒子 是一个 h3 标签，放标题",[3377,143516,143517],{},[29,143518,143519],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143521,141674],{},[51,143523,143524],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},[59,143525,143526,143532,143542],{"__ignoreMap":57},[79,143527,143528,143530],{"class":81,"line":82},[79,143529,132152],{"class":85},[79,143531,17732],{"class":239},[79,143533,143534,143536,143538,143540],{"class":81,"line":167},[79,143535,132784],{"class":96},[79,143537,53550],{"class":239},[79,143539,25876],{"class":96},[79,143541,3531],{"class":239},[79,143543,143544],{"class":81,"line":178},[79,143545,3801],{"class":239},[19,143547,141763],{},[51,143549,143550],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},[59,143551,143552,143558,143568],{"__ignoreMap":57},[79,143553,143554,143556],{"class":81,"line":82},[79,143555,132152],{"class":85},[79,143557,17732],{"class":239},[79,143559,143560,143562,143564,143566],{"class":81,"line":167},[79,143561,132784],{"class":96},[79,143563,53550],{"class":239},[79,143565,25876],{"class":96},[79,143567,3531],{"class":239},[79,143569,143570],{"class":81,"line":178},[79,143571,3801],{"class":239},[19,143573,143574],{},"2号盒子 里面放注册的内容",[3377,143576,143577,143580,143589,143603,143616,143619,143622,143640,143654],{},[29,143578,143579],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[29,143581,143582,143583,143585,143586,143588],{},"里面的内容利用 ",[59,143584,3377],{}," 包含 ",[59,143587,29],{}," 来实现的（不需要用表格）",[29,143590,140818,143591,143593,143594,143596,143597,143599,143600,143602],{},[59,143592,29],{}," 里面，左侧放 ",[59,143595,35723],{}," 标签， 中间放",[59,143598,55931],{}," 标签， 右侧放 ",[59,143601,79],{}," 提示信息",[29,143604,143605,143606,143608,143609,143611,143612,143615],{},"左侧 ",[59,143607,35723],{},"里面的文字都是右对齐，我们可以给",[59,143610,35723],{},"设置一个宽度（88px），然后利用",[59,143613,143614],{},"text-align"," 来设置右对齐",[29,143617,143618],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[29,143620,143621],{},"右侧 span修饰一下文字颜色",[29,143623,143624,143625],{},"提示信息的样式优化",[3377,143626,143627,143630,143633],{},[29,143628,143629],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[29,143631,143632],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[29,143634,143635,143636,143639],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[59,143637,143638],{},"vertical-algin"," 来设置 图片与文字对齐方式",[29,143641,143642,143643],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[3377,143644,143645,143651],{},[29,143646,143647,143648,143650],{},"设置 ",[59,143649,25693],{}," 的 左右 12px 的内边距，设置一下文字颜色",[29,143652,143653],{},"分别设置 背景颜色",[29,143655,143656,143657,143659],{},"同意协议 和 完成注册 都是用 ",[59,143658,29],{}," 进行包裹",[19,143661,141674],{},[51,143663,143664],{"className":128304,"code":142247,"language":128306,"meta":57,"style":57},[59,143665,143666,143672,143682],{"__ignoreMap":57},[79,143667,143668,143670],{"class":81,"line":82},[79,143669,53724],{"class":395},[79,143671,17732],{"class":239},[79,143673,143674,143676,143678,143680],{"class":81,"line":167},[79,143675,72986],{"class":96},[79,143677,53550],{"class":239},[79,143679,142264],{"class":96},[79,143681,3531],{"class":239},[79,143683,143684],{"class":81,"line":178},[79,143685,3801],{"class":239},[19,143687,141763],{},[51,143689,143690],{"className":128304,"code":142247,"language":128306,"meta":57,"style":57},[59,143691,143692,143698,143708],{"__ignoreMap":57},[79,143693,143694,143696],{"class":81,"line":82},[79,143695,53724],{"class":395},[79,143697,17732],{"class":239},[79,143699,143700,143702,143704,143706],{"class":81,"line":167},[79,143701,72986],{"class":96},[79,143703,53550],{"class":239},[79,143705,142264],{"class":96},[79,143707,3531],{"class":239},[79,143709,143710],{"class":81,"line":178},[79,143711,3801],{"class":239},[265,143713,143715],{"id":143714},"_1634-底部实现","16.3.4 底部实现",[19,143717,141674],{},[51,143719,143720],{"className":128304,"code":142247,"language":128306,"meta":57,"style":57},[59,143721,143722,143728,143738],{"__ignoreMap":57},[79,143723,143724,143726],{"class":81,"line":82},[79,143725,53724],{"class":395},[79,143727,17732],{"class":239},[79,143729,143730,143732,143734,143736],{"class":81,"line":167},[79,143731,72986],{"class":96},[79,143733,53550],{"class":239},[79,143735,142264],{"class":96},[79,143737,3531],{"class":239},[79,143739,143740],{"class":81,"line":178},[79,143741,3801],{"class":239},[19,143743,141763],{},[51,143745,143746],{"className":129051,"code":132408,"language":129053,"meta":57,"style":57},[59,143747,143748,143752,143766,143770],{"__ignoreMap":57},[79,143749,143750],{"class":81,"line":82},[79,143751,132415],{"class":2440},[79,143753,143754,143756,143758,143760,143762,143764],{"class":81,"line":167},[79,143755,392],{"class":239},[79,143757,53724],{"class":395},[79,143759,55596],{"class":85},[79,143761,244],{"class":239},[79,143763,132428],{"class":89},[79,143765,53420],{"class":239},[79,143767,143768],{"class":81,"line":178},[79,143769,132435],{"class":239},[79,143771,143772,143774,143776],{"class":81,"line":457},[79,143773,53898],{"class":239},[79,143775,53724],{"class":395},[79,143777,53420],{"class":239},[14,143779,143781],{"id":143780},"_164-项目总结","16.4 项目总结",[26,143783,143784,143787,143790,143793],{},[29,143785,143786],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[29,143788,143789],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[29,143791,143792],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[29,143794,143795],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3699,143797],{"style":128160,"src":143798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[26,143800,143801],{"start":462},[29,143802,143803],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3699,143805],{"style":128160,"src":143806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[26,143808,143809],{"start":474},[29,143810,143811],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3699,143813],{"style":128160,"src":143814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[51,143816,143817],{"className":129051,"code":138461,"language":129053,"meta":57,"style":57},[59,143818,143819],{"__ignoreMap":57},[79,143820,143821,143823,143825,143827,143829,143831,143833,143835,143837,143839,143841,143843],{"class":81,"line":82},[79,143822,392],{"class":239},[79,143824,55931],{"class":395},[79,143826,55934],{"class":85},[79,143828,244],{"class":239},[79,143830,64809],{"class":89},[79,143832,2238],{"class":85},[79,143834,244],{"class":239},[79,143836,138482],{"class":89},[79,143838,63130],{"class":85},[79,143840,244],{"class":239},[79,143842,138489],{"class":89},[79,143844,53420],{"class":239},[26,143846,143847,143850],{"start":480},[29,143848,143849],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[29,143851,143852],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[2287,143854,143855],{},"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":57,"searchDepth":167,"depth":167,"links":143857},[143858,143863,143870,143878],{"id":141484,"depth":167,"text":141485,"children":143859},[143860,143861,143862],{"id":141488,"depth":178,"text":141489},{"id":142219,"depth":178,"text":142220},{"id":142532,"depth":178,"text":142533},{"id":142832,"depth":167,"text":142833,"children":143864},[143865,143866,143868],{"id":142836,"depth":178,"text":142837},{"id":142854,"depth":178,"text":143867},"16.2.2 列表页 header 和 nav 修改",{"id":143138,"depth":178,"text":143869},"16.2.3 列表页主体 sk_container",{"id":143330,"depth":167,"text":143331,"children":143871},[143872,143873,143875,143877],{"id":143345,"depth":178,"text":143346},{"id":143357,"depth":178,"text":143874},"16.3.2 header 头部实现",{"id":143436,"depth":178,"text":143876},"16.3.3 registerarea 主体模块实现",{"id":143714,"depth":178,"text":143715},{"id":143780,"depth":167,"text":143781},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141476,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143885,"title":143886,"body":143887,"description":25516,"extension":2314,"meta":143995,"navigation":453,"path":143996,"seo":143997,"stem":143998,"__hash__":143999},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143888,"toc":143990},[143889,143892,143896,143899,143902,143911,143920,143924,143929,143936,143954,143957,143960,143963,143966,143969,143972,143975,143978,143981,143984,143987],[10,143890,143886],{"id":143891},"_17-web服务器与网站发布",[14,143893,143895],{"id":143894},"_171-web服务器","17.1 Web服务器",[19,143897,143898],{},"把自己网站上传到服务器上，可以让其他人访问",[3699,143900],{"style":128160,"src":143901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143903,143904,143907,143908],{},[2528,143905,143906],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[2528,143909,143910],{},"Web 服务器等",[19,143912,143913,143914,1905,143917,27875],{},"根据服务器在网络中所在的位置不同，又可分为 ",[2528,143915,143916],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[2528,143918,143919],{},"远程服务器",[265,143921,143923],{"id":143922},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143925,143926],{},[2528,143927,143928],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143930,143931,143932],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2614,143933,143934],{"href":143934,"rel":143935},"http:\u002F\u002Ffree.3v.do\u002F",[26001],[3377,143937,143938,143941,143944,143951],{},[29,143939,143940],{},"去免费空间网站注册账号。",[29,143942,143943],{},"记录下主机名、用户名、密码、域名。",[29,143945,143946,143947,143950],{},"利用 ",[59,143948,143949],{},"utftp"," 软件 上传网站到远程服务器",[29,143952,143953],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143955,143956],{},"使用软件上传，对上传软件文件进行解压",[3699,143958],{"style":128160,"src":143959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3699,143961],{"style":128160,"src":143962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143964,143965],{},"输入刚刚申请的服务器账号信息：",[3699,143967],{"style":128160,"src":143968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3699,143970],{"style":128160,"src":143971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3699,143973],{"style":128160,"src":143974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3699,143976],{"style":128160,"src":143977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143979,143980],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3699,143982],{"style":128160,"src":143983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143985,143986],{},"浏览器输入域名即可访问",[19,143988,143989],{},"首页一定必须是index",{"title":57,"searchDepth":167,"depth":167,"links":143991},[143992],{"id":143894,"depth":167,"text":143895,"children":143993},[143994],{"id":143922,"depth":178,"text":143923},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143886,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144001,"title":144002,"body":144003,"description":25516,"extension":2314,"meta":144930,"navigation":453,"path":144931,"seo":144932,"stem":144933,"__hash__":144934},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144004,"toc":144913},[144005,144008,144012,144015,144018,144029,144032,144036,144040,144045,144048,144051,144054,144057,144061,144087,144091,144095,144098,144101,144105,144138,144142,144145,144148,144212,144216,144220,144223,144226,144229,144233,144278,144282,144285,144315,144319,144323,144326,144329,144333,144336,144405,144408,144516,144518,144524,144528,144531,144534,144630,144633,144637,144661,144665,144668,144672,144675,144679,144682,144685,144688,144691,144695,144698,144701,144705,144709,144712,144715,144718,144721,144725,144728,144732,144735,144738,144783,144787,144791,144794,144797,144800,144832,144836,144839,144873,144877,144880,144910],[10,144006,144002],{"id":144007},"_18-2d动画与3d转换",[14,144009,144011],{"id":144010},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,144013,144014],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,144016,144017],{},"转换（transform）你可以简单理解为变形",[3377,144019,144020,144023,144026],{},[29,144021,144022],{},"移动：translate",[29,144024,144025],{},"旋转：rotate",[29,144027,144028],{},"缩放：scale",[3699,144030],{"style":128160,"src":144031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[265,144033,144035],{"id":144034},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[24137,144037,144039],{"id":144038},"_18111-translate介绍","18.1.1.1 translate介绍",[19,144041,144042,144043],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[2528,144044,134963],{},[3699,144046],{"style":128160,"src":144047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,144049,144050],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,144052,144053],{},"对于行内元素无效",[19,144055,144056],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[24137,144058,144060],{"id":144059},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[51,144062,144063],{"className":128304,"code":140493,"language":128306,"meta":57,"style":57},[59,144064,144065,144071,144083],{"__ignoreMap":57},[79,144066,144067,144069],{"class":81,"line":82},[79,144068,53724],{"class":395},[79,144070,17732],{"class":239},[79,144072,144073,144075,144077,144079,144081],{"class":81,"line":167},[79,144074,72578],{"class":96},[79,144076,53550],{"class":239},[79,144078,1030],{"class":96},[79,144080,53669],{"class":96},[79,144082,3531],{"class":239},[79,144084,144085],{"class":81,"line":178},[79,144086,3801],{"class":239},[265,144088,144090],{"id":144089},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[24137,144092,144094],{"id":144093},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,144096,144097],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3699,144099],{"style":128160,"src":144100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[24137,144102,144104],{"id":144103},"_18122-旋转效果","18.1.2.2 旋转效果",[51,144106,144108],{"className":128304,"code":144107,"language":128306,"meta":57,"style":57},"div {\n  transform: rotate(45deg);\n}\n",[59,144109,144110,144116,144134],{"__ignoreMap":57},[79,144111,144112,144114],{"class":81,"line":82},[79,144113,53724],{"class":395},[79,144115,17732],{"class":239},[79,144117,144118,144120,144122,144125,144127,144129,144132],{"class":81,"line":167},[79,144119,138288],{"class":96},[79,144121,53550],{"class":239},[79,144123,144124],{"class":96},"rotate",[79,144126,685],{"class":239},[79,144128,2903],{"class":96},[79,144130,144131],{"class":243},"deg",[79,144133,4925],{"class":239},[79,144135,144136],{"class":81,"line":178},[79,144137,3801],{"class":239},[24137,144139,144141],{"id":144140},"_18123-三角做法","18.1.2.3 三角做法",[19,144143,144144],{},"该下标当经过最外层大盒子时会实现向上反转",[3699,144146],{"style":128160,"src":144147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[51,144149,144150],{"className":128304,"code":136824,"language":128306,"meta":57,"style":57},[59,144151,144152,144156,144162,144172,144182,144198,144208],{"__ignoreMap":57},[79,144153,144154],{"class":81,"line":82},[79,144155,136831],{"class":2440},[79,144157,144158,144160],{"class":81,"line":167},[79,144159,136836],{"class":85},[79,144161,17732],{"class":239},[79,144163,144164,144166,144168,144170],{"class":81,"line":178},[79,144165,72676],{"class":96},[79,144167,53550],{"class":239},[79,144169,1030],{"class":96},[79,144171,3531],{"class":239},[79,144173,144174,144176,144178,144180],{"class":81,"line":457},[79,144175,72896],{"class":96},[79,144177,53550],{"class":239},[79,144179,1030],{"class":96},[79,144181,3531],{"class":239},[79,144183,144184,144186,144188,144190,144192,144194,144196],{"class":81,"line":462},[79,144185,73004],{"class":96},[79,144187,53550],{"class":239},[79,144189,2820],{"class":96},[79,144191,53605],{"class":243},[79,144193,53634],{"class":96},[79,144195,66101],{"class":96},[79,144197,3531],{"class":239},[79,144199,144200,144202,144204,144206],{"class":81,"line":474},[79,144201,136879],{"class":96},[79,144203,53550],{"class":239},[79,144205,64479],{"class":96},[79,144207,3531],{"class":239},[79,144209,144210],{"class":81,"line":480},[79,144211,3801],{"class":239},[265,144213,144215],{"id":144214},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[24137,144217,144219],{"id":144218},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,144221,144222],{},"设置中心点",[3699,144224],{"style":128160,"src":144225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,144227,144228],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[24137,144230,144232],{"id":144231},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[51,144234,144236],{"className":128304,"code":144235,"language":128306,"meta":57,"style":57},"\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",[59,144237,144238,144243,144249,144264,144269,144274],{"__ignoreMap":57},[79,144239,144240],{"class":81,"line":82},[79,144241,144242],{"class":2440},"\u002F* 转换中心点 *\u002F\n",[79,144244,144245,144247],{"class":81,"line":167},[79,144246,53724],{"class":395},[79,144248,17732],{"class":239},[79,144250,144251,144254,144256,144258,144260,144262],{"class":81,"line":178},[79,144252,144253],{"class":96},"  transform-origin",[79,144255,53550],{"class":239},[79,144257,53705],{"class":96},[79,144259,19283],{"class":96},[79,144261,132167],{"class":239},[79,144263,136977],{"class":2440},[79,144265,144266],{"class":81,"line":457},[79,144267,144268],{"class":2440},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[79,144270,144271],{"class":81,"line":462},[79,144272,144273],{"class":2440},"  \u002F* transform-origin: left top; *\u002F\n",[79,144275,144276],{"class":81,"line":474},[79,144277,3801],{"class":239},[24137,144279,144281],{"id":144280},"_18133-旋转案例","18.1.3.3 旋转案例",[3699,144283],{"style":128160,"src":144284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[51,144286,144287],{"className":128304,"code":144107,"language":128306,"meta":57,"style":57},[59,144288,144289,144295,144311],{"__ignoreMap":57},[79,144290,144291,144293],{"class":81,"line":82},[79,144292,53724],{"class":395},[79,144294,17732],{"class":239},[79,144296,144297,144299,144301,144303,144305,144307,144309],{"class":81,"line":167},[79,144298,138288],{"class":96},[79,144300,53550],{"class":239},[79,144302,144124],{"class":96},[79,144304,685],{"class":239},[79,144306,2903],{"class":96},[79,144308,144131],{"class":243},[79,144310,4925],{"class":239},[79,144312,144313],{"class":81,"line":178},[79,144314,3801],{"class":239},[265,144316,144318],{"id":144317},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[24137,144320,144322],{"id":144321},"_18141-scale介绍","18.1.4.1 scale介绍",[19,144324,144325],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3699,144327],{"style":128160,"src":144328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[24137,144330,144332],{"id":144331},"_18142-分页按钮","18.1.4.2 分页按钮",[3699,144334],{"style":128160,"src":144335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[51,144337,144339],{"className":128304,"code":144338,"language":128306,"meta":57,"style":57},"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",[59,144340,144341,144347,144363,144367,144371,144376,144382,144396,144401],{"__ignoreMap":57},[79,144342,144343,144345],{"class":81,"line":82},[79,144344,53724],{"class":395},[79,144346,17732],{"class":239},[79,144348,144349,144351,144353,144356,144358,144361],{"class":81,"line":167},[79,144350,138288],{"class":96},[79,144352,53550],{"class":239},[79,144354,144355],{"class":96},"scale",[79,144357,685],{"class":239},[79,144359,144360],{"class":96},"1.2",[79,144362,4925],{"class":239},[79,144364,144365],{"class":81,"line":178},[79,144366,3801],{"class":239},[79,144368,144369],{"class":81,"line":457},[79,144370,137765],{"class":239},[79,144372,144373],{"class":81,"line":462},[79,144374,144375],{"class":2440},"\u002F* 2D 缩放 *\u002F\n",[79,144377,144378,144380],{"class":81,"line":474},[79,144379,53724],{"class":395},[79,144381,17732],{"class":239},[79,144383,144384,144386,144388,144390,144392,144394],{"class":81,"line":480},[79,144385,138288],{"class":96},[79,144387,53550],{"class":239},[79,144389,144355],{"class":96},[79,144391,685],{"class":239},[79,144393,144360],{"class":96},[79,144395,4925],{"class":239},[79,144397,144398],{"class":81,"line":486},[79,144399,144400],{"class":2440},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[79,144402,144403],{"class":81,"line":491},[79,144404,3801],{"class":239},[19,144406,144407],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[51,144409,144411],{"className":128304,"code":144410,"language":128306,"meta":57,"style":57},"\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",[59,144412,144413,144418,144428,144449,144470,144474,144479,144485,144512],{"__ignoreMap":57},[79,144414,144415],{"class":81,"line":82},[79,144416,144417],{"class":2440},"\u002F* 定义动画 *\u002F\n",[79,144419,144420,144423,144426],{"class":81,"line":167},[79,144421,144422],{"class":243},"@keyframes",[79,144424,144425],{"class":7412}," move",[79,144427,17732],{"class":239},[79,144429,144430,144433,144435,144437,144439,144442,144444,144446],{"class":81,"line":178},[79,144431,144432],{"class":85},"  0%",[79,144434,81915],{"class":239},[79,144436,50248],{"class":96},[79,144438,53550],{"class":239},[79,144440,144441],{"class":96},"translateX",[79,144443,685],{"class":239},[79,144445,1030],{"class":96},[79,144447,144448],{"class":239},"); }\n",[79,144450,144451,144454,144456,144458,144460,144462,144464,144466,144468],{"class":81,"line":457},[79,144452,144453],{"class":85},"  100%",[79,144455,81915],{"class":239},[79,144457,50248],{"class":96},[79,144459,53550],{"class":239},[79,144461,144441],{"class":96},[79,144463,685],{"class":239},[79,144465,2686],{"class":96},[79,144467,53605],{"class":243},[79,144469,144448],{"class":239},[79,144471,144472],{"class":81,"line":462},[79,144473,3801],{"class":239},[79,144475,144476],{"class":81,"line":474},[79,144477,144478],{"class":2440},"\u002F* 调用动画 *\u002F\n",[79,144480,144481,144483],{"class":81,"line":480},[79,144482,53724],{"class":395},[79,144484,17732],{"class":239},[79,144486,144487,144490,144492,144494,144496,144498,144500,144502,144504,144507,144510],{"class":81,"line":486},[79,144488,144489],{"class":96},"  animation",[79,144491,53550],{"class":239},[79,144493,136990],{"class":96},[79,144495,27253],{"class":96},[79,144497,3068],{"class":243},[79,144499,80788],{"class":96},[79,144501,670],{"class":96},[79,144503,3068],{"class":243},[79,144505,144506],{"class":96}," infinite",[79,144508,144509],{"class":96}," alternate",[79,144511,3531],{"class":239},[79,144513,144514],{"class":81,"line":491},[79,144515,3801],{"class":239},[19,144517,144407],{},[51,144519,144522],{"className":144520,"code":144521,"language":56},[54],"\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",[59,144523,144521],{"__ignoreMap":57},[24137,144525,144527],{"id":144526},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144529,144530],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3699,144532],{"style":128160,"src":144533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[51,144535,144536],{"className":128304,"code":144410,"language":128306,"meta":57,"style":57},[59,144537,144538,144542,144550,144568,144588,144592,144596,144602,144626],{"__ignoreMap":57},[79,144539,144540],{"class":81,"line":82},[79,144541,144417],{"class":2440},[79,144543,144544,144546,144548],{"class":81,"line":167},[79,144545,144422],{"class":243},[79,144547,144425],{"class":7412},[79,144549,17732],{"class":239},[79,144551,144552,144554,144556,144558,144560,144562,144564,144566],{"class":81,"line":178},[79,144553,144432],{"class":85},[79,144555,81915],{"class":239},[79,144557,50248],{"class":96},[79,144559,53550],{"class":239},[79,144561,144441],{"class":96},[79,144563,685],{"class":239},[79,144565,1030],{"class":96},[79,144567,144448],{"class":239},[79,144569,144570,144572,144574,144576,144578,144580,144582,144584,144586],{"class":81,"line":457},[79,144571,144453],{"class":85},[79,144573,81915],{"class":239},[79,144575,50248],{"class":96},[79,144577,53550],{"class":239},[79,144579,144441],{"class":96},[79,144581,685],{"class":239},[79,144583,2686],{"class":96},[79,144585,53605],{"class":243},[79,144587,144448],{"class":239},[79,144589,144590],{"class":81,"line":462},[79,144591,3801],{"class":239},[79,144593,144594],{"class":81,"line":474},[79,144595,144478],{"class":2440},[79,144597,144598,144600],{"class":81,"line":480},[79,144599,53724],{"class":395},[79,144601,17732],{"class":239},[79,144603,144604,144606,144608,144610,144612,144614,144616,144618,144620,144622,144624],{"class":81,"line":486},[79,144605,144489],{"class":96},[79,144607,53550],{"class":239},[79,144609,136990],{"class":96},[79,144611,27253],{"class":96},[79,144613,3068],{"class":243},[79,144615,80788],{"class":96},[79,144617,670],{"class":96},[79,144619,3068],{"class":243},[79,144621,144506],{"class":96},[79,144623,144509],{"class":96},[79,144625,3531],{"class":239},[79,144627,144628],{"class":81,"line":491},[79,144629,3801],{"class":239},[19,144631,144632],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[265,144634,144636],{"id":144635},"_1823-知识点回顾","18.2.3 知识点回顾",[51,144638,144639],{"className":128304,"code":130473,"language":128306,"meta":57,"style":57},[59,144640,144641,144647,144657],{"__ignoreMap":57},[79,144642,144643,144645],{"class":81,"line":82},[79,144644,53724],{"class":395},[79,144646,17732],{"class":239},[79,144648,144649,144651,144653,144655],{"class":81,"line":167},[79,144650,130486],{"class":96},[79,144652,53550],{"class":239},[79,144654,63846],{"class":96},[79,144656,3531],{"class":239},[79,144658,144659],{"class":81,"line":178},[79,144660,3801],{"class":239},[14,144662,144664],{"id":144663},"_183-3d-转换","18.3 3D 转换",[19,144666,144667],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[265,144669,144671],{"id":144670},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3699,144673],{"style":128160,"src":144674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[265,144676,144678],{"id":144677},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3699,144680],{"style":128160,"src":144681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144683,144684],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144686,144687],{},"translate3d的效果需要搭配透视perspective来使用",[3699,144689],{"style":128160,"src":144690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[265,144692,144694],{"id":144693},"_1833-透视-perspective","18.3.3 透视 perspective",[3699,144696],{"style":128160,"src":144697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144699,144700],{},"透视写在父盒子上，单位为像素",[265,144702,144704],{"id":144703},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[24137,144706,144708],{"id":144707},"_18341-分开解释","18.3.4.1 分开解释",[3699,144710],{"style":128160,"src":144711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3699,144713],{"style":128160,"src":144714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3699,144716],{"style":128160,"src":144717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144719,144720],{},"总结来说就是左手原则",[24137,144722,144724],{"id":144723},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3699,144726],{"style":128160,"src":144727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[265,144729,144731],{"id":144730},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3699,144733],{"style":128160,"src":144734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3699,144736],{"style":128160,"src":144737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[51,144739,144741],{"className":128304,"code":144740,"language":128306,"meta":57,"style":57},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[59,144742,144743,144749,144762,144779],{"__ignoreMap":57},[79,144744,144745,144747],{"class":81,"line":82},[79,144746,53724],{"class":395},[79,144748,17732],{"class":239},[79,144750,144751,144754,144756,144758,144760],{"class":81,"line":167},[79,144752,144753],{"class":96},"  perspective",[79,144755,53550],{"class":239},[79,144757,963],{"class":96},[79,144759,53605],{"class":243},[79,144761,3531],{"class":239},[79,144763,144764,144766,144768,144771,144773,144775,144777],{"class":81,"line":178},[79,144765,138288],{"class":96},[79,144767,53550],{"class":239},[79,144769,144770],{"class":96},"rotateX",[79,144772,685],{"class":239},[79,144774,2903],{"class":96},[79,144776,144131],{"class":243},[79,144778,4925],{"class":239},[79,144780,144781],{"class":81,"line":457},[79,144782,3801],{"class":239},[265,144784,144786],{"id":144785},"_1836-案例","18.3.6 案例",[24137,144788,144790],{"id":144789},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3699,144792],{"style":128160,"src":144793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3699,144795],{"style":128160,"src":144796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3699,144798],{"style":128160,"src":144799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[51,144801,144803],{"className":128304,"code":144802,"language":128306,"meta":57,"style":57},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[59,144804,144805,144810,144816,144828],{"__ignoreMap":57},[79,144806,144807],{"class":81,"line":82},[79,144808,144809],{"class":2440},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[79,144811,144812,144814],{"class":81,"line":167},[79,144813,135301],{"class":85},[79,144815,17732],{"class":239},[79,144817,144818,144820,144822,144824,144826],{"class":81,"line":178},[79,144819,144753],{"class":96},[79,144821,53550],{"class":239},[79,144823,963],{"class":96},[79,144825,53605],{"class":243},[79,144827,3531],{"class":239},[79,144829,144830],{"class":81,"line":457},[79,144831,3801],{"class":239},[24137,144833,144835],{"id":144834},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3699,144837],{"style":128160,"src":144838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[51,144840,144841],{"className":129051,"code":132408,"language":129053,"meta":57,"style":57},[59,144842,144843,144847,144861,144865],{"__ignoreMap":57},[79,144844,144845],{"class":81,"line":82},[79,144846,132415],{"class":2440},[79,144848,144849,144851,144853,144855,144857,144859],{"class":81,"line":167},[79,144850,392],{"class":239},[79,144852,53724],{"class":395},[79,144854,55596],{"class":85},[79,144856,244],{"class":239},[79,144858,132428],{"class":89},[79,144860,53420],{"class":239},[79,144862,144863],{"class":81,"line":178},[79,144864,132435],{"class":239},[79,144866,144867,144869,144871],{"class":81,"line":457},[79,144868,53898],{"class":239},[79,144870,53724],{"class":395},[79,144872,53420],{"class":239},[24137,144874,144876],{"id":144875},"_18363-旋转木马","18.3.6.3 旋转木马",[3699,144878],{"style":128160,"src":144879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[51,144881,144882],{"className":128304,"code":144107,"language":128306,"meta":57,"style":57},[59,144883,144884,144890,144906],{"__ignoreMap":57},[79,144885,144886,144888],{"class":81,"line":82},[79,144887,53724],{"class":395},[79,144889,17732],{"class":239},[79,144891,144892,144894,144896,144898,144900,144902,144904],{"class":81,"line":167},[79,144893,138288],{"class":96},[79,144895,53550],{"class":239},[79,144897,144124],{"class":96},[79,144899,685],{"class":239},[79,144901,2903],{"class":96},[79,144903,144131],{"class":243},[79,144905,4925],{"class":239},[79,144907,144908],{"class":81,"line":178},[79,144909,3801],{"class":239},[2287,144911,144912],{},"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":57,"searchDepth":167,"depth":167,"links":144914},[144915,144922],{"id":144010,"depth":167,"text":144011,"children":144916},[144917,144918,144919,144920,144921],{"id":144034,"depth":178,"text":144035},{"id":144089,"depth":178,"text":144090},{"id":144214,"depth":178,"text":144215},{"id":144317,"depth":178,"text":144318},{"id":144635,"depth":178,"text":144636},{"id":144663,"depth":167,"text":144664,"children":144923},[144924,144925,144926,144927,144928,144929],{"id":144670,"depth":178,"text":144671},{"id":144677,"depth":178,"text":144678},{"id":144693,"depth":178,"text":144694},{"id":144703,"depth":178,"text":144704},{"id":144730,"depth":178,"text":144731},{"id":144785,"depth":178,"text":144786},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144002,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144936,"title":144937,"body":144938,"description":25516,"extension":2314,"meta":145141,"navigation":453,"path":145142,"seo":145143,"stem":145144,"__hash__":145145},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144939,"toc":145130},[144940,144943,144947,144950,144953,144957,144960,144963,144966,144970,144973,144977,144980,144984,144987,144991,145005,145009,145034,145037,145040,145057,145061,145065,145068,145071,145075,145078,145081,145099,145103,145106,145120,145124,145127],[10,144941,144937],{"id":144942},"_19-移动端基础-前缀现状与视口",[14,144944,144946],{"id":144945},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3699,144948],{"style":128160,"src":144949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144951,144952],{},"意思就是加个前缀，增加兼容性",[14,144954,144956],{"id":144955},"_192-移动端现状认识","19.2 移动端现状认识",[3699,144958],{"style":128160,"src":144959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144961,144962],{},"调试方法：",[3699,144964],{"style":128160,"src":144965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144967,144969],{"id":144968},"_193-视口","19.3 视口",[19,144971,144972],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[265,144974,144976],{"id":144975},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3699,144978],{"style":128160,"src":144979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[265,144981,144983],{"id":144982},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3699,144985],{"style":128160,"src":144986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[265,144988,144990],{"id":144989},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[3377,144992,144993,144996,144999,145002],{},[29,144994,144995],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[29,144997,144998],{},"理想视口，对设备来讲，是最理想的视口尺寸",[29,145000,145001],{},"需要手动添写meta视口标签通知浏览器操作",[29,145003,145004],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[265,145006,145008],{"id":145007},"_1934-meta视口标签","19.3.4 meta视口标签",[51,145010,145012],{"className":129051,"code":145011,"language":129053,"meta":57,"style":57},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[59,145013,145014],{"__ignoreMap":57},[79,145015,145016,145018,145020,145022,145024,145026,145028,145030,145032],{"class":81,"line":82},[79,145017,392],{"class":239},[79,145019,53457],{"class":395},[79,145021,2238],{"class":85},[79,145023,244],{"class":239},[79,145025,53504],{"class":89},[79,145027,53484],{"class":85},[79,145029,244],{"class":239},[79,145031,53511],{"class":89},[79,145033,53420],{"class":239},[3699,145035],{"style":128160,"src":145036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,145038,145039],{},"标准视口设置：",[26,145041,145042,145045,145048,145051,145054],{},[29,145043,145044],{},"视口宽度和设备保持一致",[29,145046,145047],{},"视口的默认缩放比例1.0",[29,145049,145050],{},"不允许用户自行缩放",[29,145052,145053],{},"最大允许的缩放比例1.0",[29,145055,145056],{},"最小允许的缩放比例1.0",[265,145058,145060],{"id":145059},"_1935-二倍图","19.3.5 二倍图",[24137,145062,145064],{"id":145063},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3699,145066],{"style":128160,"src":145067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3699,145069],{"style":128160,"src":145070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[24137,145072,145074],{"id":145073},"_19352-多倍图","19.3.5.2 多倍图",[3699,145076],{"style":128160,"src":145077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,145079,145080],{},"二倍图法，代码如下：",[51,145082,145084],{"className":128304,"code":145083,"language":128306,"meta":57,"style":57},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[59,145085,145086,145091],{"__ignoreMap":57},[79,145087,145088],{"class":81,"line":82},[79,145089,145090],{"class":2440},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[79,145092,145093,145096],{"class":81,"line":167},[79,145094,145095],{"class":395},"background-size",[79,145097,145098],{"class":239},": 50% 50%;\n",[24137,145100,145102],{"id":145101},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3699,145104],{"style":128160,"src":145105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[26,145107,145108,145111,145114,145117],{},[29,145109,145110],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[29,145112,145113],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[29,145115,145116],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[29,145118,145119],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[24137,145121,145123],{"id":145122},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3699,145125],{"style":128160,"src":145126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[2287,145128,145129],{},"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":57,"searchDepth":167,"depth":167,"links":145131},[145132,145133,145134],{"id":144945,"depth":167,"text":144946},{"id":144955,"depth":167,"text":144956},{"id":144968,"depth":167,"text":144969,"children":145135},[145136,145137,145138,145139,145140],{"id":144975,"depth":178,"text":144976},{"id":144982,"depth":178,"text":144983},{"id":144989,"depth":178,"text":144990},{"id":145007,"depth":178,"text":145008},{"id":145059,"depth":178,"text":145060},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144937,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145147,"title":145148,"body":145149,"description":25516,"extension":2314,"meta":146026,"navigation":453,"path":146027,"seo":146028,"stem":146029,"__hash__":146030},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145150,"toc":146010},[145151,145154,145158,145165,145168,145175,145178,145183,145186,145190,145194,145201,145204,145207,145211,145214,145217,145220,145223,145226,145230,145233,145237,145239,145242,145245,145248,145251,145253,145256,145258,145288,145290,145320,145324,145327,145331,145334,145351,145354,145357,145433,145435,145438,145441,145444,145447,145449,145452,145455,145459,145481,145484,145487,145491,145494,145500,145503,145507,145510,145513,145517,145520,145523,145526,145530,145533,145536,145539,145542,145546,145549,145553,145560,145563,145566,145569,145572,145582,145585,145588,145595,145598,145602,145605,145608,145612,145615,145618,145621,145666,145669,145672,145675,145677,145806,145808,145846,145849,145852,145854,145972,145974,146008],[10,145152,145148],{"id":145153},"_20-移动端布局实战上篇",[14,145155,145157],{"id":145156},"_201-移动端主流方案","20.1 移动端主流方案",[26,145159,145160],{},[29,145161,145162],{},[2528,145163,145164],{},"单独移动端页面（主流）",[3699,145166],{"style":128160,"src":145167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[26,145169,145170],{"start":167},[29,145171,145172],{},[2528,145173,145174],{},"响应式兼容PC移动端",[3699,145176],{"style":128160,"src":145177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[26,145179,145180],{"start":178},[29,145181,145182],{},"两种页面选型布局方式",[3699,145184],{"style":128160,"src":145185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145187,145189],{"id":145188},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[265,145191,145193],{"id":145192},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145195,145196,145197],{},"官网地址： ",[2614,145198,145199],{"href":145199,"rel":145200},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[26001],[3699,145202],{"style":128160,"src":145203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3699,145205],{"style":128160,"src":145206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[265,145208,145210],{"id":145209},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3699,145212],{"style":128160,"src":145213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3699,145215],{"style":128160,"src":145216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,145218,145219],{},"去除高亮：",[19,145221,145222],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,145224,145225],{},"-webkit- tap-highlight-color: transparent;",[14,145227,145229],{"id":145228},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3699,145231],{"style":128160,"src":145232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145234,145236],{"id":145235},"_204-流式布局案例","20.4 流式布局案例",[19,145238,2415],{},[19,145240,145241],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,145243,145244],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,145246,145247],{},"图片格式：",[3699,145249],{"style":128160,"src":145250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,145252,137347],{},[3699,145254],{"style":128160,"src":145255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,145257,141674],{},[51,145259,145260],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,145261,145262],{"__ignoreMap":57},[79,145263,145264,145266,145268,145270,145272,145274,145276,145278,145280,145282,145284,145286],{"class":81,"line":82},[79,145265,392],{"class":239},[79,145267,3699],{"class":395},[79,145269,57349],{"class":85},[79,145271,244],{"class":239},[79,145273,135821],{"class":89},[79,145275,57357],{"class":85},[79,145277,244],{"class":239},[79,145279,135828],{"class":89},[79,145281,135831],{"class":85},[79,145283,244],{"class":239},[79,145285,135836],{"class":89},[79,145287,53420],{"class":239},[19,145289,141763],{},[51,145291,145292],{"className":129051,"code":135806,"language":129053,"meta":57,"style":57},[59,145293,145294],{"__ignoreMap":57},[79,145295,145296,145298,145300,145302,145304,145306,145308,145310,145312,145314,145316,145318],{"class":81,"line":82},[79,145297,392],{"class":239},[79,145299,3699],{"class":395},[79,145301,57349],{"class":85},[79,145303,244],{"class":239},[79,145305,135821],{"class":89},[79,145307,57357],{"class":85},[79,145309,244],{"class":239},[79,145311,135828],{"class":89},[79,145313,135831],{"class":85},[79,145315,244],{"class":239},[79,145317,135836],{"class":89},[79,145319,53420],{"class":239},[14,145321,145323],{"id":145322},"_205-flex布局","20.5 flex布局",[3699,145325],{"style":128160,"src":145326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[265,145328,145330],{"id":145329},"_2051-布局原理","20.5.1 布局原理",[19,145332,145333],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[3377,145335,145336,145339,145342,145345,145348],{},[29,145337,145338],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[29,145340,145341],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[29,145343,145344],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[29,145346,145347],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[29,145349,145350],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,145352,145353],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,145355,145356],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[51,145358,145360],{"className":128304,"code":145359,"language":128306,"meta":57,"style":57},"\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",[59,145361,145362,145367,145374,145384,145396,145407,145418,145429],{"__ignoreMap":57},[79,145363,145364],{"class":81,"line":82},[79,145365,145366],{"class":2440},"\u002F* Flex 弹性布局 *\u002F\n",[79,145368,145369,145372],{"class":81,"line":167},[79,145370,145371],{"class":85},".container",[79,145373,17732],{"class":239},[79,145375,145376,145378,145380,145382],{"class":81,"line":178},[79,145377,129920],{"class":96},[79,145379,53550],{"class":239},[79,145381,53590],{"class":96},[79,145383,3531],{"class":239},[79,145385,145386,145389,145391,145394],{"class":81,"line":457},[79,145387,145388],{"class":96},"  flex-direction",[79,145390,53550],{"class":239},[79,145392,145393],{"class":96},"row",[79,145395,3531],{"class":239},[79,145397,145398,145401,145403,145405],{"class":81,"line":462},[79,145399,145400],{"class":96},"  justify-content",[79,145402,53550],{"class":239},[79,145404,53781],{"class":96},[79,145406,3531],{"class":239},[79,145408,145409,145412,145414,145416],{"class":81,"line":474},[79,145410,145411],{"class":96},"  align-items",[79,145413,53550],{"class":239},[79,145415,53705],{"class":96},[79,145417,3531],{"class":239},[79,145419,145420,145423,145425,145427],{"class":81,"line":480},[79,145421,145422],{"class":96},"  flex-wrap",[79,145424,53550],{"class":239},[79,145426,80718],{"class":96},[79,145428,3531],{"class":239},[79,145430,145431],{"class":81,"line":486},[79,145432,3801],{"class":239},[19,145434,72561],{},[19,145436,145437],{},".form-item .male-label {",[19,145439,145440],{},"   margin-right: 20px;",[19,145442,145443],{},"   display: inline-flex;",[19,145445,145446],{},"   align-items: center;",[19,145448,700],{},[3699,145450],{"style":128160,"src":145451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3699,145453],{"style":128160,"src":145454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[265,145456,145458],{"id":145457},"_2052-常见父项属性","20.5.2 常见父项属性",[26,145460,145461,145464,145467,145470,145473,145476,145479],{},[29,145462,145463],{},"flex-direction：设置主轴的方向",[29,145465,145466],{},"justify-content：设置主轴上的子元素排列方式",[29,145468,145469],{},"flex-wrap：设置子元素是否换行",[29,145471,145472],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[29,145474,145475],{},"align-items：设置侧轴上的子元素排列方式（单行）",[29,145477,145478],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[29,145480,145463],{},[3699,145482],{"style":128160,"src":145483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3699,145485],{"style":128160,"src":145486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[26,145488,145489],{"start":167},[29,145490,145466],{},[3699,145492],{"style":128160,"src":145493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145495,145496,145499],{},[59,145497,145498],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145501,145502],{},"跟着主轴走",[26,145504,145505],{"start":178},[29,145506,145469],{},[3699,145508],{"style":128160,"src":145509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145511,145512],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[26,145514,145515],{"start":457},[29,145516,145472],{},[3699,145518],{"style":128160,"src":145519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145521,145522],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145524,145525],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[26,145527,145528],{"start":462},[29,145529,145475],{},[3699,145531],{"style":128160,"src":145532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145534,145535],{},"align-items与align-content之间的区别：",[19,145537,145538],{},"单找items，多找content",[3699,145540],{"style":128160,"src":145541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[26,145543,145544],{"start":474},[29,145545,145478],{},[3699,145547],{"style":128160,"src":145548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[265,145550,145552],{"id":145551},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[26,145554,145555],{},[29,145556,145557],{},[2528,145558,145559],{},"flex 属性",[19,145561,145562],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3699,145564],{"style":128160,"src":145565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145567,145568],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145570,145571],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[26,145573,145574],{"start":167},[29,145575,145576,15957,145579],{},[2528,145577,145578],{},"align-self",[2528,145580,145581],{},"控制子项自己在侧轴上的排列方式",[3699,145583],{"style":128160,"src":145584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145586,145587],{},"单个子盒子在父盒子侧轴上的排列方式",[26,145589,145590],{"start":178},[29,145591,145592,145594],{},[2528,145593,97402],{}," 属性定义项目的排列顺序",[3699,145596],{"style":128160,"src":145597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[265,145599,145601],{"id":145600},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3699,145603],{"style":128160,"src":145604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145606,145607],{},"必须要添加浏览器的私有前缀",[265,145609,145611],{"id":145610},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145613,145614],{},"学到最重要的知识：",[19,145616,145617],{},"flex处理这样的布局思路",[3699,145619],{"style":128160,"src":145620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[51,145622,145624],{"className":128304,"code":145623,"language":128306,"meta":57,"style":57},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[59,145625,145626,145632,145642,145652,145662],{"__ignoreMap":57},[79,145627,145628,145630],{"class":81,"line":82},[79,145629,145371],{"class":85},[79,145631,17732],{"class":239},[79,145633,145634,145636,145638,145640],{"class":81,"line":167},[79,145635,129920],{"class":96},[79,145637,53550],{"class":239},[79,145639,53590],{"class":96},[79,145641,3531],{"class":239},[79,145643,145644,145646,145648,145650],{"class":81,"line":178},[79,145645,145400],{"class":96},[79,145647,53550],{"class":239},[79,145649,53705],{"class":96},[79,145651,3531],{"class":239},[79,145653,145654,145656,145658,145660],{"class":81,"line":457},[79,145655,145411],{"class":96},[79,145657,53550],{"class":239},[79,145659,53705],{"class":96},[79,145661,3531],{"class":239},[79,145663,145664],{"class":81,"line":462},[79,145665,3801],{"class":239},[19,145667,145668],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145670,145671],{},"使用属性选择器",[3699,145673],{"style":128160,"src":145674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145676,70998],{},[51,145678,145680],{"className":129051,"code":145679,"language":129053,"meta":57,"style":57},"\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",[59,145681,145682,145687,145701,145706,145726,145731,145750,145755,145774,145779,145798],{"__ignoreMap":57},[79,145683,145684],{"class":81,"line":82},[79,145685,145686],{"class":2440},"\u003C!-- 携程网移动端案例结构 -->\n",[79,145688,145689,145691,145693,145695,145697,145699],{"class":81,"line":167},[79,145690,392],{"class":239},[79,145692,53724],{"class":395},[79,145694,55596],{"class":85},[79,145696,244],{"class":239},[79,145698,94428],{"class":89},[79,145700,53420],{"class":239},[79,145702,145703],{"class":81,"line":178},[79,145704,145705],{"class":2440},"  \u003C!-- 搜索栏 -->\n",[79,145707,145708,145710,145712,145714,145716,145719,145722,145724],{"class":81,"line":457},[79,145709,54257],{"class":239},[79,145711,53724],{"class":395},[79,145713,55596],{"class":85},[79,145715,244],{"class":239},[79,145717,145718],{"class":89},"\"search-index\"",[79,145720,145721],{"class":239},">...\u003C\u002F",[79,145723,53724],{"class":395},[79,145725,53420],{"class":239},[79,145727,145728],{"class":81,"line":462},[79,145729,145730],{"class":2440},"  \u003C!-- 焦点图 -->\n",[79,145732,145733,145735,145737,145739,145741,145744,145746,145748],{"class":81,"line":474},[79,145734,54257],{"class":239},[79,145736,53724],{"class":395},[79,145738,55596],{"class":85},[79,145740,244],{"class":239},[79,145742,145743],{"class":89},"\"focus\"",[79,145745,145721],{"class":239},[79,145747,53724],{"class":395},[79,145749,53420],{"class":239},[79,145751,145752],{"class":81,"line":480},[79,145753,145754],{"class":2440},"  \u003C!-- 主导航 -->\n",[79,145756,145757,145759,145761,145763,145765,145768,145770,145772],{"class":81,"line":486},[79,145758,54257],{"class":239},[79,145760,53724],{"class":395},[79,145762,55596],{"class":85},[79,145764,244],{"class":239},[79,145766,145767],{"class":89},"\"local-nav\"",[79,145769,145721],{"class":239},[79,145771,53724],{"class":395},[79,145773,53420],{"class":239},[79,145775,145776],{"class":81,"line":491},[79,145777,145778],{"class":2440},"  \u003C!-- 子导航 -->\n",[79,145780,145781,145783,145785,145787,145789,145792,145794,145796],{"class":81,"line":497},[79,145782,54257],{"class":239},[79,145784,53724],{"class":395},[79,145786,55596],{"class":85},[79,145788,244],{"class":239},[79,145790,145791],{"class":89},"\"nav-common\"",[79,145793,145721],{"class":239},[79,145795,53724],{"class":395},[79,145797,53420],{"class":239},[79,145799,145800,145802,145804],{"class":81,"line":503},[79,145801,53898],{"class":239},[79,145803,53724],{"class":395},[79,145805,53420],{"class":239},[19,145807,72561],{},[51,145809,145810],{"className":128304,"code":138756,"language":128306,"meta":57,"style":57},[59,145811,145812,145826,145842],{"__ignoreMap":57},[79,145813,145814,145816,145818,145820,145822,145824],{"class":81,"line":82},[79,145815,55931],{"class":395},[79,145817,3263],{"class":239},[79,145819,105145],{"class":85},[79,145821,244],{"class":243},[79,145823,64809],{"class":89},[79,145825,138773],{"class":239},[79,145827,145828,145830,145832,145834,145836,145838,145840],{"class":81,"line":167},[79,145829,73004],{"class":96},[79,145831,53550],{"class":239},[79,145833,1072],{"class":96},[79,145835,53605],{"class":243},[79,145837,53634],{"class":96},[79,145839,131884],{"class":96},[79,145841,3531],{"class":239},[79,145843,145844],{"class":81,"line":178},[79,145845,3801],{"class":239},[19,145847,145848],{},"总代码和效果展示：",[3699,145850],{"style":128160,"src":145851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145853,70998],{},[51,145855,145856],{"className":129051,"code":145679,"language":129053,"meta":57,"style":57},[59,145857,145858,145862,145876,145880,145898,145902,145920,145924,145942,145946,145964],{"__ignoreMap":57},[79,145859,145860],{"class":81,"line":82},[79,145861,145686],{"class":2440},[79,145863,145864,145866,145868,145870,145872,145874],{"class":81,"line":167},[79,145865,392],{"class":239},[79,145867,53724],{"class":395},[79,145869,55596],{"class":85},[79,145871,244],{"class":239},[79,145873,94428],{"class":89},[79,145875,53420],{"class":239},[79,145877,145878],{"class":81,"line":178},[79,145879,145705],{"class":2440},[79,145881,145882,145884,145886,145888,145890,145892,145894,145896],{"class":81,"line":457},[79,145883,54257],{"class":239},[79,145885,53724],{"class":395},[79,145887,55596],{"class":85},[79,145889,244],{"class":239},[79,145891,145718],{"class":89},[79,145893,145721],{"class":239},[79,145895,53724],{"class":395},[79,145897,53420],{"class":239},[79,145899,145900],{"class":81,"line":462},[79,145901,145730],{"class":2440},[79,145903,145904,145906,145908,145910,145912,145914,145916,145918],{"class":81,"line":474},[79,145905,54257],{"class":239},[79,145907,53724],{"class":395},[79,145909,55596],{"class":85},[79,145911,244],{"class":239},[79,145913,145743],{"class":89},[79,145915,145721],{"class":239},[79,145917,53724],{"class":395},[79,145919,53420],{"class":239},[79,145921,145922],{"class":81,"line":480},[79,145923,145754],{"class":2440},[79,145925,145926,145928,145930,145932,145934,145936,145938,145940],{"class":81,"line":486},[79,145927,54257],{"class":239},[79,145929,53724],{"class":395},[79,145931,55596],{"class":85},[79,145933,244],{"class":239},[79,145935,145767],{"class":89},[79,145937,145721],{"class":239},[79,145939,53724],{"class":395},[79,145941,53420],{"class":239},[79,145943,145944],{"class":81,"line":491},[79,145945,145778],{"class":2440},[79,145947,145948,145950,145952,145954,145956,145958,145960,145962],{"class":81,"line":497},[79,145949,54257],{"class":239},[79,145951,53724],{"class":395},[79,145953,55596],{"class":85},[79,145955,244],{"class":239},[79,145957,145791],{"class":89},[79,145959,145721],{"class":239},[79,145961,53724],{"class":395},[79,145963,53420],{"class":239},[79,145965,145966,145968,145970],{"class":81,"line":503},[79,145967,53898],{"class":239},[79,145969,53724],{"class":395},[79,145971,53420],{"class":239},[19,145973,72561],{},[51,145975,145976],{"className":129051,"code":132408,"language":129053,"meta":57,"style":57},[59,145977,145978,145982,145996,146000],{"__ignoreMap":57},[79,145979,145980],{"class":81,"line":82},[79,145981,132415],{"class":2440},[79,145983,145984,145986,145988,145990,145992,145994],{"class":81,"line":167},[79,145985,392],{"class":239},[79,145987,53724],{"class":395},[79,145989,55596],{"class":85},[79,145991,244],{"class":239},[79,145993,132428],{"class":89},[79,145995,53420],{"class":239},[79,145997,145998],{"class":81,"line":178},[79,145999,132435],{"class":239},[79,146001,146002,146004,146006],{"class":81,"line":457},[79,146003,53898],{"class":239},[79,146005,53724],{"class":395},[79,146007,53420],{"class":239},[2287,146009,139705],{},{"title":57,"searchDepth":167,"depth":167,"links":146011},[146012,146013,146017,146018,146019],{"id":145156,"depth":167,"text":145157},{"id":145188,"depth":167,"text":145189,"children":146014},[146015,146016],{"id":145192,"depth":178,"text":145193},{"id":145209,"depth":178,"text":145210},{"id":145228,"depth":167,"text":145229},{"id":145235,"depth":167,"text":145236},{"id":145322,"depth":167,"text":145323,"children":146020},[146021,146022,146023,146024,146025],{"id":145329,"depth":178,"text":145330},{"id":145457,"depth":178,"text":145458},{"id":145551,"depth":178,"text":145552},{"id":145600,"depth":178,"text":145601},{"id":145610,"depth":178,"text":145611},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145148,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146032,"title":146033,"body":146034,"description":25516,"extension":2314,"meta":147261,"navigation":453,"path":147262,"seo":147263,"stem":147264,"__hash__":147265},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146035,"toc":147239},[146036,146039,146043,146047,146050,146053,146057,146062,146065,146068,146071,146074,146077,146134,146137,146142,146145,146148,146152,146163,146167,146170,146173,146180,146185,146189,146192,146198,146201,146205,146208,146215,146218,146221,146228,146231,146238,146241,146244,146251,146254,146257,146259,146276,146280,146283,146286,146289,146293,146296,146299,146302,146305,146308,146311,146313,146316,146319,146381,146384,146494,146501,146507,146510,146513,146517,146520,146524,146529,146532,146539,146542,146548,146553,146556,146559,146562,146565,146568,146571,146574,146577,146633,146635,146661,146665,146668,146671,146674,146682,146685,146688,146692,146748,146751,146755,146761,146772,146775,146780,146783,146786,146792,146795,146798,146801,146804,146807,146810,146813,146816,146841,146847,146850,146853,146856,146859,146862,146865,146870,146873,146876,146879,146887,146890,146897,146900,146903,146905,146929,146931,146934,146937,146940,146943,146946,146949,146952,146986,146989,146992,147026,147033,147036,147039,147042,147045,147048,147051,147058,147061,147064,147067,147070,147077,147080,147083,147090,147093,147096,147100,147103,147106,147109,147112,147115,147118,147121,147124,147126,147150,147152,147176,147180,147191,147194,147197,147200,147203,147206,147209,147212,147215,147218,147221,147224,147227,147230,147233,147236],[10,146037,146033],{"id":146038},"_21-移动端布局实战下篇",[14,146040,146042],{"id":146041},"_211-rem适配布局","21.1 rem适配布局",[265,146044,146046],{"id":146045},"_2111-rem单位","21.1.1 rem单位",[3699,146048],{"style":128160,"src":146049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,146051,146052],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[265,146054,146056],{"id":146055},"_2112-媒体查询","21.1.2 媒体查询",[26,146058,146059],{},[29,146060,146061],{},"参数介绍",[3699,146063],{"style":128160,"src":146064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3699,146066],{"style":128160,"src":146067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3699,146069],{"style":128160,"src":146070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3699,146072],{"style":128160,"src":146073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3699,146075],{"style":128160,"src":146076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[51,146078,146080],{"className":128304,"code":146079,"language":128306,"meta":57,"style":57},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[59,146081,146082,146087,146106,146113,146126,146130],{"__ignoreMap":57},[79,146083,146084],{"class":81,"line":82},[79,146085,146086],{"class":2440},"\u002F* 媒体查询 *\u002F\n",[79,146088,146089,146092,146094,146097,146099,146102,146104],{"class":81,"line":167},[79,146090,146091],{"class":243},"@media",[79,146093,3887],{"class":239},[79,146095,146096],{"class":96},"max-width",[79,146098,53550],{"class":239},[79,146100,146101],{"class":96},"768",[79,146103,53605],{"class":243},[79,146105,14605],{"class":239},[79,146107,146108,146111],{"class":81,"line":178},[79,146109,146110],{"class":85},"  .container",[79,146112,17732],{"class":239},[79,146114,146115,146118,146120,146122,146124],{"class":81,"line":457},[79,146116,146117],{"class":96},"    width",[79,146119,53550],{"class":239},[79,146121,2686],{"class":96},[79,146123,1137],{"class":243},[79,146125,3531],{"class":239},[79,146127,146128],{"class":81,"line":462},[79,146129,129100],{"class":239},[79,146131,146132],{"class":81,"line":474},[79,146133,3801],{"class":239},[19,146135,146136],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[26,146138,146139],{"start":167},[29,146140,146141],{},"引入资源",[3699,146143],{"style":128160,"src":146144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146146,146147],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[265,146149,146151],{"id":146150},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[3377,146153,146154,146157,146160],{},[29,146155,146156],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[29,146158,146159],{},"媒体查询可以根据不同设备宽度来修改样式",[29,146161,146162],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146164,146166],{"id":146165},"_212-less基础","21.2 Less基础",[19,146168,146169],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146171,146172],{},"Less可以解决该问题，它是css的扩展语言",[19,146174,146175,146176],{},"Less中文网址： ",[2614,146177,146178],{"href":146178,"rel":146179},"http:\u002F\u002Flesscss.cn\u002F",[26001],[19,146181,146182],{},[2528,146183,146184],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[265,146186,146188],{"id":146187},"_2121-less安装","21.2.1 less安装",[19,146190,146191],{},"如果使用vscode，则无需进行下方安装步骤",[19,146193,146194],{},[2614,146195,146196],{"href":146196,"rel":146197},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[26001],[3699,146199],{"style":128160,"src":146200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[265,146202,146204],{"id":146203},"_2122-less使用","21.2.2 less使用",[19,146206,146207],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[26,146209,146210],{},[29,146211,146212],{},[2528,146213,146214],{},"Less 变量",[3699,146216],{"style":128160,"src":146217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3699,146219],{"style":128160,"src":146220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[26,146222,146223],{"start":167},[29,146224,146225],{},[2528,146226,146227],{},"Less 编译",[3699,146229],{"style":128160,"src":146230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[26,146232,146233],{"start":178},[29,146234,146235],{},[2528,146236,146237],{},"Less 嵌套",[3699,146239],{"style":128160,"src":146240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3699,146242],{"style":128160,"src":146243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[26,146245,146246],{"start":457},[29,146247,146248],{},[2528,146249,146250],{},"Less 运算",[3699,146252],{"style":128160,"src":146253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,146255,146256],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,146258,2415],{},[3377,146260,146261,146264,146267,146270,146273],{},[29,146262,146263],{},"乘号（*）和除号（\u002F）的写法",[29,146265,146266],{},"运算符中间左右有个空格隔开 1px + 5",[29,146268,146269],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[29,146271,146272],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[29,146274,146275],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146277,146279],{"id":146278},"_213-rem-适配方案","21.3 rem 适配方案",[19,146281,146282],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,146284,146285],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3699,146287],{"style":128160,"src":146288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[265,146290,146292],{"id":146291},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,146294,146295],{},"rem + 媒体查询 + less 技术",[3699,146297],{"style":128160,"src":146298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,146300,146301],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,146303,146304],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3699,146306],{"style":128160,"src":146307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,146309,146310],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,146312,1789],{},[3699,146314],{"style":128160,"src":146315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,146317,146318],{},"index.html:",[51,146320,146322],{"className":128304,"code":146321,"language":128306,"meta":57,"style":57},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[59,146323,146324,146329,146335,146351,146355,146361,146377],{"__ignoreMap":57},[79,146325,146326],{"class":81,"line":82},[79,146327,146328],{"class":2440},"\u002F* rem 适配方案 *\u002F\n",[79,146330,146331,146333],{"class":81,"line":167},[79,146332,52749],{"class":395},[79,146334,17732],{"class":239},[79,146336,146337,146339,146341,146344,146346,146348],{"class":81,"line":178},[79,146338,72734],{"class":96},[79,146340,53550],{"class":239},[79,146342,146343],{"class":96},"62.5",[79,146345,1137],{"class":243},[79,146347,132167],{"class":239},[79,146349,146350],{"class":2440},"\u002F* 1rem = 10px *\u002F\n",[79,146352,146353],{"class":81,"line":457},[79,146354,3801],{"class":239},[79,146356,146357,146359],{"class":81,"line":462},[79,146358,132152],{"class":85},[79,146360,17732],{"class":239},[79,146362,146363,146365,146367,146369,146372,146374],{"class":81,"line":474},[79,146364,72676],{"class":96},[79,146366,53550],{"class":239},[79,146368,2820],{"class":96},[79,146370,146371],{"class":243},"rem",[79,146373,132167],{"class":239},[79,146375,146376],{"class":2440},"\u002F* 100px *\u002F\n",[79,146378,146379],{"class":81,"line":480},[79,146380,3801],{"class":239},[19,146382,146383],{},"common.less",[51,146385,146387],{"className":128304,"code":146386,"language":128306,"meta":57,"style":57},"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",[59,146388,146389,146395,146410,146414,146420,146434,146438,146442,146446,146452,146466,146470,146476,146490],{"__ignoreMap":57},[79,146390,146391,146393],{"class":81,"line":82},[79,146392,52749],{"class":395},[79,146394,17732],{"class":239},[79,146396,146397,146399,146401,146403,146405,146407],{"class":81,"line":167},[79,146398,72734],{"class":96},[79,146400,53550],{"class":239},[79,146402,146343],{"class":96},[79,146404,1137],{"class":243},[79,146406,28201],{"class":239},[79,146408,146409],{"class":2440},"\u002F* 10px *\u002F\n",[79,146411,146412],{"class":81,"line":178},[79,146413,3801],{"class":239},[79,146415,146416,146418],{"class":81,"line":457},[79,146417,53724],{"class":395},[79,146419,17732],{"class":239},[79,146421,146422,146424,146426,146428,146430,146432],{"class":81,"line":462},[79,146423,72676],{"class":96},[79,146425,53550],{"class":239},[79,146427,2820],{"class":96},[79,146429,146371],{"class":243},[79,146431,28201],{"class":239},[79,146433,146376],{"class":2440},[79,146435,146436],{"class":81,"line":474},[79,146437,3801],{"class":239},[79,146439,146440],{"class":81,"line":480},[79,146441,137765],{"class":239},[79,146443,146444],{"class":81,"line":486},[79,146445,146328],{"class":2440},[79,146447,146448,146450],{"class":81,"line":491},[79,146449,52749],{"class":395},[79,146451,17732],{"class":239},[79,146453,146454,146456,146458,146460,146462,146464],{"class":81,"line":497},[79,146455,72734],{"class":96},[79,146457,53550],{"class":239},[79,146459,146343],{"class":96},[79,146461,1137],{"class":243},[79,146463,132167],{"class":239},[79,146465,146350],{"class":2440},[79,146467,146468],{"class":81,"line":503},[79,146469,3801],{"class":239},[79,146471,146472,146474],{"class":81,"line":509},[79,146473,132152],{"class":85},[79,146475,17732],{"class":239},[79,146477,146478,146480,146482,146484,146486,146488],{"class":81,"line":514},[79,146479,72676],{"class":96},[79,146481,53550],{"class":239},[79,146483,2820],{"class":96},[79,146485,146371],{"class":243},[79,146487,132167],{"class":239},[79,146489,146376],{"class":2440},[79,146491,146492],{"class":81,"line":520},[79,146493,3801],{"class":239},[19,146495,146496,146497,146500],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25693,146498,146499],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[51,146502,146505],{"className":146503,"code":146504,"language":56},[54],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[59,146506,146504],{"__ignoreMap":57},[19,146508,146509],{},"less保存时会自动变成.css文件",[19,146511,146512],{},"好好搞懂上述代码写法",[265,146514,146516],{"id":146515},"_2132-样式导入样式","21.3.2 样式导入样式",[3699,146518],{"style":128160,"src":146519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[265,146521,146523],{"id":146522},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[26,146525,146526],{},[29,146527,146528],{},"准备工作",[3699,146530],{"style":128160,"src":146531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146533,146534,146535],{},"github地址：",[2614,146536,146537],{"href":146537,"rel":146538},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[26001],[19,146540,146541],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146543,146544,146545],{},"js文件引入到index.html中使用的是",[59,146546,146547],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[26,146549,146550],{"start":167},[29,146551,146552],{},"vscode插件",[3699,146554],{"style":128160,"src":146555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146557,146558],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146560,146561],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3699,146563],{"style":128160,"src":146564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146566,146567],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3699,146569],{"style":128160,"src":146570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146572,146573],{},"修改成75就可以，alt+z为快捷键",[19,146575,146576],{},"index.css：",[51,146578,146579],{"className":128304,"code":146321,"language":128306,"meta":57,"style":57},[59,146580,146581,146585,146591,146605,146609,146615,146629],{"__ignoreMap":57},[79,146582,146583],{"class":81,"line":82},[79,146584,146328],{"class":2440},[79,146586,146587,146589],{"class":81,"line":167},[79,146588,52749],{"class":395},[79,146590,17732],{"class":239},[79,146592,146593,146595,146597,146599,146601,146603],{"class":81,"line":178},[79,146594,72734],{"class":96},[79,146596,53550],{"class":239},[79,146598,146343],{"class":96},[79,146600,1137],{"class":243},[79,146602,132167],{"class":239},[79,146604,146350],{"class":2440},[79,146606,146607],{"class":81,"line":457},[79,146608,3801],{"class":239},[79,146610,146611,146613],{"class":81,"line":462},[79,146612,132152],{"class":85},[79,146614,17732],{"class":239},[79,146616,146617,146619,146621,146623,146625,146627],{"class":81,"line":474},[79,146618,72676],{"class":96},[79,146620,53550],{"class":239},[79,146622,2820],{"class":96},[79,146624,146371],{"class":243},[79,146626,132167],{"class":239},[79,146628,146376],{"class":2440},[79,146630,146631],{"class":81,"line":480},[79,146632,3801],{"class":239},[19,146634,146318],{},[51,146636,146637],{"className":128304,"code":128708,"language":128306,"meta":57,"style":57},[59,146638,146639,146645,146657],{"__ignoreMap":57},[79,146640,146641,146643],{"class":81,"line":82},[79,146642,53913],{"class":395},[79,146644,17732],{"class":239},[79,146646,146647,146649,146651,146653,146655],{"class":81,"line":167},[79,146648,72734],{"class":96},[79,146650,53550],{"class":239},[79,146652,2974],{"class":96},[79,146654,53605],{"class":243},[79,146656,3531],{"class":239},[79,146658,146659],{"class":81,"line":178},[79,146660,3801],{"class":239},[14,146662,146664],{"id":146663},"_214-响应式开发","21.4 响应式开发",[19,146666,146667],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3699,146669],{"style":128160,"src":146670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146672,146673],{},"做法：",[3377,146675,146676,146679],{},[29,146677,146678],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[29,146680,146681],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3699,146683],{"style":128160,"src":146684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146686,146687],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[265,146689,146691],{"id":146690},"_2141-简单代码示范","21.4.1 简单代码示范",[51,146693,146694],{"className":128304,"code":146321,"language":128306,"meta":57,"style":57},[59,146695,146696,146700,146706,146720,146724,146730,146744],{"__ignoreMap":57},[79,146697,146698],{"class":81,"line":82},[79,146699,146328],{"class":2440},[79,146701,146702,146704],{"class":81,"line":167},[79,146703,52749],{"class":395},[79,146705,17732],{"class":239},[79,146707,146708,146710,146712,146714,146716,146718],{"class":81,"line":178},[79,146709,72734],{"class":96},[79,146711,53550],{"class":239},[79,146713,146343],{"class":96},[79,146715,1137],{"class":243},[79,146717,132167],{"class":239},[79,146719,146350],{"class":2440},[79,146721,146722],{"class":81,"line":457},[79,146723,3801],{"class":239},[79,146725,146726,146728],{"class":81,"line":462},[79,146727,132152],{"class":85},[79,146729,17732],{"class":239},[79,146731,146732,146734,146736,146738,146740,146742],{"class":81,"line":474},[79,146733,72676],{"class":96},[79,146735,53550],{"class":239},[79,146737,2820],{"class":96},[79,146739,146371],{"class":243},[79,146741,132167],{"class":239},[79,146743,146376],{"class":2440},[79,146745,146746],{"class":81,"line":480},[79,146747,3801],{"class":239},[19,146749,146750],{},"父盒子一般命名为container",[265,146752,146754],{"id":146753},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146756,146757,146758],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[2528,146759,146760],{},"使得 Web 开发更加快捷",[3377,146762,146763],{},[29,146764,146765,146766],{},"官网：",[2528,146767,146768],{},[2614,146769,146770],{"href":146770,"rel":146771},"http:\u002F\u002Fgetbootstrap.com\u002F",[26001],[19,146773,146774],{},"可以直接去官网拿现成的东西",[26,146776,146777],{},[29,146778,146779],{},"Bootstrap的使用",[19,146781,146782],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146784,146785],{},"Bootstrap 使用四步曲：",[19,146787,146788,146791],{},[2528,146789,146790],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3699,146793],{"style":128160,"src":146794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146796,146797],{},"打开Bootstrap官网，然后下载",[3699,146799],{"style":128160,"src":146800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3699,146802],{"style":128160,"src":146803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146805,146806],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146808,146809],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146811,146812],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3699,146814],{"style":128160,"src":146815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[51,146817,146819],{"className":128304,"code":146818,"language":128306,"meta":57,"style":57},".center {\n  color: red;\n}\n",[59,146820,146821,146827,146837],{"__ignoreMap":57},[79,146822,146823,146825],{"class":81,"line":82},[79,146824,128595],{"class":85},[79,146826,17732],{"class":239},[79,146828,146829,146831,146833,146835],{"class":81,"line":167},[79,146830,73013],{"class":96},[79,146832,53550],{"class":239},[79,146834,59531],{"class":96},[79,146836,3531],{"class":239},[79,146838,146839],{"class":81,"line":178},[79,146840,3801],{"class":239},[19,146842,146843,146846],{},[59,146844,146845],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3699,146848],{"style":128160,"src":146849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3699,146851],{"style":128160,"src":146852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3699,146854],{"style":128160,"src":146855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146857,146858],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3699,146860],{"style":128160,"src":146861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146863,146864],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[26,146866,146867],{"start":167},[29,146868,146869],{},"布局容器",[3699,146871],{"style":128160,"src":146872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146874,146875],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146877,146878],{},"container-fluid用于移动式布局比较方便",[26,146880,146881],{"start":178},[29,146882,146883,146884],{},"bootstrap ",[2528,146885,146886],{},"栅格系统原理",[3699,146888],{"style":128160,"src":146889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[26,146891,146892],{"start":457},[29,146893,146894],{},[2528,146895,146896],{},"栅格选项参数",[3699,146898],{"style":128160,"src":146899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146901,146902],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146904,1789],{},[51,146906,146907],{"className":128304,"code":146818,"language":128306,"meta":57,"style":57},[59,146908,146909,146915,146925],{"__ignoreMap":57},[79,146910,146911,146913],{"class":81,"line":82},[79,146912,128595],{"class":85},[79,146914,17732],{"class":239},[79,146916,146917,146919,146921,146923],{"class":81,"line":167},[79,146918,73013],{"class":96},[79,146920,53550],{"class":239},[79,146922,59531],{"class":96},[79,146924,3531],{"class":239},[79,146926,146927],{"class":81,"line":178},[79,146928,3801],{"class":239},[19,146930,137347],{},[3699,146932],{"style":128160,"src":146933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146935,146936],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146938,146939],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146941,146942],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146944,146945],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146947,146948],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146950,146951],{},"汇总展示说明：",[51,146953,146954],{"className":129051,"code":132408,"language":129053,"meta":57,"style":57},[59,146955,146956,146960,146974,146978],{"__ignoreMap":57},[79,146957,146958],{"class":81,"line":82},[79,146959,132415],{"class":2440},[79,146961,146962,146964,146966,146968,146970,146972],{"class":81,"line":167},[79,146963,392],{"class":239},[79,146965,53724],{"class":395},[79,146967,55596],{"class":85},[79,146969,244],{"class":239},[79,146971,132428],{"class":89},[79,146973,53420],{"class":239},[79,146975,146976],{"class":81,"line":178},[79,146977,132435],{"class":239},[79,146979,146980,146982,146984],{"class":81,"line":457},[79,146981,53898],{"class":239},[79,146983,53724],{"class":395},[79,146985,53420],{"class":239},[3699,146987],{"style":128160,"src":146988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146990,146991],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[51,146993,146994],{"className":129051,"code":132408,"language":129053,"meta":57,"style":57},[59,146995,146996,147000,147014,147018],{"__ignoreMap":57},[79,146997,146998],{"class":81,"line":82},[79,146999,132415],{"class":2440},[79,147001,147002,147004,147006,147008,147010,147012],{"class":81,"line":167},[79,147003,392],{"class":239},[79,147005,53724],{"class":395},[79,147007,55596],{"class":85},[79,147009,244],{"class":239},[79,147011,132428],{"class":89},[79,147013,53420],{"class":239},[79,147015,147016],{"class":81,"line":178},[79,147017,132435],{"class":239},[79,147019,147020,147022,147024],{"class":81,"line":457},[79,147021,53898],{"class":239},[79,147023,53724],{"class":395},[79,147025,53420],{"class":239},[26,147027,147028],{"start":462},[29,147029,147030],{},[2528,147031,147032],{},"列嵌套",[3699,147034],{"style":128160,"src":147035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,147037,147038],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,147040,147041],{},"没加row内部这样：",[3699,147043],{"style":128160,"src":147044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,147046,147047],{},"加上row之后内部为：",[3699,147049],{"style":128160,"src":147050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[26,147052,147053],{"start":474},[29,147054,147055],{},[2528,147056,147057],{},"列偏移",[3699,147059],{"style":128160,"src":147060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,147062,147063],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,147065,147066],{},"要加偏移量，即偏移份数",[19,147068,147069],{},"偏移的份数=12-两个盒子的份数",[26,147071,147072],{"start":480},[29,147073,147074],{},[2528,147075,147076],{},"列排序",[3699,147078],{"style":128160,"src":147079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,147081,147082],{},"pull拉左；push推右",[26,147084,147085],{"start":486},[29,147086,147087],{},[2528,147088,147089],{},"响应式工具",[3699,147091],{"style":128160,"src":147092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,147094,147095],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[265,147097,147099],{"id":147098},"_2143-响应式小项目","21.4.3 响应式小项目",[19,147101,147102],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,147104,147105],{},"ul {",[19,147107,147108],{},"list-style: none;",[19,147110,147111],{},"margin:0;",[19,147113,147114],{},"padding:0; }",[3699,147116],{"style":128160,"src":147117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3699,147119],{"style":128160,"src":147120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,147122,147123],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,147125,70998],{},[51,147127,147128],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},[59,147129,147130,147136,147146],{"__ignoreMap":57},[79,147131,147132,147134],{"class":81,"line":82},[79,147133,132152],{"class":85},[79,147135,17732],{"class":239},[79,147137,147138,147140,147142,147144],{"class":81,"line":167},[79,147139,132784],{"class":96},[79,147141,53550],{"class":239},[79,147143,25876],{"class":96},[79,147145,3531],{"class":239},[79,147147,147148],{"class":81,"line":178},[79,147149,3801],{"class":239},[19,147151,72561],{},[51,147153,147154],{"className":128304,"code":140974,"language":128306,"meta":57,"style":57},[59,147155,147156,147162,147172],{"__ignoreMap":57},[79,147157,147158,147160],{"class":81,"line":82},[79,147159,132152],{"class":85},[79,147161,17732],{"class":239},[79,147163,147164,147166,147168,147170],{"class":81,"line":167},[79,147165,132784],{"class":96},[79,147167,53550],{"class":239},[79,147169,25876],{"class":96},[79,147171,3531],{"class":239},[79,147173,147174],{"class":81,"line":178},[79,147175,3801],{"class":239},[14,147177,147179],{"id":147178},"_215-swiper-插件使用","21.5 swiper 插件使用",[3377,147181,147182,147185,147188],{},[29,147183,147184],{},"下载需要的css和js文件html页面中 引入相关文件",[29,147186,147187],{},"官网找到类似案例，复制html结构，css样式 js 语法",[29,147189,147190],{},"根据需求定制修改模块",[3699,147192],{"style":128160,"src":147193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147195,147196],{},"解压后将这两部分放到项目中",[3699,147198],{"style":128160,"src":147199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147201,147202],{},"这个插件可以帮助我们实现轮播图效果",[19,147204,147205],{},"用法：",[3699,147207],{"style":128160,"src":147208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,147210,147211],{},"找到自己喜欢的",[3699,147213],{"style":128160,"src":147214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,147216,147217],{},"右键，查看网页源代码",[3699,147219],{"style":128160,"src":147220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,147222,147223],{},"复制人家的结构内容",[19,147225,147226],{},"然后去看API文档：",[3699,147228],{"style":128160,"src":147229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,147231,147232],{},"可以看看如何修改样式",[19,147234,147235],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[2287,147237,147238],{},"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":57,"searchDepth":167,"depth":167,"links":147240},[147241,147246,147250,147255,147260],{"id":146041,"depth":167,"text":146042,"children":147242},[147243,147244,147245],{"id":146045,"depth":178,"text":146046},{"id":146055,"depth":178,"text":146056},{"id":146150,"depth":178,"text":146151},{"id":146165,"depth":167,"text":146166,"children":147247},[147248,147249],{"id":146187,"depth":178,"text":146188},{"id":146203,"depth":178,"text":146204},{"id":146278,"depth":167,"text":146279,"children":147251},[147252,147253,147254],{"id":146291,"depth":178,"text":146292},{"id":146515,"depth":178,"text":146516},{"id":146522,"depth":178,"text":146523},{"id":146663,"depth":167,"text":146664,"children":147256},[147257,147258,147259],{"id":146690,"depth":178,"text":146691},{"id":146753,"depth":178,"text":146754},{"id":147098,"depth":178,"text":147099},{"id":147178,"depth":167,"text":147179},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146033,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147267,"title":147268,"body":147269,"description":25516,"extension":2314,"meta":147489,"navigation":453,"path":147490,"seo":147491,"stem":147492,"__hash__":147493},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147270,"toc":147485},[147271,147274,147278,147281,147296,147301,147304,147309,147344,147349,147361,147366,147379,147384,147401,147406,147426,147431,147449,147452,147455,147458,147461,147465,147468,147471,147474,147477,147480,147483],[10,147272,147268],{"id":147273},"_22-代码提交与新型相对单位",[14,147275,147277],{"id":147276},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,147279,147280],{},"法1：",[26,147282,147283,147290,147293],{},[29,147284,147285,147286],{},"登录网站注册：",[2614,147287,147288],{"href":147288,"rel":147289},"https:\u002F\u002Fgitee.com\u002F",[26001],[29,147291,147292],{},"码云创建新的仓库",[29,147294,147295],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[3377,147297,147298],{},[29,147299,147300],{},"在网站根目录右键-- Git Bash Here",[3699,147302],{"style":128160,"src":147303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[3377,147305,147306],{},[29,147307,147308],{},"如果是第一次利用git提交，请配置好全局选项",[51,147310,147312],{"className":119048,"code":147311,"language":119050,"meta":57,"style":57},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[59,147313,147314,147330],{"__ignoreMap":57},[79,147315,147316,147319,147321,147324,147327],{"class":81,"line":82},[79,147317,147318],{"class":85},"git",[79,147320,121471],{"class":89},[79,147322,147323],{"class":96}," --global",[79,147325,147326],{"class":89}," user.name",[79,147328,147329],{"class":89}," \"你的名字\"\n",[79,147331,147332,147334,147336,147338,147341],{"class":81,"line":167},[79,147333,147318],{"class":85},[79,147335,121471],{"class":89},[79,147337,147323],{"class":96},[79,147339,147340],{"class":89}," user.email",[79,147342,147343],{"class":89}," \"你的邮箱\"\n",[3377,147345,147346],{},[29,147347,147348],{},"初始化仓库",[51,147350,147352],{"className":119048,"code":147351,"language":119050,"meta":57,"style":57},"git init\n",[59,147353,147354],{"__ignoreMap":57},[79,147355,147356,147358],{"class":81,"line":82},[79,147357,147318],{"class":85},[79,147359,147360],{"class":89}," init\n",[3377,147362,147363],{},[29,147364,147365],{},"把本地文件放到暂存区",[51,147367,147369],{"className":119048,"code":147368,"language":119050,"meta":57,"style":57},"git add .\n",[59,147370,147371],{"__ignoreMap":57},[79,147372,147373,147375,147377],{"class":81,"line":82},[79,147374,147318],{"class":85},[79,147376,7405],{"class":89},[79,147378,30872],{"class":89},[3377,147380,147381],{},[29,147382,147383],{},"把本地文件放到本地仓库里面",[51,147385,147387],{"className":119048,"code":147386,"language":119050,"meta":57,"style":57},"git commit -m \"first commit\"\n",[59,147388,147389],{"__ignoreMap":57},[79,147390,147391,147393,147396,147398],{"class":81,"line":82},[79,147392,147318],{"class":85},[79,147394,147395],{"class":89}," commit",[79,147397,102977],{"class":96},[79,147399,147400],{"class":89}," \"first commit\"\n",[3377,147402,147403],{},[29,147404,147405],{},"链接远程仓库",[51,147407,147409],{"className":119048,"code":147408,"language":119050,"meta":57,"style":57},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[59,147410,147411],{"__ignoreMap":57},[79,147412,147413,147415,147418,147420,147423],{"class":81,"line":82},[79,147414,147318],{"class":85},[79,147416,147417],{"class":89}," remote",[79,147419,7405],{"class":89},[79,147421,147422],{"class":89}," origin",[79,147424,147425],{"class":89}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[3377,147427,147428],{},[29,147429,147430],{},"把本地仓库的文件推送到远程仓库 push",[51,147432,147434],{"className":119048,"code":147433,"language":119050,"meta":57,"style":57},"git push -u origin master\n",[59,147435,147436],{"__ignoreMap":57},[79,147437,147438,147440,147442,147444,147446],{"class":81,"line":82},[79,147439,147318],{"class":85},[79,147441,31147],{"class":89},[79,147443,30422],{"class":96},[79,147445,147422],{"class":89},[79,147447,147448],{"class":89}," master\n",[3699,147450],{"style":128160,"src":147451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147453,147454],{},"上方方法暂未实现，后边学完git后在整",[19,147456,147457],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3699,147459],{"style":128160,"src":147460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147462,147464],{"id":147463},"_222-新型相对单位","22.2 新型相对单位",[3699,147466],{"style":128160,"src":147467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3699,147469],{"style":128160,"src":147470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147472,147473],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147475,147476],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3699,147478],{"style":128160,"src":147479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147481,147482],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[2287,147484,26094],{},{"title":57,"searchDepth":167,"depth":167,"links":147486},[147487,147488],{"id":147276,"depth":167,"text":147277},{"id":147463,"depth":167,"text":147464},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147268,"description":25516},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147495,"title":147496,"body":147497,"description":147501,"extension":2314,"meta":147502,"navigation":453,"path":147503,"seo":147504,"stem":147505,"__hash__":147506},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147498,"toc":147499},[],{"title":57,"searchDepth":167,"depth":167,"links":147500},[],"自己正经开始学编程的第一门语言！",{"category":94944},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147496,"description":147501},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147508,"title":147509,"body":147510,"description":25516,"extension":2314,"meta":148657,"navigation":453,"path":148658,"seo":148659,"stem":148660,"__hash__":148661},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147511,"toc":148633},[147512,147515,147519,147522,147525,147550,147553,147559,147563,147566,147593,147596,147636,147639,147651,147654,147660,147664,147668,147695,147712,147719,147723,147726,147752,147755,147759,147762,147802,147805,147822,147828,147832,147837,147881,147884,147902,147905,147973,147977,147984,147987,148002,148005,148014,148017,148028,148031,148040,148043,148060,148063,148078,148082,148086,148089,148091,148111,148115,148118,148121,148132,148135,148141,148145,148151,148178,148181,148193,148196,148207,148210,148216,148220,148226,148276,148279,148321,148324,148357,148360,148394,148398,148401,148421,148424,148460,148463,148476,148480,148484,148490,148493,148506,148510,148513,148519,148522,148526,148529,148532,148581,148585,148601,148607,148614,148620,148630],[10,147513,147509],{"id":147514},"_1-python环境与第一个程序",[14,147516,147518],{"id":147517},"_11-什么是python","1.1 什么是Python",[19,147520,147521],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147523,147524],{},"理解 Python 时抓住三个关键词：",[26,147526,147527,147530,147533],{},[29,147528,147529],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[29,147531,147532],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[29,147534,147535,147536,204,147539,204,147542,204,147545,204,147547,1604],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[59,147537,147538],{},"os",[59,147540,147541],{},"sys",[59,147543,147544],{},"json",[59,147546,59970],{},[59,147548,147549],{},"datetime",[19,147551,147552],{},"Python 程序的运行链路：",[51,147554,147557],{"className":147555,"code":147556,"language":56,"meta":57},[54],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[59,147558,147556],{"__ignoreMap":57},[14,147560,147562],{"id":147561},"_12-python解释器","1.2 Python解释器",[19,147564,147565],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[51,147567,147569],{"className":73,"code":147568,"language":75,"meta":57,"style":57},"python --version\npython3 --version\npython\npython3\n",[59,147570,147571,147577,147583,147588],{"__ignoreMap":57},[79,147572,147573,147575],{"class":81,"line":82},[79,147574,232],{"class":85},[79,147576,28427],{"class":96},[79,147578,147579,147581],{"class":81,"line":167},[79,147580,102974],{"class":85},[79,147582,28427],{"class":96},[79,147584,147585],{"class":81,"line":178},[79,147586,147587],{"class":85},"python\n",[79,147589,147590],{"class":81,"line":457},[79,147591,147592],{"class":85},"python3\n",[19,147594,147595],{},"进入交互模式后，可以直接输入表达式：",[51,147597,147599],{"className":230,"code":147598,"language":232,"meta":57,"style":57},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[59,147600,147601,147612,147617,147631],{"__ignoreMap":57},[79,147602,147603,147606,147608,147610],{"class":81,"line":82},[79,147604,147605],{"class":243},">>>",[79,147607,27253],{"class":96},[79,147609,47680],{"class":243},[79,147611,49837],{"class":96},[79,147613,147614],{"class":81,"line":167},[79,147615,147616],{"class":96},"3\n",[79,147618,147619,147621,147624,147626,147629],{"class":81,"line":178},[79,147620,147605],{"class":243},[79,147622,147623],{"class":96}," print",[79,147625,685],{"class":239},[79,147627,147628],{"class":89},"\"hello python\"",[79,147630,253],{"class":239},[79,147632,147633],{"class":81,"line":457},[79,147634,147635],{"class":239},"hello python\n",[19,147637,147638],{},"退出交互模式：",[51,147640,147642],{"className":230,"code":147641,"language":232,"meta":57,"style":57},"exit()\n",[59,147643,147644],{"__ignoreMap":57},[79,147645,147646,147649],{"class":81,"line":82},[79,147647,147648],{"class":96},"exit",[79,147650,4191],{"class":239},[19,147652,147653],{},"或使用快捷键：",[51,147655,147658],{"className":147656,"code":147657,"language":56,"meta":57},[54],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[59,147659,147657],{"__ignoreMap":57},[14,147661,147663],{"id":147662},"_13-安装python","1.3 安装Python",[265,147665,147667],{"id":147666},"_131-windows安装","1.3.1 Windows安装",[26,147669,147670,147677,147680,147686,147692],{},[29,147671,147672,147673],{},"打开 Python 官网：",[2614,147674,147675],{"href":147675,"rel":147676},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[26001],[29,147678,147679],{},"下载 Windows Installer。",[29,147681,147682,147683,1604],{},"安装时勾选 ",[59,147684,147685],{},"Add Python to PATH",[29,147687,147688,147689,1604],{},"点击 ",[59,147690,147691],{},"Install Now",[29,147693,147694],{},"安装完成后打开命令提示符验证：",[51,147696,147698],{"className":73,"code":147697,"language":75,"meta":57,"style":57},"python --version\npip --version\n",[59,147699,147700,147706],{"__ignoreMap":57},[79,147701,147702,147704],{"class":81,"line":82},[79,147703,232],{"class":85},[79,147705,28427],{"class":96},[79,147707,147708,147710],{"class":81,"line":167},[79,147709,125],{"class":85},[79,147711,28427],{"class":96},[19,147713,147714,147715,147718],{},"如果提示 ",[59,147716,147717],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[265,147720,147722],{"id":147721},"_132-macos安装","1.3.2 macOS安装",[19,147724,147725],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[51,147727,147729],{"className":73,"code":147728,"language":75,"meta":57,"style":57},"brew install python\npython3 --version\npip3 --version\n",[59,147730,147731,147740,147746],{"__ignoreMap":57},[79,147732,147733,147736,147738],{"class":81,"line":82},[79,147734,147735],{"class":85},"brew",[79,147737,93],{"class":89},[79,147739,126070],{"class":89},[79,147741,147742,147744],{"class":81,"line":167},[79,147743,102974],{"class":85},[79,147745,28427],{"class":96},[79,147747,147748,147750],{"class":81,"line":178},[79,147749,121452],{"class":85},[79,147751,28427],{"class":96},[19,147753,147754],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[265,147756,147758],{"id":147757},"_133-linux安装","1.3.3 Linux安装",[19,147760,147761],{},"Ubuntu\u002FDebian：",[51,147763,147765],{"className":73,"code":147764,"language":75,"meta":57,"style":57},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[59,147766,147767,147775,147790,147796],{"__ignoreMap":57},[79,147768,147769,147771,147773],{"class":81,"line":82},[79,147770,86],{"class":85},[79,147772,119069],{"class":89},[79,147774,28376],{"class":89},[79,147776,147777,147779,147781,147783,147785,147787],{"class":81,"line":167},[79,147778,86],{"class":85},[79,147780,119069],{"class":89},[79,147782,93],{"class":89},[79,147784,100],{"class":89},[79,147786,103],{"class":89},[79,147788,147789],{"class":89}," python3-venv\n",[79,147791,147792,147794],{"class":81,"line":178},[79,147793,102974],{"class":85},[79,147795,28427],{"class":96},[79,147797,147798,147800],{"class":81,"line":457},[79,147799,121452],{"class":85},[79,147801,28427],{"class":96},[19,147803,147804],{},"Fedora：",[51,147806,147808],{"className":73,"code":147807,"language":75,"meta":57,"style":57},"sudo dnf install python3 python3-pip\n",[59,147809,147810],{"__ignoreMap":57},[79,147811,147812,147814,147816,147818,147820],{"class":81,"line":82},[79,147813,86],{"class":85},[79,147815,90],{"class":89},[79,147817,93],{"class":89},[79,147819,100],{"class":89},[79,147821,121517],{"class":89},[19,147823,147824,147825,147827],{},"Linux 上通常使用 ",[59,147826,102974],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147829,147831],{"id":147830},"_14-pip包管理器","1.4 pip包管理器",[19,147833,147834,147836],{},[59,147835,125],{}," 用来安装第三方库。",[51,147838,147840],{"className":73,"code":147839,"language":75,"meta":57,"style":57},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[59,147841,147842,147851,147860,147868,147874],{"__ignoreMap":57},[79,147843,147844,147846,147848],{"class":81,"line":82},[79,147845,125],{"class":85},[79,147847,93],{"class":89},[79,147849,147850],{"class":89}," requests\n",[79,147852,147853,147855,147858],{"class":81,"line":167},[79,147854,125],{"class":85},[79,147856,147857],{"class":89}," uninstall",[79,147859,147850],{"class":89},[79,147861,147862,147864,147866],{"class":81,"line":178},[79,147863,125],{"class":85},[79,147865,119326],{"class":89},[79,147867,147850],{"class":89},[79,147869,147870,147872],{"class":81,"line":457},[79,147871,125],{"class":85},[79,147873,120707],{"class":89},[79,147875,147876,147878],{"class":81,"line":462},[79,147877,125],{"class":85},[79,147879,147880],{"class":89}," freeze\n",[19,147882,147883],{},"国内网络较慢时可以临时使用镜像：",[51,147885,147887],{"className":73,"code":147886,"language":75,"meta":57,"style":57},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[59,147888,147889],{"__ignoreMap":57},[79,147890,147891,147893,147895,147898,147900],{"class":81,"line":82},[79,147892,125],{"class":85},[79,147894,93],{"class":89},[79,147896,147897],{"class":89}," requests",[79,147899,28562],{"class":96},[79,147901,121480],{"class":89},[19,147903,147904],{},"常见第三方库：",[2516,147906,147907,147916],{},[2519,147908,147909],{},[2522,147910,147911,147914],{},[2525,147912,147913],{},"库",[2525,147915,104736],{},[2563,147917,147918,147926,147933,147941,147949,147957,147965],{},[2522,147919,147920,147923],{},[2568,147921,147922],{},"requests",[2568,147924,147925],{},"网络请求",[2522,147927,147928,147930],{},[2568,147929,102729],{},[2568,147931,147932],{},"数值计算",[2522,147934,147935,147938],{},[2568,147936,147937],{},"pandas",[2568,147939,147940],{},"表格数据处理",[2522,147942,147943,147946],{},[2568,147944,147945],{},"matplotlib",[2568,147947,147948],{},"绘图",[2522,147950,147951,147954],{},[2568,147952,147953],{},"pyecharts",[2568,147955,147956],{},"ECharts 图表",[2522,147958,147959,147962],{},[2568,147960,147961],{},"flask",[2568,147963,147964],{},"Web 后端",[2522,147966,147967,147970],{},[2568,147968,147969],{},"pytest",[2568,147971,147972],{},"自动化测试",[14,147974,147976],{"id":147975},"_15-虚拟环境","1.5 虚拟环境",[19,147978,147979,147980,147983],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[59,147981,147982],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147985,147986],{},"创建虚拟环境：",[51,147988,147990],{"className":73,"code":147989,"language":75,"meta":57,"style":57},"python -m venv .venv\n",[59,147991,147992],{"__ignoreMap":57},[79,147993,147994,147996,147998,148000],{"class":81,"line":82},[79,147995,232],{"class":85},[79,147997,102977],{"class":96},[79,147999,102980],{"class":89},[79,148001,102983],{"class":89},[19,148003,148004],{},"Windows 激活：",[51,148006,148008],{"className":73,"code":148007,"language":75,"meta":57,"style":57},".venv\\Scripts\\activate\n",[59,148009,148010],{"__ignoreMap":57},[79,148011,148012],{"class":81,"line":82},[79,148013,148007],{"class":85},[19,148015,148016],{},"macOS\u002FLinux 激活：",[51,148018,148020],{"className":73,"code":148019,"language":75,"meta":57,"style":57},"source .venv\u002Fbin\u002Factivate\n",[59,148021,148022],{"__ignoreMap":57},[79,148023,148024,148026],{"class":81,"line":82},[79,148025,102988],{"class":96},[79,148027,102991],{"class":89},[19,148029,148030],{},"退出虚拟环境：",[51,148032,148034],{"className":73,"code":148033,"language":75,"meta":57,"style":57},"deactivate\n",[59,148035,148036],{"__ignoreMap":57},[79,148037,148038],{"class":81,"line":82},[79,148039,148033],{"class":85},[19,148041,148042],{},"保存依赖：",[51,148044,148046],{"className":73,"code":148045,"language":75,"meta":57,"style":57},"pip freeze > requirements.txt\n",[59,148047,148048],{"__ignoreMap":57},[79,148049,148050,148052,148055,148057],{"class":81,"line":82},[79,148051,125],{"class":85},[79,148053,148054],{"class":89}," freeze",[79,148056,28356],{"class":243},[79,148058,148059],{"class":89}," requirements.txt\n",[19,148061,148062],{},"安装依赖：",[51,148064,148066],{"className":73,"code":148065,"language":75,"meta":57,"style":57},"pip install -r requirements.txt\n",[59,148067,148068],{"__ignoreMap":57},[79,148069,148070,148072,148074,148076],{"class":81,"line":82},[79,148071,125],{"class":85},[79,148073,93],{"class":89},[79,148075,121391],{"class":96},[79,148077,148059],{"class":89},[14,148079,148081],{"id":148080},"_16-开发工具","1.6 开发工具",[265,148083,148085],{"id":148084},"_161-pycharm","1.6.1 PyCharm",[19,148087,148088],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,148090,123814],{},[26,148092,148093,148096,148099,148105,148108],{},[29,148094,148095],{},"New Project：创建项目。",[29,148097,148098],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[29,148100,148101,148102,127735],{},"New Python File：创建 ",[59,148103,148104],{},".py",[29,148106,148107],{},"Run：运行当前文件。",[29,148109,148110],{},"Debug：断点调试。",[265,148112,148114],{"id":148113},"_162-vs-code","1.6.2 VS Code",[19,148116,148117],{},"VS Code 轻量，适合后续多语言开发。",[19,148119,148120],{},"建议安装插件：",[26,148122,148123,148126,148129],{},[29,148124,148125],{},"Python。",[29,148127,148128],{},"Pylance。",[29,148130,148131],{},"Jupyter。",[19,148133,148134],{},"选择解释器：",[51,148136,148139],{"className":148137,"code":148138,"language":56,"meta":57},[54],"Ctrl + Shift + P -> Python: Select Interpreter\n",[59,148140,148138],{"__ignoreMap":57},[14,148142,148144],{"id":148143},"_17-第一个python程序","1.7 第一个Python程序",[19,148146,148147,148148,26754],{},"创建文件 ",[59,148149,148150],{},"hello.py",[51,148152,148154],{"className":230,"code":148153,"language":232,"meta":57,"style":57},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[59,148155,148156,148167],{"__ignoreMap":57},[79,148157,148158,148160,148162,148165],{"class":81,"line":82},[79,148159,32541],{"class":96},[79,148161,685],{"class":239},[79,148163,148164],{"class":89},"\"Hello World\"",[79,148166,253],{"class":239},[79,148168,148169,148171,148173,148176],{"class":81,"line":167},[79,148170,32541],{"class":96},[79,148172,685],{"class":239},[79,148174,148175],{"class":89},"\"你好，Python\"",[79,148177,253],{"class":239},[19,148179,148180],{},"在终端运行：",[51,148182,148184],{"className":73,"code":148183,"language":75,"meta":57,"style":57},"python hello.py\n",[59,148185,148186],{"__ignoreMap":57},[79,148187,148188,148190],{"class":81,"line":82},[79,148189,232],{"class":85},[79,148191,148192],{"class":89}," hello.py\n",[19,148194,148195],{},"或：",[51,148197,148199],{"className":73,"code":148198,"language":75,"meta":57,"style":57},"python3 hello.py\n",[59,148200,148201],{"__ignoreMap":57},[79,148202,148203,148205],{"class":81,"line":82},[79,148204,102974],{"class":85},[79,148206,148192],{"class":89},[19,148208,148209],{},"输出：",[51,148211,148214],{"className":148212,"code":148213,"language":56,"meta":57},[54],"Hello World\n你好，Python\n",[59,148215,148213],{"__ignoreMap":57},[14,148217,148219],{"id":148218},"_18-print函数","1.8 print函数",[19,148221,148222,148225],{},[59,148223,148224],{},"print()"," 用来输出内容。",[51,148227,148229],{"className":230,"code":148228,"language":232,"meta":57,"style":57},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[59,148230,148231,148241,148251,148261],{"__ignoreMap":57},[79,148232,148233,148235,148237,148239],{"class":81,"line":82},[79,148234,32541],{"class":96},[79,148236,685],{"class":239},[79,148238,8039],{"class":89},[79,148240,253],{"class":239},[79,148242,148243,148245,148247,148249],{"class":81,"line":167},[79,148244,32541],{"class":96},[79,148246,685],{"class":239},[79,148248,2686],{"class":96},[79,148250,253],{"class":239},[79,148252,148253,148255,148257,148259],{"class":81,"line":178},[79,148254,32541],{"class":96},[79,148256,685],{"class":239},[79,148258,2432],{"class":96},[79,148260,253],{"class":239},[79,148262,148263,148265,148267,148270,148272,148274],{"class":81,"line":457},[79,148264,32541],{"class":96},[79,148266,685],{"class":239},[79,148268,148269],{"class":89},"\"年龄:\"",[79,148271,1060],{"class":239},[79,148273,3023],{"class":96},[79,148275,253],{"class":239},[19,148277,148278],{},"多个内容用逗号隔开，默认中间加空格：",[51,148280,148282],{"className":230,"code":148281,"language":232,"meta":57,"style":57},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[59,148283,148284,148294,148304],{"__ignoreMap":57},[79,148285,148286,148289,148291],{"class":81,"line":82},[79,148287,148288],{"class":239},"name ",[79,148290,244],{"class":243},[79,148292,148293],{"class":89}," \"张三\"\n",[79,148295,148296,148299,148301],{"class":81,"line":167},[79,148297,148298],{"class":239},"age ",[79,148300,244],{"class":243},[79,148302,148303],{"class":96}," 18\n",[79,148305,148306,148308,148310,148313,148316,148318],{"class":81,"line":178},[79,148307,32541],{"class":96},[79,148309,685],{"class":239},[79,148311,148312],{"class":89},"\"姓名:\"",[79,148314,148315],{"class":239},", name, ",[79,148317,148269],{"class":89},[79,148319,148320],{"class":239},", age)\n",[19,148322,148323],{},"修改分隔符：",[51,148325,148327],{"className":230,"code":148326,"language":232,"meta":57,"style":57},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[59,148328,148329],{"__ignoreMap":57},[79,148330,148331,148333,148335,148338,148340,148342,148344,148346,148348,148351,148353,148355],{"class":81,"line":82},[79,148332,32541],{"class":96},[79,148334,685],{"class":239},[79,148336,148337],{"class":89},"\"2024\"",[79,148339,1060],{"class":239},[79,148341,56426],{"class":89},[79,148343,1060],{"class":239},[79,148345,56426],{"class":89},[79,148347,1060],{"class":239},[79,148349,148350],{"class":7412},"sep",[79,148352,244],{"class":243},[79,148354,34598],{"class":89},[79,148356,253],{"class":239},[19,148358,148359],{},"修改结尾符：",[51,148361,148363],{"className":230,"code":148362,"language":232,"meta":57,"style":57},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[59,148364,148365,148383],{"__ignoreMap":57},[79,148366,148367,148369,148371,148373,148375,148377,148379,148381],{"class":81,"line":82},[79,148368,32541],{"class":96},[79,148370,685],{"class":239},[79,148372,8039],{"class":89},[79,148374,1060],{"class":239},[79,148376,47915],{"class":7412},[79,148378,244],{"class":243},[79,148380,6559],{"class":89},[79,148382,253],{"class":239},[79,148384,148385,148387,148389,148392],{"class":81,"line":167},[79,148386,32541],{"class":96},[79,148388,685],{"class":239},[79,148390,148391],{"class":89},"\"python\"",[79,148393,253],{"class":239},[14,148395,148397],{"id":148396},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,148399,148400],{},"交互运行适合临时验证：",[51,148402,148404],{"className":230,"code":148403,"language":232,"meta":57,"style":57},">>> 10 * 3\n30\n",[59,148405,148406,148416],{"__ignoreMap":57},[79,148407,148408,148410,148412,148414],{"class":81,"line":82},[79,148409,147605],{"class":243},[79,148411,4253],{"class":96},[79,148413,853],{"class":243},[79,148415,121788],{"class":96},[79,148417,148418],{"class":81,"line":167},[79,148419,148420],{"class":96},"30\n",[19,148422,148423],{},"脚本运行适合保存程序：",[51,148425,148427],{"className":230,"code":148426,"language":232,"meta":57,"style":57},"price = 8\ncount = 5\nprint(price * count)\n",[59,148428,148429,148439,148448],{"__ignoreMap":57},[79,148430,148431,148434,148436],{"class":81,"line":82},[79,148432,148433],{"class":239},"price ",[79,148435,244],{"class":243},[79,148437,148438],{"class":96}," 8\n",[79,148440,148441,148444,148446],{"class":81,"line":167},[79,148442,148443],{"class":239},"count ",[79,148445,244],{"class":243},[79,148447,56537],{"class":96},[79,148449,148450,148452,148455,148457],{"class":81,"line":178},[79,148451,32541],{"class":96},[79,148453,148454],{"class":239},"(price ",[79,148456,2829],{"class":243},[79,148458,148459],{"class":239}," count)\n",[19,148461,148462],{},"实际学习中推荐：",[26,148464,148465,148468,148473],{},[29,148466,148467],{},"临时试一个语法，用交互模式。",[29,148469,148470,148471,127735],{},"写完整练习，用 ",[59,148472,148104],{},[29,148474,148475],{},"写项目，用独立目录和虚拟环境。",[14,148477,148479],{"id":148478},"_110-常见错误","1.10 常见错误",[265,148481,148483],{"id":148482},"_1101-命令找不到","1.10.1 命令找不到",[51,148485,148488],{"className":148486,"code":148487,"language":56,"meta":57},[54],"python: command not found\n",[59,148489,148487],{"__ignoreMap":57},[19,148491,148492],{},"原因：",[26,148494,148495,148498,148501],{},[29,148496,148497],{},"没安装 Python。",[29,148499,148500],{},"PATH 没配置。",[29,148502,148503,148504,1604],{},"Linux\u002FmacOS 应该使用 ",[59,148505,102974],{},[265,148507,148509],{"id":148508},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148511,148512],{},"不要把文件命名为：",[51,148514,148517],{"className":148515,"code":148516,"language":56,"meta":57},[54],"random.py\njson.py\ntime.py\nrequests.py\n",[59,148518,148516],{"__ignoreMap":57},[19,148520,148521],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[265,148523,148525],{"id":148524},"_1103-中文乱码","1.10.3 中文乱码",[19,148527,148528],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148530,148531],{},"如果读写文件出现乱码，要明确指定编码：",[51,148533,148535],{"className":230,"code":148534,"language":232,"meta":57,"style":57},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[59,148536,148537,148571],{"__ignoreMap":57},[79,148538,148539,148541,148544,148546,148549,148551,148554,148556,148559,148561,148564,148566,148568],{"class":81,"line":82},[79,148540,109840],{"class":243},[79,148542,148543],{"class":96}," open",[79,148545,685],{"class":239},[79,148547,148548],{"class":89},"\"data.txt\"",[79,148550,1060],{"class":239},[79,148552,148553],{"class":89},"\"r\"",[79,148555,1060],{"class":239},[79,148557,148558],{"class":7412},"encoding",[79,148560,244],{"class":243},[79,148562,148563],{"class":89},"\"utf-8\"",[79,148565,15876],{"class":239},[79,148567,445],{"class":243},[79,148569,148570],{"class":239}," f:\n",[79,148572,148573,148576,148578],{"class":81,"line":167},[79,148574,148575],{"class":239},"    content ",[79,148577,244],{"class":243},[79,148579,148580],{"class":239}," f.read()\n",[14,148582,148584],{"id":148583},"_111-本章练习","1.11 本章练习",[26,148586,148587,148590,148596],{},[29,148588,148589],{},"安装 Python，并在终端输出版本号。",[29,148591,148592,148593,148595],{},"新建 ",[59,148594,148150],{},"，输出自己的姓名、年龄、学习目标。",[29,148597,106387,148598,148600],{},[59,148599,148224],{}," 输出下面格式：",[51,148602,148605],{"className":148603,"code":148604,"language":56,"meta":57},[54],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[59,148606,148604],{"__ignoreMap":57},[26,148608,148609],{"start":457},[29,148610,106387,148611,148613],{},[59,148612,148350],{}," 输出日期：",[51,148615,148618],{"className":148616,"code":148617,"language":56,"meta":57},[54],"2024-10-10\n",[59,148619,148617],{"__ignoreMap":57},[26,148621,148622],{"start":462},[29,148623,106387,148624,148626,148627,148629],{},[59,148625,47915],{}," 让两次 ",[59,148628,148224],{}," 输出在同一行。",[2287,148631,148632],{},"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":57,"searchDepth":167,"depth":167,"links":148634},[148635,148636,148637,148642,148643,148644,148648,148649,148650,148651,148656],{"id":147517,"depth":167,"text":147518},{"id":147561,"depth":167,"text":147562},{"id":147662,"depth":167,"text":147663,"children":148638},[148639,148640,148641],{"id":147666,"depth":178,"text":147667},{"id":147721,"depth":178,"text":147722},{"id":147757,"depth":178,"text":147758},{"id":147830,"depth":167,"text":147831},{"id":147975,"depth":167,"text":147976},{"id":148080,"depth":167,"text":148081,"children":148645},[148646,148647],{"id":148084,"depth":178,"text":148085},{"id":148113,"depth":178,"text":148114},{"id":148143,"depth":167,"text":148144},{"id":148218,"depth":167,"text":148219},{"id":148396,"depth":167,"text":148397},{"id":148478,"depth":167,"text":148479,"children":148652},[148653,148654,148655],{"id":148482,"depth":178,"text":148483},{"id":148508,"depth":178,"text":148509},{"id":148524,"depth":178,"text":148525},{"id":148583,"depth":167,"text":148584},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147509,"description":25516},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148663,"title":148664,"body":148665,"description":25516,"extension":2314,"meta":151069,"navigation":453,"path":151070,"seo":151071,"stem":151072,"__hash__":151073},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148666,"toc":151054},[148667,148670,148674,148677,148680,148697,148700,148742,148745,148749,148752,148755,148792,148795,148829,148832,148924,148928,148942,148945,148972,148975,148979,149082,149089,149092,149109,149113,149120,149309,149312,149385,149389,149392,149476,149479,149511,149515,149719,149722,149726,149732,149834,149837,150093,150097,150100,150103,150117,150119,150305,150309,150671,150677,150681,150684,150808,150811,150990,150993,150997,151030,151034,151051],[10,148668,148664],{"id":148669},"_10-json与pyecharts折线图",[14,148671,148673],{"id":148672},"_101-数据可视化","10.1 数据可视化",[19,148675,148676],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148678,148679],{},"常见图表：",[26,148681,148682,148685,148688,148691,148694],{},[29,148683,148684],{},"折线图：看趋势。",[29,148686,148687],{},"柱状图：看分类对比。",[29,148689,148690],{},"饼图：看占比。",[29,148692,148693],{},"地图：看地域分布。",[29,148695,148696],{},"散点图：看两个变量之间的关系。",[19,148698,148699],{},"Python 可视化常用库：",[2516,148701,148702,148710],{},[2519,148703,148704],{},[2522,148705,148706,148708],{},[2525,148707,147913],{},[2525,148709,25880],{},[2563,148711,148712,148719,148727,148734],{},[2522,148713,148714,148716],{},[2568,148715,147945],{},[2568,148717,148718],{},"基础、经典、可定制",[2522,148720,148721,148724],{},[2568,148722,148723],{},"seaborn",[2568,148725,148726],{},"统计图表更美观",[2522,148728,148729,148731],{},[2568,148730,147953],{},[2568,148732,148733],{},"生成交互式网页图表",[2522,148735,148736,148739],{},[2568,148737,148738],{},"plotly",[2568,148740,148741],{},"交互图表能力强",[19,148743,148744],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148746,148748],{"id":148747},"_102-json回顾","10.2 JSON回顾",[19,148750,148751],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148753,148754],{},"Python 字典：",[51,148756,148758],{"className":230,"code":148757,"language":232,"meta":57,"style":57},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[59,148759,148760,148768,148779,148788],{"__ignoreMap":57},[79,148761,148762,148764,148766],{"class":81,"line":82},[79,148763,103716],{"class":239},[79,148765,244],{"class":243},[79,148767,17732],{"class":239},[79,148769,148770,148773,148775,148777],{"class":81,"line":167},[79,148771,148772],{"class":89},"    \"name\"",[79,148774,53550],{"class":239},[79,148776,71377],{"class":89},[79,148778,33585],{"class":239},[79,148780,148781,148784,148786],{"class":81,"line":178},[79,148782,148783],{"class":89},"    \"value\"",[79,148785,53550],{"class":239},[79,148787,99561],{"class":96},[79,148789,148790],{"class":81,"line":457},[79,148791,3801],{"class":239},[19,148793,148794],{},"JSON 字符串：",[51,148796,148799],{"className":148797,"code":148798,"language":147544,"meta":57,"style":57},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[59,148800,148801,148805,148816,148825],{"__ignoreMap":57},[79,148802,148803],{"class":81,"line":82},[79,148804,3782],{"class":239},[79,148806,148807,148810,148812,148814],{"class":81,"line":167},[79,148808,148809],{"class":96},"  \"name\"",[79,148811,53550],{"class":239},[79,148813,71377],{"class":89},[79,148815,33585],{"class":239},[79,148817,148818,148821,148823],{"class":81,"line":178},[79,148819,148820],{"class":96},"  \"value\"",[79,148822,53550],{"class":239},[79,148824,99561],{"class":96},[79,148826,148827],{"class":81,"line":457},[79,148828,3801],{"class":239},[19,148830,148831],{},"Python 与 JSON 的转换：",[51,148833,148835],{"className":230,"code":148834,"language":232,"meta":57,"style":57},"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",[59,148836,148837,148844,148848,148873,148877,148896,148903,148907,148917],{"__ignoreMap":57},[79,148838,148839,148841],{"class":81,"line":82},[79,148840,432],{"class":243},[79,148842,148843],{"class":239}," json\n",[79,148845,148846],{"class":81,"line":167},[79,148847,454],{"emptyLinePlaceholder":453},[79,148849,148850,148852,148854,148856,148858,148860,148862,148864,148867,148869,148871],{"class":81,"line":178},[79,148851,103716],{"class":239},[79,148853,244],{"class":243},[79,148855,6647],{"class":239},[79,148857,64789],{"class":89},[79,148859,53550],{"class":239},[79,148861,71377],{"class":89},[79,148863,1060],{"class":239},[79,148865,148866],{"class":89},"\"value\"",[79,148868,53550],{"class":239},[79,148870,2686],{"class":96},[79,148872,3801],{"class":239},[79,148874,148875],{"class":81,"line":457},[79,148876,454],{"emptyLinePlaceholder":453},[79,148878,148879,148882,148884,148887,148890,148892,148894],{"class":81,"line":462},[79,148880,148881],{"class":239},"json_text ",[79,148883,244],{"class":243},[79,148885,148886],{"class":239}," json.dumps(data, ",[79,148888,148889],{"class":7412},"ensure_ascii",[79,148891,244],{"class":243},[79,148893,36102],{"class":96},[79,148895,253],{"class":239},[79,148897,148898,148900],{"class":81,"line":474},[79,148899,32541],{"class":96},[79,148901,148902],{"class":239},"(json_text)\n",[79,148904,148905],{"class":81,"line":480},[79,148906,454],{"emptyLinePlaceholder":453},[79,148908,148909,148912,148914],{"class":81,"line":486},[79,148910,148911],{"class":239},"new_data ",[79,148913,244],{"class":243},[79,148915,148916],{"class":239}," json.loads(json_text)\n",[79,148918,148919,148921],{"class":81,"line":491},[79,148920,32541],{"class":96},[79,148922,148923],{"class":239},"(new_data)\n",[14,148925,148927],{"id":148926},"_103-安装pyecharts","10.3 安装pyecharts",[51,148929,148931],{"className":73,"code":148930,"language":75,"meta":57,"style":57},"pip install pyecharts\n",[59,148932,148933],{"__ignoreMap":57},[79,148934,148935,148937,148939],{"class":81,"line":82},[79,148936,125],{"class":85},[79,148938,93],{"class":89},[79,148940,148941],{"class":89}," pyecharts\n",[19,148943,148944],{},"验证：",[51,148946,148948],{"className":230,"code":148947,"language":232,"meta":57,"style":57},"import pyecharts\n\nprint(pyecharts.__version__)\n",[59,148949,148950,148956,148960],{"__ignoreMap":57},[79,148951,148952,148954],{"class":81,"line":82},[79,148953,432],{"class":243},[79,148955,148941],{"class":239},[79,148957,148958],{"class":81,"line":167},[79,148959,454],{"emptyLinePlaceholder":453},[79,148961,148962,148964,148967,148970],{"class":81,"line":178},[79,148963,32541],{"class":96},[79,148965,148966],{"class":239},"(pyecharts.",[79,148968,148969],{"class":96},"__version__",[79,148971,253],{"class":239},[19,148973,148974],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148976,148978],{"id":148977},"_104-第一个折线图","10.4 第一个折线图",[51,148980,148982],{"className":230,"code":148981,"language":232,"meta":57,"style":57},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[59,148983,148984,148996,149000,149010,149040,149072],{"__ignoreMap":57},[79,148985,148986,148988,148991,148993],{"class":81,"line":82},[79,148987,32862],{"class":243},[79,148989,148990],{"class":239}," pyecharts.charts ",[79,148992,432],{"class":243},[79,148994,148995],{"class":239}," Line\n",[79,148997,148998],{"class":81,"line":167},[79,148999,454],{"emptyLinePlaceholder":453},[79,149001,149002,149005,149007],{"class":81,"line":178},[79,149003,149004],{"class":239},"line ",[79,149006,244],{"class":243},[79,149008,149009],{"class":239}," Line()\n",[79,149011,149012,149015,149018,149020,149023,149025,149028,149030,149033,149035,149038],{"class":81,"line":457},[79,149013,149014],{"class":239},"line.add_xaxis([",[79,149016,149017],{"class":89},"\"周一\"",[79,149019,1060],{"class":239},[79,149021,149022],{"class":89},"\"周二\"",[79,149024,1060],{"class":239},[79,149026,149027],{"class":89},"\"周三\"",[79,149029,1060],{"class":239},[79,149031,149032],{"class":89},"\"周四\"",[79,149034,1060],{"class":239},[79,149036,149037],{"class":89},"\"周五\"",[79,149039,1243],{"class":239},[79,149041,149042,149045,149048,149050,149052,149054,149056,149058,149060,149062,149065,149067,149070],{"class":81,"line":462},[79,149043,149044],{"class":239},"line.add_yaxis(",[79,149046,149047],{"class":89},"\"销售额\"",[79,149049,79626],{"class":239},[79,149051,2686],{"class":96},[79,149053,1060],{"class":239},[79,149055,3190],{"class":96},[79,149057,1060],{"class":239},[79,149059,3235],{"class":96},[79,149061,1060],{"class":239},[79,149063,149064],{"class":96},"150",[79,149066,1060],{"class":239},[79,149068,149069],{"class":96},"180",[79,149071,1243],{"class":239},[79,149073,149074,149077,149080],{"class":81,"line":474},[79,149075,149076],{"class":239},"line.render(",[79,149078,149079],{"class":89},"\"line.html\"",[79,149081,253],{"class":239},[19,149083,149084,149085,149088],{},"运行后会生成 ",[59,149086,149087],{},"line.html","，用浏览器打开即可看到图表。",[19,149090,149091],{},"核心步骤：",[26,149093,149094,149097,149100,149103,149106],{},[29,149095,149096],{},"导入图表类。",[29,149098,149099],{},"创建图表对象。",[29,149101,149102],{},"添加 x 轴数据。",[29,149104,149105],{},"添加 y 轴数据。",[29,149107,149108],{},"渲染为 HTML。",[14,149110,149112],{"id":149111},"_105-全局配置","10.5 全局配置",[19,149114,149115,149116,149119],{},"常用配置在 ",[59,149117,149118],{},"pyecharts.options"," 中。",[51,149121,149123],{"className":230,"code":149122,"language":232,"meta":57,"style":57},"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",[59,149124,149125,149142,149152,149156,149164,149188,149216,149221,149240,149259,149277,149297,149301],{"__ignoreMap":57},[79,149126,149127,149129,149132,149134,149137,149139],{"class":81,"line":82},[79,149128,32862],{"class":243},[79,149130,149131],{"class":239}," pyecharts ",[79,149133,432],{"class":243},[79,149135,149136],{"class":239}," options ",[79,149138,445],{"class":243},[79,149140,149141],{"class":239}," opts\n",[79,149143,149144,149146,149148,149150],{"class":81,"line":167},[79,149145,32862],{"class":243},[79,149147,148990],{"class":239},[79,149149,432],{"class":243},[79,149151,148995],{"class":239},[79,149153,149154],{"class":81,"line":178},[79,149155,454],{"emptyLinePlaceholder":453},[79,149157,149158,149160,149162],{"class":81,"line":457},[79,149159,149004],{"class":239},[79,149161,244],{"class":243},[79,149163,149009],{"class":239},[79,149165,149166,149168,149170,149172,149174,149176,149178,149180,149182,149184,149186],{"class":81,"line":462},[79,149167,149014],{"class":239},[79,149169,149017],{"class":89},[79,149171,1060],{"class":239},[79,149173,149022],{"class":89},[79,149175,1060],{"class":239},[79,149177,149027],{"class":89},[79,149179,1060],{"class":239},[79,149181,149032],{"class":89},[79,149183,1060],{"class":239},[79,149185,149037],{"class":89},[79,149187,1243],{"class":239},[79,149189,149190,149192,149194,149196,149198,149200,149202,149204,149206,149208,149210,149212,149214],{"class":81,"line":474},[79,149191,149044],{"class":239},[79,149193,149047],{"class":89},[79,149195,79626],{"class":239},[79,149197,2686],{"class":96},[79,149199,1060],{"class":239},[79,149201,3190],{"class":96},[79,149203,1060],{"class":239},[79,149205,3235],{"class":96},[79,149207,1060],{"class":239},[79,149209,149064],{"class":96},[79,149211,1060],{"class":239},[79,149213,149069],{"class":96},[79,149215,1243],{"class":239},[79,149217,149218],{"class":81,"line":480},[79,149219,149220],{"class":239},"line.set_global_opts(\n",[79,149222,149223,149226,149228,149231,149233,149235,149238],{"class":81,"line":486},[79,149224,149225],{"class":7412},"    title_opts",[79,149227,244],{"class":243},[79,149229,149230],{"class":239},"opts.TitleOpts(",[79,149232,53520],{"class":7412},[79,149234,244],{"class":243},[79,149236,149237],{"class":89},"\"一周销售额\"",[79,149239,40161],{"class":239},[79,149241,149242,149245,149247,149250,149252,149254,149257],{"class":81,"line":491},[79,149243,149244],{"class":7412},"    xaxis_opts",[79,149246,244],{"class":243},[79,149248,149249],{"class":239},"opts.AxisOpts(",[79,149251,697],{"class":7412},[79,149253,244],{"class":243},[79,149255,149256],{"class":89},"\"日期\"",[79,149258,40161],{"class":239},[79,149260,149261,149264,149266,149268,149270,149272,149275],{"class":81,"line":497},[79,149262,149263],{"class":7412},"    yaxis_opts",[79,149265,244],{"class":243},[79,149267,149249],{"class":239},[79,149269,697],{"class":7412},[79,149271,244],{"class":243},[79,149273,149274],{"class":89},"\"金额\"",[79,149276,40161],{"class":239},[79,149278,149279,149282,149284,149287,149290,149292,149295],{"class":81,"line":503},[79,149280,149281],{"class":7412},"    tooltip_opts",[79,149283,244],{"class":243},[79,149285,149286],{"class":239},"opts.TooltipOpts(",[79,149288,149289],{"class":7412},"trigger",[79,149291,244],{"class":243},[79,149293,149294],{"class":89},"\"axis\"",[79,149296,40161],{"class":239},[79,149298,149299],{"class":81,"line":509},[79,149300,253],{"class":239},[79,149302,149303,149305,149307],{"class":81,"line":514},[79,149304,149076],{"class":239},[79,149306,149079],{"class":89},[79,149308,253],{"class":239},[19,149310,149311],{},"常见全局配置：",[2516,149313,149314,149323],{},[2519,149315,149316],{},[2522,149317,149318,149321],{},[2525,149319,149320],{},"配置",[2525,149322,104736],{},[2563,149324,149325,149335,149345,149355,149365,149375],{},[2522,149326,149327,149332],{},[2568,149328,149329],{},[59,149330,149331],{},"TitleOpts",[2568,149333,149334],{},"标题",[2522,149336,149337,149342],{},[2568,149338,149339],{},[59,149340,149341],{},"LegendOpts",[2568,149343,149344],{},"图例",[2522,149346,149347,149352],{},[2568,149348,149349],{},[59,149350,149351],{},"TooltipOpts",[2568,149353,149354],{},"提示框",[2522,149356,149357,149362],{},[2568,149358,149359],{},[59,149360,149361],{},"AxisOpts",[2568,149363,149364],{},"坐标轴",[2522,149366,149367,149372],{},[2568,149368,149369],{},[59,149370,149371],{},"VisualMapOpts",[2568,149373,149374],{},"视觉映射",[2522,149376,149377,149382],{},[2568,149378,149379],{},[59,149380,149381],{},"DataZoomOpts",[2568,149383,149384],{},"区域缩放",[14,149386,149388],{"id":149387},"_106-系列配置","10.6 系列配置",[19,149390,149391],{},"系列配置作用于某一组数据。",[51,149393,149395],{"className":230,"code":149394,"language":232,"meta":57,"style":57},"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",[59,149396,149397,149402,149413,149442,149453,149472],{"__ignoreMap":57},[79,149398,149399],{"class":81,"line":82},[79,149400,149401],{"class":239},"line.add_yaxis(\n",[79,149403,149404,149407,149409,149411],{"class":81,"line":167},[79,149405,149406],{"class":7412},"    series_name",[79,149408,244],{"class":243},[79,149410,149047],{"class":89},[79,149412,33585],{"class":239},[79,149414,149415,149418,149420,149422,149424,149426,149428,149430,149432,149434,149436,149438,149440],{"class":81,"line":178},[79,149416,149417],{"class":7412},"    y_axis",[79,149419,244],{"class":243},[79,149421,3263],{"class":239},[79,149423,2686],{"class":96},[79,149425,1060],{"class":239},[79,149427,3190],{"class":96},[79,149429,1060],{"class":239},[79,149431,3235],{"class":96},[79,149433,1060],{"class":239},[79,149435,149064],{"class":96},[79,149437,1060],{"class":239},[79,149439,149069],{"class":96},[79,149441,89941],{"class":239},[79,149443,149444,149447,149449,149451],{"class":81,"line":457},[79,149445,149446],{"class":7412},"    is_smooth",[79,149448,244],{"class":243},[79,149450,33595],{"class":96},[79,149452,33585],{"class":239},[79,149454,149455,149458,149460,149463,149466,149468,149470],{"class":81,"line":462},[79,149456,149457],{"class":7412},"    label_opts",[79,149459,244],{"class":243},[79,149461,149462],{"class":239},"opts.LabelOpts(",[79,149464,149465],{"class":7412},"is_show",[79,149467,244],{"class":243},[79,149469,33595],{"class":96},[79,149471,40161],{"class":239},[79,149473,149474],{"class":81,"line":474},[79,149475,253],{"class":239},[19,149477,149478],{},"常用参数：",[26,149480,149481,149487,149493,149499,149505],{},[29,149482,149483,149486],{},[59,149484,149485],{},"series_name","：系列名称。",[29,149488,149489,149492],{},[59,149490,149491],{},"y_axis","：y 轴数据。",[29,149494,149495,149498],{},[59,149496,149497],{},"is_smooth","：是否平滑曲线。",[29,149500,149501,149504],{},[59,149502,149503],{},"label_opts","：标签配置。",[29,149506,149507,149510],{},[59,149508,149509],{},"symbol_size","：标记点大小。",[14,149512,149514],{"id":149513},"_107-多条折线","10.7 多条折线",[51,149516,149518],{"className":230,"code":149517,"language":232,"meta":57,"style":57},"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",[59,149519,149520,149534,149544,149548,149577,149581,149589,149594,149632,149669,149673,149690,149706,149710],{"__ignoreMap":57},[79,149521,149522,149524,149526,149528,149530,149532],{"class":81,"line":82},[79,149523,32862],{"class":243},[79,149525,149131],{"class":239},[79,149527,432],{"class":243},[79,149529,149136],{"class":239},[79,149531,445],{"class":243},[79,149533,149141],{"class":239},[79,149535,149536,149538,149540,149542],{"class":81,"line":167},[79,149537,32862],{"class":243},[79,149539,148990],{"class":239},[79,149541,432],{"class":243},[79,149543,148995],{"class":239},[79,149545,149546],{"class":81,"line":178},[79,149547,454],{"emptyLinePlaceholder":453},[79,149549,149550,149553,149555,149557,149559,149561,149563,149565,149567,149569,149571,149573,149575],{"class":81,"line":457},[79,149551,149552],{"class":239},"dates ",[79,149554,244],{"class":243},[79,149556,54339],{"class":239},[79,149558,149017],{"class":89},[79,149560,1060],{"class":239},[79,149562,149022],{"class":89},[79,149564,1060],{"class":239},[79,149566,149027],{"class":89},[79,149568,1060],{"class":239},[79,149570,149032],{"class":89},[79,149572,1060],{"class":239},[79,149574,149037],{"class":89},[79,149576,35361],{"class":239},[79,149578,149579],{"class":81,"line":462},[79,149580,454],{"emptyLinePlaceholder":453},[79,149582,149583,149585,149587],{"class":81,"line":474},[79,149584,149004],{"class":239},[79,149586,244],{"class":243},[79,149588,149009],{"class":239},[79,149590,149591],{"class":81,"line":480},[79,149592,149593],{"class":239},"line.add_xaxis(dates)\n",[79,149595,149596,149598,149601,149603,149605,149607,149610,149612,149614,149616,149618,149620,149622,149624,149626,149628,149630],{"class":81,"line":486},[79,149597,149044],{"class":239},[79,149599,149600],{"class":89},"\"线上销售\"",[79,149602,79626],{"class":239},[79,149604,2686],{"class":96},[79,149606,1060],{"class":239},[79,149608,149609],{"class":96},"130",[79,149611,1060],{"class":239},[79,149613,3190],{"class":96},[79,149615,1060],{"class":239},[79,149617,23187],{"class":96},[79,149619,1060],{"class":239},[79,149621,3947],{"class":96},[79,149623,1052],{"class":239},[79,149625,149497],{"class":7412},[79,149627,244],{"class":243},[79,149629,33595],{"class":96},[79,149631,253],{"class":239},[79,149633,149634,149636,149639,149641,149643,149645,149647,149649,149651,149653,149655,149657,149659,149661,149663,149665,149667],{"class":81,"line":491},[79,149635,149044],{"class":239},[79,149637,149638],{"class":89},"\"线下销售\"",[79,149640,79626],{"class":239},[79,149642,2985],{"class":96},[79,149644,1060],{"class":239},[79,149646,3235],{"class":96},[79,149648,1060],{"class":239},[79,149650,2686],{"class":96},[79,149652,1060],{"class":239},[79,149654,3190],{"class":96},[79,149656,1060],{"class":239},[79,149658,149064],{"class":96},[79,149660,1052],{"class":239},[79,149662,149497],{"class":7412},[79,149664,244],{"class":243},[79,149666,33595],{"class":96},[79,149668,253],{"class":239},[79,149670,149671],{"class":81,"line":497},[79,149672,149220],{"class":239},[79,149674,149675,149677,149679,149681,149683,149685,149688],{"class":81,"line":503},[79,149676,149225],{"class":7412},[79,149678,244],{"class":243},[79,149680,149230],{"class":239},[79,149682,53520],{"class":7412},[79,149684,244],{"class":243},[79,149686,149687],{"class":89},"\"线上线下销售趋势\"",[79,149689,40161],{"class":239},[79,149691,149692,149694,149696,149698,149700,149702,149704],{"class":81,"line":509},[79,149693,149281],{"class":7412},[79,149695,244],{"class":243},[79,149697,149286],{"class":239},[79,149699,149289],{"class":7412},[79,149701,244],{"class":243},[79,149703,149294],{"class":89},[79,149705,40161],{"class":239},[79,149707,149708],{"class":81,"line":514},[79,149709,253],{"class":239},[79,149711,149712,149714,149717],{"class":81,"line":520},[79,149713,149076],{"class":239},[79,149715,149716],{"class":89},"\"sales.html\"",[79,149718,253],{"class":239},[19,149720,149721],{},"多条折线适合比较不同指标或不同地区。",[14,149723,149725],{"id":149724},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149727,149728,149729,26754],{},"假设 ",[59,149730,149731],{},"sales.json",[51,149733,149735],{"className":148797,"code":149734,"language":147544,"meta":57,"style":57},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[59,149736,149737,149742,149774,149802,149830],{"__ignoreMap":57},[79,149738,149739],{"class":81,"line":82},[79,149740,149741],{"class":239},"[\n",[79,149743,149744,149747,149750,149752,149754,149756,149759,149761,149763,149765,149768,149770,149772],{"class":81,"line":167},[79,149745,149746],{"class":239},"  {",[79,149748,149749],{"class":96},"\"date\"",[79,149751,53550],{"class":239},[79,149753,149017],{"class":89},[79,149755,1060],{"class":239},[79,149757,149758],{"class":96},"\"online\"",[79,149760,53550],{"class":239},[79,149762,2686],{"class":96},[79,149764,1060],{"class":239},[79,149766,149767],{"class":96},"\"offline\"",[79,149769,53550],{"class":239},[79,149771,2985],{"class":96},[79,149773,7128],{"class":239},[79,149775,149776,149778,149780,149782,149784,149786,149788,149790,149792,149794,149796,149798,149800],{"class":81,"line":178},[79,149777,149746],{"class":239},[79,149779,149749],{"class":96},[79,149781,53550],{"class":239},[79,149783,149022],{"class":89},[79,149785,1060],{"class":239},[79,149787,149758],{"class":96},[79,149789,53550],{"class":239},[79,149791,149609],{"class":96},[79,149793,1060],{"class":239},[79,149795,149767],{"class":96},[79,149797,53550],{"class":239},[79,149799,3235],{"class":96},[79,149801,7128],{"class":239},[79,149803,149804,149806,149808,149810,149812,149814,149816,149818,149820,149822,149824,149826,149828],{"class":81,"line":457},[79,149805,149746],{"class":239},[79,149807,149749],{"class":96},[79,149809,53550],{"class":239},[79,149811,149027],{"class":89},[79,149813,1060],{"class":239},[79,149815,149758],{"class":96},[79,149817,53550],{"class":239},[79,149819,3190],{"class":96},[79,149821,1060],{"class":239},[79,149823,149767],{"class":96},[79,149825,53550],{"class":239},[79,149827,2686],{"class":96},[79,149829,3801],{"class":239},[79,149831,149832],{"class":81,"line":462},[79,149833,35361],{"class":239},[19,149835,149836],{},"读取并绘图：",[51,149838,149840],{"className":230,"code":149839,"language":232,"meta":57,"style":57},"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",[59,149841,149842,149848,149862,149872,149876,149908,149921,149925,149933,149942,149951,149955,149967,149976,149985,149994,149998,150006,150010,150027,150044,150048,150065,150081,150085],{"__ignoreMap":57},[79,149843,149844,149846],{"class":81,"line":82},[79,149845,432],{"class":243},[79,149847,148843],{"class":239},[79,149849,149850,149852,149854,149856,149858,149860],{"class":81,"line":167},[79,149851,32862],{"class":243},[79,149853,149131],{"class":239},[79,149855,432],{"class":243},[79,149857,149136],{"class":239},[79,149859,445],{"class":243},[79,149861,149141],{"class":239},[79,149863,149864,149866,149868,149870],{"class":81,"line":178},[79,149865,32862],{"class":243},[79,149867,148990],{"class":239},[79,149869,432],{"class":243},[79,149871,148995],{"class":239},[79,149873,149874],{"class":81,"line":457},[79,149875,454],{"emptyLinePlaceholder":453},[79,149877,149878,149880,149882,149884,149887,149889,149891,149893,149895,149897,149899,149901,149903,149906],{"class":81,"line":462},[79,149879,109840],{"class":243},[79,149881,148543],{"class":96},[79,149883,685],{"class":239},[79,149885,149886],{"class":89},"\"sales.json\"",[79,149888,1060],{"class":239},[79,149890,148553],{"class":89},[79,149892,1060],{"class":239},[79,149894,148558],{"class":7412},[79,149896,244],{"class":243},[79,149898,148563],{"class":89},[79,149900,15876],{"class":239},[79,149902,445],{"class":243},[79,149904,149905],{"class":7412}," file",[79,149907,673],{"class":239},[79,149909,149910,149912,149914,149917,149919],{"class":81,"line":474},[79,149911,922],{"class":239},[79,149913,244],{"class":243},[79,149915,149916],{"class":239}," json.load(",[79,149918,47468],{"class":7412},[79,149920,253],{"class":239},[79,149922,149923],{"class":81,"line":480},[79,149924,454],{"emptyLinePlaceholder":453},[79,149926,149927,149929,149931],{"class":81,"line":486},[79,149928,149552],{"class":239},[79,149930,244],{"class":243},[79,149932,53951],{"class":239},[79,149934,149935,149938,149940],{"class":81,"line":491},[79,149936,149937],{"class":239},"online_sales ",[79,149939,244],{"class":243},[79,149941,53951],{"class":239},[79,149943,149944,149947,149949],{"class":81,"line":497},[79,149945,149946],{"class":239},"offline_sales ",[79,149948,244],{"class":243},[79,149950,53951],{"class":239},[79,149952,149953],{"class":81,"line":503},[79,149954,454],{"emptyLinePlaceholder":453},[79,149956,149957,149959,149962,149964],{"class":81,"line":509},[79,149958,1874],{"class":243},[79,149960,149961],{"class":239}," item ",[79,149963,955],{"class":243},[79,149965,149966],{"class":239}," data:\n",[79,149968,149969,149972,149974],{"class":81,"line":514},[79,149970,149971],{"class":239},"    dates.append(item[",[79,149973,149749],{"class":89},[79,149975,1243],{"class":239},[79,149977,149978,149981,149983],{"class":81,"line":520},[79,149979,149980],{"class":239},"    online_sales.append(item[",[79,149982,149758],{"class":89},[79,149984,1243],{"class":239},[79,149986,149987,149990,149992],{"class":81,"line":526},[79,149988,149989],{"class":239},"    offline_sales.append(item[",[79,149991,149767],{"class":89},[79,149993,1243],{"class":239},[79,149995,149996],{"class":81,"line":532},[79,149997,454],{"emptyLinePlaceholder":453},[79,149999,150000,150002,150004],{"class":81,"line":537},[79,150001,149004],{"class":239},[79,150003,244],{"class":243},[79,150005,149009],{"class":239},[79,150007,150008],{"class":81,"line":543},[79,150009,149593],{"class":239},[79,150011,150012,150014,150016,150019,150021,150023,150025],{"class":81,"line":549},[79,150013,149044],{"class":239},[79,150015,149600],{"class":89},[79,150017,150018],{"class":239},", online_sales, ",[79,150020,149497],{"class":7412},[79,150022,244],{"class":243},[79,150024,33595],{"class":96},[79,150026,253],{"class":239},[79,150028,150029,150031,150033,150036,150038,150040,150042],{"class":81,"line":555},[79,150030,149044],{"class":239},[79,150032,149638],{"class":89},[79,150034,150035],{"class":239},", offline_sales, ",[79,150037,149497],{"class":7412},[79,150039,244],{"class":243},[79,150041,33595],{"class":96},[79,150043,253],{"class":239},[79,150045,150046],{"class":81,"line":561},[79,150047,149220],{"class":239},[79,150049,150050,150052,150054,150056,150058,150060,150063],{"class":81,"line":567},[79,150051,149225],{"class":7412},[79,150053,244],{"class":243},[79,150055,149230],{"class":239},[79,150057,53520],{"class":7412},[79,150059,244],{"class":243},[79,150061,150062],{"class":89},"\"销售趋势\"",[79,150064,40161],{"class":239},[79,150066,150067,150069,150071,150073,150075,150077,150079],{"class":81,"line":573},[79,150068,149281],{"class":7412},[79,150070,244],{"class":243},[79,150072,149286],{"class":239},[79,150074,149289],{"class":7412},[79,150076,244],{"class":243},[79,150078,149294],{"class":89},[79,150080,40161],{"class":239},[79,150082,150083],{"class":81,"line":579},[79,150084,253],{"class":239},[79,150086,150087,150089,150091],{"class":81,"line":584},[79,150088,149076],{"class":239},[79,150090,149716],{"class":89},[79,150092,253],{"class":239},[14,150094,150096],{"id":150095},"_109-数据清洗","10.9 数据清洗",[19,150098,150099],{},"真实数据经常不整齐，需要清洗。",[19,150101,150102],{},"常见问题：",[26,150104,150105,150108,150111,150114],{},[29,150106,150107],{},"数字是字符串。",[29,150109,150110],{},"字段缺失。",[29,150112,150113],{},"空值。",[29,150115,150116],{},"日期格式不统一。",[19,150118,17295],{},[51,150120,150122],{"className":230,"code":150121,"language":232,"meta":57,"style":57},"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",[59,150123,150124,150133,150156,150176,150197,150201,150205,150213,150222,150226,150237,150251,150260,150265,150269,150277,150287,150291,150298],{"__ignoreMap":57},[79,150125,150126,150129,150131],{"class":81,"line":82},[79,150127,150128],{"class":239},"raw_data ",[79,150130,244],{"class":243},[79,150132,57557],{"class":239},[79,150134,150135,150138,150140,150142,150144,150146,150149,150151,150154],{"class":81,"line":167},[79,150136,150137],{"class":239},"    {",[79,150139,149749],{"class":89},[79,150141,53550],{"class":239},[79,150143,149017],{"class":89},[79,150145,1060],{"class":239},[79,150147,150148],{"class":89},"\"sales\"",[79,150150,53550],{"class":239},[79,150152,150153],{"class":89},"\"100\"",[79,150155,7128],{"class":239},[79,150157,150158,150160,150162,150164,150166,150168,150170,150172,150174],{"class":81,"line":178},[79,150159,150137],{"class":239},[79,150161,149749],{"class":89},[79,150163,53550],{"class":239},[79,150165,149022],{"class":89},[79,150167,1060],{"class":239},[79,150169,150148],{"class":89},[79,150171,53550],{"class":239},[79,150173,9846],{"class":89},[79,150175,7128],{"class":239},[79,150177,150178,150180,150182,150184,150186,150188,150190,150192,150195],{"class":81,"line":457},[79,150179,150137],{"class":239},[79,150181,149749],{"class":89},[79,150183,53550],{"class":239},[79,150185,149027],{"class":89},[79,150187,1060],{"class":239},[79,150189,150148],{"class":89},[79,150191,53550],{"class":239},[79,150193,150194],{"class":89},"\"120\"",[79,150196,7128],{"class":239},[79,150198,150199],{"class":81,"line":462},[79,150200,35361],{"class":239},[79,150202,150203],{"class":81,"line":474},[79,150204,454],{"emptyLinePlaceholder":453},[79,150206,150207,150209,150211],{"class":81,"line":480},[79,150208,149552],{"class":239},[79,150210,244],{"class":243},[79,150212,53951],{"class":239},[79,150214,150215,150218,150220],{"class":81,"line":486},[79,150216,150217],{"class":239},"sales ",[79,150219,244],{"class":243},[79,150221,53951],{"class":239},[79,150223,150224],{"class":81,"line":491},[79,150225,454],{"emptyLinePlaceholder":453},[79,150227,150228,150230,150232,150234],{"class":81,"line":497},[79,150229,1874],{"class":243},[79,150231,149961],{"class":239},[79,150233,955],{"class":243},[79,150235,150236],{"class":239}," raw_data:\n",[79,150238,150239,150242,150244,150247,150249],{"class":81,"line":503},[79,150240,150241],{"class":239},"    value ",[79,150243,244],{"class":243},[79,150245,150246],{"class":239}," item.get(",[79,150248,150148],{"class":89},[79,150250,253],{"class":239},[79,150252,150253,150255,150257],{"class":81,"line":509},[79,150254,662],{"class":243},[79,150256,41044],{"class":243},[79,150258,150259],{"class":239}," value:\n",[79,150261,150262],{"class":81,"line":514},[79,150263,150264],{"class":243},"        continue\n",[79,150266,150267],{"class":81,"line":520},[79,150268,454],{"emptyLinePlaceholder":453},[79,150270,150271,150273,150275],{"class":81,"line":526},[79,150272,149971],{"class":239},[79,150274,149749],{"class":89},[79,150276,1243],{"class":239},[79,150278,150279,150282,150284],{"class":81,"line":532},[79,150280,150281],{"class":239},"    sales.append(",[79,150283,2390],{"class":96},[79,150285,150286],{"class":239},"(value))\n",[79,150288,150289],{"class":81,"line":537},[79,150290,454],{"emptyLinePlaceholder":453},[79,150292,150293,150295],{"class":81,"line":543},[79,150294,32541],{"class":96},[79,150296,150297],{"class":239},"(dates)\n",[79,150299,150300,150302],{"class":81,"line":549},[79,150301,32541],{"class":96},[79,150303,150304],{"class":239},"(sales)\n",[14,150306,150308],{"id":150307},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[51,150310,150312],{"className":230,"code":150311,"language":232,"meta":57,"style":57},"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",[59,150313,150314,150328,150338,150342,150350,150371,150393,150415,150437,150459,150463,150467,150489,150510,150514,150522,150526,150530,150540,150549,150559,150575,150579,150583,150600,150616,150632,150648,150658,150662],{"__ignoreMap":57},[79,150315,150316,150318,150320,150322,150324,150326],{"class":81,"line":82},[79,150317,32862],{"class":243},[79,150319,149131],{"class":239},[79,150321,432],{"class":243},[79,150323,149136],{"class":239},[79,150325,445],{"class":243},[79,150327,149141],{"class":239},[79,150329,150330,150332,150334,150336],{"class":81,"line":167},[79,150331,32862],{"class":243},[79,150333,148990],{"class":239},[79,150335,432],{"class":243},[79,150337,148995],{"class":239},[79,150339,150340],{"class":81,"line":178},[79,150341,454],{"emptyLinePlaceholder":453},[79,150343,150344,150346,150348],{"class":81,"line":457},[79,150345,150217],{"class":239},[79,150347,244],{"class":243},[79,150349,57557],{"class":239},[79,150351,150352,150354,150356,150358,150361,150363,150365,150367,150369],{"class":81,"line":462},[79,150353,150137],{"class":239},[79,150355,149749],{"class":89},[79,150357,53550],{"class":239},[79,150359,150360],{"class":89},"\"2024-10-01\"",[79,150362,1060],{"class":239},[79,150364,86189],{"class":89},[79,150366,53550],{"class":239},[79,150368,94128],{"class":96},[79,150370,7128],{"class":239},[79,150372,150373,150375,150377,150379,150382,150384,150386,150388,150391],{"class":81,"line":474},[79,150374,150137],{"class":239},[79,150376,149749],{"class":89},[79,150378,53550],{"class":239},[79,150380,150381],{"class":89},"\"2024-10-02\"",[79,150383,1060],{"class":239},[79,150385,86189],{"class":89},[79,150387,53550],{"class":239},[79,150389,150390],{"class":96},"1800",[79,150392,7128],{"class":239},[79,150394,150395,150397,150399,150401,150404,150406,150408,150410,150413],{"class":81,"line":480},[79,150396,150137],{"class":239},[79,150398,149749],{"class":89},[79,150400,53550],{"class":239},[79,150402,150403],{"class":89},"\"2024-10-03\"",[79,150405,1060],{"class":239},[79,150407,86189],{"class":89},[79,150409,53550],{"class":239},[79,150411,150412],{"class":96},"1500",[79,150414,7128],{"class":239},[79,150416,150417,150419,150421,150423,150426,150428,150430,150432,150435],{"class":81,"line":486},[79,150418,150137],{"class":239},[79,150420,149749],{"class":89},[79,150422,53550],{"class":239},[79,150424,150425],{"class":89},"\"2024-10-04\"",[79,150427,1060],{"class":239},[79,150429,86189],{"class":89},[79,150431,53550],{"class":239},[79,150433,150434],{"class":96},"2100",[79,150436,7128],{"class":239},[79,150438,150439,150441,150443,150445,150448,150450,150452,150454,150457],{"class":81,"line":491},[79,150440,150137],{"class":239},[79,150442,149749],{"class":89},[79,150444,53550],{"class":239},[79,150446,150447],{"class":89},"\"2024-10-05\"",[79,150449,1060],{"class":239},[79,150451,86189],{"class":89},[79,150453,53550],{"class":239},[79,150455,150456],{"class":96},"2600",[79,150458,7128],{"class":239},[79,150460,150461],{"class":81,"line":497},[79,150462,35361],{"class":239},[79,150464,150465],{"class":81,"line":503},[79,150466,454],{"emptyLinePlaceholder":453},[79,150468,150469,150471,150473,150476,150478,150480,150482,150484,150486],{"class":81,"line":509},[79,150470,149552],{"class":239},[79,150472,244],{"class":243},[79,150474,150475],{"class":239}," [item[",[79,150477,149749],{"class":89},[79,150479,1033],{"class":239},[79,150481,1874],{"class":243},[79,150483,149961],{"class":239},[79,150485,955],{"class":243},[79,150487,150488],{"class":239}," sales]\n",[79,150490,150491,150494,150496,150498,150500,150502,150504,150506,150508],{"class":81,"line":514},[79,150492,150493],{"class":239},"amounts ",[79,150495,244],{"class":243},[79,150497,150475],{"class":239},[79,150499,86189],{"class":89},[79,150501,1033],{"class":239},[79,150503,1874],{"class":243},[79,150505,149961],{"class":239},[79,150507,955],{"class":243},[79,150509,150488],{"class":239},[79,150511,150512],{"class":81,"line":520},[79,150513,454],{"emptyLinePlaceholder":453},[79,150515,150516,150518,150520],{"class":81,"line":526},[79,150517,149004],{"class":239},[79,150519,244],{"class":243},[79,150521,149009],{"class":239},[79,150523,150524],{"class":81,"line":532},[79,150525,149593],{"class":239},[79,150527,150528],{"class":81,"line":537},[79,150529,149401],{"class":239},[79,150531,150532,150534,150536,150538],{"class":81,"line":543},[79,150533,149406],{"class":7412},[79,150535,244],{"class":243},[79,150537,149047],{"class":89},[79,150539,33585],{"class":239},[79,150541,150542,150544,150546],{"class":81,"line":549},[79,150543,149417],{"class":7412},[79,150545,244],{"class":243},[79,150547,150548],{"class":239},"amounts,\n",[79,150550,150551,150553,150555,150557],{"class":81,"line":555},[79,150552,149446],{"class":7412},[79,150554,244],{"class":243},[79,150556,33595],{"class":96},[79,150558,33585],{"class":239},[79,150560,150561,150563,150565,150567,150569,150571,150573],{"class":81,"line":561},[79,150562,149457],{"class":7412},[79,150564,244],{"class":243},[79,150566,149462],{"class":239},[79,150568,149465],{"class":7412},[79,150570,244],{"class":243},[79,150572,33595],{"class":96},[79,150574,40161],{"class":239},[79,150576,150577],{"class":81,"line":567},[79,150578,253],{"class":239},[79,150580,150581],{"class":81,"line":573},[79,150582,149220],{"class":239},[79,150584,150585,150587,150589,150591,150593,150595,150598],{"class":81,"line":579},[79,150586,149225],{"class":7412},[79,150588,244],{"class":243},[79,150590,149230],{"class":239},[79,150592,53520],{"class":7412},[79,150594,244],{"class":243},[79,150596,150597],{"class":89},"\"每日销售额\"",[79,150599,40161],{"class":239},[79,150601,150602,150604,150606,150608,150610,150612,150614],{"class":81,"line":584},[79,150603,149244],{"class":7412},[79,150605,244],{"class":243},[79,150607,149249],{"class":239},[79,150609,697],{"class":7412},[79,150611,244],{"class":243},[79,150613,149256],{"class":89},[79,150615,40161],{"class":239},[79,150617,150618,150620,150622,150624,150626,150628,150630],{"class":81,"line":590},[79,150619,149263],{"class":7412},[79,150621,244],{"class":243},[79,150623,149249],{"class":239},[79,150625,697],{"class":7412},[79,150627,244],{"class":243},[79,150629,149274],{"class":89},[79,150631,40161],{"class":239},[79,150633,150634,150636,150638,150640,150642,150644,150646],{"class":81,"line":596},[79,150635,149281],{"class":7412},[79,150637,244],{"class":243},[79,150639,149286],{"class":239},[79,150641,149289],{"class":7412},[79,150643,244],{"class":243},[79,150645,149294],{"class":89},[79,150647,40161],{"class":239},[79,150649,150650,150653,150655],{"class":81,"line":602},[79,150651,150652],{"class":7412},"    datazoom_opts",[79,150654,244],{"class":243},[79,150656,150657],{"class":239},"[opts.DataZoomOpts()],\n",[79,150659,150660],{"class":81,"line":608},[79,150661,253],{"class":239},[79,150663,150664,150666,150669],{"class":81,"line":614},[79,150665,149076],{"class":239},[79,150667,150668],{"class":89},"\"daily_sales.html\"",[79,150670,253],{"class":239},[19,150672,150673,150676],{},[59,150674,150675],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150678,150680],{"id":150679},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150682,150683],{},"如果数据结构如下：",[51,150685,150687],{"className":230,"code":150686,"language":232,"meta":57,"style":57},"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",[59,150688,150689,150697,150705,150727,150748,150753,150760,150780,150800,150804],{"__ignoreMap":57},[79,150690,150691,150693,150695],{"class":81,"line":82},[79,150692,103716],{"class":239},[79,150694,244],{"class":243},[79,150696,17732],{"class":239},[79,150698,150699,150702],{"class":81,"line":167},[79,150700,150701],{"class":89},"    \"北京\"",[79,150703,150704],{"class":239},": [\n",[79,150706,150707,150709,150711,150713,150716,150718,150721,150723,150725],{"class":81,"line":178},[79,150708,7115],{"class":239},[79,150710,149749],{"class":89},[79,150712,53550],{"class":239},[79,150714,150715],{"class":89},"\"2024-01-01\"",[79,150717,1060],{"class":239},[79,150719,150720],{"class":89},"\"confirm\"",[79,150722,53550],{"class":239},[79,150724,2820],{"class":96},[79,150726,7128],{"class":239},[79,150728,150729,150731,150733,150735,150738,150740,150742,150744,150746],{"class":81,"line":457},[79,150730,7115],{"class":239},[79,150732,149749],{"class":89},[79,150734,53550],{"class":239},[79,150736,150737],{"class":89},"\"2024-01-02\"",[79,150739,1060],{"class":239},[79,150741,150720],{"class":89},[79,150743,53550],{"class":239},[79,150745,2872],{"class":96},[79,150747,7128],{"class":239},[79,150749,150750],{"class":81,"line":462},[79,150751,150752],{"class":239},"    ],\n",[79,150754,150755,150758],{"class":81,"line":474},[79,150756,150757],{"class":89},"    \"上海\"",[79,150759,150704],{"class":239},[79,150761,150762,150764,150766,150768,150770,150772,150774,150776,150778],{"class":81,"line":480},[79,150763,7115],{"class":239},[79,150765,149749],{"class":89},[79,150767,53550],{"class":239},[79,150769,150715],{"class":89},[79,150771,1060],{"class":239},[79,150773,150720],{"class":89},[79,150775,53550],{"class":239},[79,150777,2769],{"class":96},[79,150779,7128],{"class":239},[79,150781,150782,150784,150786,150788,150790,150792,150794,150796,150798],{"class":81,"line":486},[79,150783,7115],{"class":239},[79,150785,149749],{"class":89},[79,150787,53550],{"class":239},[79,150789,150737],{"class":89},[79,150791,1060],{"class":239},[79,150793,150720],{"class":89},[79,150795,53550],{"class":239},[79,150797,2897],{"class":96},[79,150799,7128],{"class":239},[79,150801,150802],{"class":81,"line":491},[79,150803,150752],{"class":239},[79,150805,150806],{"class":81,"line":497},[79,150807,3801],{"class":239},[19,150809,150810],{},"绘制多地区趋势：",[51,150812,150814],{"className":230,"code":150813,"language":232,"meta":57,"style":57},"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",[59,150815,150816,150830,150840,150844,150869,150873,150881,150885,150889,150901,150923,150936,150940,150944,150961,150977,150981],{"__ignoreMap":57},[79,150817,150818,150820,150822,150824,150826,150828],{"class":81,"line":82},[79,150819,32862],{"class":243},[79,150821,149131],{"class":239},[79,150823,432],{"class":243},[79,150825,149136],{"class":239},[79,150827,445],{"class":243},[79,150829,149141],{"class":239},[79,150831,150832,150834,150836,150838],{"class":81,"line":167},[79,150833,32862],{"class":243},[79,150835,148990],{"class":239},[79,150837,432],{"class":243},[79,150839,148995],{"class":239},[79,150841,150842],{"class":81,"line":178},[79,150843,454],{"emptyLinePlaceholder":453},[79,150845,150846,150848,150850,150852,150854,150856,150858,150860,150862,150865,150867],{"class":81,"line":457},[79,150847,149552],{"class":239},[79,150849,244],{"class":243},[79,150851,150475],{"class":239},[79,150853,149749],{"class":89},[79,150855,1033],{"class":239},[79,150857,1874],{"class":243},[79,150859,149961],{"class":239},[79,150861,955],{"class":243},[79,150863,150864],{"class":239}," data[",[79,150866,71377],{"class":89},[79,150868,79635],{"class":239},[79,150870,150871],{"class":81,"line":462},[79,150872,454],{"emptyLinePlaceholder":453},[79,150874,150875,150877,150879],{"class":81,"line":474},[79,150876,149004],{"class":239},[79,150878,244],{"class":243},[79,150880,149009],{"class":239},[79,150882,150883],{"class":81,"line":480},[79,150884,149593],{"class":239},[79,150886,150887],{"class":81,"line":486},[79,150888,454],{"emptyLinePlaceholder":453},[79,150890,150891,150893,150896,150898],{"class":81,"line":491},[79,150892,1874],{"class":243},[79,150894,150895],{"class":239}," city, records ",[79,150897,955],{"class":243},[79,150899,150900],{"class":239}," data.items():\n",[79,150902,150903,150906,150908,150910,150912,150914,150916,150918,150920],{"class":81,"line":497},[79,150904,150905],{"class":239},"    values ",[79,150907,244],{"class":243},[79,150909,150475],{"class":239},[79,150911,150720],{"class":89},[79,150913,1033],{"class":239},[79,150915,1874],{"class":243},[79,150917,149961],{"class":239},[79,150919,955],{"class":243},[79,150921,150922],{"class":239}," records]\n",[79,150924,150925,150928,150930,150932,150934],{"class":81,"line":503},[79,150926,150927],{"class":239},"    line.add_yaxis(city, values, ",[79,150929,149497],{"class":7412},[79,150931,244],{"class":243},[79,150933,33595],{"class":96},[79,150935,253],{"class":239},[79,150937,150938],{"class":81,"line":509},[79,150939,454],{"emptyLinePlaceholder":453},[79,150941,150942],{"class":81,"line":514},[79,150943,149220],{"class":239},[79,150945,150946,150948,150950,150952,150954,150956,150959],{"class":81,"line":520},[79,150947,149225],{"class":7412},[79,150949,244],{"class":243},[79,150951,149230],{"class":239},[79,150953,53520],{"class":7412},[79,150955,244],{"class":243},[79,150957,150958],{"class":89},"\"多地区趋势图\"",[79,150960,40161],{"class":239},[79,150962,150963,150965,150967,150969,150971,150973,150975],{"class":81,"line":526},[79,150964,149281],{"class":7412},[79,150966,244],{"class":243},[79,150968,149286],{"class":239},[79,150970,149289],{"class":7412},[79,150972,244],{"class":243},[79,150974,149294],{"class":89},[79,150976,40161],{"class":239},[79,150978,150979],{"class":81,"line":532},[79,150980,253],{"class":239},[79,150982,150983,150985,150988],{"class":81,"line":537},[79,150984,149076],{"class":239},[79,150986,150987],{"class":89},"\"trend.html\"",[79,150989,253],{"class":239},[19,150991,150992],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150994,150996],{"id":150995},"_1012-易错点","10.12 易错点",[26,150998,150999,151005,151011,151021,151027],{},[29,151000,151001,151004],{},[59,151002,151003],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[29,151006,151007,151010],{},[59,151008,151009],{},"render()"," 生成的是 HTML，不是图片。",[29,151012,151013,151014,151017,151018,1604],{},"JSON 字符串用 ",[59,151015,151016],{},"json.loads()","，JSON 文件用 ",[59,151019,151020],{},"json.load()",[29,151022,151023,151024,1604],{},"中文 JSON 保存时加 ",[59,151025,151026],{},"ensure_ascii=False",[29,151028,151029],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,151031,151033],{"id":151032},"_1013-本章练习","10.13 本章练习",[26,151035,151036,151039,151042,151045,151048],{},[29,151037,151038],{},"安装 pyecharts 并生成第一个折线图。",[29,151040,151041],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[29,151043,151044],{},"绘制两条折线，对比线上和线下销售额。",[29,151046,151047],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[29,151049,151050],{},"对含有空值的销售数据进行清洗后再绘图。",[2287,151052,151053],{},"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":57,"searchDepth":167,"depth":167,"links":151055},[151056,151057,151058,151059,151060,151061,151062,151063,151064,151065,151066,151067,151068],{"id":148672,"depth":167,"text":148673},{"id":148747,"depth":167,"text":148748},{"id":148926,"depth":167,"text":148927},{"id":148977,"depth":167,"text":148978},{"id":149111,"depth":167,"text":149112},{"id":149387,"depth":167,"text":149388},{"id":149513,"depth":167,"text":149514},{"id":149724,"depth":167,"text":149725},{"id":150095,"depth":167,"text":150096},{"id":150307,"depth":167,"text":150308},{"id":150679,"depth":167,"text":150680},{"id":150995,"depth":167,"text":150996},{"id":151032,"depth":167,"text":151033},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148664,"description":25516},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":151075,"title":151076,"body":151077,"description":25516,"extension":2314,"meta":153437,"navigation":453,"path":153438,"seo":153439,"stem":153440,"__hash__":153441},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":151078,"toc":153414},[151079,151082,151086,151089,151092,151168,151171,151262,151265,151269,151272,151316,151329,151333,151336,151403,151406,151410,151413,151497,151505,151509,151514,151655,151658,151669,151675,151681,151795,151799,151802,151805,152058,152061,152065,152068,152172,152175,152179,152330,152334,152341,152454,152458,152461,152567,152570,152574,152577,152608,152611,152716,152719,152723,152727,152737,152805,152809,152816,152880,152883,152887,152893,152989,152998,153002,153326,153335,153339,153367,153371,153411],[10,151080,151076],{"id":151081},"_11-面向对象基础",[14,151083,151085],{"id":151084},"_111-什么是面向对象","11.1 什么是面向对象",[19,151087,151088],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,151090,151091],{},"面向过程：",[51,151093,151095],{"className":230,"code":151094,"language":232,"meta":57,"style":57},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[59,151096,151097,151106,151114,151118,151128,151159,151163],{"__ignoreMap":57},[79,151098,151099,151101,151103],{"class":81,"line":82},[79,151100,148288],{"class":239},[79,151102,244],{"class":243},[79,151104,151105],{"class":89}," \"小明\"\n",[79,151107,151108,151110,151112],{"class":81,"line":167},[79,151109,148298],{"class":239},[79,151111,244],{"class":243},[79,151113,148303],{"class":96},[79,151115,151116],{"class":81,"line":178},[79,151117,454],{"emptyLinePlaceholder":453},[79,151119,151120,151122,151125],{"class":81,"line":457},[79,151121,633],{"class":243},[79,151123,151124],{"class":85}," introduce",[79,151126,151127],{"class":239},"(name, age):\n",[79,151129,151130,151132,151134,151136,151139,151141,151143,151145,151148,151150,151152,151154,151157],{"class":81,"line":462},[79,151131,1254],{"class":96},[79,151133,685],{"class":239},[79,151135,688],{"class":243},[79,151137,151138],{"class":89},"\"我叫",[79,151140,694],{"class":96},[79,151142,697],{"class":239},[79,151144,700],{"class":96},[79,151146,151147],{"class":89},"，今年",[79,151149,694],{"class":96},[79,151151,72329],{"class":239},[79,151153,700],{"class":96},[79,151155,151156],{"class":89},"岁\"",[79,151158,253],{"class":239},[79,151160,151161],{"class":81,"line":474},[79,151162,454],{"emptyLinePlaceholder":453},[79,151164,151165],{"class":81,"line":480},[79,151166,151167],{"class":239},"introduce(name, age)\n",[19,151169,151170],{},"面向对象：",[51,151172,151174],{"className":230,"code":151173,"language":232,"meta":57,"style":57},"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",[59,151175,151176,151184,151192,151221,151225,151229,151239,151248,151257],{"__ignoreMap":57},[79,151177,151178,151180,151182],{"class":81,"line":82},[79,151179,16855],{"class":243},[79,151181,10092],{"class":85},[79,151183,673],{"class":239},[79,151185,151186,151188,151190],{"class":81,"line":167},[79,151187,32925],{"class":243},[79,151189,151124],{"class":85},[79,151191,32931],{"class":239},[79,151193,151194,151196,151198,151200,151202,151205,151207,151209,151211,151213,151215,151217,151219],{"class":81,"line":178},[79,151195,34566],{"class":96},[79,151197,685],{"class":239},[79,151199,688],{"class":243},[79,151201,151138],{"class":89},[79,151203,151204],{"class":96},"{self",[79,151206,82408],{"class":239},[79,151208,700],{"class":96},[79,151210,151147],{"class":89},[79,151212,151204],{"class":96},[79,151214,82420],{"class":239},[79,151216,700],{"class":96},[79,151218,151156],{"class":89},[79,151220,253],{"class":239},[79,151222,151223],{"class":81,"line":457},[79,151224,454],{"emptyLinePlaceholder":453},[79,151226,151227],{"class":81,"line":462},[79,151228,454],{"emptyLinePlaceholder":453},[79,151230,151231,151234,151236],{"class":81,"line":474},[79,151232,151233],{"class":239},"student ",[79,151235,244],{"class":243},[79,151237,151238],{"class":239}," Student()\n",[79,151240,151241,151244,151246],{"class":81,"line":480},[79,151242,151243],{"class":239},"student.name ",[79,151245,244],{"class":243},[79,151247,151105],{"class":89},[79,151249,151250,151253,151255],{"class":81,"line":486},[79,151251,151252],{"class":239},"student.age ",[79,151254,244],{"class":243},[79,151256,148303],{"class":96},[79,151258,151259],{"class":81,"line":491},[79,151260,151261],{"class":239},"student.introduce()\n",[19,151263,151264],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151266,151268],{"id":151267},"_112-类和对象","11.2 类和对象",[19,151270,151271],{},"类是模板，对象是根据模板创建出来的具体实例。",[51,151273,151275],{"className":230,"code":151274,"language":232,"meta":57,"style":57},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[59,151276,151277,151285,151290,151294,151298,151307],{"__ignoreMap":57},[79,151278,151279,151281,151283],{"class":81,"line":82},[79,151280,16855],{"class":243},[79,151282,10092],{"class":85},[79,151284,673],{"class":239},[79,151286,151287],{"class":81,"line":167},[79,151288,151289],{"class":243},"    pass\n",[79,151291,151292],{"class":81,"line":178},[79,151293,454],{"emptyLinePlaceholder":453},[79,151295,151296],{"class":81,"line":457},[79,151297,454],{"emptyLinePlaceholder":453},[79,151299,151300,151303,151305],{"class":81,"line":462},[79,151301,151302],{"class":239},"student1 ",[79,151304,244],{"class":243},[79,151306,151238],{"class":239},[79,151308,151309,151312,151314],{"class":81,"line":474},[79,151310,151311],{"class":239},"student2 ",[79,151313,244],{"class":243},[79,151315,151238],{"class":239},[19,151317,151318,151321,151322,1905,151325,151328],{},[59,151319,151320],{},"Student"," 是类，",[59,151323,151324],{},"student1",[59,151326,151327],{},"student2"," 是对象。",[14,151330,151332],{"id":151331},"_113-属性","11.3 属性",[19,151334,151335],{},"属性是对象保存的数据。",[51,151337,151339],{"className":230,"code":151338,"language":232,"meta":57,"style":57},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[59,151340,151341,151349,151353,151357,151361,151369,151377,151385,151389,151396],{"__ignoreMap":57},[79,151342,151343,151345,151347],{"class":81,"line":82},[79,151344,16855],{"class":243},[79,151346,10092],{"class":85},[79,151348,673],{"class":239},[79,151350,151351],{"class":81,"line":167},[79,151352,151289],{"class":243},[79,151354,151355],{"class":81,"line":178},[79,151356,454],{"emptyLinePlaceholder":453},[79,151358,151359],{"class":81,"line":457},[79,151360,454],{"emptyLinePlaceholder":453},[79,151362,151363,151365,151367],{"class":81,"line":462},[79,151364,151233],{"class":239},[79,151366,244],{"class":243},[79,151368,151238],{"class":239},[79,151370,151371,151373,151375],{"class":81,"line":474},[79,151372,151243],{"class":239},[79,151374,244],{"class":243},[79,151376,151105],{"class":89},[79,151378,151379,151381,151383],{"class":81,"line":480},[79,151380,151252],{"class":239},[79,151382,244],{"class":243},[79,151384,148303],{"class":96},[79,151386,151387],{"class":81,"line":486},[79,151388,454],{"emptyLinePlaceholder":453},[79,151390,151391,151393],{"class":81,"line":491},[79,151392,32541],{"class":96},[79,151394,151395],{"class":239},"(student.name)\n",[79,151397,151398,151400],{"class":81,"line":497},[79,151399,32541],{"class":96},[79,151401,151402],{"class":239},"(student.age)\n",[19,151404,151405],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151407,151409],{"id":151408},"_114-方法","11.4 方法",[19,151411,151412],{},"类中的函数叫方法。",[51,151414,151415],{"className":230,"code":151173,"language":232,"meta":57,"style":57},[59,151416,151417,151425,151433,151461,151465,151469,151477,151485,151493],{"__ignoreMap":57},[79,151418,151419,151421,151423],{"class":81,"line":82},[79,151420,16855],{"class":243},[79,151422,10092],{"class":85},[79,151424,673],{"class":239},[79,151426,151427,151429,151431],{"class":81,"line":167},[79,151428,32925],{"class":243},[79,151430,151124],{"class":85},[79,151432,32931],{"class":239},[79,151434,151435,151437,151439,151441,151443,151445,151447,151449,151451,151453,151455,151457,151459],{"class":81,"line":178},[79,151436,34566],{"class":96},[79,151438,685],{"class":239},[79,151440,688],{"class":243},[79,151442,151138],{"class":89},[79,151444,151204],{"class":96},[79,151446,82408],{"class":239},[79,151448,700],{"class":96},[79,151450,151147],{"class":89},[79,151452,151204],{"class":96},[79,151454,82420],{"class":239},[79,151456,700],{"class":96},[79,151458,151156],{"class":89},[79,151460,253],{"class":239},[79,151462,151463],{"class":81,"line":457},[79,151464,454],{"emptyLinePlaceholder":453},[79,151466,151467],{"class":81,"line":462},[79,151468,454],{"emptyLinePlaceholder":453},[79,151470,151471,151473,151475],{"class":81,"line":474},[79,151472,151233],{"class":239},[79,151474,244],{"class":243},[79,151476,151238],{"class":239},[79,151478,151479,151481,151483],{"class":81,"line":480},[79,151480,151243],{"class":239},[79,151482,244],{"class":243},[79,151484,151105],{"class":89},[79,151486,151487,151489,151491],{"class":81,"line":486},[79,151488,151252],{"class":239},[79,151490,244],{"class":243},[79,151492,148303],{"class":96},[79,151494,151495],{"class":81,"line":491},[79,151496,151261],{"class":239},[19,151498,151499,151501,151502,151504],{},[59,151500,32947],{}," 表示当前对象。调用方法时不需要手动传入 ",[59,151503,32947],{},"，Python 会自动传。",[14,151506,151508],{"id":151507},"_115-构造方法__init__","11.5 构造方法__init__",[19,151510,151511,151513],{},[59,151512,32953],{}," 在对象创建时自动执行，用于初始化属性。",[51,151515,151517],{"className":230,"code":151516,"language":232,"meta":57,"style":57},"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",[59,151518,151519,151527,151536,151548,151560,151571,151575,151583,151621,151625,151629,151651],{"__ignoreMap":57},[79,151520,151521,151523,151525],{"class":81,"line":82},[79,151522,16855],{"class":243},[79,151524,10092],{"class":85},[79,151526,673],{"class":239},[79,151528,151529,151531,151533],{"class":81,"line":167},[79,151530,32925],{"class":243},[79,151532,32928],{"class":96},[79,151534,151535],{"class":239},"(self, name, age, score):\n",[79,151537,151538,151540,151543,151545],{"class":81,"line":178},[79,151539,32969],{"class":96},[79,151541,151542],{"class":239},".name ",[79,151544,244],{"class":243},[79,151546,151547],{"class":239}," name\n",[79,151549,151550,151552,151555,151557],{"class":81,"line":457},[79,151551,32969],{"class":96},[79,151553,151554],{"class":239},".age ",[79,151556,244],{"class":243},[79,151558,151559],{"class":239}," age\n",[79,151561,151562,151564,151567,151569],{"class":81,"line":462},[79,151563,32969],{"class":96},[79,151565,151566],{"class":239},".score ",[79,151568,244],{"class":243},[79,151570,3815],{"class":239},[79,151572,151573],{"class":81,"line":474},[79,151574,454],{"emptyLinePlaceholder":453},[79,151576,151577,151579,151581],{"class":81,"line":480},[79,151578,32925],{"class":243},[79,151580,151124],{"class":85},[79,151582,32931],{"class":239},[79,151584,151585,151587,151589,151591,151593,151595,151597,151599,151601,151603,151605,151607,151610,151612,151615,151617,151619],{"class":81,"line":486},[79,151586,34566],{"class":96},[79,151588,685],{"class":239},[79,151590,688],{"class":243},[79,151592,151138],{"class":89},[79,151594,151204],{"class":96},[79,151596,82408],{"class":239},[79,151598,700],{"class":96},[79,151600,151147],{"class":89},[79,151602,151204],{"class":96},[79,151604,82420],{"class":239},[79,151606,700],{"class":96},[79,151608,151609],{"class":89},"岁，成绩",[79,151611,151204],{"class":96},[79,151613,151614],{"class":239},".score",[79,151616,700],{"class":96},[79,151618,703],{"class":89},[79,151620,253],{"class":239},[79,151622,151623],{"class":81,"line":491},[79,151624,454],{"emptyLinePlaceholder":453},[79,151626,151627],{"class":81,"line":497},[79,151628,454],{"emptyLinePlaceholder":453},[79,151630,151631,151633,151635,151638,151641,151643,151645,151647,151649],{"class":81,"line":503},[79,151632,151233],{"class":239},[79,151634,244],{"class":243},[79,151636,151637],{"class":239}," Student(",[79,151639,151640],{"class":89},"\"小明\"",[79,151642,1060],{"class":239},[79,151644,3023],{"class":96},[79,151646,1060],{"class":239},[79,151648,3359],{"class":96},[79,151650,253],{"class":239},[79,151652,151653],{"class":81,"line":509},[79,151654,151261],{"class":239},[19,151656,151657],{},"构造方法的好处：",[26,151659,151660,151663,151666],{},[29,151661,151662],{},"创建对象时必须提供必要数据。",[29,151664,151665],{},"属性初始化集中，不容易漏。",[29,151667,151668],{},"对象状态更完整。",[14,151670,151672,151673],{"id":151671},"_116-str","11.6 ",[2528,151674,642],{},[19,151676,151677,151678,1604],{},"直接打印对象时，默认输出不直观。可以定义 ",[59,151679,151680],{},"__str__",[51,151682,151684],{"className":230,"code":151683,"language":232,"meta":57,"style":57},"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",[59,151685,151686,151694,151703,151713,151723,151727,151736,151764,151768,151772,151788],{"__ignoreMap":57},[79,151687,151688,151690,151692],{"class":81,"line":82},[79,151689,16855],{"class":243},[79,151691,10092],{"class":85},[79,151693,673],{"class":239},[79,151695,151696,151698,151700],{"class":81,"line":167},[79,151697,32925],{"class":243},[79,151699,32928],{"class":96},[79,151701,151702],{"class":239},"(self, name, age):\n",[79,151704,151705,151707,151709,151711],{"class":81,"line":178},[79,151706,32969],{"class":96},[79,151708,151542],{"class":239},[79,151710,244],{"class":243},[79,151712,151547],{"class":239},[79,151714,151715,151717,151719,151721],{"class":81,"line":457},[79,151716,32969],{"class":96},[79,151718,151554],{"class":239},[79,151720,244],{"class":243},[79,151722,151559],{"class":239},[79,151724,151725],{"class":81,"line":462},[79,151726,454],{"emptyLinePlaceholder":453},[79,151728,151729,151731,151734],{"class":81,"line":474},[79,151730,32925],{"class":243},[79,151732,151733],{"class":96}," __str__",[79,151735,32931],{"class":239},[79,151737,151738,151740,151743,151746,151748,151750,151752,151755,151757,151759,151761],{"class":81,"line":480},[79,151739,16913],{"class":243},[79,151741,151742],{"class":243}," f",[79,151744,151745],{"class":89},"\"Student(name=",[79,151747,151204],{"class":96},[79,151749,82408],{"class":239},[79,151751,700],{"class":96},[79,151753,151754],{"class":89},", age=",[79,151756,151204],{"class":96},[79,151758,82420],{"class":239},[79,151760,700],{"class":96},[79,151762,151763],{"class":89},")\"\n",[79,151765,151766],{"class":81,"line":486},[79,151767,454],{"emptyLinePlaceholder":453},[79,151769,151770],{"class":81,"line":491},[79,151771,454],{"emptyLinePlaceholder":453},[79,151773,151774,151776,151778,151780,151782,151784,151786],{"class":81,"line":497},[79,151775,151233],{"class":239},[79,151777,244],{"class":243},[79,151779,151637],{"class":239},[79,151781,151640],{"class":89},[79,151783,1060],{"class":239},[79,151785,3023],{"class":96},[79,151787,253],{"class":239},[79,151789,151790,151792],{"class":81,"line":503},[79,151791,32541],{"class":96},[79,151793,151794],{"class":239},"(student)\n",[14,151796,151798],{"id":151797},"_117-封装","11.7 封装",[19,151800,151801],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151803,151804],{},"Python 中以双下划线开头的属性通常视为私有属性。",[51,151806,151808],{"className":230,"code":151807,"language":232,"meta":57,"style":57},"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",[59,151809,151810,151819,151828,151840,151852,151856,151865,151874,151878,151888,151901,151912,151917,151928,151932,151941,151953,151964,151968,151981,151992,151996,152007,152011,152015,152033,152042,152051],{"__ignoreMap":57},[79,151811,151812,151814,151817],{"class":81,"line":82},[79,151813,16855],{"class":243},[79,151815,151816],{"class":85}," Account",[79,151818,673],{"class":239},[79,151820,151821,151823,151825],{"class":81,"line":167},[79,151822,32925],{"class":243},[79,151824,32928],{"class":96},[79,151826,151827],{"class":239},"(self, owner, balance):\n",[79,151829,151830,151832,151835,151837],{"class":81,"line":178},[79,151831,32969],{"class":96},[79,151833,151834],{"class":239},".owner ",[79,151836,244],{"class":243},[79,151838,151839],{"class":239}," owner\n",[79,151841,151842,151844,151847,151849],{"class":81,"line":457},[79,151843,32969],{"class":96},[79,151845,151846],{"class":239},".__balance ",[79,151848,244],{"class":243},[79,151850,151851],{"class":239}," balance\n",[79,151853,151854],{"class":81,"line":462},[79,151855,454],{"emptyLinePlaceholder":453},[79,151857,151858,151860,151863],{"class":81,"line":474},[79,151859,32925],{"class":243},[79,151861,151862],{"class":85}," get_balance",[79,151864,32931],{"class":239},[79,151866,151867,151869,151871],{"class":81,"line":480},[79,151868,16913],{"class":243},[79,151870,40987],{"class":96},[79,151872,151873],{"class":239},".__balance\n",[79,151875,151876],{"class":81,"line":486},[79,151877,454],{"emptyLinePlaceholder":453},[79,151879,151880,151882,151885],{"class":81,"line":491},[79,151881,32925],{"class":243},[79,151883,151884],{"class":85}," deposit",[79,151886,151887],{"class":239},"(self, money):\n",[79,151889,151890,151892,151895,151897,151899],{"class":81,"line":497},[79,151891,1132],{"class":243},[79,151893,151894],{"class":239}," money ",[79,151896,3824],{"class":243},[79,151898,670],{"class":96},[79,151900,673],{"class":239},[79,151902,151903,151905,151907,151910],{"class":81,"line":503},[79,151904,1164],{"class":96},[79,151906,685],{"class":239},[79,151908,151909],{"class":89},"\"存款金额必须大于0\"",[79,151911,253],{"class":239},[79,151913,151914],{"class":81,"line":509},[79,151915,151916],{"class":243},"            return\n",[79,151918,151919,151921,151923,151925],{"class":81,"line":514},[79,151920,32969],{"class":96},[79,151922,151846],{"class":239},[79,151924,1118],{"class":243},[79,151926,151927],{"class":239}," money\n",[79,151929,151930],{"class":81,"line":520},[79,151931,454],{"emptyLinePlaceholder":453},[79,151933,151934,151936,151939],{"class":81,"line":526},[79,151935,32925],{"class":243},[79,151937,151938],{"class":85}," withdraw",[79,151940,151887],{"class":239},[79,151942,151943,151945,151947,151949,151951],{"class":81,"line":532},[79,151944,1132],{"class":243},[79,151946,151894],{"class":239},[79,151948,3824],{"class":243},[79,151950,670],{"class":96},[79,151952,673],{"class":239},[79,151954,151955,151957,151959,151962],{"class":81,"line":537},[79,151956,1164],{"class":96},[79,151958,685],{"class":239},[79,151960,151961],{"class":89},"\"取款金额必须大于0\"",[79,151963,253],{"class":239},[79,151965,151966],{"class":81,"line":543},[79,151967,151916],{"class":243},[79,151969,151970,151972,151974,151976,151978],{"class":81,"line":549},[79,151971,1132],{"class":243},[79,151973,151894],{"class":239},[79,151975,3330],{"class":243},[79,151977,40987],{"class":96},[79,151979,151980],{"class":239},".__balance:\n",[79,151982,151983,151985,151987,151990],{"class":81,"line":555},[79,151984,1164],{"class":96},[79,151986,685],{"class":239},[79,151988,151989],{"class":89},"\"余额不足\"",[79,151991,253],{"class":239},[79,151993,151994],{"class":81,"line":561},[79,151995,151916],{"class":243},[79,151997,151998,152000,152002,152005],{"class":81,"line":567},[79,151999,32969],{"class":96},[79,152001,151846],{"class":239},[79,152003,152004],{"class":243},"-=",[79,152006,151927],{"class":239},[79,152008,152009],{"class":81,"line":573},[79,152010,454],{"emptyLinePlaceholder":453},[79,152012,152013],{"class":81,"line":579},[79,152014,454],{"emptyLinePlaceholder":453},[79,152016,152017,152020,152022,152025,152027,152029,152031],{"class":81,"line":584},[79,152018,152019],{"class":239},"account ",[79,152021,244],{"class":243},[79,152023,152024],{"class":239}," Account(",[79,152026,151640],{"class":89},[79,152028,1060],{"class":239},[79,152030,8605],{"class":96},[79,152032,253],{"class":239},[79,152034,152035,152038,152040],{"class":81,"line":590},[79,152036,152037],{"class":239},"account.deposit(",[79,152039,3947],{"class":96},[79,152041,253],{"class":239},[79,152043,152044,152047,152049],{"class":81,"line":596},[79,152045,152046],{"class":239},"account.withdraw(",[79,152048,2686],{"class":96},[79,152050,253],{"class":239},[79,152052,152053,152055],{"class":81,"line":602},[79,152054,32541],{"class":96},[79,152056,152057],{"class":239},"(account.get_balance())\n",[19,152059,152060],{},"封装的意义是避免外部随意修改内部状态。",[14,152062,152064],{"id":152063},"_118-继承","11.8 继承",[19,152066,152067],{},"继承可以让子类复用父类的属性和方法。",[51,152069,152071],{"className":230,"code":152070,"language":232,"meta":57,"style":57},"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",[59,152072,152073,152082,152091,152102,152106,152110,152124,152133,152144,152148,152152,152162,152167],{"__ignoreMap":57},[79,152074,152075,152077,152080],{"class":81,"line":82},[79,152076,16855],{"class":243},[79,152078,152079],{"class":85}," Animal",[79,152081,673],{"class":239},[79,152083,152084,152086,152089],{"class":81,"line":167},[79,152085,32925],{"class":243},[79,152087,152088],{"class":85}," eat",[79,152090,32931],{"class":239},[79,152092,152093,152095,152097,152100],{"class":81,"line":178},[79,152094,34566],{"class":96},[79,152096,685],{"class":239},[79,152098,152099],{"class":89},"\"吃东西\"",[79,152101,253],{"class":239},[79,152103,152104],{"class":81,"line":457},[79,152105,454],{"emptyLinePlaceholder":453},[79,152107,152108],{"class":81,"line":462},[79,152109,454],{"emptyLinePlaceholder":453},[79,152111,152112,152114,152117,152119,152122],{"class":81,"line":474},[79,152113,16855],{"class":243},[79,152115,152116],{"class":85}," Dog",[79,152118,685],{"class":239},[79,152120,152121],{"class":85},"Animal",[79,152123,966],{"class":239},[79,152125,152126,152128,152131],{"class":81,"line":480},[79,152127,32925],{"class":243},[79,152129,152130],{"class":85}," bark",[79,152132,32931],{"class":239},[79,152134,152135,152137,152139,152142],{"class":81,"line":486},[79,152136,34566],{"class":96},[79,152138,685],{"class":239},[79,152140,152141],{"class":89},"\"汪汪\"",[79,152143,253],{"class":239},[79,152145,152146],{"class":81,"line":491},[79,152147,454],{"emptyLinePlaceholder":453},[79,152149,152150],{"class":81,"line":497},[79,152151,454],{"emptyLinePlaceholder":453},[79,152153,152154,152157,152159],{"class":81,"line":503},[79,152155,152156],{"class":239},"dog ",[79,152158,244],{"class":243},[79,152160,152161],{"class":239}," Dog()\n",[79,152163,152164],{"class":81,"line":509},[79,152165,152166],{"class":239},"dog.eat()\n",[79,152168,152169],{"class":81,"line":514},[79,152170,152171],{"class":239},"dog.bark()\n",[19,152173,152174],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152176,152178],{"id":152177},"_119-方法重写","11.9 方法重写",[51,152180,152182],{"className":230,"code":152181,"language":232,"meta":57,"style":57},"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",[59,152183,152184,152192,152201,152212,152216,152220,152232,152240,152250,152254,152258,152271,152279,152290,152294,152298,152306,152316,152320,152325],{"__ignoreMap":57},[79,152185,152186,152188,152190],{"class":81,"line":82},[79,152187,16855],{"class":243},[79,152189,152079],{"class":85},[79,152191,673],{"class":239},[79,152193,152194,152196,152199],{"class":81,"line":167},[79,152195,32925],{"class":243},[79,152197,152198],{"class":85}," speak",[79,152200,32931],{"class":239},[79,152202,152203,152205,152207,152210],{"class":81,"line":178},[79,152204,34566],{"class":96},[79,152206,685],{"class":239},[79,152208,152209],{"class":89},"\"动物叫\"",[79,152211,253],{"class":239},[79,152213,152214],{"class":81,"line":457},[79,152215,454],{"emptyLinePlaceholder":453},[79,152217,152218],{"class":81,"line":462},[79,152219,454],{"emptyLinePlaceholder":453},[79,152221,152222,152224,152226,152228,152230],{"class":81,"line":474},[79,152223,16855],{"class":243},[79,152225,152116],{"class":85},[79,152227,685],{"class":239},[79,152229,152121],{"class":85},[79,152231,966],{"class":239},[79,152233,152234,152236,152238],{"class":81,"line":480},[79,152235,32925],{"class":243},[79,152237,152198],{"class":85},[79,152239,32931],{"class":239},[79,152241,152242,152244,152246,152248],{"class":81,"line":486},[79,152243,34566],{"class":96},[79,152245,685],{"class":239},[79,152247,152141],{"class":89},[79,152249,253],{"class":239},[79,152251,152252],{"class":81,"line":491},[79,152253,454],{"emptyLinePlaceholder":453},[79,152255,152256],{"class":81,"line":497},[79,152257,454],{"emptyLinePlaceholder":453},[79,152259,152260,152262,152265,152267,152269],{"class":81,"line":503},[79,152261,16855],{"class":243},[79,152263,152264],{"class":85}," Cat",[79,152266,685],{"class":239},[79,152268,152121],{"class":85},[79,152270,966],{"class":239},[79,152272,152273,152275,152277],{"class":81,"line":509},[79,152274,32925],{"class":243},[79,152276,152198],{"class":85},[79,152278,32931],{"class":239},[79,152280,152281,152283,152285,152288],{"class":81,"line":514},[79,152282,34566],{"class":96},[79,152284,685],{"class":239},[79,152286,152287],{"class":89},"\"喵喵\"",[79,152289,253],{"class":239},[79,152291,152292],{"class":81,"line":520},[79,152293,454],{"emptyLinePlaceholder":453},[79,152295,152296],{"class":81,"line":526},[79,152297,454],{"emptyLinePlaceholder":453},[79,152299,152300,152302,152304],{"class":81,"line":532},[79,152301,152156],{"class":239},[79,152303,244],{"class":243},[79,152305,152161],{"class":239},[79,152307,152308,152311,152313],{"class":81,"line":537},[79,152309,152310],{"class":239},"cat ",[79,152312,244],{"class":243},[79,152314,152315],{"class":239}," Cat()\n",[79,152317,152318],{"class":81,"line":543},[79,152319,454],{"emptyLinePlaceholder":453},[79,152321,152322],{"class":81,"line":549},[79,152323,152324],{"class":239},"dog.speak()\n",[79,152326,152327],{"class":81,"line":555},[79,152328,152329],{"class":239},"cat.speak()\n",[14,152331,152333],{"id":152332},"_1110-super","11.10 super",[19,152335,152336,152337,152340],{},"子类可以通过 ",[59,152338,152339],{},"super()"," 调用父类方法。",[51,152342,152344],{"className":230,"code":152343,"language":232,"meta":57,"style":57},"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",[59,152345,152346,152354,152363,152373,152377,152381,152393,152402,152413,152423,152427,152431,152447],{"__ignoreMap":57},[79,152347,152348,152350,152352],{"class":81,"line":82},[79,152349,16855],{"class":243},[79,152351,17729],{"class":85},[79,152353,673],{"class":239},[79,152355,152356,152358,152360],{"class":81,"line":167},[79,152357,32925],{"class":243},[79,152359,32928],{"class":96},[79,152361,152362],{"class":239},"(self, name):\n",[79,152364,152365,152367,152369,152371],{"class":81,"line":178},[79,152366,32969],{"class":96},[79,152368,151542],{"class":239},[79,152370,244],{"class":243},[79,152372,151547],{"class":239},[79,152374,152375],{"class":81,"line":457},[79,152376,454],{"emptyLinePlaceholder":453},[79,152378,152379],{"class":81,"line":462},[79,152380,454],{"emptyLinePlaceholder":453},[79,152382,152383,152385,152387,152389,152391],{"class":81,"line":474},[79,152384,16855],{"class":243},[79,152386,10092],{"class":85},[79,152388,685],{"class":239},[79,152390,21185],{"class":85},[79,152392,966],{"class":239},[79,152394,152395,152397,152399],{"class":81,"line":480},[79,152396,32925],{"class":243},[79,152398,32928],{"class":96},[79,152400,152401],{"class":239},"(self, name, score):\n",[79,152403,152404,152406,152408,152410],{"class":81,"line":486},[79,152405,32941],{"class":96},[79,152407,19400],{"class":239},[79,152409,32953],{"class":96},[79,152411,152412],{"class":239},"(name)\n",[79,152414,152415,152417,152419,152421],{"class":81,"line":491},[79,152416,32969],{"class":96},[79,152418,151566],{"class":239},[79,152420,244],{"class":243},[79,152422,3815],{"class":239},[79,152424,152425],{"class":81,"line":497},[79,152426,454],{"emptyLinePlaceholder":453},[79,152428,152429],{"class":81,"line":503},[79,152430,454],{"emptyLinePlaceholder":453},[79,152432,152433,152435,152437,152439,152441,152443,152445],{"class":81,"line":509},[79,152434,151233],{"class":239},[79,152436,244],{"class":243},[79,152438,151637],{"class":239},[79,152440,151640],{"class":89},[79,152442,1060],{"class":239},[79,152444,3359],{"class":96},[79,152446,253],{"class":239},[79,152448,152449,152451],{"class":81,"line":514},[79,152450,32541],{"class":96},[79,152452,152453],{"class":239},"(student.name, student.score)\n",[14,152455,152457],{"id":152456},"_1111-多态","11.11 多态",[19,152459,152460],{},"多态指不同对象响应同一个方法，表现出不同结果。",[51,152462,152464],{"className":230,"code":152463,"language":232,"meta":57,"style":57},"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",[59,152465,152466,152474,152482,152492,152496,152500,152508,152516,152526,152530,152534,152544,152549,152553,152557,152562],{"__ignoreMap":57},[79,152467,152468,152470,152472],{"class":81,"line":82},[79,152469,16855],{"class":243},[79,152471,152116],{"class":85},[79,152473,673],{"class":239},[79,152475,152476,152478,152480],{"class":81,"line":167},[79,152477,32925],{"class":243},[79,152479,152198],{"class":85},[79,152481,32931],{"class":239},[79,152483,152484,152486,152488,152490],{"class":81,"line":178},[79,152485,34566],{"class":96},[79,152487,685],{"class":239},[79,152489,152141],{"class":89},[79,152491,253],{"class":239},[79,152493,152494],{"class":81,"line":457},[79,152495,454],{"emptyLinePlaceholder":453},[79,152497,152498],{"class":81,"line":462},[79,152499,454],{"emptyLinePlaceholder":453},[79,152501,152502,152504,152506],{"class":81,"line":474},[79,152503,16855],{"class":243},[79,152505,152264],{"class":85},[79,152507,673],{"class":239},[79,152509,152510,152512,152514],{"class":81,"line":480},[79,152511,32925],{"class":243},[79,152513,152198],{"class":85},[79,152515,32931],{"class":239},[79,152517,152518,152520,152522,152524],{"class":81,"line":486},[79,152519,34566],{"class":96},[79,152521,685],{"class":239},[79,152523,152287],{"class":89},[79,152525,253],{"class":239},[79,152527,152528],{"class":81,"line":491},[79,152529,454],{"emptyLinePlaceholder":453},[79,152531,152532],{"class":81,"line":497},[79,152533,454],{"emptyLinePlaceholder":453},[79,152535,152536,152538,152541],{"class":81,"line":503},[79,152537,633],{"class":243},[79,152539,152540],{"class":85}," make_sound",[79,152542,152543],{"class":239},"(animal):\n",[79,152545,152546],{"class":81,"line":509},[79,152547,152548],{"class":239},"    animal.speak()\n",[79,152550,152551],{"class":81,"line":514},[79,152552,454],{"emptyLinePlaceholder":453},[79,152554,152555],{"class":81,"line":520},[79,152556,454],{"emptyLinePlaceholder":453},[79,152558,152559],{"class":81,"line":526},[79,152560,152561],{"class":239},"make_sound(Dog())\n",[79,152563,152564],{"class":81,"line":532},[79,152565,152566],{"class":239},"make_sound(Cat())\n",[19,152568,152569],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152571,152573],{"id":152572},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152575,152576],{},"实例属性属于对象：",[51,152578,152580],{"className":230,"code":152579,"language":232,"meta":57,"style":57},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[59,152581,152582,152590,152598],{"__ignoreMap":57},[79,152583,152584,152586,152588],{"class":81,"line":82},[79,152585,16855],{"class":243},[79,152587,10092],{"class":85},[79,152589,673],{"class":239},[79,152591,152592,152594,152596],{"class":81,"line":167},[79,152593,32925],{"class":243},[79,152595,32928],{"class":96},[79,152597,152362],{"class":239},[79,152599,152600,152602,152604,152606],{"class":81,"line":178},[79,152601,32969],{"class":96},[79,152603,151542],{"class":239},[79,152605,244],{"class":243},[79,152607,151547],{"class":239},[19,152609,152610],{},"类属性属于类，所有对象共享：",[51,152612,152614],{"className":230,"code":152613,"language":232,"meta":57,"style":57},"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",[59,152615,152616,152624,152634,152638,152646,152656,152660,152664,152677,152691,152695,152702,152709],{"__ignoreMap":57},[79,152617,152618,152620,152622],{"class":81,"line":82},[79,152619,16855],{"class":243},[79,152621,10092],{"class":85},[79,152623,673],{"class":239},[79,152625,152626,152629,152631],{"class":81,"line":167},[79,152627,152628],{"class":239},"    school ",[79,152630,244],{"class":243},[79,152632,152633],{"class":89}," \"黑马学校\"\n",[79,152635,152636],{"class":81,"line":178},[79,152637,454],{"emptyLinePlaceholder":453},[79,152639,152640,152642,152644],{"class":81,"line":457},[79,152641,32925],{"class":243},[79,152643,32928],{"class":96},[79,152645,152362],{"class":239},[79,152647,152648,152650,152652,152654],{"class":81,"line":462},[79,152649,32969],{"class":96},[79,152651,151542],{"class":239},[79,152653,244],{"class":243},[79,152655,151547],{"class":239},[79,152657,152658],{"class":81,"line":474},[79,152659,454],{"emptyLinePlaceholder":453},[79,152661,152662],{"class":81,"line":480},[79,152663,454],{"emptyLinePlaceholder":453},[79,152665,152666,152669,152671,152673,152675],{"class":81,"line":486},[79,152667,152668],{"class":239},"s1 ",[79,152670,244],{"class":243},[79,152672,151637],{"class":239},[79,152674,151640],{"class":89},[79,152676,253],{"class":239},[79,152678,152679,152682,152684,152686,152689],{"class":81,"line":491},[79,152680,152681],{"class":239},"s2 ",[79,152683,244],{"class":243},[79,152685,151637],{"class":239},[79,152687,152688],{"class":89},"\"小红\"",[79,152690,253],{"class":239},[79,152692,152693],{"class":81,"line":497},[79,152694,454],{"emptyLinePlaceholder":453},[79,152696,152697,152699],{"class":81,"line":503},[79,152698,32541],{"class":96},[79,152700,152701],{"class":239},"(s1.school)\n",[79,152703,152704,152706],{"class":81,"line":509},[79,152705,32541],{"class":96},[79,152707,152708],{"class":239},"(s2.school)\n",[79,152710,152711,152713],{"class":81,"line":514},[79,152712,32541],{"class":96},[79,152714,152715],{"class":239},"(Student.school)\n",[19,152717,152718],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152720,152722],{"id":152721},"_1113-类方法和静态方法","11.13 类方法和静态方法",[265,152724,152726],{"id":152725},"_11131-类方法","11.13.1 类方法",[19,152728,152729,152730,152733,152734,1604],{},"类方法使用 ",[59,152731,152732],{},"@classmethod","，第一个参数通常是 ",[59,152735,152736],{},"cls",[51,152738,152740],{"className":230,"code":152739,"language":232,"meta":57,"style":57},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[59,152741,152742,152750,152758,152762,152770,152780,152790,152794,152798],{"__ignoreMap":57},[79,152743,152744,152746,152748],{"class":81,"line":82},[79,152745,16855],{"class":243},[79,152747,10092],{"class":85},[79,152749,673],{"class":239},[79,152751,152752,152754,152756],{"class":81,"line":167},[79,152753,152628],{"class":239},[79,152755,244],{"class":243},[79,152757,152633],{"class":89},[79,152759,152760],{"class":81,"line":178},[79,152761,454],{"emptyLinePlaceholder":453},[79,152763,152764,152767],{"class":81,"line":457},[79,152765,152766],{"class":85},"    @",[79,152768,152769],{"class":96},"classmethod\n",[79,152771,152772,152774,152777],{"class":81,"line":462},[79,152773,32925],{"class":243},[79,152775,152776],{"class":85}," get_school",[79,152778,152779],{"class":239},"(cls):\n",[79,152781,152782,152784,152787],{"class":81,"line":474},[79,152783,16913],{"class":243},[79,152785,152786],{"class":96}," cls",[79,152788,152789],{"class":239},".school\n",[79,152791,152792],{"class":81,"line":480},[79,152793,454],{"emptyLinePlaceholder":453},[79,152795,152796],{"class":81,"line":486},[79,152797,454],{"emptyLinePlaceholder":453},[79,152799,152800,152802],{"class":81,"line":491},[79,152801,32541],{"class":96},[79,152803,152804],{"class":239},"(Student.get_school())\n",[265,152806,152808],{"id":152807},"_11132-静态方法","11.13.2 静态方法",[19,152810,152811,152812,152815],{},"静态方法使用 ",[59,152813,152814],{},"@staticmethod","，不需要访问实例和类。",[51,152817,152819],{"className":230,"code":152818,"language":232,"meta":57,"style":57},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[59,152820,152821,152830,152837,152846,152857,152861,152865],{"__ignoreMap":57},[79,152822,152823,152825,152828],{"class":81,"line":82},[79,152824,16855],{"class":243},[79,152826,152827],{"class":85}," MathUtils",[79,152829,673],{"class":239},[79,152831,152832,152834],{"class":81,"line":167},[79,152833,152766],{"class":85},[79,152835,152836],{"class":96},"staticmethod\n",[79,152838,152839,152841,152843],{"class":81,"line":178},[79,152840,32925],{"class":243},[79,152842,7405],{"class":85},[79,152844,152845],{"class":239},"(a, b):\n",[79,152847,152848,152850,152852,152854],{"class":81,"line":457},[79,152849,16913],{"class":243},[79,152851,13033],{"class":239},[79,152853,2855],{"class":243},[79,152855,152856],{"class":239}," b\n",[79,152858,152859],{"class":81,"line":462},[79,152860,454],{"emptyLinePlaceholder":453},[79,152862,152863],{"class":81,"line":474},[79,152864,454],{"emptyLinePlaceholder":453},[79,152866,152867,152869,152872,152874,152876,152878],{"class":81,"line":480},[79,152868,32541],{"class":96},[79,152870,152871],{"class":239},"(MathUtils.add(",[79,152873,1072],{"class":96},[79,152875,1060],{"class":239},[79,152877,1049],{"class":96},[79,152879,1191],{"class":239},[19,152881,152882],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152884,152886],{"id":152885},"_1114-dataclass","11.14 dataclass",[19,152888,152889,152892],{},[59,152890,152891],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[51,152894,152896],{"className":230,"code":152895,"language":232,"meta":57,"style":57},"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",[59,152897,152898,152910,152914,152918,152923,152931,152939,152947,152955,152959,152963,152983],{"__ignoreMap":57},[79,152899,152900,152902,152905,152907],{"class":81,"line":82},[79,152901,32862],{"class":243},[79,152903,152904],{"class":239}," dataclasses ",[79,152906,432],{"class":243},[79,152908,152909],{"class":239}," dataclass\n",[79,152911,152912],{"class":81,"line":167},[79,152913,454],{"emptyLinePlaceholder":453},[79,152915,152916],{"class":81,"line":178},[79,152917,454],{"emptyLinePlaceholder":453},[79,152919,152920],{"class":81,"line":457},[79,152921,152922],{"class":85},"@dataclass\n",[79,152924,152925,152927,152929],{"class":81,"line":462},[79,152926,16855],{"class":243},[79,152928,10092],{"class":85},[79,152930,673],{"class":239},[79,152932,152933,152936],{"class":81,"line":474},[79,152934,152935],{"class":239},"    name: ",[79,152937,152938],{"class":96},"str\n",[79,152940,152941,152944],{"class":81,"line":480},[79,152942,152943],{"class":239},"    age: ",[79,152945,152946],{"class":96},"int\n",[79,152948,152949,152952],{"class":81,"line":486},[79,152950,152951],{"class":239},"    score: ",[79,152953,152954],{"class":96},"float\n",[79,152956,152957],{"class":81,"line":491},[79,152958,454],{"emptyLinePlaceholder":453},[79,152960,152961],{"class":81,"line":497},[79,152962,454],{"emptyLinePlaceholder":453},[79,152964,152965,152967,152969,152971,152973,152975,152977,152979,152981],{"class":81,"line":503},[79,152966,151233],{"class":239},[79,152968,244],{"class":243},[79,152970,151637],{"class":239},[79,152972,151640],{"class":89},[79,152974,1060],{"class":239},[79,152976,3023],{"class":96},[79,152978,1060],{"class":239},[79,152980,3359],{"class":96},[79,152982,253],{"class":239},[79,152984,152985,152987],{"class":81,"line":509},[79,152986,32541],{"class":96},[79,152988,151794],{"class":239},[19,152990,152991,152992,204,152994,152997],{},"它会自动生成 ",[59,152993,32953],{},[59,152995,152996],{},"__repr__"," 等方法。适合数据模型类。",[14,152999,153001],{"id":153000},"_1115-小案例学生类","11.15 小案例：学生类",[51,153003,153005],{"className":230,"code":153004,"language":232,"meta":57,"style":57},"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",[59,153006,153007,153015,153024,153036,153046,153056,153066,153070,153079,153092,153096,153105,153111,153123,153135,153147,153159,153163,153167,153173,153183,153192,153202,153210,153218,153227,153231,153235,153243,153279,153283,153287,153312,153319],{"__ignoreMap":57},[79,153008,153009,153011,153013],{"class":81,"line":82},[79,153010,16855],{"class":243},[79,153012,10092],{"class":85},[79,153014,673],{"class":239},[79,153016,153017,153019,153021],{"class":81,"line":167},[79,153018,32925],{"class":243},[79,153020,32928],{"class":96},[79,153022,153023],{"class":239},"(self, student_id, name, age, score):\n",[79,153025,153026,153028,153031,153033],{"class":81,"line":178},[79,153027,32969],{"class":96},[79,153029,153030],{"class":239},".student_id ",[79,153032,244],{"class":243},[79,153034,153035],{"class":239}," student_id\n",[79,153037,153038,153040,153042,153044],{"class":81,"line":457},[79,153039,32969],{"class":96},[79,153041,151542],{"class":239},[79,153043,244],{"class":243},[79,153045,151547],{"class":239},[79,153047,153048,153050,153052,153054],{"class":81,"line":462},[79,153049,32969],{"class":96},[79,153051,151554],{"class":239},[79,153053,244],{"class":243},[79,153055,151559],{"class":239},[79,153057,153058,153060,153062,153064],{"class":81,"line":474},[79,153059,32969],{"class":96},[79,153061,151566],{"class":239},[79,153063,244],{"class":243},[79,153065,3815],{"class":239},[79,153067,153068],{"class":81,"line":480},[79,153069,454],{"emptyLinePlaceholder":453},[79,153071,153072,153074,153077],{"class":81,"line":486},[79,153073,32925],{"class":243},[79,153075,153076],{"class":85}," is_passed",[79,153078,32931],{"class":239},[79,153080,153081,153083,153085,153087,153089],{"class":81,"line":491},[79,153082,16913],{"class":243},[79,153084,40987],{"class":96},[79,153086,151566],{"class":239},[79,153088,3935],{"class":243},[79,153090,153091],{"class":96}," 60\n",[79,153093,153094],{"class":81,"line":497},[79,153095,454],{"emptyLinePlaceholder":453},[79,153097,153098,153100,153103],{"class":81,"line":503},[79,153099,32925],{"class":243},[79,153101,153102],{"class":85}," to_dict",[79,153104,32931],{"class":239},[79,153106,153107,153109],{"class":81,"line":509},[79,153108,16913],{"class":243},[79,153110,17732],{"class":239},[79,153112,153113,153116,153118,153120],{"class":81,"line":514},[79,153114,153115],{"class":89},"            \"student_id\"",[79,153117,53550],{"class":239},[79,153119,32947],{"class":96},[79,153121,153122],{"class":239},".student_id,\n",[79,153124,153125,153128,153130,153132],{"class":81,"line":520},[79,153126,153127],{"class":89},"            \"name\"",[79,153129,53550],{"class":239},[79,153131,32947],{"class":96},[79,153133,153134],{"class":239},".name,\n",[79,153136,153137,153140,153142,153144],{"class":81,"line":526},[79,153138,153139],{"class":89},"            \"age\"",[79,153141,53550],{"class":239},[79,153143,32947],{"class":96},[79,153145,153146],{"class":239},".age,\n",[79,153148,153149,153152,153154,153156],{"class":81,"line":532},[79,153150,153151],{"class":89},"            \"score\"",[79,153153,53550],{"class":239},[79,153155,32947],{"class":96},[79,153157,153158],{"class":239},".score,\n",[79,153160,153161],{"class":81,"line":537},[79,153162,4742],{"class":239},[79,153164,153165],{"class":81,"line":543},[79,153166,454],{"emptyLinePlaceholder":453},[79,153168,153169,153171],{"class":81,"line":549},[79,153170,152766],{"class":85},[79,153172,152769],{"class":96},[79,153174,153175,153177,153180],{"class":81,"line":555},[79,153176,32925],{"class":243},[79,153178,153179],{"class":85}," from_dict",[79,153181,153182],{"class":239},"(cls, data):\n",[79,153184,153185,153187,153189],{"class":81,"line":561},[79,153186,16913],{"class":243},[79,153188,152786],{"class":96},[79,153190,153191],{"class":239},"(\n",[79,153193,153194,153197,153200],{"class":81,"line":567},[79,153195,153196],{"class":239},"            data[",[79,153198,153199],{"class":89},"\"student_id\"",[79,153201,89941],{"class":239},[79,153203,153204,153206,153208],{"class":81,"line":573},[79,153205,153196],{"class":239},[79,153207,64789],{"class":89},[79,153209,89941],{"class":239},[79,153211,153212,153214,153216],{"class":81,"line":579},[79,153213,153196],{"class":239},[79,153215,71233],{"class":89},[79,153217,89941],{"class":239},[79,153219,153220,153222,153225],{"class":81,"line":584},[79,153221,153196],{"class":239},[79,153223,153224],{"class":89},"\"score\"",[79,153226,89941],{"class":239},[79,153228,153229],{"class":81,"line":590},[79,153230,40240],{"class":239},[79,153232,153233],{"class":81,"line":596},[79,153234,454],{"emptyLinePlaceholder":453},[79,153236,153237,153239,153241],{"class":81,"line":602},[79,153238,32925],{"class":243},[79,153240,151733],{"class":96},[79,153242,32931],{"class":239},[79,153244,153245,153247,153249,153251,153253,153256,153258,153261,153263,153265,153267,153269,153271,153273,153275,153277],{"class":81,"line":608},[79,153246,16913],{"class":243},[79,153248,151742],{"class":243},[79,153250,703],{"class":89},[79,153252,151204],{"class":96},[79,153254,153255],{"class":239},".student_id",[79,153257,700],{"class":96},[79,153259,153260],{"class":96}," {self",[79,153262,82408],{"class":239},[79,153264,700],{"class":96},[79,153266,153260],{"class":96},[79,153268,82420],{"class":239},[79,153270,700],{"class":96},[79,153272,153260],{"class":96},[79,153274,151614],{"class":239},[79,153276,700],{"class":96},[79,153278,27268],{"class":89},[79,153280,153281],{"class":81,"line":614},[79,153282,454],{"emptyLinePlaceholder":453},[79,153284,153285],{"class":81,"line":620},[79,153286,454],{"emptyLinePlaceholder":453},[79,153288,153289,153291,153293,153295,153298,153300,153302,153304,153306,153308,153310],{"class":81,"line":625},[79,153290,151233],{"class":239},[79,153292,244],{"class":243},[79,153294,151637],{"class":239},[79,153296,153297],{"class":89},"\"001\"",[79,153299,1060],{"class":239},[79,153301,151640],{"class":89},[79,153303,1060],{"class":239},[79,153305,3023],{"class":96},[79,153307,1060],{"class":239},[79,153309,3359],{"class":96},[79,153311,253],{"class":239},[79,153313,153314,153316],{"class":81,"line":630},[79,153315,32541],{"class":96},[79,153317,153318],{"class":239},"(student.is_passed())\n",[79,153320,153321,153323],{"class":81,"line":648},[79,153322,32541],{"class":96},[79,153324,153325],{"class":239},"(student.to_dict())\n",[19,153327,153328,1905,153331,153334],{},[59,153329,153330],{},"to_dict()",[59,153332,153333],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153336,153338],{"id":153337},"_1116-易错点","11.16 易错点",[26,153340,153341,153347,153353,153358,153361,153364],{},[29,153342,153343,153344,1604],{},"类名推荐使用大驼峰，如 ",[59,153345,153346],{},"StudentManager",[29,153348,153349,153350,153352],{},"方法第一个参数必须写 ",[59,153351,32947],{},"，调用时不用传。",[29,153354,153355,153357],{},[59,153356,32953],{}," 不是普通方法，它在创建对象时自动执行。",[29,153359,153360],{},"私有属性不是绝对安全，只是约定和名称改写。",[29,153362,153363],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[29,153365,153366],{},"类中方法太多时，说明职责可能过重。",[14,153368,153370],{"id":153369},"_1117-本章练习","11.17 本章练习",[26,153372,153373,153379,153385,153390,153403],{},[29,153374,153375,153376,153378],{},"定义 ",[59,153377,151320],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[29,153380,153375,153381,153384],{},[59,153382,153383],{},"Account"," 类，实现存款、取款、查询余额。",[29,153386,153375,153387,153389],{},[59,153388,19365],{}," 类，计算圆的周长和面积。",[29,153391,153375,153392,204,153395,153398,153399,153402],{},[59,153393,153394],{},"Dog",[59,153396,153397],{},"Cat"," 类，并用同一个函数调用它们的 ",[59,153400,153401],{},"speak()"," 方法。",[29,153404,106387,153405,153407,153408,1604],{},[59,153406,152891],{}," 定义一个商品类 ",[59,153409,153410],{},"Product",[2287,153412,153413],{},"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":57,"searchDepth":167,"depth":167,"links":153415},[153416,153417,153418,153419,153420,153421,153423,153424,153425,153426,153427,153428,153429,153433,153434,153435,153436],{"id":151084,"depth":167,"text":151085},{"id":151267,"depth":167,"text":151268},{"id":151331,"depth":167,"text":151332},{"id":151408,"depth":167,"text":151409},{"id":151507,"depth":167,"text":151508},{"id":151671,"depth":167,"text":153422},"11.6 str",{"id":151797,"depth":167,"text":151798},{"id":152063,"depth":167,"text":152064},{"id":152177,"depth":167,"text":152178},{"id":152332,"depth":167,"text":152333},{"id":152456,"depth":167,"text":152457},{"id":152572,"depth":167,"text":152573},{"id":152721,"depth":167,"text":152722,"children":153430},[153431,153432],{"id":152725,"depth":178,"text":152726},{"id":152807,"depth":178,"text":152808},{"id":152885,"depth":167,"text":152886},{"id":153000,"depth":167,"text":153001},{"id":153337,"depth":167,"text":153338},{"id":153369,"depth":167,"text":153370},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":151076,"description":25516},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153443,"title":153444,"body":153445,"description":25516,"extension":2314,"meta":156758,"navigation":453,"path":156759,"seo":156760,"stem":156761,"__hash__":156762},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153446,"toc":156734},[153447,153450,153454,153457,153460,153489,153492,153500,153504,153508,153511,153534,153537,153543,153547,154993,154996,155017,155021,155024,155036,155039,155223,155226,155352,155355,155359,155363,155499,155503,155589,155593,155675,155679,155716,155720,155909,155913,155916,156146,156150,156153,156334,156337,156341,156344,156350,156353,156379,156383,156386,156400,156403,156428,156431,156445,156448,156465,156468,156485,156488,156505,156509,156535,156539,156562,156566,156569,156571,156577,156579,156600,156603,156609,156615,156619,156622,156698,156701,156705,156731],[10,153448,153444],{"id":153449},"_12-综合案例与复习路线",[14,153451,153453],{"id":153452},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153455,153456],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153458,153459],{},"一个合格的入门综合项目最好覆盖：",[26,153461,153462,153465,153468,153471,153474,153477,153480,153483,153486],{},[29,153463,153464],{},"输入输出。",[29,153466,153467],{},"判断和循环。",[29,153469,153470],{},"函数拆分。",[29,153472,153473],{},"列表、字典等容器。",[29,153475,153476],{},"文件持久化。",[29,153478,153479],{},"异常处理。",[29,153481,153482],{},"模块拆分。",[29,153484,153485],{},"可选：面向对象。",[29,153487,153488],{},"可选：数据可视化。",[19,153490,153491],{},"本章整理两个方向：",[26,153493,153494,153497],{},[29,153495,153496],{},"学生管理系统。",[29,153498,153499],{},"销售数据统计和可视化。",[14,153501,153503],{"id":153502},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[265,153505,153507],{"id":153506},"_1221-需求","12.2.1 需求",[19,153509,153510],{},"实现一个命令行学生管理系统：",[26,153512,153513,153516,153519,153522,153525,153528,153531],{},[29,153514,153515],{},"添加学生。",[29,153517,153518],{},"删除学生。",[29,153520,153521],{},"修改学生。",[29,153523,153524],{},"查询学生。",[29,153526,153527],{},"显示所有学生。",[29,153529,153530],{},"保存到 JSON 文件。",[29,153532,153533],{},"程序启动时自动读取 JSON 文件。",[19,153535,153536],{},"学生字段：",[51,153538,153541],{"className":153539,"code":153540,"language":56,"meta":57},[54],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[59,153542,153540],{"__ignoreMap":57},[14,153544,153546],{"id":153545},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[51,153548,153550],{"className":230,"code":153549,"language":232,"meta":57,"style":57},"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",[59,153551,153552,153558,153568,153572,153586,153590,153594,153603,153615,153621,153625,153631,153662,153672,153679,153690,153696,153700,153704,153714,153745,153771,153775,153779,153788,153799,153810,153821,153832,153843,153854,153865,153869,153873,153883,153895,153911,153918,153925,153929,153933,153943,153951,153958,153971,153981,153992,153996,154000,154009,154017,154023,154035,154043,154054,154058,154062,154071,154087,154091,154098,154109,154114,154118,154134,154149,154164,154168,154173,154181,154189,154197,154205,154209,154214,154225,154229,154233,154242,154257,154267,154271,154283,154294,154298,154302,154307,154311,154322,154326,154330,154339,154354,154362,154366,154378,154388,154392,154396,154411,154424,154437,154441,154454,154466,154478,154482,154486,154497,154501,154505,154514,154529,154537,154541,154553,154563,154567,154571,154576,154580,154584,154594,154600,154622,154641,154660,154679,154684,154688,154692,154701,154709,154720,154724,154728,154754,154764,154769,154773,154777,154785,154795,154799,154807,154812,154828,154832,154846,154851,154865,154870,154883,154888,154901,154906,154919,154924,154937,154948,154952,154958,154969,154973,154977,154989],{"__ignoreMap":57},[79,153553,153554,153556],{"class":81,"line":82},[79,153555,432],{"class":243},[79,153557,148843],{"class":239},[79,153559,153560,153562,153564,153566],{"class":81,"line":167},[79,153561,32862],{"class":243},[79,153563,110318],{"class":239},[79,153565,432],{"class":243},[79,153567,110323],{"class":239},[79,153569,153570],{"class":81,"line":178},[79,153571,454],{"emptyLinePlaceholder":453},[79,153573,153574,153577,153579,153581,153584],{"class":81,"line":457},[79,153575,153576],{"class":96},"DATA_FILE",[79,153578,468],{"class":243},[79,153580,110552],{"class":239},[79,153582,153583],{"class":89},"\"students.json\"",[79,153585,253],{"class":239},[79,153587,153588],{"class":81,"line":462},[79,153589,454],{"emptyLinePlaceholder":453},[79,153591,153592],{"class":81,"line":474},[79,153593,454],{"emptyLinePlaceholder":453},[79,153595,153596,153598,153601],{"class":81,"line":480},[79,153597,633],{"class":243},[79,153599,153600],{"class":85}," load_students",[79,153602,34070],{"class":239},[79,153604,153605,153607,153609,153612],{"class":81,"line":486},[79,153606,662],{"class":243},[79,153608,41044],{"class":243},[79,153610,153611],{"class":96}," DATA_FILE",[79,153613,153614],{"class":239},".exists():\n",[79,153616,153617,153619],{"class":81,"line":491},[79,153618,16913],{"class":243},[79,153620,53951],{"class":239},[79,153622,153623],{"class":81,"line":497},[79,153624,454],{"emptyLinePlaceholder":453},[79,153626,153627,153629],{"class":81,"line":503},[79,153628,127536],{"class":243},[79,153630,673],{"class":239},[79,153632,153633,153636,153638,153640,153642,153644,153646,153648,153650,153652,153654,153656,153658,153660],{"class":81,"line":509},[79,153634,153635],{"class":243},"        with",[79,153637,148543],{"class":96},[79,153639,685],{"class":239},[79,153641,153576],{"class":96},[79,153643,1060],{"class":239},[79,153645,148553],{"class":89},[79,153647,1060],{"class":239},[79,153649,148558],{"class":7412},[79,153651,244],{"class":243},[79,153653,148563],{"class":89},[79,153655,15876],{"class":239},[79,153657,445],{"class":243},[79,153659,149905],{"class":7412},[79,153661,673],{"class":239},[79,153663,153664,153666,153668,153670],{"class":81,"line":514},[79,153665,17892],{"class":243},[79,153667,149916],{"class":239},[79,153669,47468],{"class":7412},[79,153671,253],{"class":239},[79,153673,153674,153676],{"class":81,"line":520},[79,153675,127564],{"class":243},[79,153677,153678],{"class":239}," json.JSONDecodeError:\n",[79,153680,153681,153683,153685,153688],{"class":81,"line":526},[79,153682,34566],{"class":96},[79,153684,685],{"class":239},[79,153686,153687],{"class":89},"\"数据文件格式错误，已使用空数据启动\"",[79,153689,253],{"class":239},[79,153691,153692,153694],{"class":81,"line":532},[79,153693,16913],{"class":243},[79,153695,53951],{"class":239},[79,153697,153698],{"class":81,"line":537},[79,153699,454],{"emptyLinePlaceholder":453},[79,153701,153702],{"class":81,"line":543},[79,153703,454],{"emptyLinePlaceholder":453},[79,153705,153706,153708,153711],{"class":81,"line":549},[79,153707,633],{"class":243},[79,153709,153710],{"class":85}," save_students",[79,153712,153713],{"class":239},"(students):\n",[79,153715,153716,153718,153720,153722,153724,153726,153729,153731,153733,153735,153737,153739,153741,153743],{"class":81,"line":555},[79,153717,36293],{"class":243},[79,153719,148543],{"class":96},[79,153721,685],{"class":239},[79,153723,153576],{"class":96},[79,153725,1060],{"class":239},[79,153727,153728],{"class":89},"\"w\"",[79,153730,1060],{"class":239},[79,153732,148558],{"class":7412},[79,153734,244],{"class":243},[79,153736,148563],{"class":89},[79,153738,15876],{"class":239},[79,153740,445],{"class":243},[79,153742,149905],{"class":7412},[79,153744,673],{"class":239},[79,153746,153747,153750,153752,153754,153756,153758,153760,153762,153765,153767,153769],{"class":81,"line":561},[79,153748,153749],{"class":239},"        json.dump(students, ",[79,153751,47468],{"class":7412},[79,153753,1060],{"class":239},[79,153755,148889],{"class":7412},[79,153757,244],{"class":243},[79,153759,36102],{"class":96},[79,153761,1060],{"class":239},[79,153763,153764],{"class":7412},"indent",[79,153766,244],{"class":243},[79,153768,1049],{"class":96},[79,153770,253],{"class":239},[79,153772,153773],{"class":81,"line":567},[79,153774,454],{"emptyLinePlaceholder":453},[79,153776,153777],{"class":81,"line":573},[79,153778,454],{"emptyLinePlaceholder":453},[79,153780,153781,153783,153786],{"class":81,"line":579},[79,153782,633],{"class":243},[79,153784,153785],{"class":85}," show_menu",[79,153787,34070],{"class":239},[79,153789,153790,153792,153794,153797],{"class":81,"line":584},[79,153791,1254],{"class":96},[79,153793,685],{"class":239},[79,153795,153796],{"class":89},"\"====== 学生管理系统 ======\"",[79,153798,253],{"class":239},[79,153800,153801,153803,153805,153808],{"class":81,"line":590},[79,153802,1254],{"class":96},[79,153804,685],{"class":239},[79,153806,153807],{"class":89},"\"1. 添加学生\"",[79,153809,253],{"class":239},[79,153811,153812,153814,153816,153819],{"class":81,"line":596},[79,153813,1254],{"class":96},[79,153815,685],{"class":239},[79,153817,153818],{"class":89},"\"2. 删除学生\"",[79,153820,253],{"class":239},[79,153822,153823,153825,153827,153830],{"class":81,"line":602},[79,153824,1254],{"class":96},[79,153826,685],{"class":239},[79,153828,153829],{"class":89},"\"3. 修改学生\"",[79,153831,253],{"class":239},[79,153833,153834,153836,153838,153841],{"class":81,"line":608},[79,153835,1254],{"class":96},[79,153837,685],{"class":239},[79,153839,153840],{"class":89},"\"4. 查询学生\"",[79,153842,253],{"class":239},[79,153844,153845,153847,153849,153852],{"class":81,"line":614},[79,153846,1254],{"class":96},[79,153848,685],{"class":239},[79,153850,153851],{"class":89},"\"5. 显示所有学生\"",[79,153853,253],{"class":239},[79,153855,153856,153858,153860,153863],{"class":81,"line":620},[79,153857,1254],{"class":96},[79,153859,685],{"class":239},[79,153861,153862],{"class":89},"\"0. 退出系统\"",[79,153864,253],{"class":239},[79,153866,153867],{"class":81,"line":625},[79,153868,454],{"emptyLinePlaceholder":453},[79,153870,153871],{"class":81,"line":630},[79,153872,454],{"emptyLinePlaceholder":453},[79,153874,153875,153877,153880],{"class":81,"line":648},[79,153876,633],{"class":243},[79,153878,153879],{"class":85}," find_student",[79,153881,153882],{"class":239},"(students, student_id):\n",[79,153884,153885,153887,153890,153892],{"class":81,"line":659},[79,153886,949],{"class":243},[79,153888,153889],{"class":239}," student ",[79,153891,955],{"class":243},[79,153893,153894],{"class":239}," students:\n",[79,153896,153897,153899,153902,153904,153906,153908],{"class":81,"line":676},[79,153898,1132],{"class":243},[79,153900,153901],{"class":239}," student[",[79,153903,153199],{"class":89},[79,153905,1033],{"class":239},[79,153907,5155],{"class":243},[79,153909,153910],{"class":239}," student_id:\n",[79,153912,153913,153915],{"class":81,"line":708},[79,153914,17892],{"class":243},[79,153916,153917],{"class":239}," student\n",[79,153919,153920,153922],{"class":81,"line":717},[79,153921,711],{"class":243},[79,153923,153924],{"class":96}," None\n",[79,153926,153927],{"class":81,"line":722},[79,153928,454],{"emptyLinePlaceholder":453},[79,153930,153931],{"class":81,"line":727},[79,153932,454],{"emptyLinePlaceholder":453},[79,153934,153935,153937,153940],{"class":81,"line":738},[79,153936,633],{"class":243},[79,153938,153939],{"class":85}," input_int",[79,153941,153942],{"class":239},"(prompt):\n",[79,153944,153945,153947,153949],{"class":81,"line":753},[79,153946,4466],{"class":243},[79,153948,97397],{"class":96},[79,153950,673],{"class":239},[79,153952,153953,153956],{"class":81,"line":768},[79,153954,153955],{"class":243},"        try",[79,153957,673],{"class":239},[79,153959,153960,153962,153964,153966,153968],{"class":81,"line":776},[79,153961,17892],{"class":243},[79,153963,4597],{"class":96},[79,153965,685],{"class":239},[79,153967,55931],{"class":96},[79,153969,153970],{"class":239},"(prompt))\n",[79,153972,153973,153976,153979],{"class":81,"line":781},[79,153974,153975],{"class":243},"        except",[79,153977,153978],{"class":96}," ValueError",[79,153980,673],{"class":239},[79,153982,153983,153985,153987,153990],{"class":81,"line":786},[79,153984,1164],{"class":96},[79,153986,685],{"class":239},[79,153988,153989],{"class":89},"\"请输入整数\"",[79,153991,253],{"class":239},[79,153993,153994],{"class":81,"line":802},[79,153995,454],{"emptyLinePlaceholder":453},[79,153997,153998],{"class":81,"line":815},[79,153999,454],{"emptyLinePlaceholder":453},[79,154001,154002,154004,154007],{"class":81,"line":828},[79,154003,633],{"class":243},[79,154005,154006],{"class":85}," input_float",[79,154008,153942],{"class":239},[79,154010,154011,154013,154015],{"class":81,"line":842},[79,154012,4466],{"class":243},[79,154014,97397],{"class":96},[79,154016,673],{"class":239},[79,154018,154019,154021],{"class":81,"line":859},[79,154020,153955],{"class":243},[79,154022,673],{"class":239},[79,154024,154025,154027,154029,154031,154033],{"class":81,"line":878},[79,154026,17892],{"class":243},[79,154028,864],{"class":96},[79,154030,685],{"class":239},[79,154032,55931],{"class":96},[79,154034,153970],{"class":239},[79,154036,154037,154039,154041],{"class":81,"line":883},[79,154038,153975],{"class":243},[79,154040,153978],{"class":96},[79,154042,673],{"class":239},[79,154044,154045,154047,154049,154052],{"class":81,"line":888},[79,154046,1164],{"class":96},[79,154048,685],{"class":239},[79,154050,154051],{"class":89},"\"请输入数字\"",[79,154053,253],{"class":239},[79,154055,154056],{"class":81,"line":904},[79,154057,454],{"emptyLinePlaceholder":453},[79,154059,154060],{"class":81,"line":919},[79,154061,454],{"emptyLinePlaceholder":453},[79,154063,154064,154066,154069],{"class":81,"line":930},[79,154065,633],{"class":243},[79,154067,154068],{"class":85}," add_student",[79,154070,153713],{"class":239},[79,154072,154073,154076,154078,154080,154082,154085],{"class":81,"line":941},[79,154074,154075],{"class":239},"    student_id ",[79,154077,244],{"class":243},[79,154079,62715],{"class":96},[79,154081,685],{"class":239},[79,154083,154084],{"class":89},"\"请输入学号:\"",[79,154086,253],{"class":239},[79,154088,154089],{"class":81,"line":946},[79,154090,454],{"emptyLinePlaceholder":453},[79,154092,154093,154095],{"class":81,"line":969},[79,154094,662],{"class":243},[79,154096,154097],{"class":239}," find_student(students, student_id):\n",[79,154099,154100,154102,154104,154107],{"class":81,"line":975},[79,154101,34566],{"class":96},[79,154103,685],{"class":239},[79,154105,154106],{"class":89},"\"学号已存在\"",[79,154108,253],{"class":239},[79,154110,154111],{"class":81,"line":989},[79,154112,154113],{"class":243},"        return\n",[79,154115,154116],{"class":81,"line":1003},[79,154117,454],{"emptyLinePlaceholder":453},[79,154119,154120,154123,154125,154127,154129,154132],{"class":81,"line":1019},[79,154121,154122],{"class":239},"    name ",[79,154124,244],{"class":243},[79,154126,62715],{"class":96},[79,154128,685],{"class":239},[79,154130,154131],{"class":89},"\"请输入姓名:\"",[79,154133,253],{"class":239},[79,154135,154136,154139,154141,154144,154147],{"class":81,"line":1024},[79,154137,154138],{"class":239},"    age ",[79,154140,244],{"class":243},[79,154142,154143],{"class":239}," input_int(",[79,154145,154146],{"class":89},"\"请输入年龄:\"",[79,154148,253],{"class":239},[79,154150,154151,154154,154156,154159,154162],{"class":81,"line":1067},[79,154152,154153],{"class":239},"    score ",[79,154155,244],{"class":243},[79,154157,154158],{"class":239}," input_float(",[79,154160,154161],{"class":89},"\"请输入成绩:\"",[79,154163,253],{"class":239},[79,154165,154166],{"class":81,"line":1101},[79,154167,454],{"emptyLinePlaceholder":453},[79,154169,154170],{"class":81,"line":1106},[79,154171,154172],{"class":239},"    students.append({\n",[79,154174,154175,154178],{"class":81,"line":1112},[79,154176,154177],{"class":89},"        \"student_id\"",[79,154179,154180],{"class":239},": student_id,\n",[79,154182,154183,154186],{"class":81,"line":1124},[79,154184,154185],{"class":89},"        \"name\"",[79,154187,154188],{"class":239},": name,\n",[79,154190,154191,154194],{"class":81,"line":1129},[79,154192,154193],{"class":89},"        \"age\"",[79,154195,154196],{"class":239},": age,\n",[79,154198,154199,154202],{"class":81,"line":1150},[79,154200,154201],{"class":89},"        \"score\"",[79,154203,154204],{"class":239},": score,\n",[79,154206,154207],{"class":81,"line":1161},[79,154208,35576],{"class":239},[79,154210,154211],{"class":81,"line":1175},[79,154212,154213],{"class":239},"    save_students(students)\n",[79,154215,154216,154218,154220,154223],{"class":81,"line":1194},[79,154217,1254],{"class":96},[79,154219,685],{"class":239},[79,154221,154222],{"class":89},"\"添加成功\"",[79,154224,253],{"class":239},[79,154226,154227],{"class":81,"line":1211},[79,154228,454],{"emptyLinePlaceholder":453},[79,154230,154231],{"class":81,"line":1228},[79,154232,454],{"emptyLinePlaceholder":453},[79,154234,154235,154237,154240],{"class":81,"line":1246},[79,154236,633],{"class":243},[79,154238,154239],{"class":85}," delete_student",[79,154241,153713],{"class":239},[79,154243,154244,154246,154248,154250,154252,154255],{"class":81,"line":1251},[79,154245,154075],{"class":239},[79,154247,244],{"class":243},[79,154249,62715],{"class":96},[79,154251,685],{"class":239},[79,154253,154254],{"class":89},"\"请输入要删除的学号:\"",[79,154256,253],{"class":239},[79,154258,154259,154262,154264],{"class":81,"line":1274},[79,154260,154261],{"class":239},"    student ",[79,154263,244],{"class":243},[79,154265,154266],{"class":239}," find_student(students, student_id)\n",[79,154268,154269],{"class":81,"line":1296},[79,154270,454],{"emptyLinePlaceholder":453},[79,154272,154273,154275,154277,154279,154281],{"class":81,"line":1316},[79,154274,662],{"class":243},[79,154276,153889],{"class":239},[79,154278,41041],{"class":243},[79,154280,41047],{"class":96},[79,154282,673],{"class":239},[79,154284,154285,154287,154289,154292],{"class":81,"line":1321},[79,154286,34566],{"class":96},[79,154288,685],{"class":239},[79,154290,154291],{"class":89},"\"学生不存在\"",[79,154293,253],{"class":239},[79,154295,154296],{"class":81,"line":1326},[79,154297,154113],{"class":243},[79,154299,154300],{"class":81,"line":1342},[79,154301,454],{"emptyLinePlaceholder":453},[79,154303,154304],{"class":81,"line":18985},[79,154305,154306],{"class":239},"    students.remove(student)\n",[79,154308,154309],{"class":81,"line":18990},[79,154310,154213],{"class":239},[79,154312,154313,154315,154317,154320],{"class":81,"line":18995},[79,154314,1254],{"class":96},[79,154316,685],{"class":239},[79,154318,154319],{"class":89},"\"删除成功\"",[79,154321,253],{"class":239},[79,154323,154324],{"class":81,"line":19009},[79,154325,454],{"emptyLinePlaceholder":453},[79,154327,154328],{"class":81,"line":19021},[79,154329,454],{"emptyLinePlaceholder":453},[79,154331,154332,154334,154337],{"class":81,"line":19026},[79,154333,633],{"class":243},[79,154335,154336],{"class":85}," update_student",[79,154338,153713],{"class":239},[79,154340,154341,154343,154345,154347,154349,154352],{"class":81,"line":19039},[79,154342,154075],{"class":239},[79,154344,244],{"class":243},[79,154346,62715],{"class":96},[79,154348,685],{"class":239},[79,154350,154351],{"class":89},"\"请输入要修改的学号:\"",[79,154353,253],{"class":239},[79,154355,154356,154358,154360],{"class":81,"line":19044},[79,154357,154261],{"class":239},[79,154359,244],{"class":243},[79,154361,154266],{"class":239},[79,154363,154364],{"class":81,"line":19049},[79,154365,454],{"emptyLinePlaceholder":453},[79,154367,154368,154370,154372,154374,154376],{"class":81,"line":19054},[79,154369,662],{"class":243},[79,154371,153889],{"class":239},[79,154373,41041],{"class":243},[79,154375,41047],{"class":96},[79,154377,673],{"class":239},[79,154379,154380,154382,154384,154386],{"class":81,"line":19067},[79,154381,34566],{"class":96},[79,154383,685],{"class":239},[79,154385,154291],{"class":89},[79,154387,253],{"class":239},[79,154389,154390],{"class":81,"line":19072},[79,154391,154113],{"class":243},[79,154393,154394],{"class":81,"line":34748},[79,154395,454],{"emptyLinePlaceholder":453},[79,154397,154398,154400,154402,154404,154406,154409],{"class":81,"line":34754},[79,154399,154122],{"class":239},[79,154401,244],{"class":243},[79,154403,62715],{"class":96},[79,154405,685],{"class":239},[79,154407,154408],{"class":89},"\"请输入新姓名:\"",[79,154410,253],{"class":239},[79,154412,154413,154415,154417,154419,154422],{"class":81,"line":34760},[79,154414,154138],{"class":239},[79,154416,244],{"class":243},[79,154418,154143],{"class":239},[79,154420,154421],{"class":89},"\"请输入新年龄:\"",[79,154423,253],{"class":239},[79,154425,154426,154428,154430,154432,154435],{"class":81,"line":34766},[79,154427,154153],{"class":239},[79,154429,244],{"class":243},[79,154431,154158],{"class":239},[79,154433,154434],{"class":89},"\"请输入新成绩:\"",[79,154436,253],{"class":239},[79,154438,154439],{"class":81,"line":34772},[79,154440,454],{"emptyLinePlaceholder":453},[79,154442,154443,154446,154448,154450,154452],{"class":81,"line":34783},[79,154444,154445],{"class":239},"    student[",[79,154447,64789],{"class":89},[79,154449,1033],{"class":239},[79,154451,244],{"class":243},[79,154453,151547],{"class":239},[79,154455,154456,154458,154460,154462,154464],{"class":81,"line":34789},[79,154457,154445],{"class":239},[79,154459,71233],{"class":89},[79,154461,1033],{"class":239},[79,154463,244],{"class":243},[79,154465,151559],{"class":239},[79,154467,154468,154470,154472,154474,154476],{"class":81,"line":34809},[79,154469,154445],{"class":239},[79,154471,153224],{"class":89},[79,154473,1033],{"class":239},[79,154475,244],{"class":243},[79,154477,3815],{"class":239},[79,154479,154480],{"class":81,"line":34815},[79,154481,454],{"emptyLinePlaceholder":453},[79,154483,154484],{"class":81,"line":34826},[79,154485,154213],{"class":239},[79,154487,154488,154490,154492,154495],{"class":81,"line":34832},[79,154489,1254],{"class":96},[79,154491,685],{"class":239},[79,154493,154494],{"class":89},"\"修改成功\"",[79,154496,253],{"class":239},[79,154498,154499],{"class":81,"line":34838},[79,154500,454],{"emptyLinePlaceholder":453},[79,154502,154503],{"class":81,"line":34844},[79,154504,454],{"emptyLinePlaceholder":453},[79,154506,154507,154509,154512],{"class":81,"line":34850},[79,154508,633],{"class":243},[79,154510,154511],{"class":85}," query_student",[79,154513,153713],{"class":239},[79,154515,154516,154518,154520,154522,154524,154527],{"class":81,"line":34856},[79,154517,154075],{"class":239},[79,154519,244],{"class":243},[79,154521,62715],{"class":96},[79,154523,685],{"class":239},[79,154525,154526],{"class":89},"\"请输入要查询的学号:\"",[79,154528,253],{"class":239},[79,154530,154531,154533,154535],{"class":81,"line":34862},[79,154532,154261],{"class":239},[79,154534,244],{"class":243},[79,154536,154266],{"class":239},[79,154538,154539],{"class":81,"line":34868},[79,154540,454],{"emptyLinePlaceholder":453},[79,154542,154543,154545,154547,154549,154551],{"class":81,"line":34888},[79,154544,662],{"class":243},[79,154546,153889],{"class":239},[79,154548,41041],{"class":243},[79,154550,41047],{"class":96},[79,154552,673],{"class":239},[79,154554,154555,154557,154559,154561],{"class":81,"line":34894},[79,154556,34566],{"class":96},[79,154558,685],{"class":239},[79,154560,154291],{"class":89},[79,154562,253],{"class":239},[79,154564,154565],{"class":81,"line":34910},[79,154566,154113],{"class":243},[79,154568,154569],{"class":81,"line":34916},[79,154570,454],{"emptyLinePlaceholder":453},[79,154572,154573],{"class":81,"line":34930},[79,154574,154575],{"class":239},"    print_student(student)\n",[79,154577,154578],{"class":81,"line":34936},[79,154579,454],{"emptyLinePlaceholder":453},[79,154581,154582],{"class":81,"line":34951},[79,154583,454],{"emptyLinePlaceholder":453},[79,154585,154586,154588,154591],{"class":81,"line":34957},[79,154587,633],{"class":243},[79,154589,154590],{"class":85}," print_student",[79,154592,154593],{"class":239},"(student):\n",[79,154595,154596,154598],{"class":81,"line":34966},[79,154597,1254],{"class":96},[79,154599,153191],{"class":239},[79,154601,154602,154605,154607,154609,154612,154615,154617,154620],{"class":81,"line":34972},[79,154603,154604],{"class":243},"        f",[79,154606,703],{"class":89},[79,154608,694],{"class":96},[79,154610,154611],{"class":239},"student[",[79,154613,154614],{"class":89},"'student_id'",[79,154616,3311],{"class":239},[79,154618,154619],{"class":96},"}\\t",[79,154621,27268],{"class":89},[79,154623,154624,154626,154628,154630,154632,154635,154637,154639],{"class":81,"line":34981},[79,154625,154604],{"class":243},[79,154627,703],{"class":89},[79,154629,694],{"class":96},[79,154631,154611],{"class":239},[79,154633,154634],{"class":89},"'name'",[79,154636,3311],{"class":239},[79,154638,154619],{"class":96},[79,154640,27268],{"class":89},[79,154642,154643,154645,154647,154649,154651,154654,154656,154658],{"class":81,"line":34987},[79,154644,154604],{"class":243},[79,154646,703],{"class":89},[79,154648,694],{"class":96},[79,154650,154611],{"class":239},[79,154652,154653],{"class":89},"'age'",[79,154655,3311],{"class":239},[79,154657,154619],{"class":96},[79,154659,27268],{"class":89},[79,154661,154662,154664,154666,154668,154670,154673,154675,154677],{"class":81,"line":34993},[79,154663,154604],{"class":243},[79,154665,703],{"class":89},[79,154667,694],{"class":96},[79,154669,154611],{"class":239},[79,154671,154672],{"class":89},"'score'",[79,154674,3311],{"class":239},[79,154676,700],{"class":96},[79,154678,27268],{"class":89},[79,154680,154681],{"class":81,"line":35002},[79,154682,154683],{"class":239},"    )\n",[79,154685,154686],{"class":81,"line":35008},[79,154687,454],{"emptyLinePlaceholder":453},[79,154689,154690],{"class":81,"line":35019},[79,154691,454],{"emptyLinePlaceholder":453},[79,154693,154694,154696,154699],{"class":81,"line":35025},[79,154695,633],{"class":243},[79,154697,154698],{"class":85}," show_all_students",[79,154700,153713],{"class":239},[79,154702,154703,154705,154707],{"class":81,"line":35044},[79,154704,662],{"class":243},[79,154706,41044],{"class":243},[79,154708,153894],{"class":239},[79,154710,154711,154713,154715,154718],{"class":81,"line":35050},[79,154712,34566],{"class":96},[79,154714,685],{"class":239},[79,154716,154717],{"class":89},"\"暂无学生\"",[79,154719,253],{"class":239},[79,154721,154722],{"class":81,"line":35061},[79,154723,154113],{"class":243},[79,154725,154726],{"class":81,"line":35067},[79,154727,454],{"emptyLinePlaceholder":453},[79,154729,154730,154732,154734,154737,154739,154742,154744,154747,154749,154752],{"class":81,"line":35087},[79,154731,1254],{"class":96},[79,154733,685],{"class":239},[79,154735,154736],{"class":89},"\"学号",[79,154738,3471],{"class":96},[79,154740,154741],{"class":89},"姓名",[79,154743,3471],{"class":96},[79,154745,154746],{"class":89},"年龄",[79,154748,3471],{"class":96},[79,154750,154751],{"class":89},"成绩\"",[79,154753,253],{"class":239},[79,154755,154756,154758,154760,154762],{"class":81,"line":35103},[79,154757,949],{"class":243},[79,154759,153889],{"class":239},[79,154761,955],{"class":243},[79,154763,153894],{"class":239},[79,154765,154766],{"class":81,"line":35109},[79,154767,154768],{"class":239},"        print_student(student)\n",[79,154770,154771],{"class":81,"line":35123},[79,154772,454],{"emptyLinePlaceholder":453},[79,154774,154775],{"class":81,"line":35129},[79,154776,454],{"emptyLinePlaceholder":453},[79,154778,154779,154781,154783],{"class":81,"line":35135},[79,154780,633],{"class":243},[79,154782,893],{"class":85},[79,154784,34070],{"class":239},[79,154786,154787,154790,154792],{"class":81,"line":35146},[79,154788,154789],{"class":239},"    students ",[79,154791,244],{"class":243},[79,154793,154794],{"class":239}," load_students()\n",[79,154796,154797],{"class":81,"line":35152},[79,154798,454],{"emptyLinePlaceholder":453},[79,154800,154801,154803,154805],{"class":81,"line":35158},[79,154802,4466],{"class":243},[79,154804,97397],{"class":96},[79,154806,673],{"class":239},[79,154808,154809],{"class":81,"line":35168},[79,154810,154811],{"class":239},"        show_menu()\n",[79,154813,154814,154817,154819,154821,154823,154826],{"class":81,"line":35174},[79,154815,154816],{"class":239},"        choice ",[79,154818,244],{"class":243},[79,154820,62715],{"class":96},[79,154822,685],{"class":239},[79,154824,154825],{"class":89},"\"请输入操作:\"",[79,154827,253],{"class":239},[79,154829,154830],{"class":81,"line":35185},[79,154831,454],{"emptyLinePlaceholder":453},[79,154833,154834,154836,154839,154841,154844],{"class":81,"line":35191},[79,154835,1132],{"class":243},[79,154837,154838],{"class":239}," choice ",[79,154840,5155],{"class":243},[79,154842,154843],{"class":89}," \"1\"",[79,154845,673],{"class":239},[79,154847,154848],{"class":81,"line":35201},[79,154849,154850],{"class":239},"            add_student(students)\n",[79,154852,154853,154856,154858,154860,154863],{"class":81,"line":35206},[79,154854,154855],{"class":243},"        elif",[79,154857,154838],{"class":239},[79,154859,5155],{"class":243},[79,154861,154862],{"class":89}," \"2\"",[79,154864,673],{"class":239},[79,154866,154867],{"class":81,"line":35212},[79,154868,154869],{"class":239},"            delete_student(students)\n",[79,154871,154872,154874,154876,154878,154881],{"class":81,"line":35261},[79,154873,154855],{"class":243},[79,154875,154838],{"class":239},[79,154877,5155],{"class":243},[79,154879,154880],{"class":89}," \"3\"",[79,154882,673],{"class":239},[79,154884,154885],{"class":81,"line":35308},[79,154886,154887],{"class":239},"            update_student(students)\n",[79,154889,154890,154892,154894,154896,154899],{"class":81,"line":35313},[79,154891,154855],{"class":243},[79,154893,154838],{"class":239},[79,154895,5155],{"class":243},[79,154897,154898],{"class":89}," \"4\"",[79,154900,673],{"class":239},[79,154902,154903],{"class":81,"line":35319},[79,154904,154905],{"class":239},"            query_student(students)\n",[79,154907,154908,154910,154912,154914,154917],{"class":81,"line":35338},[79,154909,154855],{"class":243},[79,154911,154838],{"class":239},[79,154913,5155],{"class":243},[79,154915,154916],{"class":89}," \"5\"",[79,154918,673],{"class":239},[79,154920,154921],{"class":81,"line":35344},[79,154922,154923],{"class":239},"            show_all_students(students)\n",[79,154925,154926,154928,154930,154932,154935],{"class":81,"line":35364},[79,154927,154855],{"class":243},[79,154929,154838],{"class":239},[79,154931,5155],{"class":243},[79,154933,154934],{"class":89}," \"0\"",[79,154936,673],{"class":239},[79,154938,154939,154941,154943,154946],{"class":81,"line":35370},[79,154940,1164],{"class":96},[79,154942,685],{"class":239},[79,154944,154945],{"class":89},"\"退出系统\"",[79,154947,253],{"class":239},[79,154949,154950],{"class":81,"line":35376},[79,154951,116850],{"class":243},[79,154953,154954,154956],{"class":81,"line":35386},[79,154955,4747],{"class":243},[79,154957,673],{"class":239},[79,154959,154960,154962,154964,154967],{"class":81,"line":35391},[79,154961,1164],{"class":96},[79,154963,685],{"class":239},[79,154965,154966],{"class":89},"\"输入错误\"",[79,154968,253],{"class":239},[79,154970,154971],{"class":81,"line":35397},[79,154972,454],{"emptyLinePlaceholder":453},[79,154974,154975],{"class":81,"line":35413},[79,154976,454],{"emptyLinePlaceholder":453},[79,154978,154979,154981,154983,154985,154987],{"class":81,"line":35458},[79,154980,1329],{"class":243},[79,154982,1332],{"class":96},[79,154984,1143],{"class":243},[79,154986,1337],{"class":89},[79,154988,673],{"class":239},[79,154990,154991],{"class":81,"line":35464},[79,154992,1345],{"class":239},[19,154994,154995],{},"这个项目串联了：",[26,154997,154998,155001,155004,155007,155010,155012],{},[29,154999,155000],{},"菜单循环。",[29,155002,155003],{},"函数封装。",[29,155005,155006],{},"列表字典。",[29,155008,155009],{},"JSON 读写。",[29,155011,153479],{},[29,155013,155014,1604],{},[59,155015,155016],{},"if __name__ == \"__main__\"",[14,155018,155020],{"id":155019},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,155022,155023],{},"可以进一步拆成两个类：",[26,155025,155026,155031],{},[29,155027,155028,155030],{},[59,155029,151320],{},"：表示单个学生。",[29,155032,155033,155035],{},[59,155034,153346],{},"：负责学生增删改查和文件保存。",[19,155037,155038],{},"示意代码：",[51,155040,155042],{"className":230,"code":155041,"language":232,"meta":57,"style":57},"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",[59,155043,155044,155054,155058,155062,155066,155074,155081,155087,155093,155099,155103,155111,155117,155127,155137,155147,155157,155161,155165,155171,155179,155187,155195,155203,155211,155219],{"__ignoreMap":57},[79,155045,155046,155048,155050,155052],{"class":81,"line":82},[79,155047,32862],{"class":243},[79,155049,152904],{"class":239},[79,155051,432],{"class":243},[79,155053,152909],{"class":239},[79,155055,155056],{"class":81,"line":167},[79,155057,454],{"emptyLinePlaceholder":453},[79,155059,155060],{"class":81,"line":178},[79,155061,454],{"emptyLinePlaceholder":453},[79,155063,155064],{"class":81,"line":457},[79,155065,152922],{"class":85},[79,155067,155068,155070,155072],{"class":81,"line":462},[79,155069,16855],{"class":243},[79,155071,10092],{"class":85},[79,155073,673],{"class":239},[79,155075,155076,155079],{"class":81,"line":474},[79,155077,155078],{"class":239},"    student_id: ",[79,155080,152938],{"class":96},[79,155082,155083,155085],{"class":81,"line":480},[79,155084,152935],{"class":239},[79,155086,152938],{"class":96},[79,155088,155089,155091],{"class":81,"line":486},[79,155090,152943],{"class":239},[79,155092,152946],{"class":96},[79,155094,155095,155097],{"class":81,"line":491},[79,155096,152951],{"class":239},[79,155098,152954],{"class":96},[79,155100,155101],{"class":81,"line":497},[79,155102,454],{"emptyLinePlaceholder":453},[79,155104,155105,155107,155109],{"class":81,"line":503},[79,155106,32925],{"class":243},[79,155108,153102],{"class":85},[79,155110,32931],{"class":239},[79,155112,155113,155115],{"class":81,"line":509},[79,155114,16913],{"class":243},[79,155116,17732],{"class":239},[79,155118,155119,155121,155123,155125],{"class":81,"line":514},[79,155120,153115],{"class":89},[79,155122,53550],{"class":239},[79,155124,32947],{"class":96},[79,155126,153122],{"class":239},[79,155128,155129,155131,155133,155135],{"class":81,"line":520},[79,155130,153127],{"class":89},[79,155132,53550],{"class":239},[79,155134,32947],{"class":96},[79,155136,153134],{"class":239},[79,155138,155139,155141,155143,155145],{"class":81,"line":526},[79,155140,153139],{"class":89},[79,155142,53550],{"class":239},[79,155144,32947],{"class":96},[79,155146,153146],{"class":239},[79,155148,155149,155151,155153,155155],{"class":81,"line":532},[79,155150,153151],{"class":89},[79,155152,53550],{"class":239},[79,155154,32947],{"class":96},[79,155156,153158],{"class":239},[79,155158,155159],{"class":81,"line":537},[79,155160,4742],{"class":239},[79,155162,155163],{"class":81,"line":543},[79,155164,454],{"emptyLinePlaceholder":453},[79,155166,155167,155169],{"class":81,"line":549},[79,155168,152766],{"class":85},[79,155170,152769],{"class":96},[79,155172,155173,155175,155177],{"class":81,"line":555},[79,155174,32925],{"class":243},[79,155176,153179],{"class":85},[79,155178,153182],{"class":239},[79,155180,155181,155183,155185],{"class":81,"line":561},[79,155182,16913],{"class":243},[79,155184,152786],{"class":96},[79,155186,153191],{"class":239},[79,155188,155189,155191,155193],{"class":81,"line":567},[79,155190,153196],{"class":239},[79,155192,153199],{"class":89},[79,155194,89941],{"class":239},[79,155196,155197,155199,155201],{"class":81,"line":573},[79,155198,153196],{"class":239},[79,155200,64789],{"class":89},[79,155202,89941],{"class":239},[79,155204,155205,155207,155209],{"class":81,"line":579},[79,155206,153196],{"class":239},[79,155208,71233],{"class":89},[79,155210,89941],{"class":239},[79,155212,155213,155215,155217],{"class":81,"line":584},[79,155214,153196],{"class":239},[79,155216,153224],{"class":89},[79,155218,89941],{"class":239},[79,155220,155221],{"class":81,"line":590},[79,155222,40240],{"class":239},[19,155224,155225],{},"管理器示意：",[51,155227,155229],{"className":230,"code":155228,"language":232,"meta":57,"style":57},"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",[59,155230,155231,155240,155248,155259,155263,155273,155286,155297,155304,155310,155314,155323,155332,155338,155345],{"__ignoreMap":57},[79,155232,155233,155235,155238],{"class":81,"line":82},[79,155234,16855],{"class":243},[79,155236,155237],{"class":85}," StudentManager",[79,155239,673],{"class":239},[79,155241,155242,155244,155246],{"class":81,"line":167},[79,155243,32925],{"class":243},[79,155245,32928],{"class":96},[79,155247,32931],{"class":239},[79,155249,155250,155252,155255,155257],{"class":81,"line":178},[79,155251,32969],{"class":96},[79,155253,155254],{"class":239},".students ",[79,155256,244],{"class":243},[79,155258,53951],{"class":239},[79,155260,155261],{"class":81,"line":457},[79,155262,454],{"emptyLinePlaceholder":453},[79,155264,155265,155267,155270],{"class":81,"line":462},[79,155266,32925],{"class":243},[79,155268,155269],{"class":85}," find_by_id",[79,155271,155272],{"class":239},"(self, student_id):\n",[79,155274,155275,155277,155279,155281,155283],{"class":81,"line":474},[79,155276,5606],{"class":243},[79,155278,153889],{"class":239},[79,155280,955],{"class":243},[79,155282,40987],{"class":96},[79,155284,155285],{"class":239},".students:\n",[79,155287,155288,155290,155293,155295],{"class":81,"line":480},[79,155289,6841],{"class":243},[79,155291,155292],{"class":239}," student.student_id ",[79,155294,5155],{"class":243},[79,155296,153910],{"class":239},[79,155298,155299,155302],{"class":81,"line":486},[79,155300,155301],{"class":243},"                return",[79,155303,153917],{"class":239},[79,155305,155306,155308],{"class":81,"line":491},[79,155307,16913],{"class":243},[79,155309,153924],{"class":96},[79,155311,155312],{"class":81,"line":497},[79,155313,454],{"emptyLinePlaceholder":453},[79,155315,155316,155318,155320],{"class":81,"line":503},[79,155317,32925],{"class":243},[79,155319,7405],{"class":85},[79,155321,155322],{"class":239},"(self, student):\n",[79,155324,155325,155327,155329],{"class":81,"line":509},[79,155326,1132],{"class":243},[79,155328,40987],{"class":96},[79,155330,155331],{"class":239},".find_by_id(student.student_id):\n",[79,155333,155334,155336],{"class":81,"line":514},[79,155335,17892],{"class":243},[79,155337,127559],{"class":96},[79,155339,155340,155342],{"class":81,"line":520},[79,155341,32969],{"class":96},[79,155343,155344],{"class":239},".students.append(student)\n",[79,155346,155347,155349],{"class":81,"line":526},[79,155348,16913],{"class":243},[79,155350,155351],{"class":96}," True\n",[19,155353,155354],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155356,155358],{"id":155357},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[265,155360,155362],{"id":155361},"_1251-数据结构","12.5.1 数据结构",[51,155364,155366],{"className":230,"code":155365,"language":232,"meta":57,"style":57},"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",[59,155367,155368,155376,155407,155437,155466,155495],{"__ignoreMap":57},[79,155369,155370,155372,155374],{"class":81,"line":82},[79,155371,150217],{"class":239},[79,155373,244],{"class":243},[79,155375,57557],{"class":239},[79,155377,155378,155380,155382,155384,155386,155388,155391,155393,155396,155398,155400,155402,155405],{"class":81,"line":167},[79,155379,150137],{"class":239},[79,155381,149749],{"class":89},[79,155383,53550],{"class":239},[79,155385,150360],{"class":89},[79,155387,1060],{"class":239},[79,155389,155390],{"class":89},"\"category\"",[79,155392,53550],{"class":239},[79,155394,155395],{"class":89},"\"手机\"",[79,155397,1060],{"class":239},[79,155399,86189],{"class":89},[79,155401,53550],{"class":239},[79,155403,155404],{"class":96},"12000",[79,155406,7128],{"class":239},[79,155408,155409,155411,155413,155415,155417,155419,155421,155423,155426,155428,155430,155432,155435],{"class":81,"line":178},[79,155410,150137],{"class":239},[79,155412,149749],{"class":89},[79,155414,53550],{"class":239},[79,155416,150360],{"class":89},[79,155418,1060],{"class":239},[79,155420,155390],{"class":89},[79,155422,53550],{"class":239},[79,155424,155425],{"class":89},"\"电脑\"",[79,155427,1060],{"class":239},[79,155429,86189],{"class":89},[79,155431,53550],{"class":239},[79,155433,155434],{"class":96},"18000",[79,155436,7128],{"class":239},[79,155438,155439,155441,155443,155445,155447,155449,155451,155453,155455,155457,155459,155461,155464],{"class":81,"line":457},[79,155440,150137],{"class":239},[79,155442,149749],{"class":89},[79,155444,53550],{"class":239},[79,155446,150381],{"class":89},[79,155448,1060],{"class":239},[79,155450,155390],{"class":89},[79,155452,53550],{"class":239},[79,155454,155395],{"class":89},[79,155456,1060],{"class":239},[79,155458,86189],{"class":89},[79,155460,53550],{"class":239},[79,155462,155463],{"class":96},"15000",[79,155465,7128],{"class":239},[79,155467,155468,155470,155472,155474,155476,155478,155480,155482,155484,155486,155488,155490,155493],{"class":81,"line":462},[79,155469,150137],{"class":239},[79,155471,149749],{"class":89},[79,155473,53550],{"class":239},[79,155475,150381],{"class":89},[79,155477,1060],{"class":239},[79,155479,155390],{"class":89},[79,155481,53550],{"class":239},[79,155483,155425],{"class":89},[79,155485,1060],{"class":239},[79,155487,86189],{"class":89},[79,155489,53550],{"class":239},[79,155491,155492],{"class":96},"16000",[79,155494,7128],{"class":239},[79,155496,155497],{"class":81,"line":474},[79,155498,35361],{"class":239},[265,155500,155502],{"id":155501},"_1252-按日期统计","12.5.2 按日期统计",[51,155504,155506],{"className":230,"code":155505,"language":232,"meta":57,"style":57},"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",[59,155507,155508,155517,155521,155532,155546,155559,155578,155582],{"__ignoreMap":57},[79,155509,155510,155513,155515],{"class":81,"line":82},[79,155511,155512],{"class":239},"daily_total ",[79,155514,244],{"class":243},[79,155516,89973],{"class":239},[79,155518,155519],{"class":81,"line":167},[79,155520,454],{"emptyLinePlaceholder":453},[79,155522,155523,155525,155527,155529],{"class":81,"line":178},[79,155524,1874],{"class":243},[79,155526,149961],{"class":239},[79,155528,955],{"class":243},[79,155530,155531],{"class":239}," sales:\n",[79,155533,155534,155537,155539,155542,155544],{"class":81,"line":457},[79,155535,155536],{"class":239},"    date ",[79,155538,244],{"class":243},[79,155540,155541],{"class":239}," item[",[79,155543,149749],{"class":89},[79,155545,35361],{"class":239},[79,155547,155548,155551,155553,155555,155557],{"class":81,"line":462},[79,155549,155550],{"class":239},"    amount ",[79,155552,244],{"class":243},[79,155554,155541],{"class":239},[79,155556,86189],{"class":89},[79,155558,35361],{"class":239},[79,155560,155561,155564,155566,155569,155571,155573,155575],{"class":81,"line":474},[79,155562,155563],{"class":239},"    daily_total[date] ",[79,155565,244],{"class":243},[79,155567,155568],{"class":239}," daily_total.get(date, ",[79,155570,1030],{"class":96},[79,155572,15876],{"class":239},[79,155574,2855],{"class":243},[79,155576,155577],{"class":239}," amount\n",[79,155579,155580],{"class":81,"line":480},[79,155581,454],{"emptyLinePlaceholder":453},[79,155583,155584,155586],{"class":81,"line":486},[79,155585,32541],{"class":96},[79,155587,155588],{"class":239},"(daily_total)\n",[265,155590,155592],{"id":155591},"_1253-按类别统计","12.5.3 按类别统计",[51,155594,155596],{"className":230,"code":155595,"language":232,"meta":57,"style":57},"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",[59,155597,155598,155607,155611,155621,155634,155646,155664,155668],{"__ignoreMap":57},[79,155599,155600,155603,155605],{"class":81,"line":82},[79,155601,155602],{"class":239},"category_total ",[79,155604,244],{"class":243},[79,155606,89973],{"class":239},[79,155608,155609],{"class":81,"line":167},[79,155610,454],{"emptyLinePlaceholder":453},[79,155612,155613,155615,155617,155619],{"class":81,"line":178},[79,155614,1874],{"class":243},[79,155616,149961],{"class":239},[79,155618,955],{"class":243},[79,155620,155531],{"class":239},[79,155622,155623,155626,155628,155630,155632],{"class":81,"line":457},[79,155624,155625],{"class":239},"    category ",[79,155627,244],{"class":243},[79,155629,155541],{"class":239},[79,155631,155390],{"class":89},[79,155633,35361],{"class":239},[79,155635,155636,155638,155640,155642,155644],{"class":81,"line":462},[79,155637,155550],{"class":239},[79,155639,244],{"class":243},[79,155641,155541],{"class":239},[79,155643,86189],{"class":89},[79,155645,35361],{"class":239},[79,155647,155648,155651,155653,155656,155658,155660,155662],{"class":81,"line":474},[79,155649,155650],{"class":239},"    category_total[category] ",[79,155652,244],{"class":243},[79,155654,155655],{"class":239}," category_total.get(category, ",[79,155657,1030],{"class":96},[79,155659,15876],{"class":239},[79,155661,2855],{"class":243},[79,155663,155577],{"class":239},[79,155665,155666],{"class":81,"line":480},[79,155667,454],{"emptyLinePlaceholder":453},[79,155669,155670,155672],{"class":81,"line":486},[79,155671,32541],{"class":96},[79,155673,155674],{"class":239},"(category_total)\n",[265,155676,155678],{"id":155677},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[51,155680,155682],{"className":230,"code":155681,"language":232,"meta":57,"style":57},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[59,155683,155684,155709],{"__ignoreMap":57},[79,155685,155686,155689,155691,155693,155696,155699,155702,155705,155707],{"class":81,"line":82},[79,155687,155688],{"class":239},"top_date, top_amount ",[79,155690,244],{"class":243},[79,155692,8146],{"class":96},[79,155694,155695],{"class":239},"(daily_total.items(), ",[79,155697,155698],{"class":7412},"key",[79,155700,155701],{"class":243},"=lambda",[79,155703,155704],{"class":239}," item: item[",[79,155706,1072],{"class":96},[79,155708,1243],{"class":239},[79,155710,155711,155713],{"class":81,"line":167},[79,155712,32541],{"class":96},[79,155714,155715],{"class":239},"(top_date, top_amount)\n",[14,155717,155719],{"id":155718},"_126-绘制柱状图","12.6 绘制柱状图",[51,155721,155723],{"className":230,"code":155722,"language":232,"meta":57,"style":57},"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",[59,155724,155725,155739,155750,155754,155762,155774,155786,155797,155801,155805,155815,155826,155840,155845,155862,155879,155895,155899],{"__ignoreMap":57},[79,155726,155727,155729,155731,155733,155735,155737],{"class":81,"line":82},[79,155728,32862],{"class":243},[79,155730,149131],{"class":239},[79,155732,432],{"class":243},[79,155734,149136],{"class":239},[79,155736,445],{"class":243},[79,155738,149141],{"class":239},[79,155740,155741,155743,155745,155747],{"class":81,"line":167},[79,155742,32862],{"class":243},[79,155744,148990],{"class":239},[79,155746,432],{"class":243},[79,155748,155749],{"class":239}," Bar\n",[79,155751,155752],{"class":81,"line":178},[79,155753,454],{"emptyLinePlaceholder":453},[79,155755,155756,155758,155760],{"class":81,"line":457},[79,155757,155602],{"class":239},[79,155759,244],{"class":243},[79,155761,17732],{"class":239},[79,155763,155764,155767,155769,155772],{"class":81,"line":462},[79,155765,155766],{"class":89},"    \"手机\"",[79,155768,53550],{"class":239},[79,155770,155771],{"class":96},"27000",[79,155773,33585],{"class":239},[79,155775,155776,155779,155781,155784],{"class":81,"line":474},[79,155777,155778],{"class":89},"    \"电脑\"",[79,155780,53550],{"class":239},[79,155782,155783],{"class":96},"34000",[79,155785,33585],{"class":239},[79,155787,155788,155791,155793,155795],{"class":81,"line":480},[79,155789,155790],{"class":89},"    \"耳机\"",[79,155792,53550],{"class":239},[79,155794,126151],{"class":96},[79,155796,33585],{"class":239},[79,155798,155799],{"class":81,"line":486},[79,155800,3801],{"class":239},[79,155802,155803],{"class":81,"line":491},[79,155804,454],{"emptyLinePlaceholder":453},[79,155806,155807,155810,155812],{"class":81,"line":497},[79,155808,155809],{"class":239},"bar ",[79,155811,244],{"class":243},[79,155813,155814],{"class":239}," Bar()\n",[79,155816,155817,155820,155823],{"class":81,"line":503},[79,155818,155819],{"class":239},"bar.add_xaxis(",[79,155821,155822],{"class":96},"list",[79,155824,155825],{"class":239},"(category_total.keys()))\n",[79,155827,155828,155831,155833,155835,155837],{"class":81,"line":509},[79,155829,155830],{"class":239},"bar.add_yaxis(",[79,155832,149047],{"class":89},[79,155834,1060],{"class":239},[79,155836,155822],{"class":96},[79,155838,155839],{"class":239},"(category_total.values()))\n",[79,155841,155842],{"class":81,"line":514},[79,155843,155844],{"class":239},"bar.set_global_opts(\n",[79,155846,155847,155849,155851,155853,155855,155857,155860],{"class":81,"line":520},[79,155848,149225],{"class":7412},[79,155850,244],{"class":243},[79,155852,149230],{"class":239},[79,155854,53520],{"class":7412},[79,155856,244],{"class":243},[79,155858,155859],{"class":89},"\"品类销售额\"",[79,155861,40161],{"class":239},[79,155863,155864,155866,155868,155870,155872,155874,155877],{"class":81,"line":526},[79,155865,149244],{"class":7412},[79,155867,244],{"class":243},[79,155869,149249],{"class":239},[79,155871,697],{"class":7412},[79,155873,244],{"class":243},[79,155875,155876],{"class":89},"\"品类\"",[79,155878,40161],{"class":239},[79,155880,155881,155883,155885,155887,155889,155891,155893],{"class":81,"line":532},[79,155882,149263],{"class":7412},[79,155884,244],{"class":243},[79,155886,149249],{"class":239},[79,155888,697],{"class":7412},[79,155890,244],{"class":243},[79,155892,149047],{"class":89},[79,155894,40161],{"class":239},[79,155896,155897],{"class":81,"line":537},[79,155898,253],{"class":239},[79,155900,155901,155904,155907],{"class":81,"line":543},[79,155902,155903],{"class":239},"bar.render(",[79,155905,155906],{"class":89},"\"category_sales.html\"",[79,155908,253],{"class":239},[14,155910,155912],{"id":155911},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155914,155915],{},"时间线适合展示不同日期、月份、年份的数据变化。",[51,155917,155919],{"className":230,"code":155918,"language":232,"meta":57,"style":57},"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",[59,155920,155921,155935,155946,155950,155958,155982,156005,156030,156034,156038,156048,156052,156063,156072,156082,156096,156127,156132,156136],{"__ignoreMap":57},[79,155922,155923,155925,155927,155929,155931,155933],{"class":81,"line":82},[79,155924,32862],{"class":243},[79,155926,149131],{"class":239},[79,155928,432],{"class":243},[79,155930,149136],{"class":239},[79,155932,445],{"class":243},[79,155934,149141],{"class":239},[79,155936,155937,155939,155941,155943],{"class":81,"line":167},[79,155938,32862],{"class":243},[79,155940,148990],{"class":239},[79,155942,432],{"class":243},[79,155944,155945],{"class":239}," Bar, Timeline\n",[79,155947,155948],{"class":81,"line":178},[79,155949,454],{"emptyLinePlaceholder":453},[79,155951,155952,155954,155956],{"class":81,"line":457},[79,155953,103716],{"class":239},[79,155955,244],{"class":243},[79,155957,17732],{"class":239},[79,155959,155960,155963,155966,155968,155970,155972,155974,155976,155978,155980],{"class":81,"line":462},[79,155961,155962],{"class":89},"    \"2024-10-01\"",[79,155964,155965],{"class":239},": {",[79,155967,155395],{"class":89},[79,155969,53550],{"class":239},[79,155971,155404],{"class":96},[79,155973,1060],{"class":239},[79,155975,155425],{"class":89},[79,155977,53550],{"class":239},[79,155979,155434],{"class":96},[79,155981,7128],{"class":239},[79,155983,155984,155987,155989,155991,155993,155995,155997,155999,156001,156003],{"class":81,"line":474},[79,155985,155986],{"class":89},"    \"2024-10-02\"",[79,155988,155965],{"class":239},[79,155990,155395],{"class":89},[79,155992,53550],{"class":239},[79,155994,155463],{"class":96},[79,155996,1060],{"class":239},[79,155998,155425],{"class":89},[79,156000,53550],{"class":239},[79,156002,155492],{"class":96},[79,156004,7128],{"class":239},[79,156006,156007,156010,156012,156014,156016,156019,156021,156023,156025,156028],{"class":81,"line":480},[79,156008,156009],{"class":89},"    \"2024-10-03\"",[79,156011,155965],{"class":239},[79,156013,155395],{"class":89},[79,156015,53550],{"class":239},[79,156017,156018],{"class":96},"17000",[79,156020,1060],{"class":239},[79,156022,155425],{"class":89},[79,156024,53550],{"class":239},[79,156026,156027],{"class":96},"19000",[79,156029,7128],{"class":239},[79,156031,156032],{"class":81,"line":486},[79,156033,3801],{"class":239},[79,156035,156036],{"class":81,"line":491},[79,156037,454],{"emptyLinePlaceholder":453},[79,156039,156040,156043,156045],{"class":81,"line":497},[79,156041,156042],{"class":239},"timeline ",[79,156044,244],{"class":243},[79,156046,156047],{"class":239}," Timeline()\n",[79,156049,156050],{"class":81,"line":503},[79,156051,454],{"emptyLinePlaceholder":453},[79,156053,156054,156056,156059,156061],{"class":81,"line":509},[79,156055,1874],{"class":243},[79,156057,156058],{"class":239}," date, category_data ",[79,156060,955],{"class":243},[79,156062,150900],{"class":239},[79,156064,156065,156068,156070],{"class":81,"line":514},[79,156066,156067],{"class":239},"    bar ",[79,156069,244],{"class":243},[79,156071,155814],{"class":239},[79,156073,156074,156077,156079],{"class":81,"line":520},[79,156075,156076],{"class":239},"    bar.add_xaxis(",[79,156078,155822],{"class":96},[79,156080,156081],{"class":239},"(category_data.keys()))\n",[79,156083,156084,156087,156089,156091,156093],{"class":81,"line":526},[79,156085,156086],{"class":239},"    bar.add_yaxis(",[79,156088,149047],{"class":89},[79,156090,1060],{"class":239},[79,156092,155822],{"class":96},[79,156094,156095],{"class":239},"(category_data.values()))\n",[79,156097,156098,156101,156104,156106,156108,156110,156112,156114,156116,156118,156120,156122,156125],{"class":81,"line":532},[79,156099,156100],{"class":239},"    bar.set_global_opts(",[79,156102,156103],{"class":7412},"title_opts",[79,156105,244],{"class":243},[79,156107,149230],{"class":239},[79,156109,53520],{"class":7412},[79,156111,244],{"class":243},[79,156113,688],{"class":243},[79,156115,703],{"class":89},[79,156117,694],{"class":96},[79,156119,76034],{"class":239},[79,156121,700],{"class":96},[79,156123,156124],{"class":89},"销售额\"",[79,156126,1191],{"class":239},[79,156128,156129],{"class":81,"line":537},[79,156130,156131],{"class":239},"    timeline.add(bar, date)\n",[79,156133,156134],{"class":81,"line":543},[79,156135,454],{"emptyLinePlaceholder":453},[79,156137,156138,156141,156144],{"class":81,"line":549},[79,156139,156140],{"class":239},"timeline.render(",[79,156142,156143],{"class":89},"\"timeline_sales.html\"",[79,156145,253],{"class":239},[14,156147,156149],{"id":156148},"_128-绘制地图","12.8 绘制地图",[19,156151,156152],{},"地图适合展示地区数据。",[51,156154,156156],{"className":230,"code":156155,"language":232,"meta":57,"style":57},"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",[59,156157,156158,156172,156183,156187,156195,156208,156220,156233,156246,156250,156254,156264,156279,156284,156301,156320,156324],{"__ignoreMap":57},[79,156159,156160,156162,156164,156166,156168,156170],{"class":81,"line":82},[79,156161,32862],{"class":243},[79,156163,149131],{"class":239},[79,156165,432],{"class":243},[79,156167,149136],{"class":239},[79,156169,445],{"class":243},[79,156171,149141],{"class":239},[79,156173,156174,156176,156178,156180],{"class":81,"line":167},[79,156175,32862],{"class":243},[79,156177,148990],{"class":239},[79,156179,432],{"class":243},[79,156181,156182],{"class":239}," Map\n",[79,156184,156185],{"class":81,"line":178},[79,156186,454],{"emptyLinePlaceholder":453},[79,156188,156189,156191,156193],{"class":81,"line":457},[79,156190,103716],{"class":239},[79,156192,244],{"class":243},[79,156194,57557],{"class":239},[79,156196,156197,156200,156202,156204,156206],{"class":81,"line":462},[79,156198,156199],{"class":239},"    (",[79,156201,71377],{"class":89},[79,156203,1060],{"class":239},[79,156205,3190],{"class":96},[79,156207,40161],{"class":239},[79,156209,156210,156212,156214,156216,156218],{"class":81,"line":474},[79,156211,156199],{"class":239},[79,156213,71397],{"class":89},[79,156215,1060],{"class":239},[79,156217,149064],{"class":96},[79,156219,40161],{"class":239},[79,156221,156222,156224,156227,156229,156231],{"class":81,"line":480},[79,156223,156199],{"class":239},[79,156225,156226],{"class":89},"\"广东\"",[79,156228,1060],{"class":239},[79,156230,3947],{"class":96},[79,156232,40161],{"class":239},[79,156234,156235,156237,156240,156242,156244],{"class":81,"line":486},[79,156236,156199],{"class":239},[79,156238,156239],{"class":89},"\"浙江\"",[79,156241,1060],{"class":239},[79,156243,149069],{"class":96},[79,156245,40161],{"class":239},[79,156247,156248],{"class":81,"line":491},[79,156249,35361],{"class":239},[79,156251,156252],{"class":81,"line":497},[79,156253,454],{"emptyLinePlaceholder":453},[79,156255,156256,156259,156261],{"class":81,"line":503},[79,156257,156258],{"class":239},"map_chart ",[79,156260,244],{"class":243},[79,156262,156263],{"class":239}," Map()\n",[79,156265,156266,156269,156271,156274,156277],{"class":81,"line":509},[79,156267,156268],{"class":239},"map_chart.add(",[79,156270,149047],{"class":89},[79,156272,156273],{"class":239},", data, ",[79,156275,156276],{"class":89},"\"china\"",[79,156278,253],{"class":239},[79,156280,156281],{"class":81,"line":514},[79,156282,156283],{"class":239},"map_chart.set_global_opts(\n",[79,156285,156286,156288,156290,156292,156294,156296,156299],{"class":81,"line":520},[79,156287,149225],{"class":7412},[79,156289,244],{"class":243},[79,156291,149230],{"class":239},[79,156293,53520],{"class":7412},[79,156295,244],{"class":243},[79,156297,156298],{"class":89},"\"地区销售额\"",[79,156300,40161],{"class":239},[79,156302,156303,156306,156308,156311,156314,156316,156318],{"class":81,"line":526},[79,156304,156305],{"class":7412},"    visualmap_opts",[79,156307,244],{"class":243},[79,156309,156310],{"class":239},"opts.VisualMapOpts(",[79,156312,156313],{"class":7412},"max_",[79,156315,244],{"class":243},[79,156317,3947],{"class":96},[79,156319,40161],{"class":239},[79,156321,156322],{"class":81,"line":532},[79,156323,253],{"class":239},[79,156325,156326,156329,156332],{"class":81,"line":537},[79,156327,156328],{"class":239},"map_chart.render(",[79,156330,156331],{"class":89},"\"map_sales.html\"",[79,156333,253],{"class":239},[19,156335,156336],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156338,156340],{"id":156339},"_129-项目拆分建议","12.9 项目拆分建议",[19,156342,156343],{},"当代码超过一个文件时，可以这样组织：",[51,156345,156348],{"className":156346,"code":156347,"language":56,"meta":57},[54],"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",[59,156349,156347],{"__ignoreMap":57},[19,156351,156352],{},"职责：",[26,156354,156355,156361,156367,156373],{},[29,156356,156357,156360],{},[59,156358,156359],{},"main.py","：程序入口。",[29,156362,156363,156366],{},[59,156364,156365],{},"file_utils.py","：读写 JSON。",[29,156368,156369,156372],{},[59,156370,156371],{},"sales_service.py","：统计销售数据。",[29,156374,156375,156378],{},[59,156376,156377],{},"chart_builder.py","：生成图表。",[14,156380,156382],{"id":156381},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,156384,156385],{},"语法基础：",[26,156387,156388,156391,156394,156397],{},[29,156389,156390],{},"会写变量、注释、输入输出。",[29,156392,156393],{},"会使用 int、float、str、bool。",[29,156395,156396],{},"会做类型转换。",[29,156398,156399],{},"会使用 f-string 格式化输出。",[19,156401,156402],{},"流程控制：",[26,156404,156405,156411,156417,156425],{},[29,156406,156407,156408,1604],{},"会写 ",[59,156409,156410],{},"if elif else",[29,156412,156407,156413,1905,156415,1604],{},[59,156414,110670],{},[59,156416,1874],{},[29,156418,156419,156420,1905,156422,1604],{},"理解 ",[59,156421,4268],{},[59,156423,156424],{},"continue",[29,156426,156427],{},"能写嵌套循环。",[19,156429,156430],{},"函数：",[26,156432,156433,156436,156439,156442],{},[29,156434,156435],{},"会定义和调用函数。",[29,156437,156438],{},"理解参数和返回值。",[29,156440,156441],{},"知道局部变量和全局变量。",[29,156443,156444],{},"会使用默认参数、关键字参数、不定长参数。",[19,156446,156447],{},"容器：",[26,156449,156450,156453,156456,156459,156462],{},[29,156451,156452],{},"会使用列表增删改查。",[29,156454,156455],{},"会遍历列表、字典。",[29,156457,156458],{},"会使用切片。",[29,156460,156461],{},"会用集合去重。",[29,156463,156464],{},"会处理列表嵌套字典。",[19,156466,156467],{},"文件和模块：",[26,156469,156470,156473,156476,156479,156482],{},[29,156471,156472],{},"会读写文本文件。",[29,156474,156475],{},"会读写 JSON。",[29,156477,156478],{},"会捕获常见异常。",[29,156480,156481],{},"会导入模块和第三方包。",[29,156483,156484],{},"会创建简单包结构。",[19,156486,156487],{},"项目能力：",[26,156489,156490,156493,156496,156499,156502],{},[29,156491,156492],{},"能把代码拆成函数。",[29,156494,156495],{},"能把数据保存到文件。",[29,156497,156498],{},"能处理用户输入错误。",[29,156500,156501],{},"能写一个完整菜单程序。",[29,156503,156504],{},"能用 pyecharts 生成图表。",[14,156506,156508],{"id":156507},"_1211-推荐练习顺序","12.11 推荐练习顺序",[26,156510,156511,156514,156517,156520,156523,156526,156529,156532],{},[29,156512,156513],{},"猜数字游戏。",[29,156515,156516],{},"ATM 菜单程序。",[29,156518,156519],{},"学生成绩统计。",[29,156521,156522],{},"学生管理系统函数版。",[29,156524,156525],{},"学生管理系统文件持久化版。",[29,156527,156528],{},"学生管理系统面向对象版。",[29,156530,156531],{},"销售数据统计。",[29,156533,156534],{},"销售数据可视化。",[14,156536,156538],{"id":156537},"_1212-常见学习误区","12.12 常见学习误区",[26,156540,156541,156544,156547,156550,156553,156556,156559],{},[29,156542,156543],{},"只看视频不敲代码。",[29,156545,156546],{},"一报错就复制错误去搜，不先读报错位置。",[29,156548,156549],{},"变量名随便写，后续自己看不懂。",[29,156551,156552],{},"所有代码都写在一个文件一个函数里。",[29,156554,156555],{},"不保存练习代码，复习时没有材料。",[29,156557,156558],{},"还没掌握列表字典就急着学框架。",[29,156560,156561],{},"不会读官方文档，只依赖教程。",[14,156563,156565],{"id":156564},"_1213-如何读报错","12.13 如何读报错",[19,156567,156568],{},"报错通常从下往上看最后几行。",[19,156570,17295],{},[51,156572,156575],{"className":156573,"code":156574,"language":56,"meta":57},[54],"ValueError: invalid literal for int() with base 10: 'abc'\n",[59,156576,156574],{"__ignoreMap":57},[19,156578,26735],{},[26,156580,156581,156587,156597],{},[29,156582,156583,156584,1604],{},"异常类型是 ",[59,156585,156586],{},"ValueError",[29,156588,109352,156589,156592,156593,156596],{},[59,156590,156591],{},"int()"," 无法把 ",[59,156594,156595],{},"'abc'"," 转成整数。",[29,156598,156599],{},"应该检查输入内容或增加异常处理。",[19,156601,156602],{},"再看文件名和行号：",[51,156604,156607],{"className":156605,"code":156606,"language":56,"meta":57},[54],"File \"main.py\", line 10, in \u003Cmodule>\n",[59,156608,156606],{"__ignoreMap":57},[19,156610,156611,156612,156614],{},"表示错误发生在 ",[59,156613,156359],{}," 第 10 行。",[14,156616,156618],{"id":156617},"_1214-后续学习方向","12.14 后续学习方向",[19,156620,156621],{},"Python 基础完成后，可以按兴趣选择方向：",[26,156623,156624,156636,156645,156657,156668,156677,156687],{},[29,156625,156626,156627,204,156630,204,156633,1604],{},"自动化办公：",[59,156628,156629],{},"openpyxl",[59,156631,156632],{},"python-docx",[59,156634,156635],{},"pdfplumber",[29,156637,156638,156639,204,156641,204,156643,1604],{},"数据分析：",[59,156640,102729],{},[59,156642,147937],{},[59,156644,147945],{},[29,156646,156647,156648,204,156651,204,156654,1604],{},"Web 后端：",[59,156649,156650],{},"Flask",[59,156652,156653],{},"FastAPI",[59,156655,156656],{},"Django",[29,156658,156659,156660,204,156662,204,156665,1604],{},"爬虫：",[59,156661,147922],{},[59,156663,156664],{},"BeautifulSoup",[59,156666,156667],{},"Scrapy",[29,156669,156670,156671,204,156673,156676],{},"测试开发：",[59,156672,147969],{},[59,156674,156675],{},"selenium","、接口测试。",[29,156678,156679,156680,204,156682,204,156684,1604],{},"人工智能：",[59,156681,102729],{},[59,156683,147937],{},[59,156685,156686],{},"pytorch",[29,156688,156689,156690,204,156692,204,156695,1604],{},"运维脚本：",[59,156691,147538],{},[59,156693,156694],{},"subprocess",[59,156696,156697],{},"paramiko",[19,156699,156700],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156702,156704],{"id":156703},"_1215-结课练习","12.15 结课练习",[26,156706,156707,156710,156713,156716,156719,156722,156725,156728],{},[29,156708,156709],{},"完成函数版学生管理系统。",[29,156711,156712],{},"给学生管理系统增加 JSON 持久化。",[29,156714,156715],{},"给学生管理系统增加异常处理。",[29,156717,156718],{},"把学生管理系统改成面向对象版。",[29,156720,156721],{},"使用 pyecharts 绘制学生成绩柱状图。",[29,156723,156724],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[29,156726,156727],{},"按品类统计销售额并绘制柱状图。",[29,156729,156730],{},"写一份自己的 Python 学习路线图。",[2287,156732,156733],{},"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":57,"searchDepth":167,"depth":167,"links":156735},[156736,156737,156740,156741,156742,156748,156749,156750,156751,156752,156753,156754,156755,156756,156757],{"id":153452,"depth":167,"text":153453},{"id":153502,"depth":167,"text":153503,"children":156738},[156739],{"id":153506,"depth":178,"text":153507},{"id":153545,"depth":167,"text":153546},{"id":155019,"depth":167,"text":155020},{"id":155357,"depth":167,"text":155358,"children":156743},[156744,156745,156746,156747],{"id":155361,"depth":178,"text":155362},{"id":155501,"depth":178,"text":155502},{"id":155591,"depth":178,"text":155592},{"id":155677,"depth":178,"text":155678},{"id":155718,"depth":167,"text":155719},{"id":155911,"depth":167,"text":155912},{"id":156148,"depth":167,"text":156149},{"id":156339,"depth":167,"text":156340},{"id":156381,"depth":167,"text":156382},{"id":156507,"depth":167,"text":156508},{"id":156537,"depth":167,"text":156538},{"id":156564,"depth":167,"text":156565},{"id":156617,"depth":167,"text":156618},{"id":156703,"depth":167,"text":156704},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153444,"description":25516},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156764,"title":156765,"body":156766,"description":25516,"extension":2314,"meta":159235,"navigation":453,"path":159236,"seo":159237,"stem":159238,"__hash__":159239},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156767,"toc":159210},[156768,156771,156775,156778,156781,156801,156804,156827,156830,156833,156855,156858,156880,156884,156887,156927,156930,157051,157055,157058,157098,157101,157125,157128,157132,157135,157149,157182,157185,157220,157223,157246,157249,157282,157285,157287,157293,157368,157371,157377,157394,157434,157438,157441,157487,157489,157527,157530,157565,157568,157603,157606,157638,157641,157660,157664,157668,157781,157783,157858,157862,157908,157911,157937,157946,157950,157953,158016,158024,158052,158056,158096,158161,158165,158168,158207,158210,158255,158258,158319,158323,158350,158353,158381,158384,158388,158392,158457,158460,158498,158501,158533,158537,158636,158640,158643,158716,158719,158767,158771,158777,158817,158820,158867,158870,158919,158923,158925,158939,158941,159122,159126,159153,159173,159180,159184,159201,159207],[10,156769,156765],{"id":156770},"_2-基础语法变量与字符串",[14,156772,156774],{"id":156773},"_21-注释","2.1 注释",[19,156776,156777],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156779,156780],{},"单行注释：",[51,156782,156784],{"className":230,"code":156783,"language":232,"meta":57,"style":57},"# 这是单行注释\nprint(\"hello\")\n",[59,156785,156786,156791],{"__ignoreMap":57},[79,156787,156788],{"class":81,"line":82},[79,156789,156790],{"class":2440},"# 这是单行注释\n",[79,156792,156793,156795,156797,156799],{"class":81,"line":167},[79,156794,32541],{"class":96},[79,156796,685],{"class":239},[79,156798,8039],{"class":89},[79,156800,253],{"class":239},[19,156802,156803],{},"多行说明常用三引号：",[51,156805,156807],{"className":230,"code":156806,"language":232,"meta":57,"style":57},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[59,156808,156809,156813,156818,156823],{"__ignoreMap":57},[79,156810,156811],{"class":81,"line":82},[79,156812,617],{"class":89},[79,156814,156815],{"class":81,"line":167},[79,156816,156817],{"class":89},"这是多行说明。\n",[79,156819,156820],{"class":81,"line":178},[79,156821,156822],{"class":89},"常用于文件顶部说明、函数说明等。\n",[79,156824,156825],{"class":81,"line":457},[79,156826,617],{"class":89},[19,156828,156829],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156831,156832],{},"不好：",[51,156834,156836],{"className":230,"code":156835,"language":232,"meta":57,"style":57},"# age 加 1\nage = age + 1\n",[59,156837,156838,156843],{"__ignoreMap":57},[79,156839,156840],{"class":81,"line":82},[79,156841,156842],{"class":2440},"# age 加 1\n",[79,156844,156845,156847,156849,156851,156853],{"class":81,"line":167},[79,156846,148298],{"class":239},[79,156848,244],{"class":243},[79,156850,17867],{"class":239},[79,156852,2855],{"class":243},[79,156854,57809],{"class":96},[19,156856,156857],{},"较好：",[51,156859,156861],{"className":230,"code":156860,"language":232,"meta":57,"style":57},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[59,156862,156863,156868],{"__ignoreMap":57},[79,156864,156865],{"class":81,"line":82},[79,156866,156867],{"class":2440},"# 用户过完生日后，年龄增加一岁\n",[79,156869,156870,156872,156874,156876,156878],{"class":81,"line":167},[79,156871,148298],{"class":239},[79,156873,244],{"class":243},[79,156875,17867],{"class":239},[79,156877,2855],{"class":243},[79,156879,57809],{"class":96},[14,156881,156883],{"id":156882},"_22-字面量","2.2 字面量",[19,156885,156886],{},"字面量就是代码中直接写出来的数据。",[51,156888,156890],{"className":230,"code":156889,"language":232,"meta":57,"style":57},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[59,156891,156892,156899,156906,156913,156920],{"__ignoreMap":57},[79,156893,156894,156896],{"class":81,"line":82},[79,156895,2686],{"class":96},[79,156897,156898],{"class":2440},"          # 整数\n",[79,156900,156901,156903],{"class":81,"line":167},[79,156902,2432],{"class":96},[79,156904,156905],{"class":2440},"         # 小数\n",[79,156907,156908,156910],{"class":81,"line":178},[79,156909,8039],{"class":89},[79,156911,156912],{"class":2440},"      # 字符串\n",[79,156914,156915,156917],{"class":81,"line":457},[79,156916,33595],{"class":96},[79,156918,156919],{"class":2440},"         # 布尔值\n",[79,156921,156922,156924],{"class":81,"line":462},[79,156923,899],{"class":96},[79,156925,156926],{"class":2440},"         # 空值\n",[19,156928,156929],{},"常见字面量类型：",[2516,156931,156932,156942],{},[2519,156933,156934],{},[2522,156935,156936,156938,156940],{},[2525,156937,25877],{},[2525,156939,29624],{},[2525,156941,28004],{},[2563,156943,156944,156955,156966,156977,156989,157001,157013,157026,157038],{},[2522,156945,156946,156948,156952],{},[2568,156947,2390],{},[2568,156949,156950],{},[59,156951,2686],{},[2568,156953,156954],{},"整数",[2522,156956,156957,156959,156963],{},[2568,156958,797],{},[2568,156960,156961],{},[59,156962,2432],{},[2568,156964,156965],{},"浮点数",[2522,156967,156968,156970,156974],{},[2568,156969,642],{},[2568,156971,156972],{},[59,156973,8039],{},[2568,156975,156976],{},"字符串",[2522,156978,156979,156981,156987],{},[2568,156980,3591],{},[2568,156982,156983,204,156985],{},[59,156984,33595],{},[59,156986,36102],{},[2568,156988,68124],{},[2522,156990,156991,156994,156998],{},[2568,156992,156993],{},"NoneType",[2568,156995,156996],{},[59,156997,899],{},[2568,156999,157000],{},"空值",[2522,157002,157003,157005,157010],{},[2568,157004,155822],{},[2568,157006,157007],{},[59,157008,157009],{},"[1, 2, 3]",[2568,157011,157012],{},"列表",[2522,157014,157015,157018,157023],{},[2568,157016,157017],{},"tuple",[2568,157019,157020],{},[59,157021,157022],{},"(1, 2, 3)",[2568,157024,157025],{},"元组",[2522,157027,157028,157030,157035],{},[2568,157029,116298],{},[2568,157031,157032],{},[59,157033,157034],{},"{\"name\": \"张三\"}",[2568,157036,157037],{},"字典",[2522,157039,157040,157043,157048],{},[2568,157041,157042],{},"set",[2568,157044,157045],{},[59,157046,157047],{},"{1, 2, 3}",[2568,157049,157050],{},"集合",[14,157052,157054],{"id":157053},"_23-变量","2.3 变量",[19,157056,157057],{},"变量是保存数据的名字。",[51,157059,157061],{"className":230,"code":157060,"language":232,"meta":57,"style":57},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[59,157062,157063,157071,157079,157089],{"__ignoreMap":57},[79,157064,157065,157067,157069],{"class":81,"line":82},[79,157066,148288],{"class":239},[79,157068,244],{"class":243},[79,157070,151105],{"class":89},[79,157072,157073,157075,157077],{"class":81,"line":167},[79,157074,148298],{"class":239},[79,157076,244],{"class":243},[79,157078,148303],{"class":96},[79,157080,157081,157084,157086],{"class":81,"line":178},[79,157082,157083],{"class":239},"height ",[79,157085,244],{"class":243},[79,157087,157088],{"class":96}," 1.75\n",[79,157090,157091,157094,157096],{"class":81,"line":457},[79,157092,157093],{"class":239},"is_student ",[79,157095,244],{"class":243},[79,157097,155351],{"class":96},[19,157099,157100],{},"Python 的变量不需要提前声明类型：",[51,157102,157104],{"className":230,"code":157103,"language":232,"meta":57,"style":57},"score = 100\nscore = \"满分\"\n",[59,157105,157106,157116],{"__ignoreMap":57},[79,157107,157108,157111,157113],{"class":81,"line":82},[79,157109,157110],{"class":239},"score ",[79,157112,244],{"class":243},[79,157114,157115],{"class":96}," 100\n",[79,157117,157118,157120,157122],{"class":81,"line":167},[79,157119,157110],{"class":239},[79,157121,244],{"class":243},[79,157123,157124],{"class":89}," \"满分\"\n",[19,157126,157127],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157129,157131],{"id":157130},"_24-变量命名规则","2.4 变量命名规则",[19,157133,157134],{},"硬性规则：",[26,157136,157137,157140,157143,157146],{},[29,157138,157139],{},"只能由字母、数字、下划线组成。",[29,157141,157142],{},"不能以数字开头。",[29,157144,157145],{},"不能使用 Python 关键字。",[29,157147,157148],{},"区分大小写。",[51,157150,157152],{"className":230,"code":157151,"language":232,"meta":57,"style":57},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[59,157153,157154,157163,157172],{"__ignoreMap":57},[79,157155,157156,157159,157161],{"class":81,"line":82},[79,157157,157158],{"class":239},"user_name ",[79,157160,244],{"class":243},[79,157162,148293],{"class":89},[79,157164,157165,157168,157170],{"class":81,"line":167},[79,157166,157167],{"class":239},"age2 ",[79,157169,244],{"class":243},[79,157171,148303],{"class":96},[79,157173,157174,157177,157179],{"class":81,"line":178},[79,157175,157176],{"class":239},"_token ",[79,157178,244],{"class":243},[79,157180,157181],{"class":89}," \"abc\"\n",[19,157183,157184],{},"错误写法：",[51,157186,157188],{"className":230,"code":157187,"language":232,"meta":57,"style":57},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[59,157189,157190,157199,157211],{"__ignoreMap":57},[79,157191,157192,157195,157197],{"class":81,"line":82},[79,157193,157194],{"class":79511},"2age",[79,157196,468],{"class":243},[79,157198,148303],{"class":96},[79,157200,157201,157203,157205,157207,157209],{"class":81,"line":167},[79,157202,133336],{"class":239},[79,157204,320],{"class":243},[79,157206,148288],{"class":239},[79,157208,244],{"class":243},[79,157210,148293],{"class":89},[79,157212,157213,157215,157217],{"class":81,"line":178},[79,157214,16855],{"class":243},[79,157216,468],{"class":243},[79,157218,157219],{"class":89}," \"一班\"\n",[19,157221,157222],{},"查看关键字：",[51,157224,157226],{"className":230,"code":157225,"language":232,"meta":57,"style":57},"import keyword\n\nprint(keyword.kwlist)\n",[59,157227,157228,157235,157239],{"__ignoreMap":57},[79,157229,157230,157232],{"class":81,"line":82},[79,157231,432],{"class":243},[79,157233,157234],{"class":239}," keyword\n",[79,157236,157237],{"class":81,"line":167},[79,157238,454],{"emptyLinePlaceholder":453},[79,157240,157241,157243],{"class":81,"line":178},[79,157242,32541],{"class":96},[79,157244,157245],{"class":239},"(keyword.kwlist)\n",[19,157247,157248],{},"推荐命名风格：",[51,157250,157252],{"className":230,"code":157251,"language":232,"meta":57,"style":57},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[59,157253,157254,157263,157273],{"__ignoreMap":57},[79,157255,157256,157259,157261],{"class":81,"line":82},[79,157257,157258],{"class":239},"student_name ",[79,157260,244],{"class":243},[79,157262,151105],{"class":89},[79,157264,157265,157268,157270],{"class":81,"line":167},[79,157266,157267],{"class":239},"total_price ",[79,157269,244],{"class":243},[79,157271,157272],{"class":96}," 99.8\n",[79,157274,157275,157278,157280],{"class":81,"line":178},[79,157276,157277],{"class":239},"is_finished ",[79,157279,244],{"class":243},[79,157281,127559],{"class":96},[19,157283,157284],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157286,52846],{"id":52845},[19,157288,106387,157289,157292],{},[59,157290,157291],{},"type()"," 查看数据类型：",[51,157294,157296],{"className":230,"code":157295,"language":232,"meta":57,"style":57},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[59,157297,157298,157312,157326,157340,157354],{"__ignoreMap":57},[79,157299,157300,157302,157304,157306,157308,157310],{"class":81,"line":82},[79,157301,32541],{"class":96},[79,157303,685],{"class":239},[79,157305,105145],{"class":96},[79,157307,685],{"class":239},[79,157309,2686],{"class":96},[79,157311,1191],{"class":239},[79,157313,157314,157316,157318,157320,157322,157324],{"class":81,"line":167},[79,157315,32541],{"class":96},[79,157317,685],{"class":239},[79,157319,105145],{"class":96},[79,157321,685],{"class":239},[79,157323,2432],{"class":96},[79,157325,1191],{"class":239},[79,157327,157328,157330,157332,157334,157336,157338],{"class":81,"line":178},[79,157329,32541],{"class":96},[79,157331,685],{"class":239},[79,157333,105145],{"class":96},[79,157335,685],{"class":239},[79,157337,8039],{"class":89},[79,157339,1191],{"class":239},[79,157341,157342,157344,157346,157348,157350,157352],{"class":81,"line":457},[79,157343,32541],{"class":96},[79,157345,685],{"class":239},[79,157347,105145],{"class":96},[79,157349,685],{"class":239},[79,157351,33595],{"class":96},[79,157353,1191],{"class":239},[79,157355,157356,157358,157360,157362,157364,157366],{"class":81,"line":462},[79,157357,32541],{"class":96},[79,157359,685],{"class":239},[79,157361,105145],{"class":96},[79,157363,685],{"class":239},[79,157365,899],{"class":96},[79,157367,1191],{"class":239},[19,157369,157370],{},"输出类似：",[51,157372,157375],{"className":157373,"code":157374,"language":56,"meta":57},[54],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[59,157376,157374],{"__ignoreMap":57},[19,157378,11209,157379,109291,157381,157383,157384,157386,157387,23639,157389,157386,157391,157393],{},[59,157380,3591],{},[59,157382,2390],{}," 的子类，",[59,157385,33595],{}," 可以当作 ",[59,157388,1072],{},[59,157390,36102],{},[59,157392,1030],{},"，但业务代码中不要滥用。",[51,157395,157397],{"className":230,"code":157396,"language":232,"meta":57,"style":57},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[59,157398,157399,157417],{"__ignoreMap":57},[79,157400,157401,157403,157405,157407,157409,157411,157414],{"class":81,"line":82},[79,157402,32541],{"class":96},[79,157404,685],{"class":239},[79,157406,33595],{"class":96},[79,157408,47680],{"class":243},[79,157410,27253],{"class":96},[79,157412,157413],{"class":239},")   ",[79,157415,157416],{"class":2440},"# 2\n",[79,157418,157419,157421,157423,157425,157427,157429,157431],{"class":81,"line":167},[79,157420,32541],{"class":96},[79,157422,685],{"class":239},[79,157424,36102],{"class":96},[79,157426,47680],{"class":243},[79,157428,27253],{"class":96},[79,157430,47922],{"class":239},[79,157432,157433],{"class":2440},"# 1\n",[14,157435,157437],{"id":157436},"_26-类型转换","2.6 类型转换",[19,157439,157440],{},"常用转换函数：",[51,157442,157444],{"className":230,"code":157443,"language":232,"meta":57,"style":57},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[59,157445,157446,157456,157467,157477],{"__ignoreMap":57},[79,157447,157448,157450,157452,157454],{"class":81,"line":82},[79,157449,2390],{"class":96},[79,157451,685],{"class":239},[79,157453,56426],{"class":89},[79,157455,253],{"class":239},[79,157457,157458,157460,157462,157465],{"class":81,"line":167},[79,157459,797],{"class":96},[79,157461,685],{"class":239},[79,157463,157464],{"class":89},"\"3.14\"",[79,157466,253],{"class":239},[79,157468,157469,157471,157473,157475],{"class":81,"line":178},[79,157470,642],{"class":96},[79,157472,685],{"class":239},[79,157474,2686],{"class":96},[79,157476,253],{"class":239},[79,157478,157479,157481,157483,157485],{"class":81,"line":457},[79,157480,3591],{"class":96},[79,157482,685],{"class":239},[79,157484,1072],{"class":96},[79,157486,253],{"class":239},[19,157488,17295],{},[51,157490,157492],{"className":230,"code":157491,"language":232,"meta":57,"style":57},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[59,157493,157494,157503,157514],{"__ignoreMap":57},[79,157495,157496,157498,157500],{"class":81,"line":82},[79,157497,148298],{"class":239},[79,157499,244],{"class":243},[79,157501,157502],{"class":89}," \"18\"\n",[79,157504,157505,157507,157509,157511],{"class":81,"line":167},[79,157506,148298],{"class":239},[79,157508,244],{"class":243},[79,157510,4597],{"class":96},[79,157512,157513],{"class":239},"(age)\n",[79,157515,157516,157518,157521,157523,157525],{"class":81,"line":178},[79,157517,32541],{"class":96},[79,157519,157520],{"class":239},"(age ",[79,157522,2855],{"class":243},[79,157524,27253],{"class":96},[79,157526,253],{"class":239},[19,157528,157529],{},"输入得到的内容永远是字符串：",[51,157531,157533],{"className":230,"code":157532,"language":232,"meta":57,"style":57},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[59,157534,157535,157551],{"__ignoreMap":57},[79,157536,157537,157540,157542,157544,157546,157549],{"class":81,"line":82},[79,157538,157539],{"class":239},"num ",[79,157541,244],{"class":243},[79,157543,62715],{"class":96},[79,157545,685],{"class":239},[79,157547,157548],{"class":89},"\"请输入数字:\"",[79,157550,253],{"class":239},[79,157552,157553,157555,157557,157559,157562],{"class":81,"line":167},[79,157554,32541],{"class":96},[79,157556,685],{"class":239},[79,157558,105145],{"class":96},[79,157560,157561],{"class":239},"(num))  ",[79,157563,157564],{"class":2440},"# str\n",[19,157566,157567],{},"如果要做数学运算，必须转换：",[51,157569,157571],{"className":230,"code":157570,"language":232,"meta":57,"style":57},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[59,157572,157573,157591],{"__ignoreMap":57},[79,157574,157575,157577,157579,157581,157583,157585,157587,157589],{"class":81,"line":82},[79,157576,157539],{"class":239},[79,157578,244],{"class":243},[79,157580,4597],{"class":96},[79,157582,685],{"class":239},[79,157584,55931],{"class":96},[79,157586,685],{"class":239},[79,157588,157548],{"class":89},[79,157590,1191],{"class":239},[79,157592,157593,157595,157597,157599,157601],{"class":81,"line":167},[79,157594,32541],{"class":96},[79,157596,47733],{"class":239},[79,157598,2855],{"class":243},[79,157600,4253],{"class":96},[79,157602,253],{"class":239},[19,157604,157605],{},"常见错误：",[51,157607,157609],{"className":230,"code":157608,"language":232,"meta":57,"style":57},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[59,157610,157611,157624],{"__ignoreMap":57},[79,157612,157613,157615,157617,157619,157621],{"class":81,"line":82},[79,157614,2390],{"class":96},[79,157616,685],{"class":239},[79,157618,157464],{"class":89},[79,157620,157413],{"class":239},[79,157622,157623],{"class":2440},"# 错误\n",[79,157625,157626,157628,157630,157633,157636],{"class":81,"line":167},[79,157627,2390],{"class":96},[79,157629,685],{"class":239},[79,157631,157632],{"class":89},"\"abc\"",[79,157634,157635],{"class":239},")    ",[79,157637,157623],{"class":2440},[19,157639,157640],{},"正确写法：",[51,157642,157644],{"className":230,"code":157643,"language":232,"meta":57,"style":57},"num = float(\"3.14\")\n",[59,157645,157646],{"__ignoreMap":57},[79,157647,157648,157650,157652,157654,157656,157658],{"class":81,"line":82},[79,157649,157539],{"class":239},[79,157651,244],{"class":243},[79,157653,864],{"class":96},[79,157655,685],{"class":239},[79,157657,157464],{"class":89},[79,157659,253],{"class":239},[14,157661,157663],{"id":157662},"_27-运算符","2.7 运算符",[265,157665,157667],{"id":157666},"_271-算术运算符","2.7.1 算术运算符",[2516,157669,157670,157681],{},[2519,157671,157672],{},[2522,157673,157674,157677,157679],{},[2525,157675,157676],{},"运算符",[2525,157678,28004],{},[2525,157680,29624],{},[2563,157682,157683,157697,157711,157725,157739,157753,157767],{},[2522,157684,157685,157689,157692],{},[2568,157686,157687],{},[59,157688,2855],{},[2568,157690,157691],{},"加法",[2568,157693,157694],{},[59,157695,157696],{},"1 + 2",[2522,157698,157699,157703,157706],{},[2568,157700,157701],{},[59,157702,320],{},[2568,157704,157705],{},"减法",[2568,157707,157708],{},[59,157709,157710],{},"5 - 3",[2522,157712,157713,157717,157720],{},[2568,157714,157715],{},[59,157716,2829],{},[2568,157718,157719],{},"乘法",[2568,157721,157722],{},[59,157723,157724],{},"2 * 3",[2522,157726,157727,157731,157734],{},[2568,157728,157729],{},[59,157730,2957],{},[2568,157732,157733],{},"除法，结果是浮点数",[2568,157735,157736],{},[59,157737,157738],{},"5 \u002F 2",[2522,157740,157741,157745,157748],{},[2568,157742,157743],{},[59,157744,35444],{},[2568,157746,157747],{},"整除",[2568,157749,157750],{},[59,157751,157752],{},"5 \u002F\u002F 2",[2522,157754,157755,157759,157762],{},[2568,157756,157757],{},[59,157758,1137],{},[2568,157760,157761],{},"取余",[2568,157763,157764],{},[59,157765,157766],{},"5 % 2",[2522,157768,157769,157773,157776],{},[2568,157770,157771],{},[59,157772,12825],{},[2568,157774,157775],{},"幂运算",[2568,157777,157778],{},[59,157779,157780],{},"2 ** 3",[19,157782,17295],{},[51,157784,157786],{"className":230,"code":157785,"language":232,"meta":57,"style":57},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[59,157787,157788,157806,157823,157840],{"__ignoreMap":57},[79,157789,157790,157792,157794,157796,157799,157801,157803],{"class":81,"line":82},[79,157791,32541],{"class":96},[79,157793,685],{"class":239},[79,157795,2694],{"class":96},[79,157797,157798],{"class":243}," \u002F",[79,157800,16916],{"class":96},[79,157802,157413],{"class":239},[79,157804,157805],{"class":2440},"# 2.5\n",[79,157807,157808,157810,157812,157814,157817,157819,157821],{"class":81,"line":167},[79,157809,32541],{"class":96},[79,157811,685],{"class":239},[79,157813,2694],{"class":96},[79,157815,157816],{"class":243}," \u002F\u002F",[79,157818,16916],{"class":96},[79,157820,47922],{"class":239},[79,157822,157416],{"class":2440},[79,157824,157825,157827,157829,157831,157834,157836,157838],{"class":81,"line":178},[79,157826,32541],{"class":96},[79,157828,685],{"class":239},[79,157830,2694],{"class":96},[79,157832,157833],{"class":243}," %",[79,157835,16916],{"class":96},[79,157837,157413],{"class":239},[79,157839,157433],{"class":2440},[79,157841,157842,157844,157846,157848,157851,157853,157855],{"class":81,"line":457},[79,157843,32541],{"class":96},[79,157845,685],{"class":239},[79,157847,1049],{"class":96},[79,157849,157850],{"class":243}," **",[79,157852,80178],{"class":96},[79,157854,47922],{"class":239},[79,157856,157857],{"class":2440},"# 8\n",[265,157859,157861],{"id":157860},"_272-赋值运算符","2.7.2 赋值运算符",[51,157863,157865],{"className":230,"code":157864,"language":232,"meta":57,"style":57},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[59,157866,157867,157875,157883,157891,157899],{"__ignoreMap":57},[79,157868,157869,157871,157873],{"class":81,"line":82},[79,157870,157539],{"class":239},[79,157872,244],{"class":243},[79,157874,60538],{"class":96},[79,157876,157877,157879,157881],{"class":81,"line":167},[79,157878,157539],{"class":239},[79,157880,1118],{"class":243},[79,157882,56537],{"class":96},[79,157884,157885,157887,157889],{"class":81,"line":178},[79,157886,157539],{"class":239},[79,157888,152004],{"class":243},[79,157890,49837],{"class":96},[79,157892,157893,157895,157897],{"class":81,"line":457},[79,157894,157539],{"class":239},[79,157896,138900],{"class":243},[79,157898,121788],{"class":96},[79,157900,157901,157903,157906],{"class":81,"line":462},[79,157902,157539],{"class":239},[79,157904,157905],{"class":243},"\u002F=",[79,157907,49837],{"class":96},[19,157909,157910],{},"等价关系：",[51,157912,157914],{"className":230,"code":157913,"language":232,"meta":57,"style":57},"num += 1\nnum = num + 1\n",[59,157915,157916,157924],{"__ignoreMap":57},[79,157917,157918,157920,157922],{"class":81,"line":82},[79,157919,157539],{"class":239},[79,157921,1118],{"class":243},[79,157923,57809],{"class":96},[79,157925,157926,157928,157930,157933,157935],{"class":81,"line":167},[79,157927,157539],{"class":239},[79,157929,244],{"class":243},[79,157931,157932],{"class":239}," num ",[79,157934,2855],{"class":243},[79,157936,57809],{"class":96},[19,157938,157939,157940,1905,157943,1604],{},"Python 没有 ",[59,157941,157942],{},"num++",[59,157944,157945],{},"num--",[265,157947,157949],{"id":157948},"_273-比较运算符","2.7.3 比较运算符",[19,157951,157952],{},"比较运算结果是布尔值。",[51,157954,157956],{"className":230,"code":157955,"language":232,"meta":57,"style":57},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[59,157957,157958,157972,157987,158001],{"__ignoreMap":57},[79,157959,157960,157962,157964,157966,157968,157970],{"class":81,"line":82},[79,157961,32541],{"class":96},[79,157963,685],{"class":239},[79,157965,2820],{"class":96},[79,157967,28356],{"class":243},[79,157969,4363],{"class":96},[79,157971,253],{"class":239},[79,157973,157974,157976,157978,157980,157983,157985],{"class":81,"line":167},[79,157975,32541],{"class":96},[79,157977,685],{"class":239},[79,157979,2820],{"class":96},[79,157981,157982],{"class":243}," >=",[79,157984,4253],{"class":96},[79,157986,253],{"class":239},[79,157988,157989,157991,157993,157995,157997,157999],{"class":81,"line":178},[79,157990,32541],{"class":96},[79,157992,685],{"class":239},[79,157994,2820],{"class":96},[79,157996,1143],{"class":243},[79,157998,4298],{"class":96},[79,158000,253],{"class":239},[79,158002,158003,158005,158007,158009,158012,158014],{"class":81,"line":457},[79,158004,32541],{"class":96},[79,158006,685],{"class":239},[79,158008,2820],{"class":96},[79,158010,158011],{"class":243}," !=",[79,158013,4298],{"class":96},[79,158015,253],{"class":239},[19,158017,158018,158019,158021,158022,1604],{},"注意：判断相等用 ",[59,158020,5155],{},"，赋值用 ",[59,158023,244],{},[51,158025,158027],{"className":230,"code":158026,"language":232,"meta":57,"style":57},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[59,158028,158029,158041],{"__ignoreMap":57},[79,158030,158031,158033,158035,158038],{"class":81,"line":82},[79,158032,148298],{"class":239},[79,158034,244],{"class":243},[79,158036,158037],{"class":96}," 18",[79,158039,158040],{"class":2440},"       # 赋值\n",[79,158042,158043,158045,158047,158049],{"class":81,"line":167},[79,158044,148298],{"class":239},[79,158046,5155],{"class":243},[79,158048,158037],{"class":96},[79,158050,158051],{"class":2440},"      # 判断是否相等\n",[265,158053,158055],{"id":158054},"_274-逻辑运算符","2.7.4 逻辑运算符",[2516,158057,158058,158066],{},[2519,158059,158060],{},[2522,158061,158062,158064],{},[2525,158063,157676],{},[2525,158065,28004],{},[2563,158067,158068,158077,158086],{},[2522,158069,158070,158074],{},[2568,158071,158072],{},[59,158073,32588],{},[2568,158075,158076],{},"并且",[2522,158078,158079,158083],{},[2568,158080,158081],{},[59,158082,116842],{},[2568,158084,158085],{},"或者",[2522,158087,158088,158093],{},[2568,158089,158090],{},[59,158091,158092],{},"not",[2568,158094,158095],{},"取反",[51,158097,158099],{"className":230,"code":158098,"language":232,"meta":57,"style":57},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[59,158100,158101,158109,158118,158122,158137,158151],{"__ignoreMap":57},[79,158102,158103,158105,158107],{"class":81,"line":82},[79,158104,148298],{"class":239},[79,158106,244],{"class":243},[79,158108,90170],{"class":96},[79,158110,158111,158114,158116],{"class":81,"line":167},[79,158112,158113],{"class":239},"has_ticket ",[79,158115,244],{"class":243},[79,158117,155351],{"class":96},[79,158119,158120],{"class":81,"line":178},[79,158121,454],{"emptyLinePlaceholder":453},[79,158123,158124,158126,158128,158130,158132,158134],{"class":81,"line":457},[79,158125,32541],{"class":96},[79,158127,157520],{"class":239},[79,158129,3935],{"class":243},[79,158131,158037],{"class":96},[79,158133,122181],{"class":243},[79,158135,158136],{"class":239}," has_ticket)\n",[79,158138,158139,158141,158143,158145,158147,158149],{"class":81,"line":462},[79,158140,32541],{"class":96},[79,158142,157520],{"class":239},[79,158144,392],{"class":243},[79,158146,158037],{"class":96},[79,158148,115953],{"class":243},[79,158150,158136],{"class":239},[79,158152,158153,158155,158157,158159],{"class":81,"line":474},[79,158154,32541],{"class":96},[79,158156,685],{"class":239},[79,158158,158092],{"class":243},[79,158160,158136],{"class":239},[14,158162,158164],{"id":158163},"_28-字符串定义","2.8 字符串定义",[19,158166,158167],{},"三种常见写法：",[51,158169,158171],{"className":230,"code":158170,"language":232,"meta":57,"style":57},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[59,158172,158173,158183,158192,158202],{"__ignoreMap":57},[79,158174,158175,158178,158180],{"class":81,"line":82},[79,158176,158177],{"class":239},"name1 ",[79,158179,244],{"class":243},[79,158181,158182],{"class":89}," '小明'\n",[79,158184,158185,158188,158190],{"class":81,"line":167},[79,158186,158187],{"class":239},"name2 ",[79,158189,244],{"class":243},[79,158191,151105],{"class":89},[79,158193,158194,158197,158199],{"class":81,"line":178},[79,158195,158196],{"class":239},"text ",[79,158198,244],{"class":243},[79,158200,158201],{"class":89}," \"\"\"这是多行字符串\n",[79,158203,158204],{"class":81,"line":457},[79,158205,158206],{"class":89},"可以换行\"\"\"\n",[19,158208,158209],{},"字符串中包含引号：",[51,158211,158213],{"className":230,"code":158212,"language":232,"meta":57,"style":57},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[59,158214,158215,158225,158235],{"__ignoreMap":57},[79,158216,158217,158220,158222],{"class":81,"line":82},[79,158218,158219],{"class":239},"msg ",[79,158221,244],{"class":243},[79,158223,158224],{"class":89}," \"他说:'你好'\"\n",[79,158226,158227,158230,158232],{"class":81,"line":167},[79,158228,158229],{"class":239},"msg2 ",[79,158231,244],{"class":243},[79,158233,158234],{"class":89}," '他说:\"你好\"'\n",[79,158236,158237,158240,158242,158245,158248,158251,158253],{"class":81,"line":178},[79,158238,158239],{"class":239},"msg3 ",[79,158241,244],{"class":243},[79,158243,158244],{"class":89}," \"他说:",[79,158246,158247],{"class":96},"\\\"",[79,158249,158250],{"class":89},"你好",[79,158252,158247],{"class":96},[79,158254,27268],{"class":89},[19,158256,158257],{},"常见转义字符：",[2516,158259,158260,158269],{},[2519,158261,158262],{},[2522,158263,158264,158267],{},[2525,158265,158266],{},"写法",[2525,158268,102800],{},[2563,158270,158271,158281,158290,158300,158309],{},[2522,158272,158273,158278],{},[2568,158274,158275],{},[59,158276,158277],{},"\\n",[2568,158279,158280],{},"换行",[2522,158282,158283,158287],{},[2568,158284,158285],{},[59,158286,3471],{},[2568,158288,158289],{},"制表符",[2522,158291,158292,158297],{},[2568,158293,158294],{},[59,158295,158296],{},"\\\\",[2568,158298,158299],{},"反斜杠",[2522,158301,158302,158306],{},[2568,158303,158304],{},[59,158305,158247],{},[2568,158307,158308],{},"双引号",[2522,158310,158311,158316],{},[2568,158312,158313],{},[59,158314,158315],{},"\\'",[2568,158317,158318],{},"单引号",[14,158320,158322],{"id":158321},"_29-字符串拼接","2.9 字符串拼接",[51,158324,158326],{"className":230,"code":158325,"language":232,"meta":57,"style":57},"name = \"小明\"\nprint(\"你好，\" + name)\n",[59,158327,158328,158336],{"__ignoreMap":57},[79,158329,158330,158332,158334],{"class":81,"line":82},[79,158331,148288],{"class":239},[79,158333,244],{"class":243},[79,158335,151105],{"class":89},[79,158337,158338,158340,158342,158345,158347],{"class":81,"line":167},[79,158339,32541],{"class":96},[79,158341,685],{"class":239},[79,158343,158344],{"class":89},"\"你好，\"",[79,158346,47680],{"class":243},[79,158348,158349],{"class":239}," name)\n",[19,158351,158352],{},"字符串只能和字符串拼接：",[51,158354,158356],{"className":230,"code":158355,"language":232,"meta":57,"style":57},"age = 18\nprint(\"年龄:\" + str(age))\n",[59,158357,158358,158366],{"__ignoreMap":57},[79,158359,158360,158362,158364],{"class":81,"line":82},[79,158361,148298],{"class":239},[79,158363,244],{"class":243},[79,158365,148303],{"class":96},[79,158367,158368,158370,158372,158374,158376,158378],{"class":81,"line":167},[79,158369,32541],{"class":96},[79,158371,685],{"class":239},[79,158373,148269],{"class":89},[79,158375,47680],{"class":243},[79,158377,76027],{"class":96},[79,158379,158380],{"class":239},"(age))\n",[19,158382,158383],{},"更推荐使用格式化字符串。",[14,158385,158387],{"id":158386},"_210-字符串格式化","2.10 字符串格式化",[265,158389,158391],{"id":158390},"_2101-百分号格式化","2.10.1 百分号格式化",[51,158393,158395],{"className":230,"code":158394,"language":232,"meta":57,"style":57},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[59,158396,158397,158405,158413,158422,158426],{"__ignoreMap":57},[79,158398,158399,158401,158403],{"class":81,"line":82},[79,158400,148288],{"class":239},[79,158402,244],{"class":243},[79,158404,151105],{"class":89},[79,158406,158407,158409,158411],{"class":81,"line":167},[79,158408,148298],{"class":239},[79,158410,244],{"class":243},[79,158412,148303],{"class":96},[79,158414,158415,158417,158419],{"class":81,"line":178},[79,158416,157110],{"class":239},[79,158418,244],{"class":243},[79,158420,158421],{"class":96}," 95.5\n",[79,158423,158424],{"class":81,"line":457},[79,158425,454],{"emptyLinePlaceholder":453},[79,158427,158428,158430,158432,158435,158438,158441,158444,158447,158450,158452,158454],{"class":81,"line":462},[79,158429,32541],{"class":96},[79,158431,685],{"class":239},[79,158433,158434],{"class":89},"\"姓名:",[79,158436,158437],{"class":96},"%s",[79,158439,158440],{"class":89}," 年龄:",[79,158442,158443],{"class":96},"%d",[79,158445,158446],{"class":89}," 分数:",[79,158448,158449],{"class":96},"%.1f",[79,158451,703],{"class":89},[79,158453,157833],{"class":243},[79,158455,158456],{"class":239}," (name, age, score))\n",[19,158458,158459],{},"常用占位符：",[2516,158461,158462,158471],{},[2519,158463,158464],{},[2522,158465,158466,158469],{},[2525,158467,158468],{},"占位符",[2525,158470,28004],{},[2563,158472,158473,158481,158489],{},[2522,158474,158475,158479],{},[2568,158476,158477],{},[59,158478,158437],{},[2568,158480,156976],{},[2522,158482,158483,158487],{},[2568,158484,158485],{},[59,158486,158443],{},[2568,158488,156954],{},[2522,158490,158491,158496],{},[2568,158492,158493],{},[59,158494,158495],{},"%f",[2568,158497,156965],{},[19,158499,158500],{},"精度控制：",[51,158502,158504],{"className":230,"code":158503,"language":232,"meta":57,"style":57},"price = 12.3456\nprint(\"%.2f\" % price)\n",[59,158505,158506,158515],{"__ignoreMap":57},[79,158507,158508,158510,158512],{"class":81,"line":82},[79,158509,148433],{"class":239},[79,158511,244],{"class":243},[79,158513,158514],{"class":96}," 12.3456\n",[79,158516,158517,158519,158521,158523,158526,158528,158530],{"class":81,"line":167},[79,158518,32541],{"class":96},[79,158520,685],{"class":239},[79,158522,703],{"class":89},[79,158524,158525],{"class":96},"%.2f",[79,158527,703],{"class":89},[79,158529,157833],{"class":243},[79,158531,158532],{"class":239}," price)\n",[265,158534,158536],{"id":158535},"_2102-format方法","2.10.2 format方法",[51,158538,158540],{"className":230,"code":158539,"language":232,"meta":57,"style":57},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[59,158541,158542,158550,158558,158562,158581,158601],{"__ignoreMap":57},[79,158543,158544,158546,158548],{"class":81,"line":82},[79,158545,148288],{"class":239},[79,158547,244],{"class":243},[79,158549,151105],{"class":89},[79,158551,158552,158554,158556],{"class":81,"line":167},[79,158553,148298],{"class":239},[79,158555,244],{"class":243},[79,158557,148303],{"class":96},[79,158559,158560],{"class":81,"line":178},[79,158561,454],{"emptyLinePlaceholder":453},[79,158563,158564,158566,158568,158570,158572,158574,158576,158578],{"class":81,"line":457},[79,158565,32541],{"class":96},[79,158567,685],{"class":239},[79,158569,158434],{"class":89},[79,158571,34574],{"class":96},[79,158573,158440],{"class":89},[79,158575,34574],{"class":96},[79,158577,703],{"class":89},[79,158579,158580],{"class":239},".format(name, age))\n",[79,158582,158583,158585,158587,158589,158592,158594,158597,158599],{"class":81,"line":462},[79,158584,32541],{"class":96},[79,158586,685],{"class":239},[79,158588,158434],{"class":89},[79,158590,158591],{"class":96},"{0}",[79,158593,158440],{"class":89},[79,158595,158596],{"class":96},"{1}",[79,158598,703],{"class":89},[79,158600,158580],{"class":239},[79,158602,158603,158605,158607,158609,158612,158614,158617,158619,158622,158624,158626,158629,158631,158633],{"class":81,"line":474},[79,158604,32541],{"class":96},[79,158606,685],{"class":239},[79,158608,158434],{"class":89},[79,158610,158611],{"class":96},"{name}",[79,158613,158440],{"class":89},[79,158615,158616],{"class":96},"{age}",[79,158618,703],{"class":89},[79,158620,158621],{"class":239},".format(",[79,158623,697],{"class":7412},[79,158625,244],{"class":243},[79,158627,158628],{"class":239},"name, ",[79,158630,72329],{"class":7412},[79,158632,244],{"class":243},[79,158634,158635],{"class":239},"age))\n",[265,158637,158639],{"id":158638},"_2103-f-string","2.10.3 f-string",[19,158641,158642],{},"推荐写法：",[51,158644,158646],{"className":230,"code":158645,"language":232,"meta":57,"style":57},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[59,158647,158648,158656,158664,158672,158676],{"__ignoreMap":57},[79,158649,158650,158652,158654],{"class":81,"line":82},[79,158651,148288],{"class":239},[79,158653,244],{"class":243},[79,158655,151105],{"class":89},[79,158657,158658,158660,158662],{"class":81,"line":167},[79,158659,148298],{"class":239},[79,158661,244],{"class":243},[79,158663,148303],{"class":96},[79,158665,158666,158668,158670],{"class":81,"line":178},[79,158667,157110],{"class":239},[79,158669,244],{"class":243},[79,158671,158421],{"class":96},[79,158673,158674],{"class":81,"line":457},[79,158675,454],{"emptyLinePlaceholder":453},[79,158677,158678,158680,158682,158684,158686,158688,158690,158692,158694,158696,158698,158700,158702,158704,158707,158710,158712,158714],{"class":81,"line":462},[79,158679,32541],{"class":96},[79,158681,685],{"class":239},[79,158683,688],{"class":243},[79,158685,158434],{"class":89},[79,158687,694],{"class":96},[79,158689,697],{"class":239},[79,158691,700],{"class":96},[79,158693,158440],{"class":89},[79,158695,694],{"class":96},[79,158697,72329],{"class":239},[79,158699,700],{"class":96},[79,158701,158446],{"class":89},[79,158703,694],{"class":96},[79,158705,158706],{"class":239},"score",[79,158708,158709],{"class":243},":.1f",[79,158711,700],{"class":96},[79,158713,703],{"class":89},[79,158715,253],{"class":239},[19,158717,158718],{},"表达式也可以放进去：",[51,158720,158722],{"className":230,"code":158721,"language":232,"meta":57,"style":57},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[59,158723,158724,158732,158740],{"__ignoreMap":57},[79,158725,158726,158728,158730],{"class":81,"line":82},[79,158727,148433],{"class":239},[79,158729,244],{"class":243},[79,158731,148438],{"class":96},[79,158733,158734,158736,158738],{"class":81,"line":167},[79,158735,148443],{"class":239},[79,158737,244],{"class":243},[79,158739,56537],{"class":96},[79,158741,158742,158744,158746,158748,158751,158753,158755,158757,158760,158762,158765],{"class":81,"line":178},[79,158743,32541],{"class":96},[79,158745,685],{"class":239},[79,158747,688],{"class":243},[79,158749,158750],{"class":89},"\"总价:",[79,158752,694],{"class":96},[79,158754,148433],{"class":239},[79,158756,2829],{"class":243},[79,158758,158759],{"class":239}," count",[79,158761,700],{"class":96},[79,158763,158764],{"class":89},"元\"",[79,158766,253],{"class":239},[14,158768,158770],{"id":158769},"_211-input输入","2.11 input输入",[19,158772,158773,158776],{},[59,158774,158775],{},"input()"," 会暂停程序，等待用户输入。",[51,158778,158780],{"className":230,"code":158779,"language":232,"meta":57,"style":57},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[59,158781,158782,158796],{"__ignoreMap":57},[79,158783,158784,158786,158788,158790,158792,158794],{"class":81,"line":82},[79,158785,148288],{"class":239},[79,158787,244],{"class":243},[79,158789,62715],{"class":96},[79,158791,685],{"class":239},[79,158793,154131],{"class":89},[79,158795,253],{"class":239},[79,158797,158798,158800,158802,158804,158807,158809,158811,158813,158815],{"class":81,"line":167},[79,158799,32541],{"class":96},[79,158801,685],{"class":239},[79,158803,688],{"class":243},[79,158805,158806],{"class":89},"\"你好，",[79,158808,694],{"class":96},[79,158810,697],{"class":239},[79,158812,700],{"class":96},[79,158814,703],{"class":89},[79,158816,253],{"class":239},[19,158818,158819],{},"输入整数：",[51,158821,158823],{"className":230,"code":158822,"language":232,"meta":57,"style":57},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[59,158824,158825,158843],{"__ignoreMap":57},[79,158826,158827,158829,158831,158833,158835,158837,158839,158841],{"class":81,"line":82},[79,158828,148298],{"class":239},[79,158830,244],{"class":243},[79,158832,4597],{"class":96},[79,158834,685],{"class":239},[79,158836,55931],{"class":96},[79,158838,685],{"class":239},[79,158840,154146],{"class":89},[79,158842,1191],{"class":239},[79,158844,158845,158847,158849,158851,158854,158856,158858,158860,158863,158865],{"class":81,"line":167},[79,158846,32541],{"class":96},[79,158848,685],{"class":239},[79,158850,688],{"class":243},[79,158852,158853],{"class":89},"\"明年你",[79,158855,694],{"class":96},[79,158857,148298],{"class":239},[79,158859,2855],{"class":243},[79,158861,158862],{"class":96}," 1}",[79,158864,151156],{"class":89},[79,158866,253],{"class":239},[19,158868,158869],{},"输入小数：",[51,158871,158873],{"className":230,"code":158872,"language":232,"meta":57,"style":57},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[59,158874,158875,158894],{"__ignoreMap":57},[79,158876,158877,158879,158881,158883,158885,158887,158889,158892],{"class":81,"line":82},[79,158878,157083],{"class":239},[79,158880,244],{"class":243},[79,158882,864],{"class":96},[79,158884,685],{"class":239},[79,158886,55931],{"class":96},[79,158888,685],{"class":239},[79,158890,158891],{"class":89},"\"请输入身高:\"",[79,158893,1191],{"class":239},[79,158895,158896,158898,158900,158902,158905,158907,158909,158912,158914,158917],{"class":81,"line":167},[79,158897,32541],{"class":96},[79,158899,685],{"class":239},[79,158901,688],{"class":243},[79,158903,158904],{"class":89},"\"身高:",[79,158906,694],{"class":96},[79,158908,27117],{"class":239},[79,158910,158911],{"class":243},":.2f",[79,158913,700],{"class":96},[79,158915,158916],{"class":89},"米\"",[79,158918,253],{"class":239},[14,158920,158922],{"id":158921},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158924,125044],{},[26,158926,158927,158930,158933,158936],{},[29,158928,158929],{},"输入商品单价。",[29,158931,158932],{},"输入购买数量。",[29,158934,158935],{},"输入折扣，例如 0.8 表示八折。",[29,158937,158938],{},"输出最终金额，保留两位小数。",[19,158940,12199],{},[51,158942,158944],{"className":230,"code":158943,"language":232,"meta":57,"style":57},"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",[59,158945,158946,158965,158984,159004,159008,159028,159032,159055,159076,159098],{"__ignoreMap":57},[79,158947,158948,158950,158952,158954,158956,158958,158960,158963],{"class":81,"line":82},[79,158949,148433],{"class":239},[79,158951,244],{"class":243},[79,158953,864],{"class":96},[79,158955,685],{"class":239},[79,158957,55931],{"class":96},[79,158959,685],{"class":239},[79,158961,158962],{"class":89},"\"请输入商品单价:\"",[79,158964,1191],{"class":239},[79,158966,158967,158969,158971,158973,158975,158977,158979,158982],{"class":81,"line":167},[79,158968,148443],{"class":239},[79,158970,244],{"class":243},[79,158972,4597],{"class":96},[79,158974,685],{"class":239},[79,158976,55931],{"class":96},[79,158978,685],{"class":239},[79,158980,158981],{"class":89},"\"请输入购买数量:\"",[79,158983,1191],{"class":239},[79,158985,158986,158989,158991,158993,158995,158997,158999,159002],{"class":81,"line":178},[79,158987,158988],{"class":239},"discount ",[79,158990,244],{"class":243},[79,158992,864],{"class":96},[79,158994,685],{"class":239},[79,158996,55931],{"class":96},[79,158998,685],{"class":239},[79,159000,159001],{"class":89},"\"请输入折扣:\"",[79,159003,1191],{"class":239},[79,159005,159006],{"class":81,"line":457},[79,159007,454],{"emptyLinePlaceholder":453},[79,159009,159010,159013,159015,159018,159020,159023,159025],{"class":81,"line":462},[79,159011,159012],{"class":239},"total ",[79,159014,244],{"class":243},[79,159016,159017],{"class":239}," price ",[79,159019,2829],{"class":243},[79,159021,159022],{"class":239}," count ",[79,159024,2829],{"class":243},[79,159026,159027],{"class":239}," discount\n",[79,159029,159030],{"class":81,"line":474},[79,159031,454],{"emptyLinePlaceholder":453},[79,159033,159034,159036,159038,159040,159043,159045,159047,159049,159051,159053],{"class":81,"line":480},[79,159035,32541],{"class":96},[79,159037,685],{"class":239},[79,159039,688],{"class":243},[79,159041,159042],{"class":89},"\"商品单价:",[79,159044,694],{"class":96},[79,159046,81922],{"class":239},[79,159048,158911],{"class":243},[79,159050,700],{"class":96},[79,159052,703],{"class":89},[79,159054,253],{"class":239},[79,159056,159057,159059,159061,159063,159066,159068,159070,159072,159074],{"class":81,"line":486},[79,159058,32541],{"class":96},[79,159060,685],{"class":239},[79,159062,688],{"class":243},[79,159064,159065],{"class":89},"\"购买数量:",[79,159067,694],{"class":96},[79,159069,86539],{"class":239},[79,159071,700],{"class":96},[79,159073,703],{"class":89},[79,159075,253],{"class":239},[79,159077,159078,159080,159082,159084,159087,159089,159092,159094,159096],{"class":81,"line":491},[79,159079,32541],{"class":96},[79,159081,685],{"class":239},[79,159083,688],{"class":243},[79,159085,159086],{"class":89},"\"折扣:",[79,159088,694],{"class":96},[79,159090,159091],{"class":239},"discount",[79,159093,700],{"class":96},[79,159095,703],{"class":89},[79,159097,253],{"class":239},[79,159099,159100,159102,159104,159106,159109,159111,159114,159116,159118,159120],{"class":81,"line":497},[79,159101,32541],{"class":96},[79,159103,685],{"class":239},[79,159105,688],{"class":243},[79,159107,159108],{"class":89},"\"应付金额:",[79,159110,694],{"class":96},[79,159112,159113],{"class":239},"total",[79,159115,158911],{"class":243},[79,159117,700],{"class":96},[79,159119,158764],{"class":89},[79,159121,253],{"class":239},[14,159123,159125],{"id":159124},"_213-易错点","2.13 易错点",[26,159127,159128,159133,159139,159147,159150],{},[29,159129,159130,159132],{},[59,159131,158775],{}," 的结果是字符串，做运算前要转换。",[29,159134,159135,159136,1604],{},"字符串拼接时，数字要先 ",[59,159137,159138],{},"str()",[29,159140,159141,159143,159144,159146],{},[59,159142,244],{}," 是赋值，",[59,159145,5155],{}," 是比较。",[29,159148,159149],{},"Python 没有自增自减运算符。",[29,159151,159152],{},"浮点数计算可能有精度误差：",[51,159154,159156],{"className":230,"code":159155,"language":232,"meta":57,"style":57},"print(0.1 + 0.2)\n",[59,159157,159158],{"__ignoreMap":57},[79,159159,159160,159162,159164,159166,159168,159171],{"class":81,"line":82},[79,159161,32541],{"class":96},[79,159163,685],{"class":239},[79,159165,88315],{"class":96},[79,159167,47680],{"class":243},[79,159169,159170],{"class":96}," 0.2",[79,159172,253],{"class":239},[19,159174,159175,159176,159179],{},"金额计算如果要求严格，可以后续学习 ",[59,159177,159178],{},"decimal"," 模块。",[14,159181,159183],{"id":159182},"_214-本章练习","2.14 本章练习",[26,159185,159186,159189,159192,159195,159198],{},[29,159187,159188],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[29,159190,159191],{},"输入圆的半径，计算面积，保留两位小数。",[29,159193,159194],{},"输入工资和奖金，计算总收入。",[29,159196,159197],{},"输入摄氏温度，转换为华氏温度。",[29,159199,159200],{},"写一个 BMI 计算程序：",[51,159202,159205],{"className":159203,"code":159204,"language":56,"meta":57},[54],"BMI = 体重kg \u002F 身高m ** 2\n",[59,159206,159204],{"__ignoreMap":57},[2287,159208,159209],{},"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":57,"searchDepth":167,"depth":167,"links":159211},[159212,159213,159214,159215,159216,159217,159218,159224,159225,159226,159231,159232,159233,159234],{"id":156773,"depth":167,"text":156774},{"id":156882,"depth":167,"text":156883},{"id":157053,"depth":167,"text":157054},{"id":157130,"depth":167,"text":157131},{"id":52845,"depth":167,"text":52846},{"id":157436,"depth":167,"text":157437},{"id":157662,"depth":167,"text":157663,"children":159219},[159220,159221,159222,159223],{"id":157666,"depth":178,"text":157667},{"id":157860,"depth":178,"text":157861},{"id":157948,"depth":178,"text":157949},{"id":158054,"depth":178,"text":158055},{"id":158163,"depth":167,"text":158164},{"id":158321,"depth":167,"text":158322},{"id":158386,"depth":167,"text":158387,"children":159227},[159228,159229,159230],{"id":158390,"depth":178,"text":158391},{"id":158535,"depth":178,"text":158536},{"id":158638,"depth":178,"text":158639},{"id":158769,"depth":167,"text":158770},{"id":158921,"depth":167,"text":158922},{"id":159124,"depth":167,"text":159125},{"id":159182,"depth":167,"text":159183},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156765,"description":25516},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159241,"title":159242,"body":159243,"description":25516,"extension":2314,"meta":160879,"navigation":453,"path":160880,"seo":160881,"stem":160882,"__hash__":160883},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159244,"toc":160860},[159245,159248,159252,159255,159270,159273,159301,159305,159355,159357,159373,159376,159402,159405,159409,159476,159479,159495,159499,159502,159620,159623,159630,159679,159685,159689,159692,159805,159808,159812,159816,159819,159869,159873,159876,159926,159930,159933,159971,159975,159978,160024,160027,160062,160066,160071,160074,160120,160122,160189,160193,160199,160310,160319,160323,160325,160336,160338,160504,160508,160510,160524,160526,160740,160744,160763,160780,160783,160829,160833,160857],[10,159246,159242],{"id":159247},"_3-判断语句",[14,159249,159251],{"id":159250},"_31-布尔值","3.1 布尔值",[19,159253,159254],{},"判断语句依赖布尔值：",[51,159256,159258],{"className":230,"code":159257,"language":232,"meta":57,"style":57},"True\nFalse\n",[59,159259,159260,159265],{"__ignoreMap":57},[79,159261,159262],{"class":81,"line":82},[79,159263,159264],{"class":96},"True\n",[79,159266,159267],{"class":81,"line":167},[79,159268,159269],{"class":96},"False\n",[19,159271,159272],{},"比较表达式会产生布尔值：",[51,159274,159276],{"className":230,"code":159275,"language":232,"meta":57,"style":57},"age = 18\nprint(age >= 18)  # True\n",[59,159277,159278,159286],{"__ignoreMap":57},[79,159279,159280,159282,159284],{"class":81,"line":82},[79,159281,148298],{"class":239},[79,159283,244],{"class":243},[79,159285,148303],{"class":96},[79,159287,159288,159290,159292,159294,159296,159298],{"class":81,"line":167},[79,159289,32541],{"class":96},[79,159291,157520],{"class":239},[79,159293,3935],{"class":243},[79,159295,158037],{"class":96},[79,159297,47922],{"class":239},[79,159299,159300],{"class":2440},"# True\n",[14,159302,159304],{"id":159303},"_32-if基础语法","3.2 if基础语法",[51,159306,159308],{"className":230,"code":159307,"language":232,"meta":57,"style":57},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[59,159309,159310,159328,159332,159344],{"__ignoreMap":57},[79,159311,159312,159314,159316,159318,159320,159322,159324,159326],{"class":81,"line":82},[79,159313,148298],{"class":239},[79,159315,244],{"class":243},[79,159317,4597],{"class":96},[79,159319,685],{"class":239},[79,159321,55931],{"class":96},[79,159323,685],{"class":239},[79,159325,154146],{"class":89},[79,159327,1191],{"class":239},[79,159329,159330],{"class":81,"line":167},[79,159331,454],{"emptyLinePlaceholder":453},[79,159333,159334,159336,159338,159340,159342],{"class":81,"line":178},[79,159335,1329],{"class":243},[79,159337,17867],{"class":239},[79,159339,3935],{"class":243},[79,159341,158037],{"class":96},[79,159343,673],{"class":239},[79,159345,159346,159348,159350,159353],{"class":81,"line":457},[79,159347,1254],{"class":96},[79,159349,685],{"class":239},[79,159351,159352],{"class":89},"\"可以进入网吧\"",[79,159354,253],{"class":239},[19,159356,11209],{},[26,159358,159359,159364,159367,159370],{},[29,159360,159361,159363],{},[59,159362,1329],{}," 后面是条件表达式。",[29,159365,159366],{},"条件后面必须写冒号。",[29,159368,159369],{},"条件成立时执行缩进代码块。",[29,159371,159372],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,159374,159375],{},"错误示例：",[51,159377,159379],{"className":230,"code":159378,"language":232,"meta":57,"style":57},"if age >= 18\n    print(\"可以进入\")\n",[59,159380,159381,159391],{"__ignoreMap":57},[79,159382,159383,159385,159387,159389],{"class":81,"line":82},[79,159384,1329],{"class":243},[79,159386,17867],{"class":239},[79,159388,3935],{"class":243},[79,159390,148303],{"class":96},[79,159392,159393,159395,159397,159400],{"class":81,"line":167},[79,159394,1254],{"class":96},[79,159396,685],{"class":239},[79,159398,159399],{"class":89},"\"可以进入\"",[79,159401,253],{"class":239},[19,159403,159404],{},"缺少冒号。",[14,159406,159408],{"id":159407},"_33-if-else","3.3 if else",[51,159410,159412],{"className":230,"code":159411,"language":232,"meta":57,"style":57},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[59,159413,159414,159432,159436,159448,159459,159465],{"__ignoreMap":57},[79,159415,159416,159418,159420,159422,159424,159426,159428,159430],{"class":81,"line":82},[79,159417,148298],{"class":239},[79,159419,244],{"class":243},[79,159421,4597],{"class":96},[79,159423,685],{"class":239},[79,159425,55931],{"class":96},[79,159427,685],{"class":239},[79,159429,154146],{"class":89},[79,159431,1191],{"class":239},[79,159433,159434],{"class":81,"line":167},[79,159435,454],{"emptyLinePlaceholder":453},[79,159437,159438,159440,159442,159444,159446],{"class":81,"line":178},[79,159439,1329],{"class":243},[79,159441,17867],{"class":239},[79,159443,3935],{"class":243},[79,159445,158037],{"class":96},[79,159447,673],{"class":239},[79,159449,159450,159452,159454,159457],{"class":81,"line":457},[79,159451,1254],{"class":96},[79,159453,685],{"class":239},[79,159455,159456],{"class":89},"\"成年人\"",[79,159458,253],{"class":239},[79,159460,159461,159463],{"class":81,"line":462},[79,159462,3926],{"class":243},[79,159464,673],{"class":239},[79,159466,159467,159469,159471,159474],{"class":81,"line":474},[79,159468,1254],{"class":96},[79,159470,685],{"class":239},[79,159472,159473],{"class":89},"\"未成年人\"",[79,159475,253],{"class":239},[19,159477,159478],{},"执行逻辑：",[26,159480,159481,159487,159492],{},[29,159482,159483,159484,159486],{},"条件成立，执行 ",[59,159485,1329],{}," 代码块。",[29,159488,159489,159490,159486],{},"条件不成立，执行 ",[59,159491,3926],{},[29,159493,159494],{},"两个代码块只会执行其中一个。",[14,159496,159498],{"id":159497},"_34-if-elif-else","3.4 if elif else",[19,159500,159501],{},"多条件判断：",[51,159503,159505],{"className":230,"code":159504,"language":232,"meta":57,"style":57},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[59,159506,159507,159525,159529,159543,159554,159568,159579,159592,159603,159609],{"__ignoreMap":57},[79,159508,159509,159511,159513,159515,159517,159519,159521,159523],{"class":81,"line":82},[79,159510,157110],{"class":239},[79,159512,244],{"class":243},[79,159514,4597],{"class":96},[79,159516,685],{"class":239},[79,159518,55931],{"class":96},[79,159520,685],{"class":239},[79,159522,154161],{"class":89},[79,159524,1191],{"class":239},[79,159526,159527],{"class":81,"line":167},[79,159528,454],{"emptyLinePlaceholder":453},[79,159530,159531,159533,159536,159538,159541],{"class":81,"line":178},[79,159532,1329],{"class":243},[79,159534,159535],{"class":239}," score ",[79,159537,3935],{"class":243},[79,159539,159540],{"class":96}," 90",[79,159542,673],{"class":239},[79,159544,159545,159547,159549,159552],{"class":81,"line":457},[79,159546,1254],{"class":96},[79,159548,685],{"class":239},[79,159550,159551],{"class":89},"\"优秀\"",[79,159553,253],{"class":239},[79,159555,159556,159559,159561,159563,159566],{"class":81,"line":462},[79,159557,159558],{"class":243},"elif",[79,159560,159535],{"class":239},[79,159562,3935],{"class":243},[79,159564,159565],{"class":96}," 80",[79,159567,673],{"class":239},[79,159569,159570,159572,159574,159577],{"class":81,"line":474},[79,159571,1254],{"class":96},[79,159573,685],{"class":239},[79,159575,159576],{"class":89},"\"良好\"",[79,159578,253],{"class":239},[79,159580,159581,159583,159585,159587,159590],{"class":81,"line":480},[79,159582,159558],{"class":243},[79,159584,159535],{"class":239},[79,159586,3935],{"class":243},[79,159588,159589],{"class":96}," 60",[79,159591,673],{"class":239},[79,159593,159594,159596,159598,159601],{"class":81,"line":486},[79,159595,1254],{"class":96},[79,159597,685],{"class":239},[79,159599,159600],{"class":89},"\"及格\"",[79,159602,253],{"class":239},[79,159604,159605,159607],{"class":81,"line":491},[79,159606,3926],{"class":243},[79,159608,673],{"class":239},[79,159610,159611,159613,159615,159618],{"class":81,"line":497},[79,159612,1254],{"class":96},[79,159614,685],{"class":239},[79,159616,159617],{"class":89},"\"不及格\"",[79,159619,253],{"class":239},[19,159621,159622],{},"注意判断顺序很重要。",[19,159624,159625,159626,159629],{},"如果把 ",[59,159627,159628],{},"score >= 60"," 放在最前面：",[51,159631,159633],{"className":230,"code":159632,"language":232,"meta":57,"style":57},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[59,159634,159635,159647,159657,159669],{"__ignoreMap":57},[79,159636,159637,159639,159641,159643,159645],{"class":81,"line":82},[79,159638,1329],{"class":243},[79,159640,159535],{"class":239},[79,159642,3935],{"class":243},[79,159644,159589],{"class":96},[79,159646,673],{"class":239},[79,159648,159649,159651,159653,159655],{"class":81,"line":167},[79,159650,1254],{"class":96},[79,159652,685],{"class":239},[79,159654,159600],{"class":89},[79,159656,253],{"class":239},[79,159658,159659,159661,159663,159665,159667],{"class":81,"line":178},[79,159660,159558],{"class":243},[79,159662,159535],{"class":239},[79,159664,3935],{"class":243},[79,159666,159540],{"class":96},[79,159668,673],{"class":239},[79,159670,159671,159673,159675,159677],{"class":81,"line":457},[79,159672,1254],{"class":96},[79,159674,685],{"class":239},[79,159676,159551],{"class":89},[79,159678,253],{"class":239},[19,159680,159681,159682,159684],{},"成绩 95 会先满足 ",[59,159683,159628],{},"，后面的优秀分支就不会执行。",[14,159686,159688],{"id":159687},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159690,159691],{},"嵌套判断就是在一个判断内部再写判断。",[51,159693,159695],{"className":230,"code":159694,"language":232,"meta":57,"style":57},"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",[59,159696,159697,159715,159730,159734,159746,159760,159770,159777,159788,159794],{"__ignoreMap":57},[79,159698,159699,159701,159703,159705,159707,159709,159711,159713],{"class":81,"line":82},[79,159700,148298],{"class":239},[79,159702,244],{"class":243},[79,159704,4597],{"class":96},[79,159706,685],{"class":239},[79,159708,55931],{"class":96},[79,159710,685],{"class":239},[79,159712,154146],{"class":89},[79,159714,1191],{"class":239},[79,159716,159717,159719,159721,159723,159725,159728],{"class":81,"line":167},[79,159718,158113],{"class":239},[79,159720,244],{"class":243},[79,159722,62715],{"class":96},[79,159724,685],{"class":239},[79,159726,159727],{"class":89},"\"是否有票(y\u002Fn):\"",[79,159729,253],{"class":239},[79,159731,159732],{"class":81,"line":178},[79,159733,454],{"emptyLinePlaceholder":453},[79,159735,159736,159738,159740,159742,159744],{"class":81,"line":457},[79,159737,1329],{"class":243},[79,159739,17867],{"class":239},[79,159741,3935],{"class":243},[79,159743,158037],{"class":96},[79,159745,673],{"class":239},[79,159747,159748,159750,159753,159755,159758],{"class":81,"line":462},[79,159749,662],{"class":243},[79,159751,159752],{"class":239}," has_ticket ",[79,159754,5155],{"class":243},[79,159756,159757],{"class":89}," \"y\"",[79,159759,673],{"class":239},[79,159761,159762,159764,159766,159768],{"class":81,"line":474},[79,159763,34566],{"class":96},[79,159765,685],{"class":239},[79,159767,159399],{"class":89},[79,159769,253],{"class":239},[79,159771,159772,159775],{"class":81,"line":480},[79,159773,159774],{"class":243},"    else",[79,159776,673],{"class":239},[79,159778,159779,159781,159783,159786],{"class":81,"line":486},[79,159780,34566],{"class":96},[79,159782,685],{"class":239},[79,159784,159785],{"class":89},"\"请先买票\"",[79,159787,253],{"class":239},[79,159789,159790,159792],{"class":81,"line":491},[79,159791,3926],{"class":243},[79,159793,673],{"class":239},[79,159795,159796,159798,159800,159803],{"class":81,"line":497},[79,159797,1254],{"class":96},[79,159799,685],{"class":239},[79,159801,159802],{"class":89},"\"未成年人禁止进入\"",[79,159804,253],{"class":239},[19,159806,159807],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159809,159811],{"id":159810},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[265,159813,159815],{"id":159814},"_361-and","3.6.1 and",[19,159817,159818],{},"两个条件都成立才成立。",[51,159820,159822],{"className":230,"code":159821,"language":232,"meta":57,"style":57},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[59,159823,159824,159832,159840,159844,159859],{"__ignoreMap":57},[79,159825,159826,159828,159830],{"class":81,"line":82},[79,159827,148298],{"class":239},[79,159829,244],{"class":243},[79,159831,90170],{"class":96},[79,159833,159834,159836,159838],{"class":81,"line":167},[79,159835,158113],{"class":239},[79,159837,244],{"class":243},[79,159839,155351],{"class":96},[79,159841,159842],{"class":81,"line":178},[79,159843,454],{"emptyLinePlaceholder":453},[79,159845,159846,159848,159850,159852,159854,159856],{"class":81,"line":457},[79,159847,1329],{"class":243},[79,159849,17867],{"class":239},[79,159851,3935],{"class":243},[79,159853,158037],{"class":96},[79,159855,122181],{"class":243},[79,159857,159858],{"class":239}," has_ticket:\n",[79,159860,159861,159863,159865,159867],{"class":81,"line":462},[79,159862,1254],{"class":96},[79,159864,685],{"class":239},[79,159866,159399],{"class":89},[79,159868,253],{"class":239},[265,159870,159872],{"id":159871},"_362-or","3.6.2 or",[19,159874,159875],{},"只要一个条件成立就成立。",[51,159877,159879],{"className":230,"code":159878,"language":232,"meta":57,"style":57},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[59,159880,159881,159890,159899,159903,159915],{"__ignoreMap":57},[79,159882,159883,159886,159888],{"class":81,"line":82},[79,159884,159885],{"class":239},"is_vip ",[79,159887,244],{"class":243},[79,159889,127559],{"class":96},[79,159891,159892,159895,159897],{"class":81,"line":167},[79,159893,159894],{"class":239},"coupon ",[79,159896,244],{"class":243},[79,159898,155351],{"class":96},[79,159900,159901],{"class":81,"line":178},[79,159902,454],{"emptyLinePlaceholder":453},[79,159904,159905,159907,159910,159912],{"class":81,"line":457},[79,159906,1329],{"class":243},[79,159908,159909],{"class":239}," is_vip ",[79,159911,116842],{"class":243},[79,159913,159914],{"class":239}," coupon:\n",[79,159916,159917,159919,159921,159924],{"class":81,"line":462},[79,159918,1254],{"class":96},[79,159920,685],{"class":239},[79,159922,159923],{"class":89},"\"可以享受优惠\"",[79,159925,253],{"class":239},[265,159927,159929],{"id":159928},"_363-not","3.6.3 not",[19,159931,159932],{},"取反。",[51,159934,159936],{"className":230,"code":159935,"language":232,"meta":57,"style":57},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[59,159937,159938,159947,159951,159960],{"__ignoreMap":57},[79,159939,159940,159943,159945],{"class":81,"line":82},[79,159941,159942],{"class":239},"is_closed ",[79,159944,244],{"class":243},[79,159946,127559],{"class":96},[79,159948,159949],{"class":81,"line":167},[79,159950,454],{"emptyLinePlaceholder":453},[79,159952,159953,159955,159957],{"class":81,"line":178},[79,159954,1329],{"class":243},[79,159956,41044],{"class":243},[79,159958,159959],{"class":239}," is_closed:\n",[79,159961,159962,159964,159966,159969],{"class":81,"line":457},[79,159963,1254],{"class":96},[79,159965,685],{"class":239},[79,159967,159968],{"class":89},"\"店铺营业中\"",[79,159970,253],{"class":239},[14,159972,159974],{"id":159973},"_37-链式比较","3.7 链式比较",[19,159976,159977],{},"Python 支持链式比较：",[51,159979,159981],{"className":230,"code":159980,"language":232,"meta":57,"style":57},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[59,159982,159983,159992,159996,160013],{"__ignoreMap":57},[79,159984,159985,159987,159989],{"class":81,"line":82},[79,159986,157110],{"class":239},[79,159988,244],{"class":243},[79,159990,159991],{"class":96}," 85\n",[79,159993,159994],{"class":81,"line":167},[79,159995,454],{"emptyLinePlaceholder":453},[79,159997,159998,160000,160002,160005,160007,160009,160011],{"class":81,"line":178},[79,159999,1329],{"class":243},[79,160001,670],{"class":96},[79,160003,160004],{"class":243}," \u003C=",[79,160006,159535],{"class":239},[79,160008,3824],{"class":243},[79,160010,1140],{"class":96},[79,160012,673],{"class":239},[79,160014,160015,160017,160019,160022],{"class":81,"line":457},[79,160016,1254],{"class":96},[79,160018,685],{"class":239},[79,160020,160021],{"class":89},"\"成绩合法\"",[79,160023,253],{"class":239},[19,160025,160026],{},"等价于：",[51,160028,160030],{"className":230,"code":160029,"language":232,"meta":57,"style":57},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[59,160031,160032,160052],{"__ignoreMap":57},[79,160033,160034,160036,160038,160040,160042,160044,160046,160048,160050],{"class":81,"line":82},[79,160035,1329],{"class":243},[79,160037,159535],{"class":239},[79,160039,3935],{"class":243},[79,160041,670],{"class":96},[79,160043,122181],{"class":243},[79,160045,159535],{"class":239},[79,160047,3824],{"class":243},[79,160049,1140],{"class":96},[79,160051,673],{"class":239},[79,160053,160054,160056,160058,160060],{"class":81,"line":167},[79,160055,1254],{"class":96},[79,160057,685],{"class":239},[79,160059,160021],{"class":89},[79,160061,253],{"class":239},[14,160063,160065],{"id":160064},"_38-真值和假值","3.8 真值和假值",[19,160067,118219,160068,160070],{},[59,160069,1329],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,160072,160073],{},"假值：",[51,160075,160077],{"className":230,"code":160076,"language":232,"meta":57,"style":57},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[59,160078,160079,160083,160088,160092,160096,160101,160105,160109,160114],{"__ignoreMap":57},[79,160080,160081],{"class":81,"line":82},[79,160082,159269],{"class":96},[79,160084,160085],{"class":81,"line":167},[79,160086,160087],{"class":96},"None\n",[79,160089,160090],{"class":81,"line":178},[79,160091,5290],{"class":96},[79,160093,160094],{"class":81,"line":457},[79,160095,34458],{"class":96},[79,160097,160098],{"class":81,"line":462},[79,160099,160100],{"class":89},"\"\"\n",[79,160102,160103],{"class":81,"line":474},[79,160104,34473],{"class":239},[79,160106,160107],{"class":81,"line":480},[79,160108,4191],{"class":239},[79,160110,160111],{"class":81,"line":486},[79,160112,160113],{"class":239},"{}\n",[79,160115,160116,160118],{"class":81,"line":491},[79,160117,157042],{"class":96},[79,160119,4191],{"class":239},[19,160121,17295],{},[51,160123,160125],{"className":230,"code":160124,"language":232,"meta":57,"style":57},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[59,160126,160127,160141,160145,160152,160172,160178],{"__ignoreMap":57},[79,160128,160129,160131,160133,160135,160137,160139],{"class":81,"line":82},[79,160130,148288],{"class":239},[79,160132,244],{"class":243},[79,160134,62715],{"class":96},[79,160136,685],{"class":239},[79,160138,154131],{"class":89},[79,160140,253],{"class":239},[79,160142,160143],{"class":81,"line":167},[79,160144,454],{"emptyLinePlaceholder":453},[79,160146,160147,160149],{"class":81,"line":178},[79,160148,1329],{"class":243},[79,160150,160151],{"class":239}," name:\n",[79,160153,160154,160156,160158,160160,160162,160164,160166,160168,160170],{"class":81,"line":457},[79,160155,1254],{"class":96},[79,160157,685],{"class":239},[79,160159,688],{"class":243},[79,160161,158806],{"class":89},[79,160163,694],{"class":96},[79,160165,697],{"class":239},[79,160167,700],{"class":96},[79,160169,703],{"class":89},[79,160171,253],{"class":239},[79,160173,160174,160176],{"class":81,"line":462},[79,160175,3926],{"class":243},[79,160177,673],{"class":239},[79,160179,160180,160182,160184,160187],{"class":81,"line":474},[79,160181,1254],{"class":96},[79,160183,685],{"class":239},[79,160185,160186],{"class":89},"\"姓名不能为空\"",[79,160188,253],{"class":239},[14,160190,160192],{"id":160191},"_39-match语句","3.9 match语句",[19,160194,160195,160196,160198],{},"Python 3.10 开始支持 ",[59,160197,73373],{},"。它适合处理固定选项。",[51,160200,160202],{"className":230,"code":160201,"language":232,"meta":57,"style":57},"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",[59,160203,160204,160220,160224,160231,160241,160252,160261,160272,160281,160292,160299],{"__ignoreMap":57},[79,160205,160206,160209,160211,160213,160215,160218],{"class":81,"line":82},[79,160207,160208],{"class":239},"command ",[79,160210,244],{"class":243},[79,160212,62715],{"class":96},[79,160214,685],{"class":239},[79,160216,160217],{"class":89},"\"请输入命令:\"",[79,160219,253],{"class":239},[79,160221,160222],{"class":81,"line":167},[79,160223,454],{"emptyLinePlaceholder":453},[79,160225,160226,160228],{"class":81,"line":178},[79,160227,73373],{"class":243},[79,160229,160230],{"class":239}," command:\n",[79,160232,160233,160236,160239],{"class":81,"line":457},[79,160234,160235],{"class":243},"    case",[79,160237,160238],{"class":89}," \"start\"",[79,160240,673],{"class":239},[79,160242,160243,160245,160247,160250],{"class":81,"line":462},[79,160244,34566],{"class":96},[79,160246,685],{"class":239},[79,160248,160249],{"class":89},"\"启动\"",[79,160251,253],{"class":239},[79,160253,160254,160256,160259],{"class":81,"line":474},[79,160255,160235],{"class":243},[79,160257,160258],{"class":89}," \"stop\"",[79,160260,673],{"class":239},[79,160262,160263,160265,160267,160270],{"class":81,"line":480},[79,160264,34566],{"class":96},[79,160266,685],{"class":239},[79,160268,160269],{"class":89},"\"停止\"",[79,160271,253],{"class":239},[79,160273,160274,160276,160279],{"class":81,"line":486},[79,160275,160235],{"class":243},[79,160277,160278],{"class":89}," \"restart\"",[79,160280,673],{"class":239},[79,160282,160283,160285,160287,160290],{"class":81,"line":491},[79,160284,34566],{"class":96},[79,160286,685],{"class":239},[79,160288,160289],{"class":89},"\"重启\"",[79,160291,253],{"class":239},[79,160293,160294,160296],{"class":81,"line":497},[79,160295,160235],{"class":243},[79,160297,160298],{"class":239}," _:\n",[79,160300,160301,160303,160305,160308],{"class":81,"line":503},[79,160302,34566],{"class":96},[79,160304,685],{"class":239},[79,160306,160307],{"class":89},"\"未知命令\"",[79,160309,253],{"class":239},[19,160311,160312,160313,160315,160316,160318],{},"入门阶段掌握 ",[59,160314,156410],{}," 更重要，",[59,160317,73373],{}," 可以作为补充。",[14,160320,160322],{"id":160321},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,160324,125044],{},[26,160326,160327,160330,160333],{},[29,160328,160329],{},"输入成绩。",[29,160331,160332],{},"判断成绩是否合法。",[29,160334,160335],{},"输出等级。",[19,160337,12199],{},[51,160339,160341],{"className":230,"code":160340,"language":232,"meta":57,"style":57},"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",[59,160342,160343,160361,160365,160383,160394,160406,160417,160429,160440,160453,160464,160476,160487,160493],{"__ignoreMap":57},[79,160344,160345,160347,160349,160351,160353,160355,160357,160359],{"class":81,"line":82},[79,160346,157110],{"class":239},[79,160348,244],{"class":243},[79,160350,864],{"class":96},[79,160352,685],{"class":239},[79,160354,55931],{"class":96},[79,160356,685],{"class":239},[79,160358,154161],{"class":89},[79,160360,1191],{"class":239},[79,160362,160363],{"class":81,"line":167},[79,160364,454],{"emptyLinePlaceholder":453},[79,160366,160367,160369,160371,160373,160375,160377,160379,160381],{"class":81,"line":178},[79,160368,1329],{"class":243},[79,160370,41044],{"class":243},[79,160372,670],{"class":96},[79,160374,160004],{"class":243},[79,160376,159535],{"class":239},[79,160378,3824],{"class":243},[79,160380,1140],{"class":96},[79,160382,673],{"class":239},[79,160384,160385,160387,160389,160392],{"class":81,"line":457},[79,160386,1254],{"class":96},[79,160388,685],{"class":239},[79,160390,160391],{"class":89},"\"成绩不合法\"",[79,160393,253],{"class":239},[79,160395,160396,160398,160400,160402,160404],{"class":81,"line":462},[79,160397,159558],{"class":243},[79,160399,159535],{"class":239},[79,160401,3935],{"class":243},[79,160403,159540],{"class":96},[79,160405,673],{"class":239},[79,160407,160408,160410,160412,160415],{"class":81,"line":474},[79,160409,1254],{"class":96},[79,160411,685],{"class":239},[79,160413,160414],{"class":89},"\"等级:A\"",[79,160416,253],{"class":239},[79,160418,160419,160421,160423,160425,160427],{"class":81,"line":480},[79,160420,159558],{"class":243},[79,160422,159535],{"class":239},[79,160424,3935],{"class":243},[79,160426,159565],{"class":96},[79,160428,673],{"class":239},[79,160430,160431,160433,160435,160438],{"class":81,"line":486},[79,160432,1254],{"class":96},[79,160434,685],{"class":239},[79,160436,160437],{"class":89},"\"等级:B\"",[79,160439,253],{"class":239},[79,160441,160442,160444,160446,160448,160451],{"class":81,"line":491},[79,160443,159558],{"class":243},[79,160445,159535],{"class":239},[79,160447,3935],{"class":243},[79,160449,160450],{"class":96}," 70",[79,160452,673],{"class":239},[79,160454,160455,160457,160459,160462],{"class":81,"line":497},[79,160456,1254],{"class":96},[79,160458,685],{"class":239},[79,160460,160461],{"class":89},"\"等级:C\"",[79,160463,253],{"class":239},[79,160465,160466,160468,160470,160472,160474],{"class":81,"line":503},[79,160467,159558],{"class":243},[79,160469,159535],{"class":239},[79,160471,3935],{"class":243},[79,160473,159589],{"class":96},[79,160475,673],{"class":239},[79,160477,160478,160480,160482,160485],{"class":81,"line":509},[79,160479,1254],{"class":96},[79,160481,685],{"class":239},[79,160483,160484],{"class":89},"\"等级:D\"",[79,160486,253],{"class":239},[79,160488,160489,160491],{"class":81,"line":514},[79,160490,3926],{"class":243},[79,160492,673],{"class":239},[79,160494,160495,160497,160499,160502],{"class":81,"line":520},[79,160496,1254],{"class":96},[79,160498,685],{"class":239},[79,160500,160501],{"class":89},"\"等级:E\"",[79,160503,253],{"class":239},[14,160505,160507],{"id":160506},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160509,125044],{},[26,160511,160512,160515,160518,160521],{},[29,160513,160514],{},"输入消费金额。",[29,160516,160517],{},"输入会员等级，普通、银卡、金卡。",[29,160519,160520],{},"普通不打折，银卡 9 折，金卡 8 折。",[29,160522,160523],{},"满 500 再减 50。",[19,160525,12199],{},[51,160527,160529],{"className":230,"code":160528,"language":232,"meta":57,"style":57},"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",[59,160530,160531,160551,160567,160571,160579,160583,160597,160607,160620,160629,160642,160650,160656,160667,160671,160685,160689,160703,160713,160717],{"__ignoreMap":57},[79,160532,160533,160536,160538,160540,160542,160544,160546,160549],{"class":81,"line":82},[79,160534,160535],{"class":239},"amount ",[79,160537,244],{"class":243},[79,160539,864],{"class":96},[79,160541,685],{"class":239},[79,160543,55931],{"class":96},[79,160545,685],{"class":239},[79,160547,160548],{"class":89},"\"请输入消费金额:\"",[79,160550,1191],{"class":239},[79,160552,160553,160556,160558,160560,160562,160565],{"class":81,"line":167},[79,160554,160555],{"class":239},"level ",[79,160557,244],{"class":243},[79,160559,62715],{"class":96},[79,160561,685],{"class":239},[79,160563,160564],{"class":89},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[79,160566,253],{"class":239},[79,160568,160569],{"class":81,"line":178},[79,160570,454],{"emptyLinePlaceholder":453},[79,160572,160573,160575,160577],{"class":81,"line":457},[79,160574,158988],{"class":239},[79,160576,244],{"class":243},[79,160578,57809],{"class":96},[79,160580,160581],{"class":81,"line":462},[79,160582,454],{"emptyLinePlaceholder":453},[79,160584,160585,160587,160590,160592,160595],{"class":81,"line":474},[79,160586,1329],{"class":243},[79,160588,160589],{"class":239}," level ",[79,160591,5155],{"class":243},[79,160593,160594],{"class":89}," \"银卡\"",[79,160596,673],{"class":239},[79,160598,160599,160602,160604],{"class":81,"line":480},[79,160600,160601],{"class":239},"    discount ",[79,160603,244],{"class":243},[79,160605,160606],{"class":96}," 0.9\n",[79,160608,160609,160611,160613,160615,160618],{"class":81,"line":486},[79,160610,159558],{"class":243},[79,160612,160589],{"class":239},[79,160614,5155],{"class":243},[79,160616,160617],{"class":89}," \"金卡\"",[79,160619,673],{"class":239},[79,160621,160622,160624,160626],{"class":81,"line":491},[79,160623,160601],{"class":239},[79,160625,244],{"class":243},[79,160627,160628],{"class":96}," 0.8\n",[79,160630,160631,160633,160635,160637,160640],{"class":81,"line":497},[79,160632,159558],{"class":243},[79,160634,160589],{"class":239},[79,160636,5155],{"class":243},[79,160638,160639],{"class":89}," \"普通\"",[79,160641,673],{"class":239},[79,160643,160644,160646,160648],{"class":81,"line":503},[79,160645,160601],{"class":239},[79,160647,244],{"class":243},[79,160649,57809],{"class":96},[79,160651,160652,160654],{"class":81,"line":509},[79,160653,3926],{"class":243},[79,160655,673],{"class":239},[79,160657,160658,160660,160662,160665],{"class":81,"line":514},[79,160659,1254],{"class":96},[79,160661,685],{"class":239},[79,160663,160664],{"class":89},"\"会员等级输入错误，按普通会员计算\"",[79,160666,253],{"class":239},[79,160668,160669],{"class":81,"line":520},[79,160670,454],{"emptyLinePlaceholder":453},[79,160672,160673,160676,160678,160681,160683],{"class":81,"line":526},[79,160674,160675],{"class":239},"pay ",[79,160677,244],{"class":243},[79,160679,160680],{"class":239}," amount ",[79,160682,2829],{"class":243},[79,160684,159027],{"class":239},[79,160686,160687],{"class":81,"line":532},[79,160688,454],{"emptyLinePlaceholder":453},[79,160690,160691,160693,160696,160698,160701],{"class":81,"line":537},[79,160692,1329],{"class":243},[79,160694,160695],{"class":239}," pay ",[79,160697,3935],{"class":243},[79,160699,160700],{"class":96}," 500",[79,160702,673],{"class":239},[79,160704,160705,160708,160710],{"class":81,"line":543},[79,160706,160707],{"class":239},"    pay ",[79,160709,152004],{"class":243},[79,160711,160712],{"class":96}," 50\n",[79,160714,160715],{"class":81,"line":549},[79,160716,454],{"emptyLinePlaceholder":453},[79,160718,160719,160721,160723,160725,160727,160729,160732,160734,160736,160738],{"class":81,"line":555},[79,160720,32541],{"class":96},[79,160722,685],{"class":239},[79,160724,688],{"class":243},[79,160726,159108],{"class":89},[79,160728,694],{"class":96},[79,160730,160731],{"class":239},"pay",[79,160733,158911],{"class":243},[79,160735,700],{"class":96},[79,160737,158764],{"class":89},[79,160739,253],{"class":239},[14,160741,160743],{"id":160742},"_312-易错点","3.12 易错点",[26,160745,160746,160749,160752,160755,160760],{},[29,160747,160748],{},"冒号不能漏。",[29,160750,160751],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[29,160753,160754],{},"多分支判断要注意顺序。",[29,160756,160757,160758,1604],{},"判断相等用 ",[59,160759,5155],{},[29,160761,160762],{},"字符串比较区分大小写：",[51,160764,160766],{"className":230,"code":160765,"language":232,"meta":57,"style":57},"\"Y\" == \"y\"  # False\n",[59,160767,160768],{"__ignoreMap":57},[79,160769,160770,160773,160775,160777],{"class":81,"line":82},[79,160771,160772],{"class":89},"\"Y\"",[79,160774,1143],{"class":243},[79,160776,159757],{"class":89},[79,160778,160779],{"class":2440},"  # False\n",[19,160781,160782],{},"可转换后再判断：",[51,160784,160786],{"className":230,"code":160785,"language":232,"meta":57,"style":57},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[59,160787,160788,160805,160818],{"__ignoreMap":57},[79,160789,160790,160793,160795,160797,160799,160802],{"class":81,"line":82},[79,160791,160792],{"class":239},"answer ",[79,160794,244],{"class":243},[79,160796,62715],{"class":96},[79,160798,685],{"class":239},[79,160800,160801],{"class":89},"\"是否继续(y\u002Fn):\"",[79,160803,160804],{"class":239},").lower()\n",[79,160806,160807,160809,160812,160814,160816],{"class":81,"line":167},[79,160808,1329],{"class":243},[79,160810,160811],{"class":239}," answer ",[79,160813,5155],{"class":243},[79,160815,159757],{"class":89},[79,160817,673],{"class":239},[79,160819,160820,160822,160824,160827],{"class":81,"line":178},[79,160821,1254],{"class":96},[79,160823,685],{"class":239},[79,160825,160826],{"class":89},"\"继续\"",[79,160828,253],{"class":239},[14,160830,160832],{"id":160831},"_313-本章练习","3.13 本章练习",[26,160834,160835,160838,160841,160844,160854],{},[29,160836,160837],{},"输入年龄，判断是否成年。",[29,160839,160840],{},"输入年份，判断是否为闰年。",[29,160842,160843],{},"输入三个数字，输出最大值。",[29,160845,160846,160847,160850,160851,160853],{},"写登录判断：用户名是 ",[59,160848,160849],{},"admin"," 且密码是 ",[59,160852,17244],{}," 才登录成功。",[29,160855,160856],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[2287,160858,160859],{},"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":57,"searchDepth":167,"depth":167,"links":160861},[160862,160863,160864,160865,160866,160867,160872,160873,160874,160875,160876,160877,160878],{"id":159250,"depth":167,"text":159251},{"id":159303,"depth":167,"text":159304},{"id":159407,"depth":167,"text":159408},{"id":159497,"depth":167,"text":159498},{"id":159687,"depth":167,"text":159688},{"id":159810,"depth":167,"text":159811,"children":160868},[160869,160870,160871],{"id":159814,"depth":178,"text":159815},{"id":159871,"depth":178,"text":159872},{"id":159928,"depth":178,"text":159929},{"id":159973,"depth":167,"text":159974},{"id":160064,"depth":167,"text":160065},{"id":160191,"depth":167,"text":160192},{"id":160321,"depth":167,"text":160322},{"id":160506,"depth":167,"text":160507},{"id":160742,"depth":167,"text":160743},{"id":160831,"depth":167,"text":160832},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159242,"description":25516},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160885,"title":160886,"body":160887,"description":25516,"extension":2314,"meta":162656,"navigation":453,"path":162657,"seo":162658,"stem":162659,"__hash__":162660},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160888,"toc":162636},[160889,160892,160896,160902,160905,160922,160926,160928,160945,160947,160992,160994,161011,161015,161018,161084,161087,161105,161109,161270,161279,161283,161287,161292,161339,161341,161347,161351,161356,161403,161405,161411,161415,161420,161456,161459,161506,161510,161516,161574,161579,161610,161615,161619,161674,161677,161749,161752,161811,161815,161818,161893,161896,161900,162006,162009,162035,162039,162051,162120,162123,162215,162219,162221,162232,162234,162364,162368,162570,162578,162582,162612,162616,162633],[10,160890,160886],{"id":160891},"_4-循环语句",[14,160893,160895],{"id":160894},"_41-为什么需要循环","4.1 为什么需要循环",[19,160897,160898,160899,160901],{},"如果要输出 1 到 100，不应该写 100 行 ",[59,160900,148224],{},"，而应该用循环。",[19,160903,160904],{},"循环适合处理重复任务：",[26,160906,160907,160910,160913,160916,160919],{},[29,160908,160909],{},"重复输出。",[29,160911,160912],{},"重复输入。",[29,160914,160915],{},"遍历数据。",[29,160917,160918],{},"持续执行菜单。",[29,160920,160921],{},"批量处理文件或数据。",[14,160923,160925],{"id":160924},"_42-while循环","4.2 while循环",[19,160927,7379],{},[51,160929,160931],{"className":230,"code":160930,"language":232,"meta":57,"style":57},"while 条件:\n    循环体\n",[59,160932,160933,160940],{"__ignoreMap":57},[79,160934,160935,160937],{"class":81,"line":82},[79,160936,110670],{"class":243},[79,160938,160939],{"class":239}," 条件:\n",[79,160941,160942],{"class":81,"line":167},[79,160943,160944],{"class":239},"    循环体\n",[19,160946,17295],{},[51,160948,160950],{"className":230,"code":160949,"language":232,"meta":57,"style":57},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[59,160951,160952,160960,160964,160976,160983],{"__ignoreMap":57},[79,160953,160954,160956,160958],{"class":81,"line":82},[79,160955,102251],{"class":239},[79,160957,244],{"class":243},[79,160959,57809],{"class":96},[79,160961,160962],{"class":81,"line":167},[79,160963,454],{"emptyLinePlaceholder":453},[79,160965,160966,160968,160970,160972,160974],{"class":81,"line":178},[79,160967,110670],{"class":243},[79,160969,11622],{"class":239},[79,160971,3824],{"class":243},[79,160973,4363],{"class":96},[79,160975,673],{"class":239},[79,160977,160978,160980],{"class":81,"line":457},[79,160979,1254],{"class":96},[79,160981,160982],{"class":239},"(i)\n",[79,160984,160985,160988,160990],{"class":81,"line":462},[79,160986,160987],{"class":239},"    i ",[79,160989,1118],{"class":243},[79,160991,57809],{"class":96},[19,160993,83036],{},[26,160995,160996,161002,161005,161008],{},[29,160997,160998,160999,1604],{},"判断条件 ",[59,161000,161001],{},"i \u003C= 5",[29,161003,161004],{},"条件成立，执行循环体。",[29,161006,161007],{},"执行完后回到条件判断。",[29,161009,161010],{},"条件不成立，退出循环。",[14,161012,161014],{"id":161013},"_43-while累加","4.3 while累加",[19,161016,161017],{},"计算 1 到 100 的和：",[51,161019,161021],{"className":230,"code":161020,"language":232,"meta":57,"style":57},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[59,161022,161023,161031,161039,161043,161055,161065,161073,161077],{"__ignoreMap":57},[79,161024,161025,161027,161029],{"class":81,"line":82},[79,161026,102251],{"class":239},[79,161028,244],{"class":243},[79,161030,57809],{"class":96},[79,161032,161033,161035,161037],{"class":81,"line":167},[79,161034,159012],{"class":239},[79,161036,244],{"class":243},[79,161038,49447],{"class":96},[79,161040,161041],{"class":81,"line":178},[79,161042,454],{"emptyLinePlaceholder":453},[79,161044,161045,161047,161049,161051,161053],{"class":81,"line":457},[79,161046,110670],{"class":243},[79,161048,11622],{"class":239},[79,161050,3824],{"class":243},[79,161052,1140],{"class":96},[79,161054,673],{"class":239},[79,161056,161057,161060,161062],{"class":81,"line":462},[79,161058,161059],{"class":239},"    total ",[79,161061,1118],{"class":243},[79,161063,161064],{"class":239}," i\n",[79,161066,161067,161069,161071],{"class":81,"line":474},[79,161068,160987],{"class":239},[79,161070,1118],{"class":243},[79,161072,57809],{"class":96},[79,161074,161075],{"class":81,"line":480},[79,161076,454],{"emptyLinePlaceholder":453},[79,161078,161079,161081],{"class":81,"line":486},[79,161080,32541],{"class":96},[79,161082,161083],{"class":239},"(total)\n",[19,161085,161086],{},"核心思想：",[26,161088,161089,161094,161099],{},[29,161090,161091,161093],{},[59,161092,2815],{}," 控制循环次数。",[29,161095,161096,161098],{},[59,161097,159113],{}," 保存累加结果。",[29,161100,161101,161102,161104],{},"每轮循环都要更新 ",[59,161103,2815],{},"，否则可能死循环。",[14,161106,161108],{"id":161107},"_44-while猜数字","4.4 while猜数字",[51,161110,161112],{"className":230,"code":161111,"language":232,"meta":57,"style":57},"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",[59,161113,161114,161120,161124,161141,161149,161153,161161,161181,161190,161194,161206,161217,161227,161238,161244,161266],{"__ignoreMap":57},[79,161115,161116,161118],{"class":81,"line":82},[79,161117,432],{"class":243},[79,161119,47442],{"class":239},[79,161121,161122],{"class":81,"line":167},[79,161123,454],{"emptyLinePlaceholder":453},[79,161125,161126,161128,161130,161133,161135,161137,161139],{"class":81,"line":178},[79,161127,160792],{"class":239},[79,161129,244],{"class":243},[79,161131,161132],{"class":239}," random.randint(",[79,161134,1072],{"class":96},[79,161136,1060],{"class":239},[79,161138,2686],{"class":96},[79,161140,253],{"class":239},[79,161142,161143,161145,161147],{"class":81,"line":457},[79,161144,148443],{"class":239},[79,161146,244],{"class":243},[79,161148,49447],{"class":96},[79,161150,161151],{"class":81,"line":462},[79,161152,454],{"emptyLinePlaceholder":453},[79,161154,161155,161157,161159],{"class":81,"line":474},[79,161156,110670],{"class":243},[79,161158,97397],{"class":96},[79,161160,673],{"class":239},[79,161162,161163,161166,161168,161170,161172,161174,161176,161179],{"class":81,"line":480},[79,161164,161165],{"class":239},"    guess ",[79,161167,244],{"class":243},[79,161169,4597],{"class":96},[79,161171,685],{"class":239},[79,161173,55931],{"class":96},[79,161175,685],{"class":239},[79,161177,161178],{"class":89},"\"请输入1到100之间的数字:\"",[79,161180,1191],{"class":239},[79,161182,161183,161186,161188],{"class":81,"line":486},[79,161184,161185],{"class":239},"    count ",[79,161187,1118],{"class":243},[79,161189,57809],{"class":96},[79,161191,161192],{"class":81,"line":491},[79,161193,454],{"emptyLinePlaceholder":453},[79,161195,161196,161198,161201,161203],{"class":81,"line":497},[79,161197,662],{"class":243},[79,161199,161200],{"class":239}," guess ",[79,161202,3330],{"class":243},[79,161204,161205],{"class":239}," answer:\n",[79,161207,161208,161210,161212,161215],{"class":81,"line":503},[79,161209,34566],{"class":96},[79,161211,685],{"class":239},[79,161213,161214],{"class":89},"\"猜大了\"",[79,161216,253],{"class":239},[79,161218,161219,161221,161223,161225],{"class":81,"line":509},[79,161220,41407],{"class":243},[79,161222,161200],{"class":239},[79,161224,392],{"class":243},[79,161226,161205],{"class":239},[79,161228,161229,161231,161233,161236],{"class":81,"line":514},[79,161230,34566],{"class":96},[79,161232,685],{"class":239},[79,161234,161235],{"class":89},"\"猜小了\"",[79,161237,253],{"class":239},[79,161239,161240,161242],{"class":81,"line":520},[79,161241,159774],{"class":243},[79,161243,673],{"class":239},[79,161245,161246,161248,161250,161252,161255,161257,161259,161261,161264],{"class":81,"line":526},[79,161247,34566],{"class":96},[79,161249,685],{"class":239},[79,161251,688],{"class":243},[79,161253,161254],{"class":89},"\"猜对了，一共猜了",[79,161256,694],{"class":96},[79,161258,86539],{"class":239},[79,161260,700],{"class":96},[79,161262,161263],{"class":89},"次\"",[79,161265,253],{"class":239},[79,161267,161268],{"class":81,"line":532},[79,161269,33745],{"class":243},[19,161271,161272,161275,161276,161278],{},[59,161273,161274],{},"while True"," 表示无限循环，通常配合 ",[59,161277,4268],{}," 使用。",[14,161280,161282],{"id":161281},"_45-break和continue","4.5 break和continue",[265,161284,161286],{"id":161285},"_451-break","4.5.1 break",[19,161288,161289,161291],{},[59,161290,4268],{}," 直接结束整个循环。",[51,161293,161295],{"className":230,"code":161294,"language":232,"meta":57,"style":57},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[59,161296,161297,161317,161329,161333],{"__ignoreMap":57},[79,161298,161299,161301,161303,161305,161307,161309,161311,161313,161315],{"class":81,"line":82},[79,161300,1874],{"class":243},[79,161302,11622],{"class":239},[79,161304,955],{"class":243},[79,161306,958],{"class":96},[79,161308,685],{"class":239},[79,161310,1072],{"class":96},[79,161312,1060],{"class":239},[79,161314,2718],{"class":96},[79,161316,966],{"class":239},[79,161318,161319,161321,161323,161325,161327],{"class":81,"line":167},[79,161320,662],{"class":243},[79,161322,11622],{"class":239},[79,161324,5155],{"class":243},[79,161326,80178],{"class":96},[79,161328,673],{"class":239},[79,161330,161331],{"class":81,"line":178},[79,161332,33745],{"class":243},[79,161334,161335,161337],{"class":81,"line":457},[79,161336,1254],{"class":96},[79,161338,160982],{"class":239},[19,161340,148209],{},[51,161342,161345],{"className":161343,"code":161344,"language":56,"meta":57},[54],"1\n2\n",[59,161346,161344],{"__ignoreMap":57},[265,161348,161350],{"id":161349},"_452-continue","4.5.2 continue",[19,161352,161353,161355],{},[59,161354,156424],{}," 跳过本轮剩余代码，进入下一轮循环。",[51,161357,161359],{"className":230,"code":161358,"language":232,"meta":57,"style":57},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[59,161360,161361,161381,161393,161397],{"__ignoreMap":57},[79,161362,161363,161365,161367,161369,161371,161373,161375,161377,161379],{"class":81,"line":82},[79,161364,1874],{"class":243},[79,161366,11622],{"class":239},[79,161368,955],{"class":243},[79,161370,958],{"class":96},[79,161372,685],{"class":239},[79,161374,1072],{"class":96},[79,161376,1060],{"class":239},[79,161378,2718],{"class":96},[79,161380,966],{"class":239},[79,161382,161383,161385,161387,161389,161391],{"class":81,"line":167},[79,161384,662],{"class":243},[79,161386,11622],{"class":239},[79,161388,5155],{"class":243},[79,161390,80178],{"class":96},[79,161392,673],{"class":239},[79,161394,161395],{"class":81,"line":178},[79,161396,150264],{"class":243},[79,161398,161399,161401],{"class":81,"line":457},[79,161400,1254],{"class":96},[79,161402,160982],{"class":239},[19,161404,148209],{},[51,161406,161409],{"className":161407,"code":161408,"language":56,"meta":57},[54],"1\n2\n4\n5\n",[59,161410,161408],{"__ignoreMap":57},[14,161412,161414],{"id":161413},"_46-for循环","4.6 for循环",[19,161416,161417,161419],{},[59,161418,1874],{}," 常用于遍历序列。",[51,161421,161423],{"className":230,"code":161422,"language":232,"meta":57,"style":57},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[59,161424,161425,161434,161438,161449],{"__ignoreMap":57},[79,161426,161427,161429,161431],{"class":81,"line":82},[79,161428,148288],{"class":239},[79,161430,244],{"class":243},[79,161432,161433],{"class":89}," \"python\"\n",[79,161435,161436],{"class":81,"line":167},[79,161437,454],{"emptyLinePlaceholder":453},[79,161439,161440,161442,161445,161447],{"class":81,"line":178},[79,161441,1874],{"class":243},[79,161443,161444],{"class":239}," ch ",[79,161446,955],{"class":243},[79,161448,160151],{"class":239},[79,161450,161451,161453],{"class":81,"line":457},[79,161452,1254],{"class":96},[79,161454,161455],{"class":239},"(ch)\n",[19,161457,161458],{},"遍历列表：",[51,161460,161462],{"className":230,"code":161461,"language":232,"meta":57,"style":57},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[59,161463,161464,161486,161490,161500],{"__ignoreMap":57},[79,161465,161466,161469,161471,161473,161475,161477,161479,161481,161484],{"class":81,"line":82},[79,161467,161468],{"class":239},"students ",[79,161470,244],{"class":243},[79,161472,54339],{"class":239},[79,161474,151640],{"class":89},[79,161476,1060],{"class":239},[79,161478,152688],{"class":89},[79,161480,1060],{"class":239},[79,161482,161483],{"class":89},"\"小刚\"",[79,161485,35361],{"class":239},[79,161487,161488],{"class":81,"line":167},[79,161489,454],{"emptyLinePlaceholder":453},[79,161491,161492,161494,161496,161498],{"class":81,"line":178},[79,161493,1874],{"class":243},[79,161495,153889],{"class":239},[79,161497,955],{"class":243},[79,161499,153894],{"class":239},[79,161501,161502,161504],{"class":81,"line":457},[79,161503,1254],{"class":96},[79,161505,151794],{"class":239},[14,161507,161509],{"id":161508},"_47-range函数","4.7 range函数",[19,161511,161512,161515],{},[59,161513,161514],{},"range()"," 用于生成整数序列。",[51,161517,161519],{"className":230,"code":161518,"language":232,"meta":57,"style":57},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[59,161520,161521,161535,161553],{"__ignoreMap":57},[79,161522,161523,161525,161527,161529,161532],{"class":81,"line":82},[79,161524,35531],{"class":96},[79,161526,685],{"class":239},[79,161528,2694],{"class":96},[79,161530,161531],{"class":239},")          ",[79,161533,161534],{"class":2440},"# 0,1,2,3,4\n",[79,161536,161537,161539,161541,161543,161545,161547,161550],{"class":81,"line":167},[79,161538,35531],{"class":96},[79,161540,685],{"class":239},[79,161542,1072],{"class":96},[79,161544,1060],{"class":239},[79,161546,2694],{"class":96},[79,161548,161549],{"class":239},")       ",[79,161551,161552],{"class":2440},"# 1,2,3,4\n",[79,161554,161555,161557,161559,161561,161563,161565,161567,161569,161571],{"class":81,"line":178},[79,161556,35531],{"class":96},[79,161558,685],{"class":239},[79,161560,1072],{"class":96},[79,161562,1060],{"class":239},[79,161564,2820],{"class":96},[79,161566,1060],{"class":239},[79,161568,1049],{"class":96},[79,161570,157413],{"class":239},[79,161572,161573],{"class":2440},"# 1,3,5,7,9\n",[19,161575,161576,161577,26754],{},"配合 ",[59,161578,1874],{},[51,161580,161582],{"className":230,"code":161581,"language":232,"meta":57,"style":57},"for i in range(1, 6):\n    print(i)\n",[59,161583,161584,161604],{"__ignoreMap":57},[79,161585,161586,161588,161590,161592,161594,161596,161598,161600,161602],{"class":81,"line":82},[79,161587,1874],{"class":243},[79,161589,11622],{"class":239},[79,161591,955],{"class":243},[79,161593,958],{"class":96},[79,161595,685],{"class":239},[79,161597,1072],{"class":96},[79,161599,1060],{"class":239},[79,161601,2718],{"class":96},[79,161603,966],{"class":239},[79,161605,161606,161608],{"class":81,"line":167},[79,161607,1254],{"class":96},[79,161609,160982],{"class":239},[19,161611,11209,161612,161614],{},[59,161613,35531],{}," 的结束值不包含在内。",[14,161616,161618],{"id":161617},"_48-for循环求和","4.8 for循环求和",[51,161620,161622],{"className":230,"code":161621,"language":232,"meta":57,"style":57},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[59,161623,161624,161632,161636,161656,161664,161668],{"__ignoreMap":57},[79,161625,161626,161628,161630],{"class":81,"line":82},[79,161627,159012],{"class":239},[79,161629,244],{"class":243},[79,161631,49447],{"class":96},[79,161633,161634],{"class":81,"line":167},[79,161635,454],{"emptyLinePlaceholder":453},[79,161637,161638,161640,161642,161644,161646,161648,161650,161652,161654],{"class":81,"line":178},[79,161639,1874],{"class":243},[79,161641,11622],{"class":239},[79,161643,955],{"class":243},[79,161645,958],{"class":96},[79,161647,685],{"class":239},[79,161649,1072],{"class":96},[79,161651,1060],{"class":239},[79,161653,2711],{"class":96},[79,161655,966],{"class":239},[79,161657,161658,161660,161662],{"class":81,"line":457},[79,161659,161059],{"class":239},[79,161661,1118],{"class":243},[79,161663,161064],{"class":239},[79,161665,161666],{"class":81,"line":462},[79,161667,454],{"emptyLinePlaceholder":453},[79,161669,161670,161672],{"class":81,"line":474},[79,161671,32541],{"class":96},[79,161673,161083],{"class":239},[19,161675,161676],{},"求偶数和：",[51,161678,161680],{"className":230,"code":161679,"language":232,"meta":57,"style":57},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[59,161681,161682,161690,161694,161714,161730,161739,161743],{"__ignoreMap":57},[79,161683,161684,161686,161688],{"class":81,"line":82},[79,161685,159012],{"class":239},[79,161687,244],{"class":243},[79,161689,49447],{"class":96},[79,161691,161692],{"class":81,"line":167},[79,161693,454],{"emptyLinePlaceholder":453},[79,161695,161696,161698,161700,161702,161704,161706,161708,161710,161712],{"class":81,"line":178},[79,161697,1874],{"class":243},[79,161699,11622],{"class":239},[79,161701,955],{"class":243},[79,161703,958],{"class":96},[79,161705,685],{"class":239},[79,161707,1072],{"class":96},[79,161709,1060],{"class":239},[79,161711,2711],{"class":96},[79,161713,966],{"class":239},[79,161715,161716,161718,161720,161722,161724,161726,161728],{"class":81,"line":457},[79,161717,662],{"class":243},[79,161719,11622],{"class":239},[79,161721,1137],{"class":243},[79,161723,16916],{"class":96},[79,161725,1143],{"class":243},[79,161727,670],{"class":96},[79,161729,673],{"class":239},[79,161731,161732,161735,161737],{"class":81,"line":462},[79,161733,161734],{"class":239},"        total ",[79,161736,1118],{"class":243},[79,161738,161064],{"class":239},[79,161740,161741],{"class":81,"line":474},[79,161742,454],{"emptyLinePlaceholder":453},[79,161744,161745,161747],{"class":81,"line":480},[79,161746,32541],{"class":96},[79,161748,161083],{"class":239},[19,161750,161751],{},"也可以：",[51,161753,161755],{"className":230,"code":161754,"language":232,"meta":57,"style":57},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[59,161756,161757,161765,161769,161793,161801,161805],{"__ignoreMap":57},[79,161758,161759,161761,161763],{"class":81,"line":82},[79,161760,159012],{"class":239},[79,161762,244],{"class":243},[79,161764,49447],{"class":96},[79,161766,161767],{"class":81,"line":167},[79,161768,454],{"emptyLinePlaceholder":453},[79,161770,161771,161773,161775,161777,161779,161781,161783,161785,161787,161789,161791],{"class":81,"line":178},[79,161772,1874],{"class":243},[79,161774,11622],{"class":239},[79,161776,955],{"class":243},[79,161778,958],{"class":96},[79,161780,685],{"class":239},[79,161782,1049],{"class":96},[79,161784,1060],{"class":239},[79,161786,2711],{"class":96},[79,161788,1060],{"class":239},[79,161790,1049],{"class":96},[79,161792,966],{"class":239},[79,161794,161795,161797,161799],{"class":81,"line":457},[79,161796,161059],{"class":239},[79,161798,1118],{"class":243},[79,161800,161064],{"class":239},[79,161802,161803],{"class":81,"line":462},[79,161804,454],{"emptyLinePlaceholder":453},[79,161806,161807,161809],{"class":81,"line":474},[79,161808,32541],{"class":96},[79,161810,161083],{"class":239},[14,161812,161814],{"id":161813},"_49-循环嵌套","4.9 循环嵌套",[19,161816,161817],{},"嵌套循环就是循环里面再写循环。",[51,161819,161821],{"className":230,"code":161820,"language":232,"meta":57,"style":57},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[59,161822,161823,161843,161863],{"__ignoreMap":57},[79,161824,161825,161827,161829,161831,161833,161835,161837,161839,161841],{"class":81,"line":82},[79,161826,1874],{"class":243},[79,161828,11622],{"class":239},[79,161830,955],{"class":243},[79,161832,958],{"class":96},[79,161834,685],{"class":239},[79,161836,1072],{"class":96},[79,161838,1060],{"class":239},[79,161840,2668],{"class":96},[79,161842,966],{"class":239},[79,161844,161845,161847,161849,161851,161853,161855,161857,161859,161861],{"class":81,"line":167},[79,161846,949],{"class":243},[79,161848,11683],{"class":239},[79,161850,955],{"class":243},[79,161852,958],{"class":96},[79,161854,685],{"class":239},[79,161856,1072],{"class":96},[79,161858,1060],{"class":239},[79,161860,2668],{"class":96},[79,161862,966],{"class":239},[79,161864,161865,161867,161869,161871,161874,161876,161878,161880,161883,161885,161887,161889,161891],{"class":81,"line":178},[79,161866,34566],{"class":96},[79,161868,685],{"class":239},[79,161870,688],{"class":243},[79,161872,161873],{"class":89},"\"i=",[79,161875,694],{"class":96},[79,161877,2815],{"class":239},[79,161879,700],{"class":96},[79,161881,161882],{"class":89},", j=",[79,161884,694],{"class":96},[79,161886,2841],{"class":239},[79,161888,700],{"class":96},[79,161890,703],{"class":89},[79,161892,253],{"class":239},[19,161894,161895],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161897,161899],{"id":161898},"_410-九九乘法表","4.10 九九乘法表",[51,161901,161903],{"className":230,"code":161902,"language":232,"meta":57,"style":57},"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",[59,161904,161905,161925,161948,162000],{"__ignoreMap":57},[79,161906,161907,161909,161911,161913,161915,161917,161919,161921,161923],{"class":81,"line":82},[79,161908,1874],{"class":243},[79,161910,11622],{"class":239},[79,161912,955],{"class":243},[79,161914,958],{"class":96},[79,161916,685],{"class":239},[79,161918,1072],{"class":96},[79,161920,1060],{"class":239},[79,161922,2820],{"class":96},[79,161924,966],{"class":239},[79,161926,161927,161929,161931,161933,161935,161937,161939,161942,161944,161946],{"class":81,"line":167},[79,161928,949],{"class":243},[79,161930,11683],{"class":239},[79,161932,955],{"class":243},[79,161934,958],{"class":96},[79,161936,685],{"class":239},[79,161938,1072],{"class":96},[79,161940,161941],{"class":239},", i ",[79,161943,2855],{"class":243},[79,161945,27253],{"class":96},[79,161947,966],{"class":239},[79,161949,161950,161952,161954,161956,161958,161960,161962,161964,161966,161968,161970,161972,161974,161976,161978,161980,161982,161984,161986,161988,161990,161992,161994,161996,161998],{"class":81,"line":178},[79,161951,34566],{"class":96},[79,161953,685],{"class":239},[79,161955,688],{"class":243},[79,161957,703],{"class":89},[79,161959,694],{"class":96},[79,161961,2841],{"class":239},[79,161963,700],{"class":96},[79,161965,2829],{"class":89},[79,161967,694],{"class":96},[79,161969,2815],{"class":239},[79,161971,700],{"class":96},[79,161973,244],{"class":89},[79,161975,694],{"class":96},[79,161977,102251],{"class":239},[79,161979,2829],{"class":243},[79,161981,5613],{"class":239},[79,161983,700],{"class":96},[79,161985,703],{"class":89},[79,161987,1060],{"class":239},[79,161989,47915],{"class":7412},[79,161991,244],{"class":243},[79,161993,703],{"class":89},[79,161995,3471],{"class":96},[79,161997,703],{"class":89},[79,161999,253],{"class":239},[79,162001,162002,162004],{"class":81,"line":457},[79,162003,1254],{"class":96},[79,162005,4191],{"class":239},[19,162007,162008],{},"关键点：",[26,162010,162011,162017,162023,162029],{},[29,162012,162013,162014,162016],{},"外层 ",[59,162015,2815],{}," 控制行。",[29,162018,162019,162020,162022],{},"内层 ",[59,162021,2841],{}," 控制列。",[29,162024,162025,162026,162028],{},"每行结束后用 ",[59,162027,148224],{}," 换行。",[29,162030,162031,162034],{},[59,162032,162033],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,162036,162038],{"id":162037},"_411-循环else","4.11 循环else",[19,162040,162041,162042,162044,162045,162047,162048,162050],{},"Python 的循环可以带 ",[59,162043,3926],{},"。当循环正常结束时执行 ",[59,162046,3926],{},"，如果被 ",[59,162049,4268],{}," 打断，则不执行。",[51,162052,162054],{"className":230,"code":162053,"language":232,"meta":57,"style":57},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[59,162055,162056,162076,162088,162099,162103,162109],{"__ignoreMap":57},[79,162057,162058,162060,162062,162064,162066,162068,162070,162072,162074],{"class":81,"line":82},[79,162059,1874],{"class":243},[79,162061,11622],{"class":239},[79,162063,955],{"class":243},[79,162065,958],{"class":96},[79,162067,685],{"class":239},[79,162069,1072],{"class":96},[79,162071,1060],{"class":239},[79,162073,2718],{"class":96},[79,162075,966],{"class":239},[79,162077,162078,162080,162082,162084,162086],{"class":81,"line":167},[79,162079,662],{"class":243},[79,162081,11622],{"class":239},[79,162083,5155],{"class":243},[79,162085,4253],{"class":96},[79,162087,673],{"class":239},[79,162089,162090,162092,162094,162097],{"class":81,"line":178},[79,162091,34566],{"class":96},[79,162093,685],{"class":239},[79,162095,162096],{"class":89},"\"找到了\"",[79,162098,253],{"class":239},[79,162100,162101],{"class":81,"line":457},[79,162102,33745],{"class":243},[79,162104,162105,162107],{"class":81,"line":462},[79,162106,3926],{"class":243},[79,162108,673],{"class":239},[79,162110,162111,162113,162115,162118],{"class":81,"line":474},[79,162112,1254],{"class":96},[79,162114,685],{"class":239},[79,162116,162117],{"class":89},"\"没找到\"",[79,162119,253],{"class":239},[19,162121,162122],{},"常用于搜索。",[51,162124,162126],{"className":230,"code":162125,"language":232,"meta":57,"style":57},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[59,162127,162128,162149,162158,162162,162174,162185,162195,162199,162205],{"__ignoreMap":57},[79,162129,162130,162133,162135,162137,162139,162141,162143,162145,162147],{"class":81,"line":82},[79,162131,162132],{"class":239},"names ",[79,162134,244],{"class":243},[79,162136,54339],{"class":239},[79,162138,151640],{"class":89},[79,162140,1060],{"class":239},[79,162142,152688],{"class":89},[79,162144,1060],{"class":239},[79,162146,161483],{"class":89},[79,162148,35361],{"class":239},[79,162150,162151,162153,162155],{"class":81,"line":167},[79,162152,294],{"class":239},[79,162154,244],{"class":243},[79,162156,162157],{"class":89}," \"小李\"\n",[79,162159,162160],{"class":81,"line":178},[79,162161,454],{"emptyLinePlaceholder":453},[79,162163,162164,162166,162169,162171],{"class":81,"line":457},[79,162165,1874],{"class":243},[79,162167,162168],{"class":239}," name ",[79,162170,955],{"class":243},[79,162172,162173],{"class":239}," names:\n",[79,162175,162176,162178,162180,162182],{"class":81,"line":462},[79,162177,662],{"class":243},[79,162179,162168],{"class":239},[79,162181,5155],{"class":243},[79,162183,162184],{"class":239}," target:\n",[79,162186,162187,162189,162191,162193],{"class":81,"line":474},[79,162188,34566],{"class":96},[79,162190,685],{"class":239},[79,162192,162096],{"class":89},[79,162194,253],{"class":239},[79,162196,162197],{"class":81,"line":480},[79,162198,33745],{"class":243},[79,162200,162201,162203],{"class":81,"line":486},[79,162202,3926],{"class":243},[79,162204,673],{"class":239},[79,162206,162207,162209,162211,162213],{"class":81,"line":491},[79,162208,1254],{"class":96},[79,162210,685],{"class":239},[79,162212,162117],{"class":89},[79,162214,253],{"class":239},[14,162216,162218],{"id":162217},"_412-小案例登录重试","4.12 小案例：登录重试",[19,162220,125044],{},[26,162222,162223,162226,162229],{},[29,162224,162225],{},"用户最多输入 3 次密码。",[29,162227,162228],{},"密码正确则登录成功。",[29,162230,162231],{},"3 次都错误则锁定账号。",[19,162233,12199],{},[51,162235,162237],{"className":230,"code":162236,"language":232,"meta":57,"style":57},"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",[59,162238,162239,162249,162253,162269,162285,162289,162301,162312,162316,162322,162347,162353],{"__ignoreMap":57},[79,162240,162241,162244,162246],{"class":81,"line":82},[79,162242,162243],{"class":239},"password ",[79,162245,244],{"class":243},[79,162247,162248],{"class":89}," \"123456\"\n",[79,162250,162251],{"class":81,"line":167},[79,162252,454],{"emptyLinePlaceholder":453},[79,162254,162255,162257,162259,162261,162263,162265,162267],{"class":81,"line":178},[79,162256,1874],{"class":243},[79,162258,11622],{"class":239},[79,162260,955],{"class":243},[79,162262,958],{"class":96},[79,162264,685],{"class":239},[79,162266,1188],{"class":96},[79,162268,966],{"class":239},[79,162270,162271,162274,162276,162278,162280,162283],{"class":81,"line":457},[79,162272,162273],{"class":239},"    user_password ",[79,162275,244],{"class":243},[79,162277,62715],{"class":96},[79,162279,685],{"class":239},[79,162281,162282],{"class":89},"\"请输入密码:\"",[79,162284,253],{"class":239},[79,162286,162287],{"class":81,"line":462},[79,162288,454],{"emptyLinePlaceholder":453},[79,162290,162291,162293,162296,162298],{"class":81,"line":474},[79,162292,662],{"class":243},[79,162294,162295],{"class":239}," user_password ",[79,162297,5155],{"class":243},[79,162299,162300],{"class":239}," password:\n",[79,162302,162303,162305,162307,162310],{"class":81,"line":480},[79,162304,34566],{"class":96},[79,162306,685],{"class":239},[79,162308,162309],{"class":89},"\"登录成功\"",[79,162311,253],{"class":239},[79,162313,162314],{"class":81,"line":486},[79,162315,33745],{"class":243},[79,162317,162318,162320],{"class":81,"line":491},[79,162319,159774],{"class":243},[79,162321,673],{"class":239},[79,162323,162324,162326,162328,162330,162333,162336,162338,162340,162342,162345],{"class":81,"line":497},[79,162325,34566],{"class":96},[79,162327,685],{"class":239},[79,162329,688],{"class":243},[79,162331,162332],{"class":89},"\"密码错误，还剩",[79,162334,162335],{"class":96},"{2",[79,162337,333],{"class":243},[79,162339,5237],{"class":239},[79,162341,700],{"class":96},[79,162343,162344],{"class":89},"次机会\"",[79,162346,253],{"class":239},[79,162348,162349,162351],{"class":81,"line":503},[79,162350,3926],{"class":243},[79,162352,673],{"class":239},[79,162354,162355,162357,162359,162362],{"class":81,"line":509},[79,162356,1254],{"class":96},[79,162358,685],{"class":239},[79,162360,162361],{"class":89},"\"账号已锁定\"",[79,162363,253],{"class":239},[14,162365,162367],{"id":162366},"_413-小案例菜单程序","4.13 小案例：菜单程序",[51,162369,162371],{"className":230,"code":162370,"language":232,"meta":57,"style":57},"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",[59,162372,162373,162381,162392,162403,162414,162425,162436,162440,162455,162459,162471,162482,162494,162505,162517,162528,162540,162550,162554,162560],{"__ignoreMap":57},[79,162374,162375,162377,162379],{"class":81,"line":82},[79,162376,110670],{"class":243},[79,162378,97397],{"class":96},[79,162380,673],{"class":239},[79,162382,162383,162385,162387,162390],{"class":81,"line":167},[79,162384,1254],{"class":96},[79,162386,685],{"class":239},[79,162388,162389],{"class":89},"\"====== 菜单 ======\"",[79,162391,253],{"class":239},[79,162393,162394,162396,162398,162401],{"class":81,"line":178},[79,162395,1254],{"class":96},[79,162397,685],{"class":239},[79,162399,162400],{"class":89},"\"1. 查询余额\"",[79,162402,253],{"class":239},[79,162404,162405,162407,162409,162412],{"class":81,"line":457},[79,162406,1254],{"class":96},[79,162408,685],{"class":239},[79,162410,162411],{"class":89},"\"2. 存款\"",[79,162413,253],{"class":239},[79,162415,162416,162418,162420,162423],{"class":81,"line":462},[79,162417,1254],{"class":96},[79,162419,685],{"class":239},[79,162421,162422],{"class":89},"\"3. 取款\"",[79,162424,253],{"class":239},[79,162426,162427,162429,162431,162434],{"class":81,"line":474},[79,162428,1254],{"class":96},[79,162430,685],{"class":239},[79,162432,162433],{"class":89},"\"0. 退出\"",[79,162435,253],{"class":239},[79,162437,162438],{"class":81,"line":480},[79,162439,454],{"emptyLinePlaceholder":453},[79,162441,162442,162445,162447,162449,162451,162453],{"class":81,"line":486},[79,162443,162444],{"class":239},"    choice ",[79,162446,244],{"class":243},[79,162448,62715],{"class":96},[79,162450,685],{"class":239},[79,162452,154825],{"class":89},[79,162454,253],{"class":239},[79,162456,162457],{"class":81,"line":491},[79,162458,454],{"emptyLinePlaceholder":453},[79,162460,162461,162463,162465,162467,162469],{"class":81,"line":497},[79,162462,662],{"class":243},[79,162464,154838],{"class":239},[79,162466,5155],{"class":243},[79,162468,154843],{"class":89},[79,162470,673],{"class":239},[79,162472,162473,162475,162477,162480],{"class":81,"line":503},[79,162474,34566],{"class":96},[79,162476,685],{"class":239},[79,162478,162479],{"class":89},"\"余额为1000元\"",[79,162481,253],{"class":239},[79,162483,162484,162486,162488,162490,162492],{"class":81,"line":509},[79,162485,41407],{"class":243},[79,162487,154838],{"class":239},[79,162489,5155],{"class":243},[79,162491,154862],{"class":89},[79,162493,673],{"class":239},[79,162495,162496,162498,162500,162503],{"class":81,"line":514},[79,162497,34566],{"class":96},[79,162499,685],{"class":239},[79,162501,162502],{"class":89},"\"存款功能\"",[79,162504,253],{"class":239},[79,162506,162507,162509,162511,162513,162515],{"class":81,"line":520},[79,162508,41407],{"class":243},[79,162510,154838],{"class":239},[79,162512,5155],{"class":243},[79,162514,154880],{"class":89},[79,162516,673],{"class":239},[79,162518,162519,162521,162523,162526],{"class":81,"line":526},[79,162520,34566],{"class":96},[79,162522,685],{"class":239},[79,162524,162525],{"class":89},"\"取款功能\"",[79,162527,253],{"class":239},[79,162529,162530,162532,162534,162536,162538],{"class":81,"line":532},[79,162531,41407],{"class":243},[79,162533,154838],{"class":239},[79,162535,5155],{"class":243},[79,162537,154934],{"class":89},[79,162539,673],{"class":239},[79,162541,162542,162544,162546,162548],{"class":81,"line":537},[79,162543,34566],{"class":96},[79,162545,685],{"class":239},[79,162547,154945],{"class":89},[79,162549,253],{"class":239},[79,162551,162552],{"class":81,"line":543},[79,162553,33745],{"class":243},[79,162555,162556,162558],{"class":81,"line":549},[79,162557,159774],{"class":243},[79,162559,673],{"class":239},[79,162561,162562,162564,162566,162568],{"class":81,"line":555},[79,162563,34566],{"class":96},[79,162565,685],{"class":239},[79,162567,154966],{"class":89},[79,162569,253],{"class":239},[19,162571,162572,162573,162575,162576,1604],{},"菜单类程序通常使用 ",[59,162574,161274],{},"，用户选择退出时 ",[59,162577,4268],{},[14,162579,162581],{"id":162580},"_414-易错点","4.14 易错点",[26,162583,162584,162589,162595,162603,162609],{},[29,162585,162586,162588],{},[59,162587,110670],{}," 循环必须更新控制变量。",[29,162590,162591,162594],{},[59,162592,162593],{},"range(1, 10)"," 不包含 10。",[29,162596,162597,162599,162600,162602],{},[59,162598,4268],{}," 结束整个循环，",[59,162601,156424],{}," 只跳过本轮。",[29,162604,162605,162606,162608],{},"嵌套循环中，",[59,162607,4268],{}," 只跳出当前所在的一层循环。",[29,162610,162611],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162613,162615],{"id":162614},"_415-本章练习","4.15 本章练习",[26,162617,162618,162621,162624,162627,162630],{},[29,162619,162620],{},"输出 1 到 100。",[29,162622,162623],{},"计算 1 到 100 的偶数和。",[29,162625,162626],{},"输出 100 以内能被 3 和 5 同时整除的数。",[29,162628,162629],{},"编写猜数字游戏，限制最多猜 7 次。",[29,162631,162632],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[2287,162634,162635],{},"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":57,"searchDepth":167,"depth":167,"links":162637},[162638,162639,162640,162641,162642,162646,162647,162648,162649,162650,162651,162652,162653,162654,162655],{"id":160894,"depth":167,"text":160895},{"id":160924,"depth":167,"text":160925},{"id":161013,"depth":167,"text":161014},{"id":161107,"depth":167,"text":161108},{"id":161281,"depth":167,"text":161282,"children":162643},[162644,162645],{"id":161285,"depth":178,"text":161286},{"id":161349,"depth":178,"text":161350},{"id":161413,"depth":167,"text":161414},{"id":161508,"depth":167,"text":161509},{"id":161617,"depth":167,"text":161618},{"id":161813,"depth":167,"text":161814},{"id":161898,"depth":167,"text":161899},{"id":162037,"depth":167,"text":162038},{"id":162217,"depth":167,"text":162218},{"id":162366,"depth":167,"text":162367},{"id":162580,"depth":167,"text":162581},{"id":162614,"depth":167,"text":162615},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160886,"description":25516},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162662,"title":162663,"body":162664,"description":25516,"extension":2314,"meta":164669,"navigation":453,"path":164670,"seo":164671,"stem":164672,"__hash__":164673},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162665,"toc":164649},[162666,162669,162673,162676,162679,162693,162696,162710,162714,162716,162735,162737,162784,162786,162800,162804,162878,162881,162885,162888,162947,162955,162958,163011,163014,163018,163023,163078,163086,163136,163140,163145,163153,163252,163258,163262,163267,163270,163281,163322,163335,163339,163342,163378,163381,163394,163397,163457,163461,163465,163468,163519,163523,163526,163573,163579,163645,163648,163652,163655,163771,163774,163778,163781,163887,163891,163894,163932,163935,163977,163980,164040,164043,164047,164511,164514,164518,164545,164551,164612,164616,164646],[10,162667,162663],{"id":162668},"_5-函数基础",[14,162670,162672],{"id":162671},"_51-为什么需要函数","5.1 为什么需要函数",[19,162674,162675],{},"函数用于封装一段可以重复使用的代码。",[19,162677,162678],{},"不使用函数的问题：",[26,162680,162681,162684,162687,162690],{},[29,162682,162683],{},"重复代码多。",[29,162685,162686],{},"修改逻辑时容易漏改。",[29,162688,162689],{},"主流程不清晰。",[29,162691,162692],{},"程序越写越长，难以维护。",[19,162694,162695],{},"使用函数后的好处：",[26,162697,162698,162701,162704,162707],{},[29,162699,162700],{},"提高复用性。",[29,162702,162703],{},"提高可读性。",[29,162705,162706],{},"便于调试。",[29,162708,162709],{},"便于分工。",[14,162711,162713],{"id":162712},"_52-函数定义","5.2 函数定义",[19,162715,7379],{},[51,162717,162719],{"className":230,"code":162718,"language":232,"meta":57,"style":57},"def 函数名():\n    函数体\n",[59,162720,162721,162730],{"__ignoreMap":57},[79,162722,162723,162725,162728],{"class":81,"line":82},[79,162724,633],{"class":243},[79,162726,162727],{"class":85}," 函数名",[79,162729,34070],{"class":239},[79,162731,162732],{"class":81,"line":167},[79,162733,162734],{"class":239},"    函数体\n",[19,162736,17295],{},[51,162738,162740],{"className":230,"code":162739,"language":232,"meta":57,"style":57},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[59,162741,162742,162751,162761,162771,162775,162779],{"__ignoreMap":57},[79,162743,162744,162746,162749],{"class":81,"line":82},[79,162745,633],{"class":243},[79,162747,162748],{"class":85}," say_hello",[79,162750,34070],{"class":239},[79,162752,162753,162755,162757,162759],{"class":81,"line":167},[79,162754,1254],{"class":96},[79,162756,685],{"class":239},[79,162758,8039],{"class":89},[79,162760,253],{"class":239},[79,162762,162763,162765,162767,162769],{"class":81,"line":178},[79,162764,1254],{"class":96},[79,162766,685],{"class":239},[79,162768,148391],{"class":89},[79,162770,253],{"class":239},[79,162772,162773],{"class":81,"line":457},[79,162774,454],{"emptyLinePlaceholder":453},[79,162776,162777],{"class":81,"line":462},[79,162778,454],{"emptyLinePlaceholder":453},[79,162780,162781],{"class":81,"line":474},[79,162782,162783],{"class":239},"say_hello()\n",[19,162785,11209],{},[26,162787,162788,162791,162794,162797],{},[29,162789,162790],{},"函数必须先定义，再调用。",[29,162792,162793],{},"函数名遵循变量命名规则。",[29,162795,162796],{},"函数体需要缩进。",[29,162798,162799],{},"函数不调用就不会执行。",[14,162801,162803],{"id":162802},"_53-函数调用","5.3 函数调用",[51,162805,162807],{"className":230,"code":162806,"language":232,"meta":57,"style":57},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[59,162808,162809,162818,162829,162840,162851,162861,162865,162869,162874],{"__ignoreMap":57},[79,162810,162811,162813,162816],{"class":81,"line":82},[79,162812,633],{"class":243},[79,162814,162815],{"class":85}," print_menu",[79,162817,34070],{"class":239},[79,162819,162820,162822,162824,162827],{"class":81,"line":167},[79,162821,1254],{"class":96},[79,162823,685],{"class":239},[79,162825,162826],{"class":89},"\"1. 查询\"",[79,162828,253],{"class":239},[79,162830,162831,162833,162835,162838],{"class":81,"line":178},[79,162832,1254],{"class":96},[79,162834,685],{"class":239},[79,162836,162837],{"class":89},"\"2. 添加\"",[79,162839,253],{"class":239},[79,162841,162842,162844,162846,162849],{"class":81,"line":457},[79,162843,1254],{"class":96},[79,162845,685],{"class":239},[79,162847,162848],{"class":89},"\"3. 删除\"",[79,162850,253],{"class":239},[79,162852,162853,162855,162857,162859],{"class":81,"line":462},[79,162854,1254],{"class":96},[79,162856,685],{"class":239},[79,162858,162433],{"class":89},[79,162860,253],{"class":239},[79,162862,162863],{"class":81,"line":474},[79,162864,454],{"emptyLinePlaceholder":453},[79,162866,162867],{"class":81,"line":480},[79,162868,454],{"emptyLinePlaceholder":453},[79,162870,162871],{"class":81,"line":486},[79,162872,162873],{"class":239},"print_menu()\n",[79,162875,162876],{"class":81,"line":491},[79,162877,162873],{"class":239},[19,162879,162880],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162882,162884],{"id":162883},"_54-参数","5.4 参数",[19,162886,162887],{},"参数用于向函数传递数据。",[51,162889,162891],{"className":230,"code":162890,"language":232,"meta":57,"style":57},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[59,162892,162893,162902,162922,162926,162930,162939],{"__ignoreMap":57},[79,162894,162895,162897,162899],{"class":81,"line":82},[79,162896,633],{"class":243},[79,162898,162748],{"class":85},[79,162900,162901],{"class":239},"(name):\n",[79,162903,162904,162906,162908,162910,162912,162914,162916,162918,162920],{"class":81,"line":167},[79,162905,1254],{"class":96},[79,162907,685],{"class":239},[79,162909,688],{"class":243},[79,162911,158806],{"class":89},[79,162913,694],{"class":96},[79,162915,697],{"class":239},[79,162917,700],{"class":96},[79,162919,703],{"class":89},[79,162921,253],{"class":239},[79,162923,162924],{"class":81,"line":178},[79,162925,454],{"emptyLinePlaceholder":453},[79,162927,162928],{"class":81,"line":457},[79,162929,454],{"emptyLinePlaceholder":453},[79,162931,162932,162935,162937],{"class":81,"line":462},[79,162933,162934],{"class":239},"say_hello(",[79,162936,151640],{"class":89},[79,162938,253],{"class":239},[79,162940,162941,162943,162945],{"class":81,"line":474},[79,162942,162934],{"class":239},[79,162944,152688],{"class":89},[79,162946,253],{"class":239},[19,162948,162949,162951,162952,162954],{},[59,162950,697],{}," 是形参，",[59,162953,151640],{}," 是实参。",[19,162956,162957],{},"多个参数：",[51,162959,162961],{"className":230,"code":162960,"language":232,"meta":57,"style":57},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[59,162962,162963,162971,162984,162990,162994,162998],{"__ignoreMap":57},[79,162964,162965,162967,162969],{"class":81,"line":82},[79,162966,633],{"class":243},[79,162968,7405],{"class":85},[79,162970,152845],{"class":239},[79,162972,162973,162976,162978,162980,162982],{"class":81,"line":167},[79,162974,162975],{"class":239},"    result ",[79,162977,244],{"class":243},[79,162979,13033],{"class":239},[79,162981,2855],{"class":243},[79,162983,152856],{"class":239},[79,162985,162986,162988],{"class":81,"line":178},[79,162987,1254],{"class":96},[79,162989,78693],{"class":239},[79,162991,162992],{"class":81,"line":457},[79,162993,454],{"emptyLinePlaceholder":453},[79,162995,162996],{"class":81,"line":462},[79,162997,454],{"emptyLinePlaceholder":453},[79,162999,163000,163003,163005,163007,163009],{"class":81,"line":474},[79,163001,163002],{"class":239},"add(",[79,163004,2820],{"class":96},[79,163006,1060],{"class":239},[79,163008,3073],{"class":96},[79,163010,253],{"class":239},[19,163012,163013],{},"调用时参数数量必须匹配。",[14,163015,163017],{"id":163016},"_55-返回值","5.5 返回值",[19,163019,163020,163022],{},[59,163021,1414],{}," 用于把函数内部的结果返回给调用者。",[51,163024,163026],{"className":230,"code":163025,"language":232,"meta":57,"style":57},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[59,163027,163028,163036,163046,163050,163054,163072],{"__ignoreMap":57},[79,163029,163030,163032,163034],{"class":81,"line":82},[79,163031,633],{"class":243},[79,163033,7405],{"class":85},[79,163035,152845],{"class":239},[79,163037,163038,163040,163042,163044],{"class":81,"line":167},[79,163039,711],{"class":243},[79,163041,13033],{"class":239},[79,163043,2855],{"class":243},[79,163045,152856],{"class":239},[79,163047,163048],{"class":81,"line":178},[79,163049,454],{"emptyLinePlaceholder":453},[79,163051,163052],{"class":81,"line":457},[79,163053,454],{"emptyLinePlaceholder":453},[79,163055,163056,163059,163061,163064,163066,163068,163070],{"class":81,"line":462},[79,163057,163058],{"class":239},"result ",[79,163060,244],{"class":243},[79,163062,163063],{"class":239}," add(",[79,163065,2820],{"class":96},[79,163067,1060],{"class":239},[79,163069,3073],{"class":96},[79,163071,253],{"class":239},[79,163073,163074,163076],{"class":81,"line":474},[79,163075,32541],{"class":96},[79,163077,78693],{"class":239},[19,163079,163080,163081,163083,163084,1604],{},"如果函数没有写 ",[59,163082,1414],{},"，默认返回 ",[59,163085,899],{},[51,163087,163089],{"className":230,"code":163088,"language":232,"meta":57,"style":57},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[59,163090,163091,163099,163109,163113,163117,163126],{"__ignoreMap":57},[79,163092,163093,163095,163097],{"class":81,"line":82},[79,163094,633],{"class":243},[79,163096,162748],{"class":85},[79,163098,34070],{"class":239},[79,163100,163101,163103,163105,163107],{"class":81,"line":167},[79,163102,1254],{"class":96},[79,163104,685],{"class":239},[79,163106,8039],{"class":89},[79,163108,253],{"class":239},[79,163110,163111],{"class":81,"line":178},[79,163112,454],{"emptyLinePlaceholder":453},[79,163114,163115],{"class":81,"line":457},[79,163116,454],{"emptyLinePlaceholder":453},[79,163118,163119,163121,163123],{"class":81,"line":462},[79,163120,163058],{"class":239},[79,163122,244],{"class":243},[79,163124,163125],{"class":239}," say_hello()\n",[79,163127,163128,163130,163133],{"class":81,"line":474},[79,163129,32541],{"class":96},[79,163131,163132],{"class":239},"(result)  ",[79,163134,163135],{"class":2440},"# None\n",[14,163137,163139],{"id":163138},"_56-return的作用","5.6 return的作用",[19,163141,163142,163144],{},[59,163143,1414],{}," 有两个作用：",[26,163146,163147,163150],{},[29,163148,163149],{},"返回结果。",[29,163151,163152],{},"结束函数。",[51,163154,163156],{"className":230,"code":163155,"language":232,"meta":57,"style":57},"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",[59,163157,163158,163168,163180,163187,163191,163203,163210,163214,163221,163225,163229,163240],{"__ignoreMap":57},[79,163159,163160,163162,163165],{"class":81,"line":82},[79,163161,633],{"class":243},[79,163163,163164],{"class":85}," check_age",[79,163166,163167],{"class":239},"(age):\n",[79,163169,163170,163172,163174,163176,163178],{"class":81,"line":167},[79,163171,662],{"class":243},[79,163173,17867],{"class":239},[79,163175,392],{"class":243},[79,163177,670],{"class":96},[79,163179,673],{"class":239},[79,163181,163182,163184],{"class":81,"line":178},[79,163183,16913],{"class":243},[79,163185,163186],{"class":89}," \"年龄不合法\"\n",[79,163188,163189],{"class":81,"line":457},[79,163190,454],{"emptyLinePlaceholder":453},[79,163192,163193,163195,163197,163199,163201],{"class":81,"line":462},[79,163194,662],{"class":243},[79,163196,17867],{"class":239},[79,163198,3935],{"class":243},[79,163200,158037],{"class":96},[79,163202,673],{"class":239},[79,163204,163205,163207],{"class":81,"line":474},[79,163206,16913],{"class":243},[79,163208,163209],{"class":89}," \"成年人\"\n",[79,163211,163212],{"class":81,"line":480},[79,163213,454],{"emptyLinePlaceholder":453},[79,163215,163216,163218],{"class":81,"line":486},[79,163217,711],{"class":243},[79,163219,163220],{"class":89}," \"未成年人\"\n",[79,163222,163223],{"class":81,"line":491},[79,163224,454],{"emptyLinePlaceholder":453},[79,163226,163227],{"class":81,"line":497},[79,163228,454],{"emptyLinePlaceholder":453},[79,163230,163231,163233,163236,163238],{"class":81,"line":503},[79,163232,32541],{"class":96},[79,163234,163235],{"class":239},"(check_age(",[79,163237,3073],{"class":96},[79,163239,1191],{"class":239},[79,163241,163242,163244,163246,163248,163250],{"class":81,"line":509},[79,163243,32541],{"class":96},[79,163245,163235],{"class":239},[79,163247,320],{"class":243},[79,163249,1072],{"class":96},[79,163251,1191],{"class":239},[19,163253,163254,163255,163257],{},"函数执行到 ",[59,163256,1414],{}," 后，后面的代码不会继续执行。",[14,163259,163261],{"id":163260},"_57-none","5.7 None",[19,163263,163264,163266],{},[59,163265,899],{}," 表示空值或没有结果。",[19,163268,163269],{},"常见使用场景：",[26,163271,163272,163275,163278],{},[29,163273,163274],{},"函数没有返回值。",[29,163276,163277],{},"变量暂时没有具体值。",[29,163279,163280],{},"表示查询不到结果。",[51,163282,163284],{"className":230,"code":163283,"language":232,"meta":57,"style":57},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[59,163285,163286,163294,163298,163311],{"__ignoreMap":57},[79,163287,163288,163290,163292],{"class":81,"line":82},[79,163289,163058],{"class":239},[79,163291,244],{"class":243},[79,163293,153924],{"class":96},[79,163295,163296],{"class":81,"line":167},[79,163297,454],{"emptyLinePlaceholder":453},[79,163299,163300,163302,163305,163307,163309],{"class":81,"line":178},[79,163301,1329],{"class":243},[79,163303,163304],{"class":239}," result ",[79,163306,41041],{"class":243},[79,163308,41047],{"class":96},[79,163310,673],{"class":239},[79,163312,163313,163315,163317,163320],{"class":81,"line":457},[79,163314,1254],{"class":96},[79,163316,685],{"class":239},[79,163318,163319],{"class":89},"\"没有数据\"",[79,163321,253],{"class":239},[19,163323,163324,163325,163327,163328,163331,163332,1604],{},"判断 ",[59,163326,899],{}," 推荐使用 ",[59,163329,163330],{},"is None","，不要写成 ",[59,163333,163334],{},"== None",[14,163336,163338],{"id":163337},"_58-函数文档字符串","5.8 函数文档字符串",[19,163340,163341],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[51,163343,163345],{"className":230,"code":163344,"language":232,"meta":57,"style":57},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[59,163346,163347,163357,163362],{"__ignoreMap":57},[79,163348,163349,163351,163354],{"class":81,"line":82},[79,163350,633],{"class":243},[79,163352,163353],{"class":85}," calculate_bmi",[79,163355,163356],{"class":239},"(weight, height):\n",[79,163358,163359],{"class":81,"line":167},[79,163360,163361],{"class":89},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[79,163363,163364,163366,163369,163371,163374,163376],{"class":81,"line":178},[79,163365,711],{"class":243},[79,163367,163368],{"class":239}," weight ",[79,163370,2957],{"class":243},[79,163372,163373],{"class":239}," height ",[79,163375,12825],{"class":243},[79,163377,49837],{"class":96},[19,163379,163380],{},"查看说明：",[51,163382,163384],{"className":230,"code":163383,"language":232,"meta":57,"style":57},"help(calculate_bmi)\n",[59,163385,163386],{"__ignoreMap":57},[79,163387,163388,163391],{"class":81,"line":82},[79,163389,163390],{"class":96},"help",[79,163392,163393],{"class":239},"(calculate_bmi)\n",[19,163395,163396],{},"较完整的写法：",[51,163398,163400],{"className":230,"code":163399,"language":232,"meta":57,"style":57},"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",[59,163401,163402,163410,163415,163420,163424,163429,163434,163439,163443],{"__ignoreMap":57},[79,163403,163404,163406,163408],{"class":81,"line":82},[79,163405,633],{"class":243},[79,163407,163353],{"class":85},[79,163409,163356],{"class":239},[79,163411,163412],{"class":81,"line":167},[79,163413,163414],{"class":89},"    \"\"\"\n",[79,163416,163417],{"class":81,"line":178},[79,163418,163419],{"class":89},"    计算BMI。\n",[79,163421,163422],{"class":81,"line":457},[79,163423,454],{"emptyLinePlaceholder":453},[79,163425,163426],{"class":81,"line":462},[79,163427,163428],{"class":89},"    :param weight: 体重，单位kg\n",[79,163430,163431],{"class":81,"line":474},[79,163432,163433],{"class":89},"    :param height: 身高，单位m\n",[79,163435,163436],{"class":81,"line":480},[79,163437,163438],{"class":89},"    :return: BMI数值\n",[79,163440,163441],{"class":81,"line":486},[79,163442,163414],{"class":89},[79,163444,163445,163447,163449,163451,163453,163455],{"class":81,"line":491},[79,163446,711],{"class":243},[79,163448,163368],{"class":239},[79,163450,2957],{"class":243},[79,163452,163373],{"class":239},[79,163454,12825],{"class":243},[79,163456,49837],{"class":96},[14,163458,163460],{"id":163459},"_59-变量作用域","5.9 变量作用域",[265,163462,163464],{"id":163463},"_591-局部变量","5.9.1 局部变量",[19,163466,163467],{},"在函数内部定义的变量，只能在函数内部使用。",[51,163469,163471],{"className":230,"code":163470,"language":232,"meta":57,"style":57},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[59,163472,163473,163482,163490,163496,163500,163504,163509],{"__ignoreMap":57},[79,163474,163475,163477,163480],{"class":81,"line":82},[79,163476,633],{"class":243},[79,163478,163479],{"class":85}," test",[79,163481,34070],{"class":239},[79,163483,163484,163486,163488],{"class":81,"line":167},[79,163485,47707],{"class":239},[79,163487,244],{"class":243},[79,163489,60538],{"class":96},[79,163491,163492,163494],{"class":81,"line":178},[79,163493,1254],{"class":96},[79,163495,2399],{"class":239},[79,163497,163498],{"class":81,"line":457},[79,163499,454],{"emptyLinePlaceholder":453},[79,163501,163502],{"class":81,"line":462},[79,163503,454],{"emptyLinePlaceholder":453},[79,163505,163506],{"class":81,"line":474},[79,163507,163508],{"class":239},"test()\n",[79,163510,163511,163513,163516],{"class":81,"line":480},[79,163512,32541],{"class":96},[79,163514,163515],{"class":239},"(num)  ",[79,163517,163518],{"class":2440},"# 报错\n",[265,163520,163522],{"id":163521},"_592-全局变量","5.9.2 全局变量",[19,163524,163525],{},"在函数外部定义的变量，可以在函数内部读取。",[51,163527,163529],{"className":230,"code":163528,"language":232,"meta":57,"style":57},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[59,163530,163531,163539,163543,163547,163555,163561,163565,163569],{"__ignoreMap":57},[79,163532,163533,163535,163537],{"class":81,"line":82},[79,163534,148288],{"class":239},[79,163536,244],{"class":243},[79,163538,151105],{"class":89},[79,163540,163541],{"class":81,"line":167},[79,163542,454],{"emptyLinePlaceholder":453},[79,163544,163545],{"class":81,"line":178},[79,163546,454],{"emptyLinePlaceholder":453},[79,163548,163549,163551,163553],{"class":81,"line":457},[79,163550,633],{"class":243},[79,163552,162748],{"class":85},[79,163554,34070],{"class":239},[79,163556,163557,163559],{"class":81,"line":462},[79,163558,1254],{"class":96},[79,163560,152412],{"class":239},[79,163562,163563],{"class":81,"line":474},[79,163564,454],{"emptyLinePlaceholder":453},[79,163566,163567],{"class":81,"line":480},[79,163568,454],{"emptyLinePlaceholder":453},[79,163570,163571],{"class":81,"line":486},[79,163572,162783],{"class":239},[19,163574,163575,163576,1604],{},"如果要在函数内部修改全局变量，需要 ",[59,163577,163578],{},"global",[51,163580,163582],{"className":230,"code":163581,"language":232,"meta":57,"style":57},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[59,163583,163584,163592,163596,163600,163609,163617,163625,163629,163633,163638],{"__ignoreMap":57},[79,163585,163586,163588,163590],{"class":81,"line":82},[79,163587,148443],{"class":239},[79,163589,244],{"class":243},[79,163591,49447],{"class":96},[79,163593,163594],{"class":81,"line":167},[79,163595,454],{"emptyLinePlaceholder":453},[79,163597,163598],{"class":81,"line":178},[79,163599,454],{"emptyLinePlaceholder":453},[79,163601,163602,163604,163607],{"class":81,"line":457},[79,163603,633],{"class":243},[79,163605,163606],{"class":85}," add_count",[79,163608,34070],{"class":239},[79,163610,163611,163614],{"class":81,"line":462},[79,163612,163613],{"class":243},"    global",[79,163615,163616],{"class":239}," count\n",[79,163618,163619,163621,163623],{"class":81,"line":474},[79,163620,161185],{"class":239},[79,163622,1118],{"class":243},[79,163624,57809],{"class":96},[79,163626,163627],{"class":81,"line":480},[79,163628,454],{"emptyLinePlaceholder":453},[79,163630,163631],{"class":81,"line":486},[79,163632,454],{"emptyLinePlaceholder":453},[79,163634,163635],{"class":81,"line":491},[79,163636,163637],{"class":239},"add_count()\n",[79,163639,163640,163642],{"class":81,"line":497},[79,163641,32541],{"class":96},[79,163643,163644],{"class":239},"(count)\n",[19,163646,163647],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163649,163651],{"id":163650},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163653,163654],{},"一个函数中可以调用另一个函数。",[51,163656,163658],{"className":230,"code":163657,"language":232,"meta":57,"style":57},"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",[59,163659,163660,163669,163683,163687,163691,163700,163705,163725,163746,163750,163754,163758],{"__ignoreMap":57},[79,163661,163662,163664,163667],{"class":81,"line":82},[79,163663,633],{"class":243},[79,163665,163666],{"class":85}," print_line",[79,163668,34070],{"class":239},[79,163670,163671,163673,163675,163677,163679,163681],{"class":81,"line":167},[79,163672,1254],{"class":96},[79,163674,685],{"class":239},[79,163676,34598],{"class":89},[79,163678,853],{"class":243},[79,163680,80773],{"class":96},[79,163682,253],{"class":239},[79,163684,163685],{"class":81,"line":178},[79,163686,454],{"emptyLinePlaceholder":453},[79,163688,163689],{"class":81,"line":457},[79,163690,454],{"emptyLinePlaceholder":453},[79,163692,163693,163695,163698],{"class":81,"line":462},[79,163694,633],{"class":243},[79,163696,163697],{"class":85}," print_info",[79,163699,151127],{"class":239},[79,163701,163702],{"class":81,"line":474},[79,163703,163704],{"class":239},"    print_line()\n",[79,163706,163707,163709,163711,163713,163715,163717,163719,163721,163723],{"class":81,"line":480},[79,163708,1254],{"class":96},[79,163710,685],{"class":239},[79,163712,688],{"class":243},[79,163714,158434],{"class":89},[79,163716,694],{"class":96},[79,163718,697],{"class":239},[79,163720,700],{"class":96},[79,163722,703],{"class":89},[79,163724,253],{"class":239},[79,163726,163727,163729,163731,163733,163736,163738,163740,163742,163744],{"class":81,"line":486},[79,163728,1254],{"class":96},[79,163730,685],{"class":239},[79,163732,688],{"class":243},[79,163734,163735],{"class":89},"\"年龄:",[79,163737,694],{"class":96},[79,163739,72329],{"class":239},[79,163741,700],{"class":96},[79,163743,703],{"class":89},[79,163745,253],{"class":239},[79,163747,163748],{"class":81,"line":491},[79,163749,163704],{"class":239},[79,163751,163752],{"class":81,"line":497},[79,163753,454],{"emptyLinePlaceholder":453},[79,163755,163756],{"class":81,"line":503},[79,163757,454],{"emptyLinePlaceholder":453},[79,163759,163760,163763,163765,163767,163769],{"class":81,"line":509},[79,163761,163762],{"class":239},"print_info(",[79,163764,151640],{"class":89},[79,163766,1060],{"class":239},[79,163768,3023],{"class":96},[79,163770,253],{"class":239},[19,163772,163773],{},"这种方式可以把小功能组合成大功能。",[14,163775,163777],{"id":163776},"_511-参数检查","5.11 参数检查",[19,163779,163780],{},"函数内部可以检查参数是否合法。",[51,163782,163784],{"className":230,"code":163783,"language":232,"meta":57,"style":57},"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",[59,163785,163786,163795,163807,163813,163823,163827,163831,163848,163852,163864,163875,163881],{"__ignoreMap":57},[79,163787,163788,163790,163793],{"class":81,"line":82},[79,163789,633],{"class":243},[79,163791,163792],{"class":85}," divide",[79,163794,152845],{"class":239},[79,163796,163797,163799,163801,163803,163805],{"class":81,"line":167},[79,163798,662],{"class":243},[79,163800,13046],{"class":239},[79,163802,5155],{"class":243},[79,163804,670],{"class":96},[79,163806,673],{"class":239},[79,163808,163809,163811],{"class":81,"line":178},[79,163810,16913],{"class":243},[79,163812,153924],{"class":96},[79,163814,163815,163817,163819,163821],{"class":81,"line":457},[79,163816,711],{"class":243},[79,163818,13033],{"class":239},[79,163820,2957],{"class":243},[79,163822,152856],{"class":239},[79,163824,163825],{"class":81,"line":462},[79,163826,454],{"emptyLinePlaceholder":453},[79,163828,163829],{"class":81,"line":474},[79,163830,454],{"emptyLinePlaceholder":453},[79,163832,163833,163835,163837,163840,163842,163844,163846],{"class":81,"line":480},[79,163834,163058],{"class":239},[79,163836,244],{"class":243},[79,163838,163839],{"class":239}," divide(",[79,163841,2820],{"class":96},[79,163843,1060],{"class":239},[79,163845,1030],{"class":96},[79,163847,253],{"class":239},[79,163849,163850],{"class":81,"line":486},[79,163851,454],{"emptyLinePlaceholder":453},[79,163853,163854,163856,163858,163860,163862],{"class":81,"line":491},[79,163855,1329],{"class":243},[79,163857,163304],{"class":239},[79,163859,41041],{"class":243},[79,163861,41047],{"class":96},[79,163863,673],{"class":239},[79,163865,163866,163868,163870,163873],{"class":81,"line":497},[79,163867,1254],{"class":96},[79,163869,685],{"class":239},[79,163871,163872],{"class":89},"\"除数不能为0\"",[79,163874,253],{"class":239},[79,163876,163877,163879],{"class":81,"line":503},[79,163878,3926],{"class":243},[79,163880,673],{"class":239},[79,163882,163883,163885],{"class":81,"line":509},[79,163884,1254],{"class":96},[79,163886,78693],{"class":239},[14,163888,163890],{"id":163889},"_512-类型提示","5.12 类型提示",[19,163892,163893],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[51,163895,163897],{"className":230,"code":163896,"language":232,"meta":57,"style":57},"def add(a: int, b: int) -> int:\n    return a + b\n",[59,163898,163899,163922],{"__ignoreMap":57},[79,163900,163901,163903,163905,163908,163910,163913,163915,163918,163920],{"class":81,"line":82},[79,163902,633],{"class":243},[79,163904,7405],{"class":85},[79,163906,163907],{"class":239},"(a: ",[79,163909,2390],{"class":96},[79,163911,163912],{"class":239},", b: ",[79,163914,2390],{"class":96},[79,163916,163917],{"class":239},") -> ",[79,163919,2390],{"class":96},[79,163921,673],{"class":239},[79,163923,163924,163926,163928,163930],{"class":81,"line":167},[79,163925,711],{"class":243},[79,163927,13033],{"class":239},[79,163929,2855],{"class":243},[79,163931,152856],{"class":239},[19,163933,163934],{},"字符串参数：",[51,163936,163938],{"className":230,"code":163937,"language":232,"meta":57,"style":57},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[59,163939,163940,163957],{"__ignoreMap":57},[79,163941,163942,163944,163946,163949,163951,163953,163955],{"class":81,"line":82},[79,163943,633],{"class":243},[79,163945,162748],{"class":85},[79,163947,163948],{"class":239},"(name: ",[79,163950,642],{"class":96},[79,163952,163917],{"class":239},[79,163954,899],{"class":96},[79,163956,673],{"class":239},[79,163958,163959,163961,163963,163965,163967,163969,163971,163973,163975],{"class":81,"line":167},[79,163960,1254],{"class":96},[79,163962,685],{"class":239},[79,163964,688],{"class":243},[79,163966,158806],{"class":89},[79,163968,694],{"class":96},[79,163970,697],{"class":239},[79,163972,700],{"class":96},[79,163974,703],{"class":89},[79,163976,253],{"class":239},[19,163978,163979],{},"列表参数：",[51,163981,163983],{"className":230,"code":163982,"language":232,"meta":57,"style":57},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[59,163984,163985,164004,164012,164024,164033],{"__ignoreMap":57},[79,163986,163987,163989,163992,163995,163997,164000,164002],{"class":81,"line":82},[79,163988,633],{"class":243},[79,163990,163991],{"class":85}," get_total",[79,163993,163994],{"class":239},"(numbers: list[",[79,163996,2390],{"class":96},[79,163998,163999],{"class":239},"]) -> ",[79,164001,2390],{"class":96},[79,164003,673],{"class":239},[79,164005,164006,164008,164010],{"class":81,"line":167},[79,164007,161059],{"class":239},[79,164009,244],{"class":243},[79,164011,49447],{"class":96},[79,164013,164014,164016,164019,164021],{"class":81,"line":178},[79,164015,949],{"class":243},[79,164017,164018],{"class":239}," number ",[79,164020,955],{"class":243},[79,164022,164023],{"class":239}," numbers:\n",[79,164025,164026,164028,164030],{"class":81,"line":457},[79,164027,161734],{"class":239},[79,164029,1118],{"class":243},[79,164031,164032],{"class":239}," number\n",[79,164034,164035,164037],{"class":81,"line":462},[79,164036,711],{"class":243},[79,164038,164039],{"class":239}," total\n",[19,164041,164042],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,164044,164046],{"id":164045},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[51,164048,164050],{"className":230,"code":164049,"language":232,"meta":57,"style":57},"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",[59,164051,164052,164062,164066,164070,164078,164089,164099,164109,164119,164129,164133,164137,164146,164168,164172,164176,164185,164191,164211,164223,164234,164238,164247,164258,164263,164267,164271,164280,164286,164305,164317,164327,164331,164342,164352,164356,164364,164375,164379,164383,164387,164395,164400,164414,164418,164430,164435,164447,164452,164464,164469,164481,164491,164495,164501],{"__ignoreMap":57},[79,164053,164054,164057,164059],{"class":81,"line":82},[79,164055,164056],{"class":239},"balance ",[79,164058,244],{"class":243},[79,164060,164061],{"class":96}," 1000\n",[79,164063,164064],{"class":81,"line":167},[79,164065,454],{"emptyLinePlaceholder":453},[79,164067,164068],{"class":81,"line":178},[79,164069,454],{"emptyLinePlaceholder":453},[79,164071,164072,164074,164076],{"class":81,"line":457},[79,164073,633],{"class":243},[79,164075,153785],{"class":85},[79,164077,34070],{"class":239},[79,164079,164080,164082,164084,164087],{"class":81,"line":462},[79,164081,1254],{"class":96},[79,164083,685],{"class":239},[79,164085,164086],{"class":89},"\"====== ATM ======\"",[79,164088,253],{"class":239},[79,164090,164091,164093,164095,164097],{"class":81,"line":474},[79,164092,1254],{"class":96},[79,164094,685],{"class":239},[79,164096,162400],{"class":89},[79,164098,253],{"class":239},[79,164100,164101,164103,164105,164107],{"class":81,"line":480},[79,164102,1254],{"class":96},[79,164104,685],{"class":239},[79,164106,162411],{"class":89},[79,164108,253],{"class":239},[79,164110,164111,164113,164115,164117],{"class":81,"line":486},[79,164112,1254],{"class":96},[79,164114,685],{"class":239},[79,164116,162422],{"class":89},[79,164118,253],{"class":239},[79,164120,164121,164123,164125,164127],{"class":81,"line":491},[79,164122,1254],{"class":96},[79,164124,685],{"class":239},[79,164126,162433],{"class":89},[79,164128,253],{"class":239},[79,164130,164131],{"class":81,"line":497},[79,164132,454],{"emptyLinePlaceholder":453},[79,164134,164135],{"class":81,"line":503},[79,164136,454],{"emptyLinePlaceholder":453},[79,164138,164139,164141,164144],{"class":81,"line":509},[79,164140,633],{"class":243},[79,164142,164143],{"class":85}," show_balance",[79,164145,34070],{"class":239},[79,164147,164148,164150,164152,164154,164157,164159,164162,164164,164166],{"class":81,"line":514},[79,164149,1254],{"class":96},[79,164151,685],{"class":239},[79,164153,688],{"class":243},[79,164155,164156],{"class":89},"\"当前余额:",[79,164158,694],{"class":96},[79,164160,164161],{"class":239},"balance",[79,164163,700],{"class":96},[79,164165,158764],{"class":89},[79,164167,253],{"class":239},[79,164169,164170],{"class":81,"line":520},[79,164171,454],{"emptyLinePlaceholder":453},[79,164173,164174],{"class":81,"line":526},[79,164175,454],{"emptyLinePlaceholder":453},[79,164177,164178,164180,164183],{"class":81,"line":532},[79,164179,633],{"class":243},[79,164181,164182],{"class":85}," save_money",[79,164184,34070],{"class":239},[79,164186,164187,164189],{"class":81,"line":537},[79,164188,163613],{"class":243},[79,164190,151851],{"class":239},[79,164192,164193,164196,164198,164200,164202,164204,164206,164209],{"class":81,"line":543},[79,164194,164195],{"class":239},"    money ",[79,164197,244],{"class":243},[79,164199,864],{"class":96},[79,164201,685],{"class":239},[79,164203,55931],{"class":96},[79,164205,685],{"class":239},[79,164207,164208],{"class":89},"\"请输入存款金额:\"",[79,164210,1191],{"class":239},[79,164212,164213,164215,164217,164219,164221],{"class":81,"line":549},[79,164214,662],{"class":243},[79,164216,151894],{"class":239},[79,164218,3824],{"class":243},[79,164220,670],{"class":96},[79,164222,673],{"class":239},[79,164224,164225,164227,164229,164232],{"class":81,"line":555},[79,164226,34566],{"class":96},[79,164228,685],{"class":239},[79,164230,164231],{"class":89},"\"金额必须大于0\"",[79,164233,253],{"class":239},[79,164235,164236],{"class":81,"line":561},[79,164237,154113],{"class":243},[79,164239,164240,164243,164245],{"class":81,"line":567},[79,164241,164242],{"class":239},"    balance ",[79,164244,1118],{"class":243},[79,164246,151927],{"class":239},[79,164248,164249,164251,164253,164256],{"class":81,"line":573},[79,164250,1254],{"class":96},[79,164252,685],{"class":239},[79,164254,164255],{"class":89},"\"存款成功\"",[79,164257,253],{"class":239},[79,164259,164260],{"class":81,"line":579},[79,164261,164262],{"class":239},"    show_balance()\n",[79,164264,164265],{"class":81,"line":584},[79,164266,454],{"emptyLinePlaceholder":453},[79,164268,164269],{"class":81,"line":590},[79,164270,454],{"emptyLinePlaceholder":453},[79,164272,164273,164275,164278],{"class":81,"line":596},[79,164274,633],{"class":243},[79,164276,164277],{"class":85}," withdraw_money",[79,164279,34070],{"class":239},[79,164281,164282,164284],{"class":81,"line":602},[79,164283,163613],{"class":243},[79,164285,151851],{"class":239},[79,164287,164288,164290,164292,164294,164296,164298,164300,164303],{"class":81,"line":608},[79,164289,164195],{"class":239},[79,164291,244],{"class":243},[79,164293,864],{"class":96},[79,164295,685],{"class":239},[79,164297,55931],{"class":96},[79,164299,685],{"class":239},[79,164301,164302],{"class":89},"\"请输入取款金额:\"",[79,164304,1191],{"class":239},[79,164306,164307,164309,164311,164313,164315],{"class":81,"line":614},[79,164308,662],{"class":243},[79,164310,151894],{"class":239},[79,164312,3824],{"class":243},[79,164314,670],{"class":96},[79,164316,673],{"class":239},[79,164318,164319,164321,164323,164325],{"class":81,"line":620},[79,164320,34566],{"class":96},[79,164322,685],{"class":239},[79,164324,164231],{"class":89},[79,164326,253],{"class":239},[79,164328,164329],{"class":81,"line":625},[79,164330,154113],{"class":243},[79,164332,164333,164335,164337,164339],{"class":81,"line":630},[79,164334,662],{"class":243},[79,164336,151894],{"class":239},[79,164338,3330],{"class":243},[79,164340,164341],{"class":239}," balance:\n",[79,164343,164344,164346,164348,164350],{"class":81,"line":648},[79,164345,34566],{"class":96},[79,164347,685],{"class":239},[79,164349,151989],{"class":89},[79,164351,253],{"class":239},[79,164353,164354],{"class":81,"line":659},[79,164355,154113],{"class":243},[79,164357,164358,164360,164362],{"class":81,"line":676},[79,164359,164242],{"class":239},[79,164361,152004],{"class":243},[79,164363,151927],{"class":239},[79,164365,164366,164368,164370,164373],{"class":81,"line":708},[79,164367,1254],{"class":96},[79,164369,685],{"class":239},[79,164371,164372],{"class":89},"\"取款成功\"",[79,164374,253],{"class":239},[79,164376,164377],{"class":81,"line":717},[79,164378,164262],{"class":239},[79,164380,164381],{"class":81,"line":722},[79,164382,454],{"emptyLinePlaceholder":453},[79,164384,164385],{"class":81,"line":727},[79,164386,454],{"emptyLinePlaceholder":453},[79,164388,164389,164391,164393],{"class":81,"line":738},[79,164390,110670],{"class":243},[79,164392,97397],{"class":96},[79,164394,673],{"class":239},[79,164396,164397],{"class":81,"line":753},[79,164398,164399],{"class":239},"    show_menu()\n",[79,164401,164402,164404,164406,164408,164410,164412],{"class":81,"line":768},[79,164403,162444],{"class":239},[79,164405,244],{"class":243},[79,164407,62715],{"class":96},[79,164409,685],{"class":239},[79,164411,154825],{"class":89},[79,164413,253],{"class":239},[79,164415,164416],{"class":81,"line":776},[79,164417,454],{"emptyLinePlaceholder":453},[79,164419,164420,164422,164424,164426,164428],{"class":81,"line":781},[79,164421,662],{"class":243},[79,164423,154838],{"class":239},[79,164425,5155],{"class":243},[79,164427,154843],{"class":89},[79,164429,673],{"class":239},[79,164431,164432],{"class":81,"line":786},[79,164433,164434],{"class":239},"        show_balance()\n",[79,164436,164437,164439,164441,164443,164445],{"class":81,"line":802},[79,164438,41407],{"class":243},[79,164440,154838],{"class":239},[79,164442,5155],{"class":243},[79,164444,154862],{"class":89},[79,164446,673],{"class":239},[79,164448,164449],{"class":81,"line":815},[79,164450,164451],{"class":239},"        save_money()\n",[79,164453,164454,164456,164458,164460,164462],{"class":81,"line":828},[79,164455,41407],{"class":243},[79,164457,154838],{"class":239},[79,164459,5155],{"class":243},[79,164461,154880],{"class":89},[79,164463,673],{"class":239},[79,164465,164466],{"class":81,"line":842},[79,164467,164468],{"class":239},"        withdraw_money()\n",[79,164470,164471,164473,164475,164477,164479],{"class":81,"line":859},[79,164472,41407],{"class":243},[79,164474,154838],{"class":239},[79,164476,5155],{"class":243},[79,164478,154934],{"class":89},[79,164480,673],{"class":239},[79,164482,164483,164485,164487,164489],{"class":81,"line":878},[79,164484,34566],{"class":96},[79,164486,685],{"class":239},[79,164488,154945],{"class":89},[79,164490,253],{"class":239},[79,164492,164493],{"class":81,"line":883},[79,164494,33745],{"class":243},[79,164496,164497,164499],{"class":81,"line":888},[79,164498,159774],{"class":243},[79,164500,673],{"class":239},[79,164502,164503,164505,164507,164509],{"class":81,"line":904},[79,164504,34566],{"class":96},[79,164506,685],{"class":239},[79,164508,154966],{"class":89},[79,164510,253],{"class":239},[19,164512,164513],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164515,164517],{"id":164516},"_514-易错点","5.14 易错点",[26,164519,164520,164523,164526,164531,164536,164539],{},[29,164521,164522],{},"函数定义后必须调用才会执行。",[29,164524,164525],{},"函数名后面有括号才是调用。",[29,164527,164528,164530],{},[59,164529,1414],{}," 后面的代码不会执行。",[29,164532,164533,164534,1604],{},"没有返回值的函数默认返回 ",[59,164535,899],{},[29,164537,164538],{},"局部变量不能在函数外部访问。",[29,164540,164541,164542,164544],{},"不要滥用 ",[59,164543,163578],{},"，更好的方式是让函数返回新值。",[19,164546,164547,164548,164550],{},"例如不用 ",[59,164549,163578],{}," 改写存款：",[51,164552,164554],{"className":230,"code":164553,"language":232,"meta":57,"style":57},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[59,164555,164556,164565,164576,164580,164584,164592,164605],{"__ignoreMap":57},[79,164557,164558,164560,164562],{"class":81,"line":82},[79,164559,633],{"class":243},[79,164561,164182],{"class":85},[79,164563,164564],{"class":239},"(balance, money):\n",[79,164566,164567,164569,164572,164574],{"class":81,"line":167},[79,164568,711],{"class":243},[79,164570,164571],{"class":239}," balance ",[79,164573,2855],{"class":243},[79,164575,151927],{"class":239},[79,164577,164578],{"class":81,"line":178},[79,164579,454],{"emptyLinePlaceholder":453},[79,164581,164582],{"class":81,"line":457},[79,164583,454],{"emptyLinePlaceholder":453},[79,164585,164586,164588,164590],{"class":81,"line":462},[79,164587,164056],{"class":239},[79,164589,244],{"class":243},[79,164591,164061],{"class":96},[79,164593,164594,164596,164598,164601,164603],{"class":81,"line":474},[79,164595,164056],{"class":239},[79,164597,244],{"class":243},[79,164599,164600],{"class":239}," save_money(balance, ",[79,164602,3947],{"class":96},[79,164604,253],{"class":239},[79,164606,164607,164609],{"class":81,"line":480},[79,164608,32541],{"class":96},[79,164610,164611],{"class":239},"(balance)\n",[14,164613,164615],{"id":164614},"_515-本章练习","5.15 本章练习",[26,164617,164618,164625,164631,164637,164643],{},[29,164619,164620,164621,164624],{},"定义函数 ",[59,164622,164623],{},"print_student(name, age)","，输出学生信息。",[29,164626,164620,164627,164630],{},[59,164628,164629],{},"get_max(a, b, c)","，返回三个数中的最大值。",[29,164632,164620,164633,164636],{},[59,164634,164635],{},"is_even(num)","，判断一个数是否为偶数。",[29,164638,164620,164639,164642],{},[59,164640,164641],{},"calculate_bmi(weight, height)","，返回 BMI。",[29,164644,164645],{},"把第 4 章的菜单程序拆分成多个函数。",[2287,164647,164648],{},"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":57,"searchDepth":167,"depth":167,"links":164650},[164651,164652,164653,164654,164655,164656,164657,164658,164659,164663,164664,164665,164666,164667,164668],{"id":162671,"depth":167,"text":162672},{"id":162712,"depth":167,"text":162713},{"id":162802,"depth":167,"text":162803},{"id":162883,"depth":167,"text":162884},{"id":163016,"depth":167,"text":163017},{"id":163138,"depth":167,"text":163139},{"id":163260,"depth":167,"text":163261},{"id":163337,"depth":167,"text":163338},{"id":163459,"depth":167,"text":163460,"children":164660},[164661,164662],{"id":163463,"depth":178,"text":163464},{"id":163521,"depth":178,"text":163522},{"id":163650,"depth":167,"text":163651},{"id":163776,"depth":167,"text":163777},{"id":163889,"depth":167,"text":163890},{"id":164045,"depth":167,"text":164046},{"id":164516,"depth":167,"text":164517},{"id":164614,"depth":167,"text":164615},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162663,"description":25516},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164675,"title":164676,"body":164677,"description":25516,"extension":2314,"meta":167721,"navigation":453,"path":167722,"seo":167723,"stem":167724,"__hash__":167725},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164678,"toc":167702},[164679,164682,164686,164689,164692,164796,164799,164803,164806,164886,164889,164893,164896,164956,164959,164995,164998,165013,165017,165090,165093,165148,165151,165221,165224,165308,165318,165376,165380,165425,165428,165454,165457,165563,165567,165570,165612,165615,165679,165682,165686,165689,165750,165753,165783,165786,165824,165828,165831,165840,165843,165967,165970,166011,166015,166018,166029,166069,166072,166087,166092,166095,166162,166165,166255,166259,166262,166310,166313,166340,166342,166372,166375,166395,166398,166429,166432,166465,166469,166472,166496,166499,166523,166526,166550,166554,166557,166687,166690,166770,166773,166848,166852,166855,166905,166908,166950,166953,166977,166979,167003,167006,167061,167064,167130,167134,167137,167140,167178,167181,167234,167237,167283,167286,167319,167322,167326,167645,167649,167678,167682,167699],[10,164680,164676],{"id":164681},"_6-数据容器",[14,164683,164685],{"id":164684},"_61-什么是数据容器","6.1 什么是数据容器",[19,164687,164688],{},"数据容器用于一次保存多个数据。",[19,164690,164691],{},"常见容器：",[2516,164693,164694,164711],{},[2519,164695,164696],{},[2522,164697,164698,164700,164703,164706,164709],{},[2525,164699,27906],{},[2525,164701,164702],{},"是否有序",[2525,164704,164705],{},"是否可变",[2525,164707,164708],{},"是否允许重复",[2525,164710,29624],{},[2563,164712,164713,164731,164747,164762,164779],{},[2522,164714,164715,164718,164721,164724,164727],{},[2568,164716,164717],{},"list列表",[2568,164719,164720],{},"有序",[2568,164722,164723],{},"可变",[2568,164725,164726],{},"允许",[2568,164728,164729],{},[59,164730,157009],{},[2522,164732,164733,164736,164738,164741,164743],{},[2568,164734,164735],{},"tuple元组",[2568,164737,164720],{},[2568,164739,164740],{},"不可变",[2568,164742,164726],{},[2568,164744,164745],{},[59,164746,157022],{},[2522,164748,164749,164752,164754,164756,164758],{},[2568,164750,164751],{},"str字符串",[2568,164753,164720],{},[2568,164755,164740],{},[2568,164757,164726],{},[2568,164759,164760],{},[59,164761,157632],{},[2522,164763,164764,164767,164770,164772,164775],{},[2568,164765,164766],{},"set集合",[2568,164768,164769],{},"无序",[2568,164771,164723],{},[2568,164773,164774],{},"不允许",[2568,164776,164777],{},[59,164778,157047],{},[2522,164780,164781,164784,164786,164788,164791],{},[2568,164782,164783],{},"dict字典",[2568,164785,164720],{},[2568,164787,164723],{},[2568,164789,164790],{},"key不允许重复",[2568,164792,164793],{},[59,164794,164795],{},"{\"name\": \"小明\"}",[19,164797,164798],{},"Python 3.7 之后，字典保持插入顺序。",[14,164800,164802],{"id":164801},"_62-列表list","6.2 列表list",[19,164804,164805],{},"列表用于保存一组有顺序的数据。",[51,164807,164809],{"className":230,"code":164808,"language":232,"meta":57,"style":57},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[59,164810,164811,164831,164856,164877],{"__ignoreMap":57},[79,164812,164813,164815,164817,164819,164821,164823,164825,164827,164829],{"class":81,"line":82},[79,164814,162132],{"class":239},[79,164816,244],{"class":243},[79,164818,54339],{"class":239},[79,164820,151640],{"class":89},[79,164822,1060],{"class":239},[79,164824,152688],{"class":89},[79,164826,1060],{"class":239},[79,164828,161483],{"class":89},[79,164830,35361],{"class":239},[79,164832,164833,164836,164838,164840,164842,164844,164846,164848,164850,164852,164854],{"class":81,"line":167},[79,164834,164835],{"class":239},"numbers ",[79,164837,244],{"class":243},[79,164839,54339],{"class":239},[79,164841,1072],{"class":96},[79,164843,1060],{"class":239},[79,164845,1049],{"class":96},[79,164847,1060],{"class":239},[79,164849,1188],{"class":96},[79,164851,1060],{"class":239},[79,164853,2668],{"class":96},[79,164855,35361],{"class":239},[79,164857,164858,164861,164863,164865,164867,164869,164871,164873,164875],{"class":81,"line":178},[79,164859,164860],{"class":239},"mixed ",[79,164862,244],{"class":243},[79,164864,54339],{"class":239},[79,164866,151640],{"class":89},[79,164868,1060],{"class":239},[79,164870,3023],{"class":96},[79,164872,1060],{"class":239},[79,164874,33595],{"class":96},[79,164876,35361],{"class":239},[79,164878,164879,164882,164884],{"class":81,"line":457},[79,164880,164881],{"class":239},"empty ",[79,164883,244],{"class":243},[79,164885,53951],{"class":239},[19,164887,164888],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164890,164892],{"id":164891},"_63-列表索引","6.3 列表索引",[19,164894,164895],{},"正向索引从 0 开始：",[51,164897,164899],{"className":230,"code":164898,"language":232,"meta":57,"style":57},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[59,164900,164901,164921,164925,164936,164946],{"__ignoreMap":57},[79,164902,164903,164905,164907,164909,164911,164913,164915,164917,164919],{"class":81,"line":82},[79,164904,162132],{"class":239},[79,164906,244],{"class":243},[79,164908,54339],{"class":239},[79,164910,151640],{"class":89},[79,164912,1060],{"class":239},[79,164914,152688],{"class":89},[79,164916,1060],{"class":239},[79,164918,161483],{"class":89},[79,164920,35361],{"class":239},[79,164922,164923],{"class":81,"line":167},[79,164924,454],{"emptyLinePlaceholder":453},[79,164926,164927,164929,164932,164934],{"class":81,"line":178},[79,164928,32541],{"class":96},[79,164930,164931],{"class":239},"(names[",[79,164933,1030],{"class":96},[79,164935,1243],{"class":239},[79,164937,164938,164940,164942,164944],{"class":81,"line":457},[79,164939,32541],{"class":96},[79,164941,164931],{"class":239},[79,164943,1072],{"class":96},[79,164945,1243],{"class":239},[79,164947,164948,164950,164952,164954],{"class":81,"line":462},[79,164949,32541],{"class":96},[79,164951,164931],{"class":239},[79,164953,1049],{"class":96},[79,164955,1243],{"class":239},[19,164957,164958],{},"反向索引从 -1 开始：",[51,164960,164962],{"className":230,"code":164961,"language":232,"meta":57,"style":57},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[59,164963,164964,164980],{"__ignoreMap":57},[79,164965,164966,164968,164970,164972,164974,164977],{"class":81,"line":82},[79,164967,32541],{"class":96},[79,164969,164931],{"class":239},[79,164971,320],{"class":243},[79,164973,1072],{"class":96},[79,164975,164976],{"class":239},"])  ",[79,164978,164979],{"class":2440},"# 小刚\n",[79,164981,164982,164984,164986,164988,164990,164992],{"class":81,"line":167},[79,164983,32541],{"class":96},[79,164985,164931],{"class":239},[79,164987,320],{"class":243},[79,164989,1049],{"class":96},[79,164991,164976],{"class":239},[79,164993,164994],{"class":2440},"# 小红\n",[19,164996,164997],{},"索引越界会报错：",[51,164999,165001],{"className":230,"code":165000,"language":232,"meta":57,"style":57},"print(names[3])\n",[59,165002,165003],{"__ignoreMap":57},[79,165004,165005,165007,165009,165011],{"class":81,"line":82},[79,165006,32541],{"class":96},[79,165008,164931],{"class":239},[79,165010,1188],{"class":96},[79,165012,1243],{"class":239},[14,165014,165016],{"id":165015},"_64-列表常用方法","6.4 列表常用方法",[51,165018,165020],{"className":230,"code":165019,"language":232,"meta":57,"style":57},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[59,165021,165022,165038,165042,165051,165065,165079,165083],{"__ignoreMap":57},[79,165023,165024,165026,165028,165030,165032,165034,165036],{"class":81,"line":82},[79,165025,162132],{"class":239},[79,165027,244],{"class":243},[79,165029,54339],{"class":239},[79,165031,151640],{"class":89},[79,165033,1060],{"class":239},[79,165035,152688],{"class":89},[79,165037,35361],{"class":239},[79,165039,165040],{"class":81,"line":167},[79,165041,454],{"emptyLinePlaceholder":453},[79,165043,165044,165047,165049],{"class":81,"line":178},[79,165045,165046],{"class":239},"names.append(",[79,165048,161483],{"class":89},[79,165050,253],{"class":239},[79,165052,165053,165056,165058,165060,165063],{"class":81,"line":457},[79,165054,165055],{"class":239},"names.insert(",[79,165057,1072],{"class":96},[79,165059,1060],{"class":239},[79,165061,165062],{"class":89},"\"小李\"",[79,165064,253],{"class":239},[79,165066,165067,165070,165072,165074,165077],{"class":81,"line":462},[79,165068,165069],{"class":239},"names.extend([",[79,165071,10867],{"class":89},[79,165073,1060],{"class":239},[79,165075,165076],{"class":89},"\"小赵\"",[79,165078,1243],{"class":239},[79,165080,165081],{"class":81,"line":474},[79,165082,454],{"emptyLinePlaceholder":453},[79,165084,165085,165087],{"class":81,"line":480},[79,165086,32541],{"class":96},[79,165088,165089],{"class":239},"(names)\n",[19,165091,165092],{},"删除元素：",[51,165094,165096],{"className":230,"code":165095,"language":232,"meta":57,"style":57},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[59,165097,165098,165107,165117,165131,165143],{"__ignoreMap":57},[79,165099,165100,165103,165105],{"class":81,"line":82},[79,165101,165102],{"class":239},"names.remove(",[79,165104,152688],{"class":89},[79,165106,253],{"class":239},[79,165108,165109,165112,165114],{"class":81,"line":167},[79,165110,165111],{"class":239},"last ",[79,165113,244],{"class":243},[79,165115,165116],{"class":239}," names.pop()\n",[79,165118,165119,165122,165124,165127,165129],{"class":81,"line":178},[79,165120,165121],{"class":239},"first ",[79,165123,244],{"class":243},[79,165125,165126],{"class":239}," names.pop(",[79,165128,1030],{"class":96},[79,165130,253],{"class":239},[79,165132,165133,165136,165139,165141],{"class":81,"line":457},[79,165134,165135],{"class":243},"del",[79,165137,165138],{"class":239}," names[",[79,165140,1030],{"class":96},[79,165142,35361],{"class":239},[79,165144,165145],{"class":81,"line":462},[79,165146,165147],{"class":239},"names.clear()\n",[19,165149,165150],{},"查询和统计：",[51,165152,165154],{"className":230,"code":165153,"language":232,"meta":57,"style":57},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[59,165155,165156,165184,165188,165199,165210],{"__ignoreMap":57},[79,165157,165158,165160,165162,165164,165166,165168,165170,165172,165174,165176,165178,165180,165182],{"class":81,"line":82},[79,165159,164835],{"class":239},[79,165161,244],{"class":243},[79,165163,54339],{"class":239},[79,165165,1072],{"class":96},[79,165167,1060],{"class":239},[79,165169,1049],{"class":96},[79,165171,1060],{"class":239},[79,165173,1188],{"class":96},[79,165175,1060],{"class":239},[79,165177,1049],{"class":96},[79,165179,1060],{"class":239},[79,165181,2668],{"class":96},[79,165183,35361],{"class":239},[79,165185,165186],{"class":81,"line":167},[79,165187,454],{"emptyLinePlaceholder":453},[79,165189,165190,165192,165195,165197],{"class":81,"line":178},[79,165191,32541],{"class":96},[79,165193,165194],{"class":239},"(numbers.index(",[79,165196,1188],{"class":96},[79,165198,1191],{"class":239},[79,165200,165201,165203,165206,165208],{"class":81,"line":457},[79,165202,32541],{"class":96},[79,165204,165205],{"class":239},"(numbers.count(",[79,165207,1049],{"class":96},[79,165209,1191],{"class":239},[79,165211,165212,165214,165216,165218],{"class":81,"line":462},[79,165213,32541],{"class":96},[79,165215,685],{"class":239},[79,165217,9552],{"class":96},[79,165219,165220],{"class":239},"(numbers))\n",[19,165222,165223],{},"排序：",[51,165225,165227],{"className":230,"code":165226,"language":232,"meta":57,"style":57},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[59,165228,165229,165253,165257,165262,165269,165273,165287,165293,165297,165302],{"__ignoreMap":57},[79,165230,165231,165233,165235,165237,165239,165241,165243,165245,165247,165249,165251],{"class":81,"line":82},[79,165232,164835],{"class":239},[79,165234,244],{"class":243},[79,165236,54339],{"class":239},[79,165238,1188],{"class":96},[79,165240,1060],{"class":239},[79,165242,1072],{"class":96},[79,165244,1060],{"class":239},[79,165246,2694],{"class":96},[79,165248,1060],{"class":239},[79,165250,1049],{"class":96},[79,165252,35361],{"class":239},[79,165254,165255],{"class":81,"line":167},[79,165256,454],{"emptyLinePlaceholder":453},[79,165258,165259],{"class":81,"line":178},[79,165260,165261],{"class":239},"numbers.sort()\n",[79,165263,165264,165266],{"class":81,"line":457},[79,165265,32541],{"class":96},[79,165267,165268],{"class":239},"(numbers)\n",[79,165270,165271],{"class":81,"line":462},[79,165272,454],{"emptyLinePlaceholder":453},[79,165274,165275,165278,165281,165283,165285],{"class":81,"line":474},[79,165276,165277],{"class":239},"numbers.sort(",[79,165279,165280],{"class":7412},"reverse",[79,165282,244],{"class":243},[79,165284,33595],{"class":96},[79,165286,253],{"class":239},[79,165288,165289,165291],{"class":81,"line":480},[79,165290,32541],{"class":96},[79,165292,165268],{"class":239},[79,165294,165295],{"class":81,"line":486},[79,165296,454],{"emptyLinePlaceholder":453},[79,165298,165299],{"class":81,"line":491},[79,165300,165301],{"class":239},"numbers.reverse()\n",[79,165303,165304,165306],{"class":81,"line":497},[79,165305,32541],{"class":96},[79,165307,165268],{"class":239},[19,165309,165310,165313,165314,165317],{},[59,165311,165312],{},"sort()"," 会修改原列表，",[59,165315,165316],{},"sorted()"," 返回新列表。",[51,165319,165321],{"className":230,"code":165320,"language":232,"meta":57,"style":57},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[59,165322,165323,165347,165359,165363,165369],{"__ignoreMap":57},[79,165324,165325,165327,165329,165331,165333,165335,165337,165339,165341,165343,165345],{"class":81,"line":82},[79,165326,164835],{"class":239},[79,165328,244],{"class":243},[79,165330,54339],{"class":239},[79,165332,1188],{"class":96},[79,165334,1060],{"class":239},[79,165336,1072],{"class":96},[79,165338,1060],{"class":239},[79,165340,2694],{"class":96},[79,165342,1060],{"class":239},[79,165344,1049],{"class":96},[79,165346,35361],{"class":239},[79,165348,165349,165352,165354,165357],{"class":81,"line":167},[79,165350,165351],{"class":239},"new_numbers ",[79,165353,244],{"class":243},[79,165355,165356],{"class":96}," sorted",[79,165358,165268],{"class":239},[79,165360,165361],{"class":81,"line":178},[79,165362,454],{"emptyLinePlaceholder":453},[79,165364,165365,165367],{"class":81,"line":457},[79,165366,32541],{"class":96},[79,165368,165268],{"class":239},[79,165370,165371,165373],{"class":81,"line":462},[79,165372,32541],{"class":96},[79,165374,165375],{"class":239},"(new_numbers)\n",[14,165377,165379],{"id":165378},"_65-列表遍历","6.5 列表遍历",[51,165381,165383],{"className":230,"code":165382,"language":232,"meta":57,"style":57},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[59,165384,165385,165405,165409,165419],{"__ignoreMap":57},[79,165386,165387,165389,165391,165393,165395,165397,165399,165401,165403],{"class":81,"line":82},[79,165388,162132],{"class":239},[79,165390,244],{"class":243},[79,165392,54339],{"class":239},[79,165394,151640],{"class":89},[79,165396,1060],{"class":239},[79,165398,152688],{"class":89},[79,165400,1060],{"class":239},[79,165402,161483],{"class":89},[79,165404,35361],{"class":239},[79,165406,165407],{"class":81,"line":167},[79,165408,454],{"emptyLinePlaceholder":453},[79,165410,165411,165413,165415,165417],{"class":81,"line":178},[79,165412,1874],{"class":243},[79,165414,162168],{"class":239},[79,165416,955],{"class":243},[79,165418,162173],{"class":239},[79,165420,165421,165423],{"class":81,"line":457},[79,165422,1254],{"class":96},[79,165424,152412],{"class":239},[19,165426,165427],{},"需要索引时：",[51,165429,165431],{"className":230,"code":165430,"language":232,"meta":57,"style":57},"for index, name in enumerate(names):\n    print(index, name)\n",[59,165432,165433,165447],{"__ignoreMap":57},[79,165434,165435,165437,165440,165442,165444],{"class":81,"line":82},[79,165436,1874],{"class":243},[79,165438,165439],{"class":239}," index, name ",[79,165441,955],{"class":243},[79,165443,33725],{"class":96},[79,165445,165446],{"class":239},"(names):\n",[79,165448,165449,165451],{"class":81,"line":167},[79,165450,1254],{"class":96},[79,165452,165453],{"class":239},"(index, name)\n",[19,165455,165456],{},"统计总分：",[51,165458,165460],{"className":230,"code":165459,"language":232,"meta":57,"style":57},"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",[59,165461,165462,165487,165495,165499,165510,165518,165522,165539],{"__ignoreMap":57},[79,165463,165464,165467,165469,165471,165473,165475,165477,165479,165481,165483,165485],{"class":81,"line":82},[79,165465,165466],{"class":239},"scores ",[79,165468,244],{"class":243},[79,165470,54339],{"class":239},[79,165472,3235],{"class":96},[79,165474,1060],{"class":239},[79,165476,3109],{"class":96},[79,165478,1060],{"class":239},[79,165480,2629],{"class":96},[79,165482,1060],{"class":239},[79,165484,2934],{"class":96},[79,165486,35361],{"class":239},[79,165488,165489,165491,165493],{"class":81,"line":167},[79,165490,159012],{"class":239},[79,165492,244],{"class":243},[79,165494,49447],{"class":96},[79,165496,165497],{"class":81,"line":178},[79,165498,454],{"emptyLinePlaceholder":453},[79,165500,165501,165503,165505,165507],{"class":81,"line":457},[79,165502,1874],{"class":243},[79,165504,159535],{"class":239},[79,165506,955],{"class":243},[79,165508,165509],{"class":239}," scores:\n",[79,165511,165512,165514,165516],{"class":81,"line":462},[79,165513,161059],{"class":239},[79,165515,1118],{"class":243},[79,165517,3815],{"class":239},[79,165519,165520],{"class":81,"line":474},[79,165521,454],{"emptyLinePlaceholder":453},[79,165523,165524,165527,165529,165532,165534,165536],{"class":81,"line":480},[79,165525,165526],{"class":239},"avg ",[79,165528,244],{"class":243},[79,165530,165531],{"class":239}," total ",[79,165533,2957],{"class":243},[79,165535,9525],{"class":96},[79,165537,165538],{"class":239},"(scores)\n",[79,165540,165541,165543,165545,165547,165550,165552,165555,165557,165559,165561],{"class":81,"line":486},[79,165542,32541],{"class":96},[79,165544,685],{"class":239},[79,165546,688],{"class":243},[79,165548,165549],{"class":89},"\"平均分:",[79,165551,694],{"class":96},[79,165553,165554],{"class":239},"avg",[79,165556,158911],{"class":243},[79,165558,700],{"class":96},[79,165560,703],{"class":89},[79,165562,253],{"class":239},[14,165564,165566],{"id":165565},"_66-元组tuple","6.6 元组tuple",[19,165568,165569],{},"元组和列表类似，但不可修改。",[51,165571,165573],{"className":230,"code":165572,"language":232,"meta":57,"style":57},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[59,165574,165575,165592],{"__ignoreMap":57},[79,165576,165577,165580,165582,165584,165586,165588,165590],{"class":81,"line":82},[79,165578,165579],{"class":239},"point ",[79,165581,244],{"class":243},[79,165583,3887],{"class":239},[79,165585,2820],{"class":96},[79,165587,1060],{"class":239},[79,165589,3073],{"class":96},[79,165591,253],{"class":239},[79,165593,165594,165596,165598,165600,165602,165604,165606,165608,165610],{"class":81,"line":167},[79,165595,118066],{"class":239},[79,165597,244],{"class":243},[79,165599,3887],{"class":239},[79,165601,151640],{"class":89},[79,165603,1060],{"class":239},[79,165605,3023],{"class":96},[79,165607,1060],{"class":239},[79,165609,71377],{"class":89},[79,165611,253],{"class":239},[19,165613,165614],{},"单元素元组必须加逗号：",[51,165616,165618],{"className":230,"code":165617,"language":232,"meta":57,"style":57},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[59,165619,165620,165634,165647,165651,165665],{"__ignoreMap":57},[79,165621,165622,165625,165627,165629,165631],{"class":81,"line":82},[79,165623,165624],{"class":239},"t1 ",[79,165626,244],{"class":243},[79,165628,3887],{"class":239},[79,165630,2820],{"class":96},[79,165632,165633],{"class":239},",)\n",[79,165635,165636,165639,165641,165643,165645],{"class":81,"line":167},[79,165637,165638],{"class":239},"t2 ",[79,165640,244],{"class":243},[79,165642,3887],{"class":239},[79,165644,2820],{"class":96},[79,165646,253],{"class":239},[79,165648,165649],{"class":81,"line":178},[79,165650,454],{"emptyLinePlaceholder":453},[79,165652,165653,165655,165657,165659,165662],{"class":81,"line":457},[79,165654,32541],{"class":96},[79,165656,685],{"class":239},[79,165658,105145],{"class":96},[79,165660,165661],{"class":239},"(t1))  ",[79,165663,165664],{"class":2440},"# tuple\n",[79,165666,165667,165669,165671,165673,165676],{"class":81,"line":462},[79,165668,32541],{"class":96},[79,165670,685],{"class":239},[79,165672,105145],{"class":96},[79,165674,165675],{"class":239},"(t2))  ",[79,165677,165678],{"class":2440},"# int\n",[19,165680,165681],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165683,165685],{"id":165684},"_67-字符串str","6.7 字符串str",[19,165687,165688],{},"字符串也是序列，可以索引、切片和遍历。",[51,165690,165692],{"className":230,"code":165691,"language":232,"meta":57,"style":57},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[59,165693,165694,165702,165706,165717,165729,165733,165744],{"__ignoreMap":57},[79,165695,165696,165698,165700],{"class":81,"line":82},[79,165697,158196],{"class":239},[79,165699,244],{"class":243},[79,165701,161433],{"class":89},[79,165703,165704],{"class":81,"line":167},[79,165705,454],{"emptyLinePlaceholder":453},[79,165707,165708,165710,165713,165715],{"class":81,"line":178},[79,165709,32541],{"class":96},[79,165711,165712],{"class":239},"(text[",[79,165714,1030],{"class":96},[79,165716,1243],{"class":239},[79,165718,165719,165721,165723,165725,165727],{"class":81,"line":457},[79,165720,32541],{"class":96},[79,165722,165712],{"class":239},[79,165724,320],{"class":243},[79,165726,1072],{"class":96},[79,165728,1243],{"class":239},[79,165730,165731],{"class":81,"line":462},[79,165732,454],{"emptyLinePlaceholder":453},[79,165734,165735,165737,165739,165741],{"class":81,"line":474},[79,165736,1874],{"class":243},[79,165738,161444],{"class":239},[79,165740,955],{"class":243},[79,165742,165743],{"class":239}," text:\n",[79,165745,165746,165748],{"class":81,"line":480},[79,165747,1254],{"class":96},[79,165749,161455],{"class":239},[19,165751,165752],{},"字符串不可变：",[51,165754,165756],{"className":230,"code":165755,"language":232,"meta":57,"style":57},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[59,165757,165758,165766],{"__ignoreMap":57},[79,165759,165760,165762,165764],{"class":81,"line":82},[79,165761,158196],{"class":239},[79,165763,244],{"class":243},[79,165765,161433],{"class":89},[79,165767,165768,165771,165773,165775,165777,165780],{"class":81,"line":167},[79,165769,165770],{"class":239},"text[",[79,165772,1030],{"class":96},[79,165774,1033],{"class":239},[79,165776,244],{"class":243},[79,165778,165779],{"class":89}," \"P\"",[79,165781,165782],{"class":2440},"  # 报错\n",[19,165784,165785],{},"如果要得到新字符串：",[51,165787,165789],{"className":230,"code":165788,"language":232,"meta":57,"style":57},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[59,165790,165791,165799,165817],{"__ignoreMap":57},[79,165792,165793,165795,165797],{"class":81,"line":82},[79,165794,158196],{"class":239},[79,165796,244],{"class":243},[79,165798,161433],{"class":89},[79,165800,165801,165803,165805,165807,165809,165812,165814],{"class":81,"line":167},[79,165802,158196],{"class":239},[79,165804,244],{"class":243},[79,165806,165779],{"class":89},[79,165808,47680],{"class":243},[79,165810,165811],{"class":239}," text[",[79,165813,1072],{"class":96},[79,165815,165816],{"class":239},":]\n",[79,165818,165819,165821],{"class":81,"line":178},[79,165820,32541],{"class":96},[79,165822,165823],{"class":239},"(text)\n",[14,165825,165827],{"id":165826},"_68-切片","6.8 切片",[19,165829,165830],{},"切片用于从序列中取一部分。",[51,165832,165834],{"className":230,"code":165833,"language":232,"meta":57,"style":57},"序列[开始:结束:步长]\n",[59,165835,165836],{"__ignoreMap":57},[79,165837,165838],{"class":81,"line":82},[79,165839,165833],{"class":239},[19,165841,165842],{},"结束位置不包含。",[51,165844,165846],{"className":230,"code":165845,"language":232,"meta":57,"style":57},"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",[59,165847,165848,165885,165889,165908,165923,165937,165951],{"__ignoreMap":57},[79,165849,165850,165853,165855,165857,165859,165861,165863,165865,165867,165869,165871,165873,165875,165877,165879,165881,165883],{"class":81,"line":82},[79,165851,165852],{"class":239},"nums ",[79,165854,244],{"class":243},[79,165856,54339],{"class":239},[79,165858,1030],{"class":96},[79,165860,1060],{"class":239},[79,165862,1072],{"class":96},[79,165864,1060],{"class":239},[79,165866,1049],{"class":96},[79,165868,1060],{"class":239},[79,165870,1188],{"class":96},[79,165872,1060],{"class":239},[79,165874,2668],{"class":96},[79,165876,1060],{"class":239},[79,165878,2694],{"class":96},[79,165880,1060],{"class":239},[79,165882,2718],{"class":96},[79,165884,35361],{"class":239},[79,165886,165887],{"class":81,"line":167},[79,165888,454],{"emptyLinePlaceholder":453},[79,165890,165891,165893,165896,165898,165900,165902,165905],{"class":81,"line":178},[79,165892,32541],{"class":96},[79,165894,165895],{"class":239},"(nums[",[79,165897,1072],{"class":96},[79,165899,3232],{"class":239},[79,165901,2668],{"class":96},[79,165903,165904],{"class":239},"])    ",[79,165906,165907],{"class":2440},"# [1, 2, 3]\n",[79,165909,165910,165912,165915,165917,165920],{"class":81,"line":457},[79,165911,32541],{"class":96},[79,165913,165914],{"class":239},"(nums[:",[79,165916,1188],{"class":96},[79,165918,165919],{"class":239},"])     ",[79,165921,165922],{"class":2440},"# [0, 1, 2]\n",[79,165924,165925,165927,165929,165931,165934],{"class":81,"line":462},[79,165926,32541],{"class":96},[79,165928,165895],{"class":239},[79,165930,1188],{"class":96},[79,165932,165933],{"class":239},":])     ",[79,165935,165936],{"class":2440},"# [3, 4, 5, 6]\n",[79,165938,165939,165941,165944,165946,165948],{"class":81,"line":474},[79,165940,32541],{"class":96},[79,165942,165943],{"class":239},"(nums[::",[79,165945,1049],{"class":96},[79,165947,165904],{"class":239},[79,165949,165950],{"class":2440},"# [0, 2, 4, 6]\n",[79,165952,165953,165955,165957,165959,165961,165964],{"class":81,"line":480},[79,165954,32541],{"class":96},[79,165956,165943],{"class":239},[79,165958,320],{"class":243},[79,165960,1072],{"class":96},[79,165962,165963],{"class":239},"])   ",[79,165965,165966],{"class":2440},"# 反转\n",[19,165968,165969],{},"字符串切片：",[51,165971,165973],{"className":230,"code":165972,"language":232,"meta":57,"style":57},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[59,165974,165975,165984,165998],{"__ignoreMap":57},[79,165976,165977,165979,165981],{"class":81,"line":82},[79,165978,158196],{"class":239},[79,165980,244],{"class":243},[79,165982,165983],{"class":89}," \"abcdef\"\n",[79,165985,165986,165988,165990,165992,165994,165996],{"class":81,"line":167},[79,165987,32541],{"class":96},[79,165989,165712],{"class":239},[79,165991,1072],{"class":96},[79,165993,3232],{"class":239},[79,165995,2668],{"class":96},[79,165997,1243],{"class":239},[79,165999,166000,166002,166005,166007,166009],{"class":81,"line":178},[79,166001,32541],{"class":96},[79,166003,166004],{"class":239},"(text[::",[79,166006,320],{"class":243},[79,166008,1072],{"class":96},[79,166010,1243],{"class":239},[14,166012,166014],{"id":166013},"_69-集合set","6.9 集合set",[19,166016,166017],{},"集合特点：",[26,166019,166020,166023,166026],{},[29,166021,166022],{},"无序。",[29,166024,166025],{},"元素不重复。",[29,166027,166028],{},"可以做交集、并集、差集。",[51,166030,166032],{"className":230,"code":166031,"language":232,"meta":57,"style":57},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[59,166033,166034,166062],{"__ignoreMap":57},[79,166035,166036,166038,166040,166042,166044,166046,166048,166050,166052,166054,166056,166058,166060],{"class":81,"line":82},[79,166037,165852],{"class":239},[79,166039,244],{"class":243},[79,166041,6647],{"class":239},[79,166043,1072],{"class":96},[79,166045,1060],{"class":239},[79,166047,1049],{"class":96},[79,166049,1060],{"class":239},[79,166051,1188],{"class":96},[79,166053,1060],{"class":239},[79,166055,1188],{"class":96},[79,166057,1060],{"class":239},[79,166059,2668],{"class":96},[79,166061,3801],{"class":239},[79,166063,166064,166066],{"class":81,"line":167},[79,166065,32541],{"class":96},[79,166067,166068],{"class":239},"(nums)\n",[19,166070,166071],{},"创建空集合：",[51,166073,166075],{"className":230,"code":166074,"language":232,"meta":57,"style":57},"s = set()\n",[59,166076,166077],{"__ignoreMap":57},[79,166078,166079,166081,166083,166085],{"class":81,"line":82},[79,166080,12743],{"class":239},[79,166082,244],{"class":243},[79,166084,121474],{"class":96},[79,166086,4191],{"class":239},[19,166088,11209,166089,166091],{},[59,166090,34574],{}," 是空字典，不是空集合。",[19,166093,166094],{},"集合常用操作：",[51,166096,166098],{"className":230,"code":166097,"language":232,"meta":57,"style":57},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[59,166099,166100,166120,166124,166133,166142,166151],{"__ignoreMap":57},[79,166101,166102,166104,166106,166108,166110,166112,166114,166116,166118],{"class":81,"line":82},[79,166103,12743],{"class":239},[79,166105,244],{"class":243},[79,166107,6647],{"class":239},[79,166109,1072],{"class":96},[79,166111,1060],{"class":239},[79,166113,1049],{"class":96},[79,166115,1060],{"class":239},[79,166117,1188],{"class":96},[79,166119,3801],{"class":239},[79,166121,166122],{"class":81,"line":167},[79,166123,454],{"emptyLinePlaceholder":453},[79,166125,166126,166129,166131],{"class":81,"line":178},[79,166127,166128],{"class":239},"s.add(",[79,166130,2668],{"class":96},[79,166132,253],{"class":239},[79,166134,166135,166138,166140],{"class":81,"line":457},[79,166136,166137],{"class":239},"s.remove(",[79,166139,1049],{"class":96},[79,166141,253],{"class":239},[79,166143,166144,166147,166149],{"class":81,"line":462},[79,166145,166146],{"class":239},"s.discard(",[79,166148,2820],{"class":96},[79,166150,253],{"class":239},[79,166152,166153,166155,166157,166159],{"class":81,"line":474},[79,166154,32541],{"class":96},[79,166156,685],{"class":239},[79,166158,9552],{"class":96},[79,166160,166161],{"class":239},"(s))\n",[19,166163,166164],{},"交并差：",[51,166166,166168],{"className":230,"code":166167,"language":232,"meta":57,"style":57},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[59,166169,166170,166190,166210,166214,166229,166242],{"__ignoreMap":57},[79,166171,166172,166174,166176,166178,166180,166182,166184,166186,166188],{"class":81,"line":82},[79,166173,13083],{"class":239},[79,166175,244],{"class":243},[79,166177,6647],{"class":239},[79,166179,1072],{"class":96},[79,166181,1060],{"class":239},[79,166183,1049],{"class":96},[79,166185,1060],{"class":239},[79,166187,1188],{"class":96},[79,166189,3801],{"class":239},[79,166191,166192,166194,166196,166198,166200,166202,166204,166206,166208],{"class":81,"line":167},[79,166193,13109],{"class":239},[79,166195,244],{"class":243},[79,166197,6647],{"class":239},[79,166199,1188],{"class":96},[79,166201,1060],{"class":239},[79,166203,2668],{"class":96},[79,166205,1060],{"class":239},[79,166207,2694],{"class":96},[79,166209,3801],{"class":239},[79,166211,166212],{"class":81,"line":178},[79,166213,454],{"emptyLinePlaceholder":453},[79,166215,166216,166218,166221,166223,166226],{"class":81,"line":457},[79,166217,32541],{"class":96},[79,166219,166220],{"class":239},"(a ",[79,166222,2727],{"class":243},[79,166224,166225],{"class":239}," b)  ",[79,166227,166228],{"class":2440},"# 交集\n",[79,166230,166231,166233,166235,166237,166239],{"class":81,"line":462},[79,166232,32541],{"class":96},[79,166234,166220],{"class":239},[79,166236,3292],{"class":243},[79,166238,166225],{"class":239},[79,166240,166241],{"class":2440},"# 并集\n",[79,166243,166244,166246,166248,166250,166252],{"class":81,"line":474},[79,166245,32541],{"class":96},[79,166247,166220],{"class":239},[79,166249,320],{"class":243},[79,166251,166225],{"class":239},[79,166253,166254],{"class":2440},"# 差集\n",[14,166256,166258],{"id":166257},"_610-字典dict","6.10 字典dict",[19,166260,166261],{},"字典通过 key-value 保存数据。",[51,166263,166265],{"className":230,"code":166264,"language":232,"meta":57,"style":57},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[59,166266,166267,166275,166285,166296,166306],{"__ignoreMap":57},[79,166268,166269,166271,166273],{"class":81,"line":82},[79,166270,151233],{"class":239},[79,166272,244],{"class":243},[79,166274,17732],{"class":239},[79,166276,166277,166279,166281,166283],{"class":81,"line":167},[79,166278,148772],{"class":89},[79,166280,53550],{"class":239},[79,166282,151640],{"class":89},[79,166284,33585],{"class":239},[79,166286,166287,166290,166292,166294],{"class":81,"line":178},[79,166288,166289],{"class":89},"    \"age\"",[79,166291,53550],{"class":239},[79,166293,3023],{"class":96},[79,166295,33585],{"class":239},[79,166297,166298,166301,166303],{"class":81,"line":457},[79,166299,166300],{"class":89},"    \"score\"",[79,166302,53550],{"class":239},[79,166304,166305],{"class":96},"95\n",[79,166307,166308],{"class":81,"line":462},[79,166309,3801],{"class":239},[19,166311,166312],{},"获取值：",[51,166314,166316],{"className":230,"code":166315,"language":232,"meta":57,"style":57},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[59,166317,166318,166329],{"__ignoreMap":57},[79,166319,166320,166322,166325,166327],{"class":81,"line":82},[79,166321,32541],{"class":96},[79,166323,166324],{"class":239},"(student[",[79,166326,64789],{"class":89},[79,166328,1243],{"class":239},[79,166330,166331,166333,166336,166338],{"class":81,"line":167},[79,166332,32541],{"class":96},[79,166334,166335],{"class":239},"(student.get(",[79,166337,64789],{"class":89},[79,166339,1191],{"class":239},[19,166341,17548],{},[51,166343,166345],{"className":230,"code":166344,"language":232,"meta":57,"style":57},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[59,166346,166347,166360],{"__ignoreMap":57},[79,166348,166349,166351,166354,166357],{"class":81,"line":82},[79,166350,154611],{"class":239},[79,166352,166353],{"class":89},"\"address\"",[79,166355,166356],{"class":239},"]     ",[79,166358,166359],{"class":2440},"# key不存在会报错\n",[79,166361,166362,166365,166367,166369],{"class":81,"line":167},[79,166363,166364],{"class":239},"student.get(",[79,166366,166353],{"class":89},[79,166368,15876],{"class":239},[79,166370,166371],{"class":2440},"# key不存在返回None\n",[19,166373,166374],{},"设置默认值：",[51,166376,166378],{"className":230,"code":166377,"language":232,"meta":57,"style":57},"print(student.get(\"address\", \"未知\"))\n",[59,166379,166380],{"__ignoreMap":57},[79,166381,166382,166384,166386,166388,166390,166393],{"class":81,"line":82},[79,166383,32541],{"class":96},[79,166385,166335],{"class":239},[79,166387,166353],{"class":89},[79,166389,1060],{"class":239},[79,166391,166392],{"class":89},"\"未知\"",[79,166394,1191],{"class":239},[19,166396,166397],{},"新增和修改：",[51,166399,166401],{"className":230,"code":166400,"language":232,"meta":57,"style":57},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[59,166402,166403,166416],{"__ignoreMap":57},[79,166404,166405,166407,166409,166411,166413],{"class":81,"line":82},[79,166406,154611],{"class":239},[79,166408,71233],{"class":89},[79,166410,1033],{"class":239},[79,166412,244],{"class":243},[79,166414,166415],{"class":96}," 19\n",[79,166417,166418,166420,166422,166424,166426],{"class":81,"line":167},[79,166419,154611],{"class":239},[79,166421,166353],{"class":89},[79,166423,1033],{"class":239},[79,166425,244],{"class":243},[79,166427,166428],{"class":89}," \"北京\"\n",[19,166430,166431],{},"删除：",[51,166433,166435],{"className":230,"code":166434,"language":232,"meta":57,"style":57},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[59,166436,166437,166450,166460],{"__ignoreMap":57},[79,166438,166439,166441,166443,166446,166448],{"class":81,"line":82},[79,166440,157110],{"class":239},[79,166442,244],{"class":243},[79,166444,166445],{"class":239}," student.pop(",[79,166447,153224],{"class":89},[79,166449,253],{"class":239},[79,166451,166452,166454,166456,166458],{"class":81,"line":167},[79,166453,165135],{"class":243},[79,166455,153901],{"class":239},[79,166457,71233],{"class":89},[79,166459,35361],{"class":239},[79,166461,166462],{"class":81,"line":178},[79,166463,166464],{"class":239},"student.clear()\n",[14,166466,166468],{"id":166467},"_611-字典遍历","6.11 字典遍历",[19,166470,166471],{},"遍历 key：",[51,166473,166475],{"className":230,"code":166474,"language":232,"meta":57,"style":57},"for key in student:\n    print(key, student[key])\n",[59,166476,166477,166489],{"__ignoreMap":57},[79,166478,166479,166481,166484,166486],{"class":81,"line":82},[79,166480,1874],{"class":243},[79,166482,166483],{"class":239}," key ",[79,166485,955],{"class":243},[79,166487,166488],{"class":239}," student:\n",[79,166490,166491,166493],{"class":81,"line":167},[79,166492,1254],{"class":96},[79,166494,166495],{"class":239},"(key, student[key])\n",[19,166497,166498],{},"遍历 value：",[51,166500,166502],{"className":230,"code":166501,"language":232,"meta":57,"style":57},"for value in student.values():\n    print(value)\n",[59,166503,166504,166516],{"__ignoreMap":57},[79,166505,166506,166508,166511,166513],{"class":81,"line":82},[79,166507,1874],{"class":243},[79,166509,166510],{"class":239}," value ",[79,166512,955],{"class":243},[79,166514,166515],{"class":239}," student.values():\n",[79,166517,166518,166520],{"class":81,"line":167},[79,166519,1254],{"class":96},[79,166521,166522],{"class":239},"(value)\n",[19,166524,166525],{},"遍历 key 和 value：",[51,166527,166529],{"className":230,"code":166528,"language":232,"meta":57,"style":57},"for key, value in student.items():\n    print(key, value)\n",[59,166530,166531,166543],{"__ignoreMap":57},[79,166532,166533,166535,166538,166540],{"class":81,"line":82},[79,166534,1874],{"class":243},[79,166536,166537],{"class":239}," key, value ",[79,166539,955],{"class":243},[79,166541,166542],{"class":239}," student.items():\n",[79,166544,166545,166547],{"class":81,"line":167},[79,166546,1254],{"class":96},[79,166548,166549],{"class":239},"(key, value)\n",[14,166551,166553],{"id":166552},"_612-嵌套容器","6.12 嵌套容器",[19,166555,166556],{},"列表中保存字典，是项目中最常见的结构之一。",[51,166558,166560],{"className":230,"code":166559,"language":232,"meta":57,"style":57},"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",[59,166561,166562,166570,166598,166626,166654,166658,166662,166672],{"__ignoreMap":57},[79,166563,166564,166566,166568],{"class":81,"line":82},[79,166565,161468],{"class":239},[79,166567,244],{"class":243},[79,166569,57557],{"class":239},[79,166571,166572,166574,166576,166578,166580,166582,166584,166586,166588,166590,166592,166594,166596],{"class":81,"line":167},[79,166573,150137],{"class":239},[79,166575,64789],{"class":89},[79,166577,53550],{"class":239},[79,166579,151640],{"class":89},[79,166581,1060],{"class":239},[79,166583,71233],{"class":89},[79,166585,53550],{"class":239},[79,166587,3023],{"class":96},[79,166589,1060],{"class":239},[79,166591,153224],{"class":89},[79,166593,53550],{"class":239},[79,166595,3359],{"class":96},[79,166597,7128],{"class":239},[79,166599,166600,166602,166604,166606,166608,166610,166612,166614,166616,166618,166620,166622,166624],{"class":81,"line":178},[79,166601,150137],{"class":239},[79,166603,64789],{"class":89},[79,166605,53550],{"class":239},[79,166607,152688],{"class":89},[79,166609,1060],{"class":239},[79,166611,71233],{"class":89},[79,166613,53550],{"class":239},[79,166615,2998],{"class":96},[79,166617,1060],{"class":239},[79,166619,153224],{"class":89},[79,166621,53550],{"class":239},[79,166623,3184],{"class":96},[79,166625,7128],{"class":239},[79,166627,166628,166630,166632,166634,166636,166638,166640,166642,166644,166646,166648,166650,166652],{"class":81,"line":457},[79,166629,150137],{"class":239},[79,166631,64789],{"class":89},[79,166633,53550],{"class":239},[79,166635,161483],{"class":89},[79,166637,1060],{"class":239},[79,166639,71233],{"class":89},[79,166641,53550],{"class":239},[79,166643,3048],{"class":96},[79,166645,1060],{"class":239},[79,166647,153224],{"class":89},[79,166649,53550],{"class":239},[79,166651,2780],{"class":96},[79,166653,7128],{"class":239},[79,166655,166656],{"class":81,"line":462},[79,166657,35361],{"class":239},[79,166659,166660],{"class":81,"line":474},[79,166661,454],{"emptyLinePlaceholder":453},[79,166663,166664,166666,166668,166670],{"class":81,"line":480},[79,166665,1874],{"class":243},[79,166667,153889],{"class":239},[79,166669,955],{"class":243},[79,166671,153894],{"class":239},[79,166673,166674,166676,166678,166680,166683,166685],{"class":81,"line":486},[79,166675,1254],{"class":96},[79,166677,166324],{"class":239},[79,166679,64789],{"class":89},[79,166681,166682],{"class":239},"], student[",[79,166684,153224],{"class":89},[79,166686,1243],{"class":239},[19,166688,166689],{},"统计平均分：",[51,166691,166693],{"className":230,"code":166692,"language":232,"meta":57,"style":57},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[59,166694,166695,166703,166707,166717,166729,166733,166748],{"__ignoreMap":57},[79,166696,166697,166699,166701],{"class":81,"line":82},[79,166698,159012],{"class":239},[79,166700,244],{"class":243},[79,166702,49447],{"class":96},[79,166704,166705],{"class":81,"line":167},[79,166706,454],{"emptyLinePlaceholder":453},[79,166708,166709,166711,166713,166715],{"class":81,"line":178},[79,166710,1874],{"class":243},[79,166712,153889],{"class":239},[79,166714,955],{"class":243},[79,166716,153894],{"class":239},[79,166718,166719,166721,166723,166725,166727],{"class":81,"line":457},[79,166720,161059],{"class":239},[79,166722,1118],{"class":243},[79,166724,153901],{"class":239},[79,166726,153224],{"class":89},[79,166728,35361],{"class":239},[79,166730,166731],{"class":81,"line":462},[79,166732,454],{"emptyLinePlaceholder":453},[79,166734,166735,166737,166739,166741,166743,166745],{"class":81,"line":474},[79,166736,165526],{"class":239},[79,166738,244],{"class":243},[79,166740,165531],{"class":239},[79,166742,2957],{"class":243},[79,166744,9525],{"class":96},[79,166746,166747],{"class":239},"(students)\n",[79,166749,166750,166752,166754,166756,166758,166760,166762,166764,166766,166768],{"class":81,"line":480},[79,166751,32541],{"class":96},[79,166753,685],{"class":239},[79,166755,688],{"class":243},[79,166757,165549],{"class":89},[79,166759,694],{"class":96},[79,166761,165554],{"class":239},[79,166763,158911],{"class":243},[79,166765,700],{"class":96},[79,166767,703],{"class":89},[79,166769,253],{"class":239},[19,166771,166772],{},"查找学生：",[51,166774,166776],{"className":230,"code":166775,"language":232,"meta":57,"style":57},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[59,166777,166778,166793,166797,166807,166821,166827,166831,166837],{"__ignoreMap":57},[79,166779,166780,166782,166784,166786,166788,166791],{"class":81,"line":82},[79,166781,294],{"class":239},[79,166783,244],{"class":243},[79,166785,62715],{"class":96},[79,166787,685],{"class":239},[79,166789,166790],{"class":89},"\"请输入学生姓名:\"",[79,166792,253],{"class":239},[79,166794,166795],{"class":81,"line":167},[79,166796,454],{"emptyLinePlaceholder":453},[79,166798,166799,166801,166803,166805],{"class":81,"line":178},[79,166800,1874],{"class":243},[79,166802,153889],{"class":239},[79,166804,955],{"class":243},[79,166806,153894],{"class":239},[79,166808,166809,166811,166813,166815,166817,166819],{"class":81,"line":457},[79,166810,662],{"class":243},[79,166812,153901],{"class":239},[79,166814,64789],{"class":89},[79,166816,1033],{"class":239},[79,166818,5155],{"class":243},[79,166820,162184],{"class":239},[79,166822,166823,166825],{"class":81,"line":462},[79,166824,34566],{"class":96},[79,166826,151794],{"class":239},[79,166828,166829],{"class":81,"line":474},[79,166830,33745],{"class":243},[79,166832,166833,166835],{"class":81,"line":480},[79,166834,3926],{"class":243},[79,166836,673],{"class":239},[79,166838,166839,166841,166843,166846],{"class":81,"line":486},[79,166840,1254],{"class":96},[79,166842,685],{"class":239},[79,166844,166845],{"class":89},"\"没有找到\"",[79,166847,253],{"class":239},[14,166849,166851],{"id":166850},"_613-容器通用操作","6.13 容器通用操作",[19,166853,166854],{},"长度：",[51,166856,166858],{"className":230,"code":166857,"language":232,"meta":57,"style":57},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[59,166859,166860,166879,166889],{"__ignoreMap":57},[79,166861,166862,166864,166867,166869,166871,166873,166875,166877],{"class":81,"line":82},[79,166863,9552],{"class":96},[79,166865,166866],{"class":239},"([",[79,166868,1072],{"class":96},[79,166870,1060],{"class":239},[79,166872,1049],{"class":96},[79,166874,1060],{"class":239},[79,166876,1188],{"class":96},[79,166878,1243],{"class":239},[79,166880,166881,166883,166885,166887],{"class":81,"line":167},[79,166882,9552],{"class":96},[79,166884,685],{"class":239},[79,166886,157632],{"class":89},[79,166888,253],{"class":239},[79,166890,166891,166893,166896,166898,166900,166902],{"class":81,"line":178},[79,166892,9552],{"class":96},[79,166894,166895],{"class":239},"({",[79,166897,64789],{"class":89},[79,166899,53550],{"class":239},[79,166901,151640],{"class":89},[79,166903,166904],{"class":239},"})\n",[19,166906,166907],{},"最大最小：",[51,166909,166911],{"className":230,"code":166910,"language":232,"meta":57,"style":57},"max([1, 2, 3])\nmin([1, 2, 3])\n",[59,166912,166913,166931],{"__ignoreMap":57},[79,166914,166915,166917,166919,166921,166923,166925,166927,166929],{"class":81,"line":82},[79,166916,8210],{"class":96},[79,166918,166866],{"class":239},[79,166920,1072],{"class":96},[79,166922,1060],{"class":239},[79,166924,1049],{"class":96},[79,166926,1060],{"class":239},[79,166928,1188],{"class":96},[79,166930,1243],{"class":239},[79,166932,166933,166936,166938,166940,166942,166944,166946,166948],{"class":81,"line":167},[79,166934,166935],{"class":96},"min",[79,166937,166866],{"class":239},[79,166939,1072],{"class":96},[79,166941,1060],{"class":239},[79,166943,1049],{"class":96},[79,166945,1060],{"class":239},[79,166947,1188],{"class":96},[79,166949,1243],{"class":239},[19,166951,166952],{},"求和：",[51,166954,166956],{"className":230,"code":166955,"language":232,"meta":57,"style":57},"sum([1, 2, 3])\n",[59,166957,166958],{"__ignoreMap":57},[79,166959,166960,166963,166965,166967,166969,166971,166973,166975],{"class":81,"line":82},[79,166961,166962],{"class":96},"sum",[79,166964,166866],{"class":239},[79,166966,1072],{"class":96},[79,166968,1060],{"class":239},[79,166970,1049],{"class":96},[79,166972,1060],{"class":239},[79,166974,1188],{"class":96},[79,166976,1243],{"class":239},[19,166978,165223],{},[51,166980,166982],{"className":230,"code":166981,"language":232,"meta":57,"style":57},"sorted([3, 1, 2])\n",[59,166983,166984],{"__ignoreMap":57},[79,166985,166986,166989,166991,166993,166995,166997,166999,167001],{"class":81,"line":82},[79,166987,166988],{"class":96},"sorted",[79,166990,166866],{"class":239},[79,166992,1188],{"class":96},[79,166994,1060],{"class":239},[79,166996,1072],{"class":96},[79,166998,1060],{"class":239},[79,167000,1049],{"class":96},[79,167002,1243],{"class":239},[19,167004,167005],{},"类型转换：",[51,167007,167009],{"className":230,"code":167008,"language":232,"meta":57,"style":57},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[59,167010,167011,167021,167039],{"__ignoreMap":57},[79,167012,167013,167015,167017,167019],{"class":81,"line":82},[79,167014,155822],{"class":96},[79,167016,685],{"class":239},[79,167018,157632],{"class":89},[79,167020,253],{"class":239},[79,167022,167023,167025,167027,167029,167031,167033,167035,167037],{"class":81,"line":167},[79,167024,157017],{"class":96},[79,167026,166866],{"class":239},[79,167028,1072],{"class":96},[79,167030,1060],{"class":239},[79,167032,1049],{"class":96},[79,167034,1060],{"class":239},[79,167036,1188],{"class":96},[79,167038,1243],{"class":239},[79,167040,167041,167043,167045,167047,167049,167051,167053,167055,167057,167059],{"class":81,"line":178},[79,167042,157042],{"class":96},[79,167044,166866],{"class":239},[79,167046,1072],{"class":96},[79,167048,1060],{"class":239},[79,167050,1072],{"class":96},[79,167052,1060],{"class":239},[79,167054,1049],{"class":96},[79,167056,1060],{"class":239},[79,167058,1188],{"class":96},[79,167060,1243],{"class":239},[19,167062,167063],{},"成员判断：",[51,167065,167067],{"className":230,"code":167066,"language":232,"meta":57,"style":57},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[59,167068,167069,167086,167110],{"__ignoreMap":57},[79,167070,167071,167073,167075,167078,167081,167084],{"class":81,"line":82},[79,167072,32541],{"class":96},[79,167074,685],{"class":239},[79,167076,167077],{"class":89},"\"a\"",[79,167079,167080],{"class":243}," in",[79,167082,167083],{"class":89}," \"abc\"",[79,167085,253],{"class":239},[79,167087,167088,167090,167092,167094,167096,167098,167100,167102,167104,167106,167108],{"class":81,"line":167},[79,167089,32541],{"class":96},[79,167091,685],{"class":239},[79,167093,1072],{"class":96},[79,167095,167080],{"class":243},[79,167097,54339],{"class":239},[79,167099,1072],{"class":96},[79,167101,1060],{"class":239},[79,167103,1049],{"class":96},[79,167105,1060],{"class":239},[79,167107,1188],{"class":96},[79,167109,1243],{"class":239},[79,167111,167112,167114,167116,167118,167120,167122,167124,167126,167128],{"class":81,"line":178},[79,167113,32541],{"class":96},[79,167115,685],{"class":239},[79,167117,64789],{"class":89},[79,167119,167080],{"class":243},[79,167121,6647],{"class":239},[79,167123,64789],{"class":89},[79,167125,53550],{"class":239},[79,167127,151640],{"class":89},[79,167129,166904],{"class":239},[14,167131,167133],{"id":167132},"_614-推导式","6.14 推导式",[19,167135,167136],{},"推导式用于快速生成容器。",[19,167138,167139],{},"列表推导式：",[51,167141,167143],{"className":230,"code":167142,"language":232,"meta":57,"style":57},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[59,167144,167145,167172],{"__ignoreMap":57},[79,167146,167147,167149,167151,167154,167156,167158,167160,167162,167164,167166,167168,167170],{"class":81,"line":82},[79,167148,165852],{"class":239},[79,167150,244],{"class":243},[79,167152,167153],{"class":239}," [i ",[79,167155,1874],{"class":243},[79,167157,11622],{"class":239},[79,167159,955],{"class":243},[79,167161,958],{"class":96},[79,167163,685],{"class":239},[79,167165,1072],{"class":96},[79,167167,1060],{"class":239},[79,167169,2718],{"class":96},[79,167171,99403],{"class":239},[79,167173,167174,167176],{"class":81,"line":167},[79,167175,32541],{"class":96},[79,167177,166068],{"class":239},[19,167179,167180],{},"带条件：",[51,167182,167184],{"className":230,"code":167183,"language":232,"meta":57,"style":57},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[59,167185,167186,167227],{"__ignoreMap":57},[79,167187,167188,167191,167193,167195,167197,167199,167201,167203,167205,167207,167209,167211,167213,167215,167217,167219,167221,167223,167225],{"class":81,"line":82},[79,167189,167190],{"class":239},"even_nums ",[79,167192,244],{"class":243},[79,167194,167153],{"class":239},[79,167196,1874],{"class":243},[79,167198,11622],{"class":239},[79,167200,955],{"class":243},[79,167202,958],{"class":96},[79,167204,685],{"class":239},[79,167206,1072],{"class":96},[79,167208,1060],{"class":239},[79,167210,2711],{"class":96},[79,167212,15876],{"class":239},[79,167214,1329],{"class":243},[79,167216,11622],{"class":239},[79,167218,1137],{"class":243},[79,167220,16916],{"class":96},[79,167222,1143],{"class":243},[79,167224,670],{"class":96},[79,167226,35361],{"class":239},[79,167228,167229,167231],{"class":81,"line":167},[79,167230,32541],{"class":96},[79,167232,167233],{"class":239},"(even_nums)\n",[19,167235,167236],{},"字典推导式：",[51,167238,167240],{"className":230,"code":167239,"language":232,"meta":57,"style":57},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[59,167241,167242,167276],{"__ignoreMap":57},[79,167243,167244,167247,167249,167252,167254,167256,167259,167261,167263,167265,167267,167269,167271,167273],{"class":81,"line":82},[79,167245,167246],{"class":239},"squares ",[79,167248,244],{"class":243},[79,167250,167251],{"class":239}," {i: i ",[79,167253,12825],{"class":243},[79,167255,16916],{"class":96},[79,167257,167258],{"class":243}," for",[79,167260,11622],{"class":239},[79,167262,955],{"class":243},[79,167264,958],{"class":96},[79,167266,685],{"class":239},[79,167268,1072],{"class":96},[79,167270,1060],{"class":239},[79,167272,2718],{"class":96},[79,167274,167275],{"class":239},")}\n",[79,167277,167278,167280],{"class":81,"line":167},[79,167279,32541],{"class":96},[79,167281,167282],{"class":239},"(squares)\n",[19,167284,167285],{},"集合推导式：",[51,167287,167289],{"className":230,"code":167288,"language":232,"meta":57,"style":57},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[59,167290,167291,167312],{"__ignoreMap":57},[79,167292,167293,167296,167298,167301,167303,167305,167307,167310],{"class":81,"line":82},[79,167294,167295],{"class":239},"chars ",[79,167297,244],{"class":243},[79,167299,167300],{"class":239}," {ch ",[79,167302,1874],{"class":243},[79,167304,161444],{"class":239},[79,167306,955],{"class":243},[79,167308,167309],{"class":89}," \"hello\"",[79,167311,3801],{"class":239},[79,167313,167314,167316],{"class":81,"line":167},[79,167315,32541],{"class":96},[79,167317,167318],{"class":239},"(chars)\n",[19,167320,167321],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167323,167325],{"id":167324},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[51,167327,167329],{"className":230,"code":167328,"language":232,"meta":57,"style":57},"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",[59,167330,167331,167339,167359,167379,167399,167419,167423,167427,167435,167449,167458,167462,167472,167484,167488,167508,167517,167521,167537,167542,167546,167560,167564,167586,167622],{"__ignoreMap":57},[79,167332,167333,167335,167337],{"class":81,"line":82},[79,167334,161468],{"class":239},[79,167336,244],{"class":243},[79,167338,57557],{"class":239},[79,167340,167341,167343,167345,167347,167349,167351,167353,167355,167357],{"class":81,"line":167},[79,167342,150137],{"class":239},[79,167344,64789],{"class":89},[79,167346,53550],{"class":239},[79,167348,151640],{"class":89},[79,167350,1060],{"class":239},[79,167352,153224],{"class":89},[79,167354,53550],{"class":239},[79,167356,3359],{"class":96},[79,167358,7128],{"class":239},[79,167360,167361,167363,167365,167367,167369,167371,167373,167375,167377],{"class":81,"line":178},[79,167362,150137],{"class":239},[79,167364,64789],{"class":89},[79,167366,53550],{"class":239},[79,167368,152688],{"class":89},[79,167370,1060],{"class":239},[79,167372,153224],{"class":89},[79,167374,53550],{"class":239},[79,167376,3184],{"class":96},[79,167378,7128],{"class":239},[79,167380,167381,167383,167385,167387,167389,167391,167393,167395,167397],{"class":81,"line":457},[79,167382,150137],{"class":239},[79,167384,64789],{"class":89},[79,167386,53550],{"class":239},[79,167388,161483],{"class":89},[79,167390,1060],{"class":239},[79,167392,153224],{"class":89},[79,167394,53550],{"class":239},[79,167396,2780],{"class":96},[79,167398,7128],{"class":239},[79,167400,167401,167403,167405,167407,167409,167411,167413,167415,167417],{"class":81,"line":462},[79,167402,150137],{"class":239},[79,167404,64789],{"class":89},[79,167406,53550],{"class":239},[79,167408,165062],{"class":89},[79,167410,1060],{"class":239},[79,167412,153224],{"class":89},[79,167414,53550],{"class":239},[79,167416,3255],{"class":96},[79,167418,7128],{"class":239},[79,167420,167421],{"class":81,"line":474},[79,167422,35361],{"class":239},[79,167424,167425],{"class":81,"line":480},[79,167426,454],{"emptyLinePlaceholder":453},[79,167428,167429,167431,167433],{"class":81,"line":486},[79,167430,159012],{"class":239},[79,167432,244],{"class":243},[79,167434,49447],{"class":96},[79,167436,167437,167440,167442,167445,167447],{"class":81,"line":491},[79,167438,167439],{"class":239},"max_student ",[79,167441,244],{"class":243},[79,167443,167444],{"class":239}," students[",[79,167446,1030],{"class":96},[79,167448,35361],{"class":239},[79,167450,167451,167454,167456],{"class":81,"line":497},[79,167452,167453],{"class":239},"passed ",[79,167455,244],{"class":243},[79,167457,53951],{"class":239},[79,167459,167460],{"class":81,"line":503},[79,167461,454],{"emptyLinePlaceholder":453},[79,167463,167464,167466,167468,167470],{"class":81,"line":509},[79,167465,1874],{"class":243},[79,167467,153889],{"class":239},[79,167469,955],{"class":243},[79,167471,153894],{"class":239},[79,167473,167474,167476,167478,167480,167482],{"class":81,"line":514},[79,167475,161059],{"class":239},[79,167477,1118],{"class":243},[79,167479,153901],{"class":239},[79,167481,153224],{"class":89},[79,167483,35361],{"class":239},[79,167485,167486],{"class":81,"line":520},[79,167487,454],{"emptyLinePlaceholder":453},[79,167489,167490,167492,167494,167496,167498,167500,167503,167505],{"class":81,"line":526},[79,167491,662],{"class":243},[79,167493,153901],{"class":239},[79,167495,153224],{"class":89},[79,167497,1033],{"class":239},[79,167499,3330],{"class":243},[79,167501,167502],{"class":239}," max_student[",[79,167504,153224],{"class":89},[79,167506,167507],{"class":239},"]:\n",[79,167509,167510,167513,167515],{"class":81,"line":532},[79,167511,167512],{"class":239},"        max_student ",[79,167514,244],{"class":243},[79,167516,153917],{"class":239},[79,167518,167519],{"class":81,"line":537},[79,167520,454],{"emptyLinePlaceholder":453},[79,167522,167523,167525,167527,167529,167531,167533,167535],{"class":81,"line":543},[79,167524,662],{"class":243},[79,167526,153901],{"class":239},[79,167528,153224],{"class":89},[79,167530,1033],{"class":239},[79,167532,3935],{"class":243},[79,167534,159589],{"class":96},[79,167536,673],{"class":239},[79,167538,167539],{"class":81,"line":549},[79,167540,167541],{"class":239},"        passed.append(student)\n",[79,167543,167544],{"class":81,"line":555},[79,167545,454],{"emptyLinePlaceholder":453},[79,167547,167548,167550,167552,167554,167556,167558],{"class":81,"line":561},[79,167549,165526],{"class":239},[79,167551,244],{"class":243},[79,167553,165531],{"class":239},[79,167555,2957],{"class":243},[79,167557,9525],{"class":96},[79,167559,166747],{"class":239},[79,167561,167562],{"class":81,"line":567},[79,167563,454],{"emptyLinePlaceholder":453},[79,167565,167566,167568,167570,167572,167574,167576,167578,167580,167582,167584],{"class":81,"line":573},[79,167567,32541],{"class":96},[79,167569,685],{"class":239},[79,167571,688],{"class":243},[79,167573,165549],{"class":89},[79,167575,694],{"class":96},[79,167577,165554],{"class":239},[79,167579,158911],{"class":243},[79,167581,700],{"class":96},[79,167583,703],{"class":89},[79,167585,253],{"class":239},[79,167587,167588,167590,167592,167594,167597,167599,167602,167604,167606,167608,167610,167612,167614,167616,167618,167620],{"class":81,"line":579},[79,167589,32541],{"class":96},[79,167591,685],{"class":239},[79,167593,688],{"class":243},[79,167595,167596],{"class":89},"\"最高分学生:",[79,167598,694],{"class":96},[79,167600,167601],{"class":239},"max_student[",[79,167603,154634],{"class":89},[79,167605,3311],{"class":239},[79,167607,700],{"class":96},[79,167609,6647],{"class":96},[79,167611,167601],{"class":239},[79,167613,154672],{"class":89},[79,167615,3311],{"class":239},[79,167617,700],{"class":96},[79,167619,703],{"class":89},[79,167621,253],{"class":239},[79,167623,167624,167626,167628,167630,167633,167636,167639,167641,167643],{"class":81,"line":584},[79,167625,32541],{"class":96},[79,167627,685],{"class":239},[79,167629,688],{"class":243},[79,167631,167632],{"class":89},"\"及格人数:",[79,167634,167635],{"class":96},"{len",[79,167637,167638],{"class":239},"(passed)",[79,167640,700],{"class":96},[79,167642,703],{"class":89},[79,167644,253],{"class":239},[14,167646,167648],{"id":167647},"_616-易错点","6.16 易错点",[26,167650,167651,167654,167657,167660,167666,167675],{},[29,167652,167653],{},"列表可变，元组和字符串不可变。",[29,167655,167656],{},"切片结束位置不包含。",[29,167658,167659],{},"字典通过 key 取值，不是通过索引。",[29,167661,167662,167663,1604],{},"空集合要用 ",[59,167664,167665],{},"set()",[29,167667,106387,167668,167671,167672,1604],{},[59,167669,167670],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[59,167673,167674],{},"get()",[29,167676,167677],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167679,167681],{"id":167680},"_617-本章练习","6.17 本章练习",[26,167683,167684,167687,167690,167693,167696],{},[29,167685,167686],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[29,167688,167689],{},"输入一句话，统计每个字符出现次数。",[29,167691,167692],{},"使用集合去除列表中的重复元素。",[29,167694,167695],{},"使用字典保存一个学生的信息，并实现修改成绩。",[29,167697,167698],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[2287,167700,167701],{},"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":57,"searchDepth":167,"depth":167,"links":167703},[167704,167705,167706,167707,167708,167709,167710,167711,167712,167713,167714,167715,167716,167717,167718,167719,167720],{"id":164684,"depth":167,"text":164685},{"id":164801,"depth":167,"text":164802},{"id":164891,"depth":167,"text":164892},{"id":165015,"depth":167,"text":165016},{"id":165378,"depth":167,"text":165379},{"id":165565,"depth":167,"text":165566},{"id":165684,"depth":167,"text":165685},{"id":165826,"depth":167,"text":165827},{"id":166013,"depth":167,"text":166014},{"id":166257,"depth":167,"text":166258},{"id":166467,"depth":167,"text":166468},{"id":166552,"depth":167,"text":166553},{"id":166850,"depth":167,"text":166851},{"id":167132,"depth":167,"text":167133},{"id":167324,"depth":167,"text":167325},{"id":167647,"depth":167,"text":167648},{"id":167680,"depth":167,"text":167681},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164676,"description":25516},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167727,"title":167728,"body":167729,"description":25516,"extension":2314,"meta":169901,"navigation":453,"path":169902,"seo":169903,"stem":169904,"__hash__":169905},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167730,"toc":169876},[167731,167734,167738,167741,167821,167824,167845,167848,167852,167855,167917,167920,167937,167941,167944,167989,167991,167999,168003,168006,168088,168091,168094,168119,168122,168145,168149,168152,168154,168216,168219,168221,168272,168276,168280,168286,168391,168395,168401,168472,168476,168479,168547,168550,168630,168634,168640,168676,168679,168682,168792,168798,168802,168805,168877,168880,168884,168888,168893,168955,168959,168964,169032,169036,169041,169157,169161,169164,169244,169247,169251,169254,169358,169360,169375,169378,169382,169520,169528,169532,169534,169545,169547,169805,169809,169841,169845,169873],[10,167732,167728],{"id":167733},"_7-函数进阶",[14,167735,167737],{"id":167736},"_71-多返回值","7.1 多返回值",[19,167739,167740],{},"Python 函数可以返回多个值，本质上返回的是元组。",[51,167742,167744],{"className":230,"code":167743,"language":232,"meta":57,"style":57},"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",[59,167745,167746,167755,167763,167771,167780,167787,167791,167795,167804,167810],{"__ignoreMap":57},[79,167747,167748,167750,167753],{"class":81,"line":82},[79,167749,633],{"class":243},[79,167751,167752],{"class":85}," get_info",[79,167754,34070],{"class":239},[79,167756,167757,167759,167761],{"class":81,"line":167},[79,167758,154122],{"class":239},[79,167760,244],{"class":243},[79,167762,151105],{"class":89},[79,167764,167765,167767,167769],{"class":81,"line":178},[79,167766,154138],{"class":239},[79,167768,244],{"class":243},[79,167770,148303],{"class":96},[79,167772,167773,167775,167777],{"class":81,"line":457},[79,167774,154153],{"class":239},[79,167776,244],{"class":243},[79,167778,167779],{"class":96}," 95\n",[79,167781,167782,167784],{"class":81,"line":462},[79,167783,711],{"class":243},[79,167785,167786],{"class":239}," name, age, score\n",[79,167788,167789],{"class":81,"line":474},[79,167790,454],{"emptyLinePlaceholder":453},[79,167792,167793],{"class":81,"line":480},[79,167794,454],{"emptyLinePlaceholder":453},[79,167796,167797,167799,167801],{"class":81,"line":486},[79,167798,163058],{"class":239},[79,167800,244],{"class":243},[79,167802,167803],{"class":239}," get_info()\n",[79,167805,167806,167808],{"class":81,"line":491},[79,167807,32541],{"class":96},[79,167809,78693],{"class":239},[79,167811,167812,167814,167816,167818],{"class":81,"line":497},[79,167813,32541],{"class":96},[79,167815,685],{"class":239},[79,167817,105145],{"class":96},[79,167819,167820],{"class":239},"(result))\n",[19,167822,167823],{},"可以直接解包：",[51,167825,167827],{"className":230,"code":167826,"language":232,"meta":57,"style":57},"name, age, score = get_info()\nprint(name, age, score)\n",[59,167828,167829,167838],{"__ignoreMap":57},[79,167830,167831,167834,167836],{"class":81,"line":82},[79,167832,167833],{"class":239},"name, age, score ",[79,167835,244],{"class":243},[79,167837,167803],{"class":239},[79,167839,167840,167842],{"class":81,"line":167},[79,167841,32541],{"class":96},[79,167843,167844],{"class":239},"(name, age, score)\n",[19,167846,167847],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167849,167851],{"id":167850},"_72-位置参数","7.2 位置参数",[19,167853,167854],{},"位置参数按顺序传递。",[51,167856,167858],{"className":230,"code":167857,"language":232,"meta":57,"style":57},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[59,167859,167860,167868,167896,167900,167904],{"__ignoreMap":57},[79,167861,167862,167864,167866],{"class":81,"line":82},[79,167863,633],{"class":243},[79,167865,151124],{"class":85},[79,167867,151127],{"class":239},[79,167869,167870,167872,167874,167876,167878,167880,167882,167884,167886,167888,167890,167892,167894],{"class":81,"line":167},[79,167871,1254],{"class":96},[79,167873,685],{"class":239},[79,167875,688],{"class":243},[79,167877,151138],{"class":89},[79,167879,694],{"class":96},[79,167881,697],{"class":239},[79,167883,700],{"class":96},[79,167885,151147],{"class":89},[79,167887,694],{"class":96},[79,167889,72329],{"class":239},[79,167891,700],{"class":96},[79,167893,151156],{"class":89},[79,167895,253],{"class":239},[79,167897,167898],{"class":81,"line":178},[79,167899,454],{"emptyLinePlaceholder":453},[79,167901,167902],{"class":81,"line":457},[79,167903,454],{"emptyLinePlaceholder":453},[79,167905,167906,167909,167911,167913,167915],{"class":81,"line":462},[79,167907,167908],{"class":239},"introduce(",[79,167910,151640],{"class":89},[79,167912,1060],{"class":239},[79,167914,3023],{"class":96},[79,167916,253],{"class":239},[19,167918,167919],{},"顺序错了就会得到错误含义：",[51,167921,167923],{"className":230,"code":167922,"language":232,"meta":57,"style":57},"introduce(18, \"小明\")\n",[59,167924,167925],{"__ignoreMap":57},[79,167926,167927,167929,167931,167933,167935],{"class":81,"line":82},[79,167928,167908],{"class":239},[79,167930,3023],{"class":96},[79,167932,1060],{"class":239},[79,167934,151640],{"class":89},[79,167936,253],{"class":239},[14,167938,167940],{"id":167939},"_73-关键字参数","7.3 关键字参数",[19,167942,167943],{},"关键字参数按参数名传递。",[51,167945,167947],{"className":230,"code":167946,"language":232,"meta":57,"style":57},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[59,167948,167949,167969],{"__ignoreMap":57},[79,167950,167951,167953,167955,167957,167959,167961,167963,167965,167967],{"class":81,"line":82},[79,167952,167908],{"class":239},[79,167954,697],{"class":7412},[79,167956,244],{"class":243},[79,167958,151640],{"class":89},[79,167960,1060],{"class":239},[79,167962,72329],{"class":7412},[79,167964,244],{"class":243},[79,167966,3023],{"class":96},[79,167968,253],{"class":239},[79,167970,167971,167973,167975,167977,167979,167981,167983,167985,167987],{"class":81,"line":167},[79,167972,167908],{"class":239},[79,167974,72329],{"class":7412},[79,167976,244],{"class":243},[79,167978,3023],{"class":96},[79,167980,1060],{"class":239},[79,167982,697],{"class":7412},[79,167984,244],{"class":243},[79,167986,151640],{"class":89},[79,167988,253],{"class":239},[19,167990,119686],{},[26,167992,167993,167996],{},[29,167994,167995],{},"顺序不容易错。",[29,167997,167998],{},"调用时可读性更强。",[14,168000,168002],{"id":168001},"_74-默认参数","7.4 默认参数",[19,168004,168005],{},"默认参数给参数设置默认值。",[51,168007,168009],{"className":230,"code":168008,"language":232,"meta":57,"style":57},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[59,168010,168011,168027,168057,168061,168065,168075],{"__ignoreMap":57},[79,168012,168013,168015,168017,168020,168022,168025],{"class":81,"line":82},[79,168014,633],{"class":243},[79,168016,123845],{"class":85},[79,168018,168019],{"class":239},"(host, port",[79,168021,244],{"class":243},[79,168023,168024],{"class":96},"3306",[79,168026,966],{"class":239},[79,168028,168029,168031,168033,168035,168038,168040,168042,168044,168046,168048,168051,168053,168055],{"class":81,"line":167},[79,168030,1254],{"class":96},[79,168032,685],{"class":239},[79,168034,688],{"class":243},[79,168036,168037],{"class":89},"\"连接",[79,168039,694],{"class":96},[79,168041,29527],{"class":239},[79,168043,700],{"class":96},[79,168045,3232],{"class":89},[79,168047,694],{"class":96},[79,168049,168050],{"class":239},"port",[79,168052,700],{"class":96},[79,168054,703],{"class":89},[79,168056,253],{"class":239},[79,168058,168059],{"class":81,"line":178},[79,168060,454],{"emptyLinePlaceholder":453},[79,168062,168063],{"class":81,"line":457},[79,168064,454],{"emptyLinePlaceholder":453},[79,168066,168067,168070,168073],{"class":81,"line":462},[79,168068,168069],{"class":239},"connect(",[79,168071,168072],{"class":89},"\"localhost\"",[79,168074,253],{"class":239},[79,168076,168077,168079,168081,168083,168086],{"class":81,"line":474},[79,168078,168069],{"class":239},[79,168080,168072],{"class":89},[79,168082,1060],{"class":239},[79,168084,168085],{"class":96},"6379",[79,168087,253],{"class":239},[19,168089,168090],{},"注意：默认参数必须放在非默认参数后面。",[19,168092,168093],{},"错误：",[51,168095,168097],{"className":230,"code":168096,"language":232,"meta":57,"style":57},"def connect(port=3306, host):\n    pass\n",[59,168098,168099,168115],{"__ignoreMap":57},[79,168100,168101,168103,168105,168108,168110,168112],{"class":81,"line":82},[79,168102,633],{"class":243},[79,168104,123845],{"class":85},[79,168106,168107],{"class":239},"(port",[79,168109,244],{"class":243},[79,168111,168024],{"class":96},[79,168113,168114],{"class":239},", host):\n",[79,168116,168117],{"class":81,"line":167},[79,168118,151289],{"class":243},[19,168120,168121],{},"正确：",[51,168123,168125],{"className":230,"code":168124,"language":232,"meta":57,"style":57},"def connect(host, port=3306):\n    pass\n",[59,168126,168127,168141],{"__ignoreMap":57},[79,168128,168129,168131,168133,168135,168137,168139],{"class":81,"line":82},[79,168130,633],{"class":243},[79,168132,123845],{"class":85},[79,168134,168019],{"class":239},[79,168136,244],{"class":243},[79,168138,168024],{"class":96},[79,168140,966],{"class":239},[79,168142,168143],{"class":81,"line":167},[79,168144,151289],{"class":243},[14,168146,168148],{"id":168147},"_75-默认参数的坑","7.5 默认参数的坑",[19,168150,168151],{},"不要使用可变对象作为默认参数。",[19,168153,159375],{},[51,168155,168157],{"className":230,"code":168156,"language":232,"meta":57,"style":57},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[59,168158,168159,168174,168179,168186,168190,168194,168205],{"__ignoreMap":57},[79,168160,168161,168163,168166,168169,168171],{"class":81,"line":82},[79,168162,633],{"class":243},[79,168164,168165],{"class":85}," add_item",[79,168167,168168],{"class":239},"(item, items",[79,168170,244],{"class":243},[79,168172,168173],{"class":239},"[]):\n",[79,168175,168176],{"class":81,"line":167},[79,168177,168178],{"class":239},"    items.append(item)\n",[79,168180,168181,168183],{"class":81,"line":178},[79,168182,711],{"class":243},[79,168184,168185],{"class":239}," items\n",[79,168187,168188],{"class":81,"line":457},[79,168189,454],{"emptyLinePlaceholder":453},[79,168191,168192],{"class":81,"line":462},[79,168193,454],{"emptyLinePlaceholder":453},[79,168195,168196,168198,168201,168203],{"class":81,"line":474},[79,168197,32541],{"class":96},[79,168199,168200],{"class":239},"(add_item(",[79,168202,167077],{"class":89},[79,168204,1191],{"class":239},[79,168206,168207,168209,168211,168214],{"class":81,"line":480},[79,168208,32541],{"class":96},[79,168210,168200],{"class":239},[79,168212,168213],{"class":89},"\"b\"",[79,168215,1191],{"class":239},[19,168217,168218],{},"第二次调用会复用第一次的列表。",[19,168220,157640],{},[51,168222,168224],{"className":230,"code":168223,"language":232,"meta":57,"style":57},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[59,168225,168226,168240,168253,168262,168266],{"__ignoreMap":57},[79,168227,168228,168230,168232,168234,168236,168238],{"class":81,"line":82},[79,168229,633],{"class":243},[79,168231,168165],{"class":85},[79,168233,168168],{"class":239},[79,168235,244],{"class":243},[79,168237,899],{"class":96},[79,168239,966],{"class":239},[79,168241,168242,168244,168247,168249,168251],{"class":81,"line":167},[79,168243,662],{"class":243},[79,168245,168246],{"class":239}," items ",[79,168248,41041],{"class":243},[79,168250,41047],{"class":96},[79,168252,673],{"class":239},[79,168254,168255,168258,168260],{"class":81,"line":178},[79,168256,168257],{"class":239},"        items ",[79,168259,244],{"class":243},[79,168261,53951],{"class":239},[79,168263,168264],{"class":81,"line":457},[79,168265,168178],{"class":239},[79,168267,168268,168270],{"class":81,"line":462},[79,168269,711],{"class":243},[79,168271,168185],{"class":239},[14,168273,168275],{"id":168274},"_76-不定长参数","7.6 不定长参数",[265,168277,168279],{"id":168278},"_761-args","7.6.1 *args",[19,168281,168282,168285],{},[59,168283,168284],{},"*args"," 接收任意数量的位置参数，得到元组。",[51,168287,168289],{"className":230,"code":168288,"language":232,"meta":57,"style":57},"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",[59,168290,168291,168304,168312,168323,168332,168338,168342,168346,168365],{"__ignoreMap":57},[79,168292,168293,168295,168297,168299,168301],{"class":81,"line":82},[79,168294,633],{"class":243},[79,168296,7405],{"class":85},[79,168298,685],{"class":239},[79,168300,2829],{"class":243},[79,168302,168303],{"class":239},"args):\n",[79,168305,168306,168308,168310],{"class":81,"line":167},[79,168307,161059],{"class":239},[79,168309,244],{"class":243},[79,168311,49447],{"class":96},[79,168313,168314,168316,168318,168320],{"class":81,"line":178},[79,168315,949],{"class":243},[79,168317,157932],{"class":239},[79,168319,955],{"class":243},[79,168321,168322],{"class":239}," args:\n",[79,168324,168325,168327,168329],{"class":81,"line":457},[79,168326,161734],{"class":239},[79,168328,1118],{"class":243},[79,168330,168331],{"class":239}," num\n",[79,168333,168334,168336],{"class":81,"line":462},[79,168335,711],{"class":243},[79,168337,164039],{"class":239},[79,168339,168340],{"class":81,"line":474},[79,168341,454],{"emptyLinePlaceholder":453},[79,168343,168344],{"class":81,"line":480},[79,168345,454],{"emptyLinePlaceholder":453},[79,168347,168348,168350,168353,168355,168357,168359,168361,168363],{"class":81,"line":486},[79,168349,32541],{"class":96},[79,168351,168352],{"class":239},"(add(",[79,168354,1072],{"class":96},[79,168356,1060],{"class":239},[79,168358,1049],{"class":96},[79,168360,1060],{"class":239},[79,168362,1188],{"class":96},[79,168364,1191],{"class":239},[79,168366,168367,168369,168371,168373,168375,168377,168379,168381,168383,168385,168387,168389],{"class":81,"line":491},[79,168368,32541],{"class":96},[79,168370,168352],{"class":239},[79,168372,1072],{"class":96},[79,168374,1060],{"class":239},[79,168376,1049],{"class":96},[79,168378,1060],{"class":239},[79,168380,1188],{"class":96},[79,168382,1060],{"class":239},[79,168384,2668],{"class":96},[79,168386,1060],{"class":239},[79,168388,2694],{"class":96},[79,168390,1191],{"class":239},[265,168392,168394],{"id":168393},"_762-kwargs","7.6.2 **kwargs",[19,168396,168397,168400],{},[59,168398,168399],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[51,168402,168404],{"className":230,"code":168403,"language":232,"meta":57,"style":57},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[59,168405,168406,168419,168430,168436,168440,168444],{"__ignoreMap":57},[79,168407,168408,168410,168412,168414,168416],{"class":81,"line":82},[79,168409,633],{"class":243},[79,168411,163697],{"class":85},[79,168413,685],{"class":239},[79,168415,12825],{"class":243},[79,168417,168418],{"class":239},"kwargs):\n",[79,168420,168421,168423,168425,168427],{"class":81,"line":167},[79,168422,949],{"class":243},[79,168424,166537],{"class":239},[79,168426,955],{"class":243},[79,168428,168429],{"class":239}," kwargs.items():\n",[79,168431,168432,168434],{"class":81,"line":178},[79,168433,34566],{"class":96},[79,168435,166549],{"class":239},[79,168437,168438],{"class":81,"line":457},[79,168439,454],{"emptyLinePlaceholder":453},[79,168441,168442],{"class":81,"line":462},[79,168443,454],{"emptyLinePlaceholder":453},[79,168445,168446,168448,168450,168452,168454,168456,168458,168460,168462,168464,168466,168468,168470],{"class":81,"line":474},[79,168447,163762],{"class":239},[79,168449,697],{"class":7412},[79,168451,244],{"class":243},[79,168453,151640],{"class":89},[79,168455,1060],{"class":239},[79,168457,72329],{"class":7412},[79,168459,244],{"class":243},[79,168461,3023],{"class":96},[79,168463,1060],{"class":239},[79,168465,72380],{"class":7412},[79,168467,244],{"class":243},[79,168469,71377],{"class":89},[79,168471,253],{"class":239},[14,168473,168475],{"id":168474},"_77-参数解包","7.7 参数解包",[19,168477,168478],{},"列表或元组解包为位置参数：",[51,168480,168482],{"className":230,"code":168481,"language":232,"meta":57,"style":57},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[59,168483,168484,168493,168508,168512,168516,168536],{"__ignoreMap":57},[79,168485,168486,168488,168490],{"class":81,"line":82},[79,168487,633],{"class":243},[79,168489,7405],{"class":85},[79,168491,168492],{"class":239},"(a, b, c):\n",[79,168494,168495,168497,168499,168501,168503,168505],{"class":81,"line":167},[79,168496,711],{"class":243},[79,168498,13033],{"class":239},[79,168500,2855],{"class":243},[79,168502,13046],{"class":239},[79,168504,2855],{"class":243},[79,168506,168507],{"class":239}," c\n",[79,168509,168510],{"class":81,"line":178},[79,168511,454],{"emptyLinePlaceholder":453},[79,168513,168514],{"class":81,"line":457},[79,168515,454],{"emptyLinePlaceholder":453},[79,168517,168518,168520,168522,168524,168526,168528,168530,168532,168534],{"class":81,"line":462},[79,168519,165852],{"class":239},[79,168521,244],{"class":243},[79,168523,54339],{"class":239},[79,168525,1072],{"class":96},[79,168527,1060],{"class":239},[79,168529,1049],{"class":96},[79,168531,1060],{"class":239},[79,168533,1188],{"class":96},[79,168535,35361],{"class":239},[79,168537,168538,168540,168542,168544],{"class":81,"line":474},[79,168539,32541],{"class":96},[79,168541,168352],{"class":239},[79,168543,2829],{"class":243},[79,168545,168546],{"class":239},"nums))\n",[19,168548,168549],{},"字典解包为关键字参数：",[51,168551,168553],{"className":230,"code":168552,"language":232,"meta":57,"style":57},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[59,168554,168555,168563,168589,168593,168597,168621],{"__ignoreMap":57},[79,168556,168557,168559,168561],{"class":81,"line":82},[79,168558,633],{"class":243},[79,168560,151124],{"class":85},[79,168562,151127],{"class":239},[79,168564,168565,168567,168569,168571,168573,168575,168577,168579,168581,168583,168585,168587],{"class":81,"line":167},[79,168566,1254],{"class":96},[79,168568,685],{"class":239},[79,168570,688],{"class":243},[79,168572,703],{"class":89},[79,168574,694],{"class":96},[79,168576,697],{"class":239},[79,168578,700],{"class":96},[79,168580,6647],{"class":96},[79,168582,72329],{"class":239},[79,168584,700],{"class":96},[79,168586,703],{"class":89},[79,168588,253],{"class":239},[79,168590,168591],{"class":81,"line":178},[79,168592,454],{"emptyLinePlaceholder":453},[79,168594,168595],{"class":81,"line":457},[79,168596,454],{"emptyLinePlaceholder":453},[79,168598,168599,168601,168603,168605,168607,168609,168611,168613,168615,168617,168619],{"class":81,"line":462},[79,168600,118066],{"class":239},[79,168602,244],{"class":243},[79,168604,6647],{"class":239},[79,168606,64789],{"class":89},[79,168608,53550],{"class":239},[79,168610,151640],{"class":89},[79,168612,1060],{"class":239},[79,168614,71233],{"class":89},[79,168616,53550],{"class":239},[79,168618,3023],{"class":96},[79,168620,3801],{"class":239},[79,168622,168623,168625,168627],{"class":81,"line":474},[79,168624,167908],{"class":239},[79,168626,12825],{"class":243},[79,168628,168629],{"class":239},"info)\n",[14,168631,168633],{"id":168632},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168635,168636,168639],{},[59,168637,168638],{},"lambda"," 用于定义简单匿名函数。",[51,168641,168643],{"className":230,"code":168642,"language":232,"meta":57,"style":57},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[59,168644,168645,168662],{"__ignoreMap":57},[79,168646,168647,168650,168652,168655,168658,168660],{"class":81,"line":82},[79,168648,168649],{"class":239},"add ",[79,168651,244],{"class":243},[79,168653,168654],{"class":243}," lambda",[79,168656,168657],{"class":239}," a, b: a ",[79,168659,2855],{"class":243},[79,168661,152856],{"class":239},[79,168663,168664,168666,168668,168670,168672,168674],{"class":81,"line":167},[79,168665,32541],{"class":96},[79,168667,168352],{"class":239},[79,168669,1072],{"class":96},[79,168671,1060],{"class":239},[79,168673,1049],{"class":96},[79,168675,1191],{"class":239},[19,168677,168678],{},"常和排序、过滤等函数一起使用。",[19,168680,168681],{},"按分数排序：",[51,168683,168685],{"className":230,"code":168684,"language":232,"meta":57,"style":57},"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",[59,168686,168687,168695,168715,168735,168755,168759,168763,168786],{"__ignoreMap":57},[79,168688,168689,168691,168693],{"class":81,"line":82},[79,168690,161468],{"class":239},[79,168692,244],{"class":243},[79,168694,57557],{"class":239},[79,168696,168697,168699,168701,168703,168705,168707,168709,168711,168713],{"class":81,"line":167},[79,168698,150137],{"class":239},[79,168700,64789],{"class":89},[79,168702,53550],{"class":239},[79,168704,151640],{"class":89},[79,168706,1060],{"class":239},[79,168708,153224],{"class":89},[79,168710,53550],{"class":239},[79,168712,3359],{"class":96},[79,168714,7128],{"class":239},[79,168716,168717,168719,168721,168723,168725,168727,168729,168731,168733],{"class":81,"line":178},[79,168718,150137],{"class":239},[79,168720,64789],{"class":89},[79,168722,53550],{"class":239},[79,168724,152688],{"class":89},[79,168726,1060],{"class":239},[79,168728,153224],{"class":89},[79,168730,53550],{"class":239},[79,168732,3184],{"class":96},[79,168734,7128],{"class":239},[79,168736,168737,168739,168741,168743,168745,168747,168749,168751,168753],{"class":81,"line":457},[79,168738,150137],{"class":239},[79,168740,64789],{"class":89},[79,168742,53550],{"class":239},[79,168744,161483],{"class":89},[79,168746,1060],{"class":239},[79,168748,153224],{"class":89},[79,168750,53550],{"class":239},[79,168752,2780],{"class":96},[79,168754,7128],{"class":239},[79,168756,168757],{"class":81,"line":462},[79,168758,35361],{"class":239},[79,168760,168761],{"class":81,"line":474},[79,168762,454],{"emptyLinePlaceholder":453},[79,168764,168765,168768,168770,168772,168774,168776,168778,168780,168782,168784],{"class":81,"line":480},[79,168766,168767],{"class":239},"students.sort(",[79,168769,155698],{"class":7412},[79,168771,155701],{"class":243},[79,168773,155704],{"class":239},[79,168775,153224],{"class":89},[79,168777,1052],{"class":239},[79,168779,165280],{"class":7412},[79,168781,244],{"class":243},[79,168783,33595],{"class":96},[79,168785,253],{"class":239},[79,168787,168788,168790],{"class":81,"line":486},[79,168789,32541],{"class":96},[79,168791,166747],{"class":239},[19,168793,168794,168795,168797],{},"如果逻辑复杂，不要硬写 ",[59,168796,168638],{},"，定义普通函数更清晰。",[14,168799,168801],{"id":168800},"_79-函数作为参数","7.9 函数作为参数",[19,168803,168804],{},"函数可以作为参数传给另一个函数。",[51,168806,168808],{"className":230,"code":168807,"language":232,"meta":57,"style":57},"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",[59,168809,168810,168818,168828,168832,168836,168846,168853,168857,168861],{"__ignoreMap":57},[79,168811,168812,168814,168816],{"class":81,"line":82},[79,168813,633],{"class":243},[79,168815,7405],{"class":85},[79,168817,152845],{"class":239},[79,168819,168820,168822,168824,168826],{"class":81,"line":167},[79,168821,711],{"class":243},[79,168823,13033],{"class":239},[79,168825,2855],{"class":243},[79,168827,152856],{"class":239},[79,168829,168830],{"class":81,"line":178},[79,168831,454],{"emptyLinePlaceholder":453},[79,168833,168834],{"class":81,"line":457},[79,168835,454],{"emptyLinePlaceholder":453},[79,168837,168838,168840,168843],{"class":81,"line":462},[79,168839,633],{"class":243},[79,168841,168842],{"class":85}," calculate",[79,168844,168845],{"class":239},"(a, b, func):\n",[79,168847,168848,168850],{"class":81,"line":474},[79,168849,711],{"class":243},[79,168851,168852],{"class":239}," func(a, b)\n",[79,168854,168855],{"class":81,"line":480},[79,168856,454],{"emptyLinePlaceholder":453},[79,168858,168859],{"class":81,"line":486},[79,168860,454],{"emptyLinePlaceholder":453},[79,168862,168863,168865,168868,168870,168872,168874],{"class":81,"line":491},[79,168864,32541],{"class":96},[79,168866,168867],{"class":239},"(calculate(",[79,168869,2820],{"class":96},[79,168871,1060],{"class":239},[79,168873,3073],{"class":96},[79,168875,168876],{"class":239},", add))\n",[19,168878,168879],{},"这种思想在排序、回调、框架中经常出现。",[14,168881,168883],{"id":168882},"_710-mapfiltersorted","7.10 map、filter、sorted",[265,168885,168887],{"id":168886},"_7101-map","7.10.1 map",[19,168889,168890,168892],{},[59,168891,76152],{}," 对每个元素执行函数。",[51,168894,168896],{"className":230,"code":168895,"language":232,"meta":57,"style":57},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[59,168897,168898,168922,168945],{"__ignoreMap":57},[79,168899,168900,168902,168904,168906,168908,168910,168912,168914,168916,168918,168920],{"class":81,"line":82},[79,168901,165852],{"class":239},[79,168903,244],{"class":243},[79,168905,54339],{"class":239},[79,168907,1072],{"class":96},[79,168909,1060],{"class":239},[79,168911,1049],{"class":96},[79,168913,1060],{"class":239},[79,168915,1188],{"class":96},[79,168917,1060],{"class":239},[79,168919,2668],{"class":96},[79,168921,35361],{"class":239},[79,168923,168924,168926,168928,168931,168933,168935,168938,168940,168942],{"class":81,"line":167},[79,168925,163058],{"class":239},[79,168927,244],{"class":243},[79,168929,168930],{"class":96}," map",[79,168932,685],{"class":239},[79,168934,168638],{"class":243},[79,168936,168937],{"class":239}," x: x ",[79,168939,2829],{"class":243},[79,168941,16916],{"class":96},[79,168943,168944],{"class":239},", nums)\n",[79,168946,168947,168949,168951,168953],{"class":81,"line":178},[79,168948,32541],{"class":96},[79,168950,685],{"class":239},[79,168952,155822],{"class":96},[79,168954,167820],{"class":239},[265,168956,168958],{"id":168957},"_7102-filter","7.10.2 filter",[19,168960,168961,168963],{},[59,168962,82158],{}," 保留满足条件的元素。",[51,168965,168967],{"className":230,"code":168966,"language":232,"meta":57,"style":57},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[59,168968,168969,168997,169022],{"__ignoreMap":57},[79,168970,168971,168973,168975,168977,168979,168981,168983,168985,168987,168989,168991,168993,168995],{"class":81,"line":82},[79,168972,165852],{"class":239},[79,168974,244],{"class":243},[79,168976,54339],{"class":239},[79,168978,1072],{"class":96},[79,168980,1060],{"class":239},[79,168982,1049],{"class":96},[79,168984,1060],{"class":239},[79,168986,1188],{"class":96},[79,168988,1060],{"class":239},[79,168990,2668],{"class":96},[79,168992,1060],{"class":239},[79,168994,2694],{"class":96},[79,168996,35361],{"class":239},[79,168998,168999,169001,169003,169006,169008,169010,169012,169014,169016,169018,169020],{"class":81,"line":167},[79,169000,163058],{"class":239},[79,169002,244],{"class":243},[79,169004,169005],{"class":96}," filter",[79,169007,685],{"class":239},[79,169009,168638],{"class":243},[79,169011,168937],{"class":239},[79,169013,1137],{"class":243},[79,169015,16916],{"class":96},[79,169017,1143],{"class":243},[79,169019,670],{"class":96},[79,169021,168944],{"class":239},[79,169023,169024,169026,169028,169030],{"class":81,"line":178},[79,169025,32541],{"class":96},[79,169027,685],{"class":239},[79,169029,155822],{"class":96},[79,169031,167820],{"class":239},[265,169033,169035],{"id":169034},"_7103-sorted","7.10.3 sorted",[19,169037,169038,169040],{},[59,169039,166988],{}," 返回排序后的新列表。",[51,169042,169044],{"className":230,"code":169043,"language":232,"meta":57,"style":57},"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",[59,169045,169046,169054,169074,169094,169114,169118,169122,169151],{"__ignoreMap":57},[79,169047,169048,169050,169052],{"class":81,"line":82},[79,169049,161468],{"class":239},[79,169051,244],{"class":243},[79,169053,57557],{"class":239},[79,169055,169056,169058,169060,169062,169064,169066,169068,169070,169072],{"class":81,"line":167},[79,169057,150137],{"class":239},[79,169059,64789],{"class":89},[79,169061,53550],{"class":239},[79,169063,151640],{"class":89},[79,169065,1060],{"class":239},[79,169067,153224],{"class":89},[79,169069,53550],{"class":239},[79,169071,3359],{"class":96},[79,169073,7128],{"class":239},[79,169075,169076,169078,169080,169082,169084,169086,169088,169090,169092],{"class":81,"line":178},[79,169077,150137],{"class":239},[79,169079,64789],{"class":89},[79,169081,53550],{"class":239},[79,169083,152688],{"class":89},[79,169085,1060],{"class":239},[79,169087,153224],{"class":89},[79,169089,53550],{"class":239},[79,169091,3184],{"class":96},[79,169093,7128],{"class":239},[79,169095,169096,169098,169100,169102,169104,169106,169108,169110,169112],{"class":81,"line":457},[79,169097,150137],{"class":239},[79,169099,64789],{"class":89},[79,169101,53550],{"class":239},[79,169103,161483],{"class":89},[79,169105,1060],{"class":239},[79,169107,153224],{"class":89},[79,169109,53550],{"class":239},[79,169111,2780],{"class":96},[79,169113,7128],{"class":239},[79,169115,169116],{"class":81,"line":462},[79,169117,35361],{"class":239},[79,169119,169120],{"class":81,"line":474},[79,169121,454],{"emptyLinePlaceholder":453},[79,169123,169124,169126,169128,169130,169133,169135,169137,169139,169141,169143,169145,169147,169149],{"class":81,"line":480},[79,169125,163058],{"class":239},[79,169127,244],{"class":243},[79,169129,165356],{"class":96},[79,169131,169132],{"class":239},"(students, ",[79,169134,155698],{"class":7412},[79,169136,155701],{"class":243},[79,169138,155704],{"class":239},[79,169140,153224],{"class":89},[79,169142,1052],{"class":239},[79,169144,165280],{"class":7412},[79,169146,244],{"class":243},[79,169148,33595],{"class":96},[79,169150,253],{"class":239},[79,169152,169153,169155],{"class":81,"line":486},[79,169154,32541],{"class":96},[79,169156,78693],{"class":239},[14,169158,169160],{"id":169159},"_711-闭包入门","7.11 闭包入门",[19,169162,169163],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[51,169165,169167],{"className":230,"code":169166,"language":232,"meta":57,"style":57},"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",[59,169168,169169,169179,169189,169200,169204,169211,169215,169219,169233],{"__ignoreMap":57},[79,169170,169171,169173,169176],{"class":81,"line":82},[79,169172,633],{"class":243},[79,169174,169175],{"class":85}," outer",[79,169177,169178],{"class":239},"(base):\n",[79,169180,169181,169183,169186],{"class":81,"line":167},[79,169182,32925],{"class":243},[79,169184,169185],{"class":85}," inner",[79,169187,169188],{"class":239},"(num):\n",[79,169190,169191,169193,169196,169198],{"class":81,"line":178},[79,169192,16913],{"class":243},[79,169194,169195],{"class":239}," base ",[79,169197,2855],{"class":243},[79,169199,168331],{"class":239},[79,169201,169202],{"class":81,"line":457},[79,169203,454],{"emptyLinePlaceholder":453},[79,169205,169206,169208],{"class":81,"line":462},[79,169207,711],{"class":243},[79,169209,169210],{"class":239}," inner\n",[79,169212,169213],{"class":81,"line":474},[79,169214,454],{"emptyLinePlaceholder":453},[79,169216,169217],{"class":81,"line":480},[79,169218,454],{"emptyLinePlaceholder":453},[79,169220,169221,169224,169226,169229,169231],{"class":81,"line":486},[79,169222,169223],{"class":239},"add_10 ",[79,169225,244],{"class":243},[79,169227,169228],{"class":239}," outer(",[79,169230,2820],{"class":96},[79,169232,253],{"class":239},[79,169234,169235,169237,169240,169242],{"class":81,"line":491},[79,169236,32541],{"class":96},[79,169238,169239],{"class":239},"(add_10(",[79,169241,2694],{"class":96},[79,169243,1191],{"class":239},[19,169245,169246],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169248,169250],{"id":169249},"_712-装饰器入门","7.12 装饰器入门",[19,169252,169253],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[51,169255,169257],{"className":230,"code":169256,"language":232,"meta":57,"style":57},"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",[59,169258,169259,169268,169277,169288,169293,169304,169308,169315,169319,169323,169328,169336,169346,169350,169354],{"__ignoreMap":57},[79,169260,169261,169263,169265],{"class":81,"line":82},[79,169262,633],{"class":243},[79,169264,89296],{"class":85},[79,169266,169267],{"class":239},"(func):\n",[79,169269,169270,169272,169275],{"class":81,"line":167},[79,169271,32925],{"class":243},[79,169273,169274],{"class":85}," wrapper",[79,169276,34070],{"class":239},[79,169278,169279,169281,169283,169286],{"class":81,"line":178},[79,169280,34566],{"class":96},[79,169282,685],{"class":239},[79,169284,169285],{"class":89},"\"函数开始执行\"",[79,169287,253],{"class":239},[79,169289,169290],{"class":81,"line":457},[79,169291,169292],{"class":239},"        func()\n",[79,169294,169295,169297,169299,169302],{"class":81,"line":462},[79,169296,34566],{"class":96},[79,169298,685],{"class":239},[79,169300,169301],{"class":89},"\"函数执行结束\"",[79,169303,253],{"class":239},[79,169305,169306],{"class":81,"line":474},[79,169307,454],{"emptyLinePlaceholder":453},[79,169309,169310,169312],{"class":81,"line":480},[79,169311,711],{"class":243},[79,169313,169314],{"class":239}," wrapper\n",[79,169316,169317],{"class":81,"line":486},[79,169318,454],{"emptyLinePlaceholder":453},[79,169320,169321],{"class":81,"line":491},[79,169322,454],{"emptyLinePlaceholder":453},[79,169324,169325],{"class":81,"line":497},[79,169326,169327],{"class":85},"@log\n",[79,169329,169330,169332,169334],{"class":81,"line":503},[79,169331,633],{"class":243},[79,169333,162748],{"class":85},[79,169335,34070],{"class":239},[79,169337,169338,169340,169342,169344],{"class":81,"line":509},[79,169339,1254],{"class":96},[79,169341,685],{"class":239},[79,169343,8039],{"class":89},[79,169345,253],{"class":239},[79,169347,169348],{"class":81,"line":514},[79,169349,454],{"emptyLinePlaceholder":453},[79,169351,169352],{"class":81,"line":520},[79,169353,454],{"emptyLinePlaceholder":453},[79,169355,169356],{"class":81,"line":526},[79,169357,162783],{"class":239},[19,169359,160026],{},[51,169361,169363],{"className":230,"code":169362,"language":232,"meta":57,"style":57},"say_hello = log(say_hello)\n",[59,169364,169365],{"__ignoreMap":57},[79,169366,169367,169370,169372],{"class":81,"line":82},[79,169368,169369],{"class":239},"say_hello ",[79,169371,244],{"class":243},[79,169373,169374],{"class":239}," log(say_hello)\n",[19,169376,169377],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169379,169381],{"id":169380},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[51,169383,169385],{"className":230,"code":169384,"language":232,"meta":57,"style":57},"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",[59,169386,169387,169395,169412,169422,169441,169451,169458,169462,169468,169472,169476,169480,169488,169498,169502,169506],{"__ignoreMap":57},[79,169388,169389,169391,169393],{"class":81,"line":82},[79,169390,633],{"class":243},[79,169392,89296],{"class":85},[79,169394,169267],{"class":239},[79,169396,169397,169399,169401,169403,169405,169408,169410],{"class":81,"line":167},[79,169398,32925],{"class":243},[79,169400,169274],{"class":85},[79,169402,685],{"class":239},[79,169404,2829],{"class":243},[79,169406,169407],{"class":239},"args, ",[79,169409,12825],{"class":243},[79,169411,168418],{"class":239},[79,169413,169414,169416,169418,169420],{"class":81,"line":178},[79,169415,34566],{"class":96},[79,169417,685],{"class":239},[79,169419,169285],{"class":89},[79,169421,253],{"class":239},[79,169423,169424,169427,169429,169432,169434,169436,169438],{"class":81,"line":457},[79,169425,169426],{"class":239},"        result ",[79,169428,244],{"class":243},[79,169430,169431],{"class":239}," func(",[79,169433,2829],{"class":243},[79,169435,169407],{"class":239},[79,169437,12825],{"class":243},[79,169439,169440],{"class":239},"kwargs)\n",[79,169442,169443,169445,169447,169449],{"class":81,"line":462},[79,169444,34566],{"class":96},[79,169446,685],{"class":239},[79,169448,169301],{"class":89},[79,169450,253],{"class":239},[79,169452,169453,169455],{"class":81,"line":474},[79,169454,16913],{"class":243},[79,169456,169457],{"class":239}," result\n",[79,169459,169460],{"class":81,"line":480},[79,169461,454],{"emptyLinePlaceholder":453},[79,169463,169464,169466],{"class":81,"line":486},[79,169465,711],{"class":243},[79,169467,169314],{"class":239},[79,169469,169470],{"class":81,"line":491},[79,169471,454],{"emptyLinePlaceholder":453},[79,169473,169474],{"class":81,"line":497},[79,169475,454],{"emptyLinePlaceholder":453},[79,169477,169478],{"class":81,"line":503},[79,169479,169327],{"class":85},[79,169481,169482,169484,169486],{"class":81,"line":509},[79,169483,633],{"class":243},[79,169485,7405],{"class":85},[79,169487,152845],{"class":239},[79,169489,169490,169492,169494,169496],{"class":81,"line":514},[79,169491,711],{"class":243},[79,169493,13033],{"class":239},[79,169495,2855],{"class":243},[79,169497,152856],{"class":239},[79,169499,169500],{"class":81,"line":520},[79,169501,454],{"emptyLinePlaceholder":453},[79,169503,169504],{"class":81,"line":526},[79,169505,454],{"emptyLinePlaceholder":453},[79,169507,169508,169510,169512,169514,169516,169518],{"class":81,"line":532},[79,169509,32541],{"class":96},[79,169511,168352],{"class":239},[79,169513,2820],{"class":96},[79,169515,1060],{"class":239},[79,169517,3073],{"class":96},[79,169519,1191],{"class":239},[19,169521,169522,169523,1905,169525,169527],{},"这个写法使用 ",[59,169524,168284],{},[59,169526,168399],{}," 接收原函数的所有参数。",[14,169529,169531],{"id":169530},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169533,125044],{},[26,169535,169536,169539,169542],{},[29,169537,169538],{},"给定一组学生数据。",[29,169540,169541],{},"封装函数，根据传入规则筛选学生。",[29,169543,169544],{},"筛选及格、优秀、未成年学生。",[19,169546,12199],{},[51,169548,169550],{"className":230,"code":169549,"language":232,"meta":57,"style":57},"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",[59,169551,169552,169560,169588,169616,169644,169648,169652,169656,169666,169674,169684,169691,169696,169702,169706,169710,169734,169757,169780,169784,169791,169798],{"__ignoreMap":57},[79,169553,169554,169556,169558],{"class":81,"line":82},[79,169555,161468],{"class":239},[79,169557,244],{"class":243},[79,169559,57557],{"class":239},[79,169561,169562,169564,169566,169568,169570,169572,169574,169576,169578,169580,169582,169584,169586],{"class":81,"line":167},[79,169563,150137],{"class":239},[79,169565,64789],{"class":89},[79,169567,53550],{"class":239},[79,169569,151640],{"class":89},[79,169571,1060],{"class":239},[79,169573,71233],{"class":89},[79,169575,53550],{"class":239},[79,169577,3023],{"class":96},[79,169579,1060],{"class":239},[79,169581,153224],{"class":89},[79,169583,53550],{"class":239},[79,169585,3359],{"class":96},[79,169587,7128],{"class":239},[79,169589,169590,169592,169594,169596,169598,169600,169602,169604,169606,169608,169610,169612,169614],{"class":81,"line":178},[79,169591,150137],{"class":239},[79,169593,64789],{"class":89},[79,169595,53550],{"class":239},[79,169597,152688],{"class":89},[79,169599,1060],{"class":239},[79,169601,71233],{"class":89},[79,169603,53550],{"class":239},[79,169605,2998],{"class":96},[79,169607,1060],{"class":239},[79,169609,153224],{"class":89},[79,169611,53550],{"class":239},[79,169613,3184],{"class":96},[79,169615,7128],{"class":239},[79,169617,169618,169620,169622,169624,169626,169628,169630,169632,169634,169636,169638,169640,169642],{"class":81,"line":457},[79,169619,150137],{"class":239},[79,169621,64789],{"class":89},[79,169623,53550],{"class":239},[79,169625,161483],{"class":89},[79,169627,1060],{"class":239},[79,169629,71233],{"class":89},[79,169631,53550],{"class":239},[79,169633,3048],{"class":96},[79,169635,1060],{"class":239},[79,169637,153224],{"class":89},[79,169639,53550],{"class":239},[79,169641,3255],{"class":96},[79,169643,7128],{"class":239},[79,169645,169646],{"class":81,"line":462},[79,169647,35361],{"class":239},[79,169649,169650],{"class":81,"line":474},[79,169651,454],{"emptyLinePlaceholder":453},[79,169653,169654],{"class":81,"line":480},[79,169655,454],{"emptyLinePlaceholder":453},[79,169657,169658,169660,169663],{"class":81,"line":486},[79,169659,633],{"class":243},[79,169661,169662],{"class":85}," filter_students",[79,169664,169665],{"class":239},"(students, condition):\n",[79,169667,169668,169670,169672],{"class":81,"line":491},[79,169669,162975],{"class":239},[79,169671,244],{"class":243},[79,169673,53951],{"class":239},[79,169675,169676,169678,169680,169682],{"class":81,"line":497},[79,169677,949],{"class":243},[79,169679,153889],{"class":239},[79,169681,955],{"class":243},[79,169683,153894],{"class":239},[79,169685,169686,169688],{"class":81,"line":503},[79,169687,1132],{"class":243},[79,169689,169690],{"class":239}," condition(student):\n",[79,169692,169693],{"class":81,"line":509},[79,169694,169695],{"class":239},"            result.append(student)\n",[79,169697,169698,169700],{"class":81,"line":514},[79,169699,711],{"class":243},[79,169701,169457],{"class":239},[79,169703,169704],{"class":81,"line":520},[79,169705,454],{"emptyLinePlaceholder":453},[79,169707,169708],{"class":81,"line":526},[79,169709,454],{"emptyLinePlaceholder":453},[79,169711,169712,169714,169716,169719,169721,169724,169726,169728,169730,169732],{"class":81,"line":532},[79,169713,167453],{"class":239},[79,169715,244],{"class":243},[79,169717,169718],{"class":239}," filter_students(students, ",[79,169720,168638],{"class":243},[79,169722,169723],{"class":239}," s: s[",[79,169725,153224],{"class":89},[79,169727,1033],{"class":239},[79,169729,3935],{"class":243},[79,169731,159589],{"class":96},[79,169733,253],{"class":239},[79,169735,169736,169739,169741,169743,169745,169747,169749,169751,169753,169755],{"class":81,"line":537},[79,169737,169738],{"class":239},"excellent ",[79,169740,244],{"class":243},[79,169742,169718],{"class":239},[79,169744,168638],{"class":243},[79,169746,169723],{"class":239},[79,169748,153224],{"class":89},[79,169750,1033],{"class":239},[79,169752,3935],{"class":243},[79,169754,159540],{"class":96},[79,169756,253],{"class":239},[79,169758,169759,169762,169764,169766,169768,169770,169772,169774,169776,169778],{"class":81,"line":543},[79,169760,169761],{"class":239},"under_age ",[79,169763,244],{"class":243},[79,169765,169718],{"class":239},[79,169767,168638],{"class":243},[79,169769,169723],{"class":239},[79,169771,71233],{"class":89},[79,169773,1033],{"class":239},[79,169775,392],{"class":243},[79,169777,158037],{"class":96},[79,169779,253],{"class":239},[79,169781,169782],{"class":81,"line":549},[79,169783,454],{"emptyLinePlaceholder":453},[79,169785,169786,169788],{"class":81,"line":555},[79,169787,32541],{"class":96},[79,169789,169790],{"class":239},"(passed)\n",[79,169792,169793,169795],{"class":81,"line":561},[79,169794,32541],{"class":96},[79,169796,169797],{"class":239},"(excellent)\n",[79,169799,169800,169802],{"class":81,"line":567},[79,169801,32541],{"class":96},[79,169803,169804],{"class":239},"(under_age)\n",[14,169806,169808],{"id":169807},"_715-易错点","7.15 易错点",[26,169810,169811,169814,169822,169827,169838],{},[29,169812,169813],{},"默认参数不要写可变对象。",[29,169815,169816,169818,169819,169821],{},[59,169817,168284],{}," 是元组，",[59,169820,168399],{}," 是字典。",[29,169823,169824,169826],{},[59,169825,168638],{}," 只适合简单表达式。",[29,169828,169829,1905,169831,169833,169834,169837],{},[59,169830,76152],{},[59,169832,82158],{}," 的结果是迭代器，常用 ",[59,169835,169836],{},"list()"," 转换查看。",[29,169839,169840],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169842,169844],{"id":169843},"_716-本章练习","7.16 本章练习",[26,169846,169847,169854,169860,169865,169870],{},[29,169848,169849,169850,169853],{},"写函数 ",[59,169851,169852],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[29,169855,169849,169856,169859],{},[59,169857,169858],{},"print_user(**kwargs)","，输出用户所有字段。",[29,169861,106387,169862,169864],{},[59,169863,168638],{}," 对学生列表按年龄排序。",[29,169866,106387,169867,169869],{},[59,169868,82158],{}," 找出成绩不及格的学生。",[29,169871,169872],{},"写一个装饰器，统计函数执行前后的提示信息。",[2287,169874,169875],{},"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":57,"searchDepth":167,"depth":167,"links":169877},[169878,169879,169880,169881,169882,169883,169887,169888,169889,169890,169895,169896,169897,169898,169899,169900],{"id":167736,"depth":167,"text":167737},{"id":167850,"depth":167,"text":167851},{"id":167939,"depth":167,"text":167940},{"id":168001,"depth":167,"text":168002},{"id":168147,"depth":167,"text":168148},{"id":168274,"depth":167,"text":168275,"children":169884},[169885,169886],{"id":168278,"depth":178,"text":168279},{"id":168393,"depth":178,"text":168394},{"id":168474,"depth":167,"text":168475},{"id":168632,"depth":167,"text":168633},{"id":168800,"depth":167,"text":168801},{"id":168882,"depth":167,"text":168883,"children":169891},[169892,169893,169894],{"id":168886,"depth":178,"text":168887},{"id":168957,"depth":178,"text":168958},{"id":169034,"depth":178,"text":169035},{"id":169159,"depth":167,"text":169160},{"id":169249,"depth":167,"text":169250},{"id":169380,"depth":167,"text":169381},{"id":169530,"depth":167,"text":169531},{"id":169807,"depth":167,"text":169808},{"id":169843,"depth":167,"text":169844},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167728,"description":25516},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169907,"title":169908,"body":169909,"description":25516,"extension":2314,"meta":172428,"navigation":453,"path":172429,"seo":172430,"stem":172431,"__hash__":172432},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169910,"toc":172403},[169911,169914,169918,169921,169924,169955,169959,169963,169966,169993,169997,170000,170051,170054,170069,170072,170107,170111,170113,170137,170140,170200,170204,170208,170211,170268,170271,170291,170295,170298,170361,170365,170368,170424,170431,170455,170459,170462,170525,170529,170534,170585,170588,170592,170597,170664,170667,170749,170753,170758,170809,170812,170816,170819,170822,170830,170833,170879,170882,170928,170932,170938,170982,170985,171031,171034,171074,171077,171138,171142,171145,171235,171238,171380,171383,171450,171454,171457,171460,171601,171604,171682,171685,171861,171865,171867,171878,171880,172079,172083,172327,172331,172365,172369,172400],[10,169912,169908],{"id":169913},"_8-文件操作",[14,169915,169917],{"id":169916},"_81-文件操作的意义","8.1 文件操作的意义",[19,169919,169920],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169922,169923],{},"常见文件类型：",[26,169925,169926,169932,169938,169944,169950],{},[29,169927,169928,169931],{},[59,169929,169930],{},".txt","：普通文本。",[29,169933,169934,169937],{},[59,169935,169936],{},".csv","：表格文本。",[29,169939,169940,169943],{},[59,169941,169942],{},".json","：结构化数据。",[29,169945,169946,169949],{},[59,169947,169948],{},".log","：日志文件。",[29,169951,169952,169954],{},[59,169953,148104],{},"：Python 源代码。",[14,169956,169958],{"id":169957},"_82-路径","8.2 路径",[265,169960,169962],{"id":169961},"_821-相对路径","8.2.1 相对路径",[19,169964,169965],{},"相对当前运行目录：",[51,169967,169969],{"className":230,"code":169968,"language":232,"meta":57,"style":57},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[59,169970,169971],{"__ignoreMap":57},[79,169972,169973,169975,169977,169979,169981,169983,169985,169987,169989,169991],{"class":81,"line":82},[79,169974,89020],{"class":96},[79,169976,685],{"class":239},[79,169978,148548],{"class":89},[79,169980,1060],{"class":239},[79,169982,148553],{"class":89},[79,169984,1060],{"class":239},[79,169986,148558],{"class":7412},[79,169988,244],{"class":243},[79,169990,148563],{"class":89},[79,169992,253],{"class":239},[265,169994,169996],{"id":169995},"_822-绝对路径","8.2.2 绝对路径",[19,169998,169999],{},"从根目录或盘符开始：",[51,170001,170003],{"className":230,"code":170002,"language":232,"meta":57,"style":57},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[59,170004,170005,170028],{"__ignoreMap":57},[79,170006,170007,170009,170011,170014,170016,170018,170020,170022,170024,170026],{"class":81,"line":82},[79,170008,89020],{"class":96},[79,170010,685],{"class":239},[79,170012,170013],{"class":89},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[79,170015,1060],{"class":239},[79,170017,148553],{"class":89},[79,170019,1060],{"class":239},[79,170021,148558],{"class":7412},[79,170023,244],{"class":243},[79,170025,148563],{"class":89},[79,170027,253],{"class":239},[79,170029,170030,170032,170034,170037,170039,170041,170043,170045,170047,170049],{"class":81,"line":167},[79,170031,89020],{"class":96},[79,170033,685],{"class":239},[79,170035,170036],{"class":89},"\"D:\u002Fdata\u002Fdata.txt\"",[79,170038,1060],{"class":239},[79,170040,148553],{"class":89},[79,170042,1060],{"class":239},[79,170044,148558],{"class":7412},[79,170046,244],{"class":243},[79,170048,148563],{"class":89},[79,170050,253],{"class":239},[19,170052,170053],{},"Windows 路径建议写成：",[51,170055,170057],{"className":230,"code":170056,"language":232,"meta":57,"style":57},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[59,170058,170059],{"__ignoreMap":57},[79,170060,170061,170064,170066],{"class":81,"line":82},[79,170062,170063],{"class":239},"path ",[79,170065,244],{"class":243},[79,170067,170068],{"class":89}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,170070,170071],{},"或原始字符串：",[51,170073,170075],{"className":230,"code":170074,"language":232,"meta":57,"style":57},"path = r\"D:\\data\\data.txt\"\n",[59,170076,170077],{"__ignoreMap":57},[79,170078,170079,170081,170083,170085,170087,170090,170093,170096,170098,170100,170102,170105],{"class":81,"line":82},[79,170080,170063],{"class":239},[79,170082,244],{"class":243},[79,170084,19260],{"class":243},[79,170086,703],{"class":89},[79,170088,170089],{"class":50091},"D:",[79,170091,170092],{"class":96},"\\d",[79,170094,170095],{"class":50091},"ata",[79,170097,170092],{"class":96},[79,170099,170095],{"class":50091},[79,170101,2931],{"class":96},[79,170103,170104],{"class":50091},"txt",[79,170106,27268],{"class":89},[14,170108,170110],{"id":170109},"_83-open函数","8.3 open函数",[19,170112,7379],{},[51,170114,170116],{"className":230,"code":170115,"language":232,"meta":57,"style":57},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[59,170117,170118],{"__ignoreMap":57},[79,170119,170120,170122,170124,170126,170129,170131,170133,170135],{"class":81,"line":82},[79,170121,47468],{"class":7412},[79,170123,468],{"class":243},[79,170125,148543],{"class":96},[79,170127,170128],{"class":239},"(文件路径, 打开模式, ",[79,170130,148558],{"class":7412},[79,170132,244],{"class":243},[79,170134,148563],{"class":89},[79,170136,253],{"class":239},[19,170138,170139],{},"常见模式：",[2516,170141,170142,170151],{},[2519,170143,170144],{},[2522,170145,170146,170149],{},[2525,170147,170148],{},"模式",[2525,170150,28004],{},[2563,170152,170153,170162,170171,170180,170190],{},[2522,170154,170155,170159],{},[2568,170156,170157],{},[59,170158,3043],{},[2568,170160,170161],{},"只读，文件不存在会报错",[2522,170163,170164,170168],{},[2568,170165,170166],{},[59,170167,3168],{},[2568,170169,170170],{},"只写，文件不存在会创建，存在会清空",[2522,170172,170173,170177],{},[2568,170174,170175],{},[59,170176,2614],{},[2568,170178,170179],{},"追加，文件不存在会创建",[2522,170181,170182,170187],{},[2568,170183,170184],{},[59,170185,170186],{},"rb",[2568,170188,170189],{},"二进制只读",[2522,170191,170192,170197],{},[2568,170193,170194],{},[59,170195,170196],{},"wb",[2568,170198,170199],{},"二进制只写",[14,170201,170203],{"id":170202},"_84-读取文件","8.4 读取文件",[265,170205,170207],{"id":170206},"_841-read","8.4.1 read",[19,170209,170210],{},"一次读取全部内容：",[51,170212,170214],{"className":230,"code":170213,"language":232,"meta":57,"style":57},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[59,170215,170216,170242,170254,170261],{"__ignoreMap":57},[79,170217,170218,170220,170222,170224,170226,170228,170230,170232,170234,170236,170238,170240],{"class":81,"line":82},[79,170219,47468],{"class":7412},[79,170221,468],{"class":243},[79,170223,148543],{"class":96},[79,170225,685],{"class":239},[79,170227,148548],{"class":89},[79,170229,1060],{"class":239},[79,170231,148553],{"class":89},[79,170233,1060],{"class":239},[79,170235,148558],{"class":7412},[79,170237,244],{"class":243},[79,170239,148563],{"class":89},[79,170241,253],{"class":239},[79,170243,170244,170247,170249,170251],{"class":81,"line":167},[79,170245,170246],{"class":239},"content ",[79,170248,244],{"class":243},[79,170250,149905],{"class":7412},[79,170252,170253],{"class":239},".read()\n",[79,170255,170256,170258],{"class":81,"line":178},[79,170257,32541],{"class":96},[79,170259,170260],{"class":239},"(content)\n",[79,170262,170263,170265],{"class":81,"line":457},[79,170264,47468],{"class":7412},[79,170266,170267],{"class":239},".close()\n",[19,170269,170270],{},"可以指定读取字符数：",[51,170272,170274],{"className":230,"code":170273,"language":232,"meta":57,"style":57},"content = file.read(10)\n",[59,170275,170276],{"__ignoreMap":57},[79,170277,170278,170280,170282,170284,170287,170289],{"class":81,"line":82},[79,170279,170246],{"class":239},[79,170281,244],{"class":243},[79,170283,149905],{"class":7412},[79,170285,170286],{"class":239},".read(",[79,170288,2820],{"class":96},[79,170290,253],{"class":239},[265,170292,170294],{"id":170293},"_842-readline","8.4.2 readline",[19,170296,170297],{},"一次读取一行：",[51,170299,170301],{"className":230,"code":170300,"language":232,"meta":57,"style":57},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[59,170302,170303,170329,170333,170344,170351,170355],{"__ignoreMap":57},[79,170304,170305,170307,170309,170311,170313,170315,170317,170319,170321,170323,170325,170327],{"class":81,"line":82},[79,170306,47468],{"class":7412},[79,170308,468],{"class":243},[79,170310,148543],{"class":96},[79,170312,685],{"class":239},[79,170314,148548],{"class":89},[79,170316,1060],{"class":239},[79,170318,148553],{"class":89},[79,170320,1060],{"class":239},[79,170322,148558],{"class":7412},[79,170324,244],{"class":243},[79,170326,148563],{"class":89},[79,170328,253],{"class":239},[79,170330,170331],{"class":81,"line":167},[79,170332,454],{"emptyLinePlaceholder":453},[79,170334,170335,170337,170339,170341],{"class":81,"line":178},[79,170336,149004],{"class":239},[79,170338,244],{"class":243},[79,170340,149905],{"class":7412},[79,170342,170343],{"class":239},".readline()\n",[79,170345,170346,170348],{"class":81,"line":457},[79,170347,32541],{"class":96},[79,170349,170350],{"class":239},"(line)\n",[79,170352,170353],{"class":81,"line":462},[79,170354,454],{"emptyLinePlaceholder":453},[79,170356,170357,170359],{"class":81,"line":474},[79,170358,47468],{"class":7412},[79,170360,170267],{"class":239},[265,170362,170364],{"id":170363},"_843-readlines","8.4.3 readlines",[19,170366,170367],{},"读取所有行，返回列表：",[51,170369,170371],{"className":230,"code":170370,"language":232,"meta":57,"style":57},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[59,170372,170373,170399,170411,170418],{"__ignoreMap":57},[79,170374,170375,170377,170379,170381,170383,170385,170387,170389,170391,170393,170395,170397],{"class":81,"line":82},[79,170376,47468],{"class":7412},[79,170378,468],{"class":243},[79,170380,148543],{"class":96},[79,170382,685],{"class":239},[79,170384,148548],{"class":89},[79,170386,1060],{"class":239},[79,170388,148553],{"class":89},[79,170390,1060],{"class":239},[79,170392,148558],{"class":7412},[79,170394,244],{"class":243},[79,170396,148563],{"class":89},[79,170398,253],{"class":239},[79,170400,170401,170404,170406,170408],{"class":81,"line":167},[79,170402,170403],{"class":239},"lines ",[79,170405,244],{"class":243},[79,170407,149905],{"class":7412},[79,170409,170410],{"class":239},".readlines()\n",[79,170412,170413,170415],{"class":81,"line":178},[79,170414,32541],{"class":96},[79,170416,170417],{"class":239},"(lines)\n",[79,170419,170420,170422],{"class":81,"line":457},[79,170421,47468],{"class":7412},[79,170423,170267],{"class":239},[19,170425,170426,170427,170430],{},"每一行通常带有换行符，可以用 ",[59,170428,170429],{},"strip()"," 去掉：",[51,170432,170434],{"className":230,"code":170433,"language":232,"meta":57,"style":57},"for line in lines:\n    print(line.strip())\n",[59,170435,170436,170448],{"__ignoreMap":57},[79,170437,170438,170440,170443,170445],{"class":81,"line":82},[79,170439,1874],{"class":243},[79,170441,170442],{"class":239}," line ",[79,170444,955],{"class":243},[79,170446,170447],{"class":239}," lines:\n",[79,170449,170450,170452],{"class":81,"line":167},[79,170451,1254],{"class":96},[79,170453,170454],{"class":239},"(line.strip())\n",[265,170456,170458],{"id":170457},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170460,170461],{},"推荐读取大文件时使用：",[51,170463,170465],{"className":230,"code":170464,"language":232,"meta":57,"style":57},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[59,170466,170467,170493,170497,170509,170515,170519],{"__ignoreMap":57},[79,170468,170469,170471,170473,170475,170477,170479,170481,170483,170485,170487,170489,170491],{"class":81,"line":82},[79,170470,47468],{"class":7412},[79,170472,468],{"class":243},[79,170474,148543],{"class":96},[79,170476,685],{"class":239},[79,170478,148548],{"class":89},[79,170480,1060],{"class":239},[79,170482,148553],{"class":89},[79,170484,1060],{"class":239},[79,170486,148558],{"class":7412},[79,170488,244],{"class":243},[79,170490,148563],{"class":89},[79,170492,253],{"class":239},[79,170494,170495],{"class":81,"line":167},[79,170496,454],{"emptyLinePlaceholder":453},[79,170498,170499,170501,170503,170505,170507],{"class":81,"line":178},[79,170500,1874],{"class":243},[79,170502,170442],{"class":239},[79,170504,955],{"class":243},[79,170506,149905],{"class":7412},[79,170508,673],{"class":239},[79,170510,170511,170513],{"class":81,"line":457},[79,170512,1254],{"class":96},[79,170514,170454],{"class":239},[79,170516,170517],{"class":81,"line":462},[79,170518,454],{"emptyLinePlaceholder":453},[79,170520,170521,170523],{"class":81,"line":474},[79,170522,47468],{"class":7412},[79,170524,170267],{"class":239},[14,170526,170528],{"id":170527},"_85-with语句","8.5 with语句",[19,170530,170531,170533],{},[59,170532,109840],{}," 会自动关闭文件，推荐使用。",[51,170535,170537],{"className":230,"code":170536,"language":232,"meta":57,"style":57},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[59,170538,170539,170569,170579],{"__ignoreMap":57},[79,170540,170541,170543,170545,170547,170549,170551,170553,170555,170557,170559,170561,170563,170565,170567],{"class":81,"line":82},[79,170542,109840],{"class":243},[79,170544,148543],{"class":96},[79,170546,685],{"class":239},[79,170548,148548],{"class":89},[79,170550,1060],{"class":239},[79,170552,148553],{"class":89},[79,170554,1060],{"class":239},[79,170556,148558],{"class":7412},[79,170558,244],{"class":243},[79,170560,148563],{"class":89},[79,170562,15876],{"class":239},[79,170564,445],{"class":243},[79,170566,149905],{"class":7412},[79,170568,673],{"class":239},[79,170570,170571,170573,170575,170577],{"class":81,"line":167},[79,170572,148575],{"class":239},[79,170574,244],{"class":243},[79,170576,149905],{"class":7412},[79,170578,170253],{"class":239},[79,170580,170581,170583],{"class":81,"line":178},[79,170582,1254],{"class":96},[79,170584,170260],{"class":239},[19,170586,170587],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170589,170591],{"id":170590},"_86-写入文件","8.6 写入文件",[19,170593,170594,170596],{},[59,170595,3168],{}," 模式会清空原文件。",[51,170598,170600],{"className":230,"code":170599,"language":232,"meta":57,"style":57},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[59,170601,170602,170632,170649],{"__ignoreMap":57},[79,170603,170604,170606,170608,170610,170612,170614,170616,170618,170620,170622,170624,170626,170628,170630],{"class":81,"line":82},[79,170605,109840],{"class":243},[79,170607,148543],{"class":96},[79,170609,685],{"class":239},[79,170611,148548],{"class":89},[79,170613,1060],{"class":239},[79,170615,153728],{"class":89},[79,170617,1060],{"class":239},[79,170619,148558],{"class":7412},[79,170621,244],{"class":243},[79,170623,148563],{"class":89},[79,170625,15876],{"class":239},[79,170627,445],{"class":243},[79,170629,149905],{"class":7412},[79,170631,673],{"class":239},[79,170633,170634,170637,170640,170643,170645,170647],{"class":81,"line":167},[79,170635,170636],{"class":7412},"    file",[79,170638,170639],{"class":239},".write(",[79,170641,170642],{"class":89},"\"hello",[79,170644,158277],{"class":96},[79,170646,703],{"class":89},[79,170648,253],{"class":239},[79,170650,170651,170653,170655,170658,170660,170662],{"class":81,"line":178},[79,170652,170636],{"class":7412},[79,170654,170639],{"class":239},[79,170656,170657],{"class":89},"\"python",[79,170659,158277],{"class":96},[79,170661,703],{"class":89},[79,170663,253],{"class":239},[19,170665,170666],{},"写入多行：",[51,170668,170670],{"className":230,"code":170669,"language":232,"meta":57,"style":57},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[59,170671,170672,170707,170711,170742],{"__ignoreMap":57},[79,170673,170674,170676,170678,170680,170683,170685,170687,170689,170692,170694,170696,170698,170701,170703,170705],{"class":81,"line":82},[79,170675,170403],{"class":239},[79,170677,244],{"class":243},[79,170679,54339],{"class":239},[79,170681,170682],{"class":89},"\"小明,18",[79,170684,158277],{"class":96},[79,170686,703],{"class":89},[79,170688,1060],{"class":239},[79,170690,170691],{"class":89},"\"小红,17",[79,170693,158277],{"class":96},[79,170695,703],{"class":89},[79,170697,1060],{"class":239},[79,170699,170700],{"class":89},"\"小刚,19",[79,170702,158277],{"class":96},[79,170704,703],{"class":89},[79,170706,35361],{"class":239},[79,170708,170709],{"class":81,"line":167},[79,170710,454],{"emptyLinePlaceholder":453},[79,170712,170713,170715,170717,170719,170722,170724,170726,170728,170730,170732,170734,170736,170738,170740],{"class":81,"line":178},[79,170714,109840],{"class":243},[79,170716,148543],{"class":96},[79,170718,685],{"class":239},[79,170720,170721],{"class":89},"\"students.txt\"",[79,170723,1060],{"class":239},[79,170725,153728],{"class":89},[79,170727,1060],{"class":239},[79,170729,148558],{"class":7412},[79,170731,244],{"class":243},[79,170733,148563],{"class":89},[79,170735,15876],{"class":239},[79,170737,445],{"class":243},[79,170739,149905],{"class":7412},[79,170741,673],{"class":239},[79,170743,170744,170746],{"class":81,"line":457},[79,170745,170636],{"class":7412},[79,170747,170748],{"class":239},".writelines(lines)\n",[14,170750,170752],{"id":170751},"_87-追加文件","8.7 追加文件",[19,170754,170755,170757],{},[59,170756,2614],{}," 模式不会清空原内容，而是在末尾追加。",[51,170759,170761],{"className":230,"code":170760,"language":232,"meta":57,"style":57},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[59,170762,170763,170794],{"__ignoreMap":57},[79,170764,170765,170767,170769,170771,170774,170776,170778,170780,170782,170784,170786,170788,170790,170792],{"class":81,"line":82},[79,170766,109840],{"class":243},[79,170768,148543],{"class":96},[79,170770,685],{"class":239},[79,170772,170773],{"class":89},"\"log.txt\"",[79,170775,1060],{"class":239},[79,170777,167077],{"class":89},[79,170779,1060],{"class":239},[79,170781,148558],{"class":7412},[79,170783,244],{"class":243},[79,170785,148563],{"class":89},[79,170787,15876],{"class":239},[79,170789,445],{"class":243},[79,170791,149905],{"class":7412},[79,170793,673],{"class":239},[79,170795,170796,170798,170800,170803,170805,170807],{"class":81,"line":167},[79,170797,170636],{"class":7412},[79,170799,170639],{"class":239},[79,170801,170802],{"class":89},"\"程序启动",[79,170804,158277],{"class":96},[79,170806,703],{"class":89},[79,170808,253],{"class":239},[19,170810,170811],{},"日志类文件常用追加模式。",[14,170813,170815],{"id":170814},"_88-文件编码","8.8 文件编码",[19,170817,170818],{},"编码决定文字如何保存为字节。",[19,170820,170821],{},"常见编码：",[26,170823,170824,170827],{},[29,170825,170826],{},"UTF-8：推荐。",[29,170828,170829],{},"GBK：部分 Windows 中文文件常见。",[19,170831,170832],{},"读取文件乱码时，可以尝试：",[51,170834,170836],{"className":230,"code":170835,"language":232,"meta":57,"style":57},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[59,170837,170838,170869],{"__ignoreMap":57},[79,170839,170840,170842,170844,170846,170848,170850,170852,170854,170856,170858,170861,170863,170865,170867],{"class":81,"line":82},[79,170841,109840],{"class":243},[79,170843,148543],{"class":96},[79,170845,685],{"class":239},[79,170847,148548],{"class":89},[79,170849,1060],{"class":239},[79,170851,148553],{"class":89},[79,170853,1060],{"class":239},[79,170855,148558],{"class":7412},[79,170857,244],{"class":243},[79,170859,170860],{"class":89},"\"gbk\"",[79,170862,15876],{"class":239},[79,170864,445],{"class":243},[79,170866,149905],{"class":7412},[79,170868,673],{"class":239},[79,170870,170871,170873,170875,170877],{"class":81,"line":167},[79,170872,148575],{"class":239},[79,170874,244],{"class":243},[79,170876,149905],{"class":7412},[79,170878,170253],{"class":239},[19,170880,170881],{},"写文件时建议统一 UTF-8：",[51,170883,170885],{"className":230,"code":170884,"language":232,"meta":57,"style":57},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[59,170886,170887,170917],{"__ignoreMap":57},[79,170888,170889,170891,170893,170895,170897,170899,170901,170903,170905,170907,170909,170911,170913,170915],{"class":81,"line":82},[79,170890,109840],{"class":243},[79,170892,148543],{"class":96},[79,170894,685],{"class":239},[79,170896,148548],{"class":89},[79,170898,1060],{"class":239},[79,170900,153728],{"class":89},[79,170902,1060],{"class":239},[79,170904,148558],{"class":7412},[79,170906,244],{"class":243},[79,170908,148563],{"class":89},[79,170910,15876],{"class":239},[79,170912,445],{"class":243},[79,170914,149905],{"class":7412},[79,170916,673],{"class":239},[79,170918,170919,170921,170923,170926],{"class":81,"line":167},[79,170920,170636],{"class":7412},[79,170922,170639],{"class":239},[79,170924,170925],{"class":89},"\"中文内容\"",[79,170927,253],{"class":239},[14,170929,170931],{"id":170930},"_89-pathlib","8.9 pathlib",[19,170933,170934,170937],{},[59,170935,170936],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[51,170939,170941],{"className":230,"code":170940,"language":232,"meta":57,"style":57},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[59,170942,170943,170953,170957,170975],{"__ignoreMap":57},[79,170944,170945,170947,170949,170951],{"class":81,"line":82},[79,170946,32862],{"class":243},[79,170948,110318],{"class":239},[79,170950,432],{"class":243},[79,170952,110323],{"class":239},[79,170954,170955],{"class":81,"line":167},[79,170956,454],{"emptyLinePlaceholder":453},[79,170958,170959,170961,170963,170965,170968,170970,170972],{"class":81,"line":178},[79,170960,170063],{"class":239},[79,170962,244],{"class":243},[79,170964,110552],{"class":239},[79,170966,170967],{"class":89},"\"data\"",[79,170969,15876],{"class":239},[79,170971,2957],{"class":243},[79,170973,170974],{"class":89}," \"students.txt\"\n",[79,170976,170977,170979],{"class":81,"line":457},[79,170978,32541],{"class":96},[79,170980,170981],{"class":239},"(path)\n",[19,170983,170984],{},"创建目录：",[51,170986,170988],{"className":230,"code":170987,"language":232,"meta":57,"style":57},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[59,170989,170990,171000,171004,171017],{"__ignoreMap":57},[79,170991,170992,170994,170996,170998],{"class":81,"line":82},[79,170993,32862],{"class":243},[79,170995,110318],{"class":239},[79,170997,432],{"class":243},[79,170999,110323],{"class":239},[79,171001,171002],{"class":81,"line":167},[79,171003,454],{"emptyLinePlaceholder":453},[79,171005,171006,171009,171011,171013,171015],{"class":81,"line":178},[79,171007,171008],{"class":239},"data_dir ",[79,171010,244],{"class":243},[79,171012,110552],{"class":239},[79,171014,170967],{"class":89},[79,171016,253],{"class":239},[79,171018,171019,171022,171025,171027,171029],{"class":81,"line":457},[79,171020,171021],{"class":239},"data_dir.mkdir(",[79,171023,171024],{"class":7412},"exist_ok",[79,171026,244],{"class":243},[79,171028,33595],{"class":96},[79,171030,253],{"class":239},[19,171032,171033],{},"判断文件是否存在：",[51,171035,171037],{"className":230,"code":171036,"language":232,"meta":57,"style":57},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[59,171038,171039,171052,171056,171063],{"__ignoreMap":57},[79,171040,171041,171043,171045,171047,171050],{"class":81,"line":82},[79,171042,170063],{"class":239},[79,171044,244],{"class":243},[79,171046,110552],{"class":239},[79,171048,171049],{"class":89},"\"data\u002Fstudents.txt\"",[79,171051,253],{"class":239},[79,171053,171054],{"class":81,"line":167},[79,171055,454],{"emptyLinePlaceholder":453},[79,171057,171058,171060],{"class":81,"line":178},[79,171059,1329],{"class":243},[79,171061,171062],{"class":239}," path.exists():\n",[79,171064,171065,171067,171069,171072],{"class":81,"line":457},[79,171066,1254],{"class":96},[79,171068,685],{"class":239},[79,171070,171071],{"class":89},"\"文件存在\"",[79,171073,253],{"class":239},[19,171075,171076],{},"读写文本：",[51,171078,171080],{"className":230,"code":171079,"language":232,"meta":57,"style":57},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[59,171081,171082,171094,171098,171115,171132],{"__ignoreMap":57},[79,171083,171084,171086,171088,171090,171092],{"class":81,"line":82},[79,171085,170063],{"class":239},[79,171087,244],{"class":243},[79,171089,110552],{"class":239},[79,171091,148548],{"class":89},[79,171093,253],{"class":239},[79,171095,171096],{"class":81,"line":167},[79,171097,454],{"emptyLinePlaceholder":453},[79,171099,171100,171103,171105,171107,171109,171111,171113],{"class":81,"line":178},[79,171101,171102],{"class":239},"path.write_text(",[79,171104,147628],{"class":89},[79,171106,1060],{"class":239},[79,171108,148558],{"class":7412},[79,171110,244],{"class":243},[79,171112,148563],{"class":89},[79,171114,253],{"class":239},[79,171116,171117,171119,171121,171124,171126,171128,171130],{"class":81,"line":457},[79,171118,170246],{"class":239},[79,171120,244],{"class":243},[79,171122,171123],{"class":239}," path.read_text(",[79,171125,148558],{"class":7412},[79,171127,244],{"class":243},[79,171129,148563],{"class":89},[79,171131,253],{"class":239},[79,171133,171134,171136],{"class":81,"line":462},[79,171135,32541],{"class":96},[79,171137,170260],{"class":239},[14,171139,171141],{"id":171140},"_810-json文件","8.10 JSON文件",[19,171143,171144],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[51,171146,171148],{"className":230,"code":171147,"language":232,"meta":57,"style":57},"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",[59,171149,171150,171156,171160,171168,171178,171188,171196,171200,171204,171229],{"__ignoreMap":57},[79,171151,171152,171154],{"class":81,"line":82},[79,171153,432],{"class":243},[79,171155,148843],{"class":239},[79,171157,171158],{"class":81,"line":167},[79,171159,454],{"emptyLinePlaceholder":453},[79,171161,171162,171164,171166],{"class":81,"line":178},[79,171163,151233],{"class":239},[79,171165,244],{"class":243},[79,171167,17732],{"class":239},[79,171169,171170,171172,171174,171176],{"class":81,"line":457},[79,171171,148772],{"class":89},[79,171173,53550],{"class":239},[79,171175,151640],{"class":89},[79,171177,33585],{"class":239},[79,171179,171180,171182,171184,171186],{"class":81,"line":462},[79,171181,166289],{"class":89},[79,171183,53550],{"class":239},[79,171185,3023],{"class":96},[79,171187,33585],{"class":239},[79,171189,171190,171192,171194],{"class":81,"line":474},[79,171191,166300],{"class":89},[79,171193,53550],{"class":239},[79,171195,166305],{"class":96},[79,171197,171198],{"class":81,"line":480},[79,171199,3801],{"class":239},[79,171201,171202],{"class":81,"line":486},[79,171203,454],{"emptyLinePlaceholder":453},[79,171205,171206,171208,171210,171213,171215,171217,171219,171221,171223,171225,171227],{"class":81,"line":491},[79,171207,158196],{"class":239},[79,171209,244],{"class":243},[79,171211,171212],{"class":239}," json.dumps(student, ",[79,171214,148889],{"class":7412},[79,171216,244],{"class":243},[79,171218,36102],{"class":96},[79,171220,1060],{"class":239},[79,171222,153764],{"class":7412},[79,171224,244],{"class":243},[79,171226,1049],{"class":96},[79,171228,253],{"class":239},[79,171230,171231,171233],{"class":81,"line":497},[79,171232,32541],{"class":96},[79,171234,165823],{"class":239},[19,171236,171237],{},"写入 JSON 文件：",[51,171239,171241],{"className":230,"code":171240,"language":232,"meta":57,"style":57},"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",[59,171242,171243,171249,171253,171261,171289,171317,171321,171325,171355],{"__ignoreMap":57},[79,171244,171245,171247],{"class":81,"line":82},[79,171246,432],{"class":243},[79,171248,148843],{"class":239},[79,171250,171251],{"class":81,"line":167},[79,171252,454],{"emptyLinePlaceholder":453},[79,171254,171255,171257,171259],{"class":81,"line":178},[79,171256,161468],{"class":239},[79,171258,244],{"class":243},[79,171260,57557],{"class":239},[79,171262,171263,171265,171267,171269,171271,171273,171275,171277,171279,171281,171283,171285,171287],{"class":81,"line":457},[79,171264,150137],{"class":239},[79,171266,64789],{"class":89},[79,171268,53550],{"class":239},[79,171270,151640],{"class":89},[79,171272,1060],{"class":239},[79,171274,71233],{"class":89},[79,171276,53550],{"class":239},[79,171278,3023],{"class":96},[79,171280,1060],{"class":239},[79,171282,153224],{"class":89},[79,171284,53550],{"class":239},[79,171286,3359],{"class":96},[79,171288,7128],{"class":239},[79,171290,171291,171293,171295,171297,171299,171301,171303,171305,171307,171309,171311,171313,171315],{"class":81,"line":462},[79,171292,150137],{"class":239},[79,171294,64789],{"class":89},[79,171296,53550],{"class":239},[79,171298,152688],{"class":89},[79,171300,1060],{"class":239},[79,171302,71233],{"class":89},[79,171304,53550],{"class":239},[79,171306,2998],{"class":96},[79,171308,1060],{"class":239},[79,171310,153224],{"class":89},[79,171312,53550],{"class":239},[79,171314,3184],{"class":96},[79,171316,7128],{"class":239},[79,171318,171319],{"class":81,"line":474},[79,171320,35361],{"class":239},[79,171322,171323],{"class":81,"line":480},[79,171324,454],{"emptyLinePlaceholder":453},[79,171326,171327,171329,171331,171333,171335,171337,171339,171341,171343,171345,171347,171349,171351,171353],{"class":81,"line":486},[79,171328,109840],{"class":243},[79,171330,148543],{"class":96},[79,171332,685],{"class":239},[79,171334,153583],{"class":89},[79,171336,1060],{"class":239},[79,171338,153728],{"class":89},[79,171340,1060],{"class":239},[79,171342,148558],{"class":7412},[79,171344,244],{"class":243},[79,171346,148563],{"class":89},[79,171348,15876],{"class":239},[79,171350,445],{"class":243},[79,171352,149905],{"class":7412},[79,171354,673],{"class":239},[79,171356,171357,171360,171362,171364,171366,171368,171370,171372,171374,171376,171378],{"class":81,"line":491},[79,171358,171359],{"class":239},"    json.dump(students, ",[79,171361,47468],{"class":7412},[79,171363,1060],{"class":239},[79,171365,148889],{"class":7412},[79,171367,244],{"class":243},[79,171369,36102],{"class":96},[79,171371,1060],{"class":239},[79,171373,153764],{"class":7412},[79,171375,244],{"class":243},[79,171377,1049],{"class":96},[79,171379,253],{"class":239},[19,171381,171382],{},"读取 JSON 文件：",[51,171384,171386],{"className":230,"code":171385,"language":232,"meta":57,"style":57},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[59,171387,171388,171394,171398,171428,171440,171444],{"__ignoreMap":57},[79,171389,171390,171392],{"class":81,"line":82},[79,171391,432],{"class":243},[79,171393,148843],{"class":239},[79,171395,171396],{"class":81,"line":167},[79,171397,454],{"emptyLinePlaceholder":453},[79,171399,171400,171402,171404,171406,171408,171410,171412,171414,171416,171418,171420,171422,171424,171426],{"class":81,"line":178},[79,171401,109840],{"class":243},[79,171403,148543],{"class":96},[79,171405,685],{"class":239},[79,171407,153583],{"class":89},[79,171409,1060],{"class":239},[79,171411,148553],{"class":89},[79,171413,1060],{"class":239},[79,171415,148558],{"class":7412},[79,171417,244],{"class":243},[79,171419,148563],{"class":89},[79,171421,15876],{"class":239},[79,171423,445],{"class":243},[79,171425,149905],{"class":7412},[79,171427,673],{"class":239},[79,171429,171430,171432,171434,171436,171438],{"class":81,"line":457},[79,171431,154789],{"class":239},[79,171433,244],{"class":243},[79,171435,149916],{"class":239},[79,171437,47468],{"class":7412},[79,171439,253],{"class":239},[79,171441,171442],{"class":81,"line":462},[79,171443,454],{"emptyLinePlaceholder":453},[79,171445,171446,171448],{"class":81,"line":474},[79,171447,32541],{"class":96},[79,171449,166747],{"class":239},[14,171451,171453],{"id":171452},"_811-csv文件","8.11 CSV文件",[19,171455,171456],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171458,171459],{},"写入 CSV：",[51,171461,171463],{"className":230,"code":171462,"language":232,"meta":57,"style":57},"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",[59,171464,171465,171472,171476,171484,171502,171518,171534,171538,171542,171582,171596],{"__ignoreMap":57},[79,171466,171467,171469],{"class":81,"line":82},[79,171468,432],{"class":243},[79,171470,171471],{"class":239}," csv\n",[79,171473,171474],{"class":81,"line":167},[79,171475,454],{"emptyLinePlaceholder":453},[79,171477,171478,171480,171482],{"class":81,"line":178},[79,171479,161468],{"class":239},[79,171481,244],{"class":243},[79,171483,57557],{"class":239},[79,171485,171486,171489,171491,171493,171495,171497,171500],{"class":81,"line":457},[79,171487,171488],{"class":239},"    [",[79,171490,75207],{"class":89},[79,171492,1060],{"class":239},[79,171494,75240],{"class":89},[79,171496,1060],{"class":239},[79,171498,171499],{"class":89},"\"成绩\"",[79,171501,89941],{"class":239},[79,171503,171504,171506,171508,171510,171512,171514,171516],{"class":81,"line":462},[79,171505,171488],{"class":239},[79,171507,151640],{"class":89},[79,171509,1060],{"class":239},[79,171511,3023],{"class":96},[79,171513,1060],{"class":239},[79,171515,3359],{"class":96},[79,171517,89941],{"class":239},[79,171519,171520,171522,171524,171526,171528,171530,171532],{"class":81,"line":474},[79,171521,171488],{"class":239},[79,171523,152688],{"class":89},[79,171525,1060],{"class":239},[79,171527,2998],{"class":96},[79,171529,1060],{"class":239},[79,171531,3184],{"class":96},[79,171533,89941],{"class":239},[79,171535,171536],{"class":81,"line":480},[79,171537,35361],{"class":239},[79,171539,171540],{"class":81,"line":486},[79,171541,454],{"emptyLinePlaceholder":453},[79,171543,171544,171546,171548,171550,171553,171555,171557,171559,171561,171563,171565,171567,171570,171572,171574,171576,171578,171580],{"class":81,"line":491},[79,171545,109840],{"class":243},[79,171547,148543],{"class":96},[79,171549,685],{"class":239},[79,171551,171552],{"class":89},"\"students.csv\"",[79,171554,1060],{"class":239},[79,171556,153728],{"class":89},[79,171558,1060],{"class":239},[79,171560,148558],{"class":7412},[79,171562,244],{"class":243},[79,171564,148563],{"class":89},[79,171566,1060],{"class":239},[79,171568,171569],{"class":7412},"newline",[79,171571,244],{"class":243},[79,171573,9846],{"class":89},[79,171575,15876],{"class":239},[79,171577,445],{"class":243},[79,171579,149905],{"class":7412},[79,171581,673],{"class":239},[79,171583,171584,171587,171589,171592,171594],{"class":81,"line":497},[79,171585,171586],{"class":239},"    writer ",[79,171588,244],{"class":243},[79,171590,171591],{"class":239}," csv.writer(",[79,171593,47468],{"class":7412},[79,171595,253],{"class":239},[79,171597,171598],{"class":81,"line":503},[79,171599,171600],{"class":239},"    writer.writerows(students)\n",[19,171602,171603],{},"读取 CSV：",[51,171605,171607],{"className":230,"code":171606,"language":232,"meta":57,"style":57},"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",[59,171608,171609,171615,171619,171649,171663,171675],{"__ignoreMap":57},[79,171610,171611,171613],{"class":81,"line":82},[79,171612,432],{"class":243},[79,171614,171471],{"class":239},[79,171616,171617],{"class":81,"line":167},[79,171618,454],{"emptyLinePlaceholder":453},[79,171620,171621,171623,171625,171627,171629,171631,171633,171635,171637,171639,171641,171643,171645,171647],{"class":81,"line":178},[79,171622,109840],{"class":243},[79,171624,148543],{"class":96},[79,171626,685],{"class":239},[79,171628,171552],{"class":89},[79,171630,1060],{"class":239},[79,171632,148553],{"class":89},[79,171634,1060],{"class":239},[79,171636,148558],{"class":7412},[79,171638,244],{"class":243},[79,171640,148563],{"class":89},[79,171642,15876],{"class":239},[79,171644,445],{"class":243},[79,171646,149905],{"class":7412},[79,171648,673],{"class":239},[79,171650,171651,171654,171656,171659,171661],{"class":81,"line":457},[79,171652,171653],{"class":239},"    reader ",[79,171655,244],{"class":243},[79,171657,171658],{"class":239}," csv.reader(",[79,171660,47468],{"class":7412},[79,171662,253],{"class":239},[79,171664,171665,171667,171670,171672],{"class":81,"line":462},[79,171666,949],{"class":243},[79,171668,171669],{"class":239}," row ",[79,171671,955],{"class":243},[79,171673,171674],{"class":239}," reader:\n",[79,171676,171677,171679],{"class":81,"line":474},[79,171678,34566],{"class":96},[79,171680,171681],{"class":239},"(row)\n",[19,171683,171684],{},"使用字典写入：",[51,171686,171688],{"className":230,"code":171687,"language":232,"meta":57,"style":57},"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",[59,171689,171690,171696,171700,171708,171736,171764,171768,171772,171810,171831,171852,171857],{"__ignoreMap":57},[79,171691,171692,171694],{"class":81,"line":82},[79,171693,432],{"class":243},[79,171695,171471],{"class":239},[79,171697,171698],{"class":81,"line":167},[79,171699,454],{"emptyLinePlaceholder":453},[79,171701,171702,171704,171706],{"class":81,"line":178},[79,171703,161468],{"class":239},[79,171705,244],{"class":243},[79,171707,57557],{"class":239},[79,171709,171710,171712,171714,171716,171718,171720,171722,171724,171726,171728,171730,171732,171734],{"class":81,"line":457},[79,171711,150137],{"class":239},[79,171713,64789],{"class":89},[79,171715,53550],{"class":239},[79,171717,151640],{"class":89},[79,171719,1060],{"class":239},[79,171721,71233],{"class":89},[79,171723,53550],{"class":239},[79,171725,3023],{"class":96},[79,171727,1060],{"class":239},[79,171729,153224],{"class":89},[79,171731,53550],{"class":239},[79,171733,3359],{"class":96},[79,171735,7128],{"class":239},[79,171737,171738,171740,171742,171744,171746,171748,171750,171752,171754,171756,171758,171760,171762],{"class":81,"line":462},[79,171739,150137],{"class":239},[79,171741,64789],{"class":89},[79,171743,53550],{"class":239},[79,171745,152688],{"class":89},[79,171747,1060],{"class":239},[79,171749,71233],{"class":89},[79,171751,53550],{"class":239},[79,171753,2998],{"class":96},[79,171755,1060],{"class":239},[79,171757,153224],{"class":89},[79,171759,53550],{"class":239},[79,171761,3184],{"class":96},[79,171763,7128],{"class":239},[79,171765,171766],{"class":81,"line":474},[79,171767,35361],{"class":239},[79,171769,171770],{"class":81,"line":480},[79,171771,454],{"emptyLinePlaceholder":453},[79,171773,171774,171776,171778,171780,171782,171784,171786,171788,171790,171792,171794,171796,171798,171800,171802,171804,171806,171808],{"class":81,"line":486},[79,171775,109840],{"class":243},[79,171777,148543],{"class":96},[79,171779,685],{"class":239},[79,171781,171552],{"class":89},[79,171783,1060],{"class":239},[79,171785,153728],{"class":89},[79,171787,1060],{"class":239},[79,171789,148558],{"class":7412},[79,171791,244],{"class":243},[79,171793,148563],{"class":89},[79,171795,1060],{"class":239},[79,171797,171569],{"class":7412},[79,171799,244],{"class":243},[79,171801,9846],{"class":89},[79,171803,15876],{"class":239},[79,171805,445],{"class":243},[79,171807,149905],{"class":7412},[79,171809,673],{"class":239},[79,171811,171812,171815,171817,171819,171821,171823,171825,171827,171829],{"class":81,"line":491},[79,171813,171814],{"class":239},"    fieldnames ",[79,171816,244],{"class":243},[79,171818,54339],{"class":239},[79,171820,64789],{"class":89},[79,171822,1060],{"class":239},[79,171824,71233],{"class":89},[79,171826,1060],{"class":239},[79,171828,153224],{"class":89},[79,171830,35361],{"class":239},[79,171832,171833,171835,171837,171840,171842,171844,171847,171849],{"class":81,"line":497},[79,171834,171586],{"class":239},[79,171836,244],{"class":243},[79,171838,171839],{"class":239}," csv.DictWriter(",[79,171841,47468],{"class":7412},[79,171843,1060],{"class":239},[79,171845,171846],{"class":7412},"fieldnames",[79,171848,244],{"class":243},[79,171850,171851],{"class":239},"fieldnames)\n",[79,171853,171854],{"class":81,"line":503},[79,171855,171856],{"class":239},"    writer.writeheader()\n",[79,171858,171859],{"class":81,"line":509},[79,171860,171600],{"class":239},[14,171862,171864],{"id":171863},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171866,125044],{},[26,171868,171869,171872,171875],{},[29,171870,171871],{},"读取文本文件。",[29,171873,171874],{},"统计每个单词出现次数。",[29,171876,171877],{},"输出出现次数最多的前 10 个单词。",[19,171879,12199],{},[51,171881,171883],{"className":230,"code":171882,"language":232,"meta":57,"style":57},"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",[59,171884,171885,171895,171899,171912,171928,171932,171942,171951,171955,171967,171987,171996,172000,172018,172022,172052,172056,172072],{"__ignoreMap":57},[79,171886,171887,171889,171891,171893],{"class":81,"line":82},[79,171888,32862],{"class":243},[79,171890,110318],{"class":239},[79,171892,432],{"class":243},[79,171894,110323],{"class":239},[79,171896,171897],{"class":81,"line":167},[79,171898,454],{"emptyLinePlaceholder":453},[79,171900,171901,171903,171905,171907,171910],{"class":81,"line":178},[79,171902,170063],{"class":239},[79,171904,244],{"class":243},[79,171906,110552],{"class":239},[79,171908,171909],{"class":89},"\"article.txt\"",[79,171911,253],{"class":239},[79,171913,171914,171916,171918,171920,171922,171924,171926],{"class":81,"line":457},[79,171915,170246],{"class":239},[79,171917,244],{"class":243},[79,171919,171123],{"class":239},[79,171921,148558],{"class":7412},[79,171923,244],{"class":243},[79,171925,148563],{"class":89},[79,171927,253],{"class":239},[79,171929,171930],{"class":81,"line":462},[79,171931,454],{"emptyLinePlaceholder":453},[79,171933,171934,171937,171939],{"class":81,"line":474},[79,171935,171936],{"class":239},"words ",[79,171938,244],{"class":243},[79,171940,171941],{"class":239}," content.lower().split()\n",[79,171943,171944,171947,171949],{"class":81,"line":480},[79,171945,171946],{"class":239},"counter ",[79,171948,244],{"class":243},[79,171950,89973],{"class":239},[79,171952,171953],{"class":81,"line":486},[79,171954,454],{"emptyLinePlaceholder":453},[79,171956,171957,171959,171962,171964],{"class":81,"line":491},[79,171958,1874],{"class":243},[79,171960,171961],{"class":239}," word ",[79,171963,955],{"class":243},[79,171965,171966],{"class":239}," words:\n",[79,171968,171969,171972,171974,171977,171980,171982,171985],{"class":81,"line":497},[79,171970,171971],{"class":239},"    word ",[79,171973,244],{"class":243},[79,171975,171976],{"class":239}," word.strip(",[79,171978,171979],{"class":89},"\".,!?;:",[79,171981,158247],{"class":96},[79,171983,171984],{"class":89},"'()[]\"",[79,171986,253],{"class":239},[79,171988,171989,171991,171993],{"class":81,"line":503},[79,171990,662],{"class":243},[79,171992,41044],{"class":243},[79,171994,171995],{"class":239}," word:\n",[79,171997,171998],{"class":81,"line":509},[79,171999,150264],{"class":243},[79,172001,172002,172005,172007,172010,172012,172014,172016],{"class":81,"line":514},[79,172003,172004],{"class":239},"    counter[word] ",[79,172006,244],{"class":243},[79,172008,172009],{"class":239}," counter.get(word, ",[79,172011,1030],{"class":96},[79,172013,15876],{"class":239},[79,172015,2855],{"class":243},[79,172017,57809],{"class":96},[79,172019,172020],{"class":81,"line":520},[79,172021,454],{"emptyLinePlaceholder":453},[79,172023,172024,172027,172029,172031,172034,172036,172038,172040,172042,172044,172046,172048,172050],{"class":81,"line":526},[79,172025,172026],{"class":239},"items ",[79,172028,244],{"class":243},[79,172030,165356],{"class":96},[79,172032,172033],{"class":239},"(counter.items(), ",[79,172035,155698],{"class":7412},[79,172037,155701],{"class":243},[79,172039,155704],{"class":239},[79,172041,1072],{"class":96},[79,172043,1052],{"class":239},[79,172045,165280],{"class":7412},[79,172047,244],{"class":243},[79,172049,33595],{"class":96},[79,172051,253],{"class":239},[79,172053,172054],{"class":81,"line":532},[79,172055,454],{"emptyLinePlaceholder":453},[79,172057,172058,172060,172063,172065,172068,172070],{"class":81,"line":537},[79,172059,1874],{"class":243},[79,172061,172062],{"class":239}," word, count ",[79,172064,955],{"class":243},[79,172066,172067],{"class":239}," items[:",[79,172069,2820],{"class":96},[79,172071,167507],{"class":239},[79,172073,172074,172076],{"class":81,"line":543},[79,172075,1254],{"class":96},[79,172077,172078],{"class":239},"(word, count)\n",[14,172080,172082],{"id":172081},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[51,172084,172086],{"className":230,"code":172085,"language":232,"meta":57,"style":57},"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",[59,172087,172088,172094,172104,172108,172120,172124,172128,172136,172146,172152,172156,172186,172196,172200,172204,172212,172242,172266,172270,172274,172282,172311,172316],{"__ignoreMap":57},[79,172089,172090,172092],{"class":81,"line":82},[79,172091,432],{"class":243},[79,172093,148843],{"class":239},[79,172095,172096,172098,172100,172102],{"class":81,"line":167},[79,172097,32862],{"class":243},[79,172099,110318],{"class":239},[79,172101,432],{"class":243},[79,172103,110323],{"class":239},[79,172105,172106],{"class":81,"line":178},[79,172107,454],{"emptyLinePlaceholder":453},[79,172109,172110,172112,172114,172116,172118],{"class":81,"line":457},[79,172111,153576],{"class":96},[79,172113,468],{"class":243},[79,172115,110552],{"class":239},[79,172117,153583],{"class":89},[79,172119,253],{"class":239},[79,172121,172122],{"class":81,"line":462},[79,172123,454],{"emptyLinePlaceholder":453},[79,172125,172126],{"class":81,"line":474},[79,172127,454],{"emptyLinePlaceholder":453},[79,172129,172130,172132,172134],{"class":81,"line":480},[79,172131,633],{"class":243},[79,172133,153600],{"class":85},[79,172135,34070],{"class":239},[79,172137,172138,172140,172142,172144],{"class":81,"line":486},[79,172139,662],{"class":243},[79,172141,41044],{"class":243},[79,172143,153611],{"class":96},[79,172145,153614],{"class":239},[79,172147,172148,172150],{"class":81,"line":491},[79,172149,16913],{"class":243},[79,172151,53951],{"class":239},[79,172153,172154],{"class":81,"line":497},[79,172155,454],{"emptyLinePlaceholder":453},[79,172157,172158,172160,172162,172164,172166,172168,172170,172172,172174,172176,172178,172180,172182,172184],{"class":81,"line":503},[79,172159,36293],{"class":243},[79,172161,148543],{"class":96},[79,172163,685],{"class":239},[79,172165,153576],{"class":96},[79,172167,1060],{"class":239},[79,172169,148553],{"class":89},[79,172171,1060],{"class":239},[79,172173,148558],{"class":7412},[79,172175,244],{"class":243},[79,172177,148563],{"class":89},[79,172179,15876],{"class":239},[79,172181,445],{"class":243},[79,172183,149905],{"class":7412},[79,172185,673],{"class":239},[79,172187,172188,172190,172192,172194],{"class":81,"line":509},[79,172189,16913],{"class":243},[79,172191,149916],{"class":239},[79,172193,47468],{"class":7412},[79,172195,253],{"class":239},[79,172197,172198],{"class":81,"line":514},[79,172199,454],{"emptyLinePlaceholder":453},[79,172201,172202],{"class":81,"line":520},[79,172203,454],{"emptyLinePlaceholder":453},[79,172205,172206,172208,172210],{"class":81,"line":526},[79,172207,633],{"class":243},[79,172209,153710],{"class":85},[79,172211,153713],{"class":239},[79,172213,172214,172216,172218,172220,172222,172224,172226,172228,172230,172232,172234,172236,172238,172240],{"class":81,"line":532},[79,172215,36293],{"class":243},[79,172217,148543],{"class":96},[79,172219,685],{"class":239},[79,172221,153576],{"class":96},[79,172223,1060],{"class":239},[79,172225,153728],{"class":89},[79,172227,1060],{"class":239},[79,172229,148558],{"class":7412},[79,172231,244],{"class":243},[79,172233,148563],{"class":89},[79,172235,15876],{"class":239},[79,172237,445],{"class":243},[79,172239,149905],{"class":7412},[79,172241,673],{"class":239},[79,172243,172244,172246,172248,172250,172252,172254,172256,172258,172260,172262,172264],{"class":81,"line":537},[79,172245,153749],{"class":239},[79,172247,47468],{"class":7412},[79,172249,1060],{"class":239},[79,172251,148889],{"class":7412},[79,172253,244],{"class":243},[79,172255,36102],{"class":96},[79,172257,1060],{"class":239},[79,172259,153764],{"class":7412},[79,172261,244],{"class":243},[79,172263,1049],{"class":96},[79,172265,253],{"class":239},[79,172267,172268],{"class":81,"line":543},[79,172269,454],{"emptyLinePlaceholder":453},[79,172271,172272],{"class":81,"line":549},[79,172273,454],{"emptyLinePlaceholder":453},[79,172275,172276,172278,172280],{"class":81,"line":555},[79,172277,161468],{"class":239},[79,172279,244],{"class":243},[79,172281,154794],{"class":239},[79,172283,172284,172287,172289,172291,172293,172295,172297,172299,172301,172303,172305,172307,172309],{"class":81,"line":561},[79,172285,172286],{"class":239},"students.append({",[79,172288,64789],{"class":89},[79,172290,53550],{"class":239},[79,172292,151640],{"class":89},[79,172294,1060],{"class":239},[79,172296,71233],{"class":89},[79,172298,53550],{"class":239},[79,172300,3023],{"class":96},[79,172302,1060],{"class":239},[79,172304,153224],{"class":89},[79,172306,53550],{"class":239},[79,172308,3359],{"class":96},[79,172310,166904],{"class":239},[79,172312,172313],{"class":81,"line":567},[79,172314,172315],{"class":239},"save_students(students)\n",[79,172317,172318,172320,172322,172325],{"class":81,"line":573},[79,172319,32541],{"class":96},[79,172321,685],{"class":239},[79,172323,172324],{"class":89},"\"保存成功\"",[79,172326,253],{"class":239},[14,172328,172330],{"id":172329},"_814-易错点","8.14 易错点",[26,172332,172333,172337,172343,172348,172355,172362],{},[29,172334,172335,170596],{},[59,172336,3168],{},[29,172338,172339,172340,1604],{},"读写中文要指定 ",[59,172341,172342],{},"encoding=\"utf-8\"",[29,172344,172345,172346,1604],{},"打开文件后要关闭，推荐使用 ",[59,172347,109840],{},[29,172349,172350,172351,172354],{},"读取大文件不要直接 ",[59,172352,172353],{},"read()"," 全部内容。",[29,172356,172357,172358,172361],{},"Windows 写 CSV 时建议加 ",[59,172359,172360],{},"newline=\"\"","，避免空行。",[29,172363,172364],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172366,172368],{"id":172367},"_815-本章练习","8.15 本章练习",[26,172370,172371,172378,172383,172386,172389],{},[29,172372,172373,172374,172377],{},"写入一个 ",[59,172375,172376],{},"students.txt","，每行保存一个学生姓名。",[29,172379,106377,172380,172382],{},[59,172381,172376],{}," 并输出所有学生。",[29,172384,172385],{},"把学生列表保存为 JSON 文件。",[29,172387,172388],{},"从 JSON 文件读取学生数据，计算平均分。",[29,172390,172391,172392,172395,172396,172399],{},"写一个日志函数 ",[59,172393,172394],{},"write_log(message)","，每次调用向 ",[59,172397,172398],{},"app.log"," 追加一行。",[2287,172401,172402],{},"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":57,"searchDepth":167,"depth":167,"links":172404},[172405,172406,172410,172411,172417,172418,172419,172420,172421,172422,172423,172424,172425,172426,172427],{"id":169916,"depth":167,"text":169917},{"id":169957,"depth":167,"text":169958,"children":172407},[172408,172409],{"id":169961,"depth":178,"text":169962},{"id":169995,"depth":178,"text":169996},{"id":170109,"depth":167,"text":170110},{"id":170202,"depth":167,"text":170203,"children":172412},[172413,172414,172415,172416],{"id":170206,"depth":178,"text":170207},{"id":170293,"depth":178,"text":170294},{"id":170363,"depth":178,"text":170364},{"id":170457,"depth":178,"text":170458},{"id":170527,"depth":167,"text":170528},{"id":170590,"depth":167,"text":170591},{"id":170751,"depth":167,"text":170752},{"id":170814,"depth":167,"text":170815},{"id":170930,"depth":167,"text":170931},{"id":171140,"depth":167,"text":171141},{"id":171452,"depth":167,"text":171453},{"id":171863,"depth":167,"text":171864},{"id":172081,"depth":167,"text":172082},{"id":172329,"depth":167,"text":172330},{"id":172367,"depth":167,"text":172368},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169908,"description":25516},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172434,"title":172435,"body":172436,"description":25516,"extension":2314,"meta":174622,"navigation":453,"path":174623,"seo":174624,"stem":174625,"__hash__":174626},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172437,"toc":174589},[172438,172441,172445,172448,172451,172543,172545,172564,172569,172573,172576,172579,172608,172615,172618,172622,172625,172654,172656,172708,172714,172767,172771,172869,172872,172939,172943,173000,173002,173008,173012,173017,173023,173114,173119,173123,173126,173204,173207,173245,173249,173367,173370,173374,173377,173422,173425,173429,173434,173440,173490,173493,173524,173528,173532,173562,173566,173601,173605,173640,173680,173684,173700,173703,173707,173711,173790,173794,173835,173839,173894,173898,173932,173936,173966,173975,173982,173988,174045,174048,174056,174059,174063,174070,174073,174079,174082,174099,174104,174108,174114,174127,174130,174167,174170,174181,174184,174198,174201,174215,174219,174226,174259,174262,174264,174270,174273,174277,174279,174285,174290,174463,174467,174530,174534,174558,174562,174586],[10,172439,172435],{"id":172440},"_9-异常模块与包",[14,172442,172444],{"id":172443},"_91-什么是异常","9.1 什么是异常",[19,172446,172447],{},"异常是程序运行过程中出现的错误。",[19,172449,172450],{},"常见异常：",[2516,172452,172453,172462],{},[2519,172454,172455],{},[2522,172456,172457,172460],{},[2525,172458,172459],{},"异常",[2525,172461,28004],{},[2563,172463,172464,172474,172484,172493,172503,172513,172523,172533],{},[2522,172465,172466,172471],{},[2568,172467,172468],{},[59,172469,172470],{},"NameError",[2568,172472,172473],{},"使用了未定义变量",[2522,172475,172476,172481],{},[2568,172477,172478],{},[59,172479,172480],{},"TypeError",[2568,172482,172483],{},"类型不匹配",[2522,172485,172486,172490],{},[2568,172487,172488],{},[59,172489,156586],{},[2568,172491,172492],{},"值不合法",[2522,172494,172495,172500],{},[2568,172496,172497],{},[59,172498,172499],{},"IndexError",[2568,172501,172502],{},"列表索引越界",[2522,172504,172505,172510],{},[2568,172506,172507],{},[59,172508,172509],{},"KeyError",[2568,172511,172512],{},"字典 key 不存在",[2522,172514,172515,172520],{},[2568,172516,172517],{},[59,172518,172519],{},"FileNotFoundError",[2568,172521,172522],{},"文件不存在",[2522,172524,172525,172530],{},[2568,172526,172527],{},[59,172528,172529],{},"ZeroDivisionError",[2568,172531,172532],{},"除数为 0",[2522,172534,172535,172540],{},[2568,172536,172537],{},[59,172538,172539],{},"ImportError",[2568,172541,172542],{},"导入失败",[19,172544,17295],{},[51,172546,172548],{"className":230,"code":172547,"language":232,"meta":57,"style":57},"num = int(\"abc\")\n",[59,172549,172550],{"__ignoreMap":57},[79,172551,172552,172554,172556,172558,172560,172562],{"class":81,"line":82},[79,172553,157539],{"class":239},[79,172555,244],{"class":243},[79,172557,4597],{"class":96},[79,172559,685],{"class":239},[79,172561,157632],{"class":89},[79,172563,253],{"class":239},[19,172565,172566,172567,1604],{},"会触发 ",[59,172568,156586],{},[14,172570,172572],{"id":172571},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172574,172575],{},"如果不处理异常，程序会直接终止。",[19,172577,172578],{},"例如用户输入年龄：",[51,172580,172582],{"className":230,"code":172581,"language":232,"meta":57,"style":57},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[59,172583,172584,172602],{"__ignoreMap":57},[79,172585,172586,172588,172590,172592,172594,172596,172598,172600],{"class":81,"line":82},[79,172587,148298],{"class":239},[79,172589,244],{"class":243},[79,172591,4597],{"class":96},[79,172593,685],{"class":239},[79,172595,55931],{"class":96},[79,172597,685],{"class":239},[79,172599,154146],{"class":89},[79,172601,1191],{"class":239},[79,172603,172604,172606],{"class":81,"line":167},[79,172605,32541],{"class":96},[79,172607,157513],{"class":239},[19,172609,172610,172611,172614],{},"用户输入 ",[59,172612,172613],{},"abc","，程序就会报错退出。",[19,172616,172617],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172619,172621],{"id":172620},"_93-try-except","9.3 try except",[19,172623,172624],{},"基础语法：",[51,172626,172628],{"className":230,"code":172627,"language":232,"meta":57,"style":57},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[59,172629,172630,172637,172642,172649],{"__ignoreMap":57},[79,172631,172632,172635],{"class":81,"line":82},[79,172633,172634],{"class":243},"try",[79,172636,673],{"class":239},[79,172638,172639],{"class":81,"line":167},[79,172640,172641],{"class":239},"    可能出错的代码\n",[79,172643,172644,172647],{"class":81,"line":178},[79,172645,172646],{"class":243},"except",[79,172648,673],{"class":239},[79,172650,172651],{"class":81,"line":457},[79,172652,172653],{"class":239},"    出错后的处理代码\n",[19,172655,17295],{},[51,172657,172659],{"className":230,"code":172658,"language":232,"meta":57,"style":57},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[59,172660,172661,172667,172685,172691,172697],{"__ignoreMap":57},[79,172662,172663,172665],{"class":81,"line":82},[79,172664,172634],{"class":243},[79,172666,673],{"class":239},[79,172668,172669,172671,172673,172675,172677,172679,172681,172683],{"class":81,"line":167},[79,172670,154138],{"class":239},[79,172672,244],{"class":243},[79,172674,4597],{"class":96},[79,172676,685],{"class":239},[79,172678,55931],{"class":96},[79,172680,685],{"class":239},[79,172682,154146],{"class":89},[79,172684,1191],{"class":239},[79,172686,172687,172689],{"class":81,"line":178},[79,172688,1254],{"class":96},[79,172690,157513],{"class":239},[79,172692,172693,172695],{"class":81,"line":457},[79,172694,172646],{"class":243},[79,172696,673],{"class":239},[79,172698,172699,172701,172703,172706],{"class":81,"line":462},[79,172700,1254],{"class":96},[79,172702,685],{"class":239},[79,172704,172705],{"class":89},"\"年龄必须是数字\"",[79,172707,253],{"class":239},[19,172709,172710,172711,172713],{},"不建议裸写 ",[59,172712,172646],{},"，最好指定异常类型。",[51,172715,172717],{"className":230,"code":172716,"language":232,"meta":57,"style":57},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[59,172718,172719,172725,172743,172749,172757],{"__ignoreMap":57},[79,172720,172721,172723],{"class":81,"line":82},[79,172722,172634],{"class":243},[79,172724,673],{"class":239},[79,172726,172727,172729,172731,172733,172735,172737,172739,172741],{"class":81,"line":167},[79,172728,154138],{"class":239},[79,172730,244],{"class":243},[79,172732,4597],{"class":96},[79,172734,685],{"class":239},[79,172736,55931],{"class":96},[79,172738,685],{"class":239},[79,172740,154146],{"class":89},[79,172742,1191],{"class":239},[79,172744,172745,172747],{"class":81,"line":178},[79,172746,1254],{"class":96},[79,172748,157513],{"class":239},[79,172750,172751,172753,172755],{"class":81,"line":457},[79,172752,172646],{"class":243},[79,172754,153978],{"class":96},[79,172756,673],{"class":239},[79,172758,172759,172761,172763,172765],{"class":81,"line":462},[79,172760,1254],{"class":96},[79,172762,685],{"class":239},[79,172764,172705],{"class":89},[79,172766,253],{"class":239},[14,172768,172770],{"id":172769},"_94-捕获多个异常","9.4 捕获多个异常",[51,172772,172774],{"className":230,"code":172773,"language":232,"meta":57,"style":57},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[59,172775,172776,172782,172803,172823,172830,172838,172849,172858],{"__ignoreMap":57},[79,172777,172778,172780],{"class":81,"line":82},[79,172779,172634],{"class":243},[79,172781,673],{"class":239},[79,172783,172784,172787,172789,172791,172793,172795,172797,172799,172801],{"class":81,"line":167},[79,172785,172786],{"class":239},"    nums ",[79,172788,244],{"class":243},[79,172790,54339],{"class":239},[79,172792,1072],{"class":96},[79,172794,1060],{"class":239},[79,172796,1049],{"class":96},[79,172798,1060],{"class":239},[79,172800,1188],{"class":96},[79,172802,35361],{"class":239},[79,172804,172805,172808,172810,172812,172814,172816,172818,172821],{"class":81,"line":178},[79,172806,172807],{"class":239},"    index ",[79,172809,244],{"class":243},[79,172811,4597],{"class":96},[79,172813,685],{"class":239},[79,172815,55931],{"class":96},[79,172817,685],{"class":239},[79,172819,172820],{"class":89},"\"请输入索引:\"",[79,172822,1191],{"class":239},[79,172824,172825,172827],{"class":81,"line":457},[79,172826,1254],{"class":96},[79,172828,172829],{"class":239},"(nums[index])\n",[79,172831,172832,172834,172836],{"class":81,"line":462},[79,172833,172646],{"class":243},[79,172835,153978],{"class":96},[79,172837,673],{"class":239},[79,172839,172840,172842,172844,172847],{"class":81,"line":474},[79,172841,1254],{"class":96},[79,172843,685],{"class":239},[79,172845,172846],{"class":89},"\"索引必须是整数\"",[79,172848,253],{"class":239},[79,172850,172851,172853,172856],{"class":81,"line":480},[79,172852,172646],{"class":243},[79,172854,172855],{"class":96}," IndexError",[79,172857,673],{"class":239},[79,172859,172860,172862,172864,172867],{"class":81,"line":486},[79,172861,1254],{"class":96},[79,172863,685],{"class":239},[79,172865,172866],{"class":89},"\"索引越界\"",[79,172868,253],{"class":239},[19,172870,172871],{},"多个异常使用相同处理逻辑：",[51,172873,172875],{"className":230,"code":172874,"language":232,"meta":57,"style":57},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[59,172876,172877,172883,172901,172914,172928],{"__ignoreMap":57},[79,172878,172879,172881],{"class":81,"line":82},[79,172880,172634],{"class":243},[79,172882,673],{"class":239},[79,172884,172885,172887,172889,172891,172893,172895,172897,172899],{"class":81,"line":167},[79,172886,47707],{"class":239},[79,172888,244],{"class":243},[79,172890,4597],{"class":96},[79,172892,685],{"class":239},[79,172894,55931],{"class":96},[79,172896,685],{"class":239},[79,172898,157548],{"class":89},[79,172900,1191],{"class":239},[79,172902,172903,172905,172907,172909,172911],{"class":81,"line":178},[79,172904,1254],{"class":96},[79,172906,685],{"class":239},[79,172908,2820],{"class":96},[79,172910,157798],{"class":243},[79,172912,172913],{"class":239}," num)\n",[79,172915,172916,172918,172920,172922,172924,172926],{"class":81,"line":457},[79,172917,172646],{"class":243},[79,172919,3887],{"class":239},[79,172921,156586],{"class":96},[79,172923,1060],{"class":239},[79,172925,172529],{"class":96},[79,172927,966],{"class":239},[79,172929,172930,172932,172934,172937],{"class":81,"line":462},[79,172931,1254],{"class":96},[79,172933,685],{"class":239},[79,172935,172936],{"class":89},"\"输入不合法\"",[79,172938,253],{"class":239},[14,172940,172942],{"id":172941},"_95-获取异常信息","9.5 获取异常信息",[51,172944,172946],{"className":230,"code":172945,"language":232,"meta":57,"style":57},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[59,172947,172948,172954,172968,172979],{"__ignoreMap":57},[79,172949,172950,172952],{"class":81,"line":82},[79,172951,172634],{"class":243},[79,172953,673],{"class":239},[79,172955,172956,172958,172960,172962,172964,172966],{"class":81,"line":167},[79,172957,47707],{"class":239},[79,172959,244],{"class":243},[79,172961,4597],{"class":96},[79,172963,685],{"class":239},[79,172965,157632],{"class":89},[79,172967,253],{"class":239},[79,172969,172970,172972,172974,172976],{"class":81,"line":178},[79,172971,172646],{"class":243},[79,172973,153978],{"class":96},[79,172975,66714],{"class":243},[79,172977,172978],{"class":239}," e:\n",[79,172980,172981,172983,172985,172987,172990,172992,172994,172996,172998],{"class":81,"line":457},[79,172982,1254],{"class":96},[79,172984,685],{"class":239},[79,172986,688],{"class":243},[79,172988,172989],{"class":89},"\"出错了:",[79,172991,694],{"class":96},[79,172993,2455],{"class":239},[79,172995,700],{"class":96},[79,172997,703],{"class":89},[79,172999,253],{"class":239},[19,173001,148209],{},[51,173003,173006],{"className":173004,"code":173005,"language":56,"meta":57},[54],"出错了:invalid literal for int() with base 10: 'abc'\n",[59,173007,173005],{"__ignoreMap":57},[14,173009,173011],{"id":173010},"_96-else和finally","9.6 else和finally",[19,173013,173014,173016],{},[59,173015,3926],{},"：没有异常时执行。",[19,173018,173019,173022],{},[59,173020,173021],{},"finally","：无论是否异常都会执行。",[51,173024,173026],{"className":230,"code":173025,"language":232,"meta":57,"style":57},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[59,173027,173028,173034,173052,173060,173070,173076,173097,173103],{"__ignoreMap":57},[79,173029,173030,173032],{"class":81,"line":82},[79,173031,172634],{"class":243},[79,173033,673],{"class":239},[79,173035,173036,173038,173040,173042,173044,173046,173048,173050],{"class":81,"line":167},[79,173037,47707],{"class":239},[79,173039,244],{"class":243},[79,173041,4597],{"class":96},[79,173043,685],{"class":239},[79,173045,55931],{"class":96},[79,173047,685],{"class":239},[79,173049,157548],{"class":89},[79,173051,1191],{"class":239},[79,173053,173054,173056,173058],{"class":81,"line":178},[79,173055,172646],{"class":243},[79,173057,153978],{"class":96},[79,173059,673],{"class":239},[79,173061,173062,173064,173066,173068],{"class":81,"line":457},[79,173063,1254],{"class":96},[79,173065,685],{"class":239},[79,173067,154966],{"class":89},[79,173069,253],{"class":239},[79,173071,173072,173074],{"class":81,"line":462},[79,173073,3926],{"class":243},[79,173075,673],{"class":239},[79,173077,173078,173080,173082,173084,173087,173089,173091,173093,173095],{"class":81,"line":474},[79,173079,1254],{"class":96},[79,173081,685],{"class":239},[79,173083,688],{"class":243},[79,173085,173086],{"class":89},"\"输入正确:",[79,173088,694],{"class":96},[79,173090,3894],{"class":239},[79,173092,700],{"class":96},[79,173094,703],{"class":89},[79,173096,253],{"class":239},[79,173098,173099,173101],{"class":81,"line":480},[79,173100,173021],{"class":243},[79,173102,673],{"class":239},[79,173104,173105,173107,173109,173112],{"class":81,"line":486},[79,173106,1254],{"class":96},[79,173108,685],{"class":239},[79,173110,173111],{"class":89},"\"程序结束\"",[79,173113,253],{"class":239},[19,173115,173116,173118],{},[59,173117,173021],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,173120,173122],{"id":173121},"_97-抛出异常","9.7 抛出异常",[19,173124,173125],{},"程序可以主动抛出异常。",[51,173127,173129],{"className":230,"code":173128,"language":232,"meta":57,"style":57},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[59,173130,173131,173140,173152,173165,173185,173189,173193],{"__ignoreMap":57},[79,173132,173133,173135,173138],{"class":81,"line":82},[79,173134,633],{"class":243},[79,173136,173137],{"class":85}," set_age",[79,173139,163167],{"class":239},[79,173141,173142,173144,173146,173148,173150],{"class":81,"line":167},[79,173143,662],{"class":243},[79,173145,17867],{"class":239},[79,173147,392],{"class":243},[79,173149,670],{"class":96},[79,173151,673],{"class":239},[79,173153,173154,173156,173158,173160,173163],{"class":81,"line":178},[79,173155,679],{"class":243},[79,173157,153978],{"class":96},[79,173159,685],{"class":239},[79,173161,173162],{"class":89},"\"年龄不能为负数\"",[79,173164,253],{"class":239},[79,173166,173167,173169,173171,173173,173175,173177,173179,173181,173183],{"class":81,"line":457},[79,173168,1254],{"class":96},[79,173170,685],{"class":239},[79,173172,688],{"class":243},[79,173174,163735],{"class":89},[79,173176,694],{"class":96},[79,173178,72329],{"class":239},[79,173180,700],{"class":96},[79,173182,703],{"class":89},[79,173184,253],{"class":239},[79,173186,173187],{"class":81,"line":462},[79,173188,454],{"emptyLinePlaceholder":453},[79,173190,173191],{"class":81,"line":474},[79,173192,454],{"emptyLinePlaceholder":453},[79,173194,173195,173198,173200,173202],{"class":81,"line":480},[79,173196,173197],{"class":239},"set_age(",[79,173199,320],{"class":243},[79,173201,1072],{"class":96},[79,173203,253],{"class":239},[19,173205,173206],{},"调用者可以捕获：",[51,173208,173210],{"className":230,"code":173209,"language":232,"meta":57,"style":57},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[59,173211,173212,173218,173229,173239],{"__ignoreMap":57},[79,173213,173214,173216],{"class":81,"line":82},[79,173215,172634],{"class":243},[79,173217,673],{"class":239},[79,173219,173220,173223,173225,173227],{"class":81,"line":167},[79,173221,173222],{"class":239},"    set_age(",[79,173224,320],{"class":243},[79,173226,1072],{"class":96},[79,173228,253],{"class":239},[79,173230,173231,173233,173235,173237],{"class":81,"line":178},[79,173232,172646],{"class":243},[79,173234,153978],{"class":96},[79,173236,66714],{"class":243},[79,173238,172978],{"class":239},[79,173240,173241,173243],{"class":81,"line":457},[79,173242,1254],{"class":96},[79,173244,69108],{"class":239},[14,173246,173248],{"id":173247},"_98-自定义异常","9.8 自定义异常",[51,173250,173252],{"className":230,"code":173251,"language":232,"meta":57,"style":57},"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",[59,173253,173254,173268,173272,173276,173280,173288,173298,173309,173319,173323,173327,173333,173350,173361],{"__ignoreMap":57},[79,173255,173256,173258,173261,173263,173266],{"class":81,"line":82},[79,173257,16855],{"class":243},[79,173259,173260],{"class":85}," BalanceNotEnoughError",[79,173262,685],{"class":239},[79,173264,173265],{"class":96},"Exception",[79,173267,966],{"class":239},[79,173269,173270],{"class":81,"line":167},[79,173271,151289],{"class":243},[79,173273,173274],{"class":81,"line":178},[79,173275,454],{"emptyLinePlaceholder":453},[79,173277,173278],{"class":81,"line":457},[79,173279,454],{"emptyLinePlaceholder":453},[79,173281,173282,173284,173286],{"class":81,"line":462},[79,173283,633],{"class":243},[79,173285,151938],{"class":85},[79,173287,164564],{"class":239},[79,173289,173290,173292,173294,173296],{"class":81,"line":474},[79,173291,662],{"class":243},[79,173293,151894],{"class":239},[79,173295,3330],{"class":243},[79,173297,164341],{"class":239},[79,173299,173300,173302,173305,173307],{"class":81,"line":480},[79,173301,679],{"class":243},[79,173303,173304],{"class":239}," BalanceNotEnoughError(",[79,173306,151989],{"class":89},[79,173308,253],{"class":239},[79,173310,173311,173313,173315,173317],{"class":81,"line":486},[79,173312,711],{"class":243},[79,173314,164571],{"class":239},[79,173316,320],{"class":243},[79,173318,151927],{"class":239},[79,173320,173321],{"class":81,"line":491},[79,173322,454],{"emptyLinePlaceholder":453},[79,173324,173325],{"class":81,"line":497},[79,173326,454],{"emptyLinePlaceholder":453},[79,173328,173329,173331],{"class":81,"line":503},[79,173330,172634],{"class":243},[79,173332,673],{"class":239},[79,173334,173335,173337,173339,173342,173344,173346,173348],{"class":81,"line":509},[79,173336,164242],{"class":239},[79,173338,244],{"class":243},[79,173340,173341],{"class":239}," withdraw(",[79,173343,2686],{"class":96},[79,173345,1060],{"class":239},[79,173347,3947],{"class":96},[79,173349,253],{"class":239},[79,173351,173352,173354,173357,173359],{"class":81,"line":514},[79,173353,172646],{"class":243},[79,173355,173356],{"class":239}," BalanceNotEnoughError ",[79,173358,445],{"class":243},[79,173360,172978],{"class":239},[79,173362,173363,173365],{"class":81,"line":520},[79,173364,1254],{"class":96},[79,173366,69108],{"class":239},[19,173368,173369],{},"入门阶段大多数情况使用内置异常即可。",[14,173371,173373],{"id":173372},"_99-traceback","9.9 traceback",[19,173375,173376],{},"调试时可以输出完整异常堆栈。",[51,173378,173380],{"className":230,"code":173379,"language":232,"meta":57,"style":57},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[59,173381,173382,173389,173393,173399,173409,173417],{"__ignoreMap":57},[79,173383,173384,173386],{"class":81,"line":82},[79,173385,432],{"class":243},[79,173387,173388],{"class":239}," traceback\n",[79,173390,173391],{"class":81,"line":167},[79,173392,454],{"emptyLinePlaceholder":453},[79,173394,173395,173397],{"class":81,"line":178},[79,173396,172634],{"class":243},[79,173398,673],{"class":239},[79,173400,173401,173403,173405,173407],{"class":81,"line":457},[79,173402,4200],{"class":96},[79,173404,685],{"class":239},[79,173406,157632],{"class":89},[79,173408,253],{"class":239},[79,173410,173411,173413,173415],{"class":81,"line":462},[79,173412,172646],{"class":243},[79,173414,153978],{"class":96},[79,173416,673],{"class":239},[79,173418,173419],{"class":81,"line":474},[79,173420,173421],{"class":239},"    traceback.print_exc()\n",[19,173423,173424],{},"日志系统中常把异常堆栈记录到文件。",[14,173426,173428],{"id":173427},"_910-什么是模块","9.10 什么是模块",[19,173430,173431,173432,127735],{},"模块就是一个 ",[59,173433,148104],{},[19,173435,173436,173437,26754],{},"例如创建 ",[59,173438,173439],{},"my_math.py",[51,173441,173443],{"className":230,"code":173442,"language":232,"meta":57,"style":57},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[59,173444,173445,173453,173463,173467,173471,173480],{"__ignoreMap":57},[79,173446,173447,173449,173451],{"class":81,"line":82},[79,173448,633],{"class":243},[79,173450,7405],{"class":85},[79,173452,152845],{"class":239},[79,173454,173455,173457,173459,173461],{"class":81,"line":167},[79,173456,711],{"class":243},[79,173458,13033],{"class":239},[79,173460,2855],{"class":243},[79,173462,152856],{"class":239},[79,173464,173465],{"class":81,"line":178},[79,173466,454],{"emptyLinePlaceholder":453},[79,173468,173469],{"class":81,"line":457},[79,173470,454],{"emptyLinePlaceholder":453},[79,173472,173473,173475,173478],{"class":81,"line":462},[79,173474,633],{"class":243},[79,173476,173477],{"class":85}," sub",[79,173479,152845],{"class":239},[79,173481,173482,173484,173486,173488],{"class":81,"line":474},[79,173483,711],{"class":243},[79,173485,13033],{"class":239},[79,173487,320],{"class":243},[79,173489,152856],{"class":239},[19,173491,173492],{},"在另一个文件中导入：",[51,173494,173496],{"className":230,"code":173495,"language":232,"meta":57,"style":57},"import my_math\n\nprint(my_math.add(1, 2))\n",[59,173497,173498,173505,173509],{"__ignoreMap":57},[79,173499,173500,173502],{"class":81,"line":82},[79,173501,432],{"class":243},[79,173503,173504],{"class":239}," my_math\n",[79,173506,173507],{"class":81,"line":167},[79,173508,454],{"emptyLinePlaceholder":453},[79,173510,173511,173513,173516,173518,173520,173522],{"class":81,"line":178},[79,173512,32541],{"class":96},[79,173514,173515],{"class":239},"(my_math.add(",[79,173517,1072],{"class":96},[79,173519,1060],{"class":239},[79,173521,1049],{"class":96},[79,173523,1191],{"class":239},[14,173525,173527],{"id":173526},"_911-import导入","9.11 import导入",[265,173529,173531],{"id":173530},"_9111-导入模块","9.11.1 导入模块",[51,173533,173535],{"className":230,"code":173534,"language":232,"meta":57,"style":57},"import random\n\nprint(random.randint(1, 10))\n",[59,173536,173537,173543,173547],{"__ignoreMap":57},[79,173538,173539,173541],{"class":81,"line":82},[79,173540,432],{"class":243},[79,173542,47442],{"class":239},[79,173544,173545],{"class":81,"line":167},[79,173546,454],{"emptyLinePlaceholder":453},[79,173548,173549,173551,173554,173556,173558,173560],{"class":81,"line":178},[79,173550,32541],{"class":96},[79,173552,173553],{"class":239},"(random.randint(",[79,173555,1072],{"class":96},[79,173557,1060],{"class":239},[79,173559,2820],{"class":96},[79,173561,1191],{"class":239},[265,173563,173565],{"id":173564},"_9112-导入指定内容","9.11.2 导入指定内容",[51,173567,173569],{"className":230,"code":173568,"language":232,"meta":57,"style":57},"from random import randint\n\nprint(randint(1, 10))\n",[59,173570,173571,173582,173586],{"__ignoreMap":57},[79,173572,173573,173575,173577,173579],{"class":81,"line":82},[79,173574,32862],{"class":243},[79,173576,59906],{"class":239},[79,173578,432],{"class":243},[79,173580,173581],{"class":239}," randint\n",[79,173583,173584],{"class":81,"line":167},[79,173585,454],{"emptyLinePlaceholder":453},[79,173587,173588,173590,173593,173595,173597,173599],{"class":81,"line":178},[79,173589,32541],{"class":96},[79,173591,173592],{"class":239},"(randint(",[79,173594,1072],{"class":96},[79,173596,1060],{"class":239},[79,173598,2820],{"class":96},[79,173600,1191],{"class":239},[265,173602,173604],{"id":173603},"_9113-起别名","9.11.3 起别名",[51,173606,173608],{"className":230,"code":173607,"language":232,"meta":57,"style":57},"import random as rd\n\nprint(rd.randint(1, 10))\n",[59,173609,173610,173621,173625],{"__ignoreMap":57},[79,173611,173612,173614,173616,173618],{"class":81,"line":82},[79,173613,432],{"class":243},[79,173615,59906],{"class":239},[79,173617,445],{"class":243},[79,173619,173620],{"class":239}," rd\n",[79,173622,173623],{"class":81,"line":167},[79,173624,454],{"emptyLinePlaceholder":453},[79,173626,173627,173629,173632,173634,173636,173638],{"class":81,"line":178},[79,173628,32541],{"class":96},[79,173630,173631],{"class":239},"(rd.randint(",[79,173633,1072],{"class":96},[79,173635,1060],{"class":239},[79,173637,2820],{"class":96},[79,173639,1191],{"class":239},[51,173641,173643],{"className":230,"code":173642,"language":232,"meta":57,"style":57},"from random import randint as rint\n\nprint(rint(1, 10))\n",[59,173644,173645,173661,173665],{"__ignoreMap":57},[79,173646,173647,173649,173651,173653,173656,173658],{"class":81,"line":82},[79,173648,32862],{"class":243},[79,173650,59906],{"class":239},[79,173652,432],{"class":243},[79,173654,173655],{"class":239}," randint ",[79,173657,445],{"class":243},[79,173659,173660],{"class":239}," rint\n",[79,173662,173663],{"class":81,"line":167},[79,173664,454],{"emptyLinePlaceholder":453},[79,173666,173667,173669,173672,173674,173676,173678],{"class":81,"line":178},[79,173668,32541],{"class":96},[79,173670,173671],{"class":239},"(rint(",[79,173673,1072],{"class":96},[79,173675,1060],{"class":239},[79,173677,2820],{"class":96},[79,173679,1191],{"class":239},[265,173681,173683],{"id":173682},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[51,173685,173687],{"className":230,"code":173686,"language":232,"meta":57,"style":57},"from random import *\n",[59,173688,173689],{"__ignoreMap":57},[79,173690,173691,173693,173695,173697],{"class":81,"line":82},[79,173692,32862],{"class":243},[79,173694,59906],{"class":239},[79,173696,432],{"class":243},[79,173698,173699],{"class":243}," *\n",[19,173701,173702],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173704,173706],{"id":173705},"_912-常用内置模块","9.12 常用内置模块",[265,173708,173710],{"id":173709},"_9121-random","9.12.1 random",[51,173712,173714],{"className":230,"code":173713,"language":232,"meta":57,"style":57},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[59,173715,173716,173722,173726,173740,173759],{"__ignoreMap":57},[79,173717,173718,173720],{"class":81,"line":82},[79,173719,432],{"class":243},[79,173721,47442],{"class":239},[79,173723,173724],{"class":81,"line":167},[79,173725,454],{"emptyLinePlaceholder":453},[79,173727,173728,173730,173732,173734,173736,173738],{"class":81,"line":178},[79,173729,32541],{"class":96},[79,173731,173553],{"class":239},[79,173733,1072],{"class":96},[79,173735,1060],{"class":239},[79,173737,2820],{"class":96},[79,173739,1191],{"class":239},[79,173741,173742,173744,173747,173749,173751,173753,173755,173757],{"class":81,"line":457},[79,173743,32541],{"class":96},[79,173745,173746],{"class":239},"(random.choice([",[79,173748,151640],{"class":89},[79,173750,1060],{"class":239},[79,173752,152688],{"class":89},[79,173754,1060],{"class":239},[79,173756,161483],{"class":89},[79,173758,35258],{"class":239},[79,173760,173761,173763,173766,173768,173770,173772,173774,173776,173778,173780,173782,173784,173786,173788],{"class":81,"line":462},[79,173762,32541],{"class":96},[79,173764,173765],{"class":239},"(random.sample([",[79,173767,1072],{"class":96},[79,173769,1060],{"class":239},[79,173771,1049],{"class":96},[79,173773,1060],{"class":239},[79,173775,1188],{"class":96},[79,173777,1060],{"class":239},[79,173779,2668],{"class":96},[79,173781,1060],{"class":239},[79,173783,2694],{"class":96},[79,173785,1052],{"class":239},[79,173787,1049],{"class":96},[79,173789,1191],{"class":239},[265,173791,173793],{"id":173792},"_9122-time","9.12.2 time",[51,173795,173797],{"className":230,"code":173796,"language":232,"meta":57,"style":57},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[59,173798,173799,173805,173809,173816,173824],{"__ignoreMap":57},[79,173800,173801,173803],{"class":81,"line":82},[79,173802,432],{"class":243},[79,173804,33947],{"class":239},[79,173806,173807],{"class":81,"line":167},[79,173808,454],{"emptyLinePlaceholder":453},[79,173810,173811,173813],{"class":81,"line":178},[79,173812,32541],{"class":96},[79,173814,173815],{"class":239},"(time.time())\n",[79,173817,173818,173820,173822],{"class":81,"line":457},[79,173819,97176],{"class":239},[79,173821,1072],{"class":96},[79,173823,253],{"class":239},[79,173825,173826,173828,173830,173833],{"class":81,"line":462},[79,173827,32541],{"class":96},[79,173829,685],{"class":239},[79,173831,173832],{"class":89},"\"1秒后执行\"",[79,173834,253],{"class":239},[265,173836,173838],{"id":173837},"_9123-datetime","9.12.3 datetime",[51,173840,173842],{"className":230,"code":173841,"language":232,"meta":57,"style":57},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[59,173843,173844,173856,173860,173870,173877],{"__ignoreMap":57},[79,173845,173846,173848,173851,173853],{"class":81,"line":82},[79,173847,32862],{"class":243},[79,173849,173850],{"class":239}," datetime ",[79,173852,432],{"class":243},[79,173854,173855],{"class":239}," datetime\n",[79,173857,173858],{"class":81,"line":167},[79,173859,454],{"emptyLinePlaceholder":453},[79,173861,173862,173865,173867],{"class":81,"line":178},[79,173863,173864],{"class":239},"now ",[79,173866,244],{"class":243},[79,173868,173869],{"class":239}," datetime.now()\n",[79,173871,173872,173874],{"class":81,"line":457},[79,173873,32541],{"class":96},[79,173875,173876],{"class":239},"(now)\n",[79,173878,173879,173881,173884,173887,173889,173892],{"class":81,"line":462},[79,173880,32541],{"class":96},[79,173882,173883],{"class":239},"(now.strftime(",[79,173885,173886],{"class":89},"\"%Y-%m-",[79,173888,158443],{"class":96},[79,173890,173891],{"class":89}," %H:%M:%S\"",[79,173893,1191],{"class":239},[265,173895,173897],{"id":173896},"_9124-os","9.12.4 os",[51,173899,173901],{"className":230,"code":173900,"language":232,"meta":57,"style":57},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[59,173902,173903,173909,173913,173920],{"__ignoreMap":57},[79,173904,173905,173907],{"class":81,"line":82},[79,173906,432],{"class":243},[79,173908,47419],{"class":239},[79,173910,173911],{"class":81,"line":167},[79,173912,454],{"emptyLinePlaceholder":453},[79,173914,173915,173917],{"class":81,"line":178},[79,173916,32541],{"class":96},[79,173918,173919],{"class":239},"(os.getcwd())\n",[79,173921,173922,173924,173927,173930],{"class":81,"line":457},[79,173923,32541],{"class":96},[79,173925,173926],{"class":239},"(os.listdir(",[79,173928,173929],{"class":89},"\".\"",[79,173931,1191],{"class":239},[265,173933,173935],{"id":173934},"_9125-sys","9.12.5 sys",[51,173937,173939],{"className":230,"code":173938,"language":232,"meta":57,"style":57},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[59,173940,173941,173948,173952,173959],{"__ignoreMap":57},[79,173942,173943,173945],{"class":81,"line":82},[79,173944,432],{"class":243},[79,173946,173947],{"class":239}," sys\n",[79,173949,173950],{"class":81,"line":167},[79,173951,454],{"emptyLinePlaceholder":453},[79,173953,173954,173956],{"class":81,"line":178},[79,173955,32541],{"class":96},[79,173957,173958],{"class":239},"(sys.version)\n",[79,173960,173961,173963],{"class":81,"line":457},[79,173962,32541],{"class":96},[79,173964,173965],{"class":239},"(sys.path)\n",[14,173967,173969,173970,173972,173973,703],{"id":173968},"_913-if-name-main","9.13 if ",[2528,173971,697],{}," == \"",[2528,173974,104114],{},[19,173976,173977,173978,173981],{},"模块被直接运行和被导入时，",[59,173979,173980],{},"__name__"," 的值不同。",[19,173983,173984,173985,26754],{},"创建 ",[59,173986,173987],{},"my_module.py",[51,173989,173991],{"className":230,"code":173990,"language":232,"meta":57,"style":57},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[59,173992,173993,174001,174011,174015,174019,174031],{"__ignoreMap":57},[79,173994,173995,173997,173999],{"class":81,"line":82},[79,173996,633],{"class":243},[79,173998,7405],{"class":85},[79,174000,152845],{"class":239},[79,174002,174003,174005,174007,174009],{"class":81,"line":167},[79,174004,711],{"class":243},[79,174006,13033],{"class":239},[79,174008,2855],{"class":243},[79,174010,152856],{"class":239},[79,174012,174013],{"class":81,"line":178},[79,174014,454],{"emptyLinePlaceholder":453},[79,174016,174017],{"class":81,"line":457},[79,174018,454],{"emptyLinePlaceholder":453},[79,174020,174021,174023,174025,174027,174029],{"class":81,"line":462},[79,174022,1329],{"class":243},[79,174024,1332],{"class":96},[79,174026,1143],{"class":243},[79,174028,1337],{"class":89},[79,174030,673],{"class":239},[79,174032,174033,174035,174037,174039,174041,174043],{"class":81,"line":474},[79,174034,1254],{"class":96},[79,174036,168352],{"class":239},[79,174038,1072],{"class":96},[79,174040,1060],{"class":239},[79,174042,1049],{"class":96},[79,174044,1191],{"class":239},[19,174046,174047],{},"作用：",[26,174049,174050,174053],{},[29,174051,174052],{},"直接运行该文件时，执行测试代码。",[29,174054,174055],{},"被其他文件导入时，不执行测试代码。",[19,174057,174058],{},"这是写模块时很常用的习惯。",[14,174060,174062],{"id":174061},"_914-包","9.14 包",[19,174064,174065,174066,174069],{},"包是包含 ",[59,174067,174068],{},"__init__.py"," 的目录，用于组织多个模块。",[19,174071,174072],{},"目录结构：",[51,174074,174077],{"className":174075,"code":174076,"language":56,"meta":57},[54],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[59,174078,174076],{"__ignoreMap":57},[19,174080,174081],{},"导入：",[51,174083,174085],{"className":230,"code":174084,"language":232,"meta":57,"style":57},"from utils.file_utils import read_file\n",[59,174086,174087],{"__ignoreMap":57},[79,174088,174089,174091,174094,174096],{"class":81,"line":82},[79,174090,32862],{"class":243},[79,174092,174093],{"class":239}," utils.file_utils ",[79,174095,432],{"class":243},[79,174097,174098],{"class":239}," read_file\n",[19,174100,174101,174103],{},[59,174102,174068],{}," 可以为空，也可以写包初始化逻辑。",[14,174105,174107],{"id":174106},"_915-第三方包","9.15 第三方包",[19,174109,174110,174111,174113],{},"第三方包通过 ",[59,174112,125],{}," 安装。",[51,174115,174117],{"className":73,"code":174116,"language":75,"meta":57,"style":57},"pip install requests\n",[59,174118,174119],{"__ignoreMap":57},[79,174120,174121,174123,174125],{"class":81,"line":82},[79,174122,125],{"class":85},[79,174124,93],{"class":89},[79,174126,147850],{"class":89},[19,174128,174129],{},"使用：",[51,174131,174133],{"className":230,"code":174132,"language":232,"meta":57,"style":57},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[59,174134,174135,174141,174145,174160],{"__ignoreMap":57},[79,174136,174137,174139],{"class":81,"line":82},[79,174138,432],{"class":243},[79,174140,147850],{"class":239},[79,174142,174143],{"class":81,"line":167},[79,174144,454],{"emptyLinePlaceholder":453},[79,174146,174147,174150,174152,174155,174158],{"class":81,"line":178},[79,174148,174149],{"class":239},"response ",[79,174151,244],{"class":243},[79,174153,174154],{"class":239}," requests.get(",[79,174156,174157],{"class":89},"\"https:\u002F\u002Fwww.example.com\"",[79,174159,253],{"class":239},[79,174161,174162,174164],{"class":81,"line":457},[79,174163,32541],{"class":96},[79,174165,174166],{"class":239},"(response.status_code)\n",[19,174168,174169],{},"查看已安装包：",[51,174171,174173],{"className":73,"code":174172,"language":75,"meta":57,"style":57},"pip list\n",[59,174174,174175],{"__ignoreMap":57},[79,174176,174177,174179],{"class":81,"line":82},[79,174178,125],{"class":85},[79,174180,120707],{"class":89},[19,174182,174183],{},"导出项目依赖：",[51,174185,174186],{"className":73,"code":148045,"language":75,"meta":57,"style":57},[59,174187,174188],{"__ignoreMap":57},[79,174189,174190,174192,174194,174196],{"class":81,"line":82},[79,174191,125],{"class":85},[79,174193,148054],{"class":89},[79,174195,28356],{"class":243},[79,174197,148059],{"class":89},[19,174199,174200],{},"安装项目依赖：",[51,174202,174203],{"className":73,"code":148065,"language":75,"meta":57,"style":57},[59,174204,174205],{"__ignoreMap":57},[79,174206,174207,174209,174211,174213],{"class":81,"line":82},[79,174208,125],{"class":85},[79,174210,93],{"class":89},[79,174212,121391],{"class":96},[79,174214,148059],{"class":89},[14,174216,174218],{"id":174217},"_916-模块搜索路径","9.16 模块搜索路径",[19,174220,174221,174222,174225],{},"Python 导入模块时会在 ",[59,174223,174224],{},"sys.path"," 中查找。",[51,174227,174229],{"className":230,"code":174228,"language":232,"meta":57,"style":57},"import sys\n\nfor path in sys.path:\n    print(path)\n",[59,174230,174231,174237,174241,174253],{"__ignoreMap":57},[79,174232,174233,174235],{"class":81,"line":82},[79,174234,432],{"class":243},[79,174236,173947],{"class":239},[79,174238,174239],{"class":81,"line":167},[79,174240,454],{"emptyLinePlaceholder":453},[79,174242,174243,174245,174248,174250],{"class":81,"line":178},[79,174244,1874],{"class":243},[79,174246,174247],{"class":239}," path ",[79,174249,955],{"class":243},[79,174251,174252],{"class":239}," sys.path:\n",[79,174254,174255,174257],{"class":81,"line":457},[79,174256,1254],{"class":96},[79,174258,170981],{"class":239},[19,174260,174261],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,174263,159375],{},[51,174265,174268],{"className":174266,"code":174267,"language":56,"meta":57},[54],"random.py\njson.py\ntime.py\n",[59,174269,174267],{"__ignoreMap":57},[19,174271,174272],{},"这些文件名可能导致导入异常。",[14,174274,174276],{"id":174275},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,174278,174072],{},[51,174280,174283],{"className":174281,"code":174282,"language":56,"meta":57},[54],"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",[59,174284,174282],{"__ignoreMap":57},[19,174286,174287,26754],{},[59,174288,174289],{},"utils\u002Ffile_utils.py",[51,174291,174293],{"className":230,"code":174292,"language":232,"meta":57,"style":57},"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",[59,174294,174295,174301,174311,174315,174319,174329,174339,174347,174353,174357,174384,174394,174398,174402,174412,174438],{"__ignoreMap":57},[79,174296,174297,174299],{"class":81,"line":82},[79,174298,432],{"class":243},[79,174300,148843],{"class":239},[79,174302,174303,174305,174307,174309],{"class":81,"line":167},[79,174304,32862],{"class":243},[79,174306,110318],{"class":239},[79,174308,432],{"class":243},[79,174310,110323],{"class":239},[79,174312,174313],{"class":81,"line":178},[79,174314,454],{"emptyLinePlaceholder":453},[79,174316,174317],{"class":81,"line":457},[79,174318,454],{"emptyLinePlaceholder":453},[79,174320,174321,174323,174326],{"class":81,"line":462},[79,174322,633],{"class":243},[79,174324,174325],{"class":85}," read_json",[79,174327,174328],{"class":239},"(path):\n",[79,174330,174331,174334,174336],{"class":81,"line":474},[79,174332,174333],{"class":239},"    path ",[79,174335,244],{"class":243},[79,174337,174338],{"class":239}," Path(path)\n",[79,174340,174341,174343,174345],{"class":81,"line":480},[79,174342,662],{"class":243},[79,174344,41044],{"class":243},[79,174346,171062],{"class":239},[79,174348,174349,174351],{"class":81,"line":486},[79,174350,16913],{"class":243},[79,174352,53951],{"class":239},[79,174354,174355],{"class":81,"line":491},[79,174356,454],{"emptyLinePlaceholder":453},[79,174358,174359,174361,174363,174366,174368,174370,174372,174374,174376,174378,174380,174382],{"class":81,"line":497},[79,174360,36293],{"class":243},[79,174362,148543],{"class":96},[79,174364,174365],{"class":239},"(path, ",[79,174367,148553],{"class":89},[79,174369,1060],{"class":239},[79,174371,148558],{"class":7412},[79,174373,244],{"class":243},[79,174375,148563],{"class":89},[79,174377,15876],{"class":239},[79,174379,445],{"class":243},[79,174381,149905],{"class":7412},[79,174383,673],{"class":239},[79,174385,174386,174388,174390,174392],{"class":81,"line":503},[79,174387,16913],{"class":243},[79,174389,149916],{"class":239},[79,174391,47468],{"class":7412},[79,174393,253],{"class":239},[79,174395,174396],{"class":81,"line":509},[79,174397,454],{"emptyLinePlaceholder":453},[79,174399,174400],{"class":81,"line":514},[79,174401,454],{"emptyLinePlaceholder":453},[79,174403,174404,174406,174409],{"class":81,"line":520},[79,174405,633],{"class":243},[79,174407,174408],{"class":85}," write_json",[79,174410,174411],{"class":239},"(path, data):\n",[79,174413,174414,174416,174418,174420,174422,174424,174426,174428,174430,174432,174434,174436],{"class":81,"line":526},[79,174415,36293],{"class":243},[79,174417,148543],{"class":96},[79,174419,174365],{"class":239},[79,174421,153728],{"class":89},[79,174423,1060],{"class":239},[79,174425,148558],{"class":7412},[79,174427,244],{"class":243},[79,174429,148563],{"class":89},[79,174431,15876],{"class":239},[79,174433,445],{"class":243},[79,174435,149905],{"class":7412},[79,174437,673],{"class":239},[79,174439,174440,174443,174445,174447,174449,174451,174453,174455,174457,174459,174461],{"class":81,"line":532},[79,174441,174442],{"class":239},"        json.dump(data, ",[79,174444,47468],{"class":7412},[79,174446,1060],{"class":239},[79,174448,148889],{"class":7412},[79,174450,244],{"class":243},[79,174452,36102],{"class":96},[79,174454,1060],{"class":239},[79,174456,153764],{"class":7412},[79,174458,244],{"class":243},[79,174460,1049],{"class":96},[79,174462,253],{"class":239},[19,174464,174465,26754],{},[59,174466,156359],{},[51,174468,174470],{"className":230,"code":174469,"language":232,"meta":57,"style":57},"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",[59,174471,174472,174483,174487,174500,174520],{"__ignoreMap":57},[79,174473,174474,174476,174478,174480],{"class":81,"line":82},[79,174475,32862],{"class":243},[79,174477,174093],{"class":239},[79,174479,432],{"class":243},[79,174481,174482],{"class":239}," read_json, write_json\n",[79,174484,174485],{"class":81,"line":167},[79,174486,454],{"emptyLinePlaceholder":453},[79,174488,174489,174491,174493,174496,174498],{"class":81,"line":178},[79,174490,161468],{"class":239},[79,174492,244],{"class":243},[79,174494,174495],{"class":239}," read_json(",[79,174497,153583],{"class":89},[79,174499,253],{"class":239},[79,174501,174502,174504,174506,174508,174510,174512,174514,174516,174518],{"class":81,"line":457},[79,174503,172286],{"class":239},[79,174505,64789],{"class":89},[79,174507,53550],{"class":239},[79,174509,151640],{"class":89},[79,174511,1060],{"class":239},[79,174513,153224],{"class":89},[79,174515,53550],{"class":239},[79,174517,3359],{"class":96},[79,174519,166904],{"class":239},[79,174521,174522,174525,174527],{"class":81,"line":462},[79,174523,174524],{"class":239},"write_json(",[79,174526,153583],{"class":89},[79,174528,174529],{"class":239},", students)\n",[14,174531,174533],{"id":174532},"_918-易错点","9.18 易错点",[26,174535,174536,174539,174544,174549,174552,174555],{},[29,174537,174538],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[29,174540,174541,174542,1604],{},"能指定异常类型就不要裸写 ",[59,174543,172646],{},[29,174545,174546,174548],{},[59,174547,173021],{}," 无论是否出错都会执行。",[29,174550,174551],{},"模块文件名不要和标准库重名。",[29,174553,174554],{},"导入自己写的模块时，要注意运行目录。",[29,174556,174557],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174559,174561],{"id":174560},"_919-本章练习","9.19 本章练习",[26,174563,174564,174567,174570,174576,174583],{},[29,174565,174566],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[29,174568,174569],{},"写函数读取文件，如果文件不存在则返回空字符串。",[29,174571,173984,174572,174575],{},[59,174573,174574],{},"math_utils.py","，实现加减乘除函数并导入使用。",[29,174577,174578,174579,174582],{},"创建一个 ",[59,174580,174581],{},"utils"," 包，把 JSON 读写函数放进去。",[29,174584,174585],{},"写一个程序，捕获除零异常和输入格式异常。",[2287,174587,174588],{},"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":57,"searchDepth":167,"depth":167,"links":174590},[174591,174592,174593,174594,174595,174596,174597,174598,174599,174600,174601,174607,174614,174616,174617,174618,174619,174620,174621],{"id":172443,"depth":167,"text":172444},{"id":172571,"depth":167,"text":172572},{"id":172620,"depth":167,"text":172621},{"id":172769,"depth":167,"text":172770},{"id":172941,"depth":167,"text":172942},{"id":173010,"depth":167,"text":173011},{"id":173121,"depth":167,"text":173122},{"id":173247,"depth":167,"text":173248},{"id":173372,"depth":167,"text":173373},{"id":173427,"depth":167,"text":173428},{"id":173526,"depth":167,"text":173527,"children":174602},[174603,174604,174605,174606],{"id":173530,"depth":178,"text":173531},{"id":173564,"depth":178,"text":173565},{"id":173603,"depth":178,"text":173604},{"id":173682,"depth":178,"text":173683},{"id":173705,"depth":167,"text":173706,"children":174608},[174609,174610,174611,174612,174613],{"id":173709,"depth":178,"text":173710},{"id":173792,"depth":178,"text":173793},{"id":173837,"depth":178,"text":173838},{"id":173896,"depth":178,"text":173897},{"id":173934,"depth":178,"text":173935},{"id":173968,"depth":167,"text":174615},"9.13 if name == \"main\"",{"id":174061,"depth":167,"text":174062},{"id":174106,"depth":167,"text":174107},{"id":174217,"depth":167,"text":174218},{"id":174275,"depth":167,"text":174276},{"id":174532,"depth":167,"text":174533},{"id":174560,"depth":167,"text":174561},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172435,"description":25516},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174628,"title":174629,"body":174630,"description":174793,"extension":2314,"meta":174794,"navigation":453,"path":174795,"seo":174796,"stem":174797,"__hash__":174798},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174631,"toc":174788},[174632,174635,174638,174641,174652,174654,174728,174731,174734,174737,174740,174743,174746,174749,174752,174755,174758],[10,174633,174629],{"id":174634},"python教程",[19,174636,174637],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174639,174640],{},"建议学习环境：",[26,174642,174643,174646,174649],{},[29,174644,174645],{},"Python 版本：Python 3.10 及以上。",[29,174647,174648],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[29,174650,174651],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174653,118830],{"id":118830},[26,174655,174656,174662,174668,174674,174680,174686,174692,174698,174704,174710,174716,174722],{},[29,174657,174658],{},[2614,174659,174661],{"href":174660},".\u002Fch1-Python","Python环境与第一个程序",[29,174663,174664],{},[2614,174665,174667],{"href":174666},".\u002Fch2","基础语法、变量与字符串",[29,174669,174670],{},[2614,174671,174673],{"href":174672},".\u002Fch3","判断语句",[29,174675,174676],{},[2614,174677,174679],{"href":174678},".\u002Fch4","循环语句",[29,174681,174682],{},[2614,174683,174685],{"href":174684},".\u002Fch5","函数基础",[29,174687,174688],{},[2614,174689,174691],{"href":174690},".\u002Fch6","数据容器",[29,174693,174694],{},[2614,174695,174697],{"href":174696},".\u002Fch7","函数进阶",[29,174699,174700],{},[2614,174701,174703],{"href":174702},".\u002Fch8","文件操作",[29,174705,174706],{},[2614,174707,174709],{"href":174708},".\u002Fch9","异常、模块与包",[29,174711,174712],{},[2614,174713,174715],{"href":174714},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[29,174717,174718],{},[2614,174719,174721],{"href":174720},".\u002Fch11","面向对象基础",[29,174723,174724],{},[2614,174725,174727],{"href":174726},".\u002Fch12","综合案例与复习路线",[14,174729,174730],{"id":174730},"学习路线",[19,174732,174733],{},"第一阶段：能运行程序。",[19,174735,174736],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174738,174739],{},"第二阶段：能组织数据。",[19,174741,174742],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174744,174745],{},"第三阶段：能封装逻辑。",[19,174747,174748],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174750,174751],{},"第四阶段：能做小项目。",[19,174753,174754],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174756,174757],{"id":174757},"参考资料",[26,174759,174760,174767,174774,174781],{},[29,174761,174762,174763],{},"黑马程序员 Python 入门教程推荐：",[2614,174764,174765],{"href":174765,"rel":174766},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[26001],[29,174768,174769,174770],{},"Python 官方中文教程：",[2614,174771,174772],{"href":174772,"rel":174773},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[26001],[29,174775,174776,174777],{},"Python 标准库文档：",[2614,174778,174779],{"href":174779,"rel":174780},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[26001],[29,174782,174783,174784],{},"pyecharts 文档：",[2614,174785,174786],{"href":174786,"rel":174787},"https:\u002F\u002Fpyecharts.org\u002F",[26001],{"title":57,"searchDepth":167,"depth":167,"links":174789},[174790,174791,174792],{"id":118830,"depth":167,"text":118830},{"id":174730,"depth":167,"text":174730},{"id":174757,"depth":167,"text":174757},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25518},"\u002Fwiki\u002F2024-10-10-python",{"title":174629,"description":174793},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331472241]