[{"data":1,"prerenderedAt":176081},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu":3,"wiki-doc-nav":3823},{"id":4,"title":5,"body":6,"description":31,"extension":3817,"meta":3818,"navigation":658,"path":3819,"seo":3820,"stem":3821,"__hash__":3822},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":8,"toc":3788},"minimark",[9,13,18,22,25,62,65,72,75,83,87,90,129,132,153,156,207,210,240,244,247,308,311,317,329,332,373,376,418,421,429,436,439,445,448,510,517,563,566,570,587,598,602,2085,2088,2101,2104,2115,2118,2121,2142,2145,2148,2181,2187,2190,2224,2227,2230,2271,2277,2291,2294,2307,2313,2336,2339,2354,2364,2379,2386,2406,2421,2439,2442,2459,2467,2483,2489,2521,2534,2566,2576,2611,2625,2671,2685,2727,2738,2751,2758,2793,2796,2825,2835,2875,2885,2902,2909,2927,2930,2971,2985,3000,3003,3026,3029,3041,3044,3064,3069,3090,3093,3108,3111,3146,3158,3173,3176,3202,3205,3224,3227,3259,3262,3286,3292,3322,3329,3342,3345,3349,3352,3358,3361,3364,3376,3379,3383,3441,3445,3449,3455,3464,3467,3474,3477,3501,3504,3508,3511,3529,3535,3538,3571,3574,3580,3584,3587,3607,3613,3617,3624,3644,3650,3654,3657,3677,3680,3768,3772,3775,3781,3784],[10,11,5],"h1",{"id":12},"_8gymnasium-风格强化学习接口基础",[14,15,17],"h2",{"id":16},"_1目标说明","1.目标说明",[19,20,21],"p",{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,23,24],{},"你将实现:",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-python shiki shiki-themes github-light github-dark","obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n","python","",[33,34,35,51],"code",{"__ignoreMap":31},[36,37,40,44,48],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"sVt8B","obs, info ",[36,45,47],{"class":46},"szBVR","=",[36,49,50],{"class":42}," env.reset()\n",[36,52,54,57,59],{"class":38,"line":53},2,[36,55,56],{"class":42},"obs, reward, terminated, truncated, info ",[36,58,47],{"class":46},[36,60,61],{"class":42}," env.step(action)\n",[19,63,64],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,66,67,68,71],{},"前面章节的代码都是“脚本式”的：在 ",[33,69,70],{},"main()"," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,73,74],{},"可以先记住 Gymnasium 环境的核心交互：",[26,76,81],{"className":77,"code":79,"language":80,"meta":31},[78],"language-text","reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n","text",[33,82,79],{"__ignoreMap":31},[14,84,86],{"id":85},"_2环境与依赖安装","2.环境与依赖安装",[19,88,89],{},"Fedora 44 系统依赖:",[26,91,95],{"className":92,"code":93,"language":94,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n","bash",[33,96,97],{"__ignoreMap":31},[36,98,99,103,107,110,114,117,120,123,126],{"class":38,"line":39},[36,100,102],{"class":101},"sScJk","sudo",[36,104,106],{"class":105},"sZZnC"," dnf",[36,108,109],{"class":105}," install",[36,111,113],{"class":112},"sj4cs"," -y",[36,115,116],{"class":105}," python3",[36,118,119],{"class":105}," python3-pip",[36,121,122],{"class":105}," mesa-libGL",[36,124,125],{"class":105}," mesa-dri-drivers",[36,127,128],{"class":105}," glfw\n",[19,130,131],{},"pip:",[26,133,135],{"className":92,"code":134,"language":94,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[33,136,137],{"__ignoreMap":31},[36,138,139,142,144,147,150],{"class":38,"line":39},[36,140,141],{"class":101},"pip",[36,143,109],{"class":105},[36,145,146],{"class":105}," \"mujoco>=2.3\"",[36,148,149],{"class":105}," numpy",[36,151,152],{"class":105}," gymnasium\n",[19,154,155],{},"conda:",[26,157,159],{"className":92,"code":158,"language":94,"meta":31,"style":31},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[33,160,161,184,194],{"__ignoreMap":31},[36,162,163,166,169,172,175,178,181],{"class":38,"line":39},[36,164,165],{"class":101},"conda",[36,167,168],{"class":105}," create",[36,170,171],{"class":112}," -n",[36,173,174],{"class":105}," mujoco-gym-api",[36,176,177],{"class":105}," python=",[36,179,180],{"class":112},"3.10",[36,182,183],{"class":112}," -y\n",[36,185,186,188,191],{"class":38,"line":53},[36,187,165],{"class":101},[36,189,190],{"class":105}," activate",[36,192,193],{"class":105}," mujoco-gym-api\n",[36,195,197,199,201,203,205],{"class":38,"line":196},3,[36,198,141],{"class":101},[36,200,109],{"class":105},[36,202,146],{"class":105},[36,204,149],{"class":105},[36,206,152],{"class":105},[19,208,209],{},"版本冲突说明:",[211,212,213,225,228,234],"ol",{},[214,215,216,217,220,221,224],"li",{},"本章使用 ",[33,218,219],{},"gymnasium","，不是旧版 ",[33,222,223],{},"gym","。",[214,226,227],{},"Gymnasium API 与旧 Gym API 有差异。",[214,229,230,231,224],{},"旧 Gym 常见返回值是 4 个: ",[33,232,233],{},"obs, reward, done, info",[214,235,236,237,224],{},"Gymnasium 返回值是 5 个: ",[33,238,239],{},"obs, reward, terminated, truncated, info",[14,241,243],{"id":242},"_3核心概念解释","3.核心概念解释",[19,245,246],{},"强化学习环境接口包含:",[248,249,250,264],"table",{},[251,252,253],"thead",{},[254,255,256,261],"tr",{},[257,258,260],"th",{"align":259},"left","方法",[257,262,263],{"align":259},"作用",[265,266,267,278,288,298],"tbody",{},[254,268,269,275],{},[270,271,272],"td",{"align":259},[33,273,274],{},"reset()",[270,276,277],{"align":259},"重置环境",[254,279,280,285],{},[270,281,282],{"align":259},[33,283,284],{},"step(action)",[270,286,287],{"align":259},"执行动作",[254,289,290,295],{},[270,291,292],{"align":259},[33,293,294],{},"observation_space",[270,296,297],{"align":259},"观测空间",[254,299,300,305],{},[270,301,302],{"align":259},[33,303,304],{},"action_space",[270,306,307],{"align":259},"动作空间",[19,309,310],{},"一个最小环境需要完成:",[26,312,315],{"className":313,"code":314,"language":80,"meta":31},[78],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[33,316,314],{"__ignoreMap":31},[318,319,321,324,325,328],"h3",{"id":320},"terminated-和-truncated-的区别",[33,322,323],{},"terminated"," 和 ",[33,326,327],{},"truncated"," 的区别",[19,330,331],{},"Gymnasium 把“结束”拆成两个概念：",[248,333,334,347],{},[251,335,336],{},[254,337,338,341,344],{},[257,339,340],{"align":259},"字段",[257,342,343],{"align":259},"含义",[257,345,346],{"align":259},"例子",[265,348,349,361],{},[254,350,351,355,358],{},[270,352,353],{"align":259},[33,354,323],{},[270,356,357],{"align":259},"任务自然结束",[270,359,360],{"align":259},"机械臂到达目标、机器人摔倒",[254,362,363,367,370],{},[270,364,365],{"align":259},[33,366,327],{},[270,368,369],{"align":259},"因外部限制截断",[270,371,372],{"align":259},"达到最大步数、时间限制",[19,374,375],{},"本章中：",[26,377,379],{"className":28,"code":378,"language":30,"meta":31,"style":31},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[33,380,381,397],{"__ignoreMap":31},[36,382,383,386,388,391,394],{"class":38,"line":39},[36,384,385],{"class":42},"terminated ",[36,387,47],{"class":46},[36,389,390],{"class":42}," dist ",[36,392,393],{"class":46},"\u003C",[36,395,396],{"class":112}," 0.05\n",[36,398,399,402,404,407,410,413,415],{"class":38,"line":53},[36,400,401],{"class":42},"truncated ",[36,403,47],{"class":46},[36,405,406],{"class":112}," self",[36,408,409],{"class":42},".steps ",[36,411,412],{"class":46},">=",[36,414,406],{"class":112},[36,416,417],{"class":42},".max_steps\n",[19,419,420],{},"也就是：",[211,422,423,426],{},[214,424,425],{},"末端距离目标小于 0.05，任务成功结束。",[214,427,428],{},"步数超过上限，episode 被截断。",[318,430,432,324,434],{"id":431},"observation_space-和-action_space",[33,433,294],{},[33,435,304],{},[19,437,438],{},"这两个对象告诉算法：",[26,440,443],{"className":441,"code":442,"language":80,"meta":31},[78],"观测长什么样\n动作允许多大\n",[33,444,442],{"__ignoreMap":31},[19,446,447],{},"例如：",[26,449,451],{"className":28,"code":450,"language":30,"meta":31,"style":31},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[33,452,453],{"__ignoreMap":31},[36,454,455,458,461,463,466,470,473,476,479,482,484,486,488,491,493,496,499,502,505,507],{"class":38,"line":39},[36,456,457],{"class":112},"self",[36,459,460],{"class":42},".action_space ",[36,462,47],{"class":46},[36,464,465],{"class":42}," spaces.Box(",[36,467,469],{"class":468},"s4XuR","low",[36,471,472],{"class":46},"=-",[36,474,475],{"class":112},"1.0",[36,477,478],{"class":42},", ",[36,480,481],{"class":468},"high",[36,483,47],{"class":46},[36,485,475],{"class":112},[36,487,478],{"class":42},[36,489,490],{"class":468},"shape",[36,492,47],{"class":46},[36,494,495],{"class":42},"(",[36,497,498],{"class":112},"2",[36,500,501],{"class":42},",), ",[36,503,504],{"class":468},"dtype",[36,506,47],{"class":46},[36,508,509],{"class":42},"np.float32)\n",[19,511,512,513,516],{},"表示动作是 2 维数组，每个值都在 ",[33,514,515],{},"[-1, 1]"," 范围内。",[26,518,520],{"className":28,"code":519,"language":30,"meta":31,"style":31},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[33,521,522],{"__ignoreMap":31},[36,523,524,526,529,531,533,535,537,540,542,544,546,548,550,552,555,557,559,561],{"class":38,"line":39},[36,525,457],{"class":112},[36,527,528],{"class":42},".observation_space ",[36,530,47],{"class":46},[36,532,465],{"class":42},[36,534,469],{"class":468},[36,536,472],{"class":46},[36,538,539],{"class":42},"np.inf, ",[36,541,481],{"class":468},[36,543,47],{"class":46},[36,545,539],{"class":42},[36,547,490],{"class":468},[36,549,47],{"class":46},[36,551,495],{"class":42},[36,553,554],{"class":112},"10",[36,556,501],{"class":42},[36,558,504],{"class":468},[36,560,47],{"class":46},[36,562,509],{"class":42},[19,564,565],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[318,567,569],{"id":568},"frame_skip-是什么","frame_skip 是什么",[26,571,573],{"className":28,"code":572,"language":30,"meta":31,"style":31},"self.frame_skip = 5\n",[33,574,575],{"__ignoreMap":31},[36,576,577,579,582,584],{"class":38,"line":39},[36,578,457],{"class":112},[36,580,581],{"class":42},".frame_skip ",[36,583,47],{"class":46},[36,585,586],{"class":112}," 5\n",[19,588,589,590,593,594,597],{},"表示外部调用一次 ",[33,591,592],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[33,595,596],{},"mj_step","。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,599,601],{"id":600},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[26,603,605],{"className":28,"code":604,"language":30,"meta":31,"style":31},"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",[33,606,607,621,628,640,653,660,665,677,683,689,694,700,706,711,717,723,729,734,740,746,752,758,764,770,776,781,787,793,799,805,811,817,822,827,849,866,871,889,904,923,941,946,969,990,1018,1034,1039,1050,1063,1075,1080,1123,1162,1167,1178,1196,1213,1234,1243,1248,1263,1279,1295,1312,1334,1354,1359,1405,1421,1437,1442,1484,1497,1511,1516,1527,1537,1542,1553,1570,1590,1595,1608,1630,1644,1649,1662,1667,1679,1692,1697,1712,1727,1744,1749,1763,1781,1797,1805,1810,1815,1831,1842,1862,1876,1889,1894,1904,1924,1934,1944,1955,2006,2020,2026,2031,2052,2057,2062,2079],{"__ignoreMap":31},[36,608,609,612,615,618],{"class":38,"line":39},[36,610,611],{"class":46},"import",[36,613,614],{"class":42}," gymnasium ",[36,616,617],{"class":46},"as",[36,619,620],{"class":42}," gym\n",[36,622,623,625],{"class":38,"line":53},[36,624,611],{"class":46},[36,626,627],{"class":42}," mujoco\n",[36,629,630,632,635,637],{"class":38,"line":196},[36,631,611],{"class":46},[36,633,634],{"class":42}," numpy ",[36,636,617],{"class":46},[36,638,639],{"class":42}," np\n",[36,641,643,646,648,650],{"class":38,"line":642},4,[36,644,645],{"class":46},"from",[36,647,614],{"class":42},[36,649,611],{"class":46},[36,651,652],{"class":42}," spaces\n",[36,654,656],{"class":38,"line":655},5,[36,657,659],{"emptyLinePlaceholder":658},true,"\n",[36,661,663],{"class":38,"line":662},6,[36,664,659],{"emptyLinePlaceholder":658},[36,666,668,671,674],{"class":38,"line":667},7,[36,669,670],{"class":112},"XML",[36,672,673],{"class":46}," =",[36,675,676],{"class":105}," \"\"\"\n",[36,678,680],{"class":38,"line":679},8,[36,681,682],{"class":105},"\u003Cmujoco model=\"gym_reacher\">\n",[36,684,686],{"class":38,"line":685},9,[36,687,688],{"class":105},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[36,690,692],{"class":38,"line":691},10,[36,693,659],{"emptyLinePlaceholder":658},[36,695,697],{"class":38,"line":696},11,[36,698,699],{"class":105},"  \u003Cworldbody>\n",[36,701,703],{"class":38,"line":702},12,[36,704,705],{"class":105},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[36,707,709],{"class":38,"line":708},13,[36,710,659],{"emptyLinePlaceholder":658},[36,712,714],{"class":38,"line":713},14,[36,715,716],{"class":105},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[36,718,720],{"class":38,"line":719},15,[36,721,722],{"class":105},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,724,726],{"class":38,"line":725},16,[36,727,728],{"class":105},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,730,732],{"class":38,"line":731},17,[36,733,659],{"emptyLinePlaceholder":658},[36,735,737],{"class":38,"line":736},18,[36,738,739],{"class":105},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[36,741,743],{"class":38,"line":742},19,[36,744,745],{"class":105},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,747,749],{"class":38,"line":748},20,[36,750,751],{"class":105},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,753,755],{"class":38,"line":754},21,[36,756,757],{"class":105},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[36,759,761],{"class":38,"line":760},22,[36,762,763],{"class":105},"      \u003C\u002Fbody>\n",[36,765,767],{"class":38,"line":766},23,[36,768,769],{"class":105},"    \u003C\u002Fbody>\n",[36,771,773],{"class":38,"line":772},24,[36,774,775],{"class":105},"  \u003C\u002Fworldbody>\n",[36,777,779],{"class":38,"line":778},25,[36,780,659],{"emptyLinePlaceholder":658},[36,782,784],{"class":38,"line":783},26,[36,785,786],{"class":105},"  \u003Cactuator>\n",[36,788,790],{"class":38,"line":789},27,[36,791,792],{"class":105},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,794,796],{"class":38,"line":795},28,[36,797,798],{"class":105},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,800,802],{"class":38,"line":801},29,[36,803,804],{"class":105},"  \u003C\u002Factuator>\n",[36,806,808],{"class":38,"line":807},30,[36,809,810],{"class":105},"\u003C\u002Fmujoco>\n",[36,812,814],{"class":38,"line":813},31,[36,815,816],{"class":105},"\"\"\"\n",[36,818,820],{"class":38,"line":819},32,[36,821,659],{"emptyLinePlaceholder":658},[36,823,825],{"class":38,"line":824},33,[36,826,659],{"emptyLinePlaceholder":658},[36,828,830,833,836,838,840,843,846],{"class":38,"line":829},34,[36,831,832],{"class":46},"class",[36,834,835],{"class":101}," ReacherEnv",[36,837,495],{"class":42},[36,839,223],{"class":101},[36,841,842],{"class":42},".",[36,844,845],{"class":101},"Env",[36,847,848],{"class":42},"):\n",[36,850,852,855,857,860,863],{"class":38,"line":851},35,[36,853,854],{"class":42},"    metadata ",[36,856,47],{"class":46},[36,858,859],{"class":42}," {",[36,861,862],{"class":105},"\"render_modes\"",[36,864,865],{"class":42},": []}\n",[36,867,869],{"class":38,"line":868},36,[36,870,659],{"emptyLinePlaceholder":658},[36,872,874,877,880,883,886],{"class":38,"line":873},37,[36,875,876],{"class":46},"    def",[36,878,879],{"class":112}," __init__",[36,881,882],{"class":42},"(self) -> ",[36,884,885],{"class":112},"None",[36,887,888],{"class":42},":\n",[36,890,892,895,898,901],{"class":38,"line":891},38,[36,893,894],{"class":112},"        super",[36,896,897],{"class":42},"().",[36,899,900],{"class":112},"__init__",[36,902,903],{"class":42},"()\n",[36,905,907,910,913,915,918,920],{"class":38,"line":906},39,[36,908,909],{"class":112},"        self",[36,911,912],{"class":42},".model ",[36,914,47],{"class":46},[36,916,917],{"class":42}," mujoco.MjModel.from_xml_string(",[36,919,670],{"class":112},[36,921,922],{"class":42},")\n",[36,924,926,928,931,933,936,938],{"class":38,"line":925},40,[36,927,909],{"class":112},[36,929,930],{"class":42},".data ",[36,932,47],{"class":46},[36,934,935],{"class":42}," mujoco.MjData(",[36,937,457],{"class":112},[36,939,940],{"class":42},".model)\n",[36,942,944],{"class":38,"line":943},41,[36,945,659],{"emptyLinePlaceholder":658},[36,947,949,951,954,956,959,961,964,967],{"class":38,"line":948},42,[36,950,909],{"class":112},[36,952,953],{"class":42},".tip_site_id ",[36,955,47],{"class":46},[36,957,958],{"class":42}," mujoco.mj_name2id(",[36,960,457],{"class":112},[36,962,963],{"class":42},".model, mujoco.mjtObj.mjOBJ_SITE, ",[36,965,966],{"class":105},"\"tip\"",[36,968,922],{"class":42},[36,970,972,974,977,979,981,983,985,988],{"class":38,"line":971},43,[36,973,909],{"class":112},[36,975,976],{"class":42},".target_site_id ",[36,978,47],{"class":46},[36,980,958],{"class":42},[36,982,457],{"class":112},[36,984,963],{"class":42},[36,986,987],{"class":105},"\"target\"",[36,989,922],{"class":42},[36,991,993,996,998,1000,1002,1005,1008,1010,1012,1014,1016],{"class":38,"line":992},44,[36,994,995],{"class":46},"        if",[36,997,406],{"class":112},[36,999,953],{"class":42},[36,1001,393],{"class":46},[36,1003,1004],{"class":112}," 0",[36,1006,1007],{"class":46}," or",[36,1009,406],{"class":112},[36,1011,976],{"class":42},[36,1013,393],{"class":46},[36,1015,1004],{"class":112},[36,1017,888],{"class":42},[36,1019,1021,1024,1027,1029,1032],{"class":38,"line":1020},45,[36,1022,1023],{"class":46},"            raise",[36,1025,1026],{"class":112}," RuntimeError",[36,1028,495],{"class":42},[36,1030,1031],{"class":105},"\"required sites not found\"",[36,1033,922],{"class":42},[36,1035,1037],{"class":38,"line":1036},46,[36,1038,659],{"emptyLinePlaceholder":658},[36,1040,1042,1044,1046,1048],{"class":38,"line":1041},47,[36,1043,909],{"class":112},[36,1045,581],{"class":42},[36,1047,47],{"class":46},[36,1049,586],{"class":112},[36,1051,1053,1055,1058,1060],{"class":38,"line":1052},48,[36,1054,909],{"class":112},[36,1056,1057],{"class":42},".max_steps ",[36,1059,47],{"class":46},[36,1061,1062],{"class":112}," 200\n",[36,1064,1066,1068,1070,1072],{"class":38,"line":1065},49,[36,1067,909],{"class":112},[36,1069,409],{"class":42},[36,1071,47],{"class":46},[36,1073,1074],{"class":112}," 0\n",[36,1076,1078],{"class":38,"line":1077},50,[36,1079,659],{"emptyLinePlaceholder":658},[36,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121],{"class":38,"line":1082},51,[36,1084,909],{"class":112},[36,1086,460],{"class":42},[36,1088,47],{"class":46},[36,1090,465],{"class":42},[36,1092,469],{"class":468},[36,1094,472],{"class":46},[36,1096,475],{"class":112},[36,1098,478],{"class":42},[36,1100,481],{"class":468},[36,1102,47],{"class":46},[36,1104,475],{"class":112},[36,1106,478],{"class":42},[36,1108,490],{"class":468},[36,1110,47],{"class":46},[36,1112,495],{"class":42},[36,1114,498],{"class":112},[36,1116,501],{"class":42},[36,1118,504],{"class":468},[36,1120,47],{"class":46},[36,1122,509],{"class":42},[36,1124,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150,1152,1154,1156,1158,1160],{"class":38,"line":1125},52,[36,1127,909],{"class":112},[36,1129,528],{"class":42},[36,1131,47],{"class":46},[36,1133,465],{"class":42},[36,1135,469],{"class":468},[36,1137,472],{"class":46},[36,1139,539],{"class":42},[36,1141,481],{"class":468},[36,1143,47],{"class":46},[36,1145,539],{"class":42},[36,1147,490],{"class":468},[36,1149,47],{"class":46},[36,1151,495],{"class":42},[36,1153,554],{"class":112},[36,1155,501],{"class":42},[36,1157,504],{"class":468},[36,1159,47],{"class":46},[36,1161,509],{"class":42},[36,1163,1165],{"class":38,"line":1164},53,[36,1166,659],{"emptyLinePlaceholder":658},[36,1168,1170,1172,1175],{"class":38,"line":1169},54,[36,1171,876],{"class":46},[36,1173,1174],{"class":101}," _get_obs",[36,1176,1177],{"class":42},"(self) -> np.ndarray:\n",[36,1179,1181,1184,1186,1188,1191,1193],{"class":38,"line":1180},55,[36,1182,1183],{"class":42},"        tip ",[36,1185,47],{"class":46},[36,1187,406],{"class":112},[36,1189,1190],{"class":42},".data.site_xpos[",[36,1192,457],{"class":112},[36,1194,1195],{"class":42},".tip_site_id].copy()\n",[36,1197,1199,1202,1204,1206,1208,1210],{"class":38,"line":1198},56,[36,1200,1201],{"class":42},"        target ",[36,1203,47],{"class":46},[36,1205,406],{"class":112},[36,1207,1190],{"class":42},[36,1209,457],{"class":112},[36,1211,1212],{"class":42},".target_site_id].copy()\n",[36,1214,1216,1219,1221,1224,1226,1229,1231],{"class":38,"line":1215},57,[36,1217,1218],{"class":42},"        obs ",[36,1220,47],{"class":46},[36,1222,1223],{"class":42}," np.concatenate([",[36,1225,457],{"class":112},[36,1227,1228],{"class":42},".data.qpos.copy(), ",[36,1230,457],{"class":112},[36,1232,1233],{"class":42},".data.qvel.copy(), tip, target])\n",[36,1235,1237,1240],{"class":38,"line":1236},58,[36,1238,1239],{"class":46},"        return",[36,1241,1242],{"class":42}," obs.astype(np.float32)\n",[36,1244,1246],{"class":38,"line":1245},59,[36,1247,659],{"emptyLinePlaceholder":658},[36,1249,1251,1253,1256,1258,1261],{"class":38,"line":1250},60,[36,1252,876],{"class":46},[36,1254,1255],{"class":101}," _get_reward",[36,1257,882],{"class":42},[36,1259,1260],{"class":112},"float",[36,1262,888],{"class":42},[36,1264,1266,1268,1270,1272,1274,1276],{"class":38,"line":1265},61,[36,1267,1183],{"class":42},[36,1269,47],{"class":46},[36,1271,406],{"class":112},[36,1273,1190],{"class":42},[36,1275,457],{"class":112},[36,1277,1278],{"class":42},".tip_site_id]\n",[36,1280,1282,1284,1286,1288,1290,1292],{"class":38,"line":1281},62,[36,1283,1201],{"class":42},[36,1285,47],{"class":46},[36,1287,406],{"class":112},[36,1289,1190],{"class":42},[36,1291,457],{"class":112},[36,1293,1294],{"class":42},".target_site_id]\n",[36,1296,1298,1301,1303,1306,1309],{"class":38,"line":1297},63,[36,1299,1300],{"class":42},"        dist ",[36,1302,47],{"class":46},[36,1304,1305],{"class":42}," np.linalg.norm(tip ",[36,1307,1308],{"class":46},"-",[36,1310,1311],{"class":42}," target)\n",[36,1313,1315,1318,1320,1323,1326,1329,1331],{"class":38,"line":1314},64,[36,1316,1317],{"class":42},"        control_cost ",[36,1319,47],{"class":46},[36,1321,1322],{"class":112}," 0.01",[36,1324,1325],{"class":46}," *",[36,1327,1328],{"class":42}," np.sum(np.square(",[36,1330,457],{"class":112},[36,1332,1333],{"class":42},".data.ctrl))\n",[36,1335,1337,1339,1342,1344,1346,1349,1351],{"class":38,"line":1336},65,[36,1338,1239],{"class":46},[36,1340,1341],{"class":112}," float",[36,1343,495],{"class":42},[36,1345,1308],{"class":46},[36,1347,1348],{"class":42},"dist ",[36,1350,1308],{"class":46},[36,1352,1353],{"class":42}," control_cost)\n",[36,1355,1357],{"class":38,"line":1356},66,[36,1358,659],{"emptyLinePlaceholder":658},[36,1360,1362,1364,1367,1370,1373,1376,1379,1382,1385,1387,1389,1392,1395,1397,1399,1401,1403],{"class":38,"line":1361},67,[36,1363,876],{"class":46},[36,1365,1366],{"class":101}," reset",[36,1368,1369],{"class":42},"(self, ",[36,1371,1372],{"class":46},"*",[36,1374,1375],{"class":42},", seed: ",[36,1377,1378],{"class":112},"int",[36,1380,1381],{"class":46}," |",[36,1383,1384],{"class":112}," None",[36,1386,673],{"class":46},[36,1388,1384],{"class":112},[36,1390,1391],{"class":42},", options: ",[36,1393,1394],{"class":112},"dict",[36,1396,1381],{"class":46},[36,1398,1384],{"class":112},[36,1400,673],{"class":46},[36,1402,1384],{"class":112},[36,1404,848],{"class":42},[36,1406,1408,1410,1413,1416,1418],{"class":38,"line":1407},68,[36,1409,894],{"class":112},[36,1411,1412],{"class":42},"().reset(",[36,1414,1415],{"class":468},"seed",[36,1417,47],{"class":46},[36,1419,1420],{"class":42},"seed)\n",[36,1422,1424,1427,1429,1432,1434],{"class":38,"line":1423},69,[36,1425,1426],{"class":42},"        mujoco.mj_resetData(",[36,1428,457],{"class":112},[36,1430,1431],{"class":42},".model, ",[36,1433,457],{"class":112},[36,1435,1436],{"class":42},".data)\n",[36,1438,1440],{"class":38,"line":1439},70,[36,1441,659],{"emptyLinePlaceholder":658},[36,1443,1445,1447,1450,1452,1454,1457,1459,1461,1464,1466,1468,1470,1472,1474,1477,1479,1481],{"class":38,"line":1444},71,[36,1446,909],{"class":112},[36,1448,1449],{"class":42},".data.qpos[:] ",[36,1451,47],{"class":46},[36,1453,406],{"class":112},[36,1455,1456],{"class":42},".np_random.uniform(",[36,1458,469],{"class":468},[36,1460,472],{"class":46},[36,1462,1463],{"class":112},"0.1",[36,1465,478],{"class":42},[36,1467,481],{"class":468},[36,1469,47],{"class":46},[36,1471,1463],{"class":112},[36,1473,478],{"class":42},[36,1475,1476],{"class":468},"size",[36,1478,47],{"class":46},[36,1480,457],{"class":112},[36,1482,1483],{"class":42},".model.nq)\n",[36,1485,1487,1489,1492,1494],{"class":38,"line":1486},72,[36,1488,909],{"class":112},[36,1490,1491],{"class":42},".data.qvel[:] ",[36,1493,47],{"class":46},[36,1495,1496],{"class":112}," 0.0\n",[36,1498,1500,1503,1505,1507,1509],{"class":38,"line":1499},73,[36,1501,1502],{"class":42},"        mujoco.mj_forward(",[36,1504,457],{"class":112},[36,1506,1431],{"class":42},[36,1508,457],{"class":112},[36,1510,1436],{"class":42},[36,1512,1514],{"class":38,"line":1513},74,[36,1515,659],{"emptyLinePlaceholder":658},[36,1517,1519,1521,1523,1525],{"class":38,"line":1518},75,[36,1520,909],{"class":112},[36,1522,409],{"class":42},[36,1524,47],{"class":46},[36,1526,1074],{"class":112},[36,1528,1530,1532,1534],{"class":38,"line":1529},76,[36,1531,1239],{"class":46},[36,1533,406],{"class":112},[36,1535,1536],{"class":42},"._get_obs(), {}\n",[36,1538,1540],{"class":38,"line":1539},77,[36,1541,659],{"emptyLinePlaceholder":658},[36,1543,1545,1547,1550],{"class":38,"line":1544},78,[36,1546,876],{"class":46},[36,1548,1549],{"class":101}," step",[36,1551,1552],{"class":42},"(self, action):\n",[36,1554,1556,1559,1561,1564,1566,1568],{"class":38,"line":1555},79,[36,1557,1558],{"class":42},"        action ",[36,1560,47],{"class":46},[36,1562,1563],{"class":42}," np.asarray(action, ",[36,1565,504],{"class":468},[36,1567,47],{"class":46},[36,1569,509],{"class":42},[36,1571,1573,1575,1577,1580,1582,1585,1587],{"class":38,"line":1572},80,[36,1574,1558],{"class":42},[36,1576,47],{"class":46},[36,1578,1579],{"class":42}," np.clip(action, ",[36,1581,457],{"class":112},[36,1583,1584],{"class":42},".action_space.low, ",[36,1586,457],{"class":112},[36,1588,1589],{"class":42},".action_space.high)\n",[36,1591,1593],{"class":38,"line":1592},81,[36,1594,659],{"emptyLinePlaceholder":658},[36,1596,1598,1600,1603,1605],{"class":38,"line":1597},82,[36,1599,909],{"class":112},[36,1601,1602],{"class":42},".data.ctrl[:] ",[36,1604,47],{"class":46},[36,1606,1607],{"class":42}," action\n",[36,1609,1611,1614,1617,1620,1623,1625,1627],{"class":38,"line":1610},83,[36,1612,1613],{"class":46},"        for",[36,1615,1616],{"class":42}," _ ",[36,1618,1619],{"class":46},"in",[36,1621,1622],{"class":112}," range",[36,1624,495],{"class":42},[36,1626,457],{"class":112},[36,1628,1629],{"class":42},".frame_skip):\n",[36,1631,1633,1636,1638,1640,1642],{"class":38,"line":1632},84,[36,1634,1635],{"class":42},"            mujoco.mj_step(",[36,1637,457],{"class":112},[36,1639,1431],{"class":42},[36,1641,457],{"class":112},[36,1643,1436],{"class":42},[36,1645,1647],{"class":38,"line":1646},85,[36,1648,659],{"emptyLinePlaceholder":658},[36,1650,1652,1654,1656,1659],{"class":38,"line":1651},86,[36,1653,909],{"class":112},[36,1655,409],{"class":42},[36,1657,1658],{"class":46},"+=",[36,1660,1661],{"class":112}," 1\n",[36,1663,1665],{"class":38,"line":1664},87,[36,1666,659],{"emptyLinePlaceholder":658},[36,1668,1670,1672,1674,1676],{"class":38,"line":1669},88,[36,1671,1218],{"class":42},[36,1673,47],{"class":46},[36,1675,406],{"class":112},[36,1677,1678],{"class":42},"._get_obs()\n",[36,1680,1682,1685,1687,1689],{"class":38,"line":1681},89,[36,1683,1684],{"class":42},"        reward ",[36,1686,47],{"class":46},[36,1688,406],{"class":112},[36,1690,1691],{"class":42},"._get_reward()\n",[36,1693,1695],{"class":38,"line":1694},90,[36,1696,659],{"emptyLinePlaceholder":658},[36,1698,1700,1702,1704,1706,1708,1710],{"class":38,"line":1699},91,[36,1701,1183],{"class":42},[36,1703,47],{"class":46},[36,1705,406],{"class":112},[36,1707,1190],{"class":42},[36,1709,457],{"class":112},[36,1711,1278],{"class":42},[36,1713,1715,1717,1719,1721,1723,1725],{"class":38,"line":1714},92,[36,1716,1201],{"class":42},[36,1718,47],{"class":46},[36,1720,406],{"class":112},[36,1722,1190],{"class":42},[36,1724,457],{"class":112},[36,1726,1294],{"class":42},[36,1728,1730,1732,1734,1736,1739,1741],{"class":38,"line":1729},93,[36,1731,1300],{"class":42},[36,1733,47],{"class":46},[36,1735,1341],{"class":112},[36,1737,1738],{"class":42},"(np.linalg.norm(tip ",[36,1740,1308],{"class":46},[36,1742,1743],{"class":42}," target))\n",[36,1745,1747],{"class":38,"line":1746},94,[36,1748,659],{"emptyLinePlaceholder":658},[36,1750,1752,1755,1757,1759,1761],{"class":38,"line":1751},95,[36,1753,1754],{"class":42},"        terminated ",[36,1756,47],{"class":46},[36,1758,390],{"class":42},[36,1760,393],{"class":46},[36,1762,396],{"class":112},[36,1764,1766,1769,1771,1773,1775,1777,1779],{"class":38,"line":1765},96,[36,1767,1768],{"class":42},"        truncated ",[36,1770,47],{"class":46},[36,1772,406],{"class":112},[36,1774,409],{"class":42},[36,1776,412],{"class":46},[36,1778,406],{"class":112},[36,1780,417],{"class":42},[36,1782,1784,1787,1789,1791,1794],{"class":38,"line":1783},97,[36,1785,1786],{"class":42},"        info ",[36,1788,47],{"class":46},[36,1790,859],{"class":42},[36,1792,1793],{"class":105},"\"distance\"",[36,1795,1796],{"class":42},": dist}\n",[36,1798,1800,1802],{"class":38,"line":1799},98,[36,1801,1239],{"class":46},[36,1803,1804],{"class":42}," obs, reward, terminated, truncated, info\n",[36,1806,1808],{"class":38,"line":1807},99,[36,1809,659],{"emptyLinePlaceholder":658},[36,1811,1813],{"class":38,"line":1812},100,[36,1814,659],{"emptyLinePlaceholder":658},[36,1816,1818,1821,1824,1827,1829],{"class":38,"line":1817},101,[36,1819,1820],{"class":46},"def",[36,1822,1823],{"class":101}," main",[36,1825,1826],{"class":42},"() -> ",[36,1828,885],{"class":112},[36,1830,888],{"class":42},[36,1832,1834,1837,1839],{"class":38,"line":1833},102,[36,1835,1836],{"class":42},"    env ",[36,1838,47],{"class":46},[36,1840,1841],{"class":42}," ReacherEnv()\n",[36,1843,1845,1848,1850,1853,1855,1857,1860],{"class":38,"line":1844},103,[36,1846,1847],{"class":42},"    obs, info ",[36,1849,47],{"class":46},[36,1851,1852],{"class":42}," env.reset(",[36,1854,1415],{"class":468},[36,1856,47],{"class":46},[36,1858,1859],{"class":112},"0",[36,1861,922],{"class":42},[36,1863,1865,1868,1870,1873],{"class":38,"line":1864},104,[36,1866,1867],{"class":112},"    print",[36,1869,495],{"class":42},[36,1871,1872],{"class":105},"\"initial obs shape:\"",[36,1874,1875],{"class":42},", obs.shape)\n",[36,1877,1879,1881,1883,1886],{"class":38,"line":1878},105,[36,1880,1867],{"class":112},[36,1882,495],{"class":42},[36,1884,1885],{"class":105},"\"initial info:\"",[36,1887,1888],{"class":42},", info)\n",[36,1890,1892],{"class":38,"line":1891},106,[36,1893,659],{"emptyLinePlaceholder":658},[36,1895,1897,1900,1902],{"class":38,"line":1896},107,[36,1898,1899],{"class":42},"    total_reward ",[36,1901,47],{"class":46},[36,1903,1496],{"class":112},[36,1905,1907,1910,1913,1915,1917,1919,1922],{"class":38,"line":1906},108,[36,1908,1909],{"class":46},"    for",[36,1911,1912],{"class":42}," step ",[36,1914,1619],{"class":46},[36,1916,1622],{"class":112},[36,1918,495],{"class":42},[36,1920,1921],{"class":112},"20",[36,1923,848],{"class":42},[36,1925,1927,1929,1931],{"class":38,"line":1926},109,[36,1928,1558],{"class":42},[36,1930,47],{"class":46},[36,1932,1933],{"class":42}," env.action_space.sample()\n",[36,1935,1937,1940,1942],{"class":38,"line":1936},110,[36,1938,1939],{"class":42},"        obs, reward, terminated, truncated, info ",[36,1941,47],{"class":46},[36,1943,61],{"class":42},[36,1945,1947,1950,1952],{"class":38,"line":1946},111,[36,1948,1949],{"class":42},"        total_reward ",[36,1951,1658],{"class":46},[36,1953,1954],{"class":42}," reward\n",[36,1956,1958,1961,1963,1966,1969,1972,1974,1977,1980,1983,1986,1989,1991,1993,1996,1998,2001,2003],{"class":38,"line":1957},112,[36,1959,1960],{"class":112},"        print",[36,1962,495],{"class":42},[36,1964,1965],{"class":105},"\"step:\"",[36,1967,1968],{"class":42},", step, ",[36,1970,1971],{"class":105},"\"reward:\"",[36,1973,478],{"class":42},[36,1975,1976],{"class":112},"round",[36,1978,1979],{"class":42},"(reward, ",[36,1981,1982],{"class":112},"3",[36,1984,1985],{"class":42},"), ",[36,1987,1988],{"class":105},"\"distance:\"",[36,1990,478],{"class":42},[36,1992,1976],{"class":112},[36,1994,1995],{"class":42},"(info[",[36,1997,1793],{"class":105},[36,1999,2000],{"class":42},"], ",[36,2002,1982],{"class":112},[36,2004,2005],{"class":42},"))\n",[36,2007,2009,2011,2014,2017],{"class":38,"line":2008},113,[36,2010,995],{"class":46},[36,2012,2013],{"class":42}," terminated ",[36,2015,2016],{"class":46},"or",[36,2018,2019],{"class":42}," truncated:\n",[36,2021,2023],{"class":38,"line":2022},114,[36,2024,2025],{"class":46},"            break\n",[36,2027,2029],{"class":38,"line":2028},115,[36,2030,659],{"emptyLinePlaceholder":658},[36,2032,2034,2036,2038,2041,2043,2045,2048,2050],{"class":38,"line":2033},116,[36,2035,1867],{"class":112},[36,2037,495],{"class":42},[36,2039,2040],{"class":105},"\"total_reward:\"",[36,2042,478],{"class":42},[36,2044,1976],{"class":112},[36,2046,2047],{"class":42},"(total_reward, ",[36,2049,1982],{"class":112},[36,2051,2005],{"class":42},[36,2053,2055],{"class":38,"line":2054},117,[36,2056,659],{"emptyLinePlaceholder":658},[36,2058,2060],{"class":38,"line":2059},118,[36,2061,659],{"emptyLinePlaceholder":658},[36,2063,2065,2068,2071,2074,2077],{"class":38,"line":2064},119,[36,2066,2067],{"class":46},"if",[36,2069,2070],{"class":112}," __name__",[36,2072,2073],{"class":46}," ==",[36,2075,2076],{"class":105}," \"__main__\"",[36,2078,888],{"class":42},[36,2080,2082],{"class":38,"line":2081},120,[36,2083,2084],{"class":42},"    main()\n",[19,2086,2087],{},"保存为：",[26,2089,2091],{"className":92,"code":2090,"language":94,"meta":31,"style":31},"touch ch8_gym_env.py\n",[33,2092,2093],{"__ignoreMap":31},[36,2094,2095,2098],{"class":38,"line":39},[36,2096,2097],{"class":101},"touch",[36,2099,2100],{"class":105}," ch8_gym_env.py\n",[19,2102,2103],{},"运行：",[26,2105,2107],{"className":92,"code":2106,"language":94,"meta":31,"style":31},"python ch8_gym_env.py\n",[33,2108,2109],{"__ignoreMap":31},[36,2110,2111,2113],{"class":38,"line":39},[36,2112,30],{"class":101},[36,2114,2100],{"class":105},[318,2116,2117],{"id":2117},"代码逐段解释",[19,2119,2120],{},"继承 Gymnasium 环境：",[26,2122,2124],{"className":28,"code":2123,"language":30,"meta":31,"style":31},"class ReacherEnv(gym.Env):\n",[33,2125,2126],{"__ignoreMap":31},[36,2127,2128,2130,2132,2134,2136,2138,2140],{"class":38,"line":39},[36,2129,832],{"class":46},[36,2131,835],{"class":101},[36,2133,495],{"class":42},[36,2135,223],{"class":101},[36,2137,842],{"class":42},[36,2139,845],{"class":101},[36,2141,848],{"class":42},[19,2143,2144],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,2146,2147],{},"初始化模型：",[26,2149,2151],{"className":28,"code":2150,"language":30,"meta":31,"style":31},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[33,2152,2153,2167],{"__ignoreMap":31},[36,2154,2155,2157,2159,2161,2163,2165],{"class":38,"line":39},[36,2156,457],{"class":112},[36,2158,912],{"class":42},[36,2160,47],{"class":46},[36,2162,917],{"class":42},[36,2164,670],{"class":112},[36,2166,922],{"class":42},[36,2168,2169,2171,2173,2175,2177,2179],{"class":38,"line":53},[36,2170,457],{"class":112},[36,2172,930],{"class":42},[36,2174,47],{"class":46},[36,2176,935],{"class":42},[36,2178,457],{"class":112},[36,2180,940],{"class":42},[19,2182,2183,2184,2186],{},"这和前面章节一样，只是现在放到了类的 ",[33,2185,900],{}," 里。",[19,2188,2189],{},"缓存 site ID：",[26,2191,2193],{"className":28,"code":2192,"language":30,"meta":31,"style":31},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[33,2194,2195,2210],{"__ignoreMap":31},[36,2196,2197,2199,2201,2203,2205,2208],{"class":38,"line":39},[36,2198,457],{"class":112},[36,2200,953],{"class":42},[36,2202,47],{"class":46},[36,2204,958],{"class":42},[36,2206,2207],{"class":112},"...",[36,2209,922],{"class":42},[36,2211,2212,2214,2216,2218,2220,2222],{"class":38,"line":53},[36,2213,457],{"class":112},[36,2215,976],{"class":42},[36,2217,47],{"class":46},[36,2219,958],{"class":42},[36,2221,2207],{"class":112},[36,2223,922],{"class":42},[19,2225,2226],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,2228,2229],{},"reset：",[26,2231,2233],{"className":28,"code":2232,"language":30,"meta":31,"style":31},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[33,2234,2235],{"__ignoreMap":31},[36,2236,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267,2269],{"class":38,"line":39},[36,2238,1820],{"class":46},[36,2240,1366],{"class":101},[36,2242,1369],{"class":42},[36,2244,1372],{"class":46},[36,2246,1375],{"class":42},[36,2248,1378],{"class":112},[36,2250,1381],{"class":46},[36,2252,1384],{"class":112},[36,2254,673],{"class":46},[36,2256,1384],{"class":112},[36,2258,1391],{"class":42},[36,2260,1394],{"class":112},[36,2262,1381],{"class":46},[36,2264,1384],{"class":112},[36,2266,673],{"class":46},[36,2268,1384],{"class":112},[36,2270,848],{"class":42},[19,2272,2273,2276],{},[33,2274,2275],{},"reset"," 做四件事：",[211,2278,2279,2282,2285,2288],{},[214,2280,2281],{},"设置随机种子。",[214,2283,2284],{},"重置 MuJoCo data。",[214,2286,2287],{},"随机初始化关节角。",[214,2289,2290],{},"返回初始观测和 info。",[19,2292,2293],{},"step：",[26,2295,2297],{"className":28,"code":2296,"language":30,"meta":31,"style":31},"def step(self, action):\n",[33,2298,2299],{"__ignoreMap":31},[36,2300,2301,2303,2305],{"class":38,"line":39},[36,2302,1820],{"class":46},[36,2304,1549],{"class":101},[36,2306,1552],{"class":42},[19,2308,2309,2312],{},[33,2310,2311],{},"step"," 做六件事：",[211,2314,2315,2318,2324,2327,2330,2333],{},[214,2316,2317],{},"检查并裁剪 action。",[214,2319,2320,2321,224],{},"写入 ",[33,2322,2323],{},"self.data.ctrl",[214,2325,2326],{},"连续推进若干个 MuJoCo 物理步。",[214,2328,2329],{},"计算新观测。",[214,2331,2332],{},"计算奖励和结束条件。",[214,2334,2335],{},"返回 Gymnasium 标准五元组。",[318,2337,2338],{"id":2338},"代码逐行细讲",[26,2340,2342],{"className":28,"code":2341,"language":30,"meta":31,"style":31},"import gymnasium as gym\n",[33,2343,2344],{"__ignoreMap":31},[36,2345,2346,2348,2350,2352],{"class":38,"line":39},[36,2347,611],{"class":46},[36,2349,614],{"class":42},[36,2351,617],{"class":46},[36,2353,620],{"class":42},[19,2355,2356,2357,2359,2360,2363],{},"导入 Gymnasium，并起别名 ",[33,2358,223],{},"。后面写 ",[33,2361,2362],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[26,2365,2367],{"className":28,"code":2366,"language":30,"meta":31,"style":31},"from gymnasium import spaces\n",[33,2368,2369],{"__ignoreMap":31},[36,2370,2371,2373,2375,2377],{"class":38,"line":39},[36,2372,645],{"class":46},[36,2374,614],{"class":42},[36,2376,611],{"class":46},[36,2378,652],{"class":42},[19,2380,2381,2382,2385],{},"导入空间定义工具。",[33,2383,2384],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[26,2387,2388],{"className":28,"code":2123,"language":30,"meta":31,"style":31},[33,2389,2390],{"__ignoreMap":31},[36,2391,2392,2394,2396,2398,2400,2402,2404],{"class":38,"line":39},[36,2393,832],{"class":46},[36,2395,835],{"class":101},[36,2397,495],{"class":42},[36,2399,223],{"class":101},[36,2401,842],{"class":42},[36,2403,845],{"class":101},[36,2405,848],{"class":42},[19,2407,2408,2409,2412,2413,2415,2416,324,2418,2420],{},"定义一个类，名字叫 ",[33,2410,2411],{},"ReacherEnv","。括号里的 ",[33,2414,2362],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[33,2417,2275],{},[33,2419,2311],{}," 这两个核心方法。",[26,2422,2424],{"className":28,"code":2423,"language":30,"meta":31,"style":31},"metadata = {\"render_modes\": []}\n",[33,2425,2426],{"__ignoreMap":31},[36,2427,2428,2431,2433,2435,2437],{"class":38,"line":39},[36,2429,2430],{"class":42},"metadata ",[36,2432,47],{"class":46},[36,2434,859],{"class":42},[36,2436,862],{"class":105},[36,2438,865],{"class":42},[19,2440,2441],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[26,2443,2445],{"className":28,"code":2444,"language":30,"meta":31,"style":31},"def __init__(self) -> None:\n",[33,2446,2447],{"__ignoreMap":31},[36,2448,2449,2451,2453,2455,2457],{"class":38,"line":39},[36,2450,1820],{"class":46},[36,2452,879],{"class":112},[36,2454,882],{"class":42},[36,2456,885],{"class":112},[36,2458,888],{"class":42},[19,2460,2461,2463,2464,224],{},[33,2462,900],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[33,2465,2466],{},"env = ReacherEnv()",[26,2468,2470],{"className":28,"code":2469,"language":30,"meta":31,"style":31},"super().__init__()\n",[33,2471,2472],{"__ignoreMap":31},[36,2473,2474,2477,2479,2481],{"class":38,"line":39},[36,2475,2476],{"class":112},"super",[36,2478,897],{"class":42},[36,2480,900],{"class":112},[36,2482,903],{"class":42},[19,2484,2485,2486,2488],{},"调用父类 ",[33,2487,2362],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[26,2490,2491],{"className":28,"code":2150,"language":30,"meta":31,"style":31},[33,2492,2493,2507],{"__ignoreMap":31},[36,2494,2495,2497,2499,2501,2503,2505],{"class":38,"line":39},[36,2496,457],{"class":112},[36,2498,912],{"class":42},[36,2500,47],{"class":46},[36,2502,917],{"class":42},[36,2504,670],{"class":112},[36,2506,922],{"class":42},[36,2508,2509,2511,2513,2515,2517,2519],{"class":38,"line":53},[36,2510,457],{"class":112},[36,2512,930],{"class":42},[36,2514,47],{"class":46},[36,2516,935],{"class":42},[36,2518,457],{"class":112},[36,2520,940],{"class":42},[19,2522,2523,2524,2526,2527,324,2530,2533],{},"把 MuJoCo 模型和状态保存到 ",[33,2525,457],{}," 上。",[33,2528,2529],{},"self.model",[33,2531,2532],{},"self.data"," 表示这个环境对象自己的模型和状态。",[26,2535,2536],{"className":28,"code":2192,"language":30,"meta":31,"style":31},[33,2537,2538,2552],{"__ignoreMap":31},[36,2539,2540,2542,2544,2546,2548,2550],{"class":38,"line":39},[36,2541,457],{"class":112},[36,2543,953],{"class":42},[36,2545,47],{"class":46},[36,2547,958],{"class":42},[36,2549,2207],{"class":112},[36,2551,922],{"class":42},[36,2553,2554,2556,2558,2560,2562,2564],{"class":38,"line":53},[36,2555,457],{"class":112},[36,2557,976],{"class":42},[36,2559,47],{"class":46},[36,2561,958],{"class":42},[36,2563,2207],{"class":112},[36,2565,922],{"class":42},[19,2567,2568,2569,324,2572,2575],{},"提前查好 tip 和 target 的 site ID。这样 ",[33,2570,2571],{},"_get_obs",[33,2573,2574],{},"_get_reward"," 里就不用每次按名字查找。",[26,2577,2579],{"className":28,"code":2578,"language":30,"meta":31,"style":31},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[33,2580,2581,2591,2601],{"__ignoreMap":31},[36,2582,2583,2585,2587,2589],{"class":38,"line":39},[36,2584,457],{"class":112},[36,2586,581],{"class":42},[36,2588,47],{"class":46},[36,2590,586],{"class":112},[36,2592,2593,2595,2597,2599],{"class":38,"line":53},[36,2594,457],{"class":112},[36,2596,1057],{"class":42},[36,2598,47],{"class":46},[36,2600,1062],{"class":112},[36,2602,2603,2605,2607,2609],{"class":38,"line":196},[36,2604,457],{"class":112},[36,2606,409],{"class":42},[36,2608,47],{"class":46},[36,2610,1074],{"class":112},[19,2612,2613,2616,2617,2620,2621,2624],{},[33,2614,2615],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[33,2618,2619],{},"max_steps"," 是一个 episode 最多运行多少步。",[33,2622,2623],{},"steps"," 记录当前 episode 已经走了多少步。",[26,2626,2627],{"className":28,"code":450,"language":30,"meta":31,"style":31},[33,2628,2629],{"__ignoreMap":31},[36,2630,2631,2633,2635,2637,2639,2641,2643,2645,2647,2649,2651,2653,2655,2657,2659,2661,2663,2665,2667,2669],{"class":38,"line":39},[36,2632,457],{"class":112},[36,2634,460],{"class":42},[36,2636,47],{"class":46},[36,2638,465],{"class":42},[36,2640,469],{"class":468},[36,2642,472],{"class":46},[36,2644,475],{"class":112},[36,2646,478],{"class":42},[36,2648,481],{"class":468},[36,2650,47],{"class":46},[36,2652,475],{"class":112},[36,2654,478],{"class":42},[36,2656,490],{"class":468},[36,2658,47],{"class":46},[36,2660,495],{"class":42},[36,2662,498],{"class":112},[36,2664,501],{"class":42},[36,2666,504],{"class":468},[36,2668,47],{"class":46},[36,2670,509],{"class":42},[19,2672,2673,2674,2677,2678,324,2681,2684],{},"定义动作空间。",[33,2675,2676],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[33,2679,2680],{},"low=-1.0",[33,2682,2683],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[26,2686,2687],{"className":28,"code":519,"language":30,"meta":31,"style":31},[33,2688,2689],{"__ignoreMap":31},[36,2690,2691,2693,2695,2697,2699,2701,2703,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725],{"class":38,"line":39},[36,2692,457],{"class":112},[36,2694,528],{"class":42},[36,2696,47],{"class":46},[36,2698,465],{"class":42},[36,2700,469],{"class":468},[36,2702,472],{"class":46},[36,2704,539],{"class":42},[36,2706,481],{"class":468},[36,2708,47],{"class":46},[36,2710,539],{"class":42},[36,2712,490],{"class":468},[36,2714,47],{"class":46},[36,2716,495],{"class":42},[36,2718,554],{"class":112},[36,2720,501],{"class":42},[36,2722,504],{"class":468},[36,2724,47],{"class":46},[36,2726,509],{"class":42},[19,2728,2729,2730,2733,2734,2737],{},"定义观测空间。",[33,2731,2732],{},"shape=(10,)"," 表示观测是 10 个数。",[33,2735,2736],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[26,2739,2741],{"className":28,"code":2740,"language":30,"meta":31,"style":31},"def _get_obs(self) -> np.ndarray:\n",[33,2742,2743],{"__ignoreMap":31},[36,2744,2745,2747,2749],{"class":38,"line":39},[36,2746,1820],{"class":46},[36,2748,1174],{"class":101},[36,2750,1177],{"class":42},[19,2752,2753,2754,2757],{},"定义内部函数，用来生成观测。函数名前面的 ",[33,2755,2756],{},"_"," 是习惯写法，表示这是类内部使用的辅助函数。",[26,2759,2761],{"className":28,"code":2760,"language":30,"meta":31,"style":31},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[33,2762,2763,2778],{"__ignoreMap":31},[36,2764,2765,2768,2770,2772,2774,2776],{"class":38,"line":39},[36,2766,2767],{"class":42},"tip ",[36,2769,47],{"class":46},[36,2771,406],{"class":112},[36,2773,1190],{"class":42},[36,2775,457],{"class":112},[36,2777,1195],{"class":42},[36,2779,2780,2783,2785,2787,2789,2791],{"class":38,"line":53},[36,2781,2782],{"class":42},"target ",[36,2784,47],{"class":46},[36,2786,406],{"class":112},[36,2788,1190],{"class":42},[36,2790,457],{"class":112},[36,2792,1212],{"class":42},[19,2794,2795],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[26,2797,2799],{"className":28,"code":2798,"language":30,"meta":31,"style":31},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[33,2800,2801,2818],{"__ignoreMap":31},[36,2802,2803,2806,2808,2810,2812,2814,2816],{"class":38,"line":39},[36,2804,2805],{"class":42},"obs ",[36,2807,47],{"class":46},[36,2809,1223],{"class":42},[36,2811,457],{"class":112},[36,2813,1228],{"class":42},[36,2815,457],{"class":112},[36,2817,1233],{"class":42},[36,2819,2820,2823],{"class":38,"line":53},[36,2821,2822],{"class":46},"return",[36,2824,1242],{"class":42},[19,2826,2827,2828,2831,2832,2834],{},"拼接观测，并转换成 ",[33,2829,2830],{},"float32","。很多强化学习库默认使用 ",[33,2833,2830],{},"，所以这里主动转换。",[26,2836,2837],{"className":28,"code":2232,"language":30,"meta":31,"style":31},[33,2838,2839],{"__ignoreMap":31},[36,2840,2841,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861,2863,2865,2867,2869,2871,2873],{"class":38,"line":39},[36,2842,1820],{"class":46},[36,2844,1366],{"class":101},[36,2846,1369],{"class":42},[36,2848,1372],{"class":46},[36,2850,1375],{"class":42},[36,2852,1378],{"class":112},[36,2854,1381],{"class":46},[36,2856,1384],{"class":112},[36,2858,673],{"class":46},[36,2860,1384],{"class":112},[36,2862,1391],{"class":42},[36,2864,1394],{"class":112},[36,2866,1381],{"class":46},[36,2868,1384],{"class":112},[36,2870,673],{"class":46},[36,2872,1384],{"class":112},[36,2874,848],{"class":42},[19,2876,2877,2878,2880,2881,2884],{},"定义 reset。",[33,2879,1415],{}," 用来控制随机数，保证实验可以复现。",[33,2882,2883],{},"options"," 用来接收额外配置，本章暂时不用。",[26,2886,2888],{"className":28,"code":2887,"language":30,"meta":31,"style":31},"super().reset(seed=seed)\n",[33,2889,2890],{"__ignoreMap":31},[36,2891,2892,2894,2896,2898,2900],{"class":38,"line":39},[36,2893,2476],{"class":112},[36,2895,1412],{"class":42},[36,2897,1415],{"class":468},[36,2899,47],{"class":46},[36,2901,1420],{"class":42},[19,2903,2904,2905,2908],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[33,2906,2907],{},"self.np_random"," 生成可复现的随机数。",[26,2910,2912],{"className":28,"code":2911,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(self.model, self.data)\n",[33,2913,2914],{"__ignoreMap":31},[36,2915,2916,2919,2921,2923,2925],{"class":38,"line":39},[36,2917,2918],{"class":42},"mujoco.mj_resetData(",[36,2920,457],{"class":112},[36,2922,1431],{"class":42},[36,2924,457],{"class":112},[36,2926,1436],{"class":42},[19,2928,2929],{},"把 MuJoCo 状态重置到默认状态。",[26,2931,2933],{"className":28,"code":2932,"language":30,"meta":31,"style":31},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[33,2934,2935],{"__ignoreMap":31},[36,2936,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955,2957,2959,2961,2963,2965,2967,2969],{"class":38,"line":39},[36,2938,457],{"class":112},[36,2940,1449],{"class":42},[36,2942,47],{"class":46},[36,2944,406],{"class":112},[36,2946,1456],{"class":42},[36,2948,469],{"class":468},[36,2950,472],{"class":46},[36,2952,1463],{"class":112},[36,2954,478],{"class":42},[36,2956,481],{"class":468},[36,2958,47],{"class":46},[36,2960,1463],{"class":112},[36,2962,478],{"class":42},[36,2964,1476],{"class":468},[36,2966,47],{"class":46},[36,2968,457],{"class":112},[36,2970,1483],{"class":42},[19,2972,2287,2973,2976,2977,2980,2981,2984],{},[33,2974,2975],{},"[:]"," 表示修改整个数组。",[33,2978,2979],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[33,2982,2983],{},"model.nq"," 个随机数，每个数在 -0.1 到 0.1 之间。",[26,2986,2988],{"className":28,"code":2987,"language":30,"meta":31,"style":31},"self.data.qvel[:] = 0.0\n",[33,2989,2990],{"__ignoreMap":31},[36,2991,2992,2994,2996,2998],{"class":38,"line":39},[36,2993,457],{"class":112},[36,2995,1491],{"class":42},[36,2997,47],{"class":46},[36,2999,1496],{"class":112},[19,3001,3002],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[26,3004,3006],{"className":28,"code":3005,"language":30,"meta":31,"style":31},"self.steps = 0\nreturn self._get_obs(), {}\n",[33,3007,3008,3018],{"__ignoreMap":31},[36,3009,3010,3012,3014,3016],{"class":38,"line":39},[36,3011,457],{"class":112},[36,3013,409],{"class":42},[36,3015,47],{"class":46},[36,3017,1074],{"class":112},[36,3019,3020,3022,3024],{"class":38,"line":53},[36,3021,2822],{"class":46},[36,3023,406],{"class":112},[36,3025,1536],{"class":42},[19,3027,3028],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[26,3030,3031],{"className":28,"code":2296,"language":30,"meta":31,"style":31},[33,3032,3033],{"__ignoreMap":31},[36,3034,3035,3037,3039],{"class":38,"line":39},[36,3036,1820],{"class":46},[36,3038,1549],{"class":101},[36,3040,1552],{"class":42},[19,3042,3043],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[26,3045,3047],{"className":28,"code":3046,"language":30,"meta":31,"style":31},"action = np.asarray(action, dtype=np.float32)\n",[33,3048,3049],{"__ignoreMap":31},[36,3050,3051,3054,3056,3058,3060,3062],{"class":38,"line":39},[36,3052,3053],{"class":42},"action ",[36,3055,47],{"class":46},[36,3057,1563],{"class":42},[36,3059,504],{"class":468},[36,3061,47],{"class":46},[36,3063,509],{"class":42},[19,3065,3066,3067,224],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[33,3068,2830],{},[26,3070,3072],{"className":28,"code":3071,"language":30,"meta":31,"style":31},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[33,3073,3074],{"__ignoreMap":31},[36,3075,3076,3078,3080,3082,3084,3086,3088],{"class":38,"line":39},[36,3077,3053],{"class":42},[36,3079,47],{"class":46},[36,3081,1579],{"class":42},[36,3083,457],{"class":112},[36,3085,1584],{"class":42},[36,3087,457],{"class":112},[36,3089,1589],{"class":42},[19,3091,3092],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[26,3094,3096],{"className":28,"code":3095,"language":30,"meta":31,"style":31},"self.data.ctrl[:] = action\n",[33,3097,3098],{"__ignoreMap":31},[36,3099,3100,3102,3104,3106],{"class":38,"line":39},[36,3101,457],{"class":112},[36,3103,1602],{"class":42},[36,3105,47],{"class":46},[36,3107,1607],{"class":42},[19,3109,3110],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[26,3112,3114],{"className":28,"code":3113,"language":30,"meta":31,"style":31},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[33,3115,3116,3133],{"__ignoreMap":31},[36,3117,3118,3121,3123,3125,3127,3129,3131],{"class":38,"line":39},[36,3119,3120],{"class":46},"for",[36,3122,1616],{"class":42},[36,3124,1619],{"class":46},[36,3126,1622],{"class":112},[36,3128,495],{"class":42},[36,3130,457],{"class":112},[36,3132,1629],{"class":42},[36,3134,3135,3138,3140,3142,3144],{"class":38,"line":53},[36,3136,3137],{"class":42},"    mujoco.mj_step(",[36,3139,457],{"class":112},[36,3141,1431],{"class":42},[36,3143,457],{"class":112},[36,3145,1436],{"class":42},[19,3147,3148,3149,3152,3153,3155,3156,224],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[33,3150,3151],{},"frame_skip=5","，所以外部调用一次 ",[33,3154,592],{},"，内部实际执行 5 次 ",[33,3157,596],{},[26,3159,3161],{"className":28,"code":3160,"language":30,"meta":31,"style":31},"self.steps += 1\n",[33,3162,3163],{"__ignoreMap":31},[36,3164,3165,3167,3169,3171],{"class":38,"line":39},[36,3166,457],{"class":112},[36,3168,409],{"class":42},[36,3170,1658],{"class":46},[36,3172,1661],{"class":112},[19,3174,3175],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[26,3177,3179],{"className":28,"code":3178,"language":30,"meta":31,"style":31},"obs = self._get_obs()\nreward = self._get_reward()\n",[33,3180,3181,3191],{"__ignoreMap":31},[36,3182,3183,3185,3187,3189],{"class":38,"line":39},[36,3184,2805],{"class":42},[36,3186,47],{"class":46},[36,3188,406],{"class":112},[36,3190,1678],{"class":42},[36,3192,3193,3196,3198,3200],{"class":38,"line":53},[36,3194,3195],{"class":42},"reward ",[36,3197,47],{"class":46},[36,3199,406],{"class":112},[36,3201,1691],{"class":42},[19,3203,3204],{},"计算新的观测和奖励。",[26,3206,3208],{"className":28,"code":3207,"language":30,"meta":31,"style":31},"dist = float(np.linalg.norm(tip - target))\n",[33,3209,3210],{"__ignoreMap":31},[36,3211,3212,3214,3216,3218,3220,3222],{"class":38,"line":39},[36,3213,1348],{"class":42},[36,3215,47],{"class":46},[36,3217,1341],{"class":112},[36,3219,1738],{"class":42},[36,3221,1308],{"class":46},[36,3223,1743],{"class":42},[19,3225,3226],{},"计算末端到目标的距离，并转换成 Python float。",[26,3228,3229],{"className":28,"code":378,"language":30,"meta":31,"style":31},[33,3230,3231,3243],{"__ignoreMap":31},[36,3232,3233,3235,3237,3239,3241],{"class":38,"line":39},[36,3234,385],{"class":42},[36,3236,47],{"class":46},[36,3238,390],{"class":42},[36,3240,393],{"class":46},[36,3242,396],{"class":112},[36,3244,3245,3247,3249,3251,3253,3255,3257],{"class":38,"line":53},[36,3246,401],{"class":42},[36,3248,47],{"class":46},[36,3250,406],{"class":112},[36,3252,409],{"class":42},[36,3254,412],{"class":46},[36,3256,406],{"class":112},[36,3258,417],{"class":42},[19,3260,3261],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[26,3263,3265],{"className":28,"code":3264,"language":30,"meta":31,"style":31},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[33,3266,3267,3280],{"__ignoreMap":31},[36,3268,3269,3272,3274,3276,3278],{"class":38,"line":39},[36,3270,3271],{"class":42},"info ",[36,3273,47],{"class":46},[36,3275,859],{"class":42},[36,3277,1793],{"class":105},[36,3279,1796],{"class":42},[36,3281,3282,3284],{"class":38,"line":53},[36,3283,2822],{"class":46},[36,3285,1804],{"class":42},[19,3287,3288,3291],{},[33,3289,3290],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[26,3293,3295],{"className":28,"code":3294,"language":30,"meta":31,"style":31},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[33,3296,3297,3306],{"__ignoreMap":31},[36,3298,3299,3302,3304],{"class":38,"line":39},[36,3300,3301],{"class":42},"env ",[36,3303,47],{"class":46},[36,3305,1841],{"class":42},[36,3307,3308,3310,3312,3314,3316,3318,3320],{"class":38,"line":53},[36,3309,43],{"class":42},[36,3311,47],{"class":46},[36,3313,1852],{"class":42},[36,3315,1415],{"class":468},[36,3317,47],{"class":46},[36,3319,1859],{"class":112},[36,3321,922],{"class":42},[19,3323,3324,3325,3328],{},"创建环境并重置。",[33,3326,3327],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[26,3330,3332],{"className":28,"code":3331,"language":30,"meta":31,"style":31},"action = env.action_space.sample()\n",[33,3333,3334],{"__ignoreMap":31},[36,3335,3336,3338,3340],{"class":38,"line":39},[36,3337,3053],{"class":42},[36,3339,47],{"class":46},[36,3341,1933],{"class":42},[19,3343,3344],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,3346,3348],{"id":3347},"_5运行结果说明","5.运行结果说明",[19,3350,3351],{},"你会看到:",[26,3353,3356],{"className":3354,"code":3355,"language":80,"meta":31},[78],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[33,3357,3355],{"__ignoreMap":31},[19,3359,3360],{},"这个环境已经具备强化学习环境的基本结构。",[19,3362,3363],{},"主函数里使用随机动作：",[26,3365,3366],{"className":28,"code":3331,"language":30,"meta":31,"style":31},[33,3367,3368],{"__ignoreMap":31},[36,3369,3370,3372,3374],{"class":38,"line":39},[36,3371,3053],{"class":42},[36,3373,47],{"class":46},[36,3375,1933],{"class":42},[19,3377,3378],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,3380,3382],{"id":3381},"_6验证步骤","6.验证步骤",[211,3384,3385,3388,3394,3404,3414,3425,3431],{},[214,3386,3387],{},"运行程序。",[214,3389,3390,3391,224],{},"确认 ",[33,3392,3393],{},"obs.shape == (10,)",[214,3395,3396,3397,3400,3401,224],{},"打印 ",[33,3398,3399],{},"env.action_space","，应类似 ",[33,3402,3403],{},"Box(-1.0, 1.0, (2,), float32)",[214,3405,3406,3407,3410,3411,224],{},"修改 ",[33,3408,3409],{},"self.max_steps = 10","，确认环境会更快 ",[33,3412,3413],{},"truncated=True",[214,3415,3416,3417,3420,3421,3424],{},"把 ",[33,3418,3419],{},"terminated = dist \u003C 0.05"," 改成 ",[33,3422,3423],{},"dist \u003C 0.2","，观察是否更容易结束。",[214,3426,3416,3427,3430],{},[33,3428,3429],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[214,3432,3433,3434,3436,3437,3440],{},"在 ",[33,3435,3290],{}," 里加入 ",[33,3438,3439],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,3442,3444],{"id":3443},"_7常见错误与解决方案","7.常见错误与解决方案",[318,3446,3448],{"id":3447},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,3450,3451,3452,3454],{},"Gymnasium 的 ",[33,3453,2311],{}," 返回 5 个值:",[26,3456,3458],{"className":28,"code":3457,"language":30,"meta":31,"style":31},"obs, reward, terminated, truncated, info\n",[33,3459,3460],{"__ignoreMap":31},[36,3461,3462],{"class":38,"line":39},[36,3463,3457],{"class":42},[19,3465,3466],{},"不是旧 Gym 的 4 个值。",[318,3468,3470,3473],{"id":3469},"datactrl-action-维度错误",[33,3471,3472],{},"data.ctrl[:] = action"," 维度错误",[19,3475,3476],{},"检查:",[26,3478,3480],{"className":28,"code":3479,"language":30,"meta":31,"style":31},"print(self.model.nu)\nprint(action.shape)\n",[33,3481,3482,3494],{"__ignoreMap":31},[36,3483,3484,3487,3489,3491],{"class":38,"line":39},[36,3485,3486],{"class":112},"print",[36,3488,495],{"class":42},[36,3490,457],{"class":112},[36,3492,3493],{"class":42},".model.nu)\n",[36,3495,3496,3498],{"class":38,"line":53},[36,3497,3486],{"class":112},[36,3499,3500],{"class":42},"(action.shape)\n",[19,3502,3503],{},"两者必须匹配。",[318,3505,3507],{"id":3506},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,3509,3510],{},"解决:",[26,3512,3514],{"className":28,"code":3513,"language":30,"meta":31,"style":31},"mujoco.mj_forward(self.model, self.data)\n",[33,3515,3516],{"__ignoreMap":31},[36,3517,3518,3521,3523,3525,3527],{"class":38,"line":39},[36,3519,3520],{"class":42},"mujoco.mj_forward(",[36,3522,457],{"class":112},[36,3524,1431],{"class":42},[36,3526,457],{"class":112},[36,3528,1436],{"class":42},[318,3530,3532,3534],{"id":3531},"observation_space-维度和-obs-不一致",[33,3533,294],{}," 维度和 obs 不一致",[19,3536,3537],{},"检查：",[26,3539,3541],{"className":28,"code":3540,"language":30,"meta":31,"style":31},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[33,3542,3543,3553,3560],{"__ignoreMap":31},[36,3544,3545,3547,3549,3551],{"class":38,"line":39},[36,3546,2805],{"class":42},[36,3548,47],{"class":46},[36,3550,406],{"class":112},[36,3552,1678],{"class":42},[36,3554,3555,3557],{"class":38,"line":53},[36,3556,3486],{"class":112},[36,3558,3559],{"class":42},"(obs.shape)\n",[36,3561,3562,3564,3566,3568],{"class":38,"line":196},[36,3563,3486],{"class":112},[36,3565,495],{"class":42},[36,3567,457],{"class":112},[36,3569,3570],{"class":42},".observation_space.shape)\n",[19,3572,3573],{},"两者必须一致。本章观测是：",[26,3575,3578],{"className":3576,"code":3577,"language":80,"meta":31},[78],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[33,3579,3577],{"__ignoreMap":31},[318,3581,3583],{"id":3582},"action-超过范围","action 超过范围",[19,3585,3586],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[26,3588,3589],{"className":28,"code":3071,"language":30,"meta":31,"style":31},[33,3590,3591],{"__ignoreMap":31},[36,3592,3593,3595,3597,3599,3601,3603,3605],{"class":38,"line":39},[36,3594,3053],{"class":42},[36,3596,47],{"class":46},[36,3598,1579],{"class":42},[36,3600,457],{"class":112},[36,3602,1584],{"class":42},[36,3604,457],{"class":112},[36,3606,1589],{"class":42},[19,3608,3609,3610,224],{},"这能避免无效动作直接写入 ",[33,3611,3612],{},"data.ctrl",[318,3614,3616],{"id":3615},"忘记返回-info","忘记返回 info",[19,3618,3451,3619,324,3621,3623],{},[33,3620,2275],{},[33,3622,2311],{}," 都会返回 info：",[26,3625,3626],{"className":28,"code":29,"language":30,"meta":31,"style":31},[33,3627,3628,3636],{"__ignoreMap":31},[36,3629,3630,3632,3634],{"class":38,"line":39},[36,3631,43],{"class":42},[36,3633,47],{"class":46},[36,3635,50],{"class":42},[36,3637,3638,3640,3642],{"class":38,"line":53},[36,3639,56],{"class":42},[36,3641,47],{"class":46},[36,3643,61],{"class":42},[19,3645,3646,3647,224],{},"即使暂时没有额外信息，也返回 ",[33,3648,3649],{},"{}",[14,3651,3653],{"id":3652},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,3655,3656],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[211,3658,3659,3662,3665,3668,3671,3674],{},[214,3660,3661],{},"更稳定的 reward。",[214,3663,3664],{},"合理的 episode 长度。",[214,3666,3667],{},"可重复的随机目标采样。",[214,3669,3670],{},"render 接口。",[214,3672,3673],{},"环境注册代码。",[214,3675,3676],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,3678,3679],{},"如果只是自己写训练循环，最小形式是：",[26,3681,3683],{"className":28,"code":3682,"language":30,"meta":31,"style":31},"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",[33,3684,3685,3693,3709,3713,3730,3739,3748,3759],{"__ignoreMap":31},[36,3686,3687,3689,3691],{"class":38,"line":39},[36,3688,3301],{"class":42},[36,3690,47],{"class":46},[36,3692,1841],{"class":42},[36,3694,3695,3697,3699,3701,3703,3705,3707],{"class":38,"line":53},[36,3696,43],{"class":42},[36,3698,47],{"class":46},[36,3700,1852],{"class":42},[36,3702,1415],{"class":468},[36,3704,47],{"class":46},[36,3706,1859],{"class":112},[36,3708,922],{"class":42},[36,3710,3711],{"class":38,"line":196},[36,3712,659],{"emptyLinePlaceholder":658},[36,3714,3715,3717,3719,3721,3723,3725,3728],{"class":38,"line":642},[36,3716,3120],{"class":46},[36,3718,1616],{"class":42},[36,3720,1619],{"class":46},[36,3722,1622],{"class":112},[36,3724,495],{"class":42},[36,3726,3727],{"class":112},"1000",[36,3729,848],{"class":42},[36,3731,3732,3735,3737],{"class":38,"line":655},[36,3733,3734],{"class":42},"    action ",[36,3736,47],{"class":46},[36,3738,1933],{"class":42},[36,3740,3741,3744,3746],{"class":38,"line":662},[36,3742,3743],{"class":42},"    obs, reward, terminated, truncated, info ",[36,3745,47],{"class":46},[36,3747,61],{"class":42},[36,3749,3750,3753,3755,3757],{"class":38,"line":667},[36,3751,3752],{"class":46},"    if",[36,3754,2013],{"class":42},[36,3756,2016],{"class":46},[36,3758,2019],{"class":42},[36,3760,3761,3764,3766],{"class":38,"line":679},[36,3762,3763],{"class":42},"        obs, info ",[36,3765,47],{"class":46},[36,3767,50],{"class":42},[14,3769,3771],{"id":3770},"_9本章小结","9.本章小结",[19,3773,3774],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[26,3776,3779],{"className":3777,"code":3778,"language":80,"meta":31},[78],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[33,3780,3778],{"__ignoreMap":31},[19,3782,3783],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[3785,3786,3787],"style",{},"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":31,"searchDepth":53,"depth":53,"links":3789},[3790,3791,3792,3799,3803,3804,3805,3815,3816],{"id":16,"depth":53,"text":17},{"id":85,"depth":53,"text":86},{"id":242,"depth":53,"text":243,"children":3793},[3794,3796,3798],{"id":320,"depth":196,"text":3795},"terminated 和 truncated 的区别",{"id":431,"depth":196,"text":3797},"observation_space 和 action_space",{"id":568,"depth":196,"text":569},{"id":600,"depth":53,"text":601,"children":3800},[3801,3802],{"id":2117,"depth":196,"text":2117},{"id":2338,"depth":196,"text":2338},{"id":3347,"depth":53,"text":3348},{"id":3381,"depth":53,"text":3382},{"id":3443,"depth":53,"text":3444,"children":3806},[3807,3808,3810,3811,3813,3814],{"id":3447,"depth":196,"text":3448},{"id":3469,"depth":196,"text":3809},"data.ctrl[:] = action 维度错误",{"id":3506,"depth":196,"text":3507},{"id":3531,"depth":196,"text":3812},"observation_space 维度和 obs 不一致",{"id":3582,"depth":196,"text":3583},{"id":3615,"depth":196,"text":3616},{"id":3652,"depth":53,"text":3653},{"id":3770,"depth":53,"text":3771},"md",{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":5,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",[3824,8858,9963,11381,14340,15691,17179,18267,26992,27005,27598,27624,27748,27989,28054,28072,28085,28132,28255,28424,28623,28801,29006,29142,29237,29274,29287,29597,30335,31043,31064,32083,33713,33864,33877,33889,34184,53950,53965,53982,54015,56887,80232,96375,96396,96509,96630,97399,98062,98423,98461,98567,98667,98710,98736,98797,100448,100549,100574,101065,101565,102645,102928,103670,104172,104184,106148,107807,109302,110993,112909,114812,116813,119879,120311,120774,121523,124467,124815,124837,125193,128500,128512,128915,128938,129085,129252,129457,129758,130315,130972,132903,134501,135150,136644,138075,139310,141004,142756,145166,145282,146217,146428,147313,148548,148776,148789,149944,152356,154724,158045,160522,162166,163943,165956,169008,171188,173715,175909],{"id":3825,"title":3826,"body":3827,"description":31,"extension":3817,"meta":8853,"navigation":658,"path":8854,"seo":8855,"stem":8856,"__hash__":8857},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":3828,"toc":8825},[3829,3832,3836,3839,3843,3854,3858,3862,3865,3868,3871,3874,3877,3902,3906,3909,3912,3915,3918,3966,3970,3988,3990,4004,4007,4015,4018,4867,4874,4891,4895,4981,4985,4991,5077,5081,5119,5123,5187,5191,5195,5202,5213,5217,5222,5226,5231,5235,5240,5244,5248,5253,5502,5507,5645,5650,5904,5907,5915,5919,5924,6027,6030,6327,6336,6437,6440,6443,6446,6449,6709,6714,6852,6855,7033,7036,7163,7166,7318,7322,7327,7330,7341,7349,7352,7458,7462,7466,7471,7521,7526,7531,7555,7560,7613,7616,7621,7797,7802,8087,8092,8488,8492,8497,8554,8559,8567,8570,8710,8713,8822],[10,3830,3826],{"id":3831},"_1基础入门",[14,3833,3835],{"id":3834},"_11注释","1.1注释",[19,3837,3838],{},"\u002F\u002F或者\u002F* *\u002F",[14,3840,3842],{"id":3841},"_12命名","1.2命名",[211,3844,3845,3848,3851],{},[214,3846,3847],{},"字母数字下划线",[214,3849,3850],{},"开头必须是字母或_",[214,3852,3853],{},"不能使用关键词",[14,3855,3857],{"id":3856},"_13数据类型","1.3数据类型",[318,3859,3861],{"id":3860},"_131整形","1.3.1整形",[19,3863,3864],{},"short 短整形 2",[19,3866,3867],{},"int 整形 4",[19,3869,3870],{},"long 长整形 win4 linux32位4 linux64位8",[19,3872,3873],{},"long long 长长整形 8",[19,3875,3876],{},"利用sizeof可以求数据类型占用的内存空间大小",[26,3878,3882],{"className":3879,"code":3880,"language":3881,"meta":31,"style":31},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[33,3883,3884,3895],{"__ignoreMap":31},[36,3885,3886,3889,3891,3893],{"class":38,"line":39},[36,3887,3888],{"class":46},"sizeof",[36,3890,495],{"class":42},[36,3892,1378],{"class":46},[36,3894,922],{"class":42},[36,3896,3897,3899],{"class":38,"line":53},[36,3898,3888],{"class":46},[36,3900,3901],{"class":42},"(num)\n",[318,3903,3905],{"id":3904},"_132浮点型","1.3.2浮点型",[19,3907,3908],{},"float 单精度 4节 7位有效数字",[19,3910,3911],{},"double 双精度 8节 15-16有效数字",[19,3913,3914],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,3916,3917],{},"注意点：",[26,3919,3921],{"className":3879,"code":3920,"language":3881,"meta":31,"style":31},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[33,3922,3923,3945],{"__ignoreMap":31},[36,3924,3925,3927,3930,3932,3935,3938,3941],{"class":38,"line":39},[36,3926,1260],{"class":46},[36,3928,3929],{"class":42}," f1",[36,3931,47],{"class":46},[36,3933,3934],{"class":112},"3.14",[36,3936,3937],{"class":46},"f",[36,3939,3940],{"class":42},";",[36,3942,3944],{"class":3943},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[36,3946,3947,3949,3952,3954,3956,3959,3961,3963],{"class":38,"line":53},[36,3948,1260],{"class":46},[36,3950,3951],{"class":42}," f2",[36,3953,47],{"class":46},[36,3955,1982],{"class":112},[36,3957,3958],{"class":46},"e",[36,3960,498],{"class":112},[36,3962,3940],{"class":42},[36,3964,3965],{"class":3943}," \u002F\u002F科学记数法\n",[318,3967,3969],{"id":3968},"_133字符型","1.3.3字符型",[26,3971,3973],{"className":3879,"code":3972,"language":3881,"meta":31,"style":31},"char ch='a'\n",[33,3974,3975],{"__ignoreMap":31},[36,3976,3977,3980,3983,3985],{"class":38,"line":39},[36,3978,3979],{"class":46},"char",[36,3981,3982],{"class":42}," ch",[36,3984,47],{"class":46},[36,3986,3987],{"class":105},"'a'\n",[19,3989,3917],{},[211,3991,3992,3995,3998,4001],{},[214,3993,3994],{},"在显示字符型变量时，只能单引号，双引号x",[214,3996,3997],{},"单引号内只能一个字符，不能字符串",[214,3999,4000],{},"c和c++字符型变量只占用一个字符",[214,4002,4003],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,4005,4006],{},"ASCII码大致由以下两部分组成：",[211,4008,4009,4012],{},[214,4010,4011],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[214,4013,4014],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,4016,4017],{},"ASCII码表格：",[248,4019,4020,4061],{},[251,4021,4022],{},[254,4023,4024,4031,4036,4040,4045,4049,4053,4057],{},[257,4025,4026,4030],{},[4027,4028,4029],"strong",{},"ASCII","值",[257,4032,4033],{},[4027,4034,4035],{},"控制字符",[257,4037,4038,4030],{},[4027,4039,4029],{},[257,4041,4042],{},[4027,4043,4044],{},"字符",[257,4046,4047,4030],{},[4027,4048,4029],{},[257,4050,4051],{},[4027,4052,4044],{},[257,4054,4055,4030],{},[4027,4056,4029],{},[257,4058,4059],{},[4027,4060,4044],{},[265,4062,4063,4088,4114,4139,4164,4190,4215,4240,4266,4291,4317,4341,4367,4392,4417,4442,4468,4492,4517,4542,4567,4591,4616,4641,4666,4691,4716,4742,4767,4791,4816,4842],{},[254,4064,4065,4067,4070,4073,4076,4079,4082,4085],{},[270,4066,1859],{},[270,4068,4069],{},"NUT",[270,4071,4072],{},"32",[270,4074,4075],{},"(space)",[270,4077,4078],{},"64",[270,4080,4081],{},"@",[270,4083,4084],{},"96",[270,4086,4087],{},"、",[254,4089,4090,4093,4096,4099,4102,4105,4108,4111],{},[270,4091,4092],{},"1",[270,4094,4095],{},"SOH",[270,4097,4098],{},"33",[270,4100,4101],{},"!",[270,4103,4104],{},"65",[270,4106,4107],{},"A",[270,4109,4110],{},"97",[270,4112,4113],{},"a",[254,4115,4116,4118,4121,4124,4127,4130,4133,4136],{},[270,4117,498],{},[270,4119,4120],{},"STX",[270,4122,4123],{},"34",[270,4125,4126],{},"\"",[270,4128,4129],{},"66",[270,4131,4132],{},"B",[270,4134,4135],{},"98",[270,4137,4138],{},"b",[254,4140,4141,4143,4146,4149,4152,4155,4158,4161],{},[270,4142,1982],{},[270,4144,4145],{},"ETX",[270,4147,4148],{},"35",[270,4150,4151],{},"#",[270,4153,4154],{},"67",[270,4156,4157],{},"C",[270,4159,4160],{},"99",[270,4162,4163],{},"c",[254,4165,4166,4169,4172,4175,4178,4181,4184,4187],{},[270,4167,4168],{},"4",[270,4170,4171],{},"EOT",[270,4173,4174],{},"36",[270,4176,4177],{},"$",[270,4179,4180],{},"68",[270,4182,4183],{},"D",[270,4185,4186],{},"100",[270,4188,4189],{},"d",[254,4191,4192,4195,4198,4201,4204,4207,4210,4213],{},[270,4193,4194],{},"5",[270,4196,4197],{},"ENQ",[270,4199,4200],{},"37",[270,4202,4203],{},"%",[270,4205,4206],{},"69",[270,4208,4209],{},"E",[270,4211,4212],{},"101",[270,4214,3958],{},[254,4216,4217,4220,4223,4226,4229,4232,4235,4238],{},[270,4218,4219],{},"6",[270,4221,4222],{},"ACK",[270,4224,4225],{},"38",[270,4227,4228],{},"&",[270,4230,4231],{},"70",[270,4233,4234],{},"F",[270,4236,4237],{},"102",[270,4239,3937],{},[254,4241,4242,4245,4248,4251,4254,4257,4260,4263],{},[270,4243,4244],{},"7",[270,4246,4247],{},"BEL",[270,4249,4250],{},"39",[270,4252,4253],{},",",[270,4255,4256],{},"71",[270,4258,4259],{},"G",[270,4261,4262],{},"103",[270,4264,4265],{},"g",[254,4267,4268,4271,4274,4277,4279,4282,4285,4288],{},[270,4269,4270],{},"8",[270,4272,4273],{},"BS",[270,4275,4276],{},"40",[270,4278,495],{},[270,4280,4281],{},"72",[270,4283,4284],{},"H",[270,4286,4287],{},"104",[270,4289,4290],{},"h",[254,4292,4293,4296,4299,4302,4305,4308,4311,4314],{},[270,4294,4295],{},"9",[270,4297,4298],{},"HT",[270,4300,4301],{},"41",[270,4303,4304],{},")",[270,4306,4307],{},"73",[270,4309,4310],{},"I",[270,4312,4313],{},"105",[270,4315,4316],{},"i",[254,4318,4319,4321,4324,4327,4329,4332,4335,4338],{},[270,4320,554],{},[270,4322,4323],{},"LF",[270,4325,4326],{},"42",[270,4328,1372],{},[270,4330,4331],{},"74",[270,4333,4334],{},"J",[270,4336,4337],{},"106",[270,4339,4340],{},"j",[254,4342,4343,4346,4349,4352,4355,4358,4361,4364],{},[270,4344,4345],{},"11",[270,4347,4348],{},"VT",[270,4350,4351],{},"43",[270,4353,4354],{},"+",[270,4356,4357],{},"75",[270,4359,4360],{},"K",[270,4362,4363],{},"107",[270,4365,4366],{},"k",[254,4368,4369,4372,4375,4378,4380,4383,4386,4389],{},[270,4370,4371],{},"12",[270,4373,4374],{},"FF",[270,4376,4377],{},"44",[270,4379,4253],{},[270,4381,4382],{},"76",[270,4384,4385],{},"L",[270,4387,4388],{},"108",[270,4390,4391],{},"l",[254,4393,4394,4397,4400,4403,4405,4408,4411,4414],{},[270,4395,4396],{},"13",[270,4398,4399],{},"CR",[270,4401,4402],{},"45",[270,4404,1308],{},[270,4406,4407],{},"77",[270,4409,4410],{},"M",[270,4412,4413],{},"109",[270,4415,4416],{},"m",[254,4418,4419,4422,4425,4428,4430,4433,4436,4439],{},[270,4420,4421],{},"14",[270,4423,4424],{},"SO",[270,4426,4427],{},"46",[270,4429,842],{},[270,4431,4432],{},"78",[270,4434,4435],{},"N",[270,4437,4438],{},"110",[270,4440,4441],{},"n",[254,4443,4444,4447,4450,4453,4456,4459,4462,4465],{},[270,4445,4446],{},"15",[270,4448,4449],{},"SI",[270,4451,4452],{},"47",[270,4454,4455],{},"\u002F",[270,4457,4458],{},"79",[270,4460,4461],{},"O",[270,4463,4464],{},"111",[270,4466,4467],{},"o",[254,4469,4470,4473,4476,4479,4481,4484,4487,4490],{},[270,4471,4472],{},"16",[270,4474,4475],{},"DLE",[270,4477,4478],{},"48",[270,4480,1859],{},[270,4482,4483],{},"80",[270,4485,4486],{},"P",[270,4488,4489],{},"112",[270,4491,19],{},[254,4493,4494,4497,4500,4503,4505,4508,4511,4514],{},[270,4495,4496],{},"17",[270,4498,4499],{},"DCI",[270,4501,4502],{},"49",[270,4504,4092],{},[270,4506,4507],{},"81",[270,4509,4510],{},"Q",[270,4512,4513],{},"113",[270,4515,4516],{},"q",[254,4518,4519,4522,4525,4528,4530,4533,4536,4539],{},[270,4520,4521],{},"18",[270,4523,4524],{},"DC2",[270,4526,4527],{},"50",[270,4529,498],{},[270,4531,4532],{},"82",[270,4534,4535],{},"R",[270,4537,4538],{},"114",[270,4540,4541],{},"r",[254,4543,4544,4547,4550,4553,4555,4558,4561,4564],{},[270,4545,4546],{},"19",[270,4548,4549],{},"DC3",[270,4551,4552],{},"51",[270,4554,1982],{},[270,4556,4557],{},"83",[270,4559,4560],{},"S",[270,4562,4563],{},"115",[270,4565,4566],{},"s",[254,4568,4569,4571,4574,4577,4579,4582,4585,4588],{},[270,4570,1921],{},[270,4572,4573],{},"DC4",[270,4575,4576],{},"52",[270,4578,4168],{},[270,4580,4581],{},"84",[270,4583,4584],{},"T",[270,4586,4587],{},"116",[270,4589,4590],{},"t",[254,4592,4593,4596,4599,4602,4604,4607,4610,4613],{},[270,4594,4595],{},"21",[270,4597,4598],{},"NAK",[270,4600,4601],{},"53",[270,4603,4194],{},[270,4605,4606],{},"85",[270,4608,4609],{},"U",[270,4611,4612],{},"117",[270,4614,4615],{},"u",[254,4617,4618,4621,4624,4627,4629,4632,4635,4638],{},[270,4619,4620],{},"22",[270,4622,4623],{},"SYN",[270,4625,4626],{},"54",[270,4628,4219],{},[270,4630,4631],{},"86",[270,4633,4634],{},"V",[270,4636,4637],{},"118",[270,4639,4640],{},"v",[254,4642,4643,4646,4649,4652,4654,4657,4660,4663],{},[270,4644,4645],{},"23",[270,4647,4648],{},"TB",[270,4650,4651],{},"55",[270,4653,4244],{},[270,4655,4656],{},"87",[270,4658,4659],{},"W",[270,4661,4662],{},"119",[270,4664,4665],{},"w",[254,4667,4668,4671,4674,4677,4679,4682,4685,4688],{},[270,4669,4670],{},"24",[270,4672,4673],{},"CAN",[270,4675,4676],{},"56",[270,4678,4270],{},[270,4680,4681],{},"88",[270,4683,4684],{},"X",[270,4686,4687],{},"120",[270,4689,4690],{},"x",[254,4692,4693,4696,4699,4702,4704,4707,4710,4713],{},[270,4694,4695],{},"25",[270,4697,4698],{},"EM",[270,4700,4701],{},"57",[270,4703,4295],{},[270,4705,4706],{},"89",[270,4708,4709],{},"Y",[270,4711,4712],{},"121",[270,4714,4715],{},"y",[254,4717,4718,4721,4724,4727,4730,4733,4736,4739],{},[270,4719,4720],{},"26",[270,4722,4723],{},"SUB",[270,4725,4726],{},"58",[270,4728,4729],{},":",[270,4731,4732],{},"90",[270,4734,4735],{},"Z",[270,4737,4738],{},"122",[270,4740,4741],{},"z",[254,4743,4744,4747,4750,4753,4755,4758,4761,4764],{},[270,4745,4746],{},"27",[270,4748,4749],{},"ESC",[270,4751,4752],{},"59",[270,4754,3940],{},[270,4756,4757],{},"91",[270,4759,4760],{},"[",[270,4762,4763],{},"123",[270,4765,4766],{},"{",[254,4768,4769,4772,4775,4778,4780,4783,4785,4788],{},[270,4770,4771],{},"28",[270,4773,4774],{},"FS",[270,4776,4777],{},"60",[270,4779,393],{},[270,4781,4782],{},"92",[270,4784,4455],{},[270,4786,4787],{},"124",[270,4789,4790],{},"|",[254,4792,4793,4796,4799,4802,4804,4807,4810,4813],{},[270,4794,4795],{},"29",[270,4797,4798],{},"GS",[270,4800,4801],{},"61",[270,4803,47],{},[270,4805,4806],{},"93",[270,4808,4809],{},"]",[270,4811,4812],{},"125",[270,4814,4815],{},"}",[254,4817,4818,4821,4824,4827,4830,4833,4836,4839],{},[270,4819,4820],{},"30",[270,4822,4823],{},"RS",[270,4825,4826],{},"62",[270,4828,4829],{},">",[270,4831,4832],{},"94",[270,4834,4835],{},"^",[270,4837,4838],{},"126",[270,4840,4841],{},"`",[254,4843,4844,4847,4850,4853,4856,4859,4861,4864],{},[270,4845,4846],{},"31",[270,4848,4849],{},"US",[270,4851,4852],{},"63",[270,4854,4855],{},"?",[270,4857,4858],{},"95",[270,4860,2756],{},[270,4862,4863],{},"127",[270,4865,4866],{},"DEL",[19,4868,4869,4870,4873],{},"ASCII 码大致由以下",[4027,4871,4872],{},"两部分组","成：",[4875,4876,4877,4884],"ul",{},[214,4878,4879,4880,4883],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[4027,4881,4882],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[214,4885,4886,4887,4890],{},"ASCII 打印字符：数字 ",[4027,4888,4889],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[318,4892,4894],{"id":4893},"_134转义字符","1.3.4转义字符",[26,4896,4898],{"className":3879,"code":4897,"language":3881,"meta":31,"style":31},"\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",[33,4899,4900,4905,4921,4935,4940,4953,4958],{"__ignoreMap":31},[36,4901,4902],{"class":38,"line":39},[36,4903,4904],{"class":3943},"\u002F\u002F换行符\n",[36,4906,4907,4910,4913,4916,4918],{"class":38,"line":53},[36,4908,4909],{"class":42},"cout ",[36,4911,4912],{"class":46},"\u003C\u003C",[36,4914,4915],{"class":105},"\"hello world\u002Fn\"",[36,4917,3940],{"class":42},[36,4919,4920],{"class":3943}," \u002F\u002F就等同于如下：\n",[36,4922,4923,4925,4927,4930,4932],{"class":38,"line":196},[36,4924,4909],{"class":42},[36,4926,4912],{"class":46},[36,4928,4929],{"class":105},"\"hello world\"",[36,4931,4912],{"class":46},[36,4933,4934],{"class":42},"endl;\n",[36,4936,4937],{"class":38,"line":642},[36,4938,4939],{"class":3943},"\u002F\u002F反斜杠\n",[36,4941,4942,4944,4946,4949,4951],{"class":38,"line":655},[36,4943,4909],{"class":42},[36,4945,4912],{"class":46},[36,4947,4948],{"class":105},"\"\u002F\u002F\"",[36,4950,4912],{"class":46},[36,4952,4934],{"class":42},[36,4954,4955],{"class":38,"line":662},[36,4956,4957],{"class":3943},"\u002F\u002F水平制表符\n",[36,4959,4960,4962,4964,4967,4970,4973,4975,4978],{"class":38,"line":667},[36,4961,4909],{"class":42},[36,4963,4912],{"class":46},[36,4965,4966],{"class":105},"\"aaaa",[36,4968,4969],{"class":112},"\\t",[36,4971,4972],{"class":105},"helloworld\"",[36,4974,4912],{"class":46},[36,4976,4977],{"class":42},"endl;",[36,4979,4980],{"class":3943}," \u002F\u002F输出窗口时有对齐效果\n",[318,4982,4984],{"id":4983},"_135字符串型","1.3.5字符串型",[19,4986,4987,4988,4990],{},"char 变量名",[36,4989],{},"=\"字符串值\"",[26,4992,4994],{"className":3879,"code":4993,"language":3881,"meta":31,"style":31},"\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",[33,4995,4996,5001,5006,5011,5016,5030,5043,5048,5053,5064],{"__ignoreMap":31},[36,4997,4998],{"class":38,"line":39},[36,4999,5000],{"class":3943},"\u002F\u002Fc风格字符串\n",[36,5002,5003],{"class":38,"line":53},[36,5004,5005],{"class":3943},"\u002F\u002F注意事项：\n",[36,5007,5008],{"class":38,"line":196},[36,5009,5010],{"class":3943},"\u002F\u002F1.char字符串名[]\n",[36,5012,5013],{"class":38,"line":642},[36,5014,5015],{"class":3943},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[36,5017,5018,5020,5023,5025,5027],{"class":38,"line":655},[36,5019,3979],{"class":46},[36,5021,5022],{"class":42}," str[]",[36,5024,47],{"class":46},[36,5026,4929],{"class":105},[36,5028,5029],{"class":42},";\n",[36,5031,5032,5034,5036,5039,5041],{"class":38,"line":662},[36,5033,4909],{"class":42},[36,5035,4912],{"class":46},[36,5037,5038],{"class":42},"str",[36,5040,4912],{"class":46},[36,5042,4934],{"class":42},[36,5044,5045],{"class":38,"line":667},[36,5046,5047],{"class":3943},"\u002F\u002Fc++风格字符串\n",[36,5049,5050],{"class":38,"line":679},[36,5051,5052],{"class":3943},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[36,5054,5055,5058,5060,5062],{"class":38,"line":685},[36,5056,5057],{"class":42},"string str2",[36,5059,47],{"class":46},[36,5061,4929],{"class":105},[36,5063,5029],{"class":42},[36,5065,5066,5068,5070,5073,5075],{"class":38,"line":691},[36,5067,4909],{"class":42},[36,5069,4912],{"class":46},[36,5071,5072],{"class":42},"str2",[36,5074,4912],{"class":46},[36,5076,4934],{"class":42},[318,5078,5080],{"id":5079},"_136布尔类型bool","1.3.6布尔类型bool",[26,5082,5084],{"className":3879,"code":5083,"language":3881,"meta":31,"style":31},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[33,5085,5086,5101],{"__ignoreMap":31},[36,5087,5088,5091,5094,5096,5099],{"class":38,"line":39},[36,5089,5090],{"class":46},"bool",[36,5092,5093],{"class":42}," flag",[36,5095,47],{"class":46},[36,5097,5098],{"class":112},"true",[36,5100,5029],{"class":42},[36,5102,5103,5106,5109,5112,5114,5116],{"class":38,"line":53},[36,5104,5105],{"class":42},"cout",[36,5107,5108],{"class":46},"\u003C\u003Csizeof",[36,5110,5111],{"class":42},"(flag)",[36,5113,4912],{"class":46},[36,5115,4977],{"class":42},[36,5117,5118],{"class":3943}," \u002F\u002F查看布尔占内存空间\n",[14,5120,5122],{"id":5121},"_14键盘输入cin","1.4键盘输入cin",[26,5124,5126],{"className":3879,"code":5125,"language":3881,"meta":31,"style":31},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[33,5127,5128,5141,5158,5169],{"__ignoreMap":31},[36,5129,5130,5132,5135,5137,5139],{"class":38,"line":39},[36,5131,1378],{"class":46},[36,5133,5134],{"class":42}," a",[36,5136,47],{"class":46},[36,5138,1859],{"class":112},[36,5140,5029],{"class":42},[36,5142,5143,5145,5147,5150,5152,5154,5156],{"class":38,"line":53},[36,5144,5105],{"class":42},[36,5146,4912],{"class":46},[36,5148,5149],{"class":105},"\"请给整型变量a赋值\"",[36,5151,4912],{"class":46},[36,5153,4113],{"class":42},[36,5155,4912],{"class":46},[36,5157,4934],{"class":42},[36,5159,5160,5163,5166],{"class":38,"line":196},[36,5161,5162],{"class":42},"cin ",[36,5164,5165],{"class":46},">>",[36,5167,5168],{"class":42}," a;\n",[36,5170,5171,5173,5175,5178,5181,5183,5185],{"class":38,"line":642},[36,5172,4909],{"class":42},[36,5174,4912],{"class":46},[36,5176,5177],{"class":105}," \"整型变量a=\"",[36,5179,5180],{"class":46}," \u003C\u003C",[36,5182,4113],{"class":42},[36,5184,4912],{"class":46},[36,5186,4934],{"class":42},[14,5188,5190],{"id":5189},"_15运算符","1.5运算符",[318,5192,5194],{"id":5193},"_151算术运算符","1.5.1算术运算符",[19,5196,5197,5201],{},[5198,5199],"img",{"alt":31,"src":5200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[211,5203,5204,5207,5210],{},[214,5205,5206],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[214,5208,5209],{},"两个小数不可以做取模运算",[214,5211,5212],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[318,5214,5216],{"id":5215},"_152赋值运算符","1.5.2赋值运算符",[19,5218,5219],{},[5198,5220],{"alt":31,"src":5221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[318,5223,5225],{"id":5224},"_153比较运算符","1.5.3比较运算符",[19,5227,5228],{},[5198,5229],{"alt":31,"src":5230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[318,5232,5234],{"id":5233},"_154逻辑运算符","1.5.4逻辑运算符",[19,5236,5237],{},[5198,5238],{"alt":31,"src":5239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,5241,5243],{"id":5242},"_16程序流程结构","1.6程序流程结构",[318,5245,5247],{"id":5246},"_161选择结构","1.6.1选择结构",[211,5249,5250],{},[214,5251,5252],{},"if语句\n单行、多行、多条件if语句",[26,5254,5256],{"className":3879,"code":5255,"language":3881,"meta":31,"style":31},"\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",[33,5257,5258,5263,5277,5282,5296,5301,5306,5315,5328,5332,5345,5349,5354,5358,5371,5375,5380,5400,5404,5417,5421,5448,5452,5468,5472,5476,5480,5493,5497],{"__ignoreMap":31},[36,5259,5260],{"class":38,"line":39},[36,5261,5262],{"class":3943},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[36,5264,5265,5267,5270,5272,5275],{"class":38,"line":53},[36,5266,2067],{"class":46},[36,5268,5269],{"class":42},"(score",[36,5271,4829],{"class":46},[36,5273,5274],{"class":112},"600",[36,5276,922],{"class":42},[36,5278,5279],{"class":38,"line":196},[36,5280,5281],{"class":42},"{\n",[36,5283,5284,5287,5289,5292,5294],{"class":38,"line":642},[36,5285,5286],{"class":42},"    cout",[36,5288,4912],{"class":46},[36,5290,5291],{"class":105},"'这是单行if语句'",[36,5293,4912],{"class":46},[36,5295,4934],{"class":42},[36,5297,5298],{"class":38,"line":655},[36,5299,5300],{"class":42},"}\n",[36,5302,5303],{"class":38,"line":662},[36,5304,5305],{"class":3943},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[36,5307,5308,5310,5312],{"class":38,"line":667},[36,5309,5162],{"class":42},[36,5311,5165],{"class":46},[36,5313,5314],{"class":42}," score\n",[36,5316,5317,5319,5321,5324,5326],{"class":38,"line":679},[36,5318,2067],{"class":46},[36,5320,5269],{"class":42},[36,5322,5323],{"class":46},"\u003C=",[36,5325,5274],{"class":112},[36,5327,922],{"class":42},[36,5329,5330],{"class":38,"line":685},[36,5331,5281],{"class":42},[36,5333,5334,5336,5338,5341,5343],{"class":38,"line":691},[36,5335,5286],{"class":42},[36,5337,5165],{"class":46},[36,5339,5340],{"class":105},"\"小于等于600\"",[36,5342,4912],{"class":46},[36,5344,4934],{"class":42},[36,5346,5347],{"class":38,"line":696},[36,5348,5300],{"class":42},[36,5350,5351],{"class":38,"line":702},[36,5352,5353],{"class":46},"else\n",[36,5355,5356],{"class":38,"line":708},[36,5357,5281],{"class":42},[36,5359,5360,5362,5364,5367,5369],{"class":38,"line":713},[36,5361,5286],{"class":42},[36,5363,5165],{"class":46},[36,5365,5366],{"class":105},"\"大于600\"",[36,5368,5165],{"class":46},[36,5370,4934],{"class":42},[36,5372,5373],{"class":38,"line":719},[36,5374,5300],{"class":42},[36,5376,5377],{"class":38,"line":725},[36,5378,5379],{"class":3943},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[36,5381,5382,5384,5387,5389,5391,5394,5396,5398],{"class":38,"line":731},[36,5383,2067],{"class":46},[36,5385,5386],{"class":42}," (",[36,5388,1859],{"class":112},[36,5390,393],{"class":46},[36,5392,5393],{"class":42},"num",[36,5395,393],{"class":46},[36,5397,4186],{"class":112},[36,5399,922],{"class":42},[36,5401,5402],{"class":38,"line":736},[36,5403,5281],{"class":42},[36,5405,5406,5408,5410,5413,5415],{"class":38,"line":742},[36,5407,5286],{"class":42},[36,5409,4912],{"class":46},[36,5411,5412],{"class":105},"\"小于100\"",[36,5414,4912],{"class":46},[36,5416,4934],{"class":42},[36,5418,5419],{"class":38,"line":748},[36,5420,5300],{"class":42},[36,5422,5423,5426,5429,5432,5434,5436,5439,5441,5443,5446],{"class":38,"line":754},[36,5424,5425],{"class":46},"else",[36,5427,5428],{"class":46}," if",[36,5430,5431],{"class":42}," (nmu",[36,5433,412],{"class":46},[36,5435,4186],{"class":112},[36,5437,5438],{"class":46},"&&",[36,5440,5393],{"class":42},[36,5442,393],{"class":46},[36,5444,5445],{"class":112},"200",[36,5447,922],{"class":42},[36,5449,5450],{"class":38,"line":760},[36,5451,5281],{"class":42},[36,5453,5454,5456,5458,5461,5463,5465],{"class":38,"line":766},[36,5455,5286],{"class":42},[36,5457,4912],{"class":46},[36,5459,5460],{"class":105},"\"不小于100且小于200\"",[36,5462,4912],{"class":46},[36,5464,4977],{"class":42},[36,5466,5467],{"class":3943}," \u002F\u002F可以无限else if,python中是elif：\n",[36,5469,5470],{"class":38,"line":772},[36,5471,5300],{"class":42},[36,5473,5474],{"class":38,"line":778},[36,5475,5353],{"class":46},[36,5477,5478],{"class":38,"line":783},[36,5479,5281],{"class":42},[36,5481,5482,5484,5486,5489,5491],{"class":38,"line":789},[36,5483,5286],{"class":42},[36,5485,4912],{"class":46},[36,5487,5488],{"class":105},"\"不小于200\"",[36,5490,4912],{"class":46},[36,5492,4934],{"class":42},[36,5494,5495],{"class":38,"line":795},[36,5496,5300],{"class":42},[36,5498,5499],{"class":38,"line":801},[36,5500,5501],{"class":3943},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[211,5503,5504],{"start":53},[214,5505,5506],{},"三目运算符",[26,5508,5510],{"className":3879,"code":5509,"language":3881,"meta":31,"style":31},"\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",[33,5511,5512,5517,5522,5548,5570,5587,5592,5615,5630],{"__ignoreMap":31},[36,5513,5514],{"class":38,"line":39},[36,5515,5516],{"class":3943},"\u002F\u002F创建三个变量a,b,c\n",[36,5518,5519],{"class":38,"line":53},[36,5520,5521],{"class":3943},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[36,5523,5524,5526,5528,5530,5532,5535,5537,5539,5542,5544,5546],{"class":38,"line":196},[36,5525,1378],{"class":46},[36,5527,5134],{"class":42},[36,5529,47],{"class":46},[36,5531,1921],{"class":112},[36,5533,5534],{"class":42},",b",[36,5536,47],{"class":46},[36,5538,554],{"class":112},[36,5540,5541],{"class":42},",c",[36,5543,47],{"class":46},[36,5545,1859],{"class":112},[36,5547,5029],{"class":42},[36,5549,5550,5552,5554,5557,5559,5561,5563,5565,5567],{"class":38,"line":642},[36,5551,4163],{"class":42},[36,5553,47],{"class":46},[36,5555,5556],{"class":42},"(a",[36,5558,4829],{"class":46},[36,5560,4138],{"class":42},[36,5562,4855],{"class":46},[36,5564,4113],{"class":42},[36,5566,4729],{"class":46},[36,5568,5569],{"class":42},"b)\n",[36,5571,5572,5574,5576,5579,5581,5583,5585],{"class":38,"line":655},[36,5573,5105],{"class":42},[36,5575,4912],{"class":46},[36,5577,5578],{"class":105},"\"c=\"",[36,5580,4912],{"class":46},[36,5582,4163],{"class":42},[36,5584,4912],{"class":46},[36,5586,4934],{"class":42},[36,5588,5589],{"class":38,"line":662},[36,5590,5591],{"class":3943},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[36,5593,5594,5596,5598,5600,5602,5604,5606,5609,5611,5613],{"class":38,"line":667},[36,5595,5556],{"class":42},[36,5597,4829],{"class":46},[36,5599,4138],{"class":42},[36,5601,4855],{"class":46},[36,5603,4113],{"class":42},[36,5605,4729],{"class":46},[36,5607,5608],{"class":42},"b)",[36,5610,47],{"class":46},[36,5612,4186],{"class":112},[36,5614,5029],{"class":42},[36,5616,5617,5619,5621,5623,5625,5627],{"class":38,"line":679},[36,5618,5105],{"class":42},[36,5620,4912],{"class":46},[36,5622,4113],{"class":42},[36,5624,4912],{"class":46},[36,5626,4977],{"class":42},[36,5628,5629],{"class":3943}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[36,5631,5632,5634,5636,5638,5640,5642],{"class":38,"line":685},[36,5633,5105],{"class":42},[36,5635,4912],{"class":46},[36,5637,4138],{"class":42},[36,5639,4912],{"class":46},[36,5641,4977],{"class":42},[36,5643,5644],{"class":3943}," \u002F\u002F10   a>b,b还是原值\n",[211,5646,5647],{"start":196},[214,5648,5649],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[26,5651,5653],{"className":3879,"code":5652,"language":3881,"meta":31,"style":31},"\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",[33,5654,5655,5660,5668,5681,5689,5693,5707,5720,5730,5738,5743,5768,5789,5811,5832,5854,5875,5895,5900],{"__ignoreMap":31},[36,5656,5657],{"class":38,"line":39},[36,5658,5659],{"class":3943},"\u002F\u002F案例-电影打分\n",[36,5661,5662,5665],{"class":38,"line":53},[36,5663,5664],{"class":46},"#include",[36,5666,5667],{"class":105},"\u003Ciostream>\n",[36,5669,5670,5673,5676,5679],{"class":38,"line":196},[36,5671,5672],{"class":46},"using",[36,5674,5675],{"class":46}," namespace",[36,5677,5678],{"class":101}," std",[36,5680,5029],{"class":42},[36,5682,5683,5685,5687],{"class":38,"line":642},[36,5684,1378],{"class":46},[36,5686,1823],{"class":101},[36,5688,903],{"class":42},[36,5690,5691],{"class":38,"line":655},[36,5692,5281],{"class":42},[36,5694,5695,5698,5701,5703,5705],{"class":38,"line":662},[36,5696,5697],{"class":46},"    int",[36,5699,5700],{"class":42}," score",[36,5702,47],{"class":46},[36,5704,1859],{"class":112},[36,5706,5029],{"class":42},[36,5708,5709,5711,5713,5716,5718],{"class":38,"line":667},[36,5710,5286],{"class":42},[36,5712,4912],{"class":46},[36,5714,5715],{"class":105},"\"电影打分：\"",[36,5717,4912],{"class":46},[36,5719,4934],{"class":42},[36,5721,5722,5725,5727],{"class":38,"line":679},[36,5723,5724],{"class":42},"    cin",[36,5726,5165],{"class":46},[36,5728,5729],{"class":42},"score;\n",[36,5731,5732,5735],{"class":38,"line":685},[36,5733,5734],{"class":46},"    switch",[36,5736,5737],{"class":42},"(score)\n",[36,5739,5740],{"class":38,"line":691},[36,5741,5742],{"class":42},"    {\n",[36,5744,5745,5748,5751,5754,5756,5759,5761,5763,5766],{"class":38,"line":696},[36,5746,5747],{"class":46},"        case",[36,5749,5750],{"class":112}," 10",[36,5752,5753],{"class":42},":cout",[36,5755,4912],{"class":46},[36,5757,5758],{"class":105},"\"经典\"",[36,5760,4912],{"class":46},[36,5762,4977],{"class":42},[36,5764,5765],{"class":46},"break",[36,5767,5029],{"class":42},[36,5769,5770,5772,5775,5777,5779,5781,5783,5785,5787],{"class":38,"line":702},[36,5771,5747],{"class":46},[36,5773,5774],{"class":112}," 9",[36,5776,5753],{"class":42},[36,5778,4912],{"class":46},[36,5780,5758],{"class":105},[36,5782,4912],{"class":46},[36,5784,4977],{"class":42},[36,5786,5765],{"class":46},[36,5788,5029],{"class":42},[36,5790,5791,5793,5796,5798,5800,5803,5805,5807,5809],{"class":38,"line":708},[36,5792,5747],{"class":46},[36,5794,5795],{"class":112}," 8",[36,5797,5753],{"class":42},[36,5799,4912],{"class":46},[36,5801,5802],{"class":105},"\"非常好\"",[36,5804,4912],{"class":46},[36,5806,4977],{"class":42},[36,5808,5765],{"class":46},[36,5810,5029],{"class":42},[36,5812,5813,5815,5818,5820,5822,5824,5826,5828,5830],{"class":38,"line":713},[36,5814,5747],{"class":46},[36,5816,5817],{"class":112}," 7",[36,5819,5753],{"class":42},[36,5821,4912],{"class":46},[36,5823,5802],{"class":105},[36,5825,4912],{"class":46},[36,5827,4977],{"class":42},[36,5829,5765],{"class":46},[36,5831,5029],{"class":42},[36,5833,5834,5836,5839,5841,5843,5846,5848,5850,5852],{"class":38,"line":719},[36,5835,5747],{"class":46},[36,5837,5838],{"class":112}," 6",[36,5840,5753],{"class":42},[36,5842,4912],{"class":46},[36,5844,5845],{"class":105},"\"一般\"",[36,5847,4912],{"class":46},[36,5849,4977],{"class":42},[36,5851,5765],{"class":46},[36,5853,5029],{"class":42},[36,5855,5856,5858,5861,5863,5865,5867,5869,5871,5873],{"class":38,"line":725},[36,5857,5747],{"class":46},[36,5859,5860],{"class":112}," 5",[36,5862,5753],{"class":42},[36,5864,4912],{"class":46},[36,5866,5845],{"class":105},[36,5868,4912],{"class":46},[36,5870,4977],{"class":42},[36,5872,5765],{"class":46},[36,5874,5029],{"class":42},[36,5876,5877,5880,5882,5884,5887,5889,5891,5893],{"class":38,"line":731},[36,5878,5879],{"class":46},"        default",[36,5881,5753],{"class":42},[36,5883,4912],{"class":46},[36,5885,5886],{"class":105},"\"烂片\"",[36,5888,4912],{"class":46},[36,5890,4977],{"class":42},[36,5892,5765],{"class":46},[36,5894,5029],{"class":42},[36,5896,5897],{"class":38,"line":736},[36,5898,5899],{"class":42},"    }\n",[36,5901,5902],{"class":38,"line":742},[36,5903,5300],{"class":42},[19,5905,5906],{},"if和switch区别：",[4875,5908,5909,5912],{},[214,5910,5911],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[214,5913,5914],{},"switch优点：结构清晰，执行效率高",[318,5916,5918],{"id":5917},"_162循环结构","1.6.2循环结构",[211,5920,5921],{},[214,5922,5923],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[26,5925,5927],{"className":3879,"code":5926,"language":3881,"meta":31,"style":31},"\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",[33,5928,5929,5934,5942,5946,5959,5973,5977,5997,6007,6011,6023],{"__ignoreMap":31},[36,5930,5931],{"class":38,"line":39},[36,5932,5933],{"class":3943},"\u002F\u002F打印0-9数字\n",[36,5935,5936,5938,5940],{"class":38,"line":53},[36,5937,1378],{"class":46},[36,5939,1823],{"class":101},[36,5941,903],{"class":42},[36,5943,5944],{"class":38,"line":196},[36,5945,5281],{"class":42},[36,5947,5948,5950,5953,5955,5957],{"class":38,"line":642},[36,5949,5697],{"class":46},[36,5951,5952],{"class":42}," num",[36,5954,47],{"class":46},[36,5956,1859],{"class":112},[36,5958,5029],{"class":42},[36,5960,5961,5964,5967,5969,5971],{"class":38,"line":655},[36,5962,5963],{"class":46},"    while",[36,5965,5966],{"class":42},"(num",[36,5968,393],{"class":46},[36,5970,554],{"class":112},[36,5972,922],{"class":42},[36,5974,5975],{"class":38,"line":662},[36,5976,5742],{"class":42},[36,5978,5979,5982,5985,5987,5989,5991,5994],{"class":38,"line":667},[36,5980,5981],{"class":101},"       std",[36,5983,5984],{"class":42},"::cout",[36,5986,4912],{"class":46},[36,5988,5393],{"class":42},[36,5990,4912],{"class":46},[36,5992,5993],{"class":101},"std",[36,5995,5996],{"class":42},"::endl;\n",[36,5998,5999,6002,6005],{"class":38,"line":679},[36,6000,6001],{"class":42},"        num",[36,6003,6004],{"class":46},"++",[36,6006,5029],{"class":42},[36,6008,6009],{"class":38,"line":685},[36,6010,5899],{"class":42},[36,6012,6013,6016,6018,6021],{"class":38,"line":691},[36,6014,6015],{"class":101},"    system",[36,6017,495],{"class":42},[36,6019,6020],{"class":105},"\"pause\"",[36,6022,922],{"class":42},[36,6024,6025],{"class":38,"line":696},[36,6026,5300],{"class":42},[19,6028,6029],{},"注意：写好循环条件，避免死循环情况",[26,6031,6033],{"className":3879,"code":6032,"language":3881,"meta":31,"style":31},"\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",[33,6034,6035,6040,6047,6054,6064,6072,6076,6081,6108,6112,6117,6125,6152,6157,6162,6175,6185,6189,6199,6204,6216,6221,6235,6240,6255,6259,6272,6276,6281,6285,6298,6305,6309,6314,6319,6323],{"__ignoreMap":31},[36,6036,6037],{"class":38,"line":39},[36,6038,6039],{"class":3943},"\u002F\u002F循环结构-猜数字\n",[36,6041,6042,6044],{"class":38,"line":53},[36,6043,5664],{"class":46},[36,6045,6046],{"class":105}," \u003Ciostream>\n",[36,6048,6049,6051],{"class":38,"line":196},[36,6050,5664],{"class":46},[36,6052,6053],{"class":105}," \u003Cctime>\n",[36,6055,6056,6058,6060,6062],{"class":38,"line":642},[36,6057,5672],{"class":46},[36,6059,5675],{"class":46},[36,6061,5678],{"class":101},[36,6063,5029],{"class":42},[36,6065,6066,6068,6070],{"class":38,"line":655},[36,6067,1378],{"class":46},[36,6069,1823],{"class":101},[36,6071,903],{"class":42},[36,6073,6074],{"class":38,"line":662},[36,6075,5281],{"class":42},[36,6077,6078],{"class":38,"line":667},[36,6079,6080],{"class":3943},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[36,6082,6083,6086,6089,6092,6095,6097,6100,6102,6105],{"class":38,"line":679},[36,6084,6085],{"class":101},"    srand",[36,6087,6088],{"class":42},"((",[36,6090,6091],{"class":46},"unsigned",[36,6093,6094],{"class":46}," int",[36,6096,4304],{"class":42},[36,6098,6099],{"class":101},"time",[36,6101,495],{"class":42},[36,6103,6104],{"class":112},"NULL",[36,6106,6107],{"class":42},"));\n",[36,6109,6110],{"class":38,"line":685},[36,6111,659],{"emptyLinePlaceholder":658},[36,6113,6114],{"class":38,"line":691},[36,6115,6116],{"class":3943},"    \u002F\u002F1.系统生成随机数\n",[36,6118,6119,6122],{"class":38,"line":696},[36,6120,6121],{"class":3943},"    \u002F\u002Frand()%100",[36,6123,6124],{"class":3943}," \u002F\u002F生成0-99的随机数\n",[36,6126,6127,6129,6131,6133,6136,6139,6141,6143,6145,6147,6149],{"class":38,"line":702},[36,6128,5697],{"class":46},[36,6130,5952],{"class":42},[36,6132,47],{"class":46},[36,6134,6135],{"class":101},"rand",[36,6137,6138],{"class":42},"()",[36,6140,4203],{"class":46},[36,6142,4186],{"class":112},[36,6144,4354],{"class":46},[36,6146,4092],{"class":112},[36,6148,3940],{"class":42},[36,6150,6151],{"class":3943}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[36,6153,6154],{"class":38,"line":708},[36,6155,6156],{"class":3943},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[36,6158,6159],{"class":38,"line":713},[36,6160,6161],{"class":3943},"    \u002F\u002F2.玩家猜测\n",[36,6163,6164,6166,6169,6171,6173],{"class":38,"line":719},[36,6165,5697],{"class":46},[36,6167,6168],{"class":42}," val",[36,6170,47],{"class":46},[36,6172,1859],{"class":112},[36,6174,5029],{"class":42},[36,6176,6177,6179,6181,6183],{"class":38,"line":725},[36,6178,5963],{"class":46},[36,6180,5386],{"class":42},[36,6182,4092],{"class":112},[36,6184,922],{"class":42},[36,6186,6187],{"class":38,"line":731},[36,6188,5742],{"class":42},[36,6190,6191,6194,6196],{"class":38,"line":736},[36,6192,6193],{"class":42},"        cin",[36,6195,5165],{"class":46},[36,6197,6198],{"class":42},"val;\n",[36,6200,6201],{"class":38,"line":742},[36,6202,6203],{"class":3943},"        \u002F\u002F3.判断玩家猜测\n",[36,6205,6206,6208,6211,6213],{"class":38,"line":748},[36,6207,995],{"class":46},[36,6209,6210],{"class":42},"(val",[36,6212,393],{"class":46},[36,6214,6215],{"class":42},"num) \n",[36,6217,6218],{"class":38,"line":754},[36,6219,6220],{"class":42},"        {\n",[36,6222,6223,6226,6228,6231,6233],{"class":38,"line":760},[36,6224,6225],{"class":42},"            cout",[36,6227,4912],{"class":46},[36,6229,6230],{"class":105},"\"猜小了！\"",[36,6232,4912],{"class":46},[36,6234,4934],{"class":42},[36,6236,6237],{"class":38,"line":766},[36,6238,6239],{"class":42},"        }\n",[36,6241,6242,6245,6247,6250,6252],{"class":38,"line":772},[36,6243,6244],{"class":46},"        else",[36,6246,5428],{"class":46},[36,6248,6249],{"class":42}," (val",[36,6251,4829],{"class":46},[36,6253,6254],{"class":42},"num)\n",[36,6256,6257],{"class":38,"line":778},[36,6258,6220],{"class":42},[36,6260,6261,6263,6265,6268,6270],{"class":38,"line":783},[36,6262,6225],{"class":42},[36,6264,4912],{"class":46},[36,6266,6267],{"class":105},"\"猜大了！\"",[36,6269,4912],{"class":46},[36,6271,4934],{"class":42},[36,6273,6274],{"class":38,"line":789},[36,6275,6239],{"class":42},[36,6277,6278],{"class":38,"line":795},[36,6279,6280],{"class":46},"        else\n",[36,6282,6283],{"class":38,"line":801},[36,6284,6220],{"class":42},[36,6286,6287,6289,6291,6294,6296],{"class":38,"line":807},[36,6288,6225],{"class":42},[36,6290,4912],{"class":46},[36,6292,6293],{"class":105},"\"猜对了！\"",[36,6295,4912],{"class":46},[36,6297,4934],{"class":42},[36,6299,6300,6303],{"class":38,"line":813},[36,6301,6302],{"class":46},"            break",[36,6304,5029],{"class":42},[36,6306,6307],{"class":38,"line":819},[36,6308,6239],{"class":42},[36,6310,6311],{"class":38,"line":824},[36,6312,6313],{"class":3943},"        \u002F\u002F猜对 退出游戏\n",[36,6315,6316],{"class":38,"line":829},[36,6317,6318],{"class":3943},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[36,6320,6321],{"class":38,"line":851},[36,6322,5899],{"class":42},[36,6324,6325],{"class":38,"line":868},[36,6326,5300],{"class":42},[211,6328,6329],{"start":53},[214,6330,6331,6332,6335],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[4027,6333,6334],{},"do...while会先执行一次循环语句","，在判断循环语句",[26,6337,6339],{"className":3879,"code":6338,"language":3881,"meta":31,"style":31},"\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",[33,6340,6341,6346,6354,6358,6370,6378,6382,6399,6406,6410,6423,6433],{"__ignoreMap":31},[36,6342,6343],{"class":38,"line":39},[36,6344,6345],{"class":3943},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[36,6347,6348,6350,6352],{"class":38,"line":53},[36,6349,1378],{"class":46},[36,6351,1823],{"class":101},[36,6353,903],{"class":42},[36,6355,6356],{"class":38,"line":196},[36,6357,5281],{"class":42},[36,6359,6360,6362,6364,6366,6368],{"class":38,"line":642},[36,6361,5697],{"class":46},[36,6363,5952],{"class":42},[36,6365,47],{"class":46},[36,6367,1859],{"class":112},[36,6369,5029],{"class":42},[36,6371,6372,6375],{"class":38,"line":655},[36,6373,6374],{"class":46},"    do",[36,6376,6377],{"class":42}," \n",[36,6379,6380],{"class":38,"line":662},[36,6381,5742],{"class":42},[36,6383,6384,6387,6389,6391,6393,6395,6397],{"class":38,"line":667},[36,6385,6386],{"class":101},"        std",[36,6388,5984],{"class":42},[36,6390,4912],{"class":46},[36,6392,5393],{"class":42},[36,6394,4912],{"class":46},[36,6396,5993],{"class":101},[36,6398,5996],{"class":42},[36,6400,6401,6403],{"class":38,"line":679},[36,6402,6001],{"class":42},[36,6404,6405],{"class":46},"++\n",[36,6407,6408],{"class":38,"line":685},[36,6409,5899],{"class":42},[36,6411,6412,6414,6416,6418,6420],{"class":38,"line":691},[36,6413,5963],{"class":46},[36,6415,5966],{"class":42},[36,6417,393],{"class":46},[36,6419,554],{"class":112},[36,6421,6422],{"class":42},");\n",[36,6424,6425,6427,6429,6431],{"class":38,"line":696},[36,6426,6015],{"class":101},[36,6428,495],{"class":42},[36,6430,6020],{"class":105},[36,6432,6422],{"class":42},[36,6434,6435],{"class":38,"line":702},[36,6436,5300],{"class":42},[19,6438,6439],{},"案例-水仙花数",[19,6441,6442],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,6444,6445],{},"例如：1^3+5^3+3^3=153",[19,6447,6448],{},"请用do...while语句，求出所有3位数的水仙花数",[26,6450,6452],{"className":3879,"code":6451,"language":3881,"meta":31,"style":31},"#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",[33,6453,6454,6460,6470,6478,6482,6487,6499,6505,6509,6514,6530,6546,6562,6577,6596,6611,6659,6663,6675,6679,6687,6691,6705],{"__ignoreMap":31},[36,6455,6456,6458],{"class":38,"line":39},[36,6457,5664],{"class":46},[36,6459,6046],{"class":105},[36,6461,6462,6464,6466,6468],{"class":38,"line":53},[36,6463,5672],{"class":46},[36,6465,5675],{"class":46},[36,6467,5678],{"class":101},[36,6469,5029],{"class":42},[36,6471,6472,6474,6476],{"class":38,"line":196},[36,6473,1378],{"class":46},[36,6475,1823],{"class":101},[36,6477,903],{"class":42},[36,6479,6480],{"class":38,"line":642},[36,6481,5281],{"class":42},[36,6483,6484],{"class":38,"line":655},[36,6485,6486],{"class":3943},"    \u002F\u002F1.先打印所有三位数字\n",[36,6488,6489,6491,6493,6495,6497],{"class":38,"line":662},[36,6490,5697],{"class":46},[36,6492,5952],{"class":42},[36,6494,47],{"class":46},[36,6496,4186],{"class":112},[36,6498,5029],{"class":42},[36,6500,6501,6503],{"class":38,"line":667},[36,6502,6374],{"class":46},[36,6504,6377],{"class":42},[36,6506,6507],{"class":38,"line":679},[36,6508,5742],{"class":42},[36,6510,6511],{"class":38,"line":685},[36,6512,6513],{"class":3943},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[36,6515,6516,6519,6521,6523,6525,6527],{"class":38,"line":691},[36,6517,6518],{"class":46},"        int",[36,6520,5134],{"class":42},[36,6522,47],{"class":46},[36,6524,1859],{"class":112},[36,6526,3940],{"class":42},[36,6528,6529],{"class":3943}," \u002F\u002F个位\n",[36,6531,6532,6534,6537,6539,6541,6543],{"class":38,"line":696},[36,6533,6518],{"class":46},[36,6535,6536],{"class":42}," b",[36,6538,47],{"class":46},[36,6540,1859],{"class":112},[36,6542,3940],{"class":42},[36,6544,6545],{"class":3943}," \u002F\u002F十位\n",[36,6547,6548,6550,6553,6555,6557,6559],{"class":38,"line":702},[36,6549,6518],{"class":46},[36,6551,6552],{"class":42}," c",[36,6554,47],{"class":46},[36,6556,1859],{"class":112},[36,6558,3940],{"class":42},[36,6560,6561],{"class":3943}," \u002F\u002F百位\n",[36,6563,6564,6567,6569,6571,6573,6575],{"class":38,"line":708},[36,6565,6566],{"class":42},"        a",[36,6568,47],{"class":46},[36,6570,5393],{"class":42},[36,6572,4203],{"class":46},[36,6574,554],{"class":112},[36,6576,5029],{"class":42},[36,6578,6579,6582,6584,6586,6588,6590,6592,6594],{"class":38,"line":713},[36,6580,6581],{"class":42},"        b",[36,6583,47],{"class":46},[36,6585,5393],{"class":42},[36,6587,4455],{"class":46},[36,6589,554],{"class":112},[36,6591,4203],{"class":46},[36,6593,554],{"class":112},[36,6595,5029],{"class":42},[36,6597,6598,6601,6603,6605,6607,6609],{"class":38,"line":719},[36,6599,6600],{"class":42},"        c",[36,6602,47],{"class":46},[36,6604,5393],{"class":42},[36,6606,4455],{"class":46},[36,6608,4186],{"class":112},[36,6610,5029],{"class":42},[36,6612,6613,6615,6617,6619,6621,6623,6625,6627,6629,6631,6633,6635,6637,6639,6641,6643,6645,6647,6650,6653,6656],{"class":38,"line":725},[36,6614,995],{"class":46},[36,6616,5556],{"class":42},[36,6618,1372],{"class":46},[36,6620,4113],{"class":42},[36,6622,1372],{"class":46},[36,6624,4113],{"class":42},[36,6626,4354],{"class":46},[36,6628,4138],{"class":42},[36,6630,1372],{"class":46},[36,6632,4138],{"class":42},[36,6634,1372],{"class":46},[36,6636,4138],{"class":42},[36,6638,4354],{"class":46},[36,6640,4163],{"class":42},[36,6642,1372],{"class":46},[36,6644,4163],{"class":42},[36,6646,1372],{"class":46},[36,6648,6649],{"class":42},"c ",[36,6651,6652],{"class":46},"==",[36,6654,6655],{"class":42}," num)",[36,6657,6658],{"class":3943}," \u002F\u002F如果是水仙花数，才打印\n",[36,6660,6661],{"class":38,"line":731},[36,6662,6220],{"class":42},[36,6664,6665,6667,6669,6671,6673],{"class":38,"line":736},[36,6666,6225],{"class":42},[36,6668,4912],{"class":46},[36,6670,5393],{"class":42},[36,6672,4912],{"class":46},[36,6674,4934],{"class":42},[36,6676,6677],{"class":38,"line":742},[36,6678,6239],{"class":42},[36,6680,6681,6683,6685],{"class":38,"line":748},[36,6682,6001],{"class":42},[36,6684,6004],{"class":46},[36,6686,5029],{"class":42},[36,6688,6689],{"class":38,"line":754},[36,6690,5899],{"class":42},[36,6692,6693,6695,6698,6700,6703],{"class":38,"line":760},[36,6694,5963],{"class":46},[36,6696,6697],{"class":42}," (num ",[36,6699,393],{"class":46},[36,6701,6702],{"class":112}," 1000",[36,6704,6422],{"class":42},[36,6706,6707],{"class":38,"line":766},[36,6708,5300],{"class":42},[211,6710,6711],{"start":196},[214,6712,6713],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[26,6715,6717],{"className":3879,"code":6716,"language":3881,"meta":31,"style":31},"\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",[33,6718,6719,6724,6752,6756,6768,6772,6777,6788,6795,6799,6812,6816,6823,6827,6839,6848],{"__ignoreMap":31},[36,6720,6721],{"class":38,"line":39},[36,6722,6723],{"class":3943},"\u002F\u002F从数字0-9打印\n",[36,6725,6726,6728,6730,6732,6735,6737,6739,6742,6744,6746,6748,6750],{"class":38,"line":53},[36,6727,3120],{"class":46},[36,6729,495],{"class":42},[36,6731,1378],{"class":46},[36,6733,6734],{"class":42}," i",[36,6736,47],{"class":46},[36,6738,1859],{"class":112},[36,6740,6741],{"class":42},";i",[36,6743,393],{"class":46},[36,6745,554],{"class":112},[36,6747,6741],{"class":42},[36,6749,6004],{"class":46},[36,6751,922],{"class":42},[36,6753,6754],{"class":38,"line":196},[36,6755,5281],{"class":42},[36,6757,6758,6760,6762,6764,6766],{"class":38,"line":642},[36,6759,5286],{"class":42},[36,6761,4912],{"class":46},[36,6763,4316],{"class":42},[36,6765,4912],{"class":46},[36,6767,4934],{"class":42},[36,6769,6770],{"class":38,"line":655},[36,6771,5300],{"class":42},[36,6773,6774],{"class":38,"line":662},[36,6775,6776],{"class":3943},"\u002F\u002F上式可以进行拆分\n",[36,6778,6779,6781,6783,6785],{"class":38,"line":667},[36,6780,1378],{"class":46},[36,6782,6734],{"class":42},[36,6784,47],{"class":46},[36,6786,6787],{"class":112},"0\n",[36,6789,6790,6792],{"class":38,"line":679},[36,6791,3120],{"class":46},[36,6793,6794],{"class":42},"(;;;)\n",[36,6796,6797],{"class":38,"line":685},[36,6798,5281],{"class":42},[36,6800,6801,6803,6806,6808,6810],{"class":38,"line":691},[36,6802,3752],{"class":46},[36,6804,6805],{"class":42},"(i",[36,6807,412],{"class":46},[36,6809,554],{"class":112},[36,6811,922],{"class":42},[36,6813,6814],{"class":38,"line":696},[36,6815,5742],{"class":42},[36,6817,6818,6821],{"class":38,"line":702},[36,6819,6820],{"class":46},"        break",[36,6822,5029],{"class":42},[36,6824,6825],{"class":38,"line":708},[36,6826,5899],{"class":42},[36,6828,6829,6831,6833,6835,6837],{"class":38,"line":713},[36,6830,5286],{"class":42},[36,6832,4912],{"class":46},[36,6834,4316],{"class":42},[36,6836,4912],{"class":46},[36,6838,4934],{"class":42},[36,6840,6841,6844,6846],{"class":38,"line":719},[36,6842,6843],{"class":42},"    i",[36,6845,6004],{"class":46},[36,6847,5029],{"class":42},[36,6849,6850],{"class":38,"line":725},[36,6851,5300],{"class":42},[19,6853,6854],{},"小练习",[26,6856,6858],{"className":3879,"code":6857,"language":3881,"meta":31,"style":31},"#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",[33,6859,6860,6866,6876,6884,6888,6893,6898,6925,6929,6934,6939,6980,6984,6997,7001,7005,7009,7021,7025,7029],{"__ignoreMap":31},[36,6861,6862,6864],{"class":38,"line":39},[36,6863,5664],{"class":46},[36,6865,5667],{"class":105},[36,6867,6868,6870,6872,6874],{"class":38,"line":53},[36,6869,5672],{"class":46},[36,6871,5675],{"class":46},[36,6873,5678],{"class":101},[36,6875,5029],{"class":42},[36,6877,6878,6880,6882],{"class":38,"line":196},[36,6879,1378],{"class":46},[36,6881,1823],{"class":101},[36,6883,903],{"class":42},[36,6885,6886],{"class":38,"line":642},[36,6887,5281],{"class":42},[36,6889,6890],{"class":38,"line":655},[36,6891,6892],{"class":3943},"    \u002F\u002F敲桌子案例\n",[36,6894,6895],{"class":38,"line":662},[36,6896,6897],{"class":3943},"    \u002F\u002F1.先输出1-100的数字\n",[36,6899,6900,6902,6904,6906,6908,6910,6912,6915,6917,6919,6921,6923],{"class":38,"line":667},[36,6901,1909],{"class":46},[36,6903,495],{"class":42},[36,6905,1378],{"class":46},[36,6907,6734],{"class":42},[36,6909,47],{"class":46},[36,6911,4092],{"class":112},[36,6913,6914],{"class":42},"; i",[36,6916,5323],{"class":46},[36,6918,4186],{"class":112},[36,6920,6914],{"class":42},[36,6922,6004],{"class":46},[36,6924,922],{"class":42},[36,6926,6927],{"class":38,"line":679},[36,6928,5742],{"class":42},[36,6930,6931],{"class":38,"line":685},[36,6932,6933],{"class":3943},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[36,6935,6936],{"class":38,"line":691},[36,6937,6938],{"class":3943},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[36,6940,6941,6943,6945,6947,6949,6951,6953,6956,6958,6960,6962,6964,6966,6968,6970,6972,6974,6976,6978],{"class":38,"line":696},[36,6942,995],{"class":46},[36,6944,6805],{"class":42},[36,6946,4203],{"class":46},[36,6948,4244],{"class":112},[36,6950,6652],{"class":46},[36,6952,1859],{"class":112},[36,6954,6955],{"class":46}," ||",[36,6957,6734],{"class":42},[36,6959,4203],{"class":46},[36,6961,554],{"class":112},[36,6963,6652],{"class":46},[36,6965,4244],{"class":112},[36,6967,6955],{"class":46},[36,6969,6734],{"class":42},[36,6971,4455],{"class":46},[36,6973,554],{"class":112},[36,6975,6652],{"class":46},[36,6977,4244],{"class":112},[36,6979,922],{"class":42},[36,6981,6982],{"class":38,"line":702},[36,6983,6220],{"class":42},[36,6985,6986,6988,6990,6993,6995],{"class":38,"line":708},[36,6987,6225],{"class":42},[36,6989,4912],{"class":46},[36,6991,6992],{"class":105},"\"敲桌子\"",[36,6994,4912],{"class":46},[36,6996,4934],{"class":42},[36,6998,6999],{"class":38,"line":713},[36,7000,6239],{"class":42},[36,7002,7003],{"class":38,"line":719},[36,7004,6280],{"class":46},[36,7006,7007],{"class":38,"line":725},[36,7008,6220],{"class":42},[36,7010,7011,7013,7015,7017,7019],{"class":38,"line":731},[36,7012,6225],{"class":42},[36,7014,4912],{"class":46},[36,7016,4316],{"class":42},[36,7018,4912],{"class":46},[36,7020,4934],{"class":42},[36,7022,7023],{"class":38,"line":736},[36,7024,6239],{"class":42},[36,7026,7027],{"class":38,"line":742},[36,7028,5899],{"class":42},[36,7030,7031],{"class":38,"line":748},[36,7032,5300],{"class":42},[19,7034,7035],{},"嵌套实现星图",[26,7037,7039],{"className":3879,"code":7038,"language":3881,"meta":31,"style":31},"#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",[33,7040,7041,7047,7057,7065,7069,7095,7099,7127,7131,7142,7146,7155,7159],{"__ignoreMap":31},[36,7042,7043,7045],{"class":38,"line":39},[36,7044,5664],{"class":46},[36,7046,5667],{"class":105},[36,7048,7049,7051,7053,7055],{"class":38,"line":53},[36,7050,5672],{"class":46},[36,7052,5675],{"class":46},[36,7054,5678],{"class":101},[36,7056,5029],{"class":42},[36,7058,7059,7061,7063],{"class":38,"line":196},[36,7060,1378],{"class":46},[36,7062,1823],{"class":101},[36,7064,903],{"class":42},[36,7066,7067],{"class":38,"line":642},[36,7068,5281],{"class":42},[36,7070,7071,7073,7075,7077,7079,7081,7083,7085,7087,7089,7091,7093],{"class":38,"line":655},[36,7072,1909],{"class":46},[36,7074,5386],{"class":42},[36,7076,1378],{"class":46},[36,7078,6734],{"class":42},[36,7080,47],{"class":46},[36,7082,1859],{"class":112},[36,7084,6741],{"class":42},[36,7086,393],{"class":46},[36,7088,554],{"class":112},[36,7090,6741],{"class":42},[36,7092,6004],{"class":46},[36,7094,922],{"class":42},[36,7096,7097],{"class":38,"line":662},[36,7098,5742],{"class":42},[36,7100,7101,7103,7105,7107,7110,7112,7114,7117,7119,7121,7123,7125],{"class":38,"line":667},[36,7102,1613],{"class":46},[36,7104,5386],{"class":42},[36,7106,1378],{"class":46},[36,7108,7109],{"class":42}," j",[36,7111,47],{"class":46},[36,7113,1859],{"class":112},[36,7115,7116],{"class":42},";j",[36,7118,393],{"class":46},[36,7120,554],{"class":112},[36,7122,7116],{"class":42},[36,7124,6004],{"class":46},[36,7126,922],{"class":42},[36,7128,7129],{"class":38,"line":679},[36,7130,6220],{"class":42},[36,7132,7133,7135,7137,7140],{"class":38,"line":685},[36,7134,6225],{"class":42},[36,7136,4912],{"class":46},[36,7138,7139],{"class":105},"\"*\"",[36,7141,5029],{"class":42},[36,7143,7144],{"class":38,"line":691},[36,7145,6239],{"class":42},[36,7147,7148,7151,7153],{"class":38,"line":696},[36,7149,7150],{"class":42},"        cout",[36,7152,4912],{"class":46},[36,7154,4934],{"class":42},[36,7156,7157],{"class":38,"line":702},[36,7158,5899],{"class":42},[36,7160,7161],{"class":38,"line":708},[36,7162,5300],{"class":42},[19,7164,7165],{},"乘法口诀表",[26,7167,7169],{"className":3879,"code":7168,"language":3881,"meta":31,"style":31},"#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",[33,7170,7171,7177,7187,7195,7199,7225,7229,7254,7258,7298,7302,7310,7314],{"__ignoreMap":31},[36,7172,7173,7175],{"class":38,"line":39},[36,7174,5664],{"class":46},[36,7176,6046],{"class":105},[36,7178,7179,7181,7183,7185],{"class":38,"line":53},[36,7180,5672],{"class":46},[36,7182,5675],{"class":46},[36,7184,5678],{"class":101},[36,7186,5029],{"class":42},[36,7188,7189,7191,7193],{"class":38,"line":196},[36,7190,1378],{"class":46},[36,7192,1823],{"class":101},[36,7194,903],{"class":42},[36,7196,7197],{"class":38,"line":642},[36,7198,5281],{"class":42},[36,7200,7201,7203,7205,7207,7209,7211,7213,7215,7217,7219,7221,7223],{"class":38,"line":655},[36,7202,1909],{"class":46},[36,7204,495],{"class":42},[36,7206,1378],{"class":46},[36,7208,6734],{"class":42},[36,7210,47],{"class":46},[36,7212,4092],{"class":112},[36,7214,6741],{"class":42},[36,7216,393],{"class":46},[36,7218,554],{"class":112},[36,7220,6741],{"class":42},[36,7222,6004],{"class":46},[36,7224,922],{"class":42},[36,7226,7227],{"class":38,"line":662},[36,7228,5742],{"class":42},[36,7230,7231,7233,7235,7237,7239,7241,7243,7245,7247,7250,7252],{"class":38,"line":667},[36,7232,1613],{"class":46},[36,7234,495],{"class":42},[36,7236,1378],{"class":46},[36,7238,7109],{"class":42},[36,7240,47],{"class":46},[36,7242,4092],{"class":112},[36,7244,7116],{"class":42},[36,7246,5323],{"class":46},[36,7248,7249],{"class":42},"i;j",[36,7251,6004],{"class":46},[36,7253,922],{"class":42},[36,7255,7256],{"class":38,"line":679},[36,7257,6220],{"class":42},[36,7259,7260,7262,7264,7266,7268,7270,7272,7274,7276,7279,7281,7283,7285,7287,7289,7292,7294,7296],{"class":38,"line":685},[36,7261,6225],{"class":42},[36,7263,4912],{"class":46},[36,7265,4340],{"class":42},[36,7267,4912],{"class":46},[36,7269,7139],{"class":105},[36,7271,4912],{"class":46},[36,7273,4316],{"class":42},[36,7275,4912],{"class":46},[36,7277,7278],{"class":105},"\"=\"",[36,7280,4912],{"class":46},[36,7282,4316],{"class":42},[36,7284,1372],{"class":46},[36,7286,4340],{"class":42},[36,7288,4912],{"class":46},[36,7290,7291],{"class":105},"'",[36,7293,4969],{"class":112},[36,7295,7291],{"class":105},[36,7297,5029],{"class":42},[36,7299,7300],{"class":38,"line":691},[36,7301,6239],{"class":42},[36,7303,7304,7306,7308],{"class":38,"line":696},[36,7305,7150],{"class":42},[36,7307,4912],{"class":46},[36,7309,4934],{"class":42},[36,7311,7312],{"class":38,"line":702},[36,7313,5899],{"class":42},[36,7315,7316],{"class":38,"line":708},[36,7317,5300],{"class":42},[318,7319,7321],{"id":7320},"_163跳出语句","1.6.3跳出语句",[211,7323,7324],{},[214,7325,7326],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,7328,7329],{},"break使用时机：",[4875,7331,7332,7335,7338],{},[214,7333,7334],{},"出现在switch条件语句中，作用是终止case并跳出switch",[214,7336,7337],{},"出现在循环结构中，作用是跳出当前的循环结构",[214,7339,7340],{},"出现在嵌套循环中，跳出最近的内层循环语句",[211,7342,7343,7346],{"start":53},[214,7344,7345],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[214,7347,7348],{},"goto语句\n语法：goto 标记;",[19,7350,7351],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[26,7353,7355],{"className":3879,"code":7354,"language":3881,"meta":31,"style":31},"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",[33,7356,7357,7365,7369,7382,7392,7405,7418,7431,7438,7454],{"__ignoreMap":31},[36,7358,7359,7361,7363],{"class":38,"line":39},[36,7360,1378],{"class":46},[36,7362,1823],{"class":101},[36,7364,903],{"class":42},[36,7366,7367],{"class":38,"line":53},[36,7368,5281],{"class":42},[36,7370,7371,7373,7375,7378,7380],{"class":38,"line":196},[36,7372,5286],{"class":42},[36,7374,4912],{"class":46},[36,7376,7377],{"class":105},"\"1\"",[36,7379,4912],{"class":46},[36,7381,4934],{"class":42},[36,7383,7384,7387,7390],{"class":38,"line":642},[36,7385,7386],{"class":46},"    goto",[36,7388,7389],{"class":101}," FLAG",[36,7391,5029],{"class":42},[36,7393,7394,7396,7398,7401,7403],{"class":38,"line":655},[36,7395,5286],{"class":42},[36,7397,4912],{"class":46},[36,7399,7400],{"class":105},"\"2\"",[36,7402,4912],{"class":46},[36,7404,4934],{"class":42},[36,7406,7407,7409,7411,7414,7416],{"class":38,"line":662},[36,7408,5286],{"class":42},[36,7410,4912],{"class":46},[36,7412,7413],{"class":105},"\"3\"",[36,7415,4912],{"class":46},[36,7417,4934],{"class":42},[36,7419,7420,7422,7424,7427,7429],{"class":38,"line":667},[36,7421,5286],{"class":42},[36,7423,4912],{"class":46},[36,7425,7426],{"class":105},"\"4\"",[36,7428,4912],{"class":46},[36,7430,4934],{"class":42},[36,7432,7433,7436],{"class":38,"line":679},[36,7434,7435],{"class":101},"    FLAG",[36,7437,888],{"class":42},[36,7439,7440,7442,7444,7447,7449,7451],{"class":38,"line":685},[36,7441,5286],{"class":42},[36,7443,4912],{"class":46},[36,7445,7446],{"class":105},"\"5\"",[36,7448,4912],{"class":46},[36,7450,4977],{"class":42},[36,7452,7453],{"class":3943},"\u002F\u002F跳过了2,3,4,直接到5\n",[36,7455,7456],{"class":38,"line":691},[36,7457,5300],{"class":42},[14,7459,7461],{"id":7460},"_17数组","1.7数组",[318,7463,7465],{"id":7464},"_171一维数组","1.7.1一维数组",[211,7467,7468],{},[214,7469,7470],{},"一维数组定义方式",[248,7472,7473,7483],{},[251,7474,7475],{},[254,7476,7477,7480],{},[257,7478,7479],{},"方式",[257,7481,7482],{},"注意事项",[265,7484,7485,7499,7509],{},[254,7486,7487,7493],{},[270,7488,7489,7490,3940],{},"数据类型 数组名",[36,7491,7492],{},"数组长度",[270,7494,7495,7496,7498],{},"这种方式是先定义再arr",[36,7497,4316],{},"赋值",[254,7500,7501,7506],{},[270,7502,7489,7503,7505],{},[36,7504,7492],{},"={值1,值2....};",[270,7507,7508],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[254,7510,7511,7515],{},[270,7512,7489,7513,7505],{},[36,7514],{},[270,7516,7517,7518,7520],{},"int arr",[36,7519],{},";这是不正确的，按照这样的方式定义必须有初始长度",[211,7522,7523],{"start":53},[214,7524,7525],{},"一维数组数组名\n用途：",[4875,7527,7528],{},[214,7529,7530],{},"1.可以统计整个数组在内存中的长度：",[26,7532,7534],{"className":3879,"code":7533,"language":3881,"meta":31,"style":31},"sizeof(arr);\nsizeof(arr[0]);\n",[33,7535,7536,7543],{"__ignoreMap":31},[36,7537,7538,7540],{"class":38,"line":39},[36,7539,3888],{"class":46},[36,7541,7542],{"class":42},"(arr);\n",[36,7544,7545,7547,7550,7552],{"class":38,"line":53},[36,7546,3888],{"class":46},[36,7548,7549],{"class":42},"(arr[",[36,7551,1859],{"class":112},[36,7553,7554],{"class":42},"]);\n",[4875,7556,7557],{},[214,7558,7559],{},"2.可以获取数组在内存中的首地址:",[26,7561,7563],{"className":3879,"code":7562,"language":3881,"meta":31,"style":31},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[33,7564,7565,7570,7583,7588],{"__ignoreMap":31},[36,7566,7567],{"class":38,"line":39},[36,7568,7569],{"class":3943},"\u002F\u002F查看16进制的首地址\n",[36,7571,7572,7574,7576,7579,7581],{"class":38,"line":53},[36,7573,5105],{"class":42},[36,7575,4912],{"class":46},[36,7577,7578],{"class":42},"arr",[36,7580,4912],{"class":46},[36,7582,4934],{"class":42},[36,7584,7585],{"class":38,"line":196},[36,7586,7587],{"class":3943},"\u002F\u002F看10进制数\n",[36,7589,7590,7592,7594,7596,7598,7600,7602,7605,7607,7609,7611],{"class":38,"line":642},[36,7591,5105],{"class":42},[36,7593,4912],{"class":46},[36,7595,495],{"class":42},[36,7597,1378],{"class":46},[36,7599,4304],{"class":42},[36,7601,4228],{"class":46},[36,7603,7604],{"class":42},"arr[",[36,7606,1859],{"class":112},[36,7608,4809],{"class":42},[36,7610,4912],{"class":46},[36,7612,4934],{"class":42},[19,7614,7615],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[4875,7617,7618],{},[214,7619,7620],{},"1️⃣五只小猪称体重",[26,7622,7624],{"className":3879,"code":7623,"language":3881,"meta":31,"style":31},"#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",[33,7625,7626,7632,7642,7650,7654,7694,7707,7733,7737,7749,7753,7763,7767,7771,7784,7793],{"__ignoreMap":31},[36,7627,7628,7630],{"class":38,"line":39},[36,7629,5664],{"class":46},[36,7631,5667],{"class":105},[36,7633,7634,7636,7638,7640],{"class":38,"line":53},[36,7635,5672],{"class":46},[36,7637,5675],{"class":46},[36,7639,5678],{"class":101},[36,7641,5029],{"class":42},[36,7643,7644,7646,7648],{"class":38,"line":196},[36,7645,1378],{"class":46},[36,7647,1823],{"class":101},[36,7649,903],{"class":42},[36,7651,7652],{"class":38,"line":642},[36,7653,5281],{"class":42},[36,7655,7656,7658,7661,7663,7665,7667,7669,7672,7674,7677,7679,7681,7683,7686,7688,7691],{"class":38,"line":655},[36,7657,5697],{"class":46},[36,7659,7660],{"class":42}," arr[",[36,7662,4194],{"class":112},[36,7664,4809],{"class":42},[36,7666,47],{"class":46},[36,7668,4766],{"class":42},[36,7670,7671],{"class":112},"300",[36,7673,4253],{"class":42},[36,7675,7676],{"class":112},"350",[36,7678,4253],{"class":42},[36,7680,5445],{"class":112},[36,7682,4253],{"class":42},[36,7684,7685],{"class":112},"400",[36,7687,4253],{"class":42},[36,7689,7690],{"class":112},"250",[36,7692,7693],{"class":42},"};\n",[36,7695,7696,7698,7701,7703,7705],{"class":38,"line":662},[36,7697,5697],{"class":46},[36,7699,7700],{"class":42}," tmp",[36,7702,47],{"class":46},[36,7704,1859],{"class":112},[36,7706,5029],{"class":42},[36,7708,7709,7711,7713,7715,7717,7719,7721,7723,7725,7727,7729,7731],{"class":38,"line":667},[36,7710,1909],{"class":46},[36,7712,5386],{"class":42},[36,7714,1378],{"class":46},[36,7716,6734],{"class":42},[36,7718,47],{"class":46},[36,7720,1859],{"class":112},[36,7722,6741],{"class":42},[36,7724,393],{"class":46},[36,7726,4194],{"class":112},[36,7728,6741],{"class":42},[36,7730,6004],{"class":46},[36,7732,922],{"class":42},[36,7734,7735],{"class":38,"line":679},[36,7736,5742],{"class":42},[36,7738,7739,7741,7744,7746],{"class":38,"line":685},[36,7740,995],{"class":46},[36,7742,7743],{"class":42},"(tmp",[36,7745,393],{"class":46},[36,7747,7748],{"class":42},"arr[i])\n",[36,7750,7751],{"class":38,"line":691},[36,7752,6220],{"class":42},[36,7754,7755,7758,7760],{"class":38,"line":696},[36,7756,7757],{"class":42},"            tmp",[36,7759,47],{"class":46},[36,7761,7762],{"class":42},"arr[i];\n",[36,7764,7765],{"class":38,"line":702},[36,7766,6239],{"class":42},[36,7768,7769],{"class":38,"line":708},[36,7770,5899],{"class":42},[36,7772,7773,7775,7777,7780,7782],{"class":38,"line":713},[36,7774,5286],{"class":42},[36,7776,4912],{"class":46},[36,7778,7779],{"class":42},"tmp",[36,7781,4912],{"class":46},[36,7783,4934],{"class":42},[36,7785,7786,7789,7791],{"class":38,"line":719},[36,7787,7788],{"class":46},"    return",[36,7790,1004],{"class":112},[36,7792,5029],{"class":42},[36,7794,7795],{"class":38,"line":725},[36,7796,5300],{"class":42},[4875,7798,7799],{},[214,7800,7801],{},"2️⃣数组元素逆置",[26,7803,7805],{"className":3879,"code":7804,"language":3881,"meta":31,"style":31},"\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",[33,7806,7807,7812,7818,7828,7836,7840,7875,7891,7923,7936,7941,7946,7958,7968,7978,7983,7992,8002,8007,8012,8039,8043,8059,8063,8074,8083],{"__ignoreMap":31},[36,7808,7809],{"class":38,"line":39},[36,7810,7811],{"class":3943},"\u002F\u002F元素逆置\n",[36,7813,7814,7816],{"class":38,"line":53},[36,7815,5664],{"class":46},[36,7817,5667],{"class":105},[36,7819,7820,7822,7824,7826],{"class":38,"line":196},[36,7821,5672],{"class":46},[36,7823,5675],{"class":46},[36,7825,5678],{"class":101},[36,7827,5029],{"class":42},[36,7829,7830,7832,7834],{"class":38,"line":642},[36,7831,1378],{"class":46},[36,7833,1823],{"class":101},[36,7835,903],{"class":42},[36,7837,7838],{"class":38,"line":655},[36,7839,5281],{"class":42},[36,7841,7842,7845,7847,7849,7851,7853,7855,7857,7859,7861,7863,7865,7867,7869,7871,7873],{"class":38,"line":662},[36,7843,7844],{"class":46},"   int",[36,7846,7660],{"class":42},[36,7848,4194],{"class":112},[36,7850,4809],{"class":42},[36,7852,47],{"class":46},[36,7854,4766],{"class":42},[36,7856,4092],{"class":112},[36,7858,4253],{"class":42},[36,7860,498],{"class":112},[36,7862,4253],{"class":42},[36,7864,1982],{"class":112},[36,7866,4253],{"class":42},[36,7868,4168],{"class":112},[36,7870,4253],{"class":42},[36,7872,4194],{"class":112},[36,7874,7693],{"class":42},[36,7876,7877,7879,7882,7884,7886,7888],{"class":38,"line":667},[36,7878,7844],{"class":46},[36,7880,7881],{"class":42}," start",[36,7883,47],{"class":46},[36,7885,1859],{"class":112},[36,7887,3940],{"class":42},[36,7889,7890],{"class":3943},"\u002F\u002F起始下标\n",[36,7892,7893,7895,7898,7901,7904,7907,7909,7911,7914,7916,7918,7920],{"class":38,"line":679},[36,7894,7844],{"class":46},[36,7896,7897],{"class":42}," end",[36,7899,7900],{"class":46},"=sizeof",[36,7902,7903],{"class":42},"(arr)",[36,7905,7906],{"class":46},"\u002Fsizeof",[36,7908,7549],{"class":42},[36,7910,1859],{"class":112},[36,7912,7913],{"class":42},"])",[36,7915,1308],{"class":46},[36,7917,4092],{"class":112},[36,7919,3940],{"class":42},[36,7921,7922],{"class":3943},"\u002F\u002F结束下标\n",[36,7924,7925,7928,7931,7933],{"class":38,"line":685},[36,7926,7927],{"class":46},"   while",[36,7929,7930],{"class":42}," (start",[36,7932,393],{"class":46},[36,7934,7935],{"class":42},"end)\n",[36,7937,7938],{"class":38,"line":691},[36,7939,7940],{"class":42},"   {\n",[36,7942,7943],{"class":38,"line":696},[36,7944,7945],{"class":3943},"    \u002F\u002F实现元素互换代码\n",[36,7947,7948,7950,7953,7955],{"class":38,"line":702},[36,7949,5697],{"class":46},[36,7951,7952],{"class":42}," temp",[36,7954,47],{"class":46},[36,7956,7957],{"class":42},"arr[start];\n",[36,7959,7960,7963,7965],{"class":38,"line":708},[36,7961,7962],{"class":42},"    arr[start]",[36,7964,47],{"class":46},[36,7966,7967],{"class":42},"arr[end];\n",[36,7969,7970,7973,7975],{"class":38,"line":713},[36,7971,7972],{"class":42},"    arr[end]",[36,7974,47],{"class":46},[36,7976,7977],{"class":42},"temp;\n",[36,7979,7980],{"class":38,"line":719},[36,7981,7982],{"class":3943},"    \u002F\u002F下标更新\n",[36,7984,7985,7988,7990],{"class":38,"line":725},[36,7986,7987],{"class":42},"    start",[36,7989,6004],{"class":46},[36,7991,5029],{"class":42},[36,7993,7994,7997,8000],{"class":38,"line":731},[36,7995,7996],{"class":42},"    end",[36,7998,7999],{"class":46},"--",[36,8001,5029],{"class":42},[36,8003,8004],{"class":38,"line":736},[36,8005,8006],{"class":42},"   }\n",[36,8008,8009],{"class":38,"line":742},[36,8010,8011],{"class":3943},"   \u002F\u002F输出逆置后的数组\n",[36,8013,8014,8017,8019,8021,8023,8025,8027,8029,8031,8033,8035,8037],{"class":38,"line":748},[36,8015,8016],{"class":46},"   for",[36,8018,5386],{"class":42},[36,8020,1378],{"class":46},[36,8022,6734],{"class":42},[36,8024,47],{"class":46},[36,8026,1859],{"class":112},[36,8028,6741],{"class":42},[36,8030,393],{"class":46},[36,8032,4194],{"class":112},[36,8034,6741],{"class":42},[36,8036,6004],{"class":46},[36,8038,922],{"class":42},[36,8040,8041],{"class":38,"line":754},[36,8042,7940],{"class":42},[36,8044,8045,8047,8049,8052,8054,8057],{"class":38,"line":760},[36,8046,5286],{"class":42},[36,8048,4912],{"class":46},[36,8050,8051],{"class":42},"arr[i]",[36,8053,4912],{"class":46},[36,8055,8056],{"class":105},"\" \"",[36,8058,5029],{"class":42},[36,8060,8061],{"class":38,"line":766},[36,8062,8006],{"class":42},[36,8064,8065,8068,8070,8072],{"class":38,"line":772},[36,8066,8067],{"class":101},"   system",[36,8069,495],{"class":42},[36,8071,6020],{"class":105},[36,8073,6422],{"class":42},[36,8075,8076,8079,8081],{"class":38,"line":778},[36,8077,8078],{"class":46},"   return",[36,8080,1004],{"class":112},[36,8082,5029],{"class":42},[36,8084,8085],{"class":38,"line":783},[36,8086,5300],{"class":42},[4875,8088,8089],{},[214,8090,8091],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[26,8093,8095],{"className":3879,"code":8094,"language":3881,"meta":31,"style":31},"\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",[33,8096,8097,8102,8108,8118,8126,8130,8181,8194,8220,8224,8238,8242,8247,8252,8282,8286,8291,8325,8329,8334,8354,8359,8371,8387,8402,8407,8411,8415,8428,8454,8458,8472,8476,8484],{"__ignoreMap":31},[36,8098,8099],{"class":38,"line":39},[36,8100,8101],{"class":3943},"\u002F\u002F冒泡排序,升序\n",[36,8103,8104,8106],{"class":38,"line":53},[36,8105,5664],{"class":46},[36,8107,5667],{"class":105},[36,8109,8110,8112,8114,8116],{"class":38,"line":196},[36,8111,5672],{"class":46},[36,8113,5675],{"class":46},[36,8115,5678],{"class":101},[36,8117,5029],{"class":42},[36,8119,8120,8122,8124],{"class":38,"line":642},[36,8121,1378],{"class":46},[36,8123,1823],{"class":101},[36,8125,903],{"class":42},[36,8127,8128],{"class":38,"line":655},[36,8129,5281],{"class":42},[36,8131,8132,8134,8136,8138,8141,8143,8145,8147,8149,8151,8153,8155,8157,8159,8161,8163,8165,8167,8169,8171,8173,8175,8177,8179],{"class":38,"line":662},[36,8133,5697],{"class":46},[36,8135,7660],{"class":42},[36,8137,4295],{"class":112},[36,8139,8140],{"class":42},"] ",[36,8142,47],{"class":46},[36,8144,859],{"class":42},[36,8146,4168],{"class":112},[36,8148,4253],{"class":42},[36,8150,498],{"class":112},[36,8152,4253],{"class":42},[36,8154,4270],{"class":112},[36,8156,4253],{"class":42},[36,8158,1859],{"class":112},[36,8160,4253],{"class":42},[36,8162,4194],{"class":112},[36,8164,4253],{"class":42},[36,8166,4244],{"class":112},[36,8168,4253],{"class":42},[36,8170,4092],{"class":112},[36,8172,4253],{"class":42},[36,8174,1982],{"class":112},[36,8176,4253],{"class":42},[36,8178,4295],{"class":112},[36,8180,7693],{"class":42},[36,8182,8183,8185,8187,8190,8192],{"class":38,"line":667},[36,8184,5286],{"class":42},[36,8186,4912],{"class":46},[36,8188,8189],{"class":105},"\"排序前：\"",[36,8191,4912],{"class":46},[36,8193,4934],{"class":42},[36,8195,8196,8198,8200,8202,8204,8206,8208,8210,8212,8214,8216,8218],{"class":38,"line":679},[36,8197,1909],{"class":46},[36,8199,5386],{"class":42},[36,8201,1378],{"class":46},[36,8203,6734],{"class":42},[36,8205,47],{"class":46},[36,8207,1859],{"class":112},[36,8209,6741],{"class":42},[36,8211,393],{"class":46},[36,8213,4295],{"class":112},[36,8215,6741],{"class":42},[36,8217,6004],{"class":46},[36,8219,922],{"class":42},[36,8221,8222],{"class":38,"line":685},[36,8223,5742],{"class":42},[36,8225,8226,8228,8230,8232,8234,8236],{"class":38,"line":691},[36,8227,7150],{"class":42},[36,8229,4912],{"class":46},[36,8231,8051],{"class":42},[36,8233,4912],{"class":46},[36,8235,8056],{"class":105},[36,8237,5029],{"class":42},[36,8239,8240],{"class":38,"line":696},[36,8241,5899],{"class":42},[36,8243,8244],{"class":38,"line":702},[36,8245,8246],{"class":3943},"    \u002F\u002F开始冒泡排序\n",[36,8248,8249],{"class":38,"line":708},[36,8250,8251],{"class":3943},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[36,8253,8254,8256,8258,8260,8262,8264,8266,8268,8270,8272,8274,8276,8278,8280],{"class":38,"line":713},[36,8255,1909],{"class":46},[36,8257,5386],{"class":42},[36,8259,1378],{"class":46},[36,8261,6734],{"class":42},[36,8263,47],{"class":46},[36,8265,1859],{"class":112},[36,8267,6741],{"class":42},[36,8269,393],{"class":46},[36,8271,4295],{"class":112},[36,8273,1308],{"class":46},[36,8275,4092],{"class":112},[36,8277,6741],{"class":42},[36,8279,6004],{"class":46},[36,8281,922],{"class":42},[36,8283,8284],{"class":38,"line":719},[36,8285,5742],{"class":42},[36,8287,8288],{"class":38,"line":725},[36,8289,8290],{"class":3943},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[36,8292,8293,8295,8297,8299,8301,8303,8305,8307,8309,8311,8313,8315,8317,8319,8321,8323],{"class":38,"line":731},[36,8294,1613],{"class":46},[36,8296,5386],{"class":42},[36,8298,1378],{"class":46},[36,8300,7109],{"class":42},[36,8302,47],{"class":46},[36,8304,1859],{"class":112},[36,8306,7116],{"class":42},[36,8308,393],{"class":46},[36,8310,4295],{"class":112},[36,8312,1308],{"class":46},[36,8314,4316],{"class":42},[36,8316,1308],{"class":46},[36,8318,4092],{"class":112},[36,8320,7116],{"class":42},[36,8322,6004],{"class":46},[36,8324,922],{"class":42},[36,8326,8327],{"class":38,"line":736},[36,8328,6220],{"class":42},[36,8330,8331],{"class":38,"line":742},[36,8332,8333],{"class":3943},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[36,8335,8336,8339,8342,8344,8347,8349,8351],{"class":38,"line":748},[36,8337,8338],{"class":46},"            if",[36,8340,8341],{"class":42},"(arr[j]",[36,8343,4829],{"class":46},[36,8345,8346],{"class":42},"arr[j",[36,8348,4354],{"class":46},[36,8350,4092],{"class":112},[36,8352,8353],{"class":42},"])\n",[36,8355,8356],{"class":38,"line":754},[36,8357,8358],{"class":42},"            {\n",[36,8360,8361,8364,8366,8368],{"class":38,"line":760},[36,8362,8363],{"class":46},"                int",[36,8365,7952],{"class":42},[36,8367,47],{"class":46},[36,8369,8370],{"class":42},"arr[j];\n",[36,8372,8373,8376,8378,8380,8382,8384],{"class":38,"line":766},[36,8374,8375],{"class":42},"                arr[j]",[36,8377,47],{"class":46},[36,8379,8346],{"class":42},[36,8381,4354],{"class":46},[36,8383,4092],{"class":112},[36,8385,8386],{"class":42},"];\n",[36,8388,8389,8392,8394,8396,8398,8400],{"class":38,"line":772},[36,8390,8391],{"class":42},"                arr[j",[36,8393,4354],{"class":46},[36,8395,4092],{"class":112},[36,8397,4809],{"class":42},[36,8399,47],{"class":46},[36,8401,7977],{"class":42},[36,8403,8404],{"class":38,"line":778},[36,8405,8406],{"class":42},"            }\n",[36,8408,8409],{"class":38,"line":783},[36,8410,6239],{"class":42},[36,8412,8413],{"class":38,"line":789},[36,8414,5899],{"class":42},[36,8416,8417,8419,8421,8424,8426],{"class":38,"line":795},[36,8418,5286],{"class":42},[36,8420,4912],{"class":46},[36,8422,8423],{"class":105},"\"排序后：\"",[36,8425,4912],{"class":46},[36,8427,4934],{"class":42},[36,8429,8430,8432,8434,8436,8438,8440,8442,8444,8446,8448,8450,8452],{"class":38,"line":801},[36,8431,1909],{"class":46},[36,8433,5386],{"class":42},[36,8435,1378],{"class":46},[36,8437,6734],{"class":42},[36,8439,47],{"class":46},[36,8441,1859],{"class":112},[36,8443,6741],{"class":42},[36,8445,393],{"class":46},[36,8447,4295],{"class":112},[36,8449,6741],{"class":42},[36,8451,6004],{"class":46},[36,8453,922],{"class":42},[36,8455,8456],{"class":38,"line":807},[36,8457,5742],{"class":42},[36,8459,8460,8462,8464,8466,8468,8470],{"class":38,"line":813},[36,8461,7150],{"class":42},[36,8463,4912],{"class":46},[36,8465,8051],{"class":42},[36,8467,4912],{"class":46},[36,8469,8056],{"class":105},[36,8471,5029],{"class":42},[36,8473,8474],{"class":38,"line":819},[36,8475,5899],{"class":42},[36,8477,8478,8480,8482],{"class":38,"line":824},[36,8479,7788],{"class":46},[36,8481,1004],{"class":112},[36,8483,5029],{"class":42},[36,8485,8486],{"class":38,"line":829},[36,8487,5300],{"class":42},[318,8489,8491],{"id":8490},"_172二维数组","1.7.2二维数组",[211,8493,8494],{},[214,8495,8496],{},"二维数组的四种定义方式",[248,8498,8499,8508],{},[251,8500,8501],{},[254,8502,8503,8506],{},[257,8504,8505],{},"序号",[257,8507,7479],{},[265,8509,8510,8520,8529,8538,8547],{},[254,8511,8512,8514],{},[270,8513,4092],{},[270,8515,8516,8517,3940],{},"数据类型 数组名[行数]",[36,8518,8519],{},"列数",[254,8521,8522,8524],{},[270,8523,498],{},[270,8525,8516,8526,8528],{},[36,8527,8519],{},"={ {数据1,数据2}，{数据3，数据4}... }",[254,8530,8531,8533],{},[270,8532,1982],{},[270,8534,8516,8535,8537],{},[36,8536,8519],{},"={数据1,数据2,数据3...}",[254,8539,8540,8542],{},[270,8541,4168],{},[270,8543,8544,8545,8537],{},"数据类型 数组名[]",[36,8546,8519],{},[254,8548,8549,8552],{},[270,8550,8551],{},"注意：不能只省略列数",[270,8553],{},[211,8555,8556],{"start":53},[214,8557,8558],{},"二维数组数组名",[4875,8560,8561,8564],{},[214,8562,8563],{},"1.查看二维数组所占内存空间",[214,8565,8566],{},"2.获取二维数组首地址",[19,8568,8569],{},"已知二维数组，求二维数组的行数与列数",[26,8571,8573],{"className":3879,"code":8572,"language":3881,"meta":31,"style":31},"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",[33,8574,8575,8583,8587,8605,8609,8627,8643,8648,8673,8706],{"__ignoreMap":31},[36,8576,8577,8579,8581],{"class":38,"line":39},[36,8578,1378],{"class":46},[36,8580,1823],{"class":101},[36,8582,903],{"class":42},[36,8584,8585],{"class":38,"line":53},[36,8586,5281],{"class":42},[36,8588,8589,8591,8593,8595,8598,8600,8602],{"class":38,"line":196},[36,8590,5697],{"class":46},[36,8592,7660],{"class":42},[36,8594,498],{"class":112},[36,8596,8597],{"class":42},"][",[36,8599,1982],{"class":112},[36,8601,4809],{"class":42},[36,8603,8604],{"class":46},"=\n",[36,8606,8607],{"class":38,"line":642},[36,8608,5742],{"class":42},[36,8610,8611,8614,8616,8618,8620,8622,8624],{"class":38,"line":655},[36,8612,8613],{"class":42},"        {",[36,8615,4092],{"class":112},[36,8617,4253],{"class":42},[36,8619,498],{"class":112},[36,8621,4253],{"class":42},[36,8623,1982],{"class":112},[36,8625,8626],{"class":42},"},\n",[36,8628,8629,8631,8633,8635,8637,8639,8641],{"class":38,"line":662},[36,8630,8613],{"class":42},[36,8632,4168],{"class":112},[36,8634,4253],{"class":42},[36,8636,4194],{"class":112},[36,8638,4253],{"class":42},[36,8640,4219],{"class":112},[36,8642,5300],{"class":42},[36,8644,8645],{"class":38,"line":667},[36,8646,8647],{"class":42},"    };\n",[36,8649,8650,8652,8654,8657,8659,8661,8663,8665,8667,8669,8671],{"class":38,"line":679},[36,8651,5286],{"class":42},[36,8653,4912],{"class":46},[36,8655,8656],{"class":105},"\"二维数组的行数\"",[36,8658,5108],{"class":46},[36,8660,7903],{"class":42},[36,8662,7906],{"class":46},[36,8664,7549],{"class":42},[36,8666,1859],{"class":112},[36,8668,7913],{"class":42},[36,8670,4912],{"class":46},[36,8672,4934],{"class":42},[36,8674,8675,8677,8679,8682,8684,8686,8688,8690,8692,8694,8696,8698,8700,8702,8704],{"class":38,"line":685},[36,8676,5286],{"class":42},[36,8678,4912],{"class":46},[36,8680,8681],{"class":105},"\"二维数组的列数\"",[36,8683,5108],{"class":46},[36,8685,7549],{"class":42},[36,8687,1859],{"class":112},[36,8689,7913],{"class":42},[36,8691,7906],{"class":46},[36,8693,7549],{"class":42},[36,8695,1859],{"class":112},[36,8697,8597],{"class":42},[36,8699,1859],{"class":112},[36,8701,7913],{"class":42},[36,8703,4912],{"class":46},[36,8705,4934],{"class":42},[36,8707,8708],{"class":38,"line":691},[36,8709,5300],{"class":42},[19,8711,8712],{},"查看二维数组首地址",[26,8714,8716],{"className":3879,"code":8715,"language":3881,"meta":31,"style":31},"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",[33,8717,8718,8735,8761,8786],{"__ignoreMap":31},[36,8719,8720,8722,8724,8727,8729,8731,8733],{"class":38,"line":39},[36,8721,5105],{"class":42},[36,8723,4912],{"class":46},[36,8725,8726],{"class":105},"\"二维数组首地址：\"",[36,8728,4912],{"class":46},[36,8730,7578],{"class":42},[36,8732,4912],{"class":46},[36,8734,4934],{"class":42},[36,8736,8737,8739,8741,8744,8746,8748,8750,8753,8755,8757,8759],{"class":38,"line":53},[36,8738,5105],{"class":42},[36,8740,4912],{"class":46},[36,8742,8743],{"class":105},"\"二维数组第一行的首地址：\"",[36,8745,4912],{"class":46},[36,8747,495],{"class":42},[36,8749,1378],{"class":46},[36,8751,8752],{"class":42},")arr[",[36,8754,1859],{"class":112},[36,8756,4809],{"class":42},[36,8758,4912],{"class":46},[36,8760,4934],{"class":42},[36,8762,8763,8765,8767,8770,8772,8774,8776,8778,8780,8782,8784],{"class":38,"line":196},[36,8764,5105],{"class":42},[36,8766,4912],{"class":46},[36,8768,8769],{"class":105},"\"二维数组第二行的首地址：\"",[36,8771,4912],{"class":46},[36,8773,495],{"class":42},[36,8775,1378],{"class":46},[36,8777,8752],{"class":42},[36,8779,4092],{"class":112},[36,8781,4809],{"class":42},[36,8783,4912],{"class":46},[36,8785,4934],{"class":42},[36,8787,8788,8790,8792,8795,8797,8799,8801,8803,8805,8807,8809,8811,8813,8815,8817,8819],{"class":38,"line":642},[36,8789,5105],{"class":42},[36,8791,4912],{"class":46},[36,8793,8794],{"class":105},"\"二维数组第一个元素的首地址:\"",[36,8796,4912],{"class":46},[36,8798,495],{"class":42},[36,8800,1378],{"class":46},[36,8802,4304],{"class":42},[36,8804,4228],{"class":46},[36,8806,7604],{"class":42},[36,8808,1859],{"class":112},[36,8810,8597],{"class":42},[36,8812,1859],{"class":112},[36,8814,4809],{"class":42},[36,8816,4912],{"class":46},[36,8818,4977],{"class":42},[36,8820,8821],{"class":3943},"\u002F\u002F对于数，要加取址符\n",[3785,8823,8824],{},"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":31,"searchDepth":53,"depth":53,"links":8826},[8827,8828,8829,8837,8838,8844,8849],{"id":3834,"depth":53,"text":3835},{"id":3841,"depth":53,"text":3842},{"id":3856,"depth":53,"text":3857,"children":8830},[8831,8832,8833,8834,8835,8836],{"id":3860,"depth":196,"text":3861},{"id":3904,"depth":196,"text":3905},{"id":3968,"depth":196,"text":3969},{"id":4893,"depth":196,"text":4894},{"id":4983,"depth":196,"text":4984},{"id":5079,"depth":196,"text":5080},{"id":5121,"depth":53,"text":5122},{"id":5189,"depth":53,"text":5190,"children":8839},[8840,8841,8842,8843],{"id":5193,"depth":196,"text":5194},{"id":5215,"depth":196,"text":5216},{"id":5224,"depth":196,"text":5225},{"id":5233,"depth":196,"text":5234},{"id":5242,"depth":53,"text":5243,"children":8845},[8846,8847,8848],{"id":5246,"depth":196,"text":5247},{"id":5917,"depth":196,"text":5918},{"id":7320,"depth":196,"text":7321},{"id":7460,"depth":53,"text":7461,"children":8850},[8851,8852],{"id":7464,"depth":196,"text":7465},{"id":8490,"depth":196,"text":8491},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":3826,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":8859,"title":8860,"body":8861,"description":31,"extension":3817,"meta":9958,"navigation":658,"path":9959,"seo":9960,"stem":9961,"__hash__":9962},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":8862,"toc":9950},[8863,8866,8870,8878,8884,8887,8952,8956,8959,9035,9039,9042,9045,9048,9261,9265,9270,9334,9339,9406,9411,9502,9505,9610,9614,9617,9623,9767,9771,9774,9788,9791,9836,9839,9947],[10,8864,8860],{"id":8865},"_2函数",[14,8867,8869],{"id":8868},"_21函数概述","2.1函数概述",[211,8871,8872,8875],{},[214,8873,8874],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[214,8876,8877],{},"语法：",[26,8879,8882],{"className":8880,"code":8881,"language":80,"meta":31},[78],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[33,8883,8881],{"__ignoreMap":31},[19,8885,8886],{},"小案例",[26,8888,8890],{"className":3879,"code":8889,"language":3881,"meta":31,"style":31},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[33,8891,8892,8897,8920,8924,8941,8948],{"__ignoreMap":31},[36,8893,8894],{"class":38,"line":39},[36,8895,8896],{"class":3943},"\u002F\u002Fnum1,num2形参\n",[36,8898,8899,8901,8904,8906,8908,8911,8913,8915,8918],{"class":38,"line":53},[36,8900,1378],{"class":46},[36,8902,8903],{"class":101}," add",[36,8905,495],{"class":42},[36,8907,1378],{"class":46},[36,8909,8910],{"class":468}," num1",[36,8912,4253],{"class":42},[36,8914,1378],{"class":46},[36,8916,8917],{"class":468}," num2",[36,8919,922],{"class":42},[36,8921,8922],{"class":38,"line":196},[36,8923,5281],{"class":42},[36,8925,8926,8928,8931,8933,8936,8938],{"class":38,"line":642},[36,8927,5697],{"class":46},[36,8929,8930],{"class":42}," sum",[36,8932,47],{"class":46},[36,8934,8935],{"class":42},"num1",[36,8937,4354],{"class":46},[36,8939,8940],{"class":42},"num2;\n",[36,8942,8943,8945],{"class":38,"line":655},[36,8944,7788],{"class":46},[36,8946,8947],{"class":42}," sum;\n",[36,8949,8950],{"class":38,"line":662},[36,8951,5300],{"class":42},[14,8953,8955],{"id":8954},"_22函数调用","2.2函数调用",[19,8957,8958],{},"调用刚刚写的求和函数",[26,8960,8962],{"className":3879,"code":8961,"language":3881,"meta":31,"style":31},"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",[33,8963,8964,8972,8976,8981,8993,9005,9014,9019,9031],{"__ignoreMap":31},[36,8965,8966,8968,8970],{"class":38,"line":39},[36,8967,1378],{"class":46},[36,8969,1823],{"class":101},[36,8971,903],{"class":42},[36,8973,8974],{"class":38,"line":53},[36,8975,5281],{"class":42},[36,8977,8978],{"class":38,"line":196},[36,8979,8980],{"class":3943},"    \u002F\u002Fa,b实参\n",[36,8982,8983,8985,8987,8989,8991],{"class":38,"line":642},[36,8984,5697],{"class":46},[36,8986,5134],{"class":42},[36,8988,47],{"class":46},[36,8990,1859],{"class":112},[36,8992,5029],{"class":42},[36,8994,8995,8997,8999,9001,9003],{"class":38,"line":655},[36,8996,5697],{"class":46},[36,8998,6536],{"class":42},[36,9000,47],{"class":46},[36,9002,1859],{"class":112},[36,9004,5029],{"class":42},[36,9006,9007,9009,9011],{"class":38,"line":662},[36,9008,5724],{"class":42},[36,9010,5165],{"class":46},[36,9012,9013],{"class":42},"a,b;\n",[36,9015,9016],{"class":38,"line":667},[36,9017,9018],{"class":3943},"    \u002F\u002F调用函数时，实参值传给了形参\n",[36,9020,9021,9023,9025,9028],{"class":38,"line":679},[36,9022,5286],{"class":42},[36,9024,4912],{"class":46},[36,9026,9027],{"class":101},"add",[36,9029,9030],{"class":42},"(a,b);\n",[36,9032,9033],{"class":38,"line":685},[36,9034,5300],{"class":42},[14,9036,9038],{"id":9037},"_23值传递","2.3值传递",[19,9040,9041],{},"值传递就是函数调用时实参将数值传给形参",[19,9043,9044],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,9046,9047],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[26,9049,9051],{"className":3879,"code":9050,"language":3881,"meta":31,"style":31},"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",[33,9052,9053,9075,9079,9092,9109,9127,9138,9147,9156,9169,9185,9201,9210,9214,9222,9226,9238,9250,9257],{"__ignoreMap":31},[36,9054,9055,9058,9061,9063,9065,9067,9069,9071,9073],{"class":38,"line":39},[36,9056,9057],{"class":46},"void",[36,9059,9060],{"class":101}," swap",[36,9062,495],{"class":42},[36,9064,1378],{"class":46},[36,9066,8910],{"class":468},[36,9068,4253],{"class":42},[36,9070,1378],{"class":46},[36,9072,8917],{"class":468},[36,9074,922],{"class":42},[36,9076,9077],{"class":38,"line":53},[36,9078,5281],{"class":42},[36,9080,9081,9083,9085,9088,9090],{"class":38,"line":196},[36,9082,5286],{"class":42},[36,9084,4912],{"class":46},[36,9086,9087],{"class":105},"\"交换前：\"",[36,9089,4912],{"class":46},[36,9091,4934],{"class":42},[36,9093,9094,9096,9098,9101,9103,9105,9107],{"class":38,"line":642},[36,9095,5286],{"class":42},[36,9097,4912],{"class":46},[36,9099,9100],{"class":105},"\"num1=\"",[36,9102,4912],{"class":46},[36,9104,8935],{"class":42},[36,9106,4912],{"class":46},[36,9108,4934],{"class":42},[36,9110,9111,9113,9115,9118,9120,9123,9125],{"class":38,"line":655},[36,9112,5286],{"class":42},[36,9114,4912],{"class":46},[36,9116,9117],{"class":105},"\"num2=\"",[36,9119,4912],{"class":46},[36,9121,9122],{"class":42},"num2",[36,9124,4912],{"class":46},[36,9126,4934],{"class":42},[36,9128,9129,9131,9133,9135],{"class":38,"line":662},[36,9130,5697],{"class":46},[36,9132,7952],{"class":42},[36,9134,47],{"class":46},[36,9136,9137],{"class":42},"num1;\n",[36,9139,9140,9143,9145],{"class":38,"line":667},[36,9141,9142],{"class":42},"    num1",[36,9144,47],{"class":46},[36,9146,8940],{"class":42},[36,9148,9149,9152,9154],{"class":38,"line":679},[36,9150,9151],{"class":42},"    num2",[36,9153,47],{"class":46},[36,9155,7977],{"class":42},[36,9157,9158,9160,9162,9165,9167],{"class":38,"line":685},[36,9159,5286],{"class":42},[36,9161,4912],{"class":46},[36,9163,9164],{"class":105},"\"交换后：\"",[36,9166,4912],{"class":46},[36,9168,4934],{"class":42},[36,9170,9171,9173,9175,9177,9179,9181,9183],{"class":38,"line":691},[36,9172,5286],{"class":42},[36,9174,4912],{"class":46},[36,9176,9100],{"class":105},[36,9178,4912],{"class":46},[36,9180,8935],{"class":42},[36,9182,4912],{"class":46},[36,9184,4934],{"class":42},[36,9186,9187,9189,9191,9193,9195,9197,9199],{"class":38,"line":696},[36,9188,5286],{"class":42},[36,9190,4912],{"class":46},[36,9192,9117],{"class":105},[36,9194,4912],{"class":46},[36,9196,9122],{"class":42},[36,9198,4912],{"class":46},[36,9200,4934],{"class":42},[36,9202,9203,9205,9207],{"class":38,"line":702},[36,9204,7788],{"class":46},[36,9206,3940],{"class":42},[36,9208,9209],{"class":3943},"\u002F\u002F或者不写\n",[36,9211,9212],{"class":38,"line":708},[36,9213,5300],{"class":42},[36,9215,9216,9218,9220],{"class":38,"line":713},[36,9217,1378],{"class":46},[36,9219,1823],{"class":101},[36,9221,903],{"class":42},[36,9223,9224],{"class":38,"line":719},[36,9225,5281],{"class":42},[36,9227,9228,9230,9232,9234,9236],{"class":38,"line":725},[36,9229,5697],{"class":46},[36,9231,5134],{"class":42},[36,9233,47],{"class":46},[36,9235,554],{"class":112},[36,9237,5029],{"class":42},[36,9239,9240,9242,9244,9246,9248],{"class":38,"line":731},[36,9241,5697],{"class":46},[36,9243,6536],{"class":42},[36,9245,47],{"class":46},[36,9247,1921],{"class":112},[36,9249,5029],{"class":42},[36,9251,9252,9255],{"class":38,"line":736},[36,9253,9254],{"class":101},"    swap",[36,9256,9030],{"class":42},[36,9258,9259],{"class":38,"line":742},[36,9260,5300],{"class":42},[14,9262,9264],{"id":9263},"_24函数的常见形式","2.4函数的常见形式",[211,9266,9267],{},[214,9268,9269],{},"无参无返",[26,9271,9273],{"className":3879,"code":9272,"language":3881,"meta":31,"style":31},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[33,9274,9275,9284,9288,9301,9305,9313,9317,9322,9330],{"__ignoreMap":31},[36,9276,9277,9279,9282],{"class":38,"line":39},[36,9278,9057],{"class":46},[36,9280,9281],{"class":101}," test01",[36,9283,903],{"class":42},[36,9285,9286],{"class":38,"line":53},[36,9287,5281],{"class":42},[36,9289,9290,9292,9294,9297,9299],{"class":38,"line":196},[36,9291,5286],{"class":42},[36,9293,4912],{"class":46},[36,9295,9296],{"class":105},"\"你好\"",[36,9298,4912],{"class":46},[36,9300,4934],{"class":42},[36,9302,9303],{"class":38,"line":642},[36,9304,5300],{"class":42},[36,9306,9307,9309,9311],{"class":38,"line":655},[36,9308,1378],{"class":46},[36,9310,1823],{"class":101},[36,9312,903],{"class":42},[36,9314,9315],{"class":38,"line":662},[36,9316,5281],{"class":42},[36,9318,9319],{"class":38,"line":667},[36,9320,9321],{"class":3943},"    \u002F\u002F函数调用\n",[36,9323,9324,9327],{"class":38,"line":679},[36,9325,9326],{"class":101},"    test01",[36,9328,9329],{"class":42},"();\n",[36,9331,9332],{"class":38,"line":685},[36,9333,5300],{"class":42},[211,9335,9336],{"start":53},[214,9337,9338],{},"有参无返",[26,9340,9342],{"className":3879,"code":9341,"language":3881,"meta":31,"style":31},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[33,9343,9344,9359,9363,9375,9379,9387,9391,9402],{"__ignoreMap":31},[36,9345,9346,9348,9351,9353,9355,9357],{"class":38,"line":39},[36,9347,9057],{"class":46},[36,9349,9350],{"class":101}," test02",[36,9352,495],{"class":42},[36,9354,1378],{"class":46},[36,9356,5134],{"class":468},[36,9358,922],{"class":42},[36,9360,9361],{"class":38,"line":53},[36,9362,5281],{"class":42},[36,9364,9365,9367,9369,9371,9373],{"class":38,"line":196},[36,9366,5286],{"class":42},[36,9368,4912],{"class":46},[36,9370,9296],{"class":105},[36,9372,4912],{"class":46},[36,9374,4934],{"class":42},[36,9376,9377],{"class":38,"line":642},[36,9378,5300],{"class":42},[36,9380,9381,9383,9385],{"class":38,"line":655},[36,9382,1378],{"class":46},[36,9384,1823],{"class":101},[36,9386,903],{"class":42},[36,9388,9389],{"class":38,"line":662},[36,9390,5281],{"class":42},[36,9392,9393,9396,9398,9400],{"class":38,"line":667},[36,9394,9395],{"class":101},"    test02",[36,9397,495],{"class":42},[36,9399,4186],{"class":112},[36,9401,6422],{"class":42},[36,9403,9404],{"class":38,"line":679},[36,9405,5300],{"class":42},[211,9407,9408],{"start":196},[214,9409,9410],{},"无参有返",[26,9412,9414],{"className":3879,"code":9413,"language":3881,"meta":31,"style":31},"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",[33,9415,9416,9425,9429,9441,9450,9454,9462,9466,9479,9498],{"__ignoreMap":31},[36,9417,9418,9420,9423],{"class":38,"line":39},[36,9419,1378],{"class":46},[36,9421,9422],{"class":101}," test03",[36,9424,903],{"class":42},[36,9426,9427],{"class":38,"line":53},[36,9428,5281],{"class":42},[36,9430,9431,9433,9435,9437,9439],{"class":38,"line":196},[36,9432,5286],{"class":42},[36,9434,4912],{"class":46},[36,9436,9296],{"class":105},[36,9438,4912],{"class":46},[36,9440,4934],{"class":42},[36,9442,9443,9445,9448],{"class":38,"line":642},[36,9444,7788],{"class":46},[36,9446,9447],{"class":112}," 100",[36,9449,5029],{"class":42},[36,9451,9452],{"class":38,"line":655},[36,9453,5300],{"class":42},[36,9455,9456,9458,9460],{"class":38,"line":662},[36,9457,1378],{"class":46},[36,9459,1823],{"class":101},[36,9461,903],{"class":42},[36,9463,9464],{"class":38,"line":667},[36,9465,5281],{"class":42},[36,9467,9468,9470,9472,9474,9477],{"class":38,"line":679},[36,9469,5697],{"class":46},[36,9471,8910],{"class":42},[36,9473,47],{"class":46},[36,9475,9476],{"class":101},"test03",[36,9478,9329],{"class":42},[36,9480,9481,9483,9485,9487,9489,9491,9493,9495],{"class":38,"line":685},[36,9482,5286],{"class":42},[36,9484,4912],{"class":46},[36,9486,9100],{"class":105},[36,9488,4912],{"class":46},[36,9490,8935],{"class":42},[36,9492,4912],{"class":46},[36,9494,4977],{"class":42},[36,9496,9497],{"class":3943}," \u002F\u002F100\n",[36,9499,9500],{"class":38,"line":691},[36,9501,5300],{"class":42},[19,9503,9504],{},"4.有参有返",[26,9506,9508],{"className":3879,"code":9507,"language":3881,"meta":31,"style":31},"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",[33,9509,9510,9525,9529,9542,9548,9552,9561,9565,9577,9591,9606],{"__ignoreMap":31},[36,9511,9512,9514,9517,9519,9521,9523],{"class":38,"line":39},[36,9513,1378],{"class":46},[36,9515,9516],{"class":101}," test04",[36,9518,495],{"class":42},[36,9520,1378],{"class":46},[36,9522,5134],{"class":468},[36,9524,922],{"class":42},[36,9526,9527],{"class":38,"line":53},[36,9528,5281],{"class":42},[36,9530,9531,9533,9535,9538,9540],{"class":38,"line":196},[36,9532,5286],{"class":42},[36,9534,4912],{"class":46},[36,9536,9537],{"class":105},"\"hello\"",[36,9539,4912],{"class":46},[36,9541,4934],{"class":42},[36,9543,9544,9546],{"class":38,"line":642},[36,9545,7788],{"class":46},[36,9547,5168],{"class":42},[36,9549,9550],{"class":38,"line":655},[36,9551,5300],{"class":42},[36,9553,9554,9556,9559],{"class":38,"line":662},[36,9555,1378],{"class":46},[36,9557,9558],{"class":101}," mian",[36,9560,903],{"class":42},[36,9562,9563],{"class":38,"line":667},[36,9564,5281],{"class":42},[36,9566,9567,9569,9571,9573,9575],{"class":38,"line":679},[36,9568,5697],{"class":46},[36,9570,6536],{"class":42},[36,9572,47],{"class":46},[36,9574,4092],{"class":112},[36,9576,5029],{"class":42},[36,9578,9579,9581,9583,9585,9588],{"class":38,"line":685},[36,9580,5697],{"class":46},[36,9582,6552],{"class":42},[36,9584,47],{"class":46},[36,9586,9587],{"class":101},"test04",[36,9589,9590],{"class":42},"(b);\n",[36,9592,9593,9595,9597,9599,9601,9603],{"class":38,"line":691},[36,9594,5286],{"class":42},[36,9596,4912],{"class":46},[36,9598,4163],{"class":42},[36,9600,4912],{"class":46},[36,9602,4977],{"class":42},[36,9604,9605],{"class":3943}," \u002F\u002F1\n",[36,9607,9608],{"class":38,"line":696},[36,9609,5300],{"class":42},[14,9611,9613],{"id":9612},"_25函数的声明","2.5函数的声明",[19,9615,9616],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,9618,9619,9620],{},"函数的",[4027,9621,9622],{},"声明可以多次，但是函数的定义只能有一次",[26,9624,9626],{"className":3879,"code":9625,"language":3881,"meta":31,"style":31},"\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",[33,9627,9628,9633,9638,9663,9672,9676,9688,9700,9716,9720,9740,9744,9763],{"__ignoreMap":31},[36,9629,9630],{"class":38,"line":39},[36,9631,9632],{"class":3943},"\u002F\u002F函数声明\n",[36,9634,9635],{"class":38,"line":53},[36,9636,9637],{"class":3943},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[36,9639,9640,9642,9645,9647,9649,9651,9653,9655,9657,9660],{"class":38,"line":196},[36,9641,1378],{"class":46},[36,9643,9644],{"class":101}," max",[36,9646,495],{"class":42},[36,9648,1378],{"class":46},[36,9650,5134],{"class":468},[36,9652,4253],{"class":42},[36,9654,1378],{"class":46},[36,9656,6536],{"class":468},[36,9658,9659],{"class":42},");",[36,9661,9662],{"class":3943},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[36,9664,9665,9667,9669],{"class":38,"line":642},[36,9666,1378],{"class":46},[36,9668,1823],{"class":101},[36,9670,9671],{"class":42},"() \n",[36,9673,9674],{"class":38,"line":655},[36,9675,5281],{"class":42},[36,9677,9678,9680,9682,9684,9686],{"class":38,"line":662},[36,9679,5697],{"class":46},[36,9681,5134],{"class":42},[36,9683,47],{"class":46},[36,9685,554],{"class":112},[36,9687,5029],{"class":42},[36,9689,9690,9692,9694,9696,9698],{"class":38,"line":667},[36,9691,5697],{"class":46},[36,9693,6536],{"class":42},[36,9695,47],{"class":46},[36,9697,1921],{"class":112},[36,9699,5029],{"class":42},[36,9701,9702,9704,9706,9709,9712,9714],{"class":38,"line":679},[36,9703,5286],{"class":42},[36,9705,4912],{"class":46},[36,9707,9708],{"class":101},"max",[36,9710,9711],{"class":42},"(a,b)",[36,9713,4912],{"class":46},[36,9715,4934],{"class":42},[36,9717,9718],{"class":38,"line":685},[36,9719,5300],{"class":42},[36,9721,9722,9724,9726,9728,9730,9732,9734,9736,9738],{"class":38,"line":691},[36,9723,1378],{"class":46},[36,9725,9644],{"class":101},[36,9727,495],{"class":42},[36,9729,1378],{"class":46},[36,9731,5134],{"class":468},[36,9733,4253],{"class":42},[36,9735,1378],{"class":46},[36,9737,6536],{"class":468},[36,9739,922],{"class":42},[36,9741,9742],{"class":38,"line":696},[36,9743,5281],{"class":42},[36,9745,9746,9748,9750,9752,9754,9756,9758,9760],{"class":38,"line":702},[36,9747,7788],{"class":46},[36,9749,5134],{"class":42},[36,9751,4829],{"class":46},[36,9753,4138],{"class":42},[36,9755,4855],{"class":46},[36,9757,4113],{"class":42},[36,9759,4729],{"class":46},[36,9761,9762],{"class":42},"b;\n",[36,9764,9765],{"class":38,"line":708},[36,9766,5300],{"class":42},[14,9768,9770],{"id":9769},"_26函数的分文件编写","2.6函数的分文件编写",[19,9772,9773],{},"4个步骤：",[4875,9775,9776,9779,9782,9785],{},[214,9777,9778],{},"1.创建后缀名为.h的头文件",[214,9780,9781],{},"2.创建后缀名为.cpp的源文件",[214,9783,9784],{},"3.在头文件中写函数的定义",[214,9786,9787],{},"4.在源文件中写函数的定义\n示例：",[19,9789,9790],{},"头文件：swap.h",[26,9792,9794],{"className":3879,"code":9793,"language":3881,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[33,9795,9796,9802,9812,9816],{"__ignoreMap":31},[36,9797,9798,9800],{"class":38,"line":39},[36,9799,5664],{"class":46},[36,9801,5667],{"class":105},[36,9803,9804,9806,9808,9810],{"class":38,"line":53},[36,9805,5672],{"class":46},[36,9807,5675],{"class":46},[36,9809,5678],{"class":101},[36,9811,5029],{"class":42},[36,9813,9814],{"class":38,"line":196},[36,9815,9632],{"class":3943},[36,9817,9818,9820,9822,9824,9826,9828,9830,9832,9834],{"class":38,"line":642},[36,9819,9057],{"class":46},[36,9821,9060],{"class":101},[36,9823,495],{"class":42},[36,9825,1378],{"class":46},[36,9827,5134],{"class":468},[36,9829,4253],{"class":42},[36,9831,1378],{"class":46},[36,9833,6536],{"class":468},[36,9835,6422],{"class":42},[19,9837,9838],{},"源文件：swap.cpp",[26,9840,9842],{"className":3879,"code":9841,"language":3881,"meta":31,"style":31},"#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",[33,9843,9844,9851,9856,9876,9880,9891,9900,9909,9926,9943],{"__ignoreMap":31},[36,9845,9846,9848],{"class":38,"line":39},[36,9847,5664],{"class":46},[36,9849,9850],{"class":105}," \"swap.h\"\n",[36,9852,9853],{"class":38,"line":53},[36,9854,9855],{"class":3943},"\u002F\u002F函数的定义\n",[36,9857,9858,9860,9862,9864,9866,9868,9870,9872,9874],{"class":38,"line":196},[36,9859,9057],{"class":46},[36,9861,9060],{"class":101},[36,9863,495],{"class":42},[36,9865,1378],{"class":46},[36,9867,5134],{"class":468},[36,9869,4253],{"class":42},[36,9871,1378],{"class":46},[36,9873,6536],{"class":468},[36,9875,922],{"class":42},[36,9877,9878],{"class":38,"line":642},[36,9879,5281],{"class":42},[36,9881,9882,9884,9886,9888],{"class":38,"line":655},[36,9883,5697],{"class":46},[36,9885,7952],{"class":42},[36,9887,47],{"class":46},[36,9889,9890],{"class":42},"a;\n",[36,9892,9893,9896,9898],{"class":38,"line":662},[36,9894,9895],{"class":42},"    a",[36,9897,47],{"class":46},[36,9899,9762],{"class":42},[36,9901,9902,9905,9907],{"class":38,"line":667},[36,9903,9904],{"class":42},"    b",[36,9906,47],{"class":46},[36,9908,7977],{"class":42},[36,9910,9911,9913,9915,9918,9920,9922,9924],{"class":38,"line":679},[36,9912,5286],{"class":42},[36,9914,4912],{"class":46},[36,9916,9917],{"class":105},"\"a=\"",[36,9919,4912],{"class":46},[36,9921,4113],{"class":42},[36,9923,4912],{"class":46},[36,9925,4934],{"class":42},[36,9927,9928,9930,9932,9935,9937,9939,9941],{"class":38,"line":685},[36,9929,5286],{"class":42},[36,9931,4912],{"class":46},[36,9933,9934],{"class":105},"\"b=\"",[36,9936,4912],{"class":46},[36,9938,4138],{"class":42},[36,9940,4912],{"class":46},[36,9942,4934],{"class":42},[36,9944,9945],{"class":38,"line":691},[36,9946,5300],{"class":42},[3785,9948,9949],{},"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":31,"searchDepth":53,"depth":53,"links":9951},[9952,9953,9954,9955,9956,9957],{"id":8868,"depth":53,"text":8869},{"id":8954,"depth":53,"text":8955},{"id":9037,"depth":53,"text":9038},{"id":9263,"depth":53,"text":9264},{"id":9612,"depth":53,"text":9613},{"id":9769,"depth":53,"text":9770},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":8860,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":9964,"title":9965,"body":9966,"description":9973,"extension":3817,"meta":11376,"navigation":658,"path":11377,"seo":11378,"stem":11379,"__hash__":11380},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":9967,"toc":11366},[9968,9971,9974,9978,10139,10143,10146,10149,10152,10155,10294,10298,10301,10304,10307,10372,10376,10381,10448,10451,10455,10458,10469,10474,10494,10497,10502,10521,10524,10528,10547,10550,10554,10789,10793,10796,10799,10802,10964,10967,10971,10974,10980,11363],[10,9969,9965],{"id":9970},"_3指针",[19,9972,9973],{},"通过指针保存一个地址，指针就是个地址",[14,9975,9977],{"id":9976},"_31定义指针","3.1定义指针",[26,9979,9981],{"className":3879,"code":9980,"language":3881,"meta":31,"style":31},"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",[33,9982,9983,9991,9995,10000,10012,10017,10025,10035,10053,10073,10077,10082,10087,10092,10105,10121,10135],{"__ignoreMap":31},[36,9984,9985,9987,9989],{"class":38,"line":39},[36,9986,1378],{"class":46},[36,9988,1823],{"class":101},[36,9990,903],{"class":42},[36,9992,9993],{"class":38,"line":53},[36,9994,5281],{"class":42},[36,9996,9997],{"class":38,"line":196},[36,9998,9999],{"class":3943},"    \u002F\u002F1.定义指针\n",[36,10001,10002,10004,10006,10008,10010],{"class":38,"line":642},[36,10003,5697],{"class":46},[36,10005,5134],{"class":42},[36,10007,47],{"class":46},[36,10009,554],{"class":112},[36,10011,5029],{"class":42},[36,10013,10014],{"class":38,"line":655},[36,10015,10016],{"class":3943},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[36,10018,10019,10022],{"class":38,"line":662},[36,10020,10021],{"class":46},"    int*",[36,10023,10024],{"class":42},"p;\n",[36,10026,10027,10030,10033],{"class":38,"line":667},[36,10028,10029],{"class":42},"    p",[36,10031,10032],{"class":46},"=&",[36,10034,9890],{"class":42},[36,10036,10037,10039,10041,10044,10047,10049,10051],{"class":38,"line":679},[36,10038,5286],{"class":42},[36,10040,4912],{"class":46},[36,10042,10043],{"class":105},"\"a的地址为：\"",[36,10045,10046],{"class":46},"\u003C\u003C&",[36,10048,4113],{"class":42},[36,10050,4912],{"class":46},[36,10052,4934],{"class":42},[36,10054,10055,10057,10059,10062,10064,10066,10068,10070],{"class":38,"line":685},[36,10056,5286],{"class":42},[36,10058,4912],{"class":46},[36,10060,10061],{"class":105},"\"指针p为：\"",[36,10063,4912],{"class":46},[36,10065,19],{"class":42},[36,10067,4912],{"class":46},[36,10069,4977],{"class":42},[36,10071,10072],{"class":3943},"\u002F\u002F指针p表示的就是a的地址\n",[36,10074,10075],{"class":38,"line":691},[36,10076,659],{"emptyLinePlaceholder":658},[36,10078,10079],{"class":38,"line":696},[36,10080,10081],{"class":3943},"    \u002F\u002F2.使用指针\n",[36,10083,10084],{"class":38,"line":702},[36,10085,10086],{"class":3943},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[36,10088,10089],{"class":38,"line":708},[36,10090,10091],{"class":3943},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[36,10093,10094,10097,10099,10101,10103],{"class":38,"line":713},[36,10095,10096],{"class":46},"    *",[36,10098,19],{"class":42},[36,10100,47],{"class":46},[36,10102,3727],{"class":112},[36,10104,5029],{"class":42},[36,10106,10107,10109,10112,10114,10116,10118],{"class":38,"line":719},[36,10108,5286],{"class":42},[36,10110,10111],{"class":46},"\u003C\u003C*",[36,10113,19],{"class":42},[36,10115,4912],{"class":46},[36,10117,4977],{"class":42},[36,10119,10120],{"class":3943},"\u002F\u002F1000\n",[36,10122,10123,10125,10127,10129,10131,10133],{"class":38,"line":725},[36,10124,5286],{"class":42},[36,10126,4912],{"class":46},[36,10128,4113],{"class":42},[36,10130,4912],{"class":46},[36,10132,4977],{"class":42},[36,10134,10120],{"class":3943},[36,10136,10137],{"class":38,"line":731},[36,10138,5300],{"class":42},[14,10140,10142],{"id":10141},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,10144,10145],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,10147,10148],{},"在32位操作系统下：占用4个字节空间",[19,10150,10151],{},"在64位操作系统下：占用8个字节空间",[19,10153,10154],{},"上方是不管啥数据类型的",[26,10156,10158],{"className":3879,"code":10157,"language":3881,"meta":31,"style":31},"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",[33,10159,10160,10168,10172,10177,10189,10194,10199,10204,10216,10238,10264,10290],{"__ignoreMap":31},[36,10161,10162,10164,10166],{"class":38,"line":39},[36,10163,1378],{"class":46},[36,10165,1823],{"class":101},[36,10167,903],{"class":42},[36,10169,10170],{"class":38,"line":53},[36,10171,5281],{"class":42},[36,10173,10174],{"class":38,"line":196},[36,10175,10176],{"class":3943},"    \u002F\u002F指针所占内存空间\n",[36,10178,10179,10181,10183,10185,10187],{"class":38,"line":642},[36,10180,5697],{"class":46},[36,10182,5134],{"class":42},[36,10184,47],{"class":46},[36,10186,554],{"class":112},[36,10188,5029],{"class":42},[36,10190,10191],{"class":38,"line":655},[36,10192,10193],{"class":3943},"    \u002F\u002Fint *p;\n",[36,10195,10196],{"class":38,"line":662},[36,10197,10198],{"class":3943},"    \u002F\u002Fp=&a;\n",[36,10200,10201],{"class":38,"line":667},[36,10202,10203],{"class":3943},"    \u002F\u002F上述可以写为以下：\n",[36,10205,10206,10208,10210,10212,10214],{"class":38,"line":679},[36,10207,5697],{"class":46},[36,10209,1325],{"class":46},[36,10211,19],{"class":42},[36,10213,10032],{"class":46},[36,10215,9890],{"class":42},[36,10217,10218,10221,10223,10226,10228,10231,10233,10235],{"class":38,"line":685},[36,10219,10220],{"class":42},"    cout ",[36,10222,4912],{"class":46},[36,10224,10225],{"class":105},"\"sizeof(int *)\"",[36,10227,5108],{"class":46},[36,10229,10230],{"class":42},"(p)",[36,10232,4912],{"class":46},[36,10234,4977],{"class":42},[36,10236,10237],{"class":3943},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[36,10239,10240,10242,10244,10246,10248,10250,10252,10254,10256,10258,10261],{"class":38,"line":691},[36,10241,10220],{"class":42},[36,10243,4912],{"class":46},[36,10245,10225],{"class":105},[36,10247,5108],{"class":46},[36,10249,495],{"class":42},[36,10251,1378],{"class":46},[36,10253,1325],{"class":46},[36,10255,4304],{"class":42},[36,10257,4912],{"class":46},[36,10259,10260],{"class":42},"endl",[36,10262,10263],{"class":3943},"  \u002F\u002F4字节(32位的话)\n",[36,10265,10266,10268,10270,10273,10275,10277,10279,10281,10283,10285,10287],{"class":38,"line":696},[36,10267,10220],{"class":42},[36,10269,4912],{"class":46},[36,10271,10272],{"class":105},"\"sizeof(char *)\"",[36,10274,5108],{"class":46},[36,10276,495],{"class":42},[36,10278,3979],{"class":46},[36,10280,1325],{"class":46},[36,10282,4304],{"class":42},[36,10284,4912],{"class":46},[36,10286,4977],{"class":42},[36,10288,10289],{"class":3943}," \u002F\u002F4字节(32位的话)\n",[36,10291,10292],{"class":38,"line":702},[36,10293,5300],{"class":42},[14,10295,10297],{"id":10296},"_33空指针","3.3空指针",[19,10299,10300],{},"空指针：指针变量指向内存中编号为0的空间",[19,10302,10303],{},"用途：初始化指针变量",[19,10305,10306],{},"注意：空指针指向的内存是不可以访问的",[26,10308,10310],{"className":3879,"code":10309,"language":3881,"meta":31,"style":31},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[33,10311,10312,10320,10324,10329,10343,10348,10363,10368],{"__ignoreMap":31},[36,10313,10314,10316,10318],{"class":38,"line":39},[36,10315,1378],{"class":46},[36,10317,1823],{"class":101},[36,10319,903],{"class":42},[36,10321,10322],{"class":38,"line":53},[36,10323,5281],{"class":42},[36,10325,10326],{"class":38,"line":196},[36,10327,10328],{"class":3943},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[36,10330,10331,10333,10335,10337,10339,10341],{"class":38,"line":642},[36,10332,5697],{"class":46},[36,10334,1325],{"class":46},[36,10336,19],{"class":42},[36,10338,47],{"class":46},[36,10340,6104],{"class":112},[36,10342,5029],{"class":42},[36,10344,10345],{"class":38,"line":655},[36,10346,10347],{"class":3943},"    \u002F\u002F2.空指针不能进行访问\n",[36,10349,10350,10352,10354,10356,10358,10360],{"class":38,"line":662},[36,10351,10096],{"class":46},[36,10353,19],{"class":42},[36,10355,47],{"class":46},[36,10357,4186],{"class":112},[36,10359,3940],{"class":42},[36,10361,10362],{"class":3943},"\u002F\u002F直接报错，压根不能访问\n",[36,10364,10365],{"class":38,"line":667},[36,10366,10367],{"class":3943},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[36,10369,10370],{"class":38,"line":679},[36,10371,5300],{"class":42},[14,10373,10375],{"id":10374},"_34野指针","3.4野指针",[19,10377,10378],{},[4027,10379,10380],{},"指针变量指向非法的内存空间",[26,10382,10384],{"className":3879,"code":10383,"language":3881,"meta":31,"style":31},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[33,10385,10386,10394,10398,10427,10432,10444],{"__ignoreMap":31},[36,10387,10388,10390,10392],{"class":38,"line":39},[36,10389,1378],{"class":46},[36,10391,1823],{"class":101},[36,10393,903],{"class":42},[36,10395,10396],{"class":38,"line":53},[36,10397,5281],{"class":42},[36,10399,10400,10402,10404,10406,10408,10410,10412,10414,10416,10419,10422,10424],{"class":38,"line":196},[36,10401,5697],{"class":46},[36,10403,1325],{"class":46},[36,10405,19],{"class":42},[36,10407,47],{"class":46},[36,10409,495],{"class":42},[36,10411,1378],{"class":46},[36,10413,1325],{"class":46},[36,10415,4304],{"class":42},[36,10417,10418],{"class":46},"0x",[36,10420,10421],{"class":112},"1100",[36,10423,3940],{"class":42},[36,10425,10426],{"class":3943}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[36,10428,10429],{"class":38,"line":642},[36,10430,10431],{"class":3943},"    \u002F\u002F访问野指针报错\n",[36,10433,10434,10436,10438,10440,10442],{"class":38,"line":655},[36,10435,5286],{"class":42},[36,10437,10111],{"class":46},[36,10439,19],{"class":42},[36,10441,4912],{"class":46},[36,10443,4934],{"class":42},[36,10445,10446],{"class":38,"line":662},[36,10447,5300],{"class":42},[19,10449,10450],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,10452,10454],{"id":10453},"_35const修饰指针","3.5const修饰指针",[19,10456,10457],{},"三种情况：",[4875,10459,10460,10463,10466],{},[214,10461,10462],{},"const修饰指针 常量指针",[214,10464,10465],{},"const修饰常量 指针常量",[214,10467,10468],{},"const即修饰指针，又修饰常量",[211,10470,10471],{},[214,10472,10473],{},"常量指针",[26,10475,10477],{"className":3879,"code":10476,"language":3881,"meta":31,"style":31},"const int *p=&a;\n",[33,10478,10479],{"__ignoreMap":31},[36,10480,10481,10484,10486,10488,10490,10492],{"class":38,"line":39},[36,10482,10483],{"class":46},"const",[36,10485,6094],{"class":46},[36,10487,1325],{"class":46},[36,10489,19],{"class":42},[36,10491,10032],{"class":46},[36,10493,9890],{"class":42},[19,10495,10496],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[211,10498,10499],{"start":53},[214,10500,10501],{},"指针常量",[26,10503,10505],{"className":3879,"code":10504,"language":3881,"meta":31,"style":31},"int *const p=&a;\n",[33,10506,10507],{"__ignoreMap":31},[36,10508,10509,10511,10514,10517,10519],{"class":38,"line":39},[36,10510,1378],{"class":46},[36,10512,10513],{"class":46}," *const",[36,10515,10516],{"class":42}," p",[36,10518,10032],{"class":46},[36,10520,9890],{"class":42},[19,10522,10523],{},"指针的指向不可以改，指针指向的值可以改",[211,10525,10526],{"start":196},[214,10527,10468],{},[26,10529,10531],{"className":3879,"code":10530,"language":3881,"meta":31,"style":31},"const int *const p=&a;\n",[33,10532,10533],{"__ignoreMap":31},[36,10534,10535,10537,10539,10541,10543,10545],{"class":38,"line":39},[36,10536,10483],{"class":46},[36,10538,6094],{"class":46},[36,10540,10513],{"class":46},[36,10542,10516],{"class":42},[36,10544,10032],{"class":46},[36,10546,9890],{"class":42},[19,10548,10549],{},"指针的指向和指针指向的值都不可以改变",[14,10551,10553],{"id":10552},"_36指针和数组","3.6指针和数组",[26,10555,10557],{"className":3879,"code":10556,"language":3881,"meta":31,"style":31},"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",[33,10558,10559,10567,10571,10576,10630,10651,10667,10683,10694,10711,10716,10730,10756,10760,10772,10781,10785],{"__ignoreMap":31},[36,10560,10561,10563,10565],{"class":38,"line":39},[36,10562,1378],{"class":46},[36,10564,1823],{"class":101},[36,10566,903],{"class":42},[36,10568,10569],{"class":38,"line":53},[36,10570,5281],{"class":42},[36,10572,10573],{"class":38,"line":196},[36,10574,10575],{"class":3943},"    \u002F\u002F利用指针访问数组中的元素\n",[36,10577,10578,10580,10582,10584,10586,10588,10590,10592,10594,10596,10598,10600,10602,10604,10606,10608,10610,10612,10614,10616,10618,10620,10622,10624,10626,10628],{"class":38,"line":642},[36,10579,5697],{"class":46},[36,10581,7660],{"class":42},[36,10583,554],{"class":112},[36,10585,4809],{"class":42},[36,10587,47],{"class":46},[36,10589,4766],{"class":42},[36,10591,4092],{"class":112},[36,10593,4253],{"class":42},[36,10595,498],{"class":112},[36,10597,4253],{"class":42},[36,10599,1982],{"class":112},[36,10601,4253],{"class":42},[36,10603,4168],{"class":112},[36,10605,4253],{"class":42},[36,10607,4194],{"class":112},[36,10609,4253],{"class":42},[36,10611,4219],{"class":112},[36,10613,4253],{"class":42},[36,10615,4244],{"class":112},[36,10617,4253],{"class":42},[36,10619,4270],{"class":112},[36,10621,4253],{"class":42},[36,10623,4295],{"class":112},[36,10625,4253],{"class":42},[36,10627,554],{"class":112},[36,10629,7693],{"class":42},[36,10631,10632,10634,10636,10639,10641,10643,10645,10647,10649],{"class":38,"line":655},[36,10633,5286],{"class":42},[36,10635,4912],{"class":46},[36,10637,10638],{"class":105},"\"数组的第一个元素为：\"",[36,10640,4912],{"class":46},[36,10642,7604],{"class":42},[36,10644,1859],{"class":112},[36,10646,4809],{"class":42},[36,10648,4912],{"class":46},[36,10650,4934],{"class":42},[36,10652,10653,10655,10657,10659,10661,10664],{"class":38,"line":662},[36,10654,5697],{"class":46},[36,10656,1325],{"class":46},[36,10658,19],{"class":42},[36,10660,47],{"class":46},[36,10662,10663],{"class":42},"arr;",[36,10665,10666],{"class":3943},"\u002F\u002F注意数才要加取地址符号&\n",[36,10668,10669,10671,10673,10675,10677,10679,10681],{"class":38,"line":667},[36,10670,5286],{"class":42},[36,10672,4912],{"class":46},[36,10674,10638],{"class":105},[36,10676,10111],{"class":46},[36,10678,19],{"class":42},[36,10680,4912],{"class":46},[36,10682,4934],{"class":42},[36,10684,10685,10687,10689,10691],{"class":38,"line":679},[36,10686,10029],{"class":42},[36,10688,6004],{"class":46},[36,10690,3940],{"class":42},[36,10692,10693],{"class":3943}," \u002F\u002F让指针向后偏移4个字节\n",[36,10695,10696,10698,10700,10703,10705,10707,10709],{"class":38,"line":685},[36,10697,5286],{"class":42},[36,10699,4912],{"class":46},[36,10701,10702],{"class":105},"\"数组的第二个元素为：\"",[36,10704,10111],{"class":46},[36,10706,19],{"class":42},[36,10708,4912],{"class":46},[36,10710,4934],{"class":42},[36,10712,10713],{"class":38,"line":691},[36,10714,10715],{"class":3943},"    \u002F\u002F利用指针遍历数组\n",[36,10717,10718,10720,10722,10725,10727],{"class":38,"line":696},[36,10719,5697],{"class":46},[36,10721,1325],{"class":46},[36,10723,10724],{"class":42},"p2",[36,10726,47],{"class":46},[36,10728,10729],{"class":42},"arr;\n",[36,10731,10732,10734,10736,10738,10740,10742,10744,10746,10748,10750,10752,10754],{"class":38,"line":702},[36,10733,1909],{"class":46},[36,10735,5386],{"class":42},[36,10737,1378],{"class":46},[36,10739,6734],{"class":42},[36,10741,47],{"class":46},[36,10743,1859],{"class":112},[36,10745,6741],{"class":42},[36,10747,393],{"class":46},[36,10749,554],{"class":112},[36,10751,6741],{"class":42},[36,10753,6004],{"class":46},[36,10755,922],{"class":42},[36,10757,10758],{"class":38,"line":708},[36,10759,5742],{"class":42},[36,10761,10762,10764,10766,10768,10770],{"class":38,"line":713},[36,10763,7150],{"class":42},[36,10765,10111],{"class":46},[36,10767,10724],{"class":42},[36,10769,4912],{"class":46},[36,10771,4934],{"class":42},[36,10773,10774,10777,10779],{"class":38,"line":719},[36,10775,10776],{"class":42},"        p2",[36,10778,6004],{"class":46},[36,10780,5029],{"class":42},[36,10782,10783],{"class":38,"line":725},[36,10784,5899],{"class":42},[36,10786,10787],{"class":38,"line":731},[36,10788,5300],{"class":42},[14,10790,10792],{"id":10791},"_37指针和函数","3.7指针和函数",[19,10794,10795],{},"利用指针做函数参数，可以修改实参的值",[19,10797,10798],{},"值传递：只改变形参，不改变实参",[19,10800,10801],{},"地址传递：",[26,10803,10805],{"className":3879,"code":10804,"language":3881,"meta":31,"style":31},"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",[33,10806,10807,10832,10836,10848,10859,10869,10873,10881,10885,10897,10909,10914,10930,10945,10960],{"__ignoreMap":31},[36,10808,10809,10811,10813,10815,10817,10819,10822,10824,10826,10828,10830],{"class":38,"line":39},[36,10810,9057],{"class":46},[36,10812,9060],{"class":101},[36,10814,495],{"class":42},[36,10816,1378],{"class":46},[36,10818,1325],{"class":46},[36,10820,10821],{"class":468},"p1",[36,10823,4253],{"class":42},[36,10825,1378],{"class":46},[36,10827,1325],{"class":46},[36,10829,10724],{"class":468},[36,10831,922],{"class":42},[36,10833,10834],{"class":38,"line":53},[36,10835,5281],{"class":42},[36,10837,10838,10840,10842,10845],{"class":38,"line":196},[36,10839,5697],{"class":46},[36,10841,7952],{"class":42},[36,10843,10844],{"class":46},"=*",[36,10846,10847],{"class":42},"p1;\n",[36,10849,10850,10852,10854,10856],{"class":38,"line":642},[36,10851,10096],{"class":46},[36,10853,10821],{"class":42},[36,10855,10844],{"class":46},[36,10857,10858],{"class":42},"p2;\n",[36,10860,10861,10863,10865,10867],{"class":38,"line":655},[36,10862,10096],{"class":46},[36,10864,10724],{"class":42},[36,10866,47],{"class":46},[36,10868,7977],{"class":42},[36,10870,10871],{"class":38,"line":662},[36,10872,5300],{"class":42},[36,10874,10875,10877,10879],{"class":38,"line":667},[36,10876,1378],{"class":46},[36,10878,1823],{"class":101},[36,10880,903],{"class":42},[36,10882,10883],{"class":38,"line":679},[36,10884,5281],{"class":42},[36,10886,10887,10889,10891,10893,10895],{"class":38,"line":685},[36,10888,5697],{"class":46},[36,10890,5134],{"class":42},[36,10892,47],{"class":46},[36,10894,554],{"class":112},[36,10896,5029],{"class":42},[36,10898,10899,10901,10903,10905,10907],{"class":38,"line":691},[36,10900,5697],{"class":46},[36,10902,6536],{"class":42},[36,10904,47],{"class":46},[36,10906,1921],{"class":112},[36,10908,5029],{"class":42},[36,10910,10911],{"class":38,"line":696},[36,10912,10913],{"class":3943},"    \u002F\u002F地址传递\n",[36,10915,10916,10918,10920,10922,10925,10927],{"class":38,"line":702},[36,10917,9254],{"class":101},[36,10919,495],{"class":42},[36,10921,4228],{"class":46},[36,10923,10924],{"class":42},"a,",[36,10926,4228],{"class":46},[36,10928,10929],{"class":42},"b);\n",[36,10931,10932,10934,10936,10938,10940,10942],{"class":38,"line":708},[36,10933,5286],{"class":42},[36,10935,4912],{"class":46},[36,10937,4113],{"class":42},[36,10939,4912],{"class":46},[36,10941,4977],{"class":42},[36,10943,10944],{"class":3943},"\u002F\u002F20\n",[36,10946,10947,10949,10951,10953,10955,10957],{"class":38,"line":713},[36,10948,5286],{"class":42},[36,10950,4912],{"class":46},[36,10952,4138],{"class":42},[36,10954,4912],{"class":46},[36,10956,4977],{"class":42},[36,10958,10959],{"class":3943},"\u002F\u002F10\n",[36,10961,10962],{"class":38,"line":719},[36,10963,5300],{"class":42},[19,10965,10966],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,10968,10970],{"id":10969},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,10972,10973],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,10975,10976,10977,10979],{},"例如数组：int arr",[36,10978,554],{},"={4,3,6,9,1,2,10,8,7,5}",[26,10981,10983],{"className":3879,"code":10982,"language":3881,"meta":31,"style":31},"#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",[33,10984,10985,10991,11001,11025,11029,11060,11064,11098,11102,11120,11124,11135,11150,11165,11169,11173,11177,11181,11185,11193,11197,11202,11256,11268,11280,11285,11293,11297,11302,11327,11331,11346,11355,11359],{"__ignoreMap":31},[36,10986,10987,10989],{"class":38,"line":39},[36,10988,5664],{"class":46},[36,10990,5667],{"class":105},[36,10992,10993,10995,10997,10999],{"class":38,"line":53},[36,10994,5672],{"class":46},[36,10996,5675],{"class":46},[36,10998,5678],{"class":101},[36,11000,5029],{"class":42},[36,11002,11003,11005,11008,11010,11012,11014,11016,11018,11020,11023],{"class":38,"line":196},[36,11004,9057],{"class":46},[36,11006,11007],{"class":101}," bubbleSort",[36,11009,495],{"class":42},[36,11011,1378],{"class":46},[36,11013,1325],{"class":46},[36,11015,19],{"class":468},[36,11017,4253],{"class":42},[36,11019,1378],{"class":46},[36,11021,11022],{"class":468}," len",[36,11024,922],{"class":42},[36,11026,11027],{"class":38,"line":642},[36,11028,5281],{"class":42},[36,11030,11031,11033,11035,11037,11039,11041,11043,11045,11047,11050,11052,11054,11056,11058],{"class":38,"line":655},[36,11032,1909],{"class":46},[36,11034,495],{"class":42},[36,11036,1378],{"class":46},[36,11038,6734],{"class":42},[36,11040,47],{"class":46},[36,11042,1859],{"class":112},[36,11044,6741],{"class":42},[36,11046,393],{"class":46},[36,11048,11049],{"class":42},"len",[36,11051,1308],{"class":46},[36,11053,4092],{"class":112},[36,11055,6741],{"class":42},[36,11057,6004],{"class":46},[36,11059,922],{"class":42},[36,11061,11062],{"class":38,"line":662},[36,11063,5742],{"class":42},[36,11065,11066,11068,11070,11072,11074,11076,11078,11080,11082,11084,11086,11088,11090,11092,11094,11096],{"class":38,"line":667},[36,11067,1613],{"class":46},[36,11069,495],{"class":42},[36,11071,1378],{"class":46},[36,11073,7109],{"class":42},[36,11075,47],{"class":46},[36,11077,1859],{"class":112},[36,11079,7116],{"class":42},[36,11081,393],{"class":46},[36,11083,11049],{"class":42},[36,11085,1308],{"class":46},[36,11087,4316],{"class":42},[36,11089,1308],{"class":46},[36,11091,4092],{"class":112},[36,11093,7116],{"class":42},[36,11095,6004],{"class":46},[36,11097,922],{"class":42},[36,11099,11100],{"class":38,"line":679},[36,11101,6220],{"class":42},[36,11103,11104,11106,11109,11111,11114,11116,11118],{"class":38,"line":685},[36,11105,8338],{"class":46},[36,11107,11108],{"class":42},"(p[j]",[36,11110,4829],{"class":46},[36,11112,11113],{"class":42},"p[j",[36,11115,4354],{"class":46},[36,11117,4092],{"class":112},[36,11119,8353],{"class":42},[36,11121,11122],{"class":38,"line":691},[36,11123,8358],{"class":42},[36,11125,11126,11128,11130,11132],{"class":38,"line":696},[36,11127,8363],{"class":46},[36,11129,7952],{"class":42},[36,11131,47],{"class":46},[36,11133,11134],{"class":42},"p[j];\n",[36,11136,11137,11140,11142,11144,11146,11148],{"class":38,"line":702},[36,11138,11139],{"class":42},"                p[j]",[36,11141,47],{"class":46},[36,11143,11113],{"class":42},[36,11145,4354],{"class":46},[36,11147,4092],{"class":112},[36,11149,8386],{"class":42},[36,11151,11152,11155,11157,11159,11161,11163],{"class":38,"line":708},[36,11153,11154],{"class":42},"                p[j",[36,11156,4354],{"class":46},[36,11158,4092],{"class":112},[36,11160,4809],{"class":42},[36,11162,47],{"class":46},[36,11164,7977],{"class":42},[36,11166,11167],{"class":38,"line":713},[36,11168,8406],{"class":42},[36,11170,11171],{"class":38,"line":719},[36,11172,6239],{"class":42},[36,11174,11175],{"class":38,"line":725},[36,11176,5899],{"class":42},[36,11178,11179],{"class":38,"line":731},[36,11180,5300],{"class":42},[36,11182,11183],{"class":38,"line":736},[36,11184,659],{"emptyLinePlaceholder":658},[36,11186,11187,11189,11191],{"class":38,"line":742},[36,11188,1378],{"class":46},[36,11190,1823],{"class":101},[36,11192,903],{"class":42},[36,11194,11195],{"class":38,"line":748},[36,11196,5281],{"class":42},[36,11198,11199],{"class":38,"line":754},[36,11200,11201],{"class":3943},"    \u002F\u002F 1.创建数组\n",[36,11203,11204,11206,11208,11210,11212,11214,11216,11218,11220,11222,11224,11226,11228,11230,11232,11234,11236,11238,11240,11242,11244,11246,11248,11250,11252,11254],{"class":38,"line":760},[36,11205,5697],{"class":46},[36,11207,7660],{"class":42},[36,11209,554],{"class":112},[36,11211,4809],{"class":42},[36,11213,47],{"class":46},[36,11215,4766],{"class":42},[36,11217,4168],{"class":112},[36,11219,4253],{"class":42},[36,11221,1982],{"class":112},[36,11223,4253],{"class":42},[36,11225,4219],{"class":112},[36,11227,4253],{"class":42},[36,11229,4295],{"class":112},[36,11231,4253],{"class":42},[36,11233,4092],{"class":112},[36,11235,4253],{"class":42},[36,11237,498],{"class":112},[36,11239,4253],{"class":42},[36,11241,554],{"class":112},[36,11243,4253],{"class":42},[36,11245,4270],{"class":112},[36,11247,4253],{"class":42},[36,11249,4244],{"class":112},[36,11251,4253],{"class":42},[36,11253,4194],{"class":112},[36,11255,7693],{"class":42},[36,11257,11258,11260,11262,11264,11266],{"class":38,"line":766},[36,11259,5697],{"class":46},[36,11261,11022],{"class":42},[36,11263,47],{"class":46},[36,11265,554],{"class":112},[36,11267,5029],{"class":42},[36,11269,11270,11272,11274,11276,11278],{"class":38,"line":772},[36,11271,5697],{"class":46},[36,11273,1325],{"class":46},[36,11275,19],{"class":42},[36,11277,47],{"class":46},[36,11279,10729],{"class":42},[36,11281,11282],{"class":38,"line":778},[36,11283,11284],{"class":3943},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[36,11286,11287,11290],{"class":38,"line":783},[36,11288,11289],{"class":101},"    bubbleSort",[36,11291,11292],{"class":42},"(p,len);\n",[36,11294,11295],{"class":38,"line":789},[36,11296,659],{"emptyLinePlaceholder":658},[36,11298,11299],{"class":38,"line":795},[36,11300,11301],{"class":3943},"    \u002F\u002F 3.打印排序后的数组\n",[36,11303,11304,11306,11308,11310,11312,11314,11316,11318,11320,11323,11325],{"class":38,"line":801},[36,11305,1909],{"class":46},[36,11307,5386],{"class":42},[36,11309,1378],{"class":46},[36,11311,6734],{"class":42},[36,11313,47],{"class":46},[36,11315,1859],{"class":112},[36,11317,6914],{"class":42},[36,11319,393],{"class":46},[36,11321,11322],{"class":42},"len; i",[36,11324,6004],{"class":46},[36,11326,922],{"class":42},[36,11328,11329],{"class":38,"line":807},[36,11330,5742],{"class":42},[36,11332,11333,11335,11337,11339,11341,11344],{"class":38,"line":813},[36,11334,7150],{"class":42},[36,11336,10111],{"class":46},[36,11338,19],{"class":42},[36,11340,4912],{"class":46},[36,11342,11343],{"class":105},"\"\"",[36,11345,5029],{"class":42},[36,11347,11348,11351,11353],{"class":38,"line":819},[36,11349,11350],{"class":42},"        p",[36,11352,6004],{"class":46},[36,11354,5029],{"class":42},[36,11356,11357],{"class":38,"line":824},[36,11358,5899],{"class":42},[36,11360,11361],{"class":38,"line":829},[36,11362,5300],{"class":42},[3785,11364,11365],{},"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":31,"searchDepth":53,"depth":53,"links":11367},[11368,11369,11370,11371,11372,11373,11374,11375],{"id":9976,"depth":53,"text":9977},{"id":10141,"depth":53,"text":10142},{"id":10296,"depth":53,"text":10297},{"id":10374,"depth":53,"text":10375},{"id":10453,"depth":53,"text":10454},{"id":10552,"depth":53,"text":10553},{"id":10791,"depth":53,"text":10792},{"id":10969,"depth":53,"text":10970},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":9965,"description":9973},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":11382,"title":11383,"body":11384,"description":11391,"extension":3817,"meta":14335,"navigation":658,"path":14336,"seo":14337,"stem":14338,"__hash__":14339},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":11385,"toc":14326},[11386,11389,11392,11396,11399,11402,11413,11741,11744,11748,11751,11758,12013,12017,12020,12023,12178,12182,12185,12188,12394,12398,12401,12704,12707,12715,12719,12722,12873,12875,12886,12943,12947,12952,13589,13597,13600,13694,13697,14317,14323],[10,11387,11383],{"id":11388},"_4结构体",[19,11390,11391],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,11393,11395],{"id":11394},"_41结构体定义与使用","4.1结构体定义与使用",[19,11397,11398],{},"语法：struct 结构体名 {结构体成员列表}；",[19,11400,11401],{},"通过结构体创建变量的方式：",[4875,11403,11404,11407,11410],{},[214,11405,11406],{},"struct 结构体名 变量名",[214,11408,11409],{},"struct 结构体名 变量名={成员1值，成员2值...}",[214,11411,11412],{},"定义结构体时顺便创建变量",[26,11414,11416],{"className":3879,"code":11415,"language":3881,"meta":31,"style":31},"#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",[33,11417,11418,11424,11434,11441,11446,11454,11458,11463,11467,11472,11477,11482,11489,11494,11501,11505,11512,11516,11520,11524,11528,11532,11536,11542,11546,11552,11560,11568,11572,11577,11582,11593,11598,11610,11621,11632,11637,11660,11664,11669,11695,11699,11704,11715,11726,11737],{"__ignoreMap":31},[36,11419,11420,11422],{"class":38,"line":39},[36,11421,5664],{"class":46},[36,11423,5667],{"class":105},[36,11425,11426,11428,11430,11432],{"class":38,"line":53},[36,11427,5672],{"class":46},[36,11429,5675],{"class":46},[36,11431,5678],{"class":101},[36,11433,5029],{"class":42},[36,11435,11436,11438],{"class":38,"line":196},[36,11437,5664],{"class":46},[36,11439,11440],{"class":105},"\u003Cstring>\n",[36,11442,11443],{"class":38,"line":642},[36,11444,11445],{"class":3943},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[36,11447,11448,11451],{"class":38,"line":655},[36,11449,11450],{"class":46},"struct",[36,11452,11453],{"class":101}," Student\n",[36,11455,11456],{"class":38,"line":662},[36,11457,5281],{"class":42},[36,11459,11460],{"class":38,"line":667},[36,11461,11462],{"class":3943},"    \u002F\u002F成员列表\n",[36,11464,11465],{"class":38,"line":679},[36,11466,659],{"emptyLinePlaceholder":658},[36,11468,11469],{"class":38,"line":685},[36,11470,11471],{"class":3943},"    \u002F\u002F姓名\n",[36,11473,11474],{"class":38,"line":691},[36,11475,11476],{"class":42},"    string name;\n",[36,11478,11479],{"class":38,"line":696},[36,11480,11481],{"class":3943},"    \u002F\u002F年龄\n",[36,11483,11484,11486],{"class":38,"line":702},[36,11485,5697],{"class":46},[36,11487,11488],{"class":42}," age;\n",[36,11490,11491],{"class":38,"line":708},[36,11492,11493],{"class":3943},"    \u002F\u002F分数\n",[36,11495,11496,11498],{"class":38,"line":713},[36,11497,5697],{"class":46},[36,11499,11500],{"class":42}," score;\n",[36,11502,11503],{"class":38,"line":719},[36,11504,7693],{"class":42},[36,11506,11507,11509],{"class":38,"line":725},[36,11508,11450],{"class":46},[36,11510,11511],{"class":101}," School\n",[36,11513,11514],{"class":38,"line":731},[36,11515,5281],{"class":42},[36,11517,11518],{"class":38,"line":736},[36,11519,11462],{"class":3943},[36,11521,11522],{"class":38,"line":742},[36,11523,659],{"emptyLinePlaceholder":658},[36,11525,11526],{"class":38,"line":748},[36,11527,11471],{"class":3943},[36,11529,11530],{"class":38,"line":754},[36,11531,11476],{"class":42},[36,11533,11534],{"class":38,"line":760},[36,11535,11481],{"class":3943},[36,11537,11538,11540],{"class":38,"line":766},[36,11539,5697],{"class":46},[36,11541,11488],{"class":42},[36,11543,11544],{"class":38,"line":772},[36,11545,11493],{"class":3943},[36,11547,11548,11550],{"class":38,"line":778},[36,11549,5697],{"class":46},[36,11551,11500],{"class":42},[36,11553,11554,11557],{"class":38,"line":783},[36,11555,11556],{"class":42},"} s3;",[36,11558,11559],{"class":3943}," \u002F\u002F创建结构体时就创建了变量\n",[36,11561,11562,11564,11566],{"class":38,"line":789},[36,11563,1378],{"class":46},[36,11565,1823],{"class":101},[36,11567,903],{"class":42},[36,11569,11570],{"class":38,"line":795},[36,11571,5281],{"class":42},[36,11573,11574],{"class":38,"line":801},[36,11575,11576],{"class":3943},"    \u002F\u002F2.通过学生类型创建具体学生\n",[36,11578,11579],{"class":38,"line":807},[36,11580,11581],{"class":3943},"    \u002F\u002F2.1 struct Student s1;\n",[36,11583,11584,11587,11590],{"class":38,"line":813},[36,11585,11586],{"class":46},"    struct",[36,11588,11589],{"class":101}," Student",[36,11591,11592],{"class":42}," s1;\n",[36,11594,11595],{"class":38,"line":819},[36,11596,11597],{"class":3943},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[36,11599,11600,11603,11605,11608],{"class":38,"line":824},[36,11601,11602],{"class":42},"    s1.name",[36,11604,47],{"class":46},[36,11606,11607],{"class":105},"\"张三\"",[36,11609,5029],{"class":42},[36,11611,11612,11615,11617,11619],{"class":38,"line":829},[36,11613,11614],{"class":42},"    s1.age",[36,11616,47],{"class":46},[36,11618,4521],{"class":112},[36,11620,5029],{"class":42},[36,11622,11623,11626,11628,11630],{"class":38,"line":851},[36,11624,11625],{"class":42},"    s1.score",[36,11627,47],{"class":46},[36,11629,4129],{"class":112},[36,11631,5029],{"class":42},[36,11633,11634],{"class":38,"line":868},[36,11635,11636],{"class":3943},"    \u002F\u002F输出结果\n",[36,11638,11639,11641,11643,11646,11648,11651,11653,11656,11658],{"class":38,"line":873},[36,11640,5286],{"class":42},[36,11642,4912],{"class":46},[36,11644,11645],{"class":42},"s1.name",[36,11647,4912],{"class":46},[36,11649,11650],{"class":42},"s1.age",[36,11652,4912],{"class":46},[36,11654,11655],{"class":42},"s1.score",[36,11657,4912],{"class":46},[36,11659,4934],{"class":42},[36,11661,11662],{"class":38,"line":891},[36,11663,659],{"emptyLinePlaceholder":658},[36,11665,11666],{"class":38,"line":906},[36,11667,11668],{"class":3943},"    \u002F\u002F2.2 struct Student s2={...}\n",[36,11670,11671,11673,11675,11678,11680,11682,11685,11687,11689,11691,11693],{"class":38,"line":925},[36,11672,11586],{"class":46},[36,11674,11589],{"class":101},[36,11676,11677],{"class":42}," s2",[36,11679,47],{"class":46},[36,11681,4766],{"class":42},[36,11683,11684],{"class":105},"\"王五\"",[36,11686,4253],{"class":42},[36,11688,4521],{"class":112},[36,11690,4253],{"class":42},[36,11692,4129],{"class":112},[36,11694,7693],{"class":42},[36,11696,11697],{"class":38,"line":943},[36,11698,659],{"emptyLinePlaceholder":658},[36,11700,11701],{"class":38,"line":948},[36,11702,11703],{"class":3943},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[36,11705,11706,11709,11711,11713],{"class":38,"line":971},[36,11707,11708],{"class":42},"    s3.name",[36,11710,47],{"class":46},[36,11712,7377],{"class":105},[36,11714,5029],{"class":42},[36,11716,11717,11720,11722,11724],{"class":38,"line":992},[36,11718,11719],{"class":42},"    s3.age",[36,11721,47],{"class":46},[36,11723,4521],{"class":112},[36,11725,5029],{"class":42},[36,11727,11728,11731,11733,11735],{"class":38,"line":1020},[36,11729,11730],{"class":42},"    s3.score",[36,11732,47],{"class":46},[36,11734,1921],{"class":112},[36,11736,5029],{"class":42},[36,11738,11739],{"class":38,"line":1036},[36,11740,5300],{"class":42},[19,11742,11743],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,11745,11747],{"id":11746},"_42结构体数组","4.2结构体数组",[19,11749,11750],{},"将自定义的结构体放入到数组中方便维护",[19,11752,11753,11754,11757],{},"语法：struct 结构体名 数组名",[36,11755,11756],{},"元素个数","={ {}，{},...{} };",[26,11759,11761],{"className":3879,"code":11760,"language":3881,"meta":31,"style":31},"#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",[33,11762,11763,11769,11779,11785,11790,11796,11800,11804,11810,11816,11820,11824,11832,11836,11841,11856,11860,11876,11892,11896,11901,11917,11932,11947,11952,11978,11982,12005,12009],{"__ignoreMap":31},[36,11764,11765,11767],{"class":38,"line":39},[36,11766,5664],{"class":46},[36,11768,5667],{"class":105},[36,11770,11771,11773,11775,11777],{"class":38,"line":53},[36,11772,5672],{"class":46},[36,11774,5675],{"class":46},[36,11776,5678],{"class":101},[36,11778,5029],{"class":42},[36,11780,11781,11783],{"class":38,"line":196},[36,11782,5664],{"class":46},[36,11784,11440],{"class":105},[36,11786,11787],{"class":38,"line":642},[36,11788,11789],{"class":3943},"\u002F\u002F1.定义结构体\n",[36,11791,11792,11794],{"class":38,"line":655},[36,11793,11450],{"class":46},[36,11795,11453],{"class":101},[36,11797,11798],{"class":38,"line":662},[36,11799,5281],{"class":42},[36,11801,11802],{"class":38,"line":667},[36,11803,11476],{"class":42},[36,11805,11806,11808],{"class":38,"line":679},[36,11807,5697],{"class":46},[36,11809,11488],{"class":42},[36,11811,11812,11814],{"class":38,"line":685},[36,11813,5697],{"class":46},[36,11815,11500],{"class":42},[36,11817,11818],{"class":38,"line":691},[36,11819,659],{"emptyLinePlaceholder":658},[36,11821,11822],{"class":38,"line":696},[36,11823,7693],{"class":42},[36,11825,11826,11828,11830],{"class":38,"line":702},[36,11827,1378],{"class":46},[36,11829,1823],{"class":101},[36,11831,903],{"class":42},[36,11833,11834],{"class":38,"line":708},[36,11835,5281],{"class":42},[36,11837,11838],{"class":38,"line":713},[36,11839,11840],{"class":3943},"    \u002F\u002F2.创建结构体数组\n",[36,11842,11843,11845,11847,11850,11852,11854],{"class":38,"line":719},[36,11844,11586],{"class":46},[36,11846,11589],{"class":101},[36,11848,11849],{"class":42}," stuArray[",[36,11851,498],{"class":112},[36,11853,4809],{"class":42},[36,11855,8604],{"class":46},[36,11857,11858],{"class":38,"line":725},[36,11859,5742],{"class":42},[36,11861,11862,11864,11866,11868,11870,11872,11874],{"class":38,"line":731},[36,11863,8613],{"class":42},[36,11865,11607],{"class":105},[36,11867,4253],{"class":42},[36,11869,4521],{"class":112},[36,11871,4253],{"class":42},[36,11873,4186],{"class":112},[36,11875,8626],{"class":42},[36,11877,11878,11880,11882,11884,11886,11888,11890],{"class":38,"line":736},[36,11879,8613],{"class":42},[36,11881,7377],{"class":105},[36,11883,4253],{"class":42},[36,11885,4446],{"class":112},[36,11887,4253],{"class":42},[36,11889,4446],{"class":112},[36,11891,5300],{"class":42},[36,11893,11894],{"class":38,"line":742},[36,11895,5899],{"class":42},[36,11897,11898],{"class":38,"line":748},[36,11899,11900],{"class":3943},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[36,11902,11903,11906,11908,11911,11913,11915],{"class":38,"line":754},[36,11904,11905],{"class":42},"    stuArray[",[36,11907,4092],{"class":112},[36,11909,11910],{"class":42},"].name",[36,11912,47],{"class":46},[36,11914,7400],{"class":105},[36,11916,5029],{"class":42},[36,11918,11919,11921,11923,11926,11928,11930],{"class":38,"line":760},[36,11920,11905],{"class":42},[36,11922,4092],{"class":112},[36,11924,11925],{"class":42},"].age",[36,11927,47],{"class":46},[36,11929,498],{"class":112},[36,11931,5029],{"class":42},[36,11933,11934,11936,11938,11941,11943,11945],{"class":38,"line":766},[36,11935,11905],{"class":42},[36,11937,4092],{"class":112},[36,11939,11940],{"class":42},"].score",[36,11942,47],{"class":46},[36,11944,498],{"class":112},[36,11946,5029],{"class":42},[36,11948,11949],{"class":38,"line":772},[36,11950,11951],{"class":3943},"    \u002F\u002F4.遍历结构体数组\n",[36,11953,11954,11956,11958,11960,11962,11964,11966,11968,11970,11972,11974,11976],{"class":38,"line":778},[36,11955,1909],{"class":46},[36,11957,5386],{"class":42},[36,11959,1378],{"class":46},[36,11961,6734],{"class":42},[36,11963,47],{"class":46},[36,11965,1859],{"class":112},[36,11967,6741],{"class":42},[36,11969,393],{"class":46},[36,11971,498],{"class":112},[36,11973,6741],{"class":42},[36,11975,6004],{"class":46},[36,11977,922],{"class":42},[36,11979,11980],{"class":38,"line":783},[36,11981,5742],{"class":42},[36,11983,11984,11986,11988,11991,11993,11996,11998,12001,12003],{"class":38,"line":789},[36,11985,7150],{"class":42},[36,11987,4912],{"class":46},[36,11989,11990],{"class":42},"stuArray[i].name",[36,11992,4912],{"class":46},[36,11994,11995],{"class":42},"stuArray[i].age",[36,11997,4912],{"class":46},[36,11999,12000],{"class":42},"stuArray[i].score",[36,12002,4912],{"class":46},[36,12004,4934],{"class":42},[36,12006,12007],{"class":38,"line":795},[36,12008,5899],{"class":42},[36,12010,12011],{"class":38,"line":801},[36,12012,5300],{"class":42},[14,12014,12016],{"id":12015},"_43结构体指针","4.3结构体指针",[19,12018,12019],{},"作用：通过指针访问结构体中的成员",[19,12021,12022],{},"利用操作符->可以通过结构体指针访问结构体属性",[26,12024,12026],{"className":3879,"code":12025,"language":3881,"meta":31,"style":31},"#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",[33,12027,12028,12034,12044,12050,12054,12060,12064,12068,12074,12080,12084,12092,12096,12101,12126,12131,12146,12151,12174],{"__ignoreMap":31},[36,12029,12030,12032],{"class":38,"line":39},[36,12031,5664],{"class":46},[36,12033,5667],{"class":105},[36,12035,12036,12038,12040,12042],{"class":38,"line":53},[36,12037,5672],{"class":46},[36,12039,5675],{"class":46},[36,12041,5678],{"class":101},[36,12043,5029],{"class":42},[36,12045,12046,12048],{"class":38,"line":196},[36,12047,5664],{"class":46},[36,12049,11440],{"class":105},[36,12051,12052],{"class":38,"line":642},[36,12053,11789],{"class":3943},[36,12055,12056,12058],{"class":38,"line":655},[36,12057,11450],{"class":46},[36,12059,11453],{"class":101},[36,12061,12062],{"class":38,"line":662},[36,12063,5281],{"class":42},[36,12065,12066],{"class":38,"line":667},[36,12067,11476],{"class":42},[36,12069,12070,12072],{"class":38,"line":679},[36,12071,5697],{"class":46},[36,12073,11488],{"class":42},[36,12075,12076,12078],{"class":38,"line":685},[36,12077,5697],{"class":46},[36,12079,11500],{"class":42},[36,12081,12082],{"class":38,"line":691},[36,12083,7693],{"class":42},[36,12085,12086,12088,12090],{"class":38,"line":696},[36,12087,1378],{"class":46},[36,12089,1823],{"class":101},[36,12091,903],{"class":42},[36,12093,12094],{"class":38,"line":702},[36,12095,5281],{"class":42},[36,12097,12098],{"class":38,"line":708},[36,12099,12100],{"class":3943},"    \u002F\u002F创建学生结构体变量\n",[36,12102,12103,12105,12107,12110,12112,12114,12116,12118,12120,12122,12124],{"class":38,"line":713},[36,12104,11586],{"class":46},[36,12106,11589],{"class":101},[36,12108,12109],{"class":42}," s",[36,12111,47],{"class":46},[36,12113,4766],{"class":42},[36,12115,11607],{"class":105},[36,12117,4253],{"class":42},[36,12119,4521],{"class":112},[36,12121,4253],{"class":42},[36,12123,5445],{"class":112},[36,12125,7693],{"class":42},[36,12127,12128],{"class":38,"line":719},[36,12129,12130],{"class":3943},"    \u002F\u002F通过指针指向结构体变量\n",[36,12132,12133,12135,12137,12139,12141,12143],{"class":38,"line":725},[36,12134,11586],{"class":46},[36,12136,11589],{"class":101},[36,12138,1325],{"class":46},[36,12140,19],{"class":42},[36,12142,10032],{"class":46},[36,12144,12145],{"class":42},"s\n",[36,12147,12148],{"class":38,"line":731},[36,12149,12150],{"class":3943},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[36,12152,12153,12155,12157,12160,12162,12165,12167,12170,12172],{"class":38,"line":736},[36,12154,5286],{"class":42},[36,12156,4912],{"class":46},[36,12158,12159],{"class":42},"p->name",[36,12161,4912],{"class":46},[36,12163,12164],{"class":42},"p->age",[36,12166,4912],{"class":46},[36,12168,12169],{"class":42},"p->score",[36,12171,4912],{"class":46},[36,12173,4934],{"class":42},[36,12175,12176],{"class":38,"line":742},[36,12177,5300],{"class":42},[14,12179,12181],{"id":12180},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,12183,12184],{},"作用：结构体中的成员可以是另一个结构体",[19,12186,12187],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[26,12189,12191],{"className":3879,"code":12190,"language":3881,"meta":31,"style":31},"#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",[33,12192,12193,12199,12209,12215,12220,12228,12232,12236,12242,12248,12252,12257,12264,12268,12275,12279,12285,12290,12294,12302,12306,12311,12316,12321,12332,12344,12355,12368,12379,12390],{"__ignoreMap":31},[36,12194,12195,12197],{"class":38,"line":39},[36,12196,5664],{"class":46},[36,12198,5667],{"class":105},[36,12200,12201,12203,12205,12207],{"class":38,"line":53},[36,12202,5672],{"class":46},[36,12204,5675],{"class":46},[36,12206,5678],{"class":101},[36,12208,5029],{"class":42},[36,12210,12211,12213],{"class":38,"line":196},[36,12212,5664],{"class":46},[36,12214,11440],{"class":105},[36,12216,12217],{"class":38,"line":642},[36,12218,12219],{"class":3943},"\u002F\u002F定义学生结构体\n",[36,12221,12222,12224,12226],{"class":38,"line":655},[36,12223,11450],{"class":46},[36,12225,11589],{"class":101},[36,12227,6377],{"class":42},[36,12229,12230],{"class":38,"line":662},[36,12231,5281],{"class":42},[36,12233,12234],{"class":38,"line":667},[36,12235,11476],{"class":42},[36,12237,12238,12240],{"class":38,"line":679},[36,12239,5697],{"class":46},[36,12241,11488],{"class":42},[36,12243,12244,12246],{"class":38,"line":685},[36,12245,5697],{"class":46},[36,12247,11500],{"class":42},[36,12249,12250],{"class":38,"line":691},[36,12251,5300],{"class":42},[36,12253,12254],{"class":38,"line":696},[36,12255,12256],{"class":3943},"\u002F\u002F定义老师结构体\n",[36,12258,12259,12261],{"class":38,"line":702},[36,12260,11450],{"class":46},[36,12262,12263],{"class":101}," Teacher\n",[36,12265,12266],{"class":38,"line":708},[36,12267,5281],{"class":42},[36,12269,12270,12272],{"class":38,"line":713},[36,12271,5697],{"class":46},[36,12273,12274],{"class":42}," id;\n",[36,12276,12277],{"class":38,"line":719},[36,12278,11476],{"class":42},[36,12280,12281,12283],{"class":38,"line":725},[36,12282,5697],{"class":46},[36,12284,11488],{"class":42},[36,12286,12287],{"class":38,"line":731},[36,12288,12289],{"class":42},"    Student stu;\n",[36,12291,12292],{"class":38,"line":736},[36,12293,5300],{"class":42},[36,12295,12296,12298,12300],{"class":38,"line":742},[36,12297,1378],{"class":46},[36,12299,1823],{"class":101},[36,12301,9671],{"class":42},[36,12303,12304],{"class":38,"line":748},[36,12305,5281],{"class":42},[36,12307,12308],{"class":38,"line":754},[36,12309,12310],{"class":3943},"    \u002F\u002F结构体嵌套结构体\n",[36,12312,12313],{"class":38,"line":760},[36,12314,12315],{"class":3943},"    \u002F\u002F创建老师\n",[36,12317,12318],{"class":38,"line":766},[36,12319,12320],{"class":42},"    Teacher t;\n",[36,12322,12323,12326,12328,12330],{"class":38,"line":772},[36,12324,12325],{"class":42},"    t.id",[36,12327,47],{"class":46},[36,12329,4186],{"class":112},[36,12331,5029],{"class":42},[36,12333,12334,12337,12339,12342],{"class":38,"line":778},[36,12335,12336],{"class":42},"    t.name",[36,12338,47],{"class":46},[36,12340,12341],{"class":105},"\"老王\"",[36,12343,5029],{"class":42},[36,12345,12346,12349,12351,12353],{"class":38,"line":783},[36,12347,12348],{"class":42},"    t.age",[36,12350,47],{"class":46},[36,12352,4521],{"class":112},[36,12354,5029],{"class":42},[36,12356,12357,12360,12362,12365],{"class":38,"line":789},[36,12358,12359],{"class":42},"    t.stu.name",[36,12361,47],{"class":46},[36,12363,12364],{"class":105},"\"小王\"",[36,12366,12367],{"class":42},"；\n",[36,12369,12370,12373,12375,12377],{"class":38,"line":795},[36,12371,12372],{"class":42},"    t.stu.age",[36,12374,47],{"class":46},[36,12376,1921],{"class":112},[36,12378,5029],{"class":42},[36,12380,12381,12384,12386,12388],{"class":38,"line":801},[36,12382,12383],{"class":42},"    t.stu.score",[36,12385,47],{"class":46},[36,12387,4219],{"class":112},[36,12389,5029],{"class":42},[36,12391,12392],{"class":38,"line":807},[36,12393,5300],{"class":42},[14,12395,12397],{"id":12396},"_45结构体做函数参数","4.5结构体做函数参数",[19,12399,12400],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[26,12402,12404],{"className":3879,"code":12403,"language":3881,"meta":31,"style":31},"#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",[33,12405,12406,12412,12422,12428,12434,12438,12442,12448,12454,12458,12463,12468,12485,12489,12522,12526,12531,12550,12554,12585,12589,12597,12601,12610,12622,12634,12646,12659,12667,12680,12692,12700],{"__ignoreMap":31},[36,12407,12408,12410],{"class":38,"line":39},[36,12409,5664],{"class":46},[36,12411,5667],{"class":105},[36,12413,12414,12416,12418,12420],{"class":38,"line":53},[36,12415,5672],{"class":46},[36,12417,5675],{"class":46},[36,12419,5678],{"class":101},[36,12421,5029],{"class":42},[36,12423,12424,12426],{"class":38,"line":196},[36,12425,5664],{"class":46},[36,12427,11440],{"class":105},[36,12429,12430,12432],{"class":38,"line":642},[36,12431,11450],{"class":46},[36,12433,11453],{"class":101},[36,12435,12436],{"class":38,"line":655},[36,12437,5281],{"class":42},[36,12439,12440],{"class":38,"line":662},[36,12441,11476],{"class":42},[36,12443,12444,12446],{"class":38,"line":667},[36,12445,5697],{"class":46},[36,12447,11488],{"class":42},[36,12449,12450,12452],{"class":38,"line":679},[36,12451,5697],{"class":46},[36,12453,11500],{"class":42},[36,12455,12456],{"class":38,"line":685},[36,12457,7693],{"class":42},[36,12459,12460],{"class":38,"line":691},[36,12461,12462],{"class":3943},"\u002F\u002F打印学生信息的函数\n",[36,12464,12465],{"class":38,"line":696},[36,12466,12467],{"class":3943},"\u002F\u002F值传递\n",[36,12469,12470,12472,12475,12477,12479,12481,12483],{"class":38,"line":702},[36,12471,9057],{"class":46},[36,12473,12474],{"class":101}," printStudent1",[36,12476,495],{"class":42},[36,12478,11450],{"class":46},[36,12480,11589],{"class":101},[36,12482,12109],{"class":468},[36,12484,922],{"class":42},[36,12486,12487],{"class":38,"line":708},[36,12488,5281],{"class":42},[36,12490,12491,12493,12495,12498,12500,12503,12505,12508,12510,12512,12514,12517,12519],{"class":38,"line":713},[36,12492,10220],{"class":42},[36,12494,4912],{"class":46},[36,12496,12497],{"class":42}," s.name ",[36,12499,4912],{"class":46},[36,12501,12502],{"class":105}," \" \"",[36,12504,5180],{"class":46},[36,12506,12507],{"class":42}," s.age ",[36,12509,4912],{"class":46},[36,12511,12502],{"class":105},[36,12513,5180],{"class":46},[36,12515,12516],{"class":42}," s.score ",[36,12518,4912],{"class":46},[36,12520,12521],{"class":42}," endl;\n",[36,12523,12524],{"class":38,"line":719},[36,12525,5300],{"class":42},[36,12527,12528],{"class":38,"line":725},[36,12529,12530],{"class":3943},"\u002F\u002F地址传递\n",[36,12532,12533,12535,12538,12540,12542,12544,12546,12548],{"class":38,"line":731},[36,12534,9057],{"class":46},[36,12536,12537],{"class":101}," printStudent2",[36,12539,495],{"class":42},[36,12541,11450],{"class":46},[36,12543,11589],{"class":101},[36,12545,1325],{"class":46},[36,12547,4566],{"class":468},[36,12549,922],{"class":42},[36,12551,12552],{"class":38,"line":736},[36,12553,5281],{"class":42},[36,12555,12556,12558,12560,12563,12565,12567,12569,12572,12574,12576,12578,12581,12583],{"class":38,"line":742},[36,12557,10220],{"class":42},[36,12559,4912],{"class":46},[36,12561,12562],{"class":42}," s->name ",[36,12564,4912],{"class":46},[36,12566,12502],{"class":105},[36,12568,5180],{"class":46},[36,12570,12571],{"class":42}," s->age ",[36,12573,4912],{"class":46},[36,12575,12502],{"class":105},[36,12577,5180],{"class":46},[36,12579,12580],{"class":42}," s->score ",[36,12582,4912],{"class":46},[36,12584,12521],{"class":42},[36,12586,12587],{"class":38,"line":748},[36,12588,5300],{"class":42},[36,12590,12591,12593,12595],{"class":38,"line":754},[36,12592,1378],{"class":46},[36,12594,1823],{"class":101},[36,12596,903],{"class":42},[36,12598,12599],{"class":38,"line":760},[36,12600,5281],{"class":42},[36,12602,12603,12605,12607],{"class":38,"line":766},[36,12604,11586],{"class":46},[36,12606,11589],{"class":101},[36,12608,12609],{"class":42}," s;\n",[36,12611,12612,12615,12617,12620],{"class":38,"line":772},[36,12613,12614],{"class":42},"    s.name ",[36,12616,47],{"class":46},[36,12618,12619],{"class":105}," \"张三\"",[36,12621,5029],{"class":42},[36,12623,12624,12627,12629,12632],{"class":38,"line":778},[36,12625,12626],{"class":42},"    s.age ",[36,12628,47],{"class":46},[36,12630,12631],{"class":112}," 20",[36,12633,5029],{"class":42},[36,12635,12636,12639,12641,12644],{"class":38,"line":783},[36,12637,12638],{"class":42},"    s.score ",[36,12640,47],{"class":46},[36,12642,12643],{"class":112}," 85",[36,12645,5029],{"class":42},[36,12647,12648,12650,12652,12655,12657],{"class":38,"line":789},[36,12649,5286],{"class":42},[36,12651,4912],{"class":46},[36,12653,12654],{"class":105},"\"值传递:\"",[36,12656,4912],{"class":46},[36,12658,4934],{"class":42},[36,12660,12661,12664],{"class":38,"line":795},[36,12662,12663],{"class":101},"    printStudent1",[36,12665,12666],{"class":42},"(s);\n",[36,12668,12669,12671,12673,12676,12678],{"class":38,"line":801},[36,12670,5286],{"class":42},[36,12672,4912],{"class":46},[36,12674,12675],{"class":105},"\"地址传递:\"",[36,12677,4912],{"class":46},[36,12679,4934],{"class":42},[36,12681,12682,12685,12687,12689],{"class":38,"line":807},[36,12683,12684],{"class":101},"    printStudent2",[36,12686,495],{"class":42},[36,12688,4228],{"class":46},[36,12690,12691],{"class":42},"s); \n",[36,12693,12694,12696,12698],{"class":38,"line":813},[36,12695,7788],{"class":46},[36,12697,1004],{"class":112},[36,12699,5029],{"class":42},[36,12701,12702],{"class":38,"line":819},[36,12703,5300],{"class":42},[19,12705,12706],{},"注意：",[4875,12708,12709,12712],{},[214,12710,12711],{},"1.先定义结构体，不要在函数中写结构体的定义",[214,12713,12714],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,12716,12718],{"id":12717},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,12720,12721],{},"用const防止误操作",[26,12723,12725],{"className":3879,"code":12724,"language":3881,"meta":31,"style":31},"#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",[33,12726,12727,12733,12743,12749,12754,12758,12762,12768,12774,12778,12794,12798,12821,12825,12833,12837,12858,12865,12869],{"__ignoreMap":31},[36,12728,12729,12731],{"class":38,"line":39},[36,12730,5664],{"class":46},[36,12732,5667],{"class":105},[36,12734,12735,12737,12739,12741],{"class":38,"line":53},[36,12736,5672],{"class":46},[36,12738,5675],{"class":46},[36,12740,5678],{"class":101},[36,12742,5029],{"class":42},[36,12744,12745,12747],{"class":38,"line":196},[36,12746,5664],{"class":46},[36,12748,11440],{"class":105},[36,12750,12751],{"class":38,"line":642},[36,12752,12753],{"class":42},"sctuct Student\n",[36,12755,12756],{"class":38,"line":655},[36,12757,5281],{"class":42},[36,12759,12760],{"class":38,"line":662},[36,12761,11476],{"class":42},[36,12763,12764,12766],{"class":38,"line":667},[36,12765,5697],{"class":46},[36,12767,11488],{"class":42},[36,12769,12770,12772],{"class":38,"line":679},[36,12771,5697],{"class":46},[36,12773,11500],{"class":42},[36,12775,12776],{"class":38,"line":685},[36,12777,7693],{"class":42},[36,12779,12780,12782,12785,12787,12790,12792],{"class":38,"line":691},[36,12781,9057],{"class":46},[36,12783,12784],{"class":101}," printStudents",[36,12786,495],{"class":42},[36,12788,12789],{"class":101},"student",[36,12791,12109],{"class":468},[36,12793,922],{"class":42},[36,12795,12796],{"class":38,"line":696},[36,12797,5281],{"class":42},[36,12799,12800,12802,12804,12807,12809,12812,12814,12817,12819],{"class":38,"line":702},[36,12801,5286],{"class":42},[36,12803,4912],{"class":46},[36,12805,12806],{"class":42},"s.name",[36,12808,4912],{"class":46},[36,12810,12811],{"class":42},"s.age",[36,12813,4912],{"class":46},[36,12815,12816],{"class":42},"s.score",[36,12818,4912],{"class":46},[36,12820,4934],{"class":42},[36,12822,12823],{"class":38,"line":708},[36,12824,5300],{"class":42},[36,12826,12827,12829,12831],{"class":38,"line":713},[36,12828,1378],{"class":46},[36,12830,1823],{"class":101},[36,12832,9671],{"class":42},[36,12834,12835],{"class":38,"line":719},[36,12836,5281],{"class":42},[36,12838,12839,12842,12844,12846,12848,12850,12852,12854,12856],{"class":38,"line":725},[36,12840,12841],{"class":42},"    Student s",[36,12843,47],{"class":46},[36,12845,4766],{"class":42},[36,12847,11607],{"class":105},[36,12849,4253],{"class":42},[36,12851,4521],{"class":112},[36,12853,4253],{"class":42},[36,12855,4521],{"class":112},[36,12857,7693],{"class":42},[36,12859,12860,12863],{"class":38,"line":731},[36,12861,12862],{"class":101},"    printStudent",[36,12864,12666],{"class":42},[36,12866,12867],{"class":38,"line":736},[36,12868,659],{"emptyLinePlaceholder":658},[36,12870,12871],{"class":38,"line":742},[36,12872,5300],{"class":42},[19,12874,12706],{},[4875,12876,12877,12880,12883],{},[214,12878,12879],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[214,12881,12882],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[214,12884,12885],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[26,12887,12889],{"className":3879,"code":12888,"language":3881,"meta":31,"style":31},"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",[33,12890,12891,12910,12914,12919,12939],{"__ignoreMap":31},[36,12892,12893,12895,12897,12899,12901,12904,12906,12908],{"class":38,"line":39},[36,12894,9057],{"class":46},[36,12896,12784],{"class":101},[36,12898,495],{"class":42},[36,12900,10483],{"class":46},[36,12902,12903],{"class":101}," student",[36,12905,1325],{"class":46},[36,12907,4566],{"class":468},[36,12909,922],{"class":42},[36,12911,12912],{"class":38,"line":53},[36,12913,5281],{"class":42},[36,12915,12916],{"class":38,"line":196},[36,12917,12918],{"class":3943},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[36,12920,12921,12923,12925,12927,12929,12931,12933,12935,12937],{"class":38,"line":642},[36,12922,5286],{"class":42},[36,12924,4912],{"class":46},[36,12926,12806],{"class":42},[36,12928,4912],{"class":46},[36,12930,12811],{"class":42},[36,12932,4912],{"class":46},[36,12934,12816],{"class":42},[36,12936,4912],{"class":46},[36,12938,4934],{"class":42},[36,12940,12941],{"class":38,"line":655},[36,12942,5300],{"class":42},[14,12944,12946],{"id":12945},"_47案例","4.7案例",[211,12948,12949],{},[214,12950,12951],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[26,12953,12955],{"className":3879,"code":12954,"language":3881,"meta":31,"style":31},"#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",[33,12956,12957,12963,12973,12979,12986,12990,12996,13000,13005,13011,13017,13021,13025,13031,13035,13040,13045,13058,13062,13067,13093,13097,13109,13136,13140,13152,13161,13165,13170,13199,13203,13215,13224,13251,13262,13272,13276,13280,13284,13289,13313,13317,13341,13345,13364,13390,13394,13418,13440,13463,13467,13471,13475,13483,13487,13492,13512,13517,13530,13535,13561,13569,13574,13581,13585],{"__ignoreMap":31},[36,12958,12959,12961],{"class":38,"line":39},[36,12960,5664],{"class":46},[36,12962,5667],{"class":105},[36,12964,12965,12967,12969,12971],{"class":38,"line":53},[36,12966,5672],{"class":46},[36,12968,5675],{"class":46},[36,12970,5678],{"class":101},[36,12972,5029],{"class":42},[36,12974,12975,12977],{"class":38,"line":196},[36,12976,5664],{"class":46},[36,12978,11440],{"class":105},[36,12980,12981,12983],{"class":38,"line":642},[36,12982,5664],{"class":46},[36,12984,12985],{"class":105},"\u003Cctime>\n",[36,12987,12988],{"class":38,"line":655},[36,12989,12219],{"class":3943},[36,12991,12992,12994],{"class":38,"line":662},[36,12993,11450],{"class":46},[36,12995,11453],{"class":101},[36,12997,12998],{"class":38,"line":667},[36,12999,5281],{"class":42},[36,13001,13002],{"class":38,"line":679},[36,13003,13004],{"class":42},"    string sName;\n",[36,13006,13007,13009],{"class":38,"line":685},[36,13008,5697],{"class":46},[36,13010,11488],{"class":42},[36,13012,13013,13015],{"class":38,"line":691},[36,13014,5697],{"class":46},[36,13016,11500],{"class":42},[36,13018,13019],{"class":38,"line":696},[36,13020,7693],{"class":42},[36,13022,13023],{"class":38,"line":702},[36,13024,12256],{"class":3943},[36,13026,13027,13029],{"class":38,"line":708},[36,13028,11450],{"class":46},[36,13030,12263],{"class":101},[36,13032,13033],{"class":38,"line":713},[36,13034,5281],{"class":42},[36,13036,13037],{"class":38,"line":719},[36,13038,13039],{"class":42},"    string tName;\n",[36,13041,13042],{"class":38,"line":725},[36,13043,13044],{"class":3943},"    \u002F\u002F学生数组\n",[36,13046,13047,13049,13051,13054,13056],{"class":38,"line":731},[36,13048,11586],{"class":46},[36,13050,11589],{"class":101},[36,13052,13053],{"class":42}," sArray[",[36,13055,4194],{"class":112},[36,13057,8386],{"class":42},[36,13059,13060],{"class":38,"line":736},[36,13061,7693],{"class":42},[36,13063,13064],{"class":38,"line":742},[36,13065,13066],{"class":3943},"\u002F\u002F给老师和学生赋值的函数\n",[36,13068,13069,13071,13074,13076,13078,13081,13084,13087,13089,13091],{"class":38,"line":748},[36,13070,9057],{"class":46},[36,13072,13073],{"class":101}," allocateSpace",[36,13075,495],{"class":42},[36,13077,11450],{"class":46},[36,13079,13080],{"class":101}," Teacher",[36,13082,13083],{"class":468}," tArray",[36,13085,13086],{"class":42},"[],",[36,13088,1378],{"class":46},[36,13090,11022],{"class":468},[36,13092,922],{"class":42},[36,13094,13095],{"class":38,"line":754},[36,13096,5281],{"class":42},[36,13098,13099,13102,13104,13107],{"class":38,"line":760},[36,13100,13101],{"class":42},"    string nameSeed",[36,13103,47],{"class":46},[36,13105,13106],{"class":105},"\"ABCDE\"",[36,13108,5029],{"class":42},[36,13110,13111,13113,13115,13117,13120,13122,13124,13127,13129,13132,13134],{"class":38,"line":766},[36,13112,1909],{"class":46},[36,13114,5386],{"class":42},[36,13116,1378],{"class":46},[36,13118,13119],{"class":42}," i ",[36,13121,47],{"class":46},[36,13123,1004],{"class":112},[36,13125,13126],{"class":42},"; i ",[36,13128,393],{"class":46},[36,13130,13131],{"class":42}," len; i",[36,13133,6004],{"class":46},[36,13135,922],{"class":42},[36,13137,13138],{"class":38,"line":772},[36,13139,5742],{"class":42},[36,13141,13142,13145,13147,13150],{"class":38,"line":778},[36,13143,13144],{"class":42},"        tArray[i].tName ",[36,13146,47],{"class":46},[36,13148,13149],{"class":105}," \"Teacher_\"",[36,13151,5029],{"class":42},[36,13153,13154,13156,13158],{"class":38,"line":783},[36,13155,13144],{"class":42},[36,13157,1658],{"class":46},[36,13159,13160],{"class":42},"nameSeed[i];\n",[36,13162,13163],{"class":38,"line":789},[36,13164,659],{"emptyLinePlaceholder":658},[36,13166,13167],{"class":38,"line":795},[36,13168,13169],{"class":3943},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[36,13171,13172,13174,13176,13178,13181,13183,13185,13188,13190,13192,13195,13197],{"class":38,"line":801},[36,13173,1613],{"class":46},[36,13175,5386],{"class":42},[36,13177,1378],{"class":46},[36,13179,13180],{"class":42}," j ",[36,13182,47],{"class":46},[36,13184,1004],{"class":112},[36,13186,13187],{"class":42},"; j ",[36,13189,393],{"class":46},[36,13191,5860],{"class":112},[36,13193,13194],{"class":42},"; j",[36,13196,6004],{"class":46},[36,13198,922],{"class":42},[36,13200,13201],{"class":38,"line":807},[36,13202,6220],{"class":42},[36,13204,13205,13208,13210,13213],{"class":38,"line":813},[36,13206,13207],{"class":42},"            tArray[i].sArray[j].sName ",[36,13209,47],{"class":46},[36,13211,13212],{"class":105}," \"Student_\"",[36,13214,5029],{"class":42},[36,13216,13217,13219,13221],{"class":38,"line":819},[36,13218,13207],{"class":42},[36,13220,1658],{"class":46},[36,13222,13223],{"class":42}," nameSeed[j];\n",[36,13225,13226,13229,13232,13234,13236,13238,13240,13242,13244,13246,13248],{"class":38,"line":824},[36,13227,13228],{"class":46},"            int",[36,13230,13231],{"class":42}," random",[36,13233,47],{"class":46},[36,13235,6135],{"class":101},[36,13237,6138],{"class":42},[36,13239,4203],{"class":46},[36,13241,4777],{"class":112},[36,13243,4354],{"class":46},[36,13245,4276],{"class":112},[36,13247,3940],{"class":42},[36,13249,13250],{"class":3943},"\u002F\u002F40~99\n",[36,13252,13253,13256,13258,13260],{"class":38,"line":829},[36,13254,13255],{"class":42},"            tArray[i].sArray[j].age ",[36,13257,47],{"class":46},[36,13259,12631],{"class":112},[36,13261,5029],{"class":42},[36,13263,13264,13267,13269],{"class":38,"line":851},[36,13265,13266],{"class":42},"            tArray[i].sArray[j].score ",[36,13268,47],{"class":46},[36,13270,13271],{"class":42}," random;\n",[36,13273,13274],{"class":38,"line":868},[36,13275,6239],{"class":42},[36,13277,13278],{"class":38,"line":873},[36,13279,5899],{"class":42},[36,13281,13282],{"class":38,"line":891},[36,13283,5300],{"class":42},[36,13285,13286],{"class":38,"line":906},[36,13287,13288],{"class":3943},"\u002F\u002F打印所有信息的函数\n",[36,13290,13291,13293,13296,13298,13300,13302,13304,13307,13309,13311],{"class":38,"line":925},[36,13292,9057],{"class":46},[36,13294,13295],{"class":101}," printInfo",[36,13297,495],{"class":42},[36,13299,11450],{"class":46},[36,13301,13080],{"class":101},[36,13303,13083],{"class":468},[36,13305,13306],{"class":42},"[], ",[36,13308,1378],{"class":46},[36,13310,11022],{"class":468},[36,13312,922],{"class":42},[36,13314,13315],{"class":38,"line":943},[36,13316,5281],{"class":42},[36,13318,13319,13321,13323,13325,13327,13329,13331,13333,13335,13337,13339],{"class":38,"line":948},[36,13320,1909],{"class":46},[36,13322,5386],{"class":42},[36,13324,1378],{"class":46},[36,13326,13119],{"class":42},[36,13328,47],{"class":46},[36,13330,1004],{"class":112},[36,13332,13126],{"class":42},[36,13334,393],{"class":46},[36,13336,13131],{"class":42},[36,13338,6004],{"class":46},[36,13340,922],{"class":42},[36,13342,13343],{"class":38,"line":971},[36,13344,5742],{"class":42},[36,13346,13347,13350,13352,13355,13357,13360,13362],{"class":38,"line":992},[36,13348,13349],{"class":42},"        cout ",[36,13351,4912],{"class":46},[36,13353,13354],{"class":105}," \"Teacher: \"",[36,13356,5180],{"class":46},[36,13358,13359],{"class":42}," tArray[i].tName ",[36,13361,4912],{"class":46},[36,13363,12521],{"class":42},[36,13365,13366,13368,13370,13372,13374,13376,13378,13380,13382,13384,13386,13388],{"class":38,"line":1020},[36,13367,1613],{"class":46},[36,13369,5386],{"class":42},[36,13371,1378],{"class":46},[36,13373,13180],{"class":42},[36,13375,47],{"class":46},[36,13377,1004],{"class":112},[36,13379,13187],{"class":42},[36,13381,393],{"class":46},[36,13383,5860],{"class":112},[36,13385,13194],{"class":42},[36,13387,6004],{"class":46},[36,13389,922],{"class":42},[36,13391,13392],{"class":38,"line":1036},[36,13393,6220],{"class":42},[36,13395,13396,13399,13401,13404,13406,13409,13411,13414,13416],{"class":38,"line":1041},[36,13397,13398],{"class":42},"            cout ",[36,13400,4912],{"class":46},[36,13402,13403],{"class":105}," \"",[36,13405,4969],{"class":112},[36,13407,13408],{"class":105},"Student: \"",[36,13410,5180],{"class":46},[36,13412,13413],{"class":42}," tArray[i].sArray[j].sName",[36,13415,4912],{"class":46},[36,13417,4934],{"class":42},[36,13419,13420,13422,13424,13426,13428,13431,13433,13436,13438],{"class":38,"line":1052},[36,13421,13398],{"class":42},[36,13423,4912],{"class":46},[36,13425,13403],{"class":105},[36,13427,4969],{"class":112},[36,13429,13430],{"class":105},"Age: \"",[36,13432,5180],{"class":46},[36,13434,13435],{"class":42}," tArray[i].sArray[j].age ",[36,13437,4912],{"class":46},[36,13439,12521],{"class":42},[36,13441,13442,13444,13446,13448,13450,13453,13455,13458,13460],{"class":38,"line":1065},[36,13443,13398],{"class":42},[36,13445,4912],{"class":46},[36,13447,13403],{"class":105},[36,13449,4969],{"class":112},[36,13451,13452],{"class":105},"Score: \"",[36,13454,5180],{"class":46},[36,13456,13457],{"class":42}," tArray[i].sArray[j].score ",[36,13459,4912],{"class":46},[36,13461,13462],{"class":42}," endl;   \n",[36,13464,13465],{"class":38,"line":1077},[36,13466,6239],{"class":42},[36,13468,13469],{"class":38,"line":1082},[36,13470,5899],{"class":42},[36,13472,13473],{"class":38,"line":1125},[36,13474,5300],{"class":42},[36,13476,13477,13479,13481],{"class":38,"line":1164},[36,13478,1378],{"class":46},[36,13480,1823],{"class":101},[36,13482,903],{"class":42},[36,13484,13485],{"class":38,"line":1169},[36,13486,5281],{"class":42},[36,13488,13489],{"class":38,"line":1180},[36,13490,13491],{"class":3943},"    \u002F\u002F随机数种子\n",[36,13493,13494,13496,13498,13500,13502,13504,13506,13508,13510],{"class":38,"line":1198},[36,13495,6085],{"class":101},[36,13497,6088],{"class":42},[36,13499,6091],{"class":46},[36,13501,6094],{"class":46},[36,13503,4304],{"class":42},[36,13505,6099],{"class":101},[36,13507,495],{"class":42},[36,13509,6104],{"class":112},[36,13511,6107],{"class":42},[36,13513,13514],{"class":38,"line":1215},[36,13515,13516],{"class":3943},"    \u002F\u002F1.创建3名老师的数组\n",[36,13518,13519,13521,13523,13526,13528],{"class":38,"line":1236},[36,13520,11586],{"class":46},[36,13522,13080],{"class":101},[36,13524,13525],{"class":42}," tArray[",[36,13527,1982],{"class":112},[36,13529,8386],{"class":42},[36,13531,13532],{"class":38,"line":1245},[36,13533,13534],{"class":3943},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[36,13536,13537,13539,13542,13544,13547,13550,13552,13554,13557,13559],{"class":38,"line":1250},[36,13538,5697],{"class":46},[36,13540,13541],{"class":42}," len ",[36,13543,47],{"class":46},[36,13545,13546],{"class":46}," sizeof",[36,13548,13549],{"class":42},"(tArray) ",[36,13551,4455],{"class":46},[36,13553,13546],{"class":46},[36,13555,13556],{"class":42},"(tArray[",[36,13558,1859],{"class":112},[36,13560,7554],{"class":42},[36,13562,13563,13566],{"class":38,"line":1265},[36,13564,13565],{"class":101},"    allocateSpace",[36,13567,13568],{"class":42},"(tArray, len);\n",[36,13570,13571],{"class":38,"line":1281},[36,13572,13573],{"class":3943},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[36,13575,13576,13579],{"class":38,"line":1297},[36,13577,13578],{"class":101},"    printInfo",[36,13580,13568],{"class":42},[36,13582,13583],{"class":38,"line":1314},[36,13584,659],{"emptyLinePlaceholder":658},[36,13586,13587],{"class":38,"line":1336},[36,13588,5300],{"class":42},[211,13590,13591],{"start":53},[214,13592,13593,13596],{},[4027,13594,13595],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,13598,13599],{},"五名英雄信息如下：",[26,13601,13605],{"className":13602,"code":13603,"language":13604,"meta":31,"style":31},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[33,13606,13607,13625,13642,13659,13676],{"__ignoreMap":31},[36,13608,13609,13611,13614,13616,13618,13620,13623],{"class":38,"line":39},[36,13610,8613],{"class":42},[36,13612,13613],{"class":105},"\"刘备\"",[36,13615,4253],{"class":42},[36,13617,4645],{"class":112},[36,13619,4253],{"class":42},[36,13621,13622],{"class":105},"\"男\"",[36,13624,8626],{"class":42},[36,13626,13627,13629,13632,13634,13636,13638,13640],{"class":38,"line":53},[36,13628,8613],{"class":42},[36,13630,13631],{"class":105},"\"关羽\"",[36,13633,4253],{"class":42},[36,13635,4620],{"class":112},[36,13637,4253],{"class":42},[36,13639,13622],{"class":105},[36,13641,8626],{"class":42},[36,13643,13644,13646,13649,13651,13653,13655,13657],{"class":38,"line":196},[36,13645,8613],{"class":42},[36,13647,13648],{"class":105},"\"张飞\"",[36,13650,4253],{"class":42},[36,13652,1921],{"class":112},[36,13654,4253],{"class":42},[36,13656,13622],{"class":105},[36,13658,8626],{"class":42},[36,13660,13661,13663,13666,13668,13670,13672,13674],{"class":38,"line":642},[36,13662,8613],{"class":42},[36,13664,13665],{"class":105},"\"赵云\"",[36,13667,4253],{"class":42},[36,13669,4595],{"class":112},[36,13671,4253],{"class":42},[36,13673,13622],{"class":105},[36,13675,8626],{"class":42},[36,13677,13678,13680,13683,13685,13687,13689,13692],{"class":38,"line":655},[36,13679,8613],{"class":42},[36,13681,13682],{"class":105},"\"貂蝉\"",[36,13684,4253],{"class":42},[36,13686,4546],{"class":112},[36,13688,4253],{"class":42},[36,13690,13691],{"class":105},"\"女\"",[36,13693,8626],{"class":42},[19,13695,13696],{},"代码：",[26,13698,13700],{"className":3879,"code":13699,"language":3881,"meta":31,"style":31},"#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",[33,13701,13702,13708,13718,13724,13731,13735,13739,13745,13750,13754,13759,13782,13786,13811,13815,13848,13853,13882,13887,13902,13928,13948,13953,13958,13962,13966,13971,13993,13997,14021,14025,14087,14091,14095,14103,14107,14112,14123,14127,14143,14159,14175,14191,14207,14211,14231,14253,14258,14271,14278,14283,14289,14294,14307,14313],{"__ignoreMap":31},[36,13703,13704,13706],{"class":38,"line":39},[36,13705,5664],{"class":46},[36,13707,5667],{"class":105},[36,13709,13710,13712,13714,13716],{"class":38,"line":53},[36,13711,5672],{"class":46},[36,13713,5675],{"class":46},[36,13715,5678],{"class":101},[36,13717,5029],{"class":42},[36,13719,13720,13722],{"class":38,"line":196},[36,13721,5664],{"class":46},[36,13723,11440],{"class":105},[36,13725,13726,13728],{"class":38,"line":642},[36,13727,11450],{"class":46},[36,13729,13730],{"class":101}," Sanguo\n",[36,13732,13733],{"class":38,"line":655},[36,13734,5281],{"class":42},[36,13736,13737],{"class":38,"line":662},[36,13738,11476],{"class":42},[36,13740,13741,13743],{"class":38,"line":667},[36,13742,5697],{"class":46},[36,13744,11488],{"class":42},[36,13746,13747],{"class":38,"line":679},[36,13748,13749],{"class":42},"    string gender;\n",[36,13751,13752],{"class":38,"line":685},[36,13753,7693],{"class":42},[36,13755,13756],{"class":38,"line":691},[36,13757,13758],{"class":3943},"\u002F\u002F定义排序函数\n",[36,13760,13761,13763,13765,13767,13770,13772,13774,13776,13778,13780],{"class":38,"line":696},[36,13762,9057],{"class":46},[36,13764,11007],{"class":101},[36,13766,495],{"class":42},[36,13768,13769],{"class":101},"Sanguo",[36,13771,1325],{"class":46},[36,13773,4566],{"class":468},[36,13775,4253],{"class":42},[36,13777,1378],{"class":46},[36,13779,11022],{"class":468},[36,13781,922],{"class":42},[36,13783,13784],{"class":38,"line":702},[36,13785,5281],{"class":42},[36,13787,13788,13790,13792,13794,13796,13798,13800,13802,13804,13807,13809],{"class":38,"line":708},[36,13789,1909],{"class":46},[36,13791,495],{"class":42},[36,13793,1378],{"class":46},[36,13795,6734],{"class":42},[36,13797,47],{"class":46},[36,13799,1859],{"class":112},[36,13801,6741],{"class":42},[36,13803,393],{"class":46},[36,13805,13806],{"class":42},"len;i",[36,13808,6004],{"class":46},[36,13810,922],{"class":42},[36,13812,13813],{"class":38,"line":713},[36,13814,5742],{"class":42},[36,13816,13817,13820,13822,13824,13826,13828,13830,13832,13834,13836,13838,13840,13842,13844,13846],{"class":38,"line":719},[36,13818,13819],{"class":46},"     for",[36,13821,5386],{"class":42},[36,13823,1378],{"class":46},[36,13825,7109],{"class":42},[36,13827,47],{"class":46},[36,13829,1859],{"class":112},[36,13831,7116],{"class":42},[36,13833,393],{"class":46},[36,13835,11049],{"class":42},[36,13837,1308],{"class":46},[36,13839,4092],{"class":112},[36,13841,1308],{"class":46},[36,13843,7249],{"class":42},[36,13845,6004],{"class":46},[36,13847,922],{"class":42},[36,13849,13850],{"class":38,"line":725},[36,13851,13852],{"class":42},"     {\n",[36,13854,13855,13858,13861,13863,13866,13868,13871,13873,13875,13877,13879],{"class":38,"line":731},[36,13856,13857],{"class":46},"         if",[36,13859,13860],{"class":42}," ((s",[36,13862,4354],{"class":46},[36,13864,13865],{"class":42},"j)->age ",[36,13867,4829],{"class":46},[36,13869,13870],{"class":42}," (s",[36,13872,4354],{"class":46},[36,13874,4340],{"class":42},[36,13876,4354],{"class":46},[36,13878,4092],{"class":112},[36,13880,13881],{"class":42},")->age)\n",[36,13883,13884],{"class":38,"line":736},[36,13885,13886],{"class":42},"         {\n",[36,13888,13889,13892,13894,13897,13899],{"class":38,"line":742},[36,13890,13891],{"class":42},"             Sanguo temp",[36,13893,10844],{"class":46},[36,13895,13896],{"class":42},"(s",[36,13898,4354],{"class":46},[36,13900,13901],{"class":42},"j);\n",[36,13903,13904,13907,13909,13911,13914,13916,13918,13920,13922,13924,13926],{"class":38,"line":748},[36,13905,13906],{"class":46},"             *",[36,13908,13896],{"class":42},[36,13910,4354],{"class":46},[36,13912,13913],{"class":42},"j)",[36,13915,10844],{"class":46},[36,13917,13896],{"class":42},[36,13919,4354],{"class":46},[36,13921,4340],{"class":42},[36,13923,4354],{"class":46},[36,13925,4092],{"class":112},[36,13927,6422],{"class":42},[36,13929,13930,13932,13934,13936,13938,13940,13942,13944,13946],{"class":38,"line":754},[36,13931,13906],{"class":46},[36,13933,13896],{"class":42},[36,13935,4354],{"class":46},[36,13937,4340],{"class":42},[36,13939,4354],{"class":46},[36,13941,4092],{"class":112},[36,13943,4304],{"class":42},[36,13945,47],{"class":46},[36,13947,7977],{"class":42},[36,13949,13950],{"class":38,"line":760},[36,13951,13952],{"class":42},"         }\n",[36,13954,13955],{"class":38,"line":766},[36,13956,13957],{"class":42},"     }\n",[36,13959,13960],{"class":38,"line":772},[36,13961,5899],{"class":42},[36,13963,13964],{"class":38,"line":778},[36,13965,5300],{"class":42},[36,13967,13968],{"class":38,"line":783},[36,13969,13970],{"class":3943},"\u002F\u002F定义打印函数\n",[36,13972,13973,13975,13977,13979,13981,13983,13985,13987,13989,13991],{"class":38,"line":789},[36,13974,9057],{"class":46},[36,13976,13295],{"class":101},[36,13978,495],{"class":42},[36,13980,13769],{"class":101},[36,13982,1325],{"class":46},[36,13984,4566],{"class":468},[36,13986,4253],{"class":42},[36,13988,1378],{"class":46},[36,13990,11022],{"class":468},[36,13992,922],{"class":42},[36,13994,13995],{"class":38,"line":795},[36,13996,5281],{"class":42},[36,13998,13999,14001,14003,14005,14007,14009,14011,14013,14015,14017,14019],{"class":38,"line":801},[36,14000,1909],{"class":46},[36,14002,5386],{"class":42},[36,14004,1378],{"class":46},[36,14006,6734],{"class":42},[36,14008,47],{"class":46},[36,14010,1859],{"class":112},[36,14012,6741],{"class":42},[36,14014,393],{"class":46},[36,14016,13806],{"class":42},[36,14018,6004],{"class":46},[36,14020,922],{"class":42},[36,14022,14023],{"class":38,"line":807},[36,14024,5742],{"class":42},[36,14026,14027,14029,14031,14033,14035,14038,14040,14042,14044,14047,14049,14051,14053,14056,14058,14060,14062,14065,14067,14069,14071,14074,14076,14078,14080,14083,14085],{"class":38,"line":813},[36,14028,7150],{"class":42},[36,14030,4912],{"class":46},[36,14032,4126],{"class":105},[36,14034,4969],{"class":112},[36,14036,14037],{"class":105},"姓名：\"",[36,14039,4912],{"class":46},[36,14041,13896],{"class":42},[36,14043,4354],{"class":46},[36,14045,14046],{"class":42},"i)->name",[36,14048,4912],{"class":46},[36,14050,4126],{"class":105},[36,14052,4969],{"class":112},[36,14054,14055],{"class":105},"年龄：\"",[36,14057,4912],{"class":46},[36,14059,13896],{"class":42},[36,14061,4354],{"class":46},[36,14063,14064],{"class":42},"i)->age",[36,14066,4912],{"class":46},[36,14068,4126],{"class":105},[36,14070,4969],{"class":112},[36,14072,14073],{"class":105},"性别：\"",[36,14075,4912],{"class":46},[36,14077,13896],{"class":42},[36,14079,4354],{"class":46},[36,14081,14082],{"class":42},"i)->gender",[36,14084,4912],{"class":46},[36,14086,4934],{"class":42},[36,14088,14089],{"class":38,"line":819},[36,14090,5899],{"class":42},[36,14092,14093],{"class":38,"line":824},[36,14094,5300],{"class":42},[36,14096,14097,14099,14101],{"class":38,"line":829},[36,14098,1378],{"class":46},[36,14100,1823],{"class":101},[36,14102,903],{"class":42},[36,14104,14105],{"class":38,"line":851},[36,14106,5281],{"class":42},[36,14108,14109],{"class":38,"line":868},[36,14110,14111],{"class":3943},"    \u002F\u002F定义结构体变量\n",[36,14113,14114,14117,14119,14121],{"class":38,"line":873},[36,14115,14116],{"class":42},"    Sanguo s1[",[36,14118,4194],{"class":112},[36,14120,4809],{"class":42},[36,14122,8604],{"class":46},[36,14124,14125],{"class":38,"line":891},[36,14126,5742],{"class":42},[36,14128,14129,14131,14133,14135,14137,14139,14141],{"class":38,"line":906},[36,14130,8613],{"class":42},[36,14132,13613],{"class":105},[36,14134,4253],{"class":42},[36,14136,4645],{"class":112},[36,14138,4253],{"class":42},[36,14140,13622],{"class":105},[36,14142,8626],{"class":42},[36,14144,14145,14147,14149,14151,14153,14155,14157],{"class":38,"line":925},[36,14146,8613],{"class":42},[36,14148,13631],{"class":105},[36,14150,4253],{"class":42},[36,14152,4620],{"class":112},[36,14154,4253],{"class":42},[36,14156,13622],{"class":105},[36,14158,8626],{"class":42},[36,14160,14161,14163,14165,14167,14169,14171,14173],{"class":38,"line":943},[36,14162,8613],{"class":42},[36,14164,13648],{"class":105},[36,14166,4253],{"class":42},[36,14168,1921],{"class":112},[36,14170,4253],{"class":42},[36,14172,13622],{"class":105},[36,14174,8626],{"class":42},[36,14176,14177,14179,14181,14183,14185,14187,14189],{"class":38,"line":948},[36,14178,8613],{"class":42},[36,14180,13665],{"class":105},[36,14182,4253],{"class":42},[36,14184,4595],{"class":112},[36,14186,4253],{"class":42},[36,14188,13622],{"class":105},[36,14190,8626],{"class":42},[36,14192,14193,14195,14197,14199,14201,14203,14205],{"class":38,"line":971},[36,14194,8613],{"class":42},[36,14196,13682],{"class":105},[36,14198,4253],{"class":42},[36,14200,4546],{"class":112},[36,14202,4253],{"class":42},[36,14204,13691],{"class":105},[36,14206,8626],{"class":42},[36,14208,14209],{"class":38,"line":992},[36,14210,8647],{"class":42},[36,14212,14213,14215,14217,14219,14222,14224,14227,14229],{"class":38,"line":1020},[36,14214,5697],{"class":46},[36,14216,11022],{"class":42},[36,14218,7900],{"class":46},[36,14220,14221],{"class":42},"(s1)",[36,14223,7906],{"class":46},[36,14225,14226],{"class":42},"(s1[",[36,14228,1859],{"class":112},[36,14230,7554],{"class":42},[36,14232,14233,14236,14238,14241,14243,14246,14249,14251],{"class":38,"line":1036},[36,14234,14235],{"class":42},"    Sanguo ",[36,14237,1372],{"class":46},[36,14239,14240],{"class":42},"s ",[36,14242,47],{"class":46},[36,14244,14245],{"class":46}," &",[36,14247,14248],{"class":42},"s1[",[36,14250,1859],{"class":112},[36,14252,8386],{"class":42},[36,14254,14255],{"class":38,"line":1041},[36,14256,14257],{"class":3943},"    \u002F\u002F排序前：\n",[36,14259,14260,14262,14264,14267,14269],{"class":38,"line":1052},[36,14261,10220],{"class":42},[36,14263,4912],{"class":46},[36,14265,14266],{"class":105}," \"排序前：\"",[36,14268,5180],{"class":46},[36,14270,12521],{"class":42},[36,14272,14273,14275],{"class":38,"line":1065},[36,14274,13578],{"class":101},[36,14276,14277],{"class":42},"(s,len);\n",[36,14279,14280],{"class":38,"line":1077},[36,14281,14282],{"class":3943},"    \u002F\u002F调用排序函数\n",[36,14284,14285,14287],{"class":38,"line":1082},[36,14286,11289],{"class":101},[36,14288,14277],{"class":42},[36,14290,14291],{"class":38,"line":1125},[36,14292,14293],{"class":3943},"    \u002F\u002F排序后\n",[36,14295,14296,14298,14300,14303,14305],{"class":38,"line":1164},[36,14297,10220],{"class":42},[36,14299,4912],{"class":46},[36,14301,14302],{"class":105}," \"排序后：\"",[36,14304,5180],{"class":46},[36,14306,12521],{"class":42},[36,14308,14309,14311],{"class":38,"line":1169},[36,14310,13578],{"class":101},[36,14312,14277],{"class":42},[36,14314,14315],{"class":38,"line":1180},[36,14316,5300],{"class":42},[19,14318,14319,14320,14322],{},"注意：使用指针时直接用传首地址**&s",[36,14321,1859],{},"**",[3785,14324,14325],{},"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":31,"searchDepth":53,"depth":53,"links":14327},[14328,14329,14330,14331,14332,14333,14334],{"id":11394,"depth":53,"text":11395},{"id":11746,"depth":53,"text":11747},{"id":12015,"depth":53,"text":12016},{"id":12180,"depth":53,"text":12181},{"id":12396,"depth":53,"text":12397},{"id":12717,"depth":53,"text":12718},{"id":12945,"depth":53,"text":12946},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":11383,"description":11391},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":14341,"title":14342,"body":14343,"description":31,"extension":3817,"meta":15686,"navigation":658,"path":15687,"seo":15688,"stem":15689,"__hash__":15690},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":14344,"toc":15680},[14345,14348,14352,14358,14372,14377,14380,14384,14391,14397,14400,14407,14413,14418,14421,14424,14427,14991,14994,15008,15012,15017,15033,15173,15176,15182,15185,15190,15198,15306,15309,15314,15317,15322,15325,15331,15334,15677],[10,14346,14342],{"id":14347},"_5程序内存模型",[14,14349,14351],{"id":14350},"_51内存分区模型","5.1内存分区模型",[19,14353,14354,14355],{},"C++程序在执行时，将内存大方向划分为",[4027,14356,14357],{},"4个区域",[4875,14359,14360,14363,14366,14369],{},[214,14361,14362],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[214,14364,14365],{},"全局区：存放全局变量和静态变量以及常量",[214,14367,14368],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[214,14370,14371],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,14373,14374],{},[4027,14375,14376],{},"内存四区意义：",[19,14378,14379],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[318,14381,14383],{"id":14382},"_511程序运行前","5.1.1程序运行前",[19,14385,14386,14387,14390],{},"​\t在程序编译后，生成了exe可执行程序，",[4027,14388,14389],{},"未执行该程序前","分为两个区域",[19,14392,14393,14394],{},"​\t",[4027,14395,14396],{},"代码区：",[19,14398,14399],{},"​\t\t存放 CPU 执行的机器指令",[19,14401,14402,14403,14406],{},"​\t\t代码区是",[4027,14404,14405],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,14408,14402,14409,14412],{},[4027,14410,14411],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,14414,14393,14415],{},[4027,14416,14417],{},"全局区：",[19,14419,14420],{},"​\t\t全局变量和静态变量存放在此.",[19,14422,14423],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,14425,14426],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[26,14428,14430],{"className":3879,"code":14429,"language":3881,"meta":31,"style":31},"\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",[33,14431,14432,14437,14450,14463,14467,14472,14487,14502,14506,14515,14519,14524,14537,14550,14554,14559,14585,14611,14615,14642,14668,14672,14677,14693,14708,14712,14738,14764,14768,14793,14818,14822,14848,14874,14878,14894,14909,14935,14961,14965,14975,14979,14987],{"__ignoreMap":31},[36,14433,14434],{"class":38,"line":39},[36,14435,14436],{"class":3943},"\u002F\u002F全局变量\n",[36,14438,14439,14441,14444,14446,14448],{"class":38,"line":53},[36,14440,1378],{"class":46},[36,14442,14443],{"class":42}," g_a ",[36,14445,47],{"class":46},[36,14447,5750],{"class":112},[36,14449,5029],{"class":42},[36,14451,14452,14454,14457,14459,14461],{"class":38,"line":196},[36,14453,1378],{"class":46},[36,14455,14456],{"class":42}," g_b ",[36,14458,47],{"class":46},[36,14460,5750],{"class":112},[36,14462,5029],{"class":42},[36,14464,14465],{"class":38,"line":642},[36,14466,659],{"emptyLinePlaceholder":658},[36,14468,14469],{"class":38,"line":655},[36,14470,14471],{"class":3943},"\u002F\u002F全局常量\n",[36,14473,14474,14476,14478,14481,14483,14485],{"class":38,"line":662},[36,14475,10483],{"class":46},[36,14477,6094],{"class":46},[36,14479,14480],{"class":42}," c_g_a ",[36,14482,47],{"class":46},[36,14484,5750],{"class":112},[36,14486,5029],{"class":42},[36,14488,14489,14491,14493,14496,14498,14500],{"class":38,"line":667},[36,14490,10483],{"class":46},[36,14492,6094],{"class":46},[36,14494,14495],{"class":42}," c_g_b ",[36,14497,47],{"class":46},[36,14499,5750],{"class":112},[36,14501,5029],{"class":42},[36,14503,14504],{"class":38,"line":679},[36,14505,659],{"emptyLinePlaceholder":658},[36,14507,14508,14510,14512],{"class":38,"line":685},[36,14509,1378],{"class":46},[36,14511,1823],{"class":101},[36,14513,14514],{"class":42},"() {\n",[36,14516,14517],{"class":38,"line":691},[36,14518,659],{"emptyLinePlaceholder":658},[36,14520,14521],{"class":38,"line":696},[36,14522,14523],{"class":3943},"    \u002F\u002F局部变量\n",[36,14525,14526,14528,14531,14533,14535],{"class":38,"line":702},[36,14527,5697],{"class":46},[36,14529,14530],{"class":42}," a ",[36,14532,47],{"class":46},[36,14534,5750],{"class":112},[36,14536,5029],{"class":42},[36,14538,14539,14541,14544,14546,14548],{"class":38,"line":708},[36,14540,5697],{"class":46},[36,14542,14543],{"class":42}," b ",[36,14545,47],{"class":46},[36,14547,5750],{"class":112},[36,14549,5029],{"class":42},[36,14551,14552],{"class":38,"line":713},[36,14553,659],{"emptyLinePlaceholder":658},[36,14555,14556],{"class":38,"line":719},[36,14557,14558],{"class":3943},"    \u002F\u002F打印地址\n",[36,14560,14561,14563,14565,14568,14570,14572,14574,14576,14578,14581,14583],{"class":38,"line":725},[36,14562,10220],{"class":42},[36,14564,4912],{"class":46},[36,14566,14567],{"class":105}," \"局部变量a地址为： \"",[36,14569,5180],{"class":46},[36,14571,5386],{"class":42},[36,14573,1378],{"class":46},[36,14575,4304],{"class":42},[36,14577,4228],{"class":46},[36,14579,14580],{"class":42},"a ",[36,14582,4912],{"class":46},[36,14584,12521],{"class":42},[36,14586,14587,14589,14591,14594,14596,14598,14600,14602,14604,14607,14609],{"class":38,"line":731},[36,14588,10220],{"class":42},[36,14590,4912],{"class":46},[36,14592,14593],{"class":105}," \"局部变量b地址为： \"",[36,14595,5180],{"class":46},[36,14597,5386],{"class":42},[36,14599,1378],{"class":46},[36,14601,4304],{"class":42},[36,14603,4228],{"class":46},[36,14605,14606],{"class":42},"b ",[36,14608,4912],{"class":46},[36,14610,12521],{"class":42},[36,14612,14613],{"class":38,"line":736},[36,14614,659],{"emptyLinePlaceholder":658},[36,14616,14617,14619,14621,14624,14626,14629,14631,14633,14635,14638,14640],{"class":38,"line":742},[36,14618,10220],{"class":42},[36,14620,4912],{"class":46},[36,14622,14623],{"class":105}," \"全局变量g_a地址为： \"",[36,14625,5180],{"class":46},[36,14627,14628],{"class":42},"  (",[36,14630,1378],{"class":46},[36,14632,4304],{"class":42},[36,14634,4228],{"class":46},[36,14636,14637],{"class":42},"g_a ",[36,14639,4912],{"class":46},[36,14641,12521],{"class":42},[36,14643,14644,14646,14648,14651,14653,14655,14657,14659,14661,14664,14666],{"class":38,"line":748},[36,14645,10220],{"class":42},[36,14647,4912],{"class":46},[36,14649,14650],{"class":105}," \"全局变量g_b地址为： \"",[36,14652,5180],{"class":46},[36,14654,14628],{"class":42},[36,14656,1378],{"class":46},[36,14658,4304],{"class":42},[36,14660,4228],{"class":46},[36,14662,14663],{"class":42},"g_b ",[36,14665,4912],{"class":46},[36,14667,12521],{"class":42},[36,14669,14670],{"class":38,"line":754},[36,14671,659],{"emptyLinePlaceholder":658},[36,14673,14674],{"class":38,"line":760},[36,14675,14676],{"class":3943},"    \u002F\u002F静态变量\n",[36,14678,14679,14682,14684,14687,14689,14691],{"class":38,"line":766},[36,14680,14681],{"class":46},"    static",[36,14683,6094],{"class":46},[36,14685,14686],{"class":42}," s_a ",[36,14688,47],{"class":46},[36,14690,5750],{"class":112},[36,14692,5029],{"class":42},[36,14694,14695,14697,14699,14702,14704,14706],{"class":38,"line":772},[36,14696,14681],{"class":46},[36,14698,6094],{"class":46},[36,14700,14701],{"class":42}," s_b ",[36,14703,47],{"class":46},[36,14705,5750],{"class":112},[36,14707,5029],{"class":42},[36,14709,14710],{"class":38,"line":778},[36,14711,659],{"emptyLinePlaceholder":658},[36,14713,14714,14716,14718,14721,14723,14725,14727,14729,14731,14734,14736],{"class":38,"line":783},[36,14715,10220],{"class":42},[36,14717,4912],{"class":46},[36,14719,14720],{"class":105}," \"静态变量s_a地址为： \"",[36,14722,5180],{"class":46},[36,14724,5386],{"class":42},[36,14726,1378],{"class":46},[36,14728,4304],{"class":42},[36,14730,4228],{"class":46},[36,14732,14733],{"class":42},"s_a ",[36,14735,4912],{"class":46},[36,14737,12521],{"class":42},[36,14739,14740,14742,14744,14747,14749,14751,14753,14755,14757,14760,14762],{"class":38,"line":789},[36,14741,10220],{"class":42},[36,14743,4912],{"class":46},[36,14745,14746],{"class":105}," \"静态变量s_b地址为： \"",[36,14748,5180],{"class":46},[36,14750,5386],{"class":42},[36,14752,1378],{"class":46},[36,14754,4304],{"class":42},[36,14756,4228],{"class":46},[36,14758,14759],{"class":42},"s_b ",[36,14761,4912],{"class":46},[36,14763,12521],{"class":42},[36,14765,14766],{"class":38,"line":795},[36,14767,659],{"emptyLinePlaceholder":658},[36,14769,14770,14772,14774,14777,14779,14781,14783,14785,14787,14789,14791],{"class":38,"line":801},[36,14771,10220],{"class":42},[36,14773,4912],{"class":46},[36,14775,14776],{"class":105}," \"字符串常量地址为： \"",[36,14778,5180],{"class":46},[36,14780,5386],{"class":42},[36,14782,1378],{"class":46},[36,14784,4304],{"class":42},[36,14786,4228],{"class":46},[36,14788,4929],{"class":105},[36,14790,5180],{"class":46},[36,14792,12521],{"class":42},[36,14794,14795,14797,14799,14801,14803,14805,14807,14809,14811,14814,14816],{"class":38,"line":807},[36,14796,10220],{"class":42},[36,14798,4912],{"class":46},[36,14800,14776],{"class":105},[36,14802,5180],{"class":46},[36,14804,5386],{"class":42},[36,14806,1378],{"class":46},[36,14808,4304],{"class":42},[36,14810,4228],{"class":46},[36,14812,14813],{"class":105},"\"hello world1\"",[36,14815,5180],{"class":46},[36,14817,12521],{"class":42},[36,14819,14820],{"class":38,"line":813},[36,14821,659],{"emptyLinePlaceholder":658},[36,14823,14824,14826,14828,14831,14833,14835,14837,14839,14841,14844,14846],{"class":38,"line":819},[36,14825,10220],{"class":42},[36,14827,4912],{"class":46},[36,14829,14830],{"class":105}," \"全局常量c_g_a地址为： \"",[36,14832,5180],{"class":46},[36,14834,5386],{"class":42},[36,14836,1378],{"class":46},[36,14838,4304],{"class":42},[36,14840,4228],{"class":46},[36,14842,14843],{"class":42},"c_g_a ",[36,14845,4912],{"class":46},[36,14847,12521],{"class":42},[36,14849,14850,14852,14854,14857,14859,14861,14863,14865,14867,14870,14872],{"class":38,"line":824},[36,14851,10220],{"class":42},[36,14853,4912],{"class":46},[36,14855,14856],{"class":105}," \"全局常量c_g_b地址为： \"",[36,14858,5180],{"class":46},[36,14860,5386],{"class":42},[36,14862,1378],{"class":46},[36,14864,4304],{"class":42},[36,14866,4228],{"class":46},[36,14868,14869],{"class":42},"c_g_b ",[36,14871,4912],{"class":46},[36,14873,12521],{"class":42},[36,14875,14876],{"class":38,"line":829},[36,14877,659],{"emptyLinePlaceholder":658},[36,14879,14880,14883,14885,14888,14890,14892],{"class":38,"line":851},[36,14881,14882],{"class":46},"    const",[36,14884,6094],{"class":46},[36,14886,14887],{"class":42}," c_l_a ",[36,14889,47],{"class":46},[36,14891,5750],{"class":112},[36,14893,5029],{"class":42},[36,14895,14896,14898,14900,14903,14905,14907],{"class":38,"line":868},[36,14897,14882],{"class":46},[36,14899,6094],{"class":46},[36,14901,14902],{"class":42}," c_l_b ",[36,14904,47],{"class":46},[36,14906,5750],{"class":112},[36,14908,5029],{"class":42},[36,14910,14911,14913,14915,14918,14920,14922,14924,14926,14928,14931,14933],{"class":38,"line":873},[36,14912,10220],{"class":42},[36,14914,4912],{"class":46},[36,14916,14917],{"class":105}," \"局部常量c_l_a地址为： \"",[36,14919,5180],{"class":46},[36,14921,5386],{"class":42},[36,14923,1378],{"class":46},[36,14925,4304],{"class":42},[36,14927,4228],{"class":46},[36,14929,14930],{"class":42},"c_l_a ",[36,14932,4912],{"class":46},[36,14934,12521],{"class":42},[36,14936,14937,14939,14941,14944,14946,14948,14950,14952,14954,14957,14959],{"class":38,"line":891},[36,14938,10220],{"class":42},[36,14940,4912],{"class":46},[36,14942,14943],{"class":105}," \"局部常量c_l_b地址为： \"",[36,14945,5180],{"class":46},[36,14947,5386],{"class":42},[36,14949,1378],{"class":46},[36,14951,4304],{"class":42},[36,14953,4228],{"class":46},[36,14955,14956],{"class":42},"c_l_b ",[36,14958,4912],{"class":46},[36,14960,12521],{"class":42},[36,14962,14963],{"class":38,"line":906},[36,14964,659],{"emptyLinePlaceholder":658},[36,14966,14967,14969,14971,14973],{"class":38,"line":925},[36,14968,6015],{"class":101},[36,14970,495],{"class":42},[36,14972,6020],{"class":105},[36,14974,6422],{"class":42},[36,14976,14977],{"class":38,"line":943},[36,14978,659],{"emptyLinePlaceholder":658},[36,14980,14981,14983,14985],{"class":38,"line":948},[36,14982,7788],{"class":46},[36,14984,1004],{"class":112},[36,14986,5029],{"class":42},[36,14988,14989],{"class":38,"line":971},[36,14990,5300],{"class":42},[19,14992,14993],{},"总结：",[4875,14995,14996,14999,15002,15005],{},[214,14997,14998],{},"c++中程序运行前分为全局区和代码区",[214,15000,15001],{},"代码区特点是共享和只读",[214,15003,15004],{},"全局区中存放全局变量、静态变量、常量",[214,15006,15007],{},"常量区中存放const修饰的全局常量和字符串常量",[318,15009,15011],{"id":15010},"_512程序运行后","5.1.2程序运行后",[211,15013,15014],{},[214,15015,15016],{},"栈区：",[4875,15018,15019,15026],{},[214,15020,15021,15022,15025],{},"由编译器自动分配释放, 存放",[4027,15023,15024],{},"函数的参数值,局部变量","等",[214,15027,15028,15029,15032],{},"注意事项：",[4027,15030,15031],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[26,15034,15036],{"className":3879,"code":15035,"language":3881,"meta":31,"style":31},"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",[33,15037,15038,15049,15053,15068,15080,15084,15088,15096,15101,15116,15134,15151,15161,15169],{"__ignoreMap":31},[36,15039,15040,15042,15044,15047],{"class":38,"line":39},[36,15041,1378],{"class":46},[36,15043,1325],{"class":46},[36,15045,15046],{"class":101}," func",[36,15048,903],{"class":42},[36,15050,15051],{"class":38,"line":53},[36,15052,5281],{"class":42},[36,15054,15055,15057,15059,15061,15063,15065],{"class":38,"line":196},[36,15056,5697],{"class":46},[36,15058,14530],{"class":42},[36,15060,47],{"class":46},[36,15062,5750],{"class":112},[36,15064,3940],{"class":42},[36,15066,15067],{"class":3943}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[36,15069,15070,15072,15074,15077],{"class":38,"line":642},[36,15071,7788],{"class":46},[36,15073,14245],{"class":46},[36,15075,15076],{"class":42},"a;",[36,15078,15079],{"class":3943}," \u002F\u002F放回局部变量的地址\n",[36,15081,15082],{"class":38,"line":655},[36,15083,5300],{"class":42},[36,15085,15086],{"class":38,"line":662},[36,15087,659],{"emptyLinePlaceholder":658},[36,15089,15090,15092,15094],{"class":38,"line":667},[36,15091,1378],{"class":46},[36,15093,1823],{"class":101},[36,15095,14514],{"class":42},[36,15097,15098],{"class":38,"line":679},[36,15099,15100],{"class":3943},"    \u002F\u002F接受func的返回值\n",[36,15102,15103,15105,15107,15110,15112,15114],{"class":38,"line":685},[36,15104,5697],{"class":46},[36,15106,1325],{"class":46},[36,15108,15109],{"class":42},"p ",[36,15111,47],{"class":46},[36,15113,15046],{"class":101},[36,15115,9329],{"class":42},[36,15117,15118,15120,15122,15124,15126,15128,15131],{"class":38,"line":691},[36,15119,10220],{"class":42},[36,15121,4912],{"class":46},[36,15123,1325],{"class":46},[36,15125,15109],{"class":42},[36,15127,4912],{"class":46},[36,15129,15130],{"class":42}," endl;",[36,15132,15133],{"class":3943}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[36,15135,15136,15138,15140,15142,15144,15146,15148],{"class":38,"line":696},[36,15137,10220],{"class":42},[36,15139,4912],{"class":46},[36,15141,1325],{"class":46},[36,15143,15109],{"class":42},[36,15145,4912],{"class":46},[36,15147,15130],{"class":42},[36,15149,15150],{"class":3943}," \u002F\u002F第二次这个数据不再保留\n",[36,15152,15153,15155,15157,15159],{"class":38,"line":702},[36,15154,6015],{"class":101},[36,15156,495],{"class":42},[36,15158,6020],{"class":105},[36,15160,6422],{"class":42},[36,15162,15163,15165,15167],{"class":38,"line":708},[36,15164,7788],{"class":46},[36,15166,1004],{"class":112},[36,15168,5029],{"class":42},[36,15170,15171],{"class":38,"line":713},[36,15172,5300],{"class":42},[19,15174,15175],{},"输出结果：",[19,15177,15178],{},[5198,15179],{"alt":15180,"src":15181},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,15183,15184],{},"总结：不要返回局部变量的地址",[211,15186,15187],{"start":53},[214,15188,15189],{},"堆区",[4875,15191,15192,15195],{},[214,15193,15194],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[214,15196,15197],{},"在c++中主要利用new在堆区开辟内存",[26,15199,15201],{"className":3879,"code":15200,"language":3881,"meta":31,"style":31},"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",[33,15202,15203,15218,15222,15227,15248,15255,15259,15267,15271,15276,15290,15302],{"__ignoreMap":31},[36,15204,15205,15207,15210,15213,15215],{"class":38,"line":39},[36,15206,1378],{"class":46},[36,15208,15209],{"class":46},"  *",[36,15211,15212],{"class":101},"func",[36,15214,6138],{"class":42},[36,15216,15217],{"class":3943},"  \u002F\u002F函数返回指针\n",[36,15219,15220],{"class":38,"line":53},[36,15221,5281],{"class":42},[36,15223,15224],{"class":38,"line":196},[36,15225,15226],{"class":3943},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[36,15228,15229,15231,15233,15235,15237,15240,15242,15244,15246],{"class":38,"line":642},[36,15230,7844],{"class":46},[36,15232,1325],{"class":46},[36,15234,19],{"class":42},[36,15236,47],{"class":46},[36,15238,15239],{"class":46}," new",[36,15241,6094],{"class":46},[36,15243,495],{"class":42},[36,15245,554],{"class":112},[36,15247,6422],{"class":42},[36,15249,15250,15252],{"class":38,"line":655},[36,15251,8078],{"class":46},[36,15253,15254],{"class":42}," p;\n",[36,15256,15257],{"class":38,"line":662},[36,15258,5300],{"class":42},[36,15260,15261,15263,15265],{"class":38,"line":667},[36,15262,1378],{"class":46},[36,15264,1823],{"class":101},[36,15266,903],{"class":42},[36,15268,15269],{"class":38,"line":679},[36,15270,5281],{"class":42},[36,15272,15273],{"class":38,"line":685},[36,15274,15275],{"class":3943},"    \u002F\u002F在堆区开辟数据\n",[36,15277,15278,15280,15282,15284,15286,15288],{"class":38,"line":691},[36,15279,5697],{"class":46},[36,15281,1325],{"class":46},[36,15283,19],{"class":42},[36,15285,47],{"class":46},[36,15287,15212],{"class":101},[36,15289,9329],{"class":42},[36,15291,15292,15294,15296,15298,15300],{"class":38,"line":696},[36,15293,5286],{"class":42},[36,15295,10111],{"class":46},[36,15297,19],{"class":42},[36,15299,4912],{"class":46},[36,15301,4934],{"class":42},[36,15303,15304],{"class":38,"line":702},[36,15305,5300],{"class":42},[19,15307,15308],{},"图片展示：",[19,15310,15311],{},[5198,15312],{"alt":15180,"src":15313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,15315,15316],{},"堆区内存由程序员管生死！！！",[211,15318,15319],{"start":196},[214,15320,15321],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,15323,15324],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,15326,15327,15328],{},"​语法：",[33,15329,15330],{}," new 数据类型",[19,15332,15333],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[26,15335,15337],{"className":3879,"code":15336,"language":3881,"meta":31,"style":31},"\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",[33,15338,15339,15344,15354,15358,15363,15368,15390,15394,15402,15406,15420,15432,15444,15456,15461,15466,15477,15481,15486,15494,15498,15503,15525,15551,15555,15573,15577,15603,15607,15619,15623,15628,15633,15641,15645,15649,15657,15661,15667,15673],{"__ignoreMap":31},[36,15340,15341],{"class":38,"line":39},[36,15342,15343],{"class":3943},"\u002F\u002F1.new的基本语法\n",[36,15345,15346,15348,15350,15352],{"class":38,"line":53},[36,15347,1378],{"class":46},[36,15349,1325],{"class":46},[36,15351,15212],{"class":101},[36,15353,903],{"class":42},[36,15355,15356],{"class":38,"line":196},[36,15357,5281],{"class":42},[36,15359,15360],{"class":38,"line":642},[36,15361,15362],{"class":3943},"    \u002F\u002F在堆区创建整型数据\n",[36,15364,15365],{"class":38,"line":655},[36,15366,15367],{"class":3943},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[36,15369,15370,15372,15374,15376,15379,15381,15383,15385,15387],{"class":38,"line":662},[36,15371,5697],{"class":46},[36,15373,1325],{"class":46},[36,15375,19],{"class":42},[36,15377,15378],{"class":46},"=new",[36,15380,6094],{"class":46},[36,15382,495],{"class":42},[36,15384,554],{"class":112},[36,15386,9659],{"class":42},[36,15388,15389],{"class":3943},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[36,15391,15392],{"class":38,"line":667},[36,15393,5300],{"class":42},[36,15395,15396,15398,15400],{"class":38,"line":679},[36,15397,9057],{"class":46},[36,15399,9281],{"class":101},[36,15401,903],{"class":42},[36,15403,15404],{"class":38,"line":685},[36,15405,5281],{"class":42},[36,15407,15408,15410,15412,15414,15416,15418],{"class":38,"line":691},[36,15409,5697],{"class":46},[36,15411,1325],{"class":46},[36,15413,19],{"class":42},[36,15415,47],{"class":46},[36,15417,15212],{"class":101},[36,15419,9329],{"class":42},[36,15421,15422,15424,15426,15428,15430],{"class":38,"line":696},[36,15423,5286],{"class":42},[36,15425,10111],{"class":46},[36,15427,19],{"class":42},[36,15429,4912],{"class":46},[36,15431,4934],{"class":42},[36,15433,15434,15436,15438,15440,15442],{"class":38,"line":702},[36,15435,5286],{"class":42},[36,15437,10111],{"class":46},[36,15439,19],{"class":42},[36,15441,4912],{"class":46},[36,15443,4934],{"class":42},[36,15445,15446,15448,15450,15452,15454],{"class":38,"line":708},[36,15447,5286],{"class":42},[36,15449,10111],{"class":46},[36,15451,19],{"class":42},[36,15453,4912],{"class":46},[36,15455,4934],{"class":42},[36,15457,15458],{"class":38,"line":713},[36,15459,15460],{"class":3943},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[36,15462,15463],{"class":38,"line":719},[36,15464,15465],{"class":3943},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[36,15467,15468,15471,15474],{"class":38,"line":725},[36,15469,15470],{"class":46},"    delete",[36,15472,15473],{"class":42}," p;",[36,15475,15476],{"class":3943},"\u002F\u002F删除这块地址\n",[36,15478,15479],{"class":38,"line":731},[36,15480,5300],{"class":42},[36,15482,15483],{"class":38,"line":736},[36,15484,15485],{"class":3943},"\u002F\u002F2.在堆区利用new开辟数组\n",[36,15487,15488,15490,15492],{"class":38,"line":742},[36,15489,9057],{"class":46},[36,15491,9350],{"class":101},[36,15493,903],{"class":42},[36,15495,15496],{"class":38,"line":748},[36,15497,5281],{"class":42},[36,15499,15500],{"class":38,"line":754},[36,15501,15502],{"class":3943},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[36,15504,15505,15507,15509,15511,15513,15515,15517,15519,15522],{"class":38,"line":760},[36,15506,5697],{"class":46},[36,15508,1325],{"class":46},[36,15510,7578],{"class":42},[36,15512,15378],{"class":46},[36,15514,6094],{"class":46},[36,15516,4760],{"class":42},[36,15518,554],{"class":112},[36,15520,15521],{"class":42},"];",[36,15523,15524],{"class":3943},"\u002F\u002F10代表数组有10个元素\n",[36,15526,15527,15529,15531,15533,15535,15537,15539,15541,15543,15545,15547,15549],{"class":38,"line":766},[36,15528,1909],{"class":46},[36,15530,5386],{"class":42},[36,15532,1378],{"class":46},[36,15534,6734],{"class":42},[36,15536,47],{"class":46},[36,15538,1859],{"class":112},[36,15540,6741],{"class":42},[36,15542,393],{"class":46},[36,15544,554],{"class":112},[36,15546,6741],{"class":42},[36,15548,6004],{"class":46},[36,15550,922],{"class":42},[36,15552,15553],{"class":38,"line":772},[36,15554,5742],{"class":42},[36,15556,15557,15560,15562,15564,15566,15568,15570],{"class":38,"line":778},[36,15558,15559],{"class":42},"        arr[i]",[36,15561,47],{"class":46},[36,15563,4316],{"class":42},[36,15565,4354],{"class":46},[36,15567,4186],{"class":112},[36,15569,3940],{"class":42},[36,15571,15572],{"class":3943},"\u002F\u002F给10个元素赋值100～109\n",[36,15574,15575],{"class":38,"line":783},[36,15576,5899],{"class":42},[36,15578,15579,15581,15583,15585,15587,15589,15591,15593,15595,15597,15599,15601],{"class":38,"line":789},[36,15580,1909],{"class":46},[36,15582,5386],{"class":42},[36,15584,1378],{"class":46},[36,15586,6734],{"class":42},[36,15588,47],{"class":46},[36,15590,1859],{"class":112},[36,15592,6741],{"class":42},[36,15594,393],{"class":46},[36,15596,554],{"class":112},[36,15598,6741],{"class":42},[36,15600,6004],{"class":46},[36,15602,922],{"class":42},[36,15604,15605],{"class":38,"line":795},[36,15606,5742],{"class":42},[36,15608,15609,15611,15613,15615,15617],{"class":38,"line":801},[36,15610,7150],{"class":42},[36,15612,4912],{"class":46},[36,15614,8051],{"class":42},[36,15616,4912],{"class":46},[36,15618,4934],{"class":42},[36,15620,15621],{"class":38,"line":807},[36,15622,5899],{"class":42},[36,15624,15625],{"class":38,"line":813},[36,15626,15627],{"class":3943},"    \u002F\u002F释放堆区数组\n",[36,15629,15630],{"class":38,"line":819},[36,15631,15632],{"class":3943},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[36,15634,15635,15638],{"class":38,"line":824},[36,15636,15637],{"class":46},"    delete[]",[36,15639,15640],{"class":42}," arr;\n",[36,15642,15643],{"class":38,"line":829},[36,15644,5300],{"class":42},[36,15646,15647],{"class":38,"line":851},[36,15648,659],{"emptyLinePlaceholder":658},[36,15650,15651,15653,15655],{"class":38,"line":868},[36,15652,1378],{"class":46},[36,15654,1823],{"class":101},[36,15656,903],{"class":42},[36,15658,15659],{"class":38,"line":873},[36,15660,5281],{"class":42},[36,15662,15663,15665],{"class":38,"line":891},[36,15664,9326],{"class":101},[36,15666,9329],{"class":42},[36,15668,15669,15671],{"class":38,"line":906},[36,15670,9395],{"class":101},[36,15672,9329],{"class":42},[36,15674,15675],{"class":38,"line":925},[36,15676,5300],{"class":42},[3785,15678,15679],{},"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":31,"searchDepth":53,"depth":53,"links":15681},[15682],{"id":14350,"depth":53,"text":14351,"children":15683},[15684,15685],{"id":14382,"depth":196,"text":14383},{"id":15010,"depth":196,"text":15011},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":14342,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":15692,"title":15693,"body":15694,"description":31,"extension":3817,"meta":17174,"navigation":658,"path":17175,"seo":17176,"stem":17177,"__hash__":17178},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":15695,"toc":17166},[15696,15699,15703,15706,15709,15878,15882,15887,15904,15909,16061,16065,16068,16071,16464,16468,16471,16476,16479,16791,16795,16801,16961,16963,16971,16975,16978,16985,17163],[10,15697,15693],{"id":15698},"_6引用",[14,15700,15702],{"id":15701},"_61引用基本用法","6.1引用基本用法",[19,15704,15705],{},"引用的本质：给变量起别名",[19,15707,15708],{},"语法：数据类型 &别名=原名",[26,15710,15712],{"className":3879,"code":15711,"language":3881,"meta":31,"style":31},"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",[33,15713,15714,15722,15726,15738,15750,15754,15773,15792,15796,15807,15811,15830,15848,15852,15862,15866,15874],{"__ignoreMap":31},[36,15715,15716,15718,15720],{"class":38,"line":39},[36,15717,1378],{"class":46},[36,15719,1823],{"class":101},[36,15721,14514],{"class":42},[36,15723,15724],{"class":38,"line":53},[36,15725,659],{"emptyLinePlaceholder":658},[36,15727,15728,15730,15732,15734,15736],{"class":38,"line":196},[36,15729,5697],{"class":46},[36,15731,14530],{"class":42},[36,15733,47],{"class":46},[36,15735,5750],{"class":112},[36,15737,5029],{"class":42},[36,15739,15740,15742,15744,15746,15748],{"class":38,"line":642},[36,15741,5697],{"class":46},[36,15743,14245],{"class":46},[36,15745,14606],{"class":42},[36,15747,47],{"class":46},[36,15749,5168],{"class":42},[36,15751,15752],{"class":38,"line":655},[36,15753,659],{"emptyLinePlaceholder":658},[36,15755,15756,15758,15760,15763,15765,15767,15769,15771],{"class":38,"line":662},[36,15757,10220],{"class":42},[36,15759,4912],{"class":46},[36,15761,15762],{"class":105}," \"a = \"",[36,15764,5180],{"class":46},[36,15766,14530],{"class":42},[36,15768,4912],{"class":46},[36,15770,15130],{"class":42},[36,15772,10959],{"class":3943},[36,15774,15775,15777,15779,15782,15784,15786,15788,15790],{"class":38,"line":667},[36,15776,10220],{"class":42},[36,15778,4912],{"class":46},[36,15780,15781],{"class":105}," \"b = \"",[36,15783,5180],{"class":46},[36,15785,14543],{"class":42},[36,15787,4912],{"class":46},[36,15789,15130],{"class":42},[36,15791,10959],{"class":3943},[36,15793,15794],{"class":38,"line":679},[36,15795,659],{"emptyLinePlaceholder":658},[36,15797,15798,15801,15803,15805],{"class":38,"line":685},[36,15799,15800],{"class":42},"    b ",[36,15802,47],{"class":46},[36,15804,9447],{"class":112},[36,15806,5029],{"class":42},[36,15808,15809],{"class":38,"line":691},[36,15810,659],{"emptyLinePlaceholder":658},[36,15812,15813,15815,15817,15819,15821,15823,15825,15827],{"class":38,"line":696},[36,15814,10220],{"class":42},[36,15816,4912],{"class":46},[36,15818,15762],{"class":105},[36,15820,5180],{"class":46},[36,15822,14530],{"class":42},[36,15824,4912],{"class":46},[36,15826,15130],{"class":42},[36,15828,15829],{"class":3943},"\u002F\u002F100\n",[36,15831,15832,15834,15836,15838,15840,15842,15844,15846],{"class":38,"line":702},[36,15833,10220],{"class":42},[36,15835,4912],{"class":46},[36,15837,15781],{"class":105},[36,15839,5180],{"class":46},[36,15841,14543],{"class":42},[36,15843,4912],{"class":46},[36,15845,15130],{"class":42},[36,15847,15829],{"class":3943},[36,15849,15850],{"class":38,"line":708},[36,15851,659],{"emptyLinePlaceholder":658},[36,15853,15854,15856,15858,15860],{"class":38,"line":713},[36,15855,6015],{"class":101},[36,15857,495],{"class":42},[36,15859,6020],{"class":105},[36,15861,6422],{"class":42},[36,15863,15864],{"class":38,"line":719},[36,15865,659],{"emptyLinePlaceholder":658},[36,15867,15868,15870,15872],{"class":38,"line":725},[36,15869,7788],{"class":46},[36,15871,1004],{"class":112},[36,15873,5029],{"class":42},[36,15875,15876],{"class":38,"line":731},[36,15877,5300],{"class":42},[14,15879,15881],{"id":15880},"_62引用的注意事项","6.2引用的注意事项",[211,15883,15884],{},[214,15885,15886],{},"引用必须要初始化",[26,15888,15890],{"className":3879,"code":15889,"language":3881,"meta":31,"style":31},"int &b;\u002F\u002F非常错误！\n",[33,15891,15892],{"__ignoreMap":31},[36,15893,15894,15896,15898,15901],{"class":38,"line":39},[36,15895,1378],{"class":46},[36,15897,14245],{"class":46},[36,15899,15900],{"class":42},"b;",[36,15902,15903],{"class":3943},"\u002F\u002F非常错误！\n",[211,15905,15906],{"start":53},[214,15907,15908],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[26,15910,15912],{"className":3879,"code":15911,"language":3881,"meta":31,"style":31},"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",[33,15913,15914,15922,15934,15946,15954,15970,15983,16001,16019,16039,16049,16057],{"__ignoreMap":31},[36,15915,15916,15918,15920],{"class":38,"line":39},[36,15917,1378],{"class":46},[36,15919,1823],{"class":101},[36,15921,14514],{"class":42},[36,15923,15924,15926,15928,15930,15932],{"class":38,"line":53},[36,15925,5697],{"class":46},[36,15927,14530],{"class":42},[36,15929,47],{"class":46},[36,15931,5750],{"class":112},[36,15933,5029],{"class":42},[36,15935,15936,15938,15940,15942,15944],{"class":38,"line":196},[36,15937,5697],{"class":46},[36,15939,14543],{"class":42},[36,15941,47],{"class":46},[36,15943,12631],{"class":112},[36,15945,5029],{"class":42},[36,15947,15948,15951],{"class":38,"line":642},[36,15949,15950],{"class":3943},"    \u002F\u002Fint &c;",[36,15952,15953],{"class":3943}," \u002F\u002F错误，引用必须初始化\n",[36,15955,15956,15958,15960,15962,15964,15967],{"class":38,"line":655},[36,15957,5697],{"class":46},[36,15959,14245],{"class":46},[36,15961,6649],{"class":42},[36,15963,47],{"class":46},[36,15965,15966],{"class":42}," a;",[36,15968,15969],{"class":3943}," \u002F\u002F一旦初始化后，就不可以更改\n",[36,15971,15972,15975,15977,15980],{"class":38,"line":662},[36,15973,15974],{"class":42},"    c ",[36,15976,47],{"class":46},[36,15978,15979],{"class":42}," b;",[36,15981,15982],{"class":3943}," \u002F\u002F这是赋值操作，不是更改引用\n",[36,15984,15985,15987,15989,15991,15993,15995,15997,15999],{"class":38,"line":667},[36,15986,10220],{"class":42},[36,15988,4912],{"class":46},[36,15990,15762],{"class":105},[36,15992,5180],{"class":46},[36,15994,14530],{"class":42},[36,15996,4912],{"class":46},[36,15998,15130],{"class":42},[36,16000,10944],{"class":3943},[36,16002,16003,16005,16007,16009,16011,16013,16015,16017],{"class":38,"line":679},[36,16004,10220],{"class":42},[36,16006,4912],{"class":46},[36,16008,15781],{"class":105},[36,16010,5180],{"class":46},[36,16012,14543],{"class":42},[36,16014,4912],{"class":46},[36,16016,15130],{"class":42},[36,16018,10944],{"class":3943},[36,16020,16021,16023,16025,16028,16030,16033,16035,16037],{"class":38,"line":685},[36,16022,10220],{"class":42},[36,16024,4912],{"class":46},[36,16026,16027],{"class":105}," \"c = \"",[36,16029,5180],{"class":46},[36,16031,16032],{"class":42}," c ",[36,16034,4912],{"class":46},[36,16036,15130],{"class":42},[36,16038,10944],{"class":3943},[36,16040,16041,16043,16045,16047],{"class":38,"line":691},[36,16042,6015],{"class":101},[36,16044,495],{"class":42},[36,16046,6020],{"class":105},[36,16048,6422],{"class":42},[36,16050,16051,16053,16055],{"class":38,"line":696},[36,16052,7788],{"class":46},[36,16054,1004],{"class":112},[36,16056,5029],{"class":42},[36,16058,16059],{"class":38,"line":702},[36,16060,5300],{"class":42},[14,16062,16064],{"id":16063},"_63引用做函数参数","6.3引用做函数参数",[19,16066,16067],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,16069,16070],{},"优点：可以简化指针修改实参",[26,16072,16074],{"className":3879,"code":16073,"language":3881,"meta":31,"style":31},"\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",[33,16075,16076,16081,16103,16114,16124,16133,16137,16141,16146,16168,16180,16192,16202,16206,16210,16215,16237,16247,16255,16263,16267,16271,16279,16283,16295,16307,16311,16322,16348,16352,16372,16396,16400,16410,16434,16438,16448,16452,16460],{"__ignoreMap":31},[36,16077,16078],{"class":38,"line":39},[36,16079,16080],{"class":3943},"\u002F\u002F1. 值传递\n",[36,16082,16083,16085,16088,16090,16092,16094,16096,16098,16100],{"class":38,"line":53},[36,16084,9057],{"class":46},[36,16086,16087],{"class":101}," mySwap01",[36,16089,495],{"class":42},[36,16091,1378],{"class":46},[36,16093,5134],{"class":468},[36,16095,478],{"class":42},[36,16097,1378],{"class":46},[36,16099,6536],{"class":468},[36,16101,16102],{"class":42},") {\n",[36,16104,16105,16107,16110,16112],{"class":38,"line":196},[36,16106,5697],{"class":46},[36,16108,16109],{"class":42}," temp ",[36,16111,47],{"class":46},[36,16113,5168],{"class":42},[36,16115,16116,16119,16121],{"class":38,"line":642},[36,16117,16118],{"class":42},"    a ",[36,16120,47],{"class":46},[36,16122,16123],{"class":42}," b;\n",[36,16125,16126,16128,16130],{"class":38,"line":655},[36,16127,15800],{"class":42},[36,16129,47],{"class":46},[36,16131,16132],{"class":42}," temp;\n",[36,16134,16135],{"class":38,"line":662},[36,16136,5300],{"class":42},[36,16138,16139],{"class":38,"line":667},[36,16140,659],{"emptyLinePlaceholder":658},[36,16142,16143],{"class":38,"line":679},[36,16144,16145],{"class":3943},"\u002F\u002F2. 地址传递\n",[36,16147,16148,16150,16153,16155,16158,16160,16162,16164,16166],{"class":38,"line":685},[36,16149,9057],{"class":46},[36,16151,16152],{"class":101}," mySwap02",[36,16154,495],{"class":42},[36,16156,16157],{"class":46},"int*",[36,16159,5134],{"class":468},[36,16161,478],{"class":42},[36,16163,16157],{"class":46},[36,16165,6536],{"class":468},[36,16167,16102],{"class":42},[36,16169,16170,16172,16174,16176,16178],{"class":38,"line":691},[36,16171,5697],{"class":46},[36,16173,16109],{"class":42},[36,16175,47],{"class":46},[36,16177,1325],{"class":46},[36,16179,9890],{"class":42},[36,16181,16182,16184,16186,16188,16190],{"class":38,"line":696},[36,16183,10096],{"class":46},[36,16185,14580],{"class":42},[36,16187,47],{"class":46},[36,16189,1325],{"class":46},[36,16191,9762],{"class":42},[36,16193,16194,16196,16198,16200],{"class":38,"line":702},[36,16195,10096],{"class":46},[36,16197,14606],{"class":42},[36,16199,47],{"class":46},[36,16201,16132],{"class":42},[36,16203,16204],{"class":38,"line":708},[36,16205,5300],{"class":42},[36,16207,16208],{"class":38,"line":713},[36,16209,659],{"emptyLinePlaceholder":658},[36,16211,16212],{"class":38,"line":719},[36,16213,16214],{"class":3943},"\u002F\u002F3. 引用传递\n",[36,16216,16217,16219,16222,16224,16227,16229,16231,16233,16235],{"class":38,"line":725},[36,16218,9057],{"class":46},[36,16220,16221],{"class":101}," mySwap03",[36,16223,495],{"class":42},[36,16225,16226],{"class":46},"int&",[36,16228,5134],{"class":468},[36,16230,478],{"class":42},[36,16232,16226],{"class":46},[36,16234,6536],{"class":468},[36,16236,16102],{"class":42},[36,16238,16239,16241,16243,16245],{"class":38,"line":731},[36,16240,5697],{"class":46},[36,16242,16109],{"class":42},[36,16244,47],{"class":46},[36,16246,5168],{"class":42},[36,16248,16249,16251,16253],{"class":38,"line":736},[36,16250,16118],{"class":42},[36,16252,47],{"class":46},[36,16254,16123],{"class":42},[36,16256,16257,16259,16261],{"class":38,"line":742},[36,16258,15800],{"class":42},[36,16260,47],{"class":46},[36,16262,16132],{"class":42},[36,16264,16265],{"class":38,"line":748},[36,16266,5300],{"class":42},[36,16268,16269],{"class":38,"line":754},[36,16270,659],{"emptyLinePlaceholder":658},[36,16272,16273,16275,16277],{"class":38,"line":760},[36,16274,1378],{"class":46},[36,16276,1823],{"class":101},[36,16278,14514],{"class":42},[36,16280,16281],{"class":38,"line":766},[36,16282,659],{"emptyLinePlaceholder":658},[36,16284,16285,16287,16289,16291,16293],{"class":38,"line":772},[36,16286,5697],{"class":46},[36,16288,14530],{"class":42},[36,16290,47],{"class":46},[36,16292,5750],{"class":112},[36,16294,5029],{"class":42},[36,16296,16297,16299,16301,16303,16305],{"class":38,"line":778},[36,16298,5697],{"class":46},[36,16300,14543],{"class":42},[36,16302,47],{"class":46},[36,16304,12631],{"class":112},[36,16306,5029],{"class":42},[36,16308,16309],{"class":38,"line":783},[36,16310,659],{"emptyLinePlaceholder":658},[36,16312,16313,16316,16319],{"class":38,"line":789},[36,16314,16315],{"class":101},"    mySwap01",[36,16317,16318],{"class":42},"(a, b);",[36,16320,16321],{"class":3943},"\u002F\u002F值传递，形参不会修饰实参\n",[36,16323,16324,16326,16328,16331,16333,16335,16337,16340,16342,16344,16346],{"class":38,"line":795},[36,16325,10220],{"class":42},[36,16327,4912],{"class":46},[36,16329,16330],{"class":105}," \"a:\"",[36,16332,5180],{"class":46},[36,16334,14530],{"class":42},[36,16336,4912],{"class":46},[36,16338,16339],{"class":105}," \" b:\"",[36,16341,5180],{"class":46},[36,16343,14543],{"class":42},[36,16345,4912],{"class":46},[36,16347,12521],{"class":42},[36,16349,16350],{"class":38,"line":801},[36,16351,659],{"emptyLinePlaceholder":658},[36,16353,16354,16357,16359,16361,16364,16366,16369],{"class":38,"line":807},[36,16355,16356],{"class":101},"    mySwap02",[36,16358,495],{"class":42},[36,16360,4228],{"class":46},[36,16362,16363],{"class":42},"a, ",[36,16365,4228],{"class":46},[36,16367,16368],{"class":42},"b);",[36,16370,16371],{"class":3943},"\u002F\u002F地址传递，形参会修饰实参\n",[36,16373,16374,16376,16378,16380,16382,16384,16386,16388,16390,16392,16394],{"class":38,"line":813},[36,16375,10220],{"class":42},[36,16377,4912],{"class":46},[36,16379,16330],{"class":105},[36,16381,5180],{"class":46},[36,16383,14530],{"class":42},[36,16385,4912],{"class":46},[36,16387,16339],{"class":105},[36,16389,5180],{"class":46},[36,16391,14543],{"class":42},[36,16393,4912],{"class":46},[36,16395,12521],{"class":42},[36,16397,16398],{"class":38,"line":819},[36,16399,659],{"emptyLinePlaceholder":658},[36,16401,16402,16405,16407],{"class":38,"line":824},[36,16403,16404],{"class":101},"    mySwap03",[36,16406,16318],{"class":42},[36,16408,16409],{"class":3943},"\u002F\u002F引用传递，形参会修饰实参\n",[36,16411,16412,16414,16416,16418,16420,16422,16424,16426,16428,16430,16432],{"class":38,"line":829},[36,16413,10220],{"class":42},[36,16415,4912],{"class":46},[36,16417,16330],{"class":105},[36,16419,5180],{"class":46},[36,16421,14530],{"class":42},[36,16423,4912],{"class":46},[36,16425,16339],{"class":105},[36,16427,5180],{"class":46},[36,16429,14543],{"class":42},[36,16431,4912],{"class":46},[36,16433,12521],{"class":42},[36,16435,16436],{"class":38,"line":851},[36,16437,659],{"emptyLinePlaceholder":658},[36,16439,16440,16442,16444,16446],{"class":38,"line":868},[36,16441,6015],{"class":101},[36,16443,495],{"class":42},[36,16445,6020],{"class":105},[36,16447,6422],{"class":42},[36,16449,16450],{"class":38,"line":873},[36,16451,659],{"emptyLinePlaceholder":658},[36,16453,16454,16456,16458],{"class":38,"line":891},[36,16455,7788],{"class":46},[36,16457,1004],{"class":112},[36,16459,5029],{"class":42},[36,16461,16462],{"class":38,"line":906},[36,16463,5300],{"class":42},[14,16465,16467],{"id":16466},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,16469,16470],{},"作用：引用是可以作为函数的返回值存在的",[19,16472,12706,16473],{},[4027,16474,16475],{},"不要返回局部变量引用",[19,16477,16478],{},"用法：函数调用作为左值",[26,16480,16482],{"className":13602,"code":16481,"language":13604,"meta":31,"style":31},"\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",[33,16483,16484,16489,16497,16512,16518,16522,16526,16531,16539,16556,16562,16566,16570,16578,16582,16587,16601,16621,16640,16644,16649,16662,16682,16700,16704,16720,16724,16743,16761,16765,16775,16779,16787],{"__ignoreMap":31},[36,16485,16486],{"class":38,"line":39},[36,16487,16488],{"class":3943},"\u002F\u002F返回局部变量引用\n",[36,16490,16491,16493,16495],{"class":38,"line":53},[36,16492,16226],{"class":46},[36,16494,9281],{"class":101},[36,16496,14514],{"class":42},[36,16498,16499,16501,16503,16505,16507,16509],{"class":38,"line":196},[36,16500,5697],{"class":46},[36,16502,14530],{"class":42},[36,16504,47],{"class":46},[36,16506,5750],{"class":112},[36,16508,3940],{"class":42},[36,16510,16511],{"class":3943}," \u002F\u002F局部变量\n",[36,16513,16514,16516],{"class":38,"line":642},[36,16515,7788],{"class":46},[36,16517,5168],{"class":42},[36,16519,16520],{"class":38,"line":655},[36,16521,5300],{"class":42},[36,16523,16524],{"class":38,"line":662},[36,16525,659],{"emptyLinePlaceholder":658},[36,16527,16528],{"class":38,"line":667},[36,16529,16530],{"class":3943},"\u002F\u002F返回静态变量引用\n",[36,16532,16533,16535,16537],{"class":38,"line":679},[36,16534,16226],{"class":46},[36,16536,9350],{"class":101},[36,16538,14514],{"class":42},[36,16540,16541,16543,16545,16547,16549,16551,16553],{"class":38,"line":685},[36,16542,14681],{"class":46},[36,16544,6094],{"class":46},[36,16546,14530],{"class":42},[36,16548,47],{"class":46},[36,16550,12631],{"class":112},[36,16552,3940],{"class":42},[36,16554,16555],{"class":3943},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[36,16557,16558,16560],{"class":38,"line":691},[36,16559,7788],{"class":46},[36,16561,5168],{"class":42},[36,16563,16564],{"class":38,"line":696},[36,16565,5300],{"class":42},[36,16567,16568],{"class":38,"line":702},[36,16569,659],{"emptyLinePlaceholder":658},[36,16571,16572,16574,16576],{"class":38,"line":708},[36,16573,1378],{"class":46},[36,16575,1823],{"class":101},[36,16577,14514],{"class":42},[36,16579,16580],{"class":38,"line":713},[36,16581,659],{"emptyLinePlaceholder":658},[36,16583,16584],{"class":38,"line":719},[36,16585,16586],{"class":3943},"    \u002F\u002F不能返回局部变量的引用\n",[36,16588,16589,16592,16595,16597,16599],{"class":38,"line":725},[36,16590,16591],{"class":46},"    int&",[36,16593,16594],{"class":42}," ref ",[36,16596,47],{"class":46},[36,16598,9281],{"class":101},[36,16600,9329],{"class":42},[36,16602,16603,16605,16607,16610,16612,16614,16616,16618],{"class":38,"line":731},[36,16604,10220],{"class":42},[36,16606,4912],{"class":46},[36,16608,16609],{"class":105}," \"ref = \"",[36,16611,5180],{"class":46},[36,16613,16594],{"class":42},[36,16615,4912],{"class":46},[36,16617,15130],{"class":42},[36,16619,16620],{"class":3943},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[36,16622,16623,16625,16627,16629,16631,16633,16635,16637],{"class":38,"line":736},[36,16624,10220],{"class":42},[36,16626,4912],{"class":46},[36,16628,16609],{"class":105},[36,16630,5180],{"class":46},[36,16632,16594],{"class":42},[36,16634,4912],{"class":46},[36,16636,15130],{"class":42},[36,16638,16639],{"class":3943},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[36,16641,16642],{"class":38,"line":742},[36,16643,659],{"emptyLinePlaceholder":658},[36,16645,16646],{"class":38,"line":748},[36,16647,16648],{"class":3943},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[36,16650,16651,16653,16656,16658,16660],{"class":38,"line":754},[36,16652,16591],{"class":46},[36,16654,16655],{"class":42}," ref2 ",[36,16657,47],{"class":46},[36,16659,9350],{"class":101},[36,16661,9329],{"class":42},[36,16663,16664,16666,16668,16671,16673,16675,16677,16679],{"class":38,"line":760},[36,16665,10220],{"class":42},[36,16667,4912],{"class":46},[36,16669,16670],{"class":105}," \"ref2 = \"",[36,16672,5180],{"class":46},[36,16674,16655],{"class":42},[36,16676,4912],{"class":46},[36,16678,15130],{"class":42},[36,16680,16681],{"class":3943}," \u002F\u002F20\n",[36,16683,16684,16686,16688,16690,16692,16694,16696,16698],{"class":38,"line":766},[36,16685,10220],{"class":42},[36,16687,4912],{"class":46},[36,16689,16670],{"class":105},[36,16691,5180],{"class":46},[36,16693,16655],{"class":42},[36,16695,4912],{"class":46},[36,16697,15130],{"class":42},[36,16699,16681],{"class":3943},[36,16701,16702],{"class":38,"line":772},[36,16703,659],{"emptyLinePlaceholder":658},[36,16705,16706,16708,16711,16713,16715,16717],{"class":38,"line":778},[36,16707,9395],{"class":101},[36,16709,16710],{"class":42},"() ",[36,16712,47],{"class":46},[36,16714,6702],{"class":112},[36,16716,3940],{"class":42},[36,16718,16719],{"class":3943},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[36,16721,16722],{"class":38,"line":783},[36,16723,659],{"emptyLinePlaceholder":658},[36,16725,16726,16728,16730,16732,16734,16736,16738,16740],{"class":38,"line":789},[36,16727,10220],{"class":42},[36,16729,4912],{"class":46},[36,16731,16670],{"class":105},[36,16733,5180],{"class":46},[36,16735,16655],{"class":42},[36,16737,4912],{"class":46},[36,16739,15130],{"class":42},[36,16741,16742],{"class":3943}," \u002F\u002F1000\n",[36,16744,16745,16747,16749,16751,16753,16755,16757,16759],{"class":38,"line":795},[36,16746,10220],{"class":42},[36,16748,4912],{"class":46},[36,16750,16670],{"class":105},[36,16752,5180],{"class":46},[36,16754,16655],{"class":42},[36,16756,4912],{"class":46},[36,16758,15130],{"class":42},[36,16760,16742],{"class":3943},[36,16762,16763],{"class":38,"line":801},[36,16764,659],{"emptyLinePlaceholder":658},[36,16766,16767,16769,16771,16773],{"class":38,"line":807},[36,16768,6015],{"class":101},[36,16770,495],{"class":42},[36,16772,6020],{"class":105},[36,16774,6422],{"class":42},[36,16776,16777],{"class":38,"line":813},[36,16778,659],{"emptyLinePlaceholder":658},[36,16780,16781,16783,16785],{"class":38,"line":819},[36,16782,7788],{"class":46},[36,16784,1004],{"class":112},[36,16786,5029],{"class":42},[36,16788,16789],{"class":38,"line":824},[36,16790,5300],{"class":42},[14,16792,16794],{"id":16793},"_65引用的本质","6.5引用的本质",[19,16796,16797,16798],{},"本质：",[4027,16799,16800],{},"引用的本质在c++内部实现是一个指针常量.",[26,16802,16804],{"className":3879,"code":16803,"language":3881,"meta":31,"style":31},"\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",[33,16805,16806,16811,16827,16841,16845,16854,16866,16871,16876,16887,16900,16904,16920,16937,16941,16949,16957],{"__ignoreMap":31},[36,16807,16808],{"class":38,"line":39},[36,16809,16810],{"class":3943},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[36,16812,16813,16815,16817,16819,16821,16824],{"class":38,"line":53},[36,16814,9057],{"class":46},[36,16816,15046],{"class":101},[36,16818,495],{"class":42},[36,16820,16226],{"class":46},[36,16822,16823],{"class":468}," ref",[36,16825,16826],{"class":42},"){\n",[36,16828,16829,16832,16834,16836,16838],{"class":38,"line":196},[36,16830,16831],{"class":42},"    ref ",[36,16833,47],{"class":46},[36,16835,9447],{"class":112},[36,16837,3940],{"class":42},[36,16839,16840],{"class":3943}," \u002F\u002F ref是引用，转换为*ref = 100\n",[36,16842,16843],{"class":38,"line":642},[36,16844,5300],{"class":42},[36,16846,16847,16849,16851],{"class":38,"line":655},[36,16848,1378],{"class":46},[36,16850,1823],{"class":101},[36,16852,16853],{"class":42},"(){\n",[36,16855,16856,16858,16860,16862,16864],{"class":38,"line":662},[36,16857,5697],{"class":46},[36,16859,14530],{"class":42},[36,16861,47],{"class":46},[36,16863,5750],{"class":112},[36,16865,5029],{"class":42},[36,16867,16868],{"class":38,"line":667},[36,16869,16870],{"class":42},"    \n",[36,16872,16873],{"class":38,"line":679},[36,16874,16875],{"class":3943},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[36,16877,16878,16880,16882,16884],{"class":38,"line":685},[36,16879,16591],{"class":46},[36,16881,16594],{"class":42},[36,16883,47],{"class":46},[36,16885,16886],{"class":42}," a; \n",[36,16888,16889,16891,16893,16895,16897],{"class":38,"line":691},[36,16890,16831],{"class":42},[36,16892,47],{"class":46},[36,16894,12631],{"class":112},[36,16896,3940],{"class":42},[36,16898,16899],{"class":3943}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[36,16901,16902],{"class":38,"line":696},[36,16903,16870],{"class":42},[36,16905,16906,16908,16910,16912,16914,16916,16918],{"class":38,"line":702},[36,16907,10220],{"class":42},[36,16909,4912],{"class":46},[36,16911,16330],{"class":105},[36,16913,5180],{"class":46},[36,16915,14530],{"class":42},[36,16917,4912],{"class":46},[36,16919,12521],{"class":42},[36,16921,16922,16924,16926,16929,16931,16933,16935],{"class":38,"line":708},[36,16923,10220],{"class":42},[36,16925,4912],{"class":46},[36,16927,16928],{"class":105}," \"ref:\"",[36,16930,5180],{"class":46},[36,16932,16594],{"class":42},[36,16934,4912],{"class":46},[36,16936,12521],{"class":42},[36,16938,16939],{"class":38,"line":713},[36,16940,16870],{"class":42},[36,16942,16943,16946],{"class":38,"line":719},[36,16944,16945],{"class":101},"    func",[36,16947,16948],{"class":42},"(a);\n",[36,16950,16951,16953,16955],{"class":38,"line":725},[36,16952,7788],{"class":46},[36,16954,1004],{"class":112},[36,16956,5029],{"class":42},[36,16958,16959],{"class":38,"line":731},[36,16960,5300],{"class":42},[19,16962,14993],{},[211,16964,16965,16968],{},[214,16966,16967],{},"引用的本质，就是一个指针常量",[214,16969,16970],{},"引用一旦初始化，就不可以发生改变",[14,16972,16974],{"id":16973},"_66常量引用","6.6常量引用",[19,16976,16977],{},"作用：常量引用主要用来修饰形参",[19,16979,16980,16981,16984],{},"在函数形参列表中，可以加",[4027,16982,16983],{},"const修饰形参","，防止形参改变实参",[26,16986,16988],{"className":3879,"code":16987,"language":3881,"meta":31,"style":31},"\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",[33,16989,16990,16995,17000,17019,17024,17037,17041,17045,17053,17057,17062,17067,17081,17085,17093,17105,17109,17114,17126,17133,17137,17147,17151,17159],{"__ignoreMap":31},[36,16991,16992],{"class":38,"line":39},[36,16993,16994],{"class":3943},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[36,16996,16997],{"class":38,"line":53},[36,16998,16999],{"class":3943},"\u002F\u002F加上const就不能修改实参的\n",[36,17001,17002,17004,17007,17009,17011,17014,17017],{"class":38,"line":196},[36,17003,9057],{"class":46},[36,17005,17006],{"class":101}," showValue",[36,17008,495],{"class":42},[36,17010,10483],{"class":46},[36,17012,17013],{"class":46}," int&",[36,17015,17016],{"class":468}," v",[36,17018,16102],{"class":42},[36,17020,17021],{"class":38,"line":642},[36,17022,17023],{"class":3943},"    \u002F\u002Fv += 100;\n",[36,17025,17026,17028,17030,17033,17035],{"class":38,"line":655},[36,17027,10220],{"class":42},[36,17029,4912],{"class":46},[36,17031,17032],{"class":42}," v ",[36,17034,4912],{"class":46},[36,17036,12521],{"class":42},[36,17038,17039],{"class":38,"line":662},[36,17040,5300],{"class":42},[36,17042,17043],{"class":38,"line":667},[36,17044,659],{"emptyLinePlaceholder":658},[36,17046,17047,17049,17051],{"class":38,"line":679},[36,17048,1378],{"class":46},[36,17050,1823],{"class":101},[36,17052,14514],{"class":42},[36,17054,17055],{"class":38,"line":685},[36,17056,659],{"emptyLinePlaceholder":658},[36,17058,17059],{"class":38,"line":691},[36,17060,17061],{"class":3943},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[36,17063,17064],{"class":38,"line":696},[36,17065,17066],{"class":3943},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[36,17068,17069,17071,17073,17075,17077,17079],{"class":38,"line":702},[36,17070,14882],{"class":46},[36,17072,17013],{"class":46},[36,17074,16594],{"class":42},[36,17076,47],{"class":46},[36,17078,5750],{"class":112},[36,17080,5029],{"class":42},[36,17082,17083],{"class":38,"line":708},[36,17084,659],{"emptyLinePlaceholder":658},[36,17086,17087,17090],{"class":38,"line":713},[36,17088,17089],{"class":3943},"    \u002F\u002Fref = 100;",[36,17091,17092],{"class":3943},"  \u002F\u002F加入const后不可以修改变量\n",[36,17094,17095,17097,17099,17101,17103],{"class":38,"line":719},[36,17096,10220],{"class":42},[36,17098,4912],{"class":46},[36,17100,16594],{"class":42},[36,17102,4912],{"class":46},[36,17104,12521],{"class":42},[36,17106,17107],{"class":38,"line":725},[36,17108,659],{"emptyLinePlaceholder":658},[36,17110,17111],{"class":38,"line":731},[36,17112,17113],{"class":3943},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[36,17115,17116,17118,17120,17122,17124],{"class":38,"line":736},[36,17117,5697],{"class":46},[36,17119,14530],{"class":42},[36,17121,47],{"class":46},[36,17123,5750],{"class":112},[36,17125,5029],{"class":42},[36,17127,17128,17131],{"class":38,"line":742},[36,17129,17130],{"class":101},"    showValue",[36,17132,16948],{"class":42},[36,17134,17135],{"class":38,"line":748},[36,17136,659],{"emptyLinePlaceholder":658},[36,17138,17139,17141,17143,17145],{"class":38,"line":754},[36,17140,6015],{"class":101},[36,17142,495],{"class":42},[36,17144,6020],{"class":105},[36,17146,6422],{"class":42},[36,17148,17149],{"class":38,"line":760},[36,17150,659],{"emptyLinePlaceholder":658},[36,17152,17153,17155,17157],{"class":38,"line":766},[36,17154,7788],{"class":46},[36,17156,1004],{"class":112},[36,17158,5029],{"class":42},[36,17160,17161],{"class":38,"line":772},[36,17162,5300],{"class":42},[3785,17164,17165],{},"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":31,"searchDepth":53,"depth":53,"links":17167},[17168,17169,17170,17171,17172,17173],{"id":15701,"depth":53,"text":15702},{"id":15880,"depth":53,"text":15881},{"id":16063,"depth":53,"text":16064},{"id":16466,"depth":53,"text":16467},{"id":16793,"depth":53,"text":16794},{"id":16973,"depth":53,"text":16974},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":15693,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":17180,"title":17181,"body":17182,"description":31,"extension":3817,"meta":18262,"navigation":658,"path":18263,"seo":18264,"stem":18265,"__hash__":18266},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":17183,"toc":18254},[17184,17187,17191,17194,17199,17430,17432,17443,17447,17450,17458,17562,17565,17569,17572,17576,17579,17584,17606,17612,17939,17942,17946,17954,18251],[10,17185,17181],{"id":17186},"_7函数高级部分",[14,17188,17190],{"id":17189},"_71函数默认参数","7.1函数默认参数",[19,17192,17193],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,17195,8877,17196],{},[33,17197,17198],{}," 返回值类型  函数名 （参数= 默认值）{}",[26,17200,17202],{"className":3879,"code":17201,"language":3881,"meta":31,"style":31},"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",[33,17203,17204,17238,17253,17257,17261,17266,17271,17300,17320,17330,17334,17338,17346,17350,17378,17400,17404,17414,17418,17426],{"__ignoreMap":31},[36,17205,17206,17208,17210,17212,17214,17216,17218,17220,17222,17224,17226,17228,17230,17232,17234,17236],{"class":38,"line":39},[36,17207,1378],{"class":46},[36,17209,15046],{"class":101},[36,17211,495],{"class":42},[36,17213,1378],{"class":46},[36,17215,5134],{"class":468},[36,17217,478],{"class":42},[36,17219,1378],{"class":46},[36,17221,6536],{"class":468},[36,17223,673],{"class":46},[36,17225,5750],{"class":112},[36,17227,478],{"class":42},[36,17229,1378],{"class":46},[36,17231,6552],{"class":468},[36,17233,673],{"class":46},[36,17235,5750],{"class":112},[36,17237,16102],{"class":42},[36,17239,17240,17242,17244,17246,17248,17250],{"class":38,"line":53},[36,17241,7788],{"class":46},[36,17243,14530],{"class":42},[36,17245,4354],{"class":46},[36,17247,14543],{"class":42},[36,17249,4354],{"class":46},[36,17251,17252],{"class":42}," c;\n",[36,17254,17255],{"class":38,"line":196},[36,17256,5300],{"class":42},[36,17258,17259],{"class":38,"line":642},[36,17260,659],{"emptyLinePlaceholder":658},[36,17262,17263],{"class":38,"line":655},[36,17264,17265],{"class":3943},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[36,17267,17268],{"class":38,"line":662},[36,17269,17270],{"class":3943},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[36,17272,17273,17275,17278,17280,17282,17284,17286,17288,17290,17292,17294,17296,17298],{"class":38,"line":667},[36,17274,1378],{"class":46},[36,17276,17277],{"class":101}," func2",[36,17279,495],{"class":42},[36,17281,1378],{"class":46},[36,17283,5134],{"class":468},[36,17285,673],{"class":46},[36,17287,5750],{"class":112},[36,17289,478],{"class":42},[36,17291,1378],{"class":46},[36,17293,6536],{"class":468},[36,17295,673],{"class":46},[36,17297,5750],{"class":112},[36,17299,6422],{"class":42},[36,17301,17302,17304,17306,17308,17310,17312,17314,17316,17318],{"class":38,"line":679},[36,17303,1378],{"class":46},[36,17305,17277],{"class":101},[36,17307,495],{"class":42},[36,17309,1378],{"class":46},[36,17311,5134],{"class":468},[36,17313,478],{"class":42},[36,17315,1378],{"class":46},[36,17317,6536],{"class":468},[36,17319,16102],{"class":42},[36,17321,17322,17324,17326,17328],{"class":38,"line":685},[36,17323,7788],{"class":46},[36,17325,14530],{"class":42},[36,17327,4354],{"class":46},[36,17329,16123],{"class":42},[36,17331,17332],{"class":38,"line":691},[36,17333,5300],{"class":42},[36,17335,17336],{"class":38,"line":696},[36,17337,659],{"emptyLinePlaceholder":658},[36,17339,17340,17342,17344],{"class":38,"line":702},[36,17341,1378],{"class":46},[36,17343,1823],{"class":101},[36,17345,14514],{"class":42},[36,17347,17348],{"class":38,"line":708},[36,17349,659],{"emptyLinePlaceholder":658},[36,17351,17352,17354,17356,17359,17361,17363,17365,17367,17369,17371,17374,17376],{"class":38,"line":713},[36,17353,10220],{"class":42},[36,17355,4912],{"class":46},[36,17357,17358],{"class":105}," \"ret = \"",[36,17360,5180],{"class":46},[36,17362,15046],{"class":101},[36,17364,495],{"class":42},[36,17366,1921],{"class":112},[36,17368,478],{"class":42},[36,17370,1921],{"class":112},[36,17372,17373],{"class":42},") ",[36,17375,4912],{"class":46},[36,17377,12521],{"class":42},[36,17379,17380,17382,17384,17386,17388,17390,17392,17394,17396,17398],{"class":38,"line":719},[36,17381,10220],{"class":42},[36,17383,4912],{"class":46},[36,17385,17358],{"class":105},[36,17387,5180],{"class":46},[36,17389,15046],{"class":101},[36,17391,495],{"class":42},[36,17393,4186],{"class":112},[36,17395,17373],{"class":42},[36,17397,4912],{"class":46},[36,17399,12521],{"class":42},[36,17401,17402],{"class":38,"line":725},[36,17403,659],{"emptyLinePlaceholder":658},[36,17405,17406,17408,17410,17412],{"class":38,"line":731},[36,17407,6015],{"class":101},[36,17409,495],{"class":42},[36,17411,6020],{"class":105},[36,17413,6422],{"class":42},[36,17415,17416],{"class":38,"line":736},[36,17417,659],{"emptyLinePlaceholder":658},[36,17419,17420,17422,17424],{"class":38,"line":742},[36,17421,7788],{"class":46},[36,17423,1004],{"class":112},[36,17425,5029],{"class":42},[36,17427,17428],{"class":38,"line":748},[36,17429,5300],{"class":42},[19,17431,14993],{},[211,17433,17434,17437,17440],{},[214,17435,17436],{},"我传就用我；没传就用你",[214,17438,17439],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[214,17441,17442],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,17444,17446],{"id":17445},"_72函数的占位参数","7.2函数的占位参数",[19,17448,17449],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,17451,17452,17454,17455],{},[4027,17453,8877],{}," ",[33,17456,17457],{},"返回值类型 函数名 (数据类型){}",[26,17459,17461],{"className":3879,"code":17460,"language":3881,"meta":31,"style":31},"\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",[33,17462,17463,17468,17486,17499,17503,17511,17515,17532,17536,17546,17550,17558],{"__ignoreMap":31},[36,17464,17465],{"class":38,"line":39},[36,17466,17467],{"class":3943},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[36,17469,17470,17472,17474,17476,17478,17480,17482,17484],{"class":38,"line":53},[36,17471,9057],{"class":46},[36,17473,15046],{"class":101},[36,17475,495],{"class":42},[36,17477,1378],{"class":46},[36,17479,5134],{"class":468},[36,17481,478],{"class":42},[36,17483,1378],{"class":46},[36,17485,16102],{"class":42},[36,17487,17488,17490,17492,17495,17497],{"class":38,"line":196},[36,17489,10220],{"class":42},[36,17491,4912],{"class":46},[36,17493,17494],{"class":105}," \"this is func\"",[36,17496,5180],{"class":46},[36,17498,12521],{"class":42},[36,17500,17501],{"class":38,"line":642},[36,17502,5300],{"class":42},[36,17504,17505,17507,17509],{"class":38,"line":655},[36,17506,1378],{"class":46},[36,17508,1823],{"class":101},[36,17510,14514],{"class":42},[36,17512,17513],{"class":38,"line":662},[36,17514,659],{"emptyLinePlaceholder":658},[36,17516,17517,17519,17521,17523,17525,17527,17529],{"class":38,"line":667},[36,17518,16945],{"class":101},[36,17520,495],{"class":42},[36,17522,554],{"class":112},[36,17524,4253],{"class":42},[36,17526,554],{"class":112},[36,17528,9659],{"class":42},[36,17530,17531],{"class":3943}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[36,17533,17534],{"class":38,"line":679},[36,17535,659],{"emptyLinePlaceholder":658},[36,17537,17538,17540,17542,17544],{"class":38,"line":685},[36,17539,6015],{"class":101},[36,17541,495],{"class":42},[36,17543,6020],{"class":105},[36,17545,6422],{"class":42},[36,17547,17548],{"class":38,"line":691},[36,17549,659],{"emptyLinePlaceholder":658},[36,17551,17552,17554,17556],{"class":38,"line":696},[36,17553,7788],{"class":46},[36,17555,1004],{"class":112},[36,17557,5029],{"class":42},[36,17559,17560],{"class":38,"line":702},[36,17561,5300],{"class":42},[19,17563,17564],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,17566,17568],{"id":17567},"_73函数重载","7.3函数重载",[19,17570,17571],{},"意思是函数名是可以相同的",[318,17573,17575],{"id":17574},"_731基本语法","7.3.1基本语法",[19,17577,17578],{},"作用：函数名可以相同，提高复用性",[19,17580,17581],{},[4027,17582,17583],{},"函数重载满足条件：",[4875,17585,17586,17589,17592],{},[214,17587,17588],{},"同一个作用域下",[214,17590,17591],{},"函数名称相同",[214,17593,17594,17595,17598,17599,17602,17603],{},"函数参数",[4027,17596,17597],{},"类型不同","  或者 ",[4027,17600,17601],{},"个数不同"," 或者 ",[4027,17604,17605],{},"顺序不同",[19,17607,17608,17611],{},[4027,17609,17610],{},"注意:","  函数的返回值不可以作为函数重载的条件",[26,17613,17615],{"className":13602,"code":17614,"language":13604,"meta":31,"style":31},"\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",[33,17616,17617,17622,17630,17634,17647,17651,17665,17669,17682,17686,17701,17705,17718,17722,17743,17747,17760,17764,17784,17788,17801,17805,17809,17814,17819,17824,17829,17834,17838,17842,17850,17854,17860,17870,17880,17894,17909,17913,17923,17927,17935],{"__ignoreMap":31},[36,17618,17619],{"class":38,"line":39},[36,17620,17621],{"class":3943},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[36,17623,17624,17626,17628],{"class":38,"line":53},[36,17625,9057],{"class":46},[36,17627,15046],{"class":101},[36,17629,903],{"class":42},[36,17631,17632],{"class":38,"line":196},[36,17633,5281],{"class":42},[36,17635,17636,17638,17640,17643,17645],{"class":38,"line":642},[36,17637,10220],{"class":42},[36,17639,4912],{"class":46},[36,17641,17642],{"class":105}," \"func 的调用！\"",[36,17644,5180],{"class":46},[36,17646,12521],{"class":42},[36,17648,17649],{"class":38,"line":655},[36,17650,5300],{"class":42},[36,17652,17653,17655,17657,17659,17661,17663],{"class":38,"line":662},[36,17654,9057],{"class":46},[36,17656,15046],{"class":101},[36,17658,495],{"class":42},[36,17660,1378],{"class":46},[36,17662,5134],{"class":468},[36,17664,922],{"class":42},[36,17666,17667],{"class":38,"line":667},[36,17668,5281],{"class":42},[36,17670,17671,17673,17675,17678,17680],{"class":38,"line":679},[36,17672,10220],{"class":42},[36,17674,4912],{"class":46},[36,17676,17677],{"class":105}," \"func (int a) 的调用！\"",[36,17679,5180],{"class":46},[36,17681,12521],{"class":42},[36,17683,17684],{"class":38,"line":685},[36,17685,5300],{"class":42},[36,17687,17688,17690,17692,17694,17697,17699],{"class":38,"line":691},[36,17689,9057],{"class":46},[36,17691,15046],{"class":101},[36,17693,495],{"class":42},[36,17695,17696],{"class":46},"double",[36,17698,5134],{"class":468},[36,17700,922],{"class":42},[36,17702,17703],{"class":38,"line":696},[36,17704,5281],{"class":42},[36,17706,17707,17709,17711,17714,17716],{"class":38,"line":702},[36,17708,10220],{"class":42},[36,17710,4912],{"class":46},[36,17712,17713],{"class":105}," \"func (double a)的调用！\"",[36,17715,5180],{"class":46},[36,17717,12521],{"class":42},[36,17719,17720],{"class":38,"line":708},[36,17721,5300],{"class":42},[36,17723,17724,17726,17728,17730,17732,17734,17737,17739,17741],{"class":38,"line":713},[36,17725,9057],{"class":46},[36,17727,15046],{"class":101},[36,17729,495],{"class":42},[36,17731,1378],{"class":46},[36,17733,5134],{"class":468},[36,17735,17736],{"class":42}," ,",[36,17738,17696],{"class":46},[36,17740,6536],{"class":468},[36,17742,922],{"class":42},[36,17744,17745],{"class":38,"line":719},[36,17746,5281],{"class":42},[36,17748,17749,17751,17753,17756,17758],{"class":38,"line":725},[36,17750,10220],{"class":42},[36,17752,4912],{"class":46},[36,17754,17755],{"class":105}," \"func (int a ,double b) 的调用！\"",[36,17757,5180],{"class":46},[36,17759,12521],{"class":42},[36,17761,17762],{"class":38,"line":731},[36,17763,5300],{"class":42},[36,17765,17766,17768,17770,17772,17774,17776,17778,17780,17782],{"class":38,"line":736},[36,17767,9057],{"class":46},[36,17769,15046],{"class":101},[36,17771,495],{"class":42},[36,17773,17696],{"class":46},[36,17775,5134],{"class":468},[36,17777,17736],{"class":42},[36,17779,1378],{"class":46},[36,17781,6536],{"class":468},[36,17783,922],{"class":42},[36,17785,17786],{"class":38,"line":742},[36,17787,5281],{"class":42},[36,17789,17790,17792,17794,17797,17799],{"class":38,"line":748},[36,17791,10220],{"class":42},[36,17793,4912],{"class":46},[36,17795,17796],{"class":105}," \"func (double a ,int b)的调用！\"",[36,17798,5180],{"class":46},[36,17800,12521],{"class":42},[36,17802,17803],{"class":38,"line":754},[36,17804,5300],{"class":42},[36,17806,17807],{"class":38,"line":760},[36,17808,659],{"emptyLinePlaceholder":658},[36,17810,17811],{"class":38,"line":766},[36,17812,17813],{"class":3943},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[36,17815,17816],{"class":38,"line":772},[36,17817,17818],{"class":3943},"\u002F\u002Fint func(double a, int b)\n",[36,17820,17821],{"class":38,"line":778},[36,17822,17823],{"class":3943},"\u002F\u002F{\n",[36,17825,17826],{"class":38,"line":783},[36,17827,17828],{"class":3943},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[36,17830,17831],{"class":38,"line":789},[36,17832,17833],{"class":3943},"\u002F\u002F}\n",[36,17835,17836],{"class":38,"line":795},[36,17837,659],{"emptyLinePlaceholder":658},[36,17839,17840],{"class":38,"line":801},[36,17841,659],{"emptyLinePlaceholder":658},[36,17843,17844,17846,17848],{"class":38,"line":807},[36,17845,1378],{"class":46},[36,17847,1823],{"class":101},[36,17849,14514],{"class":42},[36,17851,17852],{"class":38,"line":813},[36,17853,659],{"emptyLinePlaceholder":658},[36,17855,17856,17858],{"class":38,"line":819},[36,17857,16945],{"class":101},[36,17859,9329],{"class":42},[36,17861,17862,17864,17866,17868],{"class":38,"line":824},[36,17863,16945],{"class":101},[36,17865,495],{"class":42},[36,17867,554],{"class":112},[36,17869,6422],{"class":42},[36,17871,17872,17874,17876,17878],{"class":38,"line":829},[36,17873,16945],{"class":101},[36,17875,495],{"class":42},[36,17877,3934],{"class":112},[36,17879,6422],{"class":42},[36,17881,17882,17884,17886,17888,17890,17892],{"class":38,"line":851},[36,17883,16945],{"class":101},[36,17885,495],{"class":42},[36,17887,554],{"class":112},[36,17889,4253],{"class":42},[36,17891,3934],{"class":112},[36,17893,6422],{"class":42},[36,17895,17896,17898,17900,17902,17905,17907],{"class":38,"line":868},[36,17897,16945],{"class":101},[36,17899,495],{"class":42},[36,17901,3934],{"class":112},[36,17903,17904],{"class":42}," , ",[36,17906,554],{"class":112},[36,17908,6422],{"class":42},[36,17910,17911],{"class":38,"line":873},[36,17912,16870],{"class":42},[36,17914,17915,17917,17919,17921],{"class":38,"line":891},[36,17916,6015],{"class":101},[36,17918,495],{"class":42},[36,17920,6020],{"class":105},[36,17922,6422],{"class":42},[36,17924,17925],{"class":38,"line":906},[36,17926,659],{"emptyLinePlaceholder":658},[36,17928,17929,17931,17933],{"class":38,"line":925},[36,17930,7788],{"class":46},[36,17932,1004],{"class":112},[36,17934,5029],{"class":42},[36,17936,17937],{"class":38,"line":943},[36,17938,5300],{"class":42},[19,17940,17941],{},"重点：函数返回值不可以作为函数重载条件！",[318,17943,17945],{"id":17944},"_732注意事项","7.3.2注意事项",[4875,17947,17948,17951],{},[214,17949,17950],{},"引用作为重载条件!!!",[214,17952,17953],{},"函数重载碰到函数默认参数",[26,17955,17957],{"className":3879,"code":17956,"language":3881,"meta":31,"style":31},"\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",[33,17958,17959,17964,17969,17973,17989,17993,18006,18010,18014,18032,18036,18049,18053,18057,18061,18066,18070,18094,18098,18111,18115,18119,18133,18137,18150,18154,18158,18166,18170,18182,18192,18205,18209,18213,18221,18225,18235,18239,18247],{"__ignoreMap":31},[36,17960,17961],{"class":38,"line":39},[36,17962,17963],{"class":3943},"\u002F\u002F函数重载注意事项\n",[36,17965,17966],{"class":38,"line":53},[36,17967,17968],{"class":3943},"\u002F\u002F1、引用作为重载条件\n",[36,17970,17971],{"class":38,"line":196},[36,17972,659],{"emptyLinePlaceholder":658},[36,17974,17975,17977,17979,17981,17983,17985,17987],{"class":38,"line":642},[36,17976,9057],{"class":46},[36,17978,15046],{"class":101},[36,17980,495],{"class":42},[36,17982,1378],{"class":46},[36,17984,14245],{"class":46},[36,17986,4113],{"class":468},[36,17988,922],{"class":42},[36,17990,17991],{"class":38,"line":655},[36,17992,5281],{"class":42},[36,17994,17995,17997,17999,18002,18004],{"class":38,"line":662},[36,17996,10220],{"class":42},[36,17998,4912],{"class":46},[36,18000,18001],{"class":105}," \"func (int &a) 调用 \"",[36,18003,5180],{"class":46},[36,18005,12521],{"class":42},[36,18007,18008],{"class":38,"line":667},[36,18009,5300],{"class":42},[36,18011,18012],{"class":38,"line":679},[36,18013,659],{"emptyLinePlaceholder":658},[36,18015,18016,18018,18020,18022,18024,18026,18028,18030],{"class":38,"line":685},[36,18017,9057],{"class":46},[36,18019,15046],{"class":101},[36,18021,495],{"class":42},[36,18023,10483],{"class":46},[36,18025,6094],{"class":46},[36,18027,14245],{"class":46},[36,18029,4113],{"class":468},[36,18031,922],{"class":42},[36,18033,18034],{"class":38,"line":691},[36,18035,5281],{"class":42},[36,18037,18038,18040,18042,18045,18047],{"class":38,"line":696},[36,18039,10220],{"class":42},[36,18041,4912],{"class":46},[36,18043,18044],{"class":105}," \"func (const int &a) 调用 \"",[36,18046,5180],{"class":46},[36,18048,12521],{"class":42},[36,18050,18051],{"class":38,"line":702},[36,18052,5300],{"class":42},[36,18054,18055],{"class":38,"line":708},[36,18056,659],{"emptyLinePlaceholder":658},[36,18058,18059],{"class":38,"line":713},[36,18060,659],{"emptyLinePlaceholder":658},[36,18062,18063],{"class":38,"line":719},[36,18064,18065],{"class":3943},"\u002F\u002F2、函数重载碰到函数默认参数\n",[36,18067,18068],{"class":38,"line":725},[36,18069,659],{"emptyLinePlaceholder":658},[36,18071,18072,18074,18076,18078,18080,18082,18084,18086,18088,18090,18092],{"class":38,"line":731},[36,18073,9057],{"class":46},[36,18075,17277],{"class":101},[36,18077,495],{"class":42},[36,18079,1378],{"class":46},[36,18081,5134],{"class":468},[36,18083,478],{"class":42},[36,18085,1378],{"class":46},[36,18087,6536],{"class":468},[36,18089,673],{"class":46},[36,18091,5750],{"class":112},[36,18093,922],{"class":42},[36,18095,18096],{"class":38,"line":736},[36,18097,5281],{"class":42},[36,18099,18100,18102,18104,18107,18109],{"class":38,"line":742},[36,18101,10220],{"class":42},[36,18103,4912],{"class":46},[36,18105,18106],{"class":105}," \"func2(int a, int b = 10) 调用\"",[36,18108,5180],{"class":46},[36,18110,12521],{"class":42},[36,18112,18113],{"class":38,"line":748},[36,18114,5300],{"class":42},[36,18116,18117],{"class":38,"line":754},[36,18118,659],{"emptyLinePlaceholder":658},[36,18120,18121,18123,18125,18127,18129,18131],{"class":38,"line":760},[36,18122,9057],{"class":46},[36,18124,17277],{"class":101},[36,18126,495],{"class":42},[36,18128,1378],{"class":46},[36,18130,5134],{"class":468},[36,18132,922],{"class":42},[36,18134,18135],{"class":38,"line":766},[36,18136,5281],{"class":42},[36,18138,18139,18141,18143,18146,18148],{"class":38,"line":772},[36,18140,10220],{"class":42},[36,18142,4912],{"class":46},[36,18144,18145],{"class":105}," \"func2(int a) 调用\"",[36,18147,5180],{"class":46},[36,18149,12521],{"class":42},[36,18151,18152],{"class":38,"line":778},[36,18153,5300],{"class":42},[36,18155,18156],{"class":38,"line":783},[36,18157,659],{"emptyLinePlaceholder":658},[36,18159,18160,18162,18164],{"class":38,"line":789},[36,18161,1378],{"class":46},[36,18163,1823],{"class":101},[36,18165,14514],{"class":42},[36,18167,18168],{"class":38,"line":795},[36,18169,16870],{"class":42},[36,18171,18172,18174,18176,18178,18180],{"class":38,"line":801},[36,18173,5697],{"class":46},[36,18175,14530],{"class":42},[36,18177,47],{"class":46},[36,18179,5750],{"class":112},[36,18181,5029],{"class":42},[36,18183,18184,18186,18189],{"class":38,"line":807},[36,18185,16945],{"class":101},[36,18187,18188],{"class":42},"(a);",[36,18190,18191],{"class":3943}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[36,18193,18194,18196,18198,18200,18202],{"class":38,"line":813},[36,18195,16945],{"class":101},[36,18197,495],{"class":42},[36,18199,554],{"class":112},[36,18201,9659],{"class":42},[36,18203,18204],{"class":3943},"\u002F\u002F调用有const   10是个常量\n",[36,18206,18207],{"class":38,"line":819},[36,18208,659],{"emptyLinePlaceholder":658},[36,18210,18211],{"class":38,"line":824},[36,18212,659],{"emptyLinePlaceholder":658},[36,18214,18215,18218],{"class":38,"line":829},[36,18216,18217],{"class":3943},"    \u002F\u002Ffunc2(10);",[36,18219,18220],{"class":3943}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[36,18222,18223],{"class":38,"line":851},[36,18224,659],{"emptyLinePlaceholder":658},[36,18226,18227,18229,18231,18233],{"class":38,"line":868},[36,18228,6015],{"class":101},[36,18230,495],{"class":42},[36,18232,6020],{"class":105},[36,18234,6422],{"class":42},[36,18236,18237],{"class":38,"line":873},[36,18238,659],{"emptyLinePlaceholder":658},[36,18240,18241,18243,18245],{"class":38,"line":891},[36,18242,7788],{"class":46},[36,18244,1004],{"class":112},[36,18246,5029],{"class":42},[36,18248,18249],{"class":38,"line":906},[36,18250,5300],{"class":42},[3785,18252,18253],{},"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":31,"searchDepth":53,"depth":53,"links":18255},[18256,18257,18258],{"id":17189,"depth":53,"text":17190},{"id":17445,"depth":53,"text":17446},{"id":17567,"depth":53,"text":17568,"children":18259},[18260,18261],{"id":17574,"depth":196,"text":17575},{"id":17944,"depth":196,"text":17945},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":17181,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":18268,"title":18269,"body":18270,"description":26986,"extension":3817,"meta":26987,"navigation":658,"path":26988,"seo":26989,"stem":26990,"__hash__":26991},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":18271,"toc":26967},[18272,18275,18281,18288,18292,18295,18298,18301,18305,18309,18312,18315,18323,18328,18331,18338,18343,18500,18503,18756,18759,18762,18765,18770,18773,18776,18787,18792,19028,19032,19042,19045,19053,19200,19204,19207,19210,19214,19659,19663,19671,19679,20559,20566,20571,21197,21200,21203,21206,21325,21328,21415,21418,21544,21547,21641,21644,21997,22001,22009,22013,22020,22023,22026,22037,22043,22048,22060,22068,22088,22096,22113,22299,22302,22306,22309,22312,22315,22318,22321,22324,22327,22787,22793,22797,22800,22811,23398,23401,23890,23894,23897,23900,23903,23906,23909,23917,24313,24317,24320,24323,24770,24773,24776,24781,24784,24789,24792,24796,24799,24801,24807,24809,25115,25125,25166,25170,25173,25175,25208,25211,25518,25520,25535,25538,25561,25570,25576,25579,25583,25586,25589,25594,25605,25610,25618,25623,25753,25756,25759,25934,25939,26151,26155,26158,26272,26277,26516,26520,26524,26527,26530,26535,26640,26643,26646,26649,26653,26764,26767,26770,26775,26827,26830,26833,26838,26884,26887,26892,26960,26962,26965],[10,18273,18269],{"id":18274},"_8类和对象",[19,18276,18277,18278],{},"C++面向对象的三大特性为",[4027,18279,18280],{},"封装、继承、多态",[19,18282,18283,18284,18287],{},"C++认为",[4027,18285,18286],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,18289,18290],{},[4027,18291,447],{},[19,18293,18294],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,18296,18297],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,18299,18300],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,18302,18304],{"id":18303},"_81封装","8.1封装",[318,18306,18308],{"id":18307},"_811封装的意义","8.1.1封装的意义",[19,18310,18311],{},"封装是C++面向对象三大特性之一",[19,18313,18314],{},"封装的意义：",[4875,18316,18317,18320],{},[214,18318,18319],{},"将属性和行为作为一个整体，表现生活中的事物",[214,18321,18322],{},"将属性和行为加以权限控制",[19,18324,18325],{},[4027,18326,18327],{},"封装意义一：",[19,18329,18330],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,18332,18333,17454,18335],{},[4027,18334,8877],{},[33,18336,18337],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[211,18339,18340],{},[214,18341,18342],{},"**示例1：**设计一个圆类，求圆的周长",[26,18344,18346],{"className":3879,"code":18345,"language":3881,"meta":31,"style":31},"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",[33,18347,18348,18355,18359,18364,18369,18374,18379,18386,18391,18401,18405,18422,18426,18430,18438,18442,18447,18452,18457,18462,18473,18496],{"__ignoreMap":31},[36,18349,18350,18352],{"class":38,"line":39},[36,18351,832],{"class":46},[36,18353,18354],{"class":101}," Circle\n",[36,18356,18357],{"class":38,"line":53},[36,18358,5281],{"class":42},[36,18360,18361],{"class":38,"line":196},[36,18362,18363],{"class":3943},"    \u002F\u002F访问权限\n",[36,18365,18366],{"class":38,"line":642},[36,18367,18368],{"class":3943},"    \u002F\u002F公共权限\n",[36,18370,18371],{"class":38,"line":655},[36,18372,18373],{"class":46},"public:\n",[36,18375,18376],{"class":38,"line":662},[36,18377,18378],{"class":3943},"    \u002F\u002F属性\n",[36,18380,18381,18383],{"class":38,"line":667},[36,18382,5697],{"class":46},[36,18384,18385],{"class":42}," m_r;\n",[36,18387,18388],{"class":38,"line":679},[36,18389,18390],{"class":3943},"    \u002F\u002F行为\n",[36,18392,18393,18396,18399],{"class":38,"line":685},[36,18394,18395],{"class":46},"    double",[36,18397,18398],{"class":101}," calculateZC",[36,18400,903],{"class":42},[36,18402,18403],{"class":38,"line":691},[36,18404,5742],{"class":42},[36,18406,18407,18409,18412,18414,18417,18419],{"class":38,"line":696},[36,18408,1239],{"class":46},[36,18410,18411],{"class":112}," 2",[36,18413,1372],{"class":46},[36,18415,18416],{"class":42},"PI",[36,18418,1372],{"class":46},[36,18420,18421],{"class":42},"m_r;\n",[36,18423,18424],{"class":38,"line":702},[36,18425,5899],{"class":42},[36,18427,18428],{"class":38,"line":708},[36,18429,7693],{"class":42},[36,18431,18432,18434,18436],{"class":38,"line":713},[36,18433,1378],{"class":46},[36,18435,1823],{"class":101},[36,18437,903],{"class":42},[36,18439,18440],{"class":38,"line":719},[36,18441,5281],{"class":42},[36,18443,18444],{"class":38,"line":725},[36,18445,18446],{"class":3943},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[36,18448,18449],{"class":38,"line":731},[36,18450,18451],{"class":3943},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[36,18453,18454],{"class":38,"line":736},[36,18455,18456],{"class":42},"    Circle c1;\n",[36,18458,18459],{"class":38,"line":742},[36,18460,18461],{"class":3943},"    \u002F\u002F给圆对象 的属性进行赋值\n",[36,18463,18464,18467,18469,18471],{"class":38,"line":748},[36,18465,18466],{"class":42},"    c1.m_r",[36,18468,47],{"class":46},[36,18470,554],{"class":112},[36,18472,5029],{"class":42},[36,18474,18475,18477,18479,18482,18484,18487,18490,18492,18494],{"class":38,"line":754},[36,18476,5286],{"class":42},[36,18478,4912],{"class":46},[36,18480,18481],{"class":105},"\"圆的周长\"",[36,18483,4912],{"class":46},[36,18485,18486],{"class":42},"c1.",[36,18488,18489],{"class":101},"calculateZC",[36,18491,6138],{"class":42},[36,18493,4912],{"class":46},[36,18495,4934],{"class":42},[36,18497,18498],{"class":38,"line":760},[36,18499,5300],{"class":42},[19,18501,18502],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[26,18504,18506],{"className":3879,"code":18505,"language":3881,"meta":31,"style":31},"#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",[33,18507,18508,18514,18524,18530,18536,18540,18544,18549,18556,18561,18579,18583,18593,18597,18602,18618,18622,18632,18636,18641,18649,18653,18685,18689,18693,18701,18705,18710,18715,18729,18743,18752],{"__ignoreMap":31},[36,18509,18510,18512],{"class":38,"line":39},[36,18511,5664],{"class":46},[36,18513,5667],{"class":105},[36,18515,18516,18518,18520,18522],{"class":38,"line":53},[36,18517,5672],{"class":46},[36,18519,5675],{"class":46},[36,18521,5678],{"class":101},[36,18523,5029],{"class":42},[36,18525,18526,18528],{"class":38,"line":196},[36,18527,5664],{"class":46},[36,18529,11440],{"class":105},[36,18531,18532,18534],{"class":38,"line":642},[36,18533,832],{"class":46},[36,18535,11453],{"class":101},[36,18537,18538],{"class":38,"line":655},[36,18539,5281],{"class":42},[36,18541,18542],{"class":38,"line":662},[36,18543,18373],{"class":46},[36,18545,18546],{"class":38,"line":667},[36,18547,18548],{"class":42},"    string m_name;\n",[36,18550,18551,18553],{"class":38,"line":679},[36,18552,5697],{"class":46},[36,18554,18555],{"class":42}," m_id;\n",[36,18557,18558],{"class":38,"line":685},[36,18559,18560],{"class":3943},"    \u002F\u002F赋值姓名\n",[36,18562,18563,18566,18569,18571,18574,18577],{"class":38,"line":691},[36,18564,18565],{"class":46},"    void",[36,18567,18568],{"class":101}," setName",[36,18570,495],{"class":42},[36,18572,18573],{"class":101},"string",[36,18575,18576],{"class":468}," name",[36,18578,922],{"class":42},[36,18580,18581],{"class":38,"line":696},[36,18582,5742],{"class":42},[36,18584,18585,18588,18590],{"class":38,"line":702},[36,18586,18587],{"class":42},"        m_name",[36,18589,47],{"class":46},[36,18591,18592],{"class":42},"name;\n",[36,18594,18595],{"class":38,"line":708},[36,18596,5899],{"class":42},[36,18598,18599],{"class":38,"line":713},[36,18600,18601],{"class":3943},"    \u002F\u002F赋值学号\n",[36,18603,18604,18606,18609,18611,18613,18616],{"class":38,"line":719},[36,18605,18565],{"class":46},[36,18607,18608],{"class":101}," setId",[36,18610,495],{"class":42},[36,18612,1378],{"class":46},[36,18614,18615],{"class":468}," id",[36,18617,922],{"class":42},[36,18619,18620],{"class":38,"line":725},[36,18621,5742],{"class":42},[36,18623,18624,18627,18629],{"class":38,"line":731},[36,18625,18626],{"class":42},"        m_id",[36,18628,47],{"class":46},[36,18630,18631],{"class":42},"id;\n",[36,18633,18634],{"class":38,"line":736},[36,18635,5899],{"class":42},[36,18637,18638],{"class":38,"line":742},[36,18639,18640],{"class":3943},"    \u002F\u002F打印学生信息\n",[36,18642,18643,18645,18647],{"class":38,"line":748},[36,18644,18565],{"class":46},[36,18646,13295],{"class":101},[36,18648,903],{"class":42},[36,18650,18651],{"class":38,"line":754},[36,18652,5742],{"class":42},[36,18654,18655,18657,18659,18662,18664,18667,18669,18671,18673,18676,18678,18681,18683],{"class":38,"line":760},[36,18656,7150],{"class":42},[36,18658,4912],{"class":46},[36,18660,18661],{"class":105},"\"姓名：\"",[36,18663,4912],{"class":46},[36,18665,18666],{"class":42},"m_name",[36,18668,4912],{"class":46},[36,18670,8056],{"class":105},[36,18672,4912],{"class":46},[36,18674,18675],{"class":105},"\"学号：\"",[36,18677,4912],{"class":46},[36,18679,18680],{"class":42},"m_id",[36,18682,4912],{"class":46},[36,18684,4934],{"class":42},[36,18686,18687],{"class":38,"line":766},[36,18688,5899],{"class":42},[36,18690,18691],{"class":38,"line":772},[36,18692,7693],{"class":42},[36,18694,18695,18697,18699],{"class":38,"line":778},[36,18696,1378],{"class":46},[36,18698,1823],{"class":101},[36,18700,903],{"class":42},[36,18702,18703],{"class":38,"line":783},[36,18704,5281],{"class":42},[36,18706,18707],{"class":38,"line":789},[36,18708,18709],{"class":3943},"    \u002F\u002F实例化\n",[36,18711,18712],{"class":38,"line":795},[36,18713,18714],{"class":42},"    Student s1;\n",[36,18716,18717,18720,18723,18725,18727],{"class":38,"line":801},[36,18718,18719],{"class":42},"    s1.",[36,18721,18722],{"class":101},"setName",[36,18724,495],{"class":42},[36,18726,11607],{"class":105},[36,18728,6422],{"class":42},[36,18730,18731,18733,18736,18738,18741],{"class":38,"line":807},[36,18732,18719],{"class":42},[36,18734,18735],{"class":101},"setId",[36,18737,495],{"class":42},[36,18739,18740],{"class":112},"123456",[36,18742,6422],{"class":42},[36,18744,18745,18747,18750],{"class":38,"line":813},[36,18746,18719],{"class":42},[36,18748,18749],{"class":101},"printInfo",[36,18751,9329],{"class":42},[36,18753,18754],{"class":38,"line":819},[36,18755,5300],{"class":42},[19,18757,18758],{},"类中的属性和行为统称为成员",[19,18760,18761],{},"属性：成员属性(成员变量)",[19,18763,18764],{},"方法：成员函数(成员方法)",[19,18766,18767],{},[4027,18768,18769],{},"封装意义二：",[19,18771,18772],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,18774,18775],{},"访问权限有三种：",[211,18777,18778,18781,18784],{},[214,18779,18780],{},"public        公共权限",[214,18782,18783],{},"protected 保护权限",[214,18785,18786],{},"private      私有权限",[19,18788,18789],{},[4027,18790,18791],{},"示例：",[26,18793,18795],{"className":13602,"code":18794,"language":13604,"meta":31,"style":31},"\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",[33,18796,18797,18802,18807,18812,18817,18821,18828,18832,18837,18841,18846,18850,18855,18860,18865,18869,18874,18879,18886,18890,18894,18902,18906,18917,18929,18941,18945,18949,18953,18961,18965,18970,18982,18990,18998,19002,19012,19016,19024],{"__ignoreMap":31},[36,18798,18799],{"class":38,"line":39},[36,18800,18801],{"class":3943},"\u002F\u002F三种权限\n",[36,18803,18804],{"class":38,"line":53},[36,18805,18806],{"class":3943},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[36,18808,18809],{"class":38,"line":196},[36,18810,18811],{"class":3943},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[36,18813,18814],{"class":38,"line":642},[36,18815,18816],{"class":3943},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[36,18818,18819],{"class":38,"line":655},[36,18820,659],{"emptyLinePlaceholder":658},[36,18822,18823,18825],{"class":38,"line":662},[36,18824,832],{"class":46},[36,18826,18827],{"class":101}," Person\n",[36,18829,18830],{"class":38,"line":667},[36,18831,5281],{"class":42},[36,18833,18834],{"class":38,"line":679},[36,18835,18836],{"class":3943},"    \u002F\u002F姓名  公共权限\n",[36,18838,18839],{"class":38,"line":685},[36,18840,18373],{"class":46},[36,18842,18843],{"class":38,"line":691},[36,18844,18845],{"class":42},"    string m_Name;\n",[36,18847,18848],{"class":38,"line":696},[36,18849,659],{"emptyLinePlaceholder":658},[36,18851,18852],{"class":38,"line":702},[36,18853,18854],{"class":3943},"    \u002F\u002F汽车  保护权限\n",[36,18856,18857],{"class":38,"line":708},[36,18858,18859],{"class":46},"protected:\n",[36,18861,18862],{"class":38,"line":713},[36,18863,18864],{"class":42},"    string m_Car;\n",[36,18866,18867],{"class":38,"line":719},[36,18868,659],{"emptyLinePlaceholder":658},[36,18870,18871],{"class":38,"line":725},[36,18872,18873],{"class":3943},"    \u002F\u002F银行卡密码  私有权限\n",[36,18875,18876],{"class":38,"line":731},[36,18877,18878],{"class":46},"private:\n",[36,18880,18881,18883],{"class":38,"line":736},[36,18882,5697],{"class":46},[36,18884,18885],{"class":42}," m_Password;\n",[36,18887,18888],{"class":38,"line":742},[36,18889,659],{"emptyLinePlaceholder":658},[36,18891,18892],{"class":38,"line":748},[36,18893,18373],{"class":46},[36,18895,18896,18898,18900],{"class":38,"line":754},[36,18897,18565],{"class":46},[36,18899,15046],{"class":101},[36,18901,903],{"class":42},[36,18903,18904],{"class":38,"line":760},[36,18905,5742],{"class":42},[36,18907,18908,18911,18913,18915],{"class":38,"line":766},[36,18909,18910],{"class":42},"        m_Name ",[36,18912,47],{"class":46},[36,18914,12619],{"class":105},[36,18916,5029],{"class":42},[36,18918,18919,18922,18924,18927],{"class":38,"line":772},[36,18920,18921],{"class":42},"        m_Car ",[36,18923,47],{"class":46},[36,18925,18926],{"class":105}," \"拖拉机\"",[36,18928,5029],{"class":42},[36,18930,18931,18934,18936,18939],{"class":38,"line":778},[36,18932,18933],{"class":42},"        m_Password ",[36,18935,47],{"class":46},[36,18937,18938],{"class":112}," 123456",[36,18940,5029],{"class":42},[36,18942,18943],{"class":38,"line":783},[36,18944,5899],{"class":42},[36,18946,18947],{"class":38,"line":789},[36,18948,7693],{"class":42},[36,18950,18951],{"class":38,"line":795},[36,18952,659],{"emptyLinePlaceholder":658},[36,18954,18955,18957,18959],{"class":38,"line":801},[36,18956,1378],{"class":46},[36,18958,1823],{"class":101},[36,18960,14514],{"class":42},[36,18962,18963],{"class":38,"line":807},[36,18964,659],{"emptyLinePlaceholder":658},[36,18966,18967],{"class":38,"line":813},[36,18968,18969],{"class":42},"    Person p;\n",[36,18971,18972,18975,18977,18980],{"class":38,"line":819},[36,18973,18974],{"class":42},"    p.m_Name ",[36,18976,47],{"class":46},[36,18978,18979],{"class":105}," \"李四\"",[36,18981,5029],{"class":42},[36,18983,18984,18987],{"class":38,"line":824},[36,18985,18986],{"class":3943},"    \u002F\u002Fp.m_Car = \"奔驰\";",[36,18988,18989],{"class":3943},"  \u002F\u002F保护权限类外访问不到\n",[36,18991,18992,18995],{"class":38,"line":829},[36,18993,18994],{"class":3943},"    \u002F\u002Fp.m_Password = 123;",[36,18996,18997],{"class":3943}," \u002F\u002F私有权限类外访问不到\n",[36,18999,19000],{"class":38,"line":851},[36,19001,659],{"emptyLinePlaceholder":658},[36,19003,19004,19006,19008,19010],{"class":38,"line":868},[36,19005,6015],{"class":101},[36,19007,495],{"class":42},[36,19009,6020],{"class":105},[36,19011,6422],{"class":42},[36,19013,19014],{"class":38,"line":873},[36,19015,659],{"emptyLinePlaceholder":658},[36,19017,19018,19020,19022],{"class":38,"line":891},[36,19019,7788],{"class":46},[36,19021,1004],{"class":112},[36,19023,5029],{"class":42},[36,19025,19026],{"class":38,"line":906},[36,19027,5300],{"class":42},[318,19029,19031],{"id":19030},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,19033,19034,19035,19038,19039],{},"在C++中 struct和class唯一的",[4027,19036,19037],{},"区别","就在于 ",[4027,19040,19041],{},"默认的访问权限不同",[19,19043,19044],{},"区别：",[4875,19046,19047,19050],{},[214,19048,19049],{},"struct 默认权限为公共",[214,19051,19052],{},"class   默认权限为私有",[26,19054,19056],{"className":13602,"code":19055,"language":13604,"meta":31,"style":31},"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",[33,19057,19058,19065,19069,19079,19083,19087,19094,19098,19108,19112,19116,19124,19128,19133,19147,19151,19156,19170,19174,19184,19188,19196],{"__ignoreMap":31},[36,19059,19060,19062],{"class":38,"line":39},[36,19061,832],{"class":46},[36,19063,19064],{"class":101}," C1\n",[36,19066,19067],{"class":38,"line":53},[36,19068,5281],{"class":42},[36,19070,19071,19073,19076],{"class":38,"line":196},[36,19072,5697],{"class":46},[36,19074,19075],{"class":42},"  m_A;",[36,19077,19078],{"class":3943}," \u002F\u002F默认是私有权限\n",[36,19080,19081],{"class":38,"line":642},[36,19082,7693],{"class":42},[36,19084,19085],{"class":38,"line":655},[36,19086,659],{"emptyLinePlaceholder":658},[36,19088,19089,19091],{"class":38,"line":662},[36,19090,11450],{"class":46},[36,19092,19093],{"class":101}," C2\n",[36,19095,19096],{"class":38,"line":667},[36,19097,5281],{"class":42},[36,19099,19100,19102,19105],{"class":38,"line":679},[36,19101,5697],{"class":46},[36,19103,19104],{"class":42}," m_A;",[36,19106,19107],{"class":3943},"  \u002F\u002F默认是公共权限\n",[36,19109,19110],{"class":38,"line":685},[36,19111,7693],{"class":42},[36,19113,19114],{"class":38,"line":691},[36,19115,659],{"emptyLinePlaceholder":658},[36,19117,19118,19120,19122],{"class":38,"line":696},[36,19119,1378],{"class":46},[36,19121,1823],{"class":101},[36,19123,14514],{"class":42},[36,19125,19126],{"class":38,"line":702},[36,19127,659],{"emptyLinePlaceholder":658},[36,19129,19130],{"class":38,"line":708},[36,19131,19132],{"class":42},"    C1 c1;\n",[36,19134,19135,19138,19140,19142,19144],{"class":38,"line":713},[36,19136,19137],{"class":42},"    c1.m_A ",[36,19139,47],{"class":46},[36,19141,5750],{"class":112},[36,19143,3940],{"class":42},[36,19145,19146],{"class":3943}," \u002F\u002F错误，访问权限是私有\n",[36,19148,19149],{"class":38,"line":719},[36,19150,659],{"emptyLinePlaceholder":658},[36,19152,19153],{"class":38,"line":725},[36,19154,19155],{"class":42},"    C2 c2;\n",[36,19157,19158,19161,19163,19165,19167],{"class":38,"line":731},[36,19159,19160],{"class":42},"    c2.m_A ",[36,19162,47],{"class":46},[36,19164,5750],{"class":112},[36,19166,3940],{"class":42},[36,19168,19169],{"class":3943}," \u002F\u002F正确，访问权限是公共\n",[36,19171,19172],{"class":38,"line":736},[36,19173,659],{"emptyLinePlaceholder":658},[36,19175,19176,19178,19180,19182],{"class":38,"line":742},[36,19177,6015],{"class":101},[36,19179,495],{"class":42},[36,19181,6020],{"class":105},[36,19183,6422],{"class":42},[36,19185,19186],{"class":38,"line":748},[36,19187,659],{"emptyLinePlaceholder":658},[36,19189,19190,19192,19194],{"class":38,"line":754},[36,19191,7788],{"class":46},[36,19193,1004],{"class":112},[36,19195,5029],{"class":42},[36,19197,19198],{"class":38,"line":760},[36,19199,5300],{"class":42},[318,19201,19203],{"id":19202},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,19205,19206],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,19208,19209],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,19211,19212],{},[4027,19213,18791],{},[26,19215,19217],{"className":13602,"code":19216,"language":13604,"meta":31,"style":31},"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",[33,19218,19219,19229,19233,19237,19242,19256,19265,19269,19279,19283,19290,19294,19298,19302,19307,19316,19323,19327,19332,19348,19371,19384,19391,19395,19404,19408,19412,19417,19433,19443,19447,19451,19455,19463,19467,19477,19481,19489,19493,19497,19505,19509,19513,19518,19531,19554,19558,19563,19576,19598,19602,19607,19621,19629,19633,19643,19647,19655],{"__ignoreMap":31},[36,19220,19221,19223,19226],{"class":38,"line":39},[36,19222,832],{"class":46},[36,19224,19225],{"class":101}," Person",[36,19227,19228],{"class":42}," {\n",[36,19230,19231],{"class":38,"line":53},[36,19232,18373],{"class":46},[36,19234,19235],{"class":38,"line":196},[36,19236,659],{"emptyLinePlaceholder":658},[36,19238,19239],{"class":38,"line":642},[36,19240,19241],{"class":3943},"    \u002F\u002F姓名设置可读可写\n",[36,19243,19244,19246,19248,19250,19252,19254],{"class":38,"line":655},[36,19245,18565],{"class":46},[36,19247,18568],{"class":101},[36,19249,495],{"class":42},[36,19251,18573],{"class":101},[36,19253,18576],{"class":468},[36,19255,16102],{"class":42},[36,19257,19258,19260,19262],{"class":38,"line":662},[36,19259,18910],{"class":42},[36,19261,47],{"class":46},[36,19263,19264],{"class":42}," name;\n",[36,19266,19267],{"class":38,"line":667},[36,19268,5899],{"class":42},[36,19270,19271,19274,19277],{"class":38,"line":679},[36,19272,19273],{"class":101},"    string",[36,19275,19276],{"class":101}," getName",[36,19278,903],{"class":42},[36,19280,19281],{"class":38,"line":685},[36,19282,5742],{"class":42},[36,19284,19285,19287],{"class":38,"line":691},[36,19286,1239],{"class":46},[36,19288,19289],{"class":42}," m_Name;\n",[36,19291,19292],{"class":38,"line":696},[36,19293,5899],{"class":42},[36,19295,19296],{"class":38,"line":702},[36,19297,659],{"emptyLinePlaceholder":658},[36,19299,19300],{"class":38,"line":708},[36,19301,659],{"emptyLinePlaceholder":658},[36,19303,19304],{"class":38,"line":713},[36,19305,19306],{"class":3943},"    \u002F\u002F获取年龄 \n",[36,19308,19309,19311,19314],{"class":38,"line":719},[36,19310,5697],{"class":46},[36,19312,19313],{"class":101}," getAge",[36,19315,14514],{"class":42},[36,19317,19318,19320],{"class":38,"line":725},[36,19319,1239],{"class":46},[36,19321,19322],{"class":42}," m_Age;\n",[36,19324,19325],{"class":38,"line":731},[36,19326,5899],{"class":42},[36,19328,19329],{"class":38,"line":736},[36,19330,19331],{"class":3943},"    \u002F\u002F设置年龄\n",[36,19333,19334,19336,19339,19341,19343,19346],{"class":38,"line":742},[36,19335,18565],{"class":46},[36,19337,19338],{"class":101}," setAge",[36,19340,495],{"class":42},[36,19342,1378],{"class":46},[36,19344,19345],{"class":468}," age",[36,19347,16102],{"class":42},[36,19349,19350,19352,19355,19357,19359,19361,19364,19366,19369],{"class":38,"line":748},[36,19351,995],{"class":46},[36,19353,19354],{"class":42}," (age ",[36,19356,393],{"class":46},[36,19358,1004],{"class":112},[36,19360,6955],{"class":46},[36,19362,19363],{"class":42}," age ",[36,19365,4829],{"class":46},[36,19367,19368],{"class":112}," 150",[36,19370,16102],{"class":42},[36,19372,19373,19375,19377,19380,19382],{"class":38,"line":754},[36,19374,13398],{"class":42},[36,19376,4912],{"class":46},[36,19378,19379],{"class":105}," \"你个老妖精!\"",[36,19381,5180],{"class":46},[36,19383,12521],{"class":42},[36,19385,19386,19389],{"class":38,"line":760},[36,19387,19388],{"class":46},"            return",[36,19390,5029],{"class":42},[36,19392,19393],{"class":38,"line":766},[36,19394,6239],{"class":42},[36,19396,19397,19400,19402],{"class":38,"line":772},[36,19398,19399],{"class":42},"        m_Age ",[36,19401,47],{"class":46},[36,19403,11488],{"class":42},[36,19405,19406],{"class":38,"line":778},[36,19407,5899],{"class":42},[36,19409,19410],{"class":38,"line":783},[36,19411,659],{"emptyLinePlaceholder":658},[36,19413,19414],{"class":38,"line":789},[36,19415,19416],{"class":3943},"    \u002F\u002F情人设置为只写\n",[36,19418,19419,19421,19424,19426,19428,19431],{"class":38,"line":795},[36,19420,18565],{"class":46},[36,19422,19423],{"class":101}," setLover",[36,19425,495],{"class":42},[36,19427,18573],{"class":101},[36,19429,19430],{"class":468}," lover",[36,19432,16102],{"class":42},[36,19434,19435,19438,19440],{"class":38,"line":801},[36,19436,19437],{"class":42},"        m_Lover ",[36,19439,47],{"class":46},[36,19441,19442],{"class":42}," lover;\n",[36,19444,19445],{"class":38,"line":807},[36,19446,5899],{"class":42},[36,19448,19449],{"class":38,"line":813},[36,19450,659],{"emptyLinePlaceholder":658},[36,19452,19453],{"class":38,"line":819},[36,19454,18878],{"class":46},[36,19456,19457,19460],{"class":38,"line":824},[36,19458,19459],{"class":42},"    string m_Name;",[36,19461,19462],{"class":3943}," \u002F\u002F可读可写  姓名\n",[36,19464,19465],{"class":38,"line":829},[36,19466,16870],{"class":42},[36,19468,19469,19471,19474],{"class":38,"line":851},[36,19470,5697],{"class":46},[36,19472,19473],{"class":42}," m_Age;",[36,19475,19476],{"class":3943}," \u002F\u002F只读  年龄\n",[36,19478,19479],{"class":38,"line":868},[36,19480,659],{"emptyLinePlaceholder":658},[36,19482,19483,19486],{"class":38,"line":873},[36,19484,19485],{"class":42},"    string m_Lover;",[36,19487,19488],{"class":3943}," \u002F\u002F只写  情人\n",[36,19490,19491],{"class":38,"line":891},[36,19492,7693],{"class":42},[36,19494,19495],{"class":38,"line":906},[36,19496,659],{"emptyLinePlaceholder":658},[36,19498,19499,19501,19503],{"class":38,"line":925},[36,19500,1378],{"class":46},[36,19502,1823],{"class":101},[36,19504,14514],{"class":42},[36,19506,19507],{"class":38,"line":943},[36,19508,659],{"emptyLinePlaceholder":658},[36,19510,19511],{"class":38,"line":948},[36,19512,18969],{"class":42},[36,19514,19515],{"class":38,"line":971},[36,19516,19517],{"class":3943},"    \u002F\u002F姓名设置\n",[36,19519,19520,19523,19525,19527,19529],{"class":38,"line":992},[36,19521,19522],{"class":42},"    p.",[36,19524,18722],{"class":101},[36,19526,495],{"class":42},[36,19528,11607],{"class":105},[36,19530,6422],{"class":42},[36,19532,19533,19535,19537,19540,19542,19545,19548,19550,19552],{"class":38,"line":1020},[36,19534,10220],{"class":42},[36,19536,4912],{"class":46},[36,19538,19539],{"class":105}," \"姓名： \"",[36,19541,5180],{"class":46},[36,19543,19544],{"class":42}," p.",[36,19546,19547],{"class":101},"getName",[36,19549,16710],{"class":42},[36,19551,4912],{"class":46},[36,19553,12521],{"class":42},[36,19555,19556],{"class":38,"line":1036},[36,19557,659],{"emptyLinePlaceholder":658},[36,19559,19560],{"class":38,"line":1041},[36,19561,19562],{"class":3943},"    \u002F\u002F年龄设置\n",[36,19564,19565,19567,19570,19572,19574],{"class":38,"line":1052},[36,19566,19522],{"class":42},[36,19568,19569],{"class":101},"setAge",[36,19571,495],{"class":42},[36,19573,4527],{"class":112},[36,19575,6422],{"class":42},[36,19577,19578,19580,19582,19585,19587,19589,19592,19594,19596],{"class":38,"line":1065},[36,19579,10220],{"class":42},[36,19581,4912],{"class":46},[36,19583,19584],{"class":105}," \"年龄： \"",[36,19586,5180],{"class":46},[36,19588,19544],{"class":42},[36,19590,19591],{"class":101},"getAge",[36,19593,16710],{"class":42},[36,19595,4912],{"class":46},[36,19597,12521],{"class":42},[36,19599,19600],{"class":38,"line":1077},[36,19601,659],{"emptyLinePlaceholder":658},[36,19603,19604],{"class":38,"line":1082},[36,19605,19606],{"class":3943},"    \u002F\u002F情人设置\n",[36,19608,19609,19611,19614,19616,19619],{"class":38,"line":1125},[36,19610,19522],{"class":42},[36,19612,19613],{"class":101},"setLover",[36,19615,495],{"class":42},[36,19617,19618],{"class":105},"\"苍井\"",[36,19620,6422],{"class":42},[36,19622,19623,19626],{"class":38,"line":1164},[36,19624,19625],{"class":3943},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[36,19627,19628],{"class":3943},"  \u002F\u002F只写属性，不可以读取\n",[36,19630,19631],{"class":38,"line":1169},[36,19632,659],{"emptyLinePlaceholder":658},[36,19634,19635,19637,19639,19641],{"class":38,"line":1180},[36,19636,6015],{"class":101},[36,19638,495],{"class":42},[36,19640,6020],{"class":105},[36,19642,6422],{"class":42},[36,19644,19645],{"class":38,"line":1198},[36,19646,659],{"emptyLinePlaceholder":658},[36,19648,19649,19651,19653],{"class":38,"line":1215},[36,19650,7788],{"class":46},[36,19652,1004],{"class":112},[36,19654,5029],{"class":42},[36,19656,19657],{"class":38,"line":1236},[36,19658,5300],{"class":42},[318,19660,19662],{"id":19661},"_814封装案例","8.1.4封装案例",[211,19664,19665],{},[214,19666,19667,19670],{},[4027,19668,19669],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[4875,19672,19673,19676],{},[214,19674,19675],{},"求出立方体的面积和体积",[214,19677,19678],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[26,19680,19682],{"className":3879,"code":19681,"language":3881,"meta":31,"style":31},"#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",[33,19683,19684,19690,19700,19707,19711,19715,19720,19750,19754,19764,19774,19784,19788,19797,19801,19837,19841,19850,19854,19870,19874,19879,19888,19892,19899,19903,19912,19916,19923,19927,19936,19940,19947,19951,19956,19973,19977,20023,20027,20036,20040,20044,20048,20057,20061,20065,20070,20074,20080,20086,20092,20096,20100,20105,20127,20131,20185,20189,20197,20201,20206,20211,20224,20231,20247,20258,20263,20285,20290,20312,20325,20344,20349,20359,20381,20402,20406,20411,20424,20436,20440,20453,20457,20462,20466,20479,20483,20487,20500,20511,20515,20527,20531,20535,20539,20551,20555],{"__ignoreMap":31},[36,19685,19686,19688],{"class":38,"line":39},[36,19687,5664],{"class":46},[36,19689,5667],{"class":105},[36,19691,19692,19694,19696,19698],{"class":38,"line":53},[36,19693,5672],{"class":46},[36,19695,5675],{"class":46},[36,19697,5678],{"class":101},[36,19699,5029],{"class":42},[36,19701,19702,19704],{"class":38,"line":196},[36,19703,832],{"class":46},[36,19705,19706],{"class":101}," Cube\n",[36,19708,19709],{"class":38,"line":642},[36,19710,5281],{"class":42},[36,19712,19713],{"class":38,"line":655},[36,19714,18373],{"class":46},[36,19716,19717],{"class":38,"line":662},[36,19718,19719],{"class":3943},"    \u002F\u002F输入长宽高\n",[36,19721,19722,19724,19727,19729,19731,19734,19736,19738,19741,19743,19745,19748],{"class":38,"line":667},[36,19723,18565],{"class":46},[36,19725,19726],{"class":101}," setLwh",[36,19728,495],{"class":42},[36,19730,1378],{"class":46},[36,19732,19733],{"class":468}," l",[36,19735,4253],{"class":42},[36,19737,1378],{"class":46},[36,19739,19740],{"class":468}," w",[36,19742,4253],{"class":42},[36,19744,1378],{"class":46},[36,19746,19747],{"class":468}," h",[36,19749,922],{"class":42},[36,19751,19752],{"class":38,"line":679},[36,19753,5742],{"class":42},[36,19755,19756,19759,19761],{"class":38,"line":685},[36,19757,19758],{"class":42},"        m_L",[36,19760,47],{"class":46},[36,19762,19763],{"class":42},"l;\n",[36,19765,19766,19769,19771],{"class":38,"line":691},[36,19767,19768],{"class":42},"        m_W",[36,19770,47],{"class":46},[36,19772,19773],{"class":42},"w;\n",[36,19775,19776,19779,19781],{"class":38,"line":696},[36,19777,19778],{"class":42},"        m_H",[36,19780,47],{"class":46},[36,19782,19783],{"class":42},"h;\n",[36,19785,19786],{"class":38,"line":702},[36,19787,5899],{"class":42},[36,19789,19790,19792,19795],{"class":38,"line":708},[36,19791,5697],{"class":46},[36,19793,19794],{"class":101}," mianji",[36,19796,903],{"class":42},[36,19798,19799],{"class":38,"line":713},[36,19800,5742],{"class":42},[36,19802,19803,19805,19807,19809,19812,19814,19817,19819,19822,19824,19827,19829,19832,19834],{"class":38,"line":719},[36,19804,1239],{"class":46},[36,19806,18411],{"class":112},[36,19808,1372],{"class":46},[36,19810,19811],{"class":42},"(m_L",[36,19813,1372],{"class":46},[36,19815,19816],{"class":42},"m_W ",[36,19818,4354],{"class":46},[36,19820,19821],{"class":42}," m_L",[36,19823,1372],{"class":46},[36,19825,19826],{"class":42},"m_H ",[36,19828,4354],{"class":46},[36,19830,19831],{"class":42}," m_W",[36,19833,1372],{"class":46},[36,19835,19836],{"class":42},"m_H);\n",[36,19838,19839],{"class":38,"line":725},[36,19840,5899],{"class":42},[36,19842,19843,19845,19848],{"class":38,"line":731},[36,19844,5697],{"class":46},[36,19846,19847],{"class":101}," tiji",[36,19849,903],{"class":42},[36,19851,19852],{"class":38,"line":736},[36,19853,5742],{"class":42},[36,19855,19856,19858,19860,19862,19865,19867],{"class":38,"line":742},[36,19857,1239],{"class":46},[36,19859,19821],{"class":42},[36,19861,1372],{"class":46},[36,19863,19864],{"class":42},"m_W",[36,19866,1372],{"class":46},[36,19868,19869],{"class":42},"m_H;\n",[36,19871,19872],{"class":38,"line":748},[36,19873,5899],{"class":42},[36,19875,19876],{"class":38,"line":754},[36,19877,19878],{"class":3943},"    \u002F\u002F获取长宽高\n",[36,19880,19881,19883,19886],{"class":38,"line":760},[36,19882,5697],{"class":46},[36,19884,19885],{"class":101}," getLength",[36,19887,903],{"class":42},[36,19889,19890],{"class":38,"line":766},[36,19891,5742],{"class":42},[36,19893,19894,19896],{"class":38,"line":772},[36,19895,1239],{"class":46},[36,19897,19898],{"class":42}," m_L;\n",[36,19900,19901],{"class":38,"line":778},[36,19902,5899],{"class":42},[36,19904,19905,19907,19910],{"class":38,"line":783},[36,19906,5697],{"class":46},[36,19908,19909],{"class":101}," getWidth",[36,19911,903],{"class":42},[36,19913,19914],{"class":38,"line":789},[36,19915,5742],{"class":42},[36,19917,19918,19920],{"class":38,"line":795},[36,19919,1239],{"class":46},[36,19921,19922],{"class":42}," m_W;\n",[36,19924,19925],{"class":38,"line":801},[36,19926,5899],{"class":42},[36,19928,19929,19931,19934],{"class":38,"line":807},[36,19930,5697],{"class":46},[36,19932,19933],{"class":101}," getHeight",[36,19935,903],{"class":42},[36,19937,19938],{"class":38,"line":813},[36,19939,5742],{"class":42},[36,19941,19942,19944],{"class":38,"line":819},[36,19943,1239],{"class":46},[36,19945,19946],{"class":42}," m_H;\n",[36,19948,19949],{"class":38,"line":824},[36,19950,5899],{"class":42},[36,19952,19953],{"class":38,"line":829},[36,19954,19955],{"class":3943},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[36,19957,19958,19961,19964,19966,19969,19971],{"class":38,"line":851},[36,19959,19960],{"class":46},"    bool",[36,19962,19963],{"class":101}," isEqual",[36,19965,495],{"class":42},[36,19967,19968],{"class":101},"Cube",[36,19970,6552],{"class":468},[36,19972,922],{"class":42},[36,19974,19975],{"class":38,"line":868},[36,19976,5742],{"class":42},[36,19978,19979,19981,19984,19987,19989,19991,19994,19996,19999,20002,20004,20006,20009,20011,20013,20016,20018,20020],{"class":38,"line":873},[36,19980,995],{"class":46},[36,19982,19983],{"class":42}," (c.",[36,19985,19986],{"class":101},"getLength",[36,19988,16710],{"class":42},[36,19990,6652],{"class":46},[36,19992,19993],{"class":42}," m_L ",[36,19995,5438],{"class":46},[36,19997,19998],{"class":42}," c.",[36,20000,20001],{"class":101},"getWidth",[36,20003,16710],{"class":42},[36,20005,6652],{"class":46},[36,20007,20008],{"class":42}," m_W ",[36,20010,5438],{"class":46},[36,20012,19998],{"class":42},[36,20014,20015],{"class":101},"getHeight",[36,20017,16710],{"class":42},[36,20019,6652],{"class":46},[36,20021,20022],{"class":42}," m_H)\n",[36,20024,20025],{"class":38,"line":891},[36,20026,6220],{"class":42},[36,20028,20029,20031,20034],{"class":38,"line":906},[36,20030,19388],{"class":46},[36,20032,20033],{"class":112}," true",[36,20035,5029],{"class":42},[36,20037,20038],{"class":38,"line":925},[36,20039,6239],{"class":42},[36,20041,20042],{"class":38,"line":943},[36,20043,6280],{"class":46},[36,20045,20046],{"class":38,"line":948},[36,20047,6220],{"class":42},[36,20049,20050,20052,20055],{"class":38,"line":971},[36,20051,19388],{"class":46},[36,20053,20054],{"class":112}," false",[36,20056,5029],{"class":42},[36,20058,20059],{"class":38,"line":992},[36,20060,6239],{"class":42},[36,20062,20063],{"class":38,"line":1020},[36,20064,5899],{"class":42},[36,20066,20067],{"class":38,"line":1036},[36,20068,20069],{"class":3943},"    \u002F\u002F私有属性\n",[36,20071,20072],{"class":38,"line":1041},[36,20073,18878],{"class":46},[36,20075,20076,20078],{"class":38,"line":1052},[36,20077,5697],{"class":46},[36,20079,19898],{"class":42},[36,20081,20082,20084],{"class":38,"line":1065},[36,20083,5697],{"class":46},[36,20085,19922],{"class":42},[36,20087,20088,20090],{"class":38,"line":1077},[36,20089,5697],{"class":46},[36,20091,19946],{"class":42},[36,20093,20094],{"class":38,"line":1082},[36,20095,659],{"emptyLinePlaceholder":658},[36,20097,20098],{"class":38,"line":1125},[36,20099,7693],{"class":42},[36,20101,20102],{"class":38,"line":1164},[36,20103,20104],{"class":3943},"\u002F\u002F全局函数判断两个立方体是否相等\n",[36,20106,20107,20109,20111,20113,20115,20118,20120,20122,20125],{"class":38,"line":1169},[36,20108,5090],{"class":46},[36,20110,19963],{"class":101},[36,20112,495],{"class":42},[36,20114,19968],{"class":101},[36,20116,20117],{"class":468}," c1",[36,20119,4253],{"class":42},[36,20121,19968],{"class":101},[36,20123,20124],{"class":468}," c2",[36,20126,922],{"class":42},[36,20128,20129],{"class":38,"line":1180},[36,20130,5281],{"class":42},[36,20132,20133,20135,20138,20140,20142,20144,20147,20149,20152,20154,20156,20158,20160,20162,20164,20166,20168,20170,20172,20174,20176,20178,20180,20182],{"class":38,"line":1198},[36,20134,7788],{"class":46},[36,20136,20137],{"class":42}," (c1.",[36,20139,19986],{"class":101},[36,20141,16710],{"class":42},[36,20143,6652],{"class":46},[36,20145,20146],{"class":42}," c2.",[36,20148,19986],{"class":101},[36,20150,20151],{"class":42},"()) ",[36,20153,5438],{"class":46},[36,20155,20137],{"class":42},[36,20157,20001],{"class":101},[36,20159,16710],{"class":42},[36,20161,6652],{"class":46},[36,20163,20146],{"class":42},[36,20165,20001],{"class":101},[36,20167,20151],{"class":42},[36,20169,5438],{"class":46},[36,20171,20137],{"class":42},[36,20173,20015],{"class":101},[36,20175,16710],{"class":42},[36,20177,6652],{"class":46},[36,20179,20146],{"class":42},[36,20181,20015],{"class":101},[36,20183,20184],{"class":42},"());\n",[36,20186,20187],{"class":38,"line":1215},[36,20188,5300],{"class":42},[36,20190,20191,20193,20195],{"class":38,"line":1236},[36,20192,1378],{"class":46},[36,20194,1823],{"class":101},[36,20196,903],{"class":42},[36,20198,20199],{"class":38,"line":1245},[36,20200,5281],{"class":42},[36,20202,20203],{"class":38,"line":1250},[36,20204,20205],{"class":42},"    Cube c1;\n",[36,20207,20208],{"class":38,"line":1265},[36,20209,20210],{"class":3943},"    \u002F\u002F输入立方体的长宽高\n",[36,20212,20213,20215,20217,20220,20222],{"class":38,"line":1281},[36,20214,5286],{"class":42},[36,20216,4912],{"class":46},[36,20218,20219],{"class":105},"\"请输入第一个立方体的长、宽、高：\"",[36,20221,4912],{"class":46},[36,20223,4934],{"class":42},[36,20225,20226,20228],{"class":38,"line":1297},[36,20227,5697],{"class":46},[36,20229,20230],{"class":42}," l,w,h,l1,w1,h1;\n",[36,20232,20233,20235,20237,20239,20241,20243,20245],{"class":38,"line":1314},[36,20234,5724],{"class":42},[36,20236,5165],{"class":46},[36,20238,4391],{"class":42},[36,20240,5165],{"class":46},[36,20242,4665],{"class":42},[36,20244,5165],{"class":46},[36,20246,19783],{"class":42},[36,20248,20249,20252,20255],{"class":38,"line":1336},[36,20250,20251],{"class":42},"    c1.",[36,20253,20254],{"class":101},"setLwh",[36,20256,20257],{"class":42},"(l,w,h);\n",[36,20259,20260],{"class":38,"line":1356},[36,20261,20262],{"class":3943},"    \u002F\u002F面积\n",[36,20264,20265,20267,20269,20272,20274,20276,20279,20281,20283],{"class":38,"line":1361},[36,20266,5286],{"class":42},[36,20268,4912],{"class":46},[36,20270,20271],{"class":105},"\"立方体的表面积为：\"",[36,20273,4912],{"class":46},[36,20275,18486],{"class":42},[36,20277,20278],{"class":101},"mianji",[36,20280,6138],{"class":42},[36,20282,4912],{"class":46},[36,20284,4934],{"class":42},[36,20286,20287],{"class":38,"line":1407},[36,20288,20289],{"class":3943},"    \u002F\u002F体积\n",[36,20291,20292,20294,20296,20299,20301,20303,20306,20308,20310],{"class":38,"line":1423},[36,20293,5286],{"class":42},[36,20295,4912],{"class":46},[36,20297,20298],{"class":105},"\"立方体的体积为：\"",[36,20300,4912],{"class":46},[36,20302,18486],{"class":42},[36,20304,20305],{"class":101},"tiji",[36,20307,6138],{"class":42},[36,20309,4912],{"class":46},[36,20311,4934],{"class":42},[36,20313,20314,20316,20318,20321,20323],{"class":38,"line":1439},[36,20315,5286],{"class":42},[36,20317,4912],{"class":46},[36,20319,20320],{"class":105},"\"请输入第二个立方体的长、宽、高：\"",[36,20322,4912],{"class":46},[36,20324,4934],{"class":42},[36,20326,20327,20329,20331,20334,20336,20339,20341],{"class":38,"line":1444},[36,20328,5724],{"class":42},[36,20330,5165],{"class":46},[36,20332,20333],{"class":42},"l1",[36,20335,5165],{"class":46},[36,20337,20338],{"class":42},"w1",[36,20340,5165],{"class":46},[36,20342,20343],{"class":42},"h1;\n",[36,20345,20346],{"class":38,"line":1486},[36,20347,20348],{"class":42},"    Cube c2;\n",[36,20350,20351,20354,20356],{"class":38,"line":1499},[36,20352,20353],{"class":42},"    c2.",[36,20355,20254],{"class":101},[36,20357,20358],{"class":42},"(l1,w1,h1);\n",[36,20360,20361,20363,20365,20368,20370,20373,20375,20377,20379],{"class":38,"line":1513},[36,20362,5286],{"class":42},[36,20364,4912],{"class":46},[36,20366,20367],{"class":105},"\"第二个立方体的表面积为：\"",[36,20369,4912],{"class":46},[36,20371,20372],{"class":42},"c2.",[36,20374,20278],{"class":101},[36,20376,6138],{"class":42},[36,20378,4912],{"class":46},[36,20380,4934],{"class":42},[36,20382,20383,20385,20387,20390,20392,20394,20396,20398,20400],{"class":38,"line":1518},[36,20384,5286],{"class":42},[36,20386,4912],{"class":46},[36,20388,20389],{"class":105},"\"第二个立方体的体积为：\"",[36,20391,4912],{"class":46},[36,20393,20372],{"class":42},[36,20395,20305],{"class":101},[36,20397,6138],{"class":42},[36,20399,4912],{"class":46},[36,20401,4934],{"class":42},[36,20403,20404],{"class":38,"line":1529},[36,20405,659],{"emptyLinePlaceholder":658},[36,20407,20408],{"class":38,"line":1539},[36,20409,20410],{"class":3943},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[36,20412,20413,20415,20417,20420,20422],{"class":38,"line":1544},[36,20414,5286],{"class":42},[36,20416,4912],{"class":46},[36,20418,20419],{"class":105},"\"内部函数判断结果：\"",[36,20421,4912],{"class":46},[36,20423,4934],{"class":42},[36,20425,20426,20428,20430,20433],{"class":38,"line":1555},[36,20427,3752],{"class":46},[36,20429,20137],{"class":42},[36,20431,20432],{"class":101},"isEqual",[36,20434,20435],{"class":42},"(c2))\n",[36,20437,20438],{"class":38,"line":1572},[36,20439,5742],{"class":42},[36,20441,20442,20444,20446,20449,20451],{"class":38,"line":1592},[36,20443,7150],{"class":42},[36,20445,4912],{"class":46},[36,20447,20448],{"class":105},"\"两个立方体相等\"",[36,20450,4912],{"class":46},[36,20452,4934],{"class":42},[36,20454,20455],{"class":38,"line":1597},[36,20456,5899],{"class":42},[36,20458,20459],{"class":38,"line":1610},[36,20460,20461],{"class":46},"    else\n",[36,20463,20464],{"class":38,"line":1632},[36,20465,5742],{"class":42},[36,20467,20468,20470,20472,20475,20477],{"class":38,"line":1646},[36,20469,7150],{"class":42},[36,20471,4912],{"class":46},[36,20473,20474],{"class":105},"\"两个立方体不相等\"",[36,20476,4912],{"class":46},[36,20478,4934],{"class":42},[36,20480,20481],{"class":38,"line":1651},[36,20482,5899],{"class":42},[36,20484,20485],{"class":38,"line":1664},[36,20486,659],{"emptyLinePlaceholder":658},[36,20488,20489,20491,20493,20496,20498],{"class":38,"line":1669},[36,20490,5286],{"class":42},[36,20492,4912],{"class":46},[36,20494,20495],{"class":105},"\"全局函数判断结果：\"",[36,20497,4912],{"class":46},[36,20499,4934],{"class":42},[36,20501,20502,20504,20506,20508],{"class":38,"line":1681},[36,20503,3752],{"class":46},[36,20505,5386],{"class":42},[36,20507,20432],{"class":101},[36,20509,20510],{"class":42},"(c1, c2))\n",[36,20512,20513],{"class":38,"line":1694},[36,20514,5742],{"class":42},[36,20516,20517,20519,20521,20523,20525],{"class":38,"line":1699},[36,20518,7150],{"class":42},[36,20520,4912],{"class":46},[36,20522,20448],{"class":105},[36,20524,4912],{"class":46},[36,20526,4934],{"class":42},[36,20528,20529],{"class":38,"line":1714},[36,20530,5899],{"class":42},[36,20532,20533],{"class":38,"line":1729},[36,20534,20461],{"class":46},[36,20536,20537],{"class":38,"line":1746},[36,20538,5742],{"class":42},[36,20540,20541,20543,20545,20547,20549],{"class":38,"line":1751},[36,20542,7150],{"class":42},[36,20544,4912],{"class":46},[36,20546,20474],{"class":105},[36,20548,4912],{"class":46},[36,20550,4934],{"class":42},[36,20552,20553],{"class":38,"line":1765},[36,20554,5899],{"class":42},[36,20556,20557],{"class":38,"line":1783},[36,20558,5300],{"class":42},[211,20560,20561],{"start":53},[214,20562,20563],{},[4027,20564,20565],{},"练习案例2：点和圆的关系",[4875,20567,20568],{},[214,20569,20570],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[26,20572,20574],{"className":3879,"code":20573,"language":3881,"meta":31,"style":31},"#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",[33,20575,20576,20582,20592,20599,20606,20610,20614,20619,20653,20658,20673,20687,20691,20695,20702,20709,20713,20719,20723,20727,20731,20753,20776,20781,20795,20810,20814,20818,20824,20829,20834,20838,20864,20868,20897,20925,20953,20970,20974,20987,20991,20995,20999,21012,21016,21020,21028,21032,21036,21040,21045,21049,21060,21067,21076,21086,21097,21104,21117,21128,21138,21149,21156,21170,21175,21185,21193],{"__ignoreMap":31},[36,20577,20578,20580],{"class":38,"line":39},[36,20579,5664],{"class":46},[36,20581,5667],{"class":105},[36,20583,20584,20586,20588,20590],{"class":38,"line":53},[36,20585,5672],{"class":46},[36,20587,5675],{"class":46},[36,20589,5678],{"class":101},[36,20591,5029],{"class":42},[36,20593,20594,20596],{"class":38,"line":196},[36,20595,5664],{"class":46},[36,20597,20598],{"class":105},"\u003Ccmath>\n",[36,20600,20601,20603],{"class":38,"line":642},[36,20602,832],{"class":46},[36,20604,20605],{"class":101}," Point\n",[36,20607,20608],{"class":38,"line":655},[36,20609,5281],{"class":42},[36,20611,20612],{"class":38,"line":662},[36,20613,18373],{"class":46},[36,20615,20616],{"class":38,"line":667},[36,20617,20618],{"class":3943},"    \u002F\u002F赋值\n",[36,20620,20621,20623,20626,20628,20630,20633,20635,20637,20640,20643,20645,20648,20650],{"class":38,"line":679},[36,20622,18565],{"class":46},[36,20624,20625],{"class":101}," setPoint",[36,20627,495],{"class":42},[36,20629,17696],{"class":46},[36,20631,20632],{"class":468}," x",[36,20634,478],{"class":42},[36,20636,17696],{"class":46},[36,20638,20639],{"class":468}," y",[36,20641,20642],{"class":42},") { m_x ",[36,20644,47],{"class":46},[36,20646,20647],{"class":42}," x; m_y ",[36,20649,47],{"class":46},[36,20651,20652],{"class":42}," y; }\n",[36,20654,20655],{"class":38,"line":685},[36,20656,20657],{"class":3943},"    \u002F\u002F获取坐标\n",[36,20659,20660,20662,20665,20668,20670],{"class":38,"line":691},[36,20661,18395],{"class":46},[36,20663,20664],{"class":101}," getX",[36,20666,20667],{"class":42},"() { ",[36,20669,2822],{"class":46},[36,20671,20672],{"class":42}," m_x; }\n",[36,20674,20675,20677,20680,20682,20684],{"class":38,"line":696},[36,20676,18395],{"class":46},[36,20678,20679],{"class":101}," getY",[36,20681,20667],{"class":42},[36,20683,2822],{"class":46},[36,20685,20686],{"class":42}," m_y; }\n",[36,20688,20689],{"class":38,"line":702},[36,20690,659],{"emptyLinePlaceholder":658},[36,20692,20693],{"class":38,"line":708},[36,20694,18878],{"class":46},[36,20696,20697,20699],{"class":38,"line":713},[36,20698,18395],{"class":46},[36,20700,20701],{"class":42}," m_x;\n",[36,20703,20704,20706],{"class":38,"line":719},[36,20705,18395],{"class":46},[36,20707,20708],{"class":42}," m_y;\n",[36,20710,20711],{"class":38,"line":725},[36,20712,7693],{"class":42},[36,20714,20715,20717],{"class":38,"line":731},[36,20716,832],{"class":46},[36,20718,18354],{"class":101},[36,20720,20721],{"class":38,"line":736},[36,20722,5281],{"class":42},[36,20724,20725],{"class":38,"line":742},[36,20726,18373],{"class":46},[36,20728,20729],{"class":38,"line":748},[36,20730,20618],{"class":3943},[36,20732,20733,20735,20738,20740,20742,20745,20748,20750],{"class":38,"line":754},[36,20734,18565],{"class":46},[36,20736,20737],{"class":101}," setRadius",[36,20739,495],{"class":42},[36,20741,17696],{"class":46},[36,20743,20744],{"class":468}," r",[36,20746,20747],{"class":42},") { m_r ",[36,20749,47],{"class":46},[36,20751,20752],{"class":42}," r; }\n",[36,20754,20755,20757,20760,20762,20765,20768,20771,20773],{"class":38,"line":760},[36,20756,18565],{"class":46},[36,20758,20759],{"class":101}," setCenter",[36,20761,495],{"class":42},[36,20763,20764],{"class":101},"Point",[36,20766,20767],{"class":468}," center",[36,20769,20770],{"class":42},") { m_center ",[36,20772,47],{"class":46},[36,20774,20775],{"class":42}," center; }\n",[36,20777,20778],{"class":38,"line":766},[36,20779,20780],{"class":3943},"    \u002F\u002F获取属性\n",[36,20782,20783,20785,20788,20790,20792],{"class":38,"line":772},[36,20784,18395],{"class":46},[36,20786,20787],{"class":101}," getRadius",[36,20789,20667],{"class":42},[36,20791,2822],{"class":46},[36,20793,20794],{"class":42}," m_r; }\n",[36,20796,20797,20800,20803,20805,20807],{"class":38,"line":778},[36,20798,20799],{"class":101},"    Point",[36,20801,20802],{"class":101}," getCenter",[36,20804,20667],{"class":42},[36,20806,2822],{"class":46},[36,20808,20809],{"class":42}," m_center; }\n",[36,20811,20812],{"class":38,"line":783},[36,20813,659],{"emptyLinePlaceholder":658},[36,20815,20816],{"class":38,"line":789},[36,20817,18878],{"class":46},[36,20819,20820,20822],{"class":38,"line":795},[36,20821,18395],{"class":46},[36,20823,18385],{"class":42},[36,20825,20826],{"class":38,"line":801},[36,20827,20828],{"class":3943},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[36,20830,20831],{"class":38,"line":807},[36,20832,20833],{"class":42},"    Point m_center;\n",[36,20835,20836],{"class":38,"line":813},[36,20837,7693],{"class":42},[36,20839,20840,20842,20845,20847,20850,20852,20854,20856,20858,20860,20862],{"class":38,"line":819},[36,20841,9057],{"class":46},[36,20843,20844],{"class":101}," isInCircle",[36,20846,495],{"class":42},[36,20848,20849],{"class":101},"Circle",[36,20851,14245],{"class":46},[36,20853,4163],{"class":468},[36,20855,4253],{"class":42},[36,20857,20764],{"class":101},[36,20859,14245],{"class":46},[36,20861,19],{"class":468},[36,20863,922],{"class":42},[36,20865,20866],{"class":38,"line":824},[36,20867,5281],{"class":42},[36,20869,20870,20872,20875,20877,20879,20882,20884,20887,20889,20891,20893,20895],{"class":38,"line":829},[36,20871,18395],{"class":46},[36,20873,20874],{"class":42}," dx ",[36,20876,47],{"class":46},[36,20878,19998],{"class":42},[36,20880,20881],{"class":101},"getCenter",[36,20883,897],{"class":42},[36,20885,20886],{"class":101},"getX",[36,20888,16710],{"class":42},[36,20890,1308],{"class":46},[36,20892,19544],{"class":42},[36,20894,20886],{"class":101},[36,20896,9329],{"class":42},[36,20898,20899,20901,20904,20906,20908,20910,20912,20915,20917,20919,20921,20923],{"class":38,"line":851},[36,20900,18395],{"class":46},[36,20902,20903],{"class":42}," dy ",[36,20905,47],{"class":46},[36,20907,19998],{"class":42},[36,20909,20881],{"class":101},[36,20911,897],{"class":42},[36,20913,20914],{"class":101},"getY",[36,20916,16710],{"class":42},[36,20918,1308],{"class":46},[36,20920,19544],{"class":42},[36,20922,20914],{"class":101},[36,20924,9329],{"class":42},[36,20926,20927,20929,20932,20934,20937,20940,20942,20944,20946,20948,20950],{"class":38,"line":868},[36,20928,18395],{"class":46},[36,20930,20931],{"class":42}," distance ",[36,20933,47],{"class":46},[36,20935,20936],{"class":101}," sqrt",[36,20938,20939],{"class":42},"(dx ",[36,20941,1372],{"class":46},[36,20943,20874],{"class":42},[36,20945,4354],{"class":46},[36,20947,20903],{"class":42},[36,20949,1372],{"class":46},[36,20951,20952],{"class":42}," dy);\n",[36,20954,20955,20957,20960,20962,20964,20967],{"class":38,"line":873},[36,20956,3752],{"class":46},[36,20958,20959],{"class":42}," (distance ",[36,20961,393],{"class":46},[36,20963,19998],{"class":42},[36,20965,20966],{"class":101},"getRadius",[36,20968,20969],{"class":42},"())\n",[36,20971,20972],{"class":38,"line":891},[36,20973,5742],{"class":42},[36,20975,20976,20978,20980,20983,20985],{"class":38,"line":906},[36,20977,13349],{"class":42},[36,20979,4912],{"class":46},[36,20981,20982],{"class":105}," \"点在圆内\"",[36,20984,5180],{"class":46},[36,20986,12521],{"class":42},[36,20988,20989],{"class":38,"line":925},[36,20990,5899],{"class":42},[36,20992,20993],{"class":38,"line":943},[36,20994,20461],{"class":46},[36,20996,20997],{"class":38,"line":948},[36,20998,5742],{"class":42},[36,21000,21001,21003,21005,21008,21010],{"class":38,"line":971},[36,21002,13349],{"class":42},[36,21004,4912],{"class":46},[36,21006,21007],{"class":105}," \"点在圆外\"",[36,21009,5180],{"class":46},[36,21011,12521],{"class":42},[36,21013,21014],{"class":38,"line":992},[36,21015,5899],{"class":42},[36,21017,21018],{"class":38,"line":1020},[36,21019,5300],{"class":42},[36,21021,21022,21024,21026],{"class":38,"line":1036},[36,21023,1378],{"class":46},[36,21025,1823],{"class":101},[36,21027,903],{"class":42},[36,21029,21030],{"class":38,"line":1041},[36,21031,5281],{"class":42},[36,21033,21034],{"class":38,"line":1052},[36,21035,18709],{"class":3943},[36,21037,21038],{"class":38,"line":1065},[36,21039,18456],{"class":42},[36,21041,21042],{"class":38,"line":1077},[36,21043,21044],{"class":42},"    Point p1;\n",[36,21046,21047],{"class":38,"line":1082},[36,21048,20618],{"class":3943},[36,21050,21051,21053,21055,21058],{"class":38,"line":1125},[36,21052,5286],{"class":42},[36,21054,4912],{"class":46},[36,21056,21057],{"class":105},"\"请输入圆的半径：\"",[36,21059,5029],{"class":42},[36,21061,21062,21064],{"class":38,"line":1164},[36,21063,18395],{"class":46},[36,21065,21066],{"class":42}," r;\n",[36,21068,21069,21071,21073],{"class":38,"line":1169},[36,21070,5724],{"class":42},[36,21072,5165],{"class":46},[36,21074,21075],{"class":42},"r;\n",[36,21077,21078,21080,21083],{"class":38,"line":1180},[36,21079,20251],{"class":42},[36,21081,21082],{"class":101},"setRadius",[36,21084,21085],{"class":42},"(r);\n",[36,21087,21088,21090,21092,21095],{"class":38,"line":1198},[36,21089,5286],{"class":42},[36,21091,4912],{"class":46},[36,21093,21094],{"class":105},"\"请输入圆心坐标：\"",[36,21096,5029],{"class":42},[36,21098,21099,21101],{"class":38,"line":1215},[36,21100,18395],{"class":46},[36,21102,21103],{"class":42}," x, y;\n",[36,21105,21106,21108,21110,21112,21114],{"class":38,"line":1236},[36,21107,5724],{"class":42},[36,21109,5165],{"class":46},[36,21111,4690],{"class":42},[36,21113,5165],{"class":46},[36,21115,21116],{"class":42},"y;\n",[36,21118,21119,21122,21125],{"class":38,"line":1245},[36,21120,21121],{"class":42},"    p1.",[36,21123,21124],{"class":101},"setPoint",[36,21126,21127],{"class":42},"(x, y);\n",[36,21129,21130,21132,21135],{"class":38,"line":1250},[36,21131,20251],{"class":42},[36,21133,21134],{"class":101},"setCenter",[36,21136,21137],{"class":42},"(p1);\n",[36,21139,21140,21142,21144,21147],{"class":38,"line":1265},[36,21141,5286],{"class":42},[36,21143,4912],{"class":46},[36,21145,21146],{"class":105},"\"请输入测试点坐标：\"",[36,21148,5029],{"class":42},[36,21150,21151,21153],{"class":38,"line":1281},[36,21152,18395],{"class":46},[36,21154,21155],{"class":42}," x1, y1;\n",[36,21157,21158,21160,21162,21165,21167],{"class":38,"line":1297},[36,21159,5724],{"class":42},[36,21161,5165],{"class":46},[36,21163,21164],{"class":42},"x1",[36,21166,5165],{"class":46},[36,21168,21169],{"class":42},"y1;\n",[36,21171,21172],{"class":38,"line":1314},[36,21173,21174],{"class":42},"    Point p2;\n",[36,21176,21177,21180,21182],{"class":38,"line":1336},[36,21178,21179],{"class":42},"    p2.",[36,21181,21124],{"class":101},[36,21183,21184],{"class":42},"(x1, y1);\n",[36,21186,21187,21190],{"class":38,"line":1356},[36,21188,21189],{"class":101},"    isInCircle",[36,21191,21192],{"class":42},"(c1, p2);\n",[36,21194,21195],{"class":38,"line":1361},[36,21196,5300],{"class":42},[19,21198,21199],{},"在类中可以让另一个类作为本来的成员",[19,21201,21202],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,21204,21205],{},"创建point.h",[26,21207,21209],{"className":3879,"code":21208,"language":3881,"meta":31,"style":31},"#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",[33,21210,21211,21222,21228,21238,21244,21248,21253,21257,21261,21281,21285,21293,21301,21305,21309,21315,21321],{"__ignoreMap":31},[36,21212,21213,21216,21219],{"class":38,"line":39},[36,21214,21215],{"class":46},"#pragma",[36,21217,21218],{"class":101}," once",[36,21220,21221],{"class":3943}," \u002F\u002F防止头文件重复包含\n",[36,21223,21224,21226],{"class":38,"line":53},[36,21225,5664],{"class":46},[36,21227,5667],{"class":105},[36,21229,21230,21232,21234,21236],{"class":38,"line":196},[36,21231,5672],{"class":46},[36,21233,5675],{"class":46},[36,21235,5678],{"class":101},[36,21237,5029],{"class":42},[36,21239,21240,21242],{"class":38,"line":642},[36,21241,832],{"class":46},[36,21243,20605],{"class":101},[36,21245,21246],{"class":38,"line":655},[36,21247,5281],{"class":42},[36,21249,21250],{"class":38,"line":662},[36,21251,21252],{"class":3943},"\u002F\u002F做好声明与变量定义就可以\n",[36,21254,21255],{"class":38,"line":667},[36,21256,18373],{"class":46},[36,21258,21259],{"class":38,"line":679},[36,21260,20618],{"class":3943},[36,21262,21263,21265,21267,21269,21271,21273,21275,21277,21279],{"class":38,"line":685},[36,21264,18565],{"class":46},[36,21266,20625],{"class":101},[36,21268,495],{"class":42},[36,21270,17696],{"class":46},[36,21272,20632],{"class":468},[36,21274,478],{"class":42},[36,21276,17696],{"class":46},[36,21278,20639],{"class":468},[36,21280,6422],{"class":42},[36,21282,21283],{"class":38,"line":691},[36,21284,20657],{"class":3943},[36,21286,21287,21289,21291],{"class":38,"line":696},[36,21288,18395],{"class":46},[36,21290,20664],{"class":101},[36,21292,9329],{"class":42},[36,21294,21295,21297,21299],{"class":38,"line":702},[36,21296,18395],{"class":46},[36,21298,20679],{"class":101},[36,21300,9329],{"class":42},[36,21302,21303],{"class":38,"line":708},[36,21304,659],{"emptyLinePlaceholder":658},[36,21306,21307],{"class":38,"line":713},[36,21308,18878],{"class":46},[36,21310,21311,21313],{"class":38,"line":719},[36,21312,18395],{"class":46},[36,21314,20701],{"class":42},[36,21316,21317,21319],{"class":38,"line":725},[36,21318,18395],{"class":46},[36,21320,20708],{"class":42},[36,21322,21323],{"class":38,"line":731},[36,21324,7693],{"class":42},[19,21326,21327],{},"创建point.cpp",[26,21329,21331],{"className":3879,"code":21330,"language":3881,"meta":31,"style":31},"#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",[33,21332,21333,21340,21345,21379,21383,21399],{"__ignoreMap":31},[36,21334,21335,21337],{"class":38,"line":39},[36,21336,5664],{"class":46},[36,21338,21339],{"class":105},"\u003Cpoint.h>\n",[36,21341,21342],{"class":38,"line":53},[36,21343,21344],{"class":3943},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[36,21346,21347,21349,21352,21355,21357,21359,21361,21363,21365,21367,21369,21371,21373,21375,21377],{"class":38,"line":196},[36,21348,18565],{"class":46},[36,21350,21351],{"class":101}," Point",[36,21353,21354],{"class":42},"::",[36,21356,21124],{"class":101},[36,21358,495],{"class":42},[36,21360,17696],{"class":46},[36,21362,20632],{"class":468},[36,21364,478],{"class":42},[36,21366,17696],{"class":46},[36,21368,20639],{"class":468},[36,21370,20642],{"class":42},[36,21372,47],{"class":46},[36,21374,20647],{"class":42},[36,21376,47],{"class":46},[36,21378,20652],{"class":42},[36,21380,21381],{"class":38,"line":642},[36,21382,20657],{"class":3943},[36,21384,21385,21387,21389,21391,21393,21395,21397],{"class":38,"line":655},[36,21386,18395],{"class":46},[36,21388,21351],{"class":101},[36,21390,21354],{"class":42},[36,21392,20886],{"class":101},[36,21394,20667],{"class":42},[36,21396,2822],{"class":46},[36,21398,20672],{"class":42},[36,21400,21401,21403,21405,21407,21409,21411,21413],{"class":38,"line":662},[36,21402,18395],{"class":46},[36,21404,21351],{"class":101},[36,21406,21354],{"class":42},[36,21408,20914],{"class":101},[36,21410,20667],{"class":42},[36,21412,2822],{"class":46},[36,21414,20686],{"class":42},[19,21416,21417],{},"创建circle.h",[26,21419,21421],{"className":3879,"code":21420,"language":3881,"meta":31,"style":31},"#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",[33,21422,21423,21430,21436,21446,21452,21458,21462,21466,21470,21484,21498,21502,21510,21518,21522,21526,21532,21536,21540],{"__ignoreMap":31},[36,21424,21425,21427],{"class":38,"line":39},[36,21426,21215],{"class":46},[36,21428,21429],{"class":101}," once\n",[36,21431,21432,21434],{"class":38,"line":53},[36,21433,5664],{"class":46},[36,21435,5667],{"class":105},[36,21437,21438,21440,21442,21444],{"class":38,"line":196},[36,21439,5672],{"class":46},[36,21441,5675],{"class":46},[36,21443,5678],{"class":101},[36,21445,5029],{"class":42},[36,21447,21448,21450],{"class":38,"line":642},[36,21449,5664],{"class":46},[36,21451,21339],{"class":105},[36,21453,21454,21456],{"class":38,"line":655},[36,21455,832],{"class":46},[36,21457,18354],{"class":101},[36,21459,21460],{"class":38,"line":662},[36,21461,5281],{"class":42},[36,21463,21464],{"class":38,"line":667},[36,21465,18373],{"class":46},[36,21467,21468],{"class":38,"line":679},[36,21469,20618],{"class":3943},[36,21471,21472,21474,21476,21478,21480,21482],{"class":38,"line":685},[36,21473,18565],{"class":46},[36,21475,20737],{"class":101},[36,21477,495],{"class":42},[36,21479,17696],{"class":46},[36,21481,20744],{"class":468},[36,21483,6422],{"class":42},[36,21485,21486,21488,21490,21492,21494,21496],{"class":38,"line":691},[36,21487,18565],{"class":46},[36,21489,20759],{"class":101},[36,21491,495],{"class":42},[36,21493,20764],{"class":101},[36,21495,20767],{"class":468},[36,21497,6422],{"class":42},[36,21499,21500],{"class":38,"line":696},[36,21501,20780],{"class":3943},[36,21503,21504,21506,21508],{"class":38,"line":702},[36,21505,18395],{"class":46},[36,21507,20787],{"class":101},[36,21509,9329],{"class":42},[36,21511,21512,21514,21516],{"class":38,"line":708},[36,21513,20799],{"class":101},[36,21515,20802],{"class":101},[36,21517,9329],{"class":42},[36,21519,21520],{"class":38,"line":713},[36,21521,659],{"emptyLinePlaceholder":658},[36,21523,21524],{"class":38,"line":719},[36,21525,18878],{"class":46},[36,21527,21528,21530],{"class":38,"line":725},[36,21529,18395],{"class":46},[36,21531,18385],{"class":42},[36,21533,21534],{"class":38,"line":731},[36,21535,20828],{"class":3943},[36,21537,21538],{"class":38,"line":736},[36,21539,20833],{"class":42},[36,21541,21542],{"class":38,"line":742},[36,21543,7693],{"class":42},[19,21545,21546],{},"创建circle.cpp",[26,21548,21550],{"className":3879,"code":21549,"language":3881,"meta":31,"style":31},"#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",[33,21551,21552,21559,21582,21604,21609,21625],{"__ignoreMap":31},[36,21553,21554,21556],{"class":38,"line":39},[36,21555,5664],{"class":46},[36,21557,21558],{"class":105},"\u003Ccircle.h>\n",[36,21560,21561,21563,21566,21568,21570,21572,21574,21576,21578,21580],{"class":38,"line":53},[36,21562,9057],{"class":46},[36,21564,21565],{"class":101}," Circle",[36,21567,21354],{"class":42},[36,21569,21082],{"class":101},[36,21571,495],{"class":42},[36,21573,17696],{"class":46},[36,21575,20744],{"class":468},[36,21577,20747],{"class":42},[36,21579,47],{"class":46},[36,21581,20752],{"class":42},[36,21583,21584,21586,21588,21590,21592,21594,21596,21598,21600,21602],{"class":38,"line":196},[36,21585,9057],{"class":46},[36,21587,21565],{"class":101},[36,21589,21354],{"class":42},[36,21591,21134],{"class":101},[36,21593,495],{"class":42},[36,21595,20764],{"class":101},[36,21597,20767],{"class":468},[36,21599,20770],{"class":42},[36,21601,47],{"class":46},[36,21603,20775],{"class":42},[36,21605,21606],{"class":38,"line":642},[36,21607,21608],{"class":3943},"\u002F\u002F获取属性\n",[36,21610,21611,21613,21615,21617,21619,21621,21623],{"class":38,"line":655},[36,21612,17696],{"class":46},[36,21614,21565],{"class":101},[36,21616,21354],{"class":42},[36,21618,20966],{"class":101},[36,21620,20667],{"class":42},[36,21622,2822],{"class":46},[36,21624,20794],{"class":42},[36,21626,21627,21629,21631,21633,21635,21637,21639],{"class":38,"line":662},[36,21628,20764],{"class":101},[36,21630,21565],{"class":101},[36,21632,21354],{"class":42},[36,21634,20881],{"class":101},[36,21636,20667],{"class":42},[36,21638,2822],{"class":46},[36,21640,20809],{"class":42},[19,21642,21643],{},"使用封装的类",[26,21645,21647],{"className":3879,"code":21646,"language":3881,"meta":31,"style":31},"#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",[33,21648,21649,21655,21665,21671,21677,21701,21705,21731,21757,21781,21795,21799,21811,21815,21819,21823,21835,21839,21843,21851,21855,21859,21863,21867,21871,21881,21887,21895,21903,21913,21919,21931,21939,21947,21957,21963,21975,21979,21987,21993],{"__ignoreMap":31},[36,21650,21651,21653],{"class":38,"line":39},[36,21652,5664],{"class":46},[36,21654,5667],{"class":105},[36,21656,21657,21659,21661,21663],{"class":38,"line":53},[36,21658,5672],{"class":46},[36,21660,5675],{"class":46},[36,21662,5678],{"class":101},[36,21664,5029],{"class":42},[36,21666,21667,21669],{"class":38,"line":196},[36,21668,5664],{"class":46},[36,21670,21558],{"class":105},[36,21672,21673,21675],{"class":38,"line":642},[36,21674,5664],{"class":46},[36,21676,21339],{"class":105},[36,21678,21679,21681,21683,21685,21687,21689,21691,21693,21695,21697,21699],{"class":38,"line":655},[36,21680,9057],{"class":46},[36,21682,20844],{"class":101},[36,21684,495],{"class":42},[36,21686,20849],{"class":101},[36,21688,14245],{"class":46},[36,21690,4163],{"class":468},[36,21692,4253],{"class":42},[36,21694,20764],{"class":101},[36,21696,14245],{"class":46},[36,21698,19],{"class":468},[36,21700,922],{"class":42},[36,21702,21703],{"class":38,"line":662},[36,21704,5281],{"class":42},[36,21706,21707,21709,21711,21713,21715,21717,21719,21721,21723,21725,21727,21729],{"class":38,"line":667},[36,21708,18395],{"class":46},[36,21710,20874],{"class":42},[36,21712,47],{"class":46},[36,21714,19998],{"class":42},[36,21716,20881],{"class":101},[36,21718,897],{"class":42},[36,21720,20886],{"class":101},[36,21722,16710],{"class":42},[36,21724,1308],{"class":46},[36,21726,19544],{"class":42},[36,21728,20886],{"class":101},[36,21730,9329],{"class":42},[36,21732,21733,21735,21737,21739,21741,21743,21745,21747,21749,21751,21753,21755],{"class":38,"line":679},[36,21734,18395],{"class":46},[36,21736,20903],{"class":42},[36,21738,47],{"class":46},[36,21740,19998],{"class":42},[36,21742,20881],{"class":101},[36,21744,897],{"class":42},[36,21746,20914],{"class":101},[36,21748,16710],{"class":42},[36,21750,1308],{"class":46},[36,21752,19544],{"class":42},[36,21754,20914],{"class":101},[36,21756,9329],{"class":42},[36,21758,21759,21761,21763,21765,21767,21769,21771,21773,21775,21777,21779],{"class":38,"line":685},[36,21760,18395],{"class":46},[36,21762,20931],{"class":42},[36,21764,47],{"class":46},[36,21766,20936],{"class":101},[36,21768,20939],{"class":42},[36,21770,1372],{"class":46},[36,21772,20874],{"class":42},[36,21774,4354],{"class":46},[36,21776,20903],{"class":42},[36,21778,1372],{"class":46},[36,21780,20952],{"class":42},[36,21782,21783,21785,21787,21789,21791,21793],{"class":38,"line":691},[36,21784,3752],{"class":46},[36,21786,20959],{"class":42},[36,21788,393],{"class":46},[36,21790,19998],{"class":42},[36,21792,20966],{"class":101},[36,21794,20969],{"class":42},[36,21796,21797],{"class":38,"line":696},[36,21798,5742],{"class":42},[36,21800,21801,21803,21805,21807,21809],{"class":38,"line":702},[36,21802,13349],{"class":42},[36,21804,4912],{"class":46},[36,21806,20982],{"class":105},[36,21808,5180],{"class":46},[36,21810,12521],{"class":42},[36,21812,21813],{"class":38,"line":708},[36,21814,5899],{"class":42},[36,21816,21817],{"class":38,"line":713},[36,21818,20461],{"class":46},[36,21820,21821],{"class":38,"line":719},[36,21822,5742],{"class":42},[36,21824,21825,21827,21829,21831,21833],{"class":38,"line":725},[36,21826,13349],{"class":42},[36,21828,4912],{"class":46},[36,21830,21007],{"class":105},[36,21832,5180],{"class":46},[36,21834,12521],{"class":42},[36,21836,21837],{"class":38,"line":731},[36,21838,5899],{"class":42},[36,21840,21841],{"class":38,"line":736},[36,21842,5300],{"class":42},[36,21844,21845,21847,21849],{"class":38,"line":742},[36,21846,1378],{"class":46},[36,21848,1823],{"class":101},[36,21850,903],{"class":42},[36,21852,21853],{"class":38,"line":748},[36,21854,5281],{"class":42},[36,21856,21857],{"class":38,"line":754},[36,21858,18709],{"class":3943},[36,21860,21861],{"class":38,"line":760},[36,21862,18456],{"class":42},[36,21864,21865],{"class":38,"line":766},[36,21866,21044],{"class":42},[36,21868,21869],{"class":38,"line":772},[36,21870,20618],{"class":3943},[36,21872,21873,21875,21877,21879],{"class":38,"line":778},[36,21874,5286],{"class":42},[36,21876,4912],{"class":46},[36,21878,21057],{"class":105},[36,21880,5029],{"class":42},[36,21882,21883,21885],{"class":38,"line":783},[36,21884,18395],{"class":46},[36,21886,21066],{"class":42},[36,21888,21889,21891,21893],{"class":38,"line":789},[36,21890,5724],{"class":42},[36,21892,5165],{"class":46},[36,21894,21075],{"class":42},[36,21896,21897,21899,21901],{"class":38,"line":795},[36,21898,20251],{"class":42},[36,21900,21082],{"class":101},[36,21902,21085],{"class":42},[36,21904,21905,21907,21909,21911],{"class":38,"line":801},[36,21906,5286],{"class":42},[36,21908,4912],{"class":46},[36,21910,21094],{"class":105},[36,21912,5029],{"class":42},[36,21914,21915,21917],{"class":38,"line":807},[36,21916,18395],{"class":46},[36,21918,21103],{"class":42},[36,21920,21921,21923,21925,21927,21929],{"class":38,"line":813},[36,21922,5724],{"class":42},[36,21924,5165],{"class":46},[36,21926,4690],{"class":42},[36,21928,5165],{"class":46},[36,21930,21116],{"class":42},[36,21932,21933,21935,21937],{"class":38,"line":819},[36,21934,21121],{"class":42},[36,21936,21124],{"class":101},[36,21938,21127],{"class":42},[36,21940,21941,21943,21945],{"class":38,"line":824},[36,21942,20251],{"class":42},[36,21944,21134],{"class":101},[36,21946,21137],{"class":42},[36,21948,21949,21951,21953,21955],{"class":38,"line":829},[36,21950,5286],{"class":42},[36,21952,4912],{"class":46},[36,21954,21146],{"class":105},[36,21956,5029],{"class":42},[36,21958,21959,21961],{"class":38,"line":851},[36,21960,18395],{"class":46},[36,21962,21155],{"class":42},[36,21964,21965,21967,21969,21971,21973],{"class":38,"line":868},[36,21966,5724],{"class":42},[36,21968,5165],{"class":46},[36,21970,21164],{"class":42},[36,21972,5165],{"class":46},[36,21974,21169],{"class":42},[36,21976,21977],{"class":38,"line":873},[36,21978,21174],{"class":42},[36,21980,21981,21983,21985],{"class":38,"line":891},[36,21982,21179],{"class":42},[36,21984,21124],{"class":101},[36,21986,21184],{"class":42},[36,21988,21989,21991],{"class":38,"line":906},[36,21990,21189],{"class":101},[36,21992,21192],{"class":42},[36,21994,21995],{"class":38,"line":925},[36,21996,5300],{"class":42},[14,21998,22000],{"id":21999},"_82对象的初始化清理","8.2对象的初始化清理",[4875,22002,22003,22006],{},[214,22004,22005],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[214,22007,22008],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[318,22010,22012],{"id":22011},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,22014,22015,22016,22019],{},"对象的",[4027,22017,22018],{},"初始化和清理","也是两个非常重要的安全问题",[19,22021,22022],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,22024,22025],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,22027,22028,22029,22032,22033,22036],{},"c++利用了",[4027,22030,22031],{},"构造函数","和",[4027,22034,22035],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,22038,22039,22040],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[4027,22041,22042],{},"我们不提供构造和析构，编译器会提供",[19,22044,22045],{},[4027,22046,22047],{},"编译器提供的构造函数和析构函数是空实现。",[4875,22049,22050,22053],{},[214,22051,22052],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[214,22054,22055,22056,22059],{},"析构函数：主要作用在于对象",[4027,22057,22058],{},"销毁前","系统自动调用，执行一些清理工作。",[19,22061,22062,22065],{},[4027,22063,22064],{},"构造函数语法：",[33,22066,22067],{},"类名(){}",[211,22069,22070,22073,22076,22079,22082],{},[214,22071,22072],{},"构造函数，没有返回值也不写void",[214,22074,22075],{},"函数名称与类名相同",[214,22077,22078],{},"构造函数可以有参数，因此可以发生重载",[214,22080,22081],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[214,22083,22084,22085,4304],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[33,22086,22087],{},"Person(){}",[19,22089,22090,17454,22093],{},[4027,22091,22092],{},"析构函数语法：",[33,22094,22095],{},"~类名(){}",[211,22097,22098,22101,22104,22110],{},[214,22099,22100],{},"析构函数，没有返回值也不写void",[214,22102,22103],{},"函数名称与类名相同,在名称前加上符号  ~",[214,22105,22106,22107],{},"析构函数不可以有参数，因此",[4027,22108,22109],{},"不可以发生重载",[214,22111,22112],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[26,22114,22116],{"className":3879,"code":22115,"language":3881,"meta":31,"style":31},"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",[33,22117,22118,22124,22128,22132,22137,22144,22148,22161,22165,22170,22177,22181,22194,22198,22202,22206,22210,22218,22222,22230,22234,22238,22246,22250,22255,22259,22266,22270,22283,22287,22295],{"__ignoreMap":31},[36,22119,22120,22122],{"class":38,"line":39},[36,22121,832],{"class":46},[36,22123,18827],{"class":101},[36,22125,22126],{"class":38,"line":53},[36,22127,5281],{"class":42},[36,22129,22130],{"class":38,"line":196},[36,22131,18373],{"class":46},[36,22133,22134],{"class":38,"line":642},[36,22135,22136],{"class":3943},"    \u002F\u002F构造函数\n",[36,22138,22139,22142],{"class":38,"line":655},[36,22140,22141],{"class":101},"    Person",[36,22143,903],{"class":42},[36,22145,22146],{"class":38,"line":662},[36,22147,5742],{"class":42},[36,22149,22150,22152,22154,22157,22159],{"class":38,"line":667},[36,22151,13349],{"class":42},[36,22153,4912],{"class":46},[36,22155,22156],{"class":105}," \"Person的构造函数调用\"",[36,22158,5180],{"class":46},[36,22160,12521],{"class":42},[36,22162,22163],{"class":38,"line":679},[36,22164,5899],{"class":42},[36,22166,22167],{"class":38,"line":685},[36,22168,22169],{"class":3943},"    \u002F\u002F析构函数\n",[36,22171,22172,22175],{"class":38,"line":691},[36,22173,22174],{"class":101},"    ~Person",[36,22176,903],{"class":42},[36,22178,22179],{"class":38,"line":696},[36,22180,5742],{"class":42},[36,22182,22183,22185,22187,22190,22192],{"class":38,"line":702},[36,22184,13349],{"class":42},[36,22186,4912],{"class":46},[36,22188,22189],{"class":105}," \"Person的析构函数调用\"",[36,22191,5180],{"class":46},[36,22193,12521],{"class":42},[36,22195,22196],{"class":38,"line":708},[36,22197,5899],{"class":42},[36,22199,22200],{"class":38,"line":713},[36,22201,659],{"emptyLinePlaceholder":658},[36,22203,22204],{"class":38,"line":719},[36,22205,7693],{"class":42},[36,22207,22208],{"class":38,"line":725},[36,22209,659],{"emptyLinePlaceholder":658},[36,22211,22212,22214,22216],{"class":38,"line":731},[36,22213,9057],{"class":46},[36,22215,9281],{"class":101},[36,22217,903],{"class":42},[36,22219,22220],{"class":38,"line":736},[36,22221,5281],{"class":42},[36,22223,22224,22227],{"class":38,"line":742},[36,22225,22226],{"class":42},"    Person p;",[36,22228,22229],{"class":3943},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[36,22231,22232],{"class":38,"line":748},[36,22233,5300],{"class":42},[36,22235,22236],{"class":38,"line":754},[36,22237,659],{"emptyLinePlaceholder":658},[36,22239,22240,22242,22244],{"class":38,"line":760},[36,22241,1378],{"class":46},[36,22243,1823],{"class":101},[36,22245,14514],{"class":42},[36,22247,22248],{"class":38,"line":766},[36,22249,16870],{"class":42},[36,22251,22252],{"class":38,"line":772},[36,22253,22254],{"class":3943},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[36,22256,22257],{"class":38,"line":778},[36,22258,659],{"emptyLinePlaceholder":658},[36,22260,22261,22263],{"class":38,"line":783},[36,22262,22226],{"class":42},[36,22264,22265],{"class":3943},"\u002F\u002F只有构造函数\n",[36,22267,22268],{"class":38,"line":789},[36,22269,659],{"emptyLinePlaceholder":658},[36,22271,22272,22274,22276,22278,22280],{"class":38,"line":795},[36,22273,6015],{"class":101},[36,22275,495],{"class":42},[36,22277,6020],{"class":105},[36,22279,9659],{"class":42},[36,22281,22282],{"class":3943},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[36,22284,22285],{"class":38,"line":801},[36,22286,659],{"emptyLinePlaceholder":658},[36,22288,22289,22291,22293],{"class":38,"line":807},[36,22290,7788],{"class":46},[36,22292,1004],{"class":112},[36,22294,5029],{"class":42},[36,22296,22297],{"class":38,"line":813},[36,22298,5300],{"class":42},[19,22300,22301],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[318,22303,22305],{"id":22304},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,22307,22308],{},"两种分类方式：",[19,22310,22311],{},"​\t按参数分为： 有参构造和无参构造",[19,22313,22314],{},"​\t按类型分为： 普通构造和拷贝构造",[19,22316,22317],{},"三种调用方式：",[19,22319,22320],{},"​\t括号法",[19,22322,22323],{},"​\t显示法",[19,22325,22326],{},"​\t隐式转换法",[26,22328,22330],{"className":3879,"code":22329,"language":3881,"meta":31,"style":31},"#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",[33,22331,22332,22338,22348,22353,22358,22363,22368,22372,22380,22384,22388,22392,22398,22402,22415,22419,22431,22435,22444,22457,22461,22465,22471,22475,22488,22492,22497,22513,22517,22522,22531,22544,22548,22554,22558,22563,22571,22575,22580,22584,22592,22596,22601,22606,22611,22616,22621,22625,22630,22635,22640,22645,22649,22654,22659,22675,22687,22692,22696,22701,22706,22711,22715,22720,22734,22747,22751,22759,22763,22769,22775,22783],{"__ignoreMap":31},[36,22333,22334,22336],{"class":38,"line":39},[36,22335,5664],{"class":46},[36,22337,5667],{"class":105},[36,22339,22340,22342,22344,22346],{"class":38,"line":53},[36,22341,5672],{"class":46},[36,22343,5675],{"class":46},[36,22345,5678],{"class":101},[36,22347,5029],{"class":42},[36,22349,22350],{"class":38,"line":196},[36,22351,22352],{"class":3943},"\u002F\u002F1.构造函数的分类及调用\n",[36,22354,22355],{"class":38,"line":642},[36,22356,22357],{"class":3943},"\u002F\u002F分类\n",[36,22359,22360],{"class":38,"line":655},[36,22361,22362],{"class":3943},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[36,22364,22365],{"class":38,"line":662},[36,22366,22367],{"class":3943},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[36,22369,22370],{"class":38,"line":667},[36,22371,659],{"emptyLinePlaceholder":658},[36,22373,22374,22376,22378],{"class":38,"line":679},[36,22375,832],{"class":46},[36,22377,19225],{"class":101},[36,22379,6377],{"class":42},[36,22381,22382],{"class":38,"line":685},[36,22383,5281],{"class":42},[36,22385,22386],{"class":38,"line":691},[36,22387,18373],{"class":46},[36,22389,22390],{"class":38,"line":696},[36,22391,22136],{"class":3943},[36,22393,22394,22396],{"class":38,"line":702},[36,22395,22141],{"class":101},[36,22397,903],{"class":42},[36,22399,22400],{"class":38,"line":708},[36,22401,5742],{"class":42},[36,22403,22404,22406,22408,22411,22413],{"class":38,"line":713},[36,22405,7150],{"class":42},[36,22407,4912],{"class":46},[36,22409,22410],{"class":105},"\"Person构造函数无参构造\"",[36,22412,4912],{"class":46},[36,22414,4934],{"class":42},[36,22416,22417],{"class":38,"line":719},[36,22418,5899],{"class":42},[36,22420,22421,22423,22425,22427,22429],{"class":38,"line":725},[36,22422,22141],{"class":101},[36,22424,495],{"class":42},[36,22426,1378],{"class":46},[36,22428,5134],{"class":468},[36,22430,922],{"class":42},[36,22432,22433],{"class":38,"line":731},[36,22434,5742],{"class":42},[36,22436,22437,22440,22442],{"class":38,"line":736},[36,22438,22439],{"class":42},"        age",[36,22441,47],{"class":46},[36,22443,9890],{"class":42},[36,22445,22446,22448,22450,22453,22455],{"class":38,"line":742},[36,22447,7150],{"class":42},[36,22449,4912],{"class":46},[36,22451,22452],{"class":105},"\"Person构造函数有参构造\"",[36,22454,4912],{"class":46},[36,22456,4934],{"class":42},[36,22458,22459],{"class":38,"line":748},[36,22460,5899],{"class":42},[36,22462,22463],{"class":38,"line":754},[36,22464,22169],{"class":3943},[36,22466,22467,22469],{"class":38,"line":760},[36,22468,22174],{"class":101},[36,22470,903],{"class":42},[36,22472,22473],{"class":38,"line":766},[36,22474,5742],{"class":42},[36,22476,22477,22479,22481,22484,22486],{"class":38,"line":772},[36,22478,7150],{"class":42},[36,22480,4912],{"class":46},[36,22482,22483],{"class":105},"\"Person析构函数被调用\"",[36,22485,4912],{"class":46},[36,22487,4934],{"class":42},[36,22489,22490],{"class":38,"line":778},[36,22491,5899],{"class":42},[36,22493,22494],{"class":38,"line":783},[36,22495,22496],{"class":3943},"    \u002F\u002F拷贝构造函数\n",[36,22498,22499,22501,22503,22505,22507,22509,22511],{"class":38,"line":789},[36,22500,22141],{"class":101},[36,22502,495],{"class":42},[36,22504,10483],{"class":46},[36,22506,19225],{"class":101},[36,22508,14245],{"class":46},[36,22510,19],{"class":468},[36,22512,922],{"class":42},[36,22514,22515],{"class":38,"line":795},[36,22516,5742],{"class":42},[36,22518,22519],{"class":38,"line":801},[36,22520,22521],{"class":3943},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[36,22523,22524,22526,22528],{"class":38,"line":807},[36,22525,22439],{"class":42},[36,22527,47],{"class":46},[36,22529,22530],{"class":42},"p.age;\n",[36,22532,22533,22535,22537,22540,22542],{"class":38,"line":813},[36,22534,7150],{"class":42},[36,22536,4912],{"class":46},[36,22538,22539],{"class":105},"\"Person拷贝构造函数被调用\"",[36,22541,4912],{"class":46},[36,22543,4934],{"class":42},[36,22545,22546],{"class":38,"line":819},[36,22547,5899],{"class":42},[36,22549,22550,22552],{"class":38,"line":824},[36,22551,5697],{"class":46},[36,22553,11488],{"class":42},[36,22555,22556],{"class":38,"line":829},[36,22557,7693],{"class":42},[36,22559,22560],{"class":38,"line":851},[36,22561,22562],{"class":3943},"\u002F\u002F调用\n",[36,22564,22565,22567,22569],{"class":38,"line":868},[36,22566,9057],{"class":46},[36,22568,9281],{"class":101},[36,22570,903],{"class":42},[36,22572,22573],{"class":38,"line":873},[36,22574,5281],{"class":42},[36,22576,22577],{"class":38,"line":891},[36,22578,22579],{"class":3943},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[36,22581,22582],{"class":38,"line":906},[36,22583,5300],{"class":42},[36,22585,22586,22588,22590],{"class":38,"line":925},[36,22587,9057],{"class":46},[36,22589,9350],{"class":101},[36,22591,903],{"class":42},[36,22593,22594],{"class":38,"line":943},[36,22595,5281],{"class":42},[36,22597,22598],{"class":38,"line":948},[36,22599,22600],{"class":3943},"    \u002F\u002F1.括号法\n",[36,22602,22603],{"class":38,"line":971},[36,22604,22605],{"class":3943},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[36,22607,22608],{"class":38,"line":992},[36,22609,22610],{"class":3943},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[36,22612,22613],{"class":38,"line":1020},[36,22614,22615],{"class":3943},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[36,22617,22618],{"class":38,"line":1036},[36,22619,22620],{"class":3943},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[36,22622,22623],{"class":38,"line":1041},[36,22624,659],{"emptyLinePlaceholder":658},[36,22626,22627],{"class":38,"line":1052},[36,22628,22629],{"class":3943},"    \u002F\u002F注意事项\n",[36,22631,22632],{"class":38,"line":1065},[36,22633,22634],{"class":3943},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[36,22636,22637],{"class":38,"line":1077},[36,22638,22639],{"class":3943},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[36,22641,22642],{"class":38,"line":1082},[36,22643,22644],{"class":3943},"    \u002F\u002F Person p4();\n",[36,22646,22647],{"class":38,"line":1125},[36,22648,659],{"emptyLinePlaceholder":658},[36,22650,22651],{"class":38,"line":1164},[36,22652,22653],{"class":3943},"    \u002F\u002F2.显示法\n",[36,22655,22656],{"class":38,"line":1169},[36,22657,22658],{"class":42},"    Person p1;\n",[36,22660,22661,22664,22666,22669,22671,22673],{"class":38,"line":1180},[36,22662,22663],{"class":42},"    Person p2",[36,22665,47],{"class":46},[36,22667,22668],{"class":101},"Person",[36,22670,495],{"class":42},[36,22672,554],{"class":112},[36,22674,6422],{"class":42},[36,22676,22677,22680,22682,22684],{"class":38,"line":1198},[36,22678,22679],{"class":42},"    Person p3",[36,22681,47],{"class":46},[36,22683,22668],{"class":101},[36,22685,22686],{"class":42},"(p2);\n",[36,22688,22689],{"class":38,"line":1215},[36,22690,22691],{"class":3943},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[36,22693,22694],{"class":38,"line":1236},[36,22695,659],{"emptyLinePlaceholder":658},[36,22697,22698],{"class":38,"line":1245},[36,22699,22700],{"class":3943},"    \u002F\u002F 注意事项2\n",[36,22702,22703],{"class":38,"line":1250},[36,22704,22705],{"class":3943},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[36,22707,22708],{"class":38,"line":1265},[36,22709,22710],{"class":3943},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[36,22712,22713],{"class":38,"line":1281},[36,22714,659],{"emptyLinePlaceholder":658},[36,22716,22717],{"class":38,"line":1297},[36,22718,22719],{"class":3943},"    \u002F\u002F3.隐士转换法\n",[36,22721,22722,22725,22727,22729,22731],{"class":38,"line":1314},[36,22723,22724],{"class":42},"    Person p4",[36,22726,47],{"class":46},[36,22728,554],{"class":112},[36,22730,3940],{"class":42},[36,22732,22733],{"class":3943},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[36,22735,22736,22739,22741,22744],{"class":38,"line":1336},[36,22737,22738],{"class":42},"    Person p5",[36,22740,47],{"class":46},[36,22742,22743],{"class":42},"p4;",[36,22745,22746],{"class":3943}," \u002F\u002F 这里会调用拷贝构造函数\n",[36,22748,22749],{"class":38,"line":1356},[36,22750,5300],{"class":42},[36,22752,22753,22755,22757],{"class":38,"line":1361},[36,22754,1378],{"class":46},[36,22756,1823],{"class":101},[36,22758,903],{"class":42},[36,22760,22761],{"class":38,"line":1407},[36,22762,5281],{"class":42},[36,22764,22765,22767],{"class":38,"line":1423},[36,22766,9326],{"class":101},[36,22768,9329],{"class":42},[36,22770,22771,22773],{"class":38,"line":1439},[36,22772,9395],{"class":101},[36,22774,9329],{"class":42},[36,22776,22777,22779,22781],{"class":38,"line":1444},[36,22778,7788],{"class":46},[36,22780,1004],{"class":112},[36,22782,5029],{"class":42},[36,22784,22785],{"class":38,"line":1486},[36,22786,5300],{"class":42},[19,22788,22789,22792],{},[4027,22790,22791],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[318,22794,22796],{"id":22795},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,22798,22799],{},"C++中拷贝构造函数调用时机通常有三种情况",[4875,22801,22802,22805,22808],{},[214,22803,22804],{},"使用一个已经创建完毕的对象来初始化一个新对象",[214,22806,22807],{},"值传递的方式给函数参数传值",[214,22809,22810],{},"以值方式返回局部对象",[26,22812,22814],{"className":3879,"code":22813,"language":3881,"meta":31,"style":31},"#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",[33,22815,22816,22822,22832,22836,22841,22845,22850,22855,22860,22866,22870,22874,22880,22884,22897,22901,22906,22918,22922,22930,22943,22947,22951,22967,22971,22980,22993,22997,23003,23007,23019,23023,23029,23033,23037,23045,23049,23062,23070,23088,23092,23097,23102,23117,23121,23134,23138,23146,23150,23154,23162,23166,23171,23180,23184,23188,23213,23223,23227,23235,23239,23250,23275,23279,23283,23287,23295,23299,23304,23309,23316,23321,23326,23331,23336,23340,23345,23349,23354,23358,23363,23368,23372,23376,23381,23386,23394],{"__ignoreMap":31},[36,22817,22818,22820],{"class":38,"line":39},[36,22819,5664],{"class":46},[36,22821,5667],{"class":105},[36,22823,22824,22826,22828,22830],{"class":38,"line":53},[36,22825,5672],{"class":46},[36,22827,5675],{"class":46},[36,22829,5678],{"class":101},[36,22831,5029],{"class":42},[36,22833,22834],{"class":38,"line":196},[36,22835,659],{"emptyLinePlaceholder":658},[36,22837,22838],{"class":38,"line":642},[36,22839,22840],{"class":3943},"\u002F\u002F拷贝构造函数调用时机\n",[36,22842,22843],{"class":38,"line":655},[36,22844,659],{"emptyLinePlaceholder":658},[36,22846,22847],{"class":38,"line":662},[36,22848,22849],{"class":3943},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[36,22851,22852],{"class":38,"line":667},[36,22853,22854],{"class":3943},"\u002F\u002F2.值传递的方式给函数参数传值\n",[36,22856,22857],{"class":38,"line":679},[36,22858,22859],{"class":3943},"\u002F\u002F3.以值方式返回局部对象\n",[36,22861,22862,22864],{"class":38,"line":685},[36,22863,832],{"class":46},[36,22865,18827],{"class":101},[36,22867,22868],{"class":38,"line":691},[36,22869,5281],{"class":42},[36,22871,22872],{"class":38,"line":696},[36,22873,18373],{"class":46},[36,22875,22876,22878],{"class":38,"line":702},[36,22877,22141],{"class":101},[36,22879,903],{"class":42},[36,22881,22882],{"class":38,"line":708},[36,22883,5742],{"class":42},[36,22885,22886,22888,22890,22893,22895],{"class":38,"line":713},[36,22887,13349],{"class":42},[36,22889,4912],{"class":46},[36,22891,22892],{"class":105}," \"Person的默认构造函数调用\"",[36,22894,5180],{"class":46},[36,22896,12521],{"class":42},[36,22898,22899],{"class":38,"line":719},[36,22900,5899],{"class":42},[36,22902,22903],{"class":38,"line":725},[36,22904,22905],{"class":3943},"    \u002F\u002F有参构造\n",[36,22907,22908,22910,22912,22914,22916],{"class":38,"line":731},[36,22909,22141],{"class":101},[36,22911,495],{"class":42},[36,22913,1378],{"class":46},[36,22915,19345],{"class":468},[36,22917,922],{"class":42},[36,22919,22920],{"class":38,"line":736},[36,22921,5742],{"class":42},[36,22923,22924,22926,22928],{"class":38,"line":742},[36,22925,19399],{"class":42},[36,22927,47],{"class":46},[36,22929,11488],{"class":42},[36,22931,22932,22934,22936,22939,22941],{"class":38,"line":748},[36,22933,13349],{"class":42},[36,22935,4912],{"class":46},[36,22937,22938],{"class":105}," \"Person的有参构造函数调用\"",[36,22940,5180],{"class":46},[36,22942,12521],{"class":42},[36,22944,22945],{"class":38,"line":754},[36,22946,5899],{"class":42},[36,22948,22949],{"class":38,"line":760},[36,22950,22496],{"class":3943},[36,22952,22953,22955,22957,22959,22961,22963,22965],{"class":38,"line":766},[36,22954,22141],{"class":101},[36,22956,495],{"class":42},[36,22958,10483],{"class":46},[36,22960,19225],{"class":101},[36,22962,14245],{"class":46},[36,22964,19],{"class":468},[36,22966,922],{"class":42},[36,22968,22969],{"class":38,"line":772},[36,22970,5742],{"class":42},[36,22972,22973,22975,22977],{"class":38,"line":778},[36,22974,19399],{"class":42},[36,22976,47],{"class":46},[36,22978,22979],{"class":42}," p.m_Age;\n",[36,22981,22982,22984,22986,22989,22991],{"class":38,"line":783},[36,22983,13349],{"class":42},[36,22985,4912],{"class":46},[36,22987,22988],{"class":105}," \"Person的拷贝构造函数调用\"",[36,22990,5180],{"class":46},[36,22992,12521],{"class":42},[36,22994,22995],{"class":38,"line":789},[36,22996,5899],{"class":42},[36,22998,22999,23001],{"class":38,"line":795},[36,23000,22174],{"class":101},[36,23002,903],{"class":42},[36,23004,23005],{"class":38,"line":801},[36,23006,5742],{"class":42},[36,23008,23009,23011,23013,23015,23017],{"class":38,"line":807},[36,23010,13349],{"class":42},[36,23012,4912],{"class":46},[36,23014,22189],{"class":105},[36,23016,5180],{"class":46},[36,23018,12521],{"class":42},[36,23020,23021],{"class":38,"line":813},[36,23022,5899],{"class":42},[36,23024,23025,23027],{"class":38,"line":819},[36,23026,5697],{"class":46},[36,23028,19322],{"class":42},[36,23030,23031],{"class":38,"line":824},[36,23032,7693],{"class":42},[36,23034,23035],{"class":38,"line":829},[36,23036,22849],{"class":3943},[36,23038,23039,23041,23043],{"class":38,"line":851},[36,23040,9057],{"class":46},[36,23042,9281],{"class":101},[36,23044,903],{"class":42},[36,23046,23047],{"class":38,"line":868},[36,23048,5281],{"class":42},[36,23050,23051,23054,23056,23058,23060],{"class":38,"line":873},[36,23052,23053],{"class":42},"    Person ",[36,23055,10821],{"class":101},[36,23057,495],{"class":42},[36,23059,1921],{"class":112},[36,23061,6422],{"class":42},[36,23063,23064,23066,23068],{"class":38,"line":891},[36,23065,23053],{"class":42},[36,23067,10724],{"class":101},[36,23069,21137],{"class":42},[36,23071,23072,23074,23076,23079,23081,23084,23086],{"class":38,"line":906},[36,23073,5286],{"class":42},[36,23075,4912],{"class":46},[36,23077,23078],{"class":105},"\"P2的年龄为：\"",[36,23080,4912],{"class":46},[36,23082,23083],{"class":42},"p2.m_Age",[36,23085,4912],{"class":46},[36,23087,4934],{"class":42},[36,23089,23090],{"class":38,"line":925},[36,23091,5300],{"class":42},[36,23093,23094],{"class":38,"line":943},[36,23095,23096],{"class":3943},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[36,23098,23099],{"class":38,"line":948},[36,23100,23101],{"class":3943},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[36,23103,23104,23106,23109,23111,23113,23115],{"class":38,"line":971},[36,23105,9057],{"class":46},[36,23107,23108],{"class":101}," doWork",[36,23110,495],{"class":42},[36,23112,22668],{"class":101},[36,23114,10516],{"class":468},[36,23116,922],{"class":42},[36,23118,23119],{"class":38,"line":992},[36,23120,5281],{"class":42},[36,23122,23123,23125,23127,23130,23132],{"class":38,"line":1020},[36,23124,10220],{"class":42},[36,23126,4912],{"class":46},[36,23128,23129],{"class":105}," \"doWork函数调用\"",[36,23131,5180],{"class":46},[36,23133,12521],{"class":42},[36,23135,23136],{"class":38,"line":1036},[36,23137,5300],{"class":42},[36,23139,23140,23142,23144],{"class":38,"line":1041},[36,23141,9057],{"class":46},[36,23143,9350],{"class":101},[36,23145,903],{"class":42},[36,23147,23148],{"class":38,"line":1052},[36,23149,5281],{"class":42},[36,23151,23152],{"class":38,"line":1065},[36,23153,18969],{"class":42},[36,23155,23156,23159],{"class":38,"line":1077},[36,23157,23158],{"class":101},"    doWork",[36,23160,23161],{"class":42},"(p);\n",[36,23163,23164],{"class":38,"line":1082},[36,23165,5300],{"class":42},[36,23167,23168],{"class":38,"line":1125},[36,23169,23170],{"class":3943},"\u002F\u002F 3.以值方式返回局部对象\n",[36,23172,23173,23175,23178],{"class":38,"line":1164},[36,23174,22668],{"class":101},[36,23176,23177],{"class":101}," doWork2",[36,23179,903],{"class":42},[36,23181,23182],{"class":38,"line":1169},[36,23183,5281],{"class":42},[36,23185,23186],{"class":38,"line":1180},[36,23187,22658],{"class":42},[36,23189,23190,23192,23194,23196,23198,23200,23202,23204,23206,23208,23210],{"class":38,"line":1198},[36,23191,5286],{"class":42},[36,23193,4912],{"class":46},[36,23195,495],{"class":42},[36,23197,1378],{"class":46},[36,23199,1325],{"class":46},[36,23201,4304],{"class":42},[36,23203,4228],{"class":46},[36,23205,10821],{"class":42},[36,23207,4912],{"class":46},[36,23209,4977],{"class":42},[36,23211,23212],{"class":3943},"\u002F\u002F打印p1的地址\n",[36,23214,23215,23217,23220],{"class":38,"line":1215},[36,23216,7788],{"class":46},[36,23218,23219],{"class":42}," p1;",[36,23221,23222],{"class":3943},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[36,23224,23225],{"class":38,"line":1236},[36,23226,5300],{"class":42},[36,23228,23229,23231,23233],{"class":38,"line":1245},[36,23230,9057],{"class":46},[36,23232,9422],{"class":101},[36,23234,903],{"class":42},[36,23236,23237],{"class":38,"line":1250},[36,23238,5281],{"class":42},[36,23240,23241,23244,23246,23248],{"class":38,"line":1265},[36,23242,23243],{"class":42},"    Person p ",[36,23245,47],{"class":46},[36,23247,23177],{"class":101},[36,23249,9329],{"class":42},[36,23251,23252,23254,23256,23258,23260,23262,23264,23266,23268,23270,23272],{"class":38,"line":1281},[36,23253,5286],{"class":42},[36,23255,4912],{"class":46},[36,23257,495],{"class":42},[36,23259,1378],{"class":46},[36,23261,1325],{"class":46},[36,23263,4304],{"class":42},[36,23265,4228],{"class":46},[36,23267,19],{"class":42},[36,23269,4912],{"class":46},[36,23271,4977],{"class":42},[36,23273,23274],{"class":3943},"\u002F\u002F打印p的地址\n",[36,23276,23277],{"class":38,"line":1297},[36,23278,5300],{"class":42},[36,23280,23281],{"class":38,"line":1314},[36,23282,659],{"emptyLinePlaceholder":658},[36,23284,23285],{"class":38,"line":1336},[36,23286,659],{"emptyLinePlaceholder":658},[36,23288,23289,23291,23293],{"class":38,"line":1356},[36,23290,1378],{"class":46},[36,23292,1823],{"class":101},[36,23294,903],{"class":42},[36,23296,23297],{"class":38,"line":1361},[36,23298,5281],{"class":42},[36,23300,23301],{"class":38,"line":1407},[36,23302,23303],{"class":3943},"    \u002F\u002F test01();\n",[36,23305,23306],{"class":38,"line":1423},[36,23307,23308],{"class":3943},"    \u002F\u002F test02();\n",[36,23310,23311,23314],{"class":38,"line":1439},[36,23312,23313],{"class":101},"    test03",[36,23315,9329],{"class":42},[36,23317,23318],{"class":38,"line":1444},[36,23319,23320],{"class":3943},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[36,23322,23323],{"class":38,"line":1486},[36,23324,23325],{"class":3943},"\u002F\u002F 输出结果如下：\n",[36,23327,23328],{"class":38,"line":1499},[36,23329,23330],{"class":3943},"\u002F\u002F Person的默认构造函数调用\n",[36,23332,23333],{"class":38,"line":1513},[36,23334,23335],{"class":3943},"\u002F\u002F 0x7fffffffceec\n",[36,23337,23338],{"class":38,"line":1518},[36,23339,23335],{"class":3943},[36,23341,23342],{"class":38,"line":1529},[36,23343,23344],{"class":3943},"\u002F\u002F Person的析构函数调用\n",[36,23346,23347],{"class":38,"line":1539},[36,23348,659],{"emptyLinePlaceholder":658},[36,23350,23351],{"class":38,"line":1544},[36,23352,23353],{"class":3943},"\u002F\u002F 之前的输出结果如下：\n",[36,23355,23356],{"class":38,"line":1555},[36,23357,23330],{"class":3943},[36,23359,23360],{"class":38,"line":1572},[36,23361,23362],{"class":3943},"\u002F\u002F 地址\n",[36,23364,23365],{"class":38,"line":1592},[36,23366,23367],{"class":3943},"\u002F\u002F Person的拷贝构造函数调用\n",[36,23369,23370],{"class":38,"line":1597},[36,23371,23344],{"class":3943},[36,23373,23374],{"class":38,"line":1610},[36,23375,23362],{"class":3943},[36,23377,23378],{"class":38,"line":1632},[36,23379,23380],{"class":3943},"\u002F\u002F (这两次输出的地址也是不同的) \n",[36,23382,23383],{"class":38,"line":1646},[36,23384,23385],{"class":3943},"\u002F\u002F Person的析构函数调用     \n",[36,23387,23388,23390,23392],{"class":38,"line":1651},[36,23389,7788],{"class":46},[36,23391,1004],{"class":112},[36,23393,5029],{"class":42},[36,23395,23396],{"class":38,"line":1664},[36,23397,5300],{"class":42},[19,23399,23400],{},"简化版理解",[26,23402,23404],{"className":3879,"code":23403,"language":3881,"meta":31,"style":31},"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",[33,23405,23406,23414,23418,23424,23437,23448,23452,23464,23477,23485,23489,23505,23518,23527,23531,23536,23542,23555,23559,23563,23570,23574,23578,23583,23591,23595,23611,23624,23637,23641,23646,23654,23658,23662,23667,23672,23688,23696,23703,23709,23713,23717,23722,23730,23734,23738,23761,23768,23772,23776,23784,23788,23798,23820,23824,23828,23832,23840,23844,23849,23854,23860,23864,23874,23878,23886],{"__ignoreMap":31},[36,23407,23408,23410,23412],{"class":38,"line":39},[36,23409,832],{"class":46},[36,23411,19225],{"class":101},[36,23413,19228],{"class":42},[36,23415,23416],{"class":38,"line":53},[36,23417,18373],{"class":46},[36,23419,23420,23422],{"class":38,"line":196},[36,23421,22141],{"class":101},[36,23423,14514],{"class":42},[36,23425,23426,23428,23430,23433,23435],{"class":38,"line":642},[36,23427,13349],{"class":42},[36,23429,4912],{"class":46},[36,23431,23432],{"class":105}," \"无参构造函数!\"",[36,23434,5180],{"class":46},[36,23436,12521],{"class":42},[36,23438,23439,23442,23444,23446],{"class":38,"line":655},[36,23440,23441],{"class":42},"        mAge ",[36,23443,47],{"class":46},[36,23445,1004],{"class":112},[36,23447,5029],{"class":42},[36,23449,23450],{"class":38,"line":662},[36,23451,5899],{"class":42},[36,23453,23454,23456,23458,23460,23462],{"class":38,"line":667},[36,23455,22141],{"class":101},[36,23457,495],{"class":42},[36,23459,1378],{"class":46},[36,23461,19345],{"class":468},[36,23463,16102],{"class":42},[36,23465,23466,23468,23470,23473,23475],{"class":38,"line":679},[36,23467,13349],{"class":42},[36,23469,4912],{"class":46},[36,23471,23472],{"class":105}," \"有参构造函数!\"",[36,23474,5180],{"class":46},[36,23476,12521],{"class":42},[36,23478,23479,23481,23483],{"class":38,"line":685},[36,23480,23441],{"class":42},[36,23482,47],{"class":46},[36,23484,11488],{"class":42},[36,23486,23487],{"class":38,"line":691},[36,23488,5899],{"class":42},[36,23490,23491,23493,23495,23497,23499,23501,23503],{"class":38,"line":696},[36,23492,22141],{"class":101},[36,23494,495],{"class":42},[36,23496,10483],{"class":46},[36,23498,19225],{"class":101},[36,23500,4228],{"class":46},[36,23502,10516],{"class":468},[36,23504,16102],{"class":42},[36,23506,23507,23509,23511,23514,23516],{"class":38,"line":702},[36,23508,13349],{"class":42},[36,23510,4912],{"class":46},[36,23512,23513],{"class":105}," \"拷贝构造函数!\"",[36,23515,5180],{"class":46},[36,23517,12521],{"class":42},[36,23519,23520,23522,23524],{"class":38,"line":708},[36,23521,23441],{"class":42},[36,23523,47],{"class":46},[36,23525,23526],{"class":42}," p.mAge;\n",[36,23528,23529],{"class":38,"line":713},[36,23530,5899],{"class":42},[36,23532,23533],{"class":38,"line":719},[36,23534,23535],{"class":3943},"    \u002F\u002F析构函数在释放内存之前调用\n",[36,23537,23538,23540],{"class":38,"line":725},[36,23539,22174],{"class":101},[36,23541,14514],{"class":42},[36,23543,23544,23546,23548,23551,23553],{"class":38,"line":731},[36,23545,13349],{"class":42},[36,23547,4912],{"class":46},[36,23549,23550],{"class":105}," \"析构函数!\"",[36,23552,5180],{"class":46},[36,23554,12521],{"class":42},[36,23556,23557],{"class":38,"line":736},[36,23558,5899],{"class":42},[36,23560,23561],{"class":38,"line":742},[36,23562,18373],{"class":46},[36,23564,23565,23567],{"class":38,"line":748},[36,23566,5697],{"class":46},[36,23568,23569],{"class":42}," mAge;\n",[36,23571,23572],{"class":38,"line":754},[36,23573,7693],{"class":42},[36,23575,23576],{"class":38,"line":760},[36,23577,659],{"emptyLinePlaceholder":658},[36,23579,23580],{"class":38,"line":766},[36,23581,23582],{"class":3943},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[36,23584,23585,23587,23589],{"class":38,"line":772},[36,23586,9057],{"class":46},[36,23588,9281],{"class":101},[36,23590,14514],{"class":42},[36,23592,23593],{"class":38,"line":778},[36,23594,659],{"emptyLinePlaceholder":658},[36,23596,23597,23599,23602,23604,23606,23608],{"class":38,"line":783},[36,23598,23053],{"class":42},[36,23600,23601],{"class":101},"man",[36,23603,495],{"class":42},[36,23605,4186],{"class":112},[36,23607,9659],{"class":42},[36,23609,23610],{"class":3943}," \u002F\u002Fp对象已经创建完毕\n",[36,23612,23613,23615,23618,23621],{"class":38,"line":789},[36,23614,23053],{"class":42},[36,23616,23617],{"class":101},"newman",[36,23619,23620],{"class":42},"(man);",[36,23622,23623],{"class":3943}," \u002F\u002F调用拷贝构造函数\n",[36,23625,23626,23629,23631,23634],{"class":38,"line":795},[36,23627,23628],{"class":42},"    Person newman2 ",[36,23630,47],{"class":46},[36,23632,23633],{"class":42}," man;",[36,23635,23636],{"class":3943}," \u002F\u002F拷贝构造\n",[36,23638,23639],{"class":38,"line":801},[36,23640,659],{"emptyLinePlaceholder":658},[36,23642,23643],{"class":38,"line":807},[36,23644,23645],{"class":3943},"    \u002F\u002FPerson newman3;\n",[36,23647,23648,23651],{"class":38,"line":813},[36,23649,23650],{"class":3943},"    \u002F\u002Fnewman3 = man;",[36,23652,23653],{"class":3943}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[36,23655,23656],{"class":38,"line":819},[36,23657,5300],{"class":42},[36,23659,23660],{"class":38,"line":824},[36,23661,659],{"emptyLinePlaceholder":658},[36,23663,23664],{"class":38,"line":829},[36,23665,23666],{"class":3943},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[36,23668,23669],{"class":38,"line":851},[36,23670,23671],{"class":3943},"\u002F\u002F相当于Person p1 = p;\n",[36,23673,23674,23676,23678,23680,23682,23685],{"class":38,"line":868},[36,23675,9057],{"class":46},[36,23677,23108],{"class":101},[36,23679,495],{"class":42},[36,23681,22668],{"class":101},[36,23683,23684],{"class":468}," p1",[36,23686,23687],{"class":42},") {}\n",[36,23689,23690,23692,23694],{"class":38,"line":873},[36,23691,9057],{"class":46},[36,23693,9350],{"class":101},[36,23695,14514],{"class":42},[36,23697,23698,23700],{"class":38,"line":891},[36,23699,22226],{"class":42},[36,23701,23702],{"class":3943}," \u002F\u002F无参构造函数\n",[36,23704,23705,23707],{"class":38,"line":906},[36,23706,23158],{"class":101},[36,23708,23161],{"class":42},[36,23710,23711],{"class":38,"line":925},[36,23712,5300],{"class":42},[36,23714,23715],{"class":38,"line":943},[36,23716,659],{"emptyLinePlaceholder":658},[36,23718,23719],{"class":38,"line":948},[36,23720,23721],{"class":3943},"\u002F\u002F3. 以值方式返回局部对象\n",[36,23723,23724,23726,23728],{"class":38,"line":971},[36,23725,22668],{"class":101},[36,23727,23177],{"class":101},[36,23729,903],{"class":42},[36,23731,23732],{"class":38,"line":992},[36,23733,5281],{"class":42},[36,23735,23736],{"class":38,"line":1020},[36,23737,22658],{"class":42},[36,23739,23740,23742,23744,23746,23748,23750,23752,23754,23757,23759],{"class":38,"line":1036},[36,23741,10220],{"class":42},[36,23743,4912],{"class":46},[36,23745,5386],{"class":42},[36,23747,1378],{"class":46},[36,23749,1325],{"class":46},[36,23751,4304],{"class":42},[36,23753,4228],{"class":46},[36,23755,23756],{"class":42},"p1 ",[36,23758,4912],{"class":46},[36,23760,12521],{"class":42},[36,23762,23763,23765],{"class":38,"line":1041},[36,23764,7788],{"class":46},[36,23766,23767],{"class":42}," p1;\n",[36,23769,23770],{"class":38,"line":1052},[36,23771,5300],{"class":42},[36,23773,23774],{"class":38,"line":1065},[36,23775,659],{"emptyLinePlaceholder":658},[36,23777,23778,23780,23782],{"class":38,"line":1077},[36,23779,9057],{"class":46},[36,23781,9422],{"class":101},[36,23783,903],{"class":42},[36,23785,23786],{"class":38,"line":1082},[36,23787,5281],{"class":42},[36,23789,23790,23792,23794,23796],{"class":38,"line":1125},[36,23791,23243],{"class":42},[36,23793,47],{"class":46},[36,23795,23177],{"class":101},[36,23797,9329],{"class":42},[36,23799,23800,23802,23804,23806,23808,23810,23812,23814,23816,23818],{"class":38,"line":1164},[36,23801,10220],{"class":42},[36,23803,4912],{"class":46},[36,23805,5386],{"class":42},[36,23807,1378],{"class":46},[36,23809,1325],{"class":46},[36,23811,4304],{"class":42},[36,23813,4228],{"class":46},[36,23815,15109],{"class":42},[36,23817,4912],{"class":46},[36,23819,12521],{"class":42},[36,23821,23822],{"class":38,"line":1169},[36,23823,5300],{"class":42},[36,23825,23826],{"class":38,"line":1180},[36,23827,659],{"emptyLinePlaceholder":658},[36,23829,23830],{"class":38,"line":1198},[36,23831,659],{"emptyLinePlaceholder":658},[36,23833,23834,23836,23838],{"class":38,"line":1215},[36,23835,1378],{"class":46},[36,23837,1823],{"class":101},[36,23839,14514],{"class":42},[36,23841,23842],{"class":38,"line":1236},[36,23843,659],{"emptyLinePlaceholder":658},[36,23845,23846],{"class":38,"line":1245},[36,23847,23848],{"class":3943},"    \u002F\u002Ftest01();\n",[36,23850,23851],{"class":38,"line":1250},[36,23852,23853],{"class":3943},"    \u002F\u002Ftest02();\n",[36,23855,23856,23858],{"class":38,"line":1265},[36,23857,23313],{"class":101},[36,23859,9329],{"class":42},[36,23861,23862],{"class":38,"line":1281},[36,23863,659],{"emptyLinePlaceholder":658},[36,23865,23866,23868,23870,23872],{"class":38,"line":1297},[36,23867,6015],{"class":101},[36,23869,495],{"class":42},[36,23871,6020],{"class":105},[36,23873,6422],{"class":42},[36,23875,23876],{"class":38,"line":1314},[36,23877,659],{"emptyLinePlaceholder":658},[36,23879,23880,23882,23884],{"class":38,"line":1336},[36,23881,7788],{"class":46},[36,23883,1004],{"class":112},[36,23885,5029],{"class":42},[36,23887,23888],{"class":38,"line":1356},[36,23889,5300],{"class":42},[318,23891,23893],{"id":23892},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,23895,23896],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,23898,23899],{},"1．默认构造函数(无参，函数体为空)",[19,23901,23902],{},"2．默认析构函数(无参，函数体为空)",[19,23904,23905],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,23907,23908],{},"构造函数调用规则如下：",[4875,23910,23911,23914],{},[214,23912,23913],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[214,23915,23916],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[26,23918,23920],{"className":3879,"code":23919,"language":3881,"meta":31,"style":31},"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",[33,23921,23922,23930,23934,23939,23945,23957,23961,23966,23978,23987,23999,24003,24007,24023,24032,24044,24048,24052,24058,24070,24074,24078,24084,24088,24092,24100,24104,24116,24121,24129,24133,24151,24155,24159,24167,24171,24176,24184,24199,24212,24216,24221,24228,24244,24257,24261,24265,24273,24277,24283,24287,24297,24301,24309],{"__ignoreMap":31},[36,23923,23924,23926,23928],{"class":38,"line":39},[36,23925,832],{"class":46},[36,23927,19225],{"class":101},[36,23929,19228],{"class":42},[36,23931,23932],{"class":38,"line":53},[36,23933,18373],{"class":46},[36,23935,23936],{"class":38,"line":196},[36,23937,23938],{"class":3943},"    \u002F\u002F无参（默认）构造函数\n",[36,23940,23941,23943],{"class":38,"line":642},[36,23942,22141],{"class":101},[36,23944,14514],{"class":42},[36,23946,23947,23949,23951,23953,23955],{"class":38,"line":655},[36,23948,13349],{"class":42},[36,23950,4912],{"class":46},[36,23952,23432],{"class":105},[36,23954,5180],{"class":46},[36,23956,12521],{"class":42},[36,23958,23959],{"class":38,"line":662},[36,23960,5899],{"class":42},[36,23962,23963],{"class":38,"line":667},[36,23964,23965],{"class":3943},"    \u002F\u002F有参构造函数\n",[36,23967,23968,23970,23972,23974,23976],{"class":38,"line":679},[36,23969,22141],{"class":101},[36,23971,495],{"class":42},[36,23973,1378],{"class":46},[36,23975,5134],{"class":468},[36,23977,16102],{"class":42},[36,23979,23980,23983,23985],{"class":38,"line":685},[36,23981,23982],{"class":42},"        age ",[36,23984,47],{"class":46},[36,23986,5168],{"class":42},[36,23988,23989,23991,23993,23995,23997],{"class":38,"line":691},[36,23990,13349],{"class":42},[36,23992,4912],{"class":46},[36,23994,23472],{"class":105},[36,23996,5180],{"class":46},[36,23998,12521],{"class":42},[36,24000,24001],{"class":38,"line":696},[36,24002,5899],{"class":42},[36,24004,24005],{"class":38,"line":702},[36,24006,22496],{"class":3943},[36,24008,24009,24011,24013,24015,24017,24019,24021],{"class":38,"line":708},[36,24010,22141],{"class":101},[36,24012,495],{"class":42},[36,24014,10483],{"class":46},[36,24016,19225],{"class":101},[36,24018,4228],{"class":46},[36,24020,10516],{"class":468},[36,24022,16102],{"class":42},[36,24024,24025,24027,24029],{"class":38,"line":713},[36,24026,23982],{"class":42},[36,24028,47],{"class":46},[36,24030,24031],{"class":42}," p.age;\n",[36,24033,24034,24036,24038,24040,24042],{"class":38,"line":719},[36,24035,13349],{"class":42},[36,24037,4912],{"class":46},[36,24039,23513],{"class":105},[36,24041,5180],{"class":46},[36,24043,12521],{"class":42},[36,24045,24046],{"class":38,"line":725},[36,24047,5899],{"class":42},[36,24049,24050],{"class":38,"line":731},[36,24051,22169],{"class":3943},[36,24053,24054,24056],{"class":38,"line":736},[36,24055,22174],{"class":101},[36,24057,14514],{"class":42},[36,24059,24060,24062,24064,24066,24068],{"class":38,"line":742},[36,24061,13349],{"class":42},[36,24063,4912],{"class":46},[36,24065,23550],{"class":105},[36,24067,5180],{"class":46},[36,24069,12521],{"class":42},[36,24071,24072],{"class":38,"line":748},[36,24073,5899],{"class":42},[36,24075,24076],{"class":38,"line":754},[36,24077,18373],{"class":46},[36,24079,24080,24082],{"class":38,"line":760},[36,24081,5697],{"class":46},[36,24083,11488],{"class":42},[36,24085,24086],{"class":38,"line":766},[36,24087,7693],{"class":42},[36,24089,24090],{"class":38,"line":772},[36,24091,659],{"emptyLinePlaceholder":658},[36,24093,24094,24096,24098],{"class":38,"line":778},[36,24095,9057],{"class":46},[36,24097,9281],{"class":101},[36,24099,903],{"class":42},[36,24101,24102],{"class":38,"line":783},[36,24103,5281],{"class":42},[36,24105,24106,24108,24110,24112,24114],{"class":38,"line":789},[36,24107,23053],{"class":42},[36,24109,10821],{"class":101},[36,24111,495],{"class":42},[36,24113,4521],{"class":112},[36,24115,6422],{"class":42},[36,24117,24118],{"class":38,"line":795},[36,24119,24120],{"class":3943},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[36,24122,24123,24125,24127],{"class":38,"line":801},[36,24124,23053],{"class":42},[36,24126,10724],{"class":101},[36,24128,21137],{"class":42},[36,24130,24131],{"class":38,"line":807},[36,24132,659],{"emptyLinePlaceholder":658},[36,24134,24135,24137,24139,24142,24144,24147,24149],{"class":38,"line":813},[36,24136,10220],{"class":42},[36,24138,4912],{"class":46},[36,24140,24141],{"class":105}," \"p2的年龄为： \"",[36,24143,5180],{"class":46},[36,24145,24146],{"class":42}," p2.age ",[36,24148,4912],{"class":46},[36,24150,12521],{"class":42},[36,24152,24153],{"class":38,"line":819},[36,24154,5300],{"class":42},[36,24156,24157],{"class":38,"line":824},[36,24158,659],{"emptyLinePlaceholder":658},[36,24160,24161,24163,24165],{"class":38,"line":829},[36,24162,9057],{"class":46},[36,24164,9350],{"class":101},[36,24166,903],{"class":42},[36,24168,24169],{"class":38,"line":851},[36,24170,5281],{"class":42},[36,24172,24173],{"class":38,"line":868},[36,24174,24175],{"class":3943},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[36,24177,24178,24181],{"class":38,"line":873},[36,24179,24180],{"class":42},"    Person p1;",[36,24182,24183],{"class":3943}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[36,24185,24186,24188,24190,24192,24194,24196],{"class":38,"line":891},[36,24187,23053],{"class":42},[36,24189,10724],{"class":101},[36,24191,495],{"class":42},[36,24193,554],{"class":112},[36,24195,9659],{"class":42},[36,24197,24198],{"class":3943}," \u002F\u002F用户提供的有参\n",[36,24200,24201,24203,24206,24209],{"class":38,"line":906},[36,24202,23053],{"class":42},[36,24204,24205],{"class":101},"p3",[36,24207,24208],{"class":42},"(p2);",[36,24210,24211],{"class":3943}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[36,24213,24214],{"class":38,"line":925},[36,24215,659],{"emptyLinePlaceholder":658},[36,24217,24218],{"class":38,"line":943},[36,24219,24220],{"class":3943},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[36,24222,24223,24226],{"class":38,"line":948},[36,24224,24225],{"class":42},"    Person p4;",[36,24227,24183],{"class":3943},[36,24229,24230,24232,24235,24237,24239,24241],{"class":38,"line":971},[36,24231,23053],{"class":42},[36,24233,24234],{"class":101},"p5",[36,24236,495],{"class":42},[36,24238,554],{"class":112},[36,24240,9659],{"class":42},[36,24242,24243],{"class":3943}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[36,24245,24246,24248,24251,24254],{"class":38,"line":992},[36,24247,23053],{"class":42},[36,24249,24250],{"class":101},"p6",[36,24252,24253],{"class":42},"(p5);",[36,24255,24256],{"class":3943}," \u002F\u002F用户自己提供拷贝构造\n",[36,24258,24259],{"class":38,"line":1020},[36,24260,5300],{"class":42},[36,24262,24263],{"class":38,"line":1036},[36,24264,659],{"emptyLinePlaceholder":658},[36,24266,24267,24269,24271],{"class":38,"line":1041},[36,24268,1378],{"class":46},[36,24270,1823],{"class":101},[36,24272,14514],{"class":42},[36,24274,24275],{"class":38,"line":1052},[36,24276,659],{"emptyLinePlaceholder":658},[36,24278,24279,24281],{"class":38,"line":1065},[36,24280,9326],{"class":101},[36,24282,9329],{"class":42},[36,24284,24285],{"class":38,"line":1077},[36,24286,659],{"emptyLinePlaceholder":658},[36,24288,24289,24291,24293,24295],{"class":38,"line":1082},[36,24290,6015],{"class":101},[36,24292,495],{"class":42},[36,24294,6020],{"class":105},[36,24296,6422],{"class":42},[36,24298,24299],{"class":38,"line":1125},[36,24300,659],{"emptyLinePlaceholder":658},[36,24302,24303,24305,24307],{"class":38,"line":1164},[36,24304,7788],{"class":46},[36,24306,1004],{"class":112},[36,24308,5029],{"class":42},[36,24310,24311],{"class":38,"line":1169},[36,24312,5300],{"class":42},[318,24314,24316],{"id":24315},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,24318,24319],{},"浅拷贝：简单的赋值拷贝操作",[19,24321,24322],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[26,24324,24326],{"className":3879,"code":24325,"language":3881,"meta":31,"style":31},"#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",[33,24327,24328,24334,24344,24350,24354,24358,24363,24369,24373,24386,24390,24394,24401,24405,24415,24430,24443,24447,24452,24457,24473,24477,24490,24495,24500,24505,24514,24519,24534,24538,24542,24546,24552,24556,24561,24576,24580,24591,24605,24609,24618,24622,24628,24640,24644,24652,24656,24673,24704,24712,24740,24744,24748,24756,24760,24766],{"__ignoreMap":31},[36,24329,24330,24332],{"class":38,"line":39},[36,24331,5664],{"class":46},[36,24333,5667],{"class":105},[36,24335,24336,24338,24340,24342],{"class":38,"line":53},[36,24337,5672],{"class":46},[36,24339,5675],{"class":46},[36,24341,5678],{"class":101},[36,24343,5029],{"class":42},[36,24345,24346,24348],{"class":38,"line":196},[36,24347,832],{"class":46},[36,24349,18827],{"class":101},[36,24351,24352],{"class":38,"line":642},[36,24353,5281],{"class":42},[36,24355,24356],{"class":38,"line":655},[36,24357,18373],{"class":46},[36,24359,24360],{"class":38,"line":662},[36,24361,24362],{"class":3943},"    \u002F\u002F默认构造函数\n",[36,24364,24365,24367],{"class":38,"line":667},[36,24366,22141],{"class":101},[36,24368,903],{"class":42},[36,24370,24371],{"class":38,"line":679},[36,24372,5742],{"class":42},[36,24374,24375,24377,24379,24382,24384],{"class":38,"line":685},[36,24376,7150],{"class":42},[36,24378,4912],{"class":46},[36,24380,24381],{"class":105},"\"默认构造函数\"",[36,24383,4912],{"class":46},[36,24385,4934],{"class":42},[36,24387,24388],{"class":38,"line":691},[36,24389,5899],{"class":42},[36,24391,24392],{"class":38,"line":696},[36,24393,23965],{"class":3943},[36,24395,24396,24398],{"class":38,"line":702},[36,24397,22174],{"class":101},[36,24399,24400],{"class":42},"(int age,int height)\n",[36,24402,24403],{"class":38,"line":708},[36,24404,5742],{"class":42},[36,24406,24407,24410,24412],{"class":38,"line":713},[36,24408,24409],{"class":42},"        m_Age",[36,24411,47],{"class":46},[36,24413,24414],{"class":42},"age;\n",[36,24416,24417,24420,24422,24424,24427],{"class":38,"line":719},[36,24418,24419],{"class":42},"        m_Height",[36,24421,15378],{"class":46},[36,24423,6094],{"class":46},[36,24425,24426],{"class":42},"(height);",[36,24428,24429],{"class":3943},"\u002F\u002F放到堆区\n",[36,24431,24432,24434,24436,24439,24441],{"class":38,"line":725},[36,24433,7150],{"class":42},[36,24435,4912],{"class":46},[36,24437,24438],{"class":105},"\"有参构造函数\"",[36,24440,4912],{"class":46},[36,24442,4934],{"class":42},[36,24444,24445],{"class":38,"line":731},[36,24446,5899],{"class":42},[36,24448,24449],{"class":38,"line":736},[36,24450,24451],{"class":3943},"    \u002F\u002F深拷贝解决上述问题\n",[36,24453,24454],{"class":38,"line":742},[36,24455,24456],{"class":3943},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[36,24458,24459,24461,24463,24465,24467,24469,24471],{"class":38,"line":748},[36,24460,22141],{"class":101},[36,24462,495],{"class":42},[36,24464,10483],{"class":46},[36,24466,19225],{"class":101},[36,24468,14245],{"class":46},[36,24470,19],{"class":468},[36,24472,922],{"class":42},[36,24474,24475],{"class":38,"line":754},[36,24476,5742],{"class":42},[36,24478,24479,24481,24483,24486,24488],{"class":38,"line":760},[36,24480,7150],{"class":42},[36,24482,4912],{"class":46},[36,24484,24485],{"class":105},"\"拷贝构造函数\"",[36,24487,4912],{"class":46},[36,24489,4934],{"class":42},[36,24491,24492],{"class":38,"line":766},[36,24493,24494],{"class":3943},"        \u002F\u002F编译器默认的写如下注释部分\n",[36,24496,24497],{"class":38,"line":772},[36,24498,24499],{"class":3943},"        \u002F\u002Fm_Age=p.m_Age;\n",[36,24501,24502],{"class":38,"line":778},[36,24503,24504],{"class":3943},"        \u002F\u002Fm_Height=p.m_Height;\n",[36,24506,24507,24509,24511],{"class":38,"line":783},[36,24508,24409],{"class":42},[36,24510,47],{"class":46},[36,24512,24513],{"class":42},"p.m_Age;\n",[36,24515,24516],{"class":38,"line":789},[36,24517,24518],{"class":3943},"        \u002F\u002F深拷贝操作\n",[36,24520,24521,24523,24525,24527,24529,24531],{"class":38,"line":795},[36,24522,24419],{"class":42},[36,24524,15378],{"class":46},[36,24526,6094],{"class":46},[36,24528,495],{"class":42},[36,24530,1372],{"class":46},[36,24532,24533],{"class":42},"p.m_Height);\n",[36,24535,24536],{"class":38,"line":801},[36,24537,5899],{"class":42},[36,24539,24540],{"class":38,"line":807},[36,24541,659],{"emptyLinePlaceholder":658},[36,24543,24544],{"class":38,"line":813},[36,24545,22169],{"class":3943},[36,24547,24548,24550],{"class":38,"line":819},[36,24549,22174],{"class":101},[36,24551,903],{"class":42},[36,24553,24554],{"class":38,"line":824},[36,24555,5742],{"class":42},[36,24557,24558],{"class":38,"line":829},[36,24559,24560],{"class":3943},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[36,24562,24563,24565,24568,24571,24574],{"class":38,"line":851},[36,24564,995],{"class":46},[36,24566,24567],{"class":42},"(m_Height ",[36,24569,24570],{"class":46},"!=",[36,24572,24573],{"class":112}," NULL",[36,24575,922],{"class":42},[36,24577,24578],{"class":38,"line":868},[36,24579,6220],{"class":42},[36,24581,24582,24585,24588],{"class":38,"line":873},[36,24583,24584],{"class":46},"            delete",[36,24586,24587],{"class":42}," m_Height;",[36,24589,24590],{"class":3943}," \u002F\u002F释放堆区内存\n",[36,24592,24593,24596,24598,24600,24602],{"class":38,"line":891},[36,24594,24595],{"class":42},"            m_Height",[36,24597,47],{"class":46},[36,24599,6104],{"class":112},[36,24601,3940],{"class":42},[36,24603,24604],{"class":3943}," \u002F\u002F防止野指针\n",[36,24606,24607],{"class":38,"line":906},[36,24608,6239],{"class":42},[36,24610,24611,24613,24615],{"class":38,"line":925},[36,24612,7150],{"class":42},[36,24614,4912],{"class":46},[36,24616,24617],{"class":105},"\"Person的析构函数调用\"\n",[36,24619,24620],{"class":38,"line":943},[36,24621,5899],{"class":42},[36,24623,24624,24626],{"class":38,"line":948},[36,24625,5697],{"class":46},[36,24627,19322],{"class":42},[36,24629,24630,24632,24634,24637],{"class":38,"line":971},[36,24631,5697],{"class":46},[36,24633,1325],{"class":46},[36,24635,24636],{"class":42},"m_Height;",[36,24638,24639],{"class":3943}," \u002F\u002F定义一个指针，指向身高\n",[36,24641,24642],{"class":38,"line":992},[36,24643,7693],{"class":42},[36,24645,24646,24648,24650],{"class":38,"line":1020},[36,24647,9057],{"class":46},[36,24649,9281],{"class":101},[36,24651,903],{"class":42},[36,24653,24654],{"class":38,"line":1036},[36,24655,5281],{"class":42},[36,24657,24658,24660,24662,24664,24666,24668,24671],{"class":38,"line":1041},[36,24659,23053],{"class":42},[36,24661,10821],{"class":101},[36,24663,495],{"class":42},[36,24665,4521],{"class":112},[36,24667,4253],{"class":42},[36,24669,24670],{"class":112},"160",[36,24672,6422],{"class":42},[36,24674,24675,24677,24679,24682,24684,24687,24689,24692,24694,24697,24699,24701],{"class":38,"line":1052},[36,24676,5286],{"class":42},[36,24678,4912],{"class":46},[36,24680,24681],{"class":105},"\"p1的年龄为:\"",[36,24683,4912],{"class":46},[36,24685,24686],{"class":42},"p1.m_Age",[36,24688,4912],{"class":46},[36,24690,24691],{"class":105},"\"身高为：\"",[36,24693,10111],{"class":46},[36,24695,24696],{"class":42},"p1.m_Height",[36,24698,4912],{"class":46},[36,24700,4977],{"class":42},[36,24702,24703],{"class":3943},"  \u002F\u002F18\n",[36,24705,24706,24708,24710],{"class":38,"line":1065},[36,24707,23053],{"class":42},[36,24709,10724],{"class":101},[36,24711,21137],{"class":42},[36,24713,24714,24716,24718,24721,24723,24725,24727,24729,24731,24734,24736,24738],{"class":38,"line":1077},[36,24715,5286],{"class":42},[36,24717,4912],{"class":46},[36,24719,24720],{"class":105},"\"p2的年龄为：\"",[36,24722,4912],{"class":46},[36,24724,23083],{"class":42},[36,24726,4912],{"class":46},[36,24728,24691],{"class":105},[36,24730,10111],{"class":46},[36,24732,24733],{"class":42},"p2.m_Height",[36,24735,4912],{"class":46},[36,24737,4977],{"class":42},[36,24739,24703],{"class":3943},[36,24741,24742],{"class":38,"line":1082},[36,24743,16870],{"class":42},[36,24745,24746],{"class":38,"line":1125},[36,24747,5300],{"class":42},[36,24749,24750,24752,24754],{"class":38,"line":1164},[36,24751,1378],{"class":46},[36,24753,1823],{"class":101},[36,24755,903],{"class":42},[36,24757,24758],{"class":38,"line":1169},[36,24759,5281],{"class":42},[36,24761,24762,24764],{"class":38,"line":1180},[36,24763,9326],{"class":101},[36,24765,9329],{"class":42},[36,24767,24768],{"class":38,"line":1198},[36,24769,5300],{"class":42},[19,24771,24772],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,24774,24775],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,24777,24778],{},[5198,24779],{"alt":31,"src":24780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,24782,24783],{},"浅拷贝问题要使用深拷贝来解决",[19,24785,24786],{},[5198,24787],{"alt":31,"src":24788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,24790,24791],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[318,24793,24795],{"id":24794},"_826初始化列表","8.2.6初始化列表",[19,24797,24798],{},"作用：初始化属性",[19,24800,8877],{},[26,24802,24805],{"className":24803,"code":24804,"language":80},[78],"构造函数():属性1(值1),属性2(值2).....{}\n",[33,24806,24804],{"__ignoreMap":31},[19,24808,346],{},[26,24810,24812],{"className":3879,"code":24811,"language":3881,"meta":31,"style":31},"#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",[33,24813,24814,24820,24830,24836,24840,24845,24849,24854,24859,24864,24869,24874,24879,24883,24888,24893,24936,24945,24963,24981,24999,25003,25007,25014,25021,25028,25032,25036,25044,25048,25052,25072,25081,25085,25089,25099,25103,25111],{"__ignoreMap":31},[36,24815,24816,24818],{"class":38,"line":39},[36,24817,5664],{"class":46},[36,24819,5667],{"class":105},[36,24821,24822,24824,24826,24828],{"class":38,"line":53},[36,24823,5672],{"class":46},[36,24825,5675],{"class":46},[36,24827,5678],{"class":101},[36,24829,5029],{"class":42},[36,24831,24832,24834],{"class":38,"line":196},[36,24833,832],{"class":46},[36,24835,18827],{"class":101},[36,24837,24838],{"class":38,"line":642},[36,24839,5281],{"class":42},[36,24841,24842],{"class":38,"line":655},[36,24843,24844],{"class":46},"    public:\n",[36,24846,24847],{"class":38,"line":662},[36,24848,659],{"emptyLinePlaceholder":658},[36,24850,24851],{"class":38,"line":667},[36,24852,24853],{"class":3943},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[36,24855,24856],{"class":38,"line":679},[36,24857,24858],{"class":3943},"    \u002F\u002FPerson(int a, int b, int c) {\n",[36,24860,24861],{"class":38,"line":685},[36,24862,24863],{"class":3943},"    \u002F\u002F  m_A = a;\n",[36,24865,24866],{"class":38,"line":691},[36,24867,24868],{"class":3943},"    \u002F\u002F  m_B = b;\n",[36,24870,24871],{"class":38,"line":696},[36,24872,24873],{"class":3943},"    \u002F\u002F  m_C = c;\n",[36,24875,24876],{"class":38,"line":702},[36,24877,24878],{"class":3943},"    \u002F\u002F}\n",[36,24880,24881],{"class":38,"line":708},[36,24882,659],{"emptyLinePlaceholder":658},[36,24884,24885],{"class":38,"line":713},[36,24886,24887],{"class":3943},"    \u002F\u002F初始化列表方式初始化\n",[36,24889,24890],{"class":38,"line":719},[36,24891,24892],{"class":3943},"    \u002F\u002F使用有参构造函数\n",[36,24894,24895,24897,24899,24901,24903,24905,24907,24909,24911,24913,24915,24918,24921,24924,24927,24930,24933],{"class":38,"line":725},[36,24896,22141],{"class":101},[36,24898,495],{"class":42},[36,24900,1378],{"class":46},[36,24902,5134],{"class":468},[36,24904,478],{"class":42},[36,24906,1378],{"class":46},[36,24908,6536],{"class":468},[36,24910,478],{"class":42},[36,24912,1378],{"class":46},[36,24914,6552],{"class":468},[36,24916,24917],{"class":42},") :",[36,24919,24920],{"class":101},"m_A",[36,24922,24923],{"class":42},"(a), ",[36,24925,24926],{"class":101},"m_B",[36,24928,24929],{"class":42},"(b), ",[36,24931,24932],{"class":101},"m_C",[36,24934,24935],{"class":42},"(c) {}\n",[36,24937,24938,24940,24943],{"class":38,"line":731},[36,24939,18565],{"class":46},[36,24941,24942],{"class":101}," PrintPerson",[36,24944,14514],{"class":42},[36,24946,24947,24949,24951,24954,24956,24959,24961],{"class":38,"line":736},[36,24948,13349],{"class":42},[36,24950,4912],{"class":46},[36,24952,24953],{"class":105}," \"mA:\"",[36,24955,5180],{"class":46},[36,24957,24958],{"class":42}," m_A ",[36,24960,4912],{"class":46},[36,24962,12521],{"class":42},[36,24964,24965,24967,24969,24972,24974,24977,24979],{"class":38,"line":742},[36,24966,13349],{"class":42},[36,24968,4912],{"class":46},[36,24970,24971],{"class":105}," \"mB:\"",[36,24973,5180],{"class":46},[36,24975,24976],{"class":42}," m_B ",[36,24978,4912],{"class":46},[36,24980,12521],{"class":42},[36,24982,24983,24985,24987,24990,24992,24995,24997],{"class":38,"line":748},[36,24984,13349],{"class":42},[36,24986,4912],{"class":46},[36,24988,24989],{"class":105}," \"mC:\"",[36,24991,5180],{"class":46},[36,24993,24994],{"class":42}," m_C ",[36,24996,4912],{"class":46},[36,24998,12521],{"class":42},[36,25000,25001],{"class":38,"line":754},[36,25002,5899],{"class":42},[36,25004,25005],{"class":38,"line":760},[36,25006,18878],{"class":46},[36,25008,25009,25011],{"class":38,"line":766},[36,25010,5697],{"class":46},[36,25012,25013],{"class":42}," m_A;\n",[36,25015,25016,25018],{"class":38,"line":772},[36,25017,5697],{"class":46},[36,25019,25020],{"class":42}," m_B;\n",[36,25022,25023,25025],{"class":38,"line":778},[36,25024,5697],{"class":46},[36,25026,25027],{"class":42}," m_C;\n",[36,25029,25030],{"class":38,"line":783},[36,25031,7693],{"class":42},[36,25033,25034],{"class":38,"line":789},[36,25035,659],{"emptyLinePlaceholder":658},[36,25037,25038,25040,25042],{"class":38,"line":795},[36,25039,1378],{"class":46},[36,25041,1823],{"class":101},[36,25043,9671],{"class":42},[36,25045,25046],{"class":38,"line":801},[36,25047,5281],{"class":42},[36,25049,25050],{"class":38,"line":807},[36,25051,659],{"emptyLinePlaceholder":658},[36,25053,25054,25056,25058,25060,25062,25064,25066,25068,25070],{"class":38,"line":813},[36,25055,23053],{"class":42},[36,25057,19],{"class":101},[36,25059,495],{"class":42},[36,25061,4092],{"class":112},[36,25063,478],{"class":42},[36,25065,498],{"class":112},[36,25067,478],{"class":42},[36,25069,1982],{"class":112},[36,25071,6422],{"class":42},[36,25073,25074,25076,25079],{"class":38,"line":819},[36,25075,19522],{"class":42},[36,25077,25078],{"class":101},"PrintPerson",[36,25080,9329],{"class":42},[36,25082,25083],{"class":38,"line":824},[36,25084,659],{"emptyLinePlaceholder":658},[36,25086,25087],{"class":38,"line":829},[36,25088,659],{"emptyLinePlaceholder":658},[36,25090,25091,25093,25095,25097],{"class":38,"line":851},[36,25092,6015],{"class":101},[36,25094,495],{"class":42},[36,25096,6020],{"class":105},[36,25098,6422],{"class":42},[36,25100,25101],{"class":38,"line":868},[36,25102,659],{"emptyLinePlaceholder":658},[36,25104,25105,25107,25109],{"class":38,"line":873},[36,25106,7788],{"class":46},[36,25108,1004],{"class":112},[36,25110,5029],{"class":42},[36,25112,25113],{"class":38,"line":891},[36,25114,5300],{"class":42},[19,25116,25117,25118,25121,25122],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[4027,25119,25120],{},"参数名就是定义的对象属性","，",[4027,25123,25124],{},"属性后面的值为有参构造函数的形参",[26,25126,25128],{"className":3879,"code":25127,"language":3881,"meta":31,"style":31},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[33,25129,25130],{"__ignoreMap":31},[36,25131,25132,25134,25136,25138,25141,25143,25146,25148,25151,25153,25156,25158,25161,25163],{"class":38,"line":39},[36,25133,22668],{"class":101},[36,25135,495],{"class":42},[36,25137,1378],{"class":46},[36,25139,25140],{"class":42}," a.",[36,25142,1378],{"class":46},[36,25144,25145],{"class":42}," b,",[36,25147,1378],{"class":46},[36,25149,25150],{"class":42}," b):",[36,25152,24920],{"class":101},[36,25154,25155],{"class":42},"(a),",[36,25157,24926],{"class":101},[36,25159,25160],{"class":42},"(c),",[36,25162,24932],{"class":101},[36,25164,25165],{"class":42},"(b) {}\n",[318,25167,25169],{"id":25168},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,25171,25172],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,25174,447],{},[26,25176,25178],{"className":3879,"code":25177,"language":3881,"meta":31,"style":31},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[33,25179,25180,25185,25190,25194,25199,25203],{"__ignoreMap":31},[36,25181,25182],{"class":38,"line":39},[36,25183,25184],{"class":42},"A{};\n",[36,25186,25187],{"class":38,"line":53},[36,25188,25189],{"class":42},"B\n",[36,25191,25192],{"class":38,"line":196},[36,25193,5281],{"class":42},[36,25195,25196],{"class":38,"line":642},[36,25197,25198],{"class":42},"    A a;\n",[36,25200,25201],{"class":38,"line":655},[36,25202,5300],{"class":42},[36,25204,25205],{"class":38,"line":662},[36,25206,25207],{"class":3943},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,25209,25210],{},"案例",[26,25212,25214],{"className":3879,"code":25213,"language":3881,"meta":31,"style":31},"\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",[33,25215,25216,25221,25228,25232,25237,25242,25256,25260,25270,25281,25285,25292,25296,25309,25313,25318,25323,25327,25333,25337,25341,25345,25376,25380,25391,25395,25401,25405,25418,25422,25426,25430,25435,25440,25444,25452,25456,25473,25492,25496,25504,25508,25514],{"__ignoreMap":31},[36,25217,25218],{"class":38,"line":39},[36,25219,25220],{"class":3943},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[36,25222,25223,25225],{"class":38,"line":53},[36,25224,832],{"class":46},[36,25226,25227],{"class":101}," Phone\n",[36,25229,25230],{"class":38,"line":196},[36,25231,5281],{"class":42},[36,25233,25234],{"class":38,"line":642},[36,25235,25236],{"class":42},"public：\n",[36,25238,25239],{"class":38,"line":655},[36,25240,25241],{"class":3943},"    \u002F\u002F 赋值(构造函数)\n",[36,25243,25244,25247,25249,25251,25254],{"class":38,"line":662},[36,25245,25246],{"class":101},"    Phone",[36,25248,495],{"class":42},[36,25250,18573],{"class":101},[36,25252,25253],{"class":468}," pName",[36,25255,922],{"class":42},[36,25257,25258],{"class":38,"line":667},[36,25259,5742],{"class":42},[36,25261,25262,25265,25267],{"class":38,"line":679},[36,25263,25264],{"class":42},"        m_pName",[36,25266,47],{"class":46},[36,25268,25269],{"class":42},"pName;\n",[36,25271,25272,25274,25276,25279],{"class":38,"line":685},[36,25273,7150],{"class":42},[36,25275,4912],{"class":46},[36,25277,25278],{"class":105},"\"Phone的构造函数调用\"",[36,25280,5029],{"class":42},[36,25282,25283],{"class":38,"line":691},[36,25284,5899],{"class":42},[36,25286,25287,25290],{"class":38,"line":696},[36,25288,25289],{"class":101},"    ~Phone",[36,25291,903],{"class":42},[36,25293,25294],{"class":38,"line":702},[36,25295,5742],{"class":42},[36,25297,25298,25300,25302,25305,25307],{"class":38,"line":708},[36,25299,7150],{"class":42},[36,25301,4912],{"class":46},[36,25303,25304],{"class":105},"\"Phone析构函数调用\"",[36,25306,4912],{"class":46},[36,25308,4934],{"class":42},[36,25310,25311],{"class":38,"line":713},[36,25312,5899],{"class":42},[36,25314,25315],{"class":38,"line":719},[36,25316,25317],{"class":3943},"    \u002F\u002F\n",[36,25319,25320],{"class":38,"line":725},[36,25321,25322],{"class":42},"    string m_PName;\n",[36,25324,25325],{"class":38,"line":731},[36,25326,7693],{"class":42},[36,25328,25329,25331],{"class":38,"line":736},[36,25330,832],{"class":46},[36,25332,18827],{"class":101},[36,25334,25335],{"class":38,"line":742},[36,25336,5281],{"class":42},[36,25338,25339],{"class":38,"line":748},[36,25340,18373],{"class":46},[36,25342,25343],{"class":38,"line":754},[36,25344,20618],{"class":3943},[36,25346,25347,25349,25351,25353,25355,25357,25359,25362,25365,25367,25370,25373],{"class":38,"line":760},[36,25348,22141],{"class":101},[36,25350,495],{"class":42},[36,25352,18573],{"class":101},[36,25354,18576],{"class":468},[36,25356,4253],{"class":42},[36,25358,18573],{"class":101},[36,25360,25361],{"class":468}," pname",[36,25363,25364],{"class":42},"):",[36,25366,18666],{"class":101},[36,25368,25369],{"class":42},"(name),m_phone.",[36,25371,25372],{"class":101},"m_PName",[36,25374,25375],{"class":42},"(pname) \n",[36,25377,25378],{"class":38,"line":766},[36,25379,5742],{"class":42},[36,25381,25382,25384,25386,25389],{"class":38,"line":772},[36,25383,7150],{"class":42},[36,25385,4912],{"class":46},[36,25387,25388],{"class":105},"\"Person的构造函数调用\"",[36,25390,5029],{"class":42},[36,25392,25393],{"class":38,"line":778},[36,25394,5899],{"class":42},[36,25396,25397,25399],{"class":38,"line":783},[36,25398,22174],{"class":101},[36,25400,903],{"class":42},[36,25402,25403],{"class":38,"line":789},[36,25404,5742],{"class":42},[36,25406,25407,25409,25411,25414,25416],{"class":38,"line":795},[36,25408,7150],{"class":42},[36,25410,4912],{"class":46},[36,25412,25413],{"class":105},"\"Person析构函数调用\"",[36,25415,4912],{"class":46},[36,25417,4934],{"class":42},[36,25419,25420],{"class":38,"line":801},[36,25421,5899],{"class":42},[36,25423,25424],{"class":38,"line":807},[36,25425,11471],{"class":3943},[36,25427,25428],{"class":38,"line":813},[36,25429,18548],{"class":42},[36,25431,25432],{"class":38,"line":819},[36,25433,25434],{"class":3943},"    \u002F\u002F手机\n",[36,25436,25437],{"class":38,"line":824},[36,25438,25439],{"class":42},"    Phone m_Phone;\n",[36,25441,25442],{"class":38,"line":829},[36,25443,7693],{"class":42},[36,25445,25446,25448,25450],{"class":38,"line":851},[36,25447,9057],{"class":46},[36,25449,9281],{"class":101},[36,25451,903],{"class":42},[36,25453,25454],{"class":38,"line":868},[36,25455,5281],{"class":42},[36,25457,25458,25460,25462,25464,25466,25468,25471],{"class":38,"line":873},[36,25459,23053],{"class":42},[36,25461,19],{"class":101},[36,25463,495],{"class":42},[36,25465,11607],{"class":105},[36,25467,4253],{"class":42},[36,25469,25470],{"class":105},"\"安卓\"",[36,25472,6422],{"class":42},[36,25474,25475,25477,25479,25482,25484,25487,25489],{"class":38,"line":891},[36,25476,5286],{"class":42},[36,25478,4912],{"class":46},[36,25480,25481],{"class":42},"p.Name",[36,25483,4912],{"class":46},[36,25485,25486],{"class":105},"\"拿着：\"",[36,25488,4912],{"class":46},[36,25490,25491],{"class":42},"p.m_phone.m_PName;\n",[36,25493,25494],{"class":38,"line":906},[36,25495,5300],{"class":42},[36,25497,25498,25500,25502],{"class":38,"line":925},[36,25499,1378],{"class":46},[36,25501,1823],{"class":101},[36,25503,903],{"class":42},[36,25505,25506],{"class":38,"line":943},[36,25507,5281],{"class":42},[36,25509,25510,25512],{"class":38,"line":948},[36,25511,9326],{"class":101},[36,25513,9329],{"class":42},[36,25515,25516],{"class":38,"line":971},[36,25517,5300],{"class":42},[19,25519,12706],{},[26,25521,25523],{"className":3879,"code":25522,"language":3881,"meta":31,"style":31},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[33,25524,25525,25530],{"__ignoreMap":31},[36,25526,25527],{"class":38,"line":39},[36,25528,25529],{"class":3943},"    \u002F\u002F不需要写这个：\n",[36,25531,25532],{"class":38,"line":53},[36,25533,25534],{"class":3943},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,25536,25537],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[26,25539,25541],{"className":3879,"code":25540,"language":3881,"meta":31,"style":31},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[33,25542,25543],{"__ignoreMap":31},[36,25544,25545,25547,25550,25552,25555,25558],{"class":38,"line":39},[36,25546,22668],{"class":101},[36,25548,25549],{"class":42},"(string name.string pname):",[36,25551,18666],{"class":101},[36,25553,25554],{"class":42},"(name),",[36,25556,25557],{"class":101},"m_phone",[36,25559,25560],{"class":42},"(pname) {}\n",[19,25562,25563,25564,47,25567],{},"采用的是隐式转换法，实际为如下：\n",[33,25565,25566],{},"m_phone(pname)",[33,25568,25569],{},"Phone m_phone=pname",[19,25571,25572,25575],{},[4027,25573,25574],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,25577,25578],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[318,25580,25582],{"id":25581},"_828静态对象","8.2.8静态对象",[19,25584,25585],{},"静态对象在成员对象前static，称为静态对象",[19,25587,25588],{},"静态对象分为两类：",[211,25590,25591],{},[214,25592,25593],{},"静态成员变量",[4875,25595,25596,25599,25602],{},[214,25597,25598],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[214,25600,25601],{},"②在编译阶段分配内存",[214,25603,25604],{},"③类内声明，类外初始化",[211,25606,25607],{"start":53},[214,25608,25609],{},"静态成员函数",[4875,25611,25612,25615],{},[214,25613,25614],{},"①所有对象共享同一个函数",[214,25616,25617],{},"②静态成员函数只能访问静态成员变量",[25619,25620,25622],"h4",{"id":25621},"_8281静态成员变量","8.2.8.1静态成员变量",[26,25624,25626],{"className":3879,"code":25625,"language":3881,"meta":31,"style":31},"#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",[33,25627,25628,25634,25644,25650,25654,25658,25663,25668,25673,25681,25685,25689,25693,25701,25705,25709,25714,25727,25731,25739,25743,25749],{"__ignoreMap":31},[36,25629,25630,25632],{"class":38,"line":39},[36,25631,5664],{"class":46},[36,25633,5667],{"class":105},[36,25635,25636,25638,25640,25642],{"class":38,"line":53},[36,25637,5672],{"class":46},[36,25639,5675],{"class":46},[36,25641,5678],{"class":101},[36,25643,5029],{"class":42},[36,25645,25646,25648],{"class":38,"line":196},[36,25647,832],{"class":46},[36,25649,18827],{"class":101},[36,25651,25652],{"class":38,"line":642},[36,25653,5281],{"class":42},[36,25655,25656],{"class":38,"line":655},[36,25657,18373],{"class":46},[36,25659,25660],{"class":38,"line":662},[36,25661,25662],{"class":3943},"    \u002F\u002F非静态成员变量\n",[36,25664,25665],{"class":38,"line":667},[36,25666,25667],{"class":3943},"    \u002F\u002F int m_A;\n",[36,25669,25670],{"class":38,"line":679},[36,25671,25672],{"class":3943},"    \u002F\u002F定义静态成员变量\n",[36,25674,25675,25677,25679],{"class":38,"line":685},[36,25676,14681],{"class":46},[36,25678,6094],{"class":46},[36,25680,25013],{"class":42},[36,25682,25683],{"class":38,"line":691},[36,25684,659],{"emptyLinePlaceholder":658},[36,25686,25687],{"class":38,"line":696},[36,25688,659],{"emptyLinePlaceholder":658},[36,25690,25691],{"class":38,"line":702},[36,25692,7693],{"class":42},[36,25694,25695,25697,25699],{"class":38,"line":708},[36,25696,9057],{"class":46},[36,25698,9281],{"class":101},[36,25700,903],{"class":42},[36,25702,25703],{"class":38,"line":713},[36,25704,5281],{"class":42},[36,25706,25707],{"class":38,"line":719},[36,25708,18969],{"class":42},[36,25710,25711],{"class":38,"line":725},[36,25712,25713],{"class":3943},"    \u002F\u002F输出类成员变量这块内存\n",[36,25715,25716,25718,25720,25723,25725],{"class":38,"line":731},[36,25717,5286],{"class":42},[36,25719,4912],{"class":46},[36,25721,25722],{"class":42},"p.m_A",[36,25724,4912],{"class":46},[36,25726,4934],{"class":42},[36,25728,25729],{"class":38,"line":736},[36,25730,5300],{"class":42},[36,25732,25733,25735,25737],{"class":38,"line":742},[36,25734,1378],{"class":46},[36,25736,1823],{"class":101},[36,25738,903],{"class":42},[36,25740,25741],{"class":38,"line":748},[36,25742,5281],{"class":42},[36,25744,25745,25747],{"class":38,"line":754},[36,25746,9326],{"class":101},[36,25748,903],{"class":42},[36,25750,25751],{"class":38,"line":760},[36,25752,5300],{"class":42},[19,25754,25755],{},"此时输出是报错的：无法解析外部命令",[19,25757,25758],{},"解决这一问题：必须用到类内声明，类外初始化操作",[26,25760,25762],{"className":3879,"code":25761,"language":3881,"meta":31,"style":31},"#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",[33,25763,25764,25770,25780,25786,25790,25794,25799,25807,25811,25816,25831,25839,25843,25847,25852,25857,25869,25874,25885,25890,25895,25908,25912,25920,25924,25930],{"__ignoreMap":31},[36,25765,25766,25768],{"class":38,"line":39},[36,25767,5664],{"class":46},[36,25769,5667],{"class":105},[36,25771,25772,25774,25776,25778],{"class":38,"line":53},[36,25773,5672],{"class":46},[36,25775,5675],{"class":46},[36,25777,5678],{"class":101},[36,25779,5029],{"class":42},[36,25781,25782,25784],{"class":38,"line":196},[36,25783,832],{"class":46},[36,25785,18827],{"class":101},[36,25787,25788],{"class":38,"line":642},[36,25789,5281],{"class":42},[36,25791,25792],{"class":38,"line":655},[36,25793,18373],{"class":46},[36,25795,25796],{"class":38,"line":662},[36,25797,25798],{"class":3943},"    \u002F\u002F类内声明\n",[36,25800,25801,25803,25805],{"class":38,"line":667},[36,25802,14681],{"class":46},[36,25804,6094],{"class":46},[36,25806,25013],{"class":42},[36,25808,25809],{"class":38,"line":679},[36,25810,7693],{"class":42},[36,25812,25813],{"class":38,"line":685},[36,25814,25815],{"class":3943},"\u002F\u002F类外初始化\n",[36,25817,25818,25820,25822,25825,25827,25829],{"class":38,"line":691},[36,25819,1378],{"class":46},[36,25821,19225],{"class":101},[36,25823,25824],{"class":42},"::m_A",[36,25826,47],{"class":46},[36,25828,554],{"class":112},[36,25830,5029],{"class":42},[36,25832,25833,25835,25837],{"class":38,"line":696},[36,25834,9057],{"class":46},[36,25836,9281],{"class":101},[36,25838,903],{"class":42},[36,25840,25841],{"class":38,"line":702},[36,25842,5281],{"class":42},[36,25844,25845],{"class":38,"line":708},[36,25846,18969],{"class":42},[36,25848,25849],{"class":38,"line":713},[36,25850,25851],{"class":3943},"    \u002F\u002F访问变量的原内存空间\n",[36,25853,25854],{"class":38,"line":719},[36,25855,25856],{"class":3943},"    \u002F\u002F100\n",[36,25858,25859,25861,25863,25865,25867],{"class":38,"line":725},[36,25860,5286],{"class":42},[36,25862,4912],{"class":46},[36,25864,25722],{"class":42},[36,25866,4912],{"class":46},[36,25868,4934],{"class":42},[36,25870,25871],{"class":38,"line":731},[36,25872,25873],{"class":42},"    Person p2;\n",[36,25875,25876,25879,25881,25883],{"class":38,"line":736},[36,25877,25878],{"class":42},"    p2.m_A",[36,25880,47],{"class":46},[36,25882,5445],{"class":112},[36,25884,5029],{"class":42},[36,25886,25887],{"class":38,"line":742},[36,25888,25889],{"class":3943},"    \u002F\u002F继续访问这片空间\n",[36,25891,25892],{"class":38,"line":748},[36,25893,25894],{"class":3943},"    \u002F\u002F200\n",[36,25896,25897,25899,25901,25904,25906],{"class":38,"line":754},[36,25898,5286],{"class":42},[36,25900,4912],{"class":46},[36,25902,25903],{"class":42},"p2.m_A",[36,25905,4912],{"class":46},[36,25907,4934],{"class":42},[36,25909,25910],{"class":38,"line":760},[36,25911,5300],{"class":42},[36,25913,25914,25916,25918],{"class":38,"line":766},[36,25915,1378],{"class":46},[36,25917,1823],{"class":101},[36,25919,903],{"class":42},[36,25921,25922],{"class":38,"line":772},[36,25923,5281],{"class":42},[36,25925,25926,25928],{"class":38,"line":778},[36,25927,9326],{"class":101},[36,25929,9329],{"class":42},[36,25931,25932],{"class":38,"line":783},[36,25933,5300],{"class":42},[19,25935,25936],{},[4027,25937,25938],{},"静态变量的访问",[26,25940,25942],{"className":3879,"code":25941,"language":3881,"meta":31,"style":31},"#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",[33,25943,25944,25950,25960,25966,25970,25974,25978,25986,25990,25995,26003,26007,26011,26025,26040,26048,26052,26057,26062,26067,26072,26084,26089,26094,26108,26125,26129,26137,26141,26147],{"__ignoreMap":31},[36,25945,25946,25948],{"class":38,"line":39},[36,25947,5664],{"class":46},[36,25949,5667],{"class":105},[36,25951,25952,25954,25956,25958],{"class":38,"line":53},[36,25953,5672],{"class":46},[36,25955,5675],{"class":46},[36,25957,5678],{"class":101},[36,25959,5029],{"class":42},[36,25961,25962,25964],{"class":38,"line":196},[36,25963,832],{"class":46},[36,25965,18827],{"class":101},[36,25967,25968],{"class":38,"line":642},[36,25969,5281],{"class":42},[36,25971,25972],{"class":38,"line":655},[36,25973,18373],{"class":46},[36,25975,25976],{"class":38,"line":662},[36,25977,25798],{"class":3943},[36,25979,25980,25982,25984],{"class":38,"line":667},[36,25981,14681],{"class":46},[36,25983,6094],{"class":46},[36,25985,25013],{"class":42},[36,25987,25988],{"class":38,"line":679},[36,25989,18878],{"class":46},[36,25991,25992],{"class":38,"line":685},[36,25993,25994],{"class":3943},"    \u002F\u002F静态成员变量也是有访问权限的\n",[36,25996,25997,25999,26001],{"class":38,"line":691},[36,25998,14681],{"class":46},[36,26000,6094],{"class":46},[36,26002,25020],{"class":42},[36,26004,26005],{"class":38,"line":696},[36,26006,7693],{"class":42},[36,26008,26009],{"class":38,"line":702},[36,26010,25815],{"class":3943},[36,26012,26013,26015,26017,26019,26021,26023],{"class":38,"line":708},[36,26014,1378],{"class":46},[36,26016,19225],{"class":101},[36,26018,25824],{"class":42},[36,26020,47],{"class":46},[36,26022,554],{"class":112},[36,26024,5029],{"class":42},[36,26026,26027,26029,26031,26034,26036,26038],{"class":38,"line":713},[36,26028,1378],{"class":46},[36,26030,19225],{"class":101},[36,26032,26033],{"class":42},"::m_B",[36,26035,47],{"class":46},[36,26037,1921],{"class":112},[36,26039,5029],{"class":42},[36,26041,26042,26044,26046],{"class":38,"line":719},[36,26043,9057],{"class":46},[36,26045,9350],{"class":101},[36,26047,903],{"class":42},[36,26049,26050],{"class":38,"line":725},[36,26051,5281],{"class":42},[36,26053,26054],{"class":38,"line":731},[36,26055,26056],{"class":3943},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[36,26058,26059],{"class":38,"line":736},[36,26060,26061],{"class":3943},"    \u002F\u002F静态成员变量有两种访问方式：\n",[36,26063,26064],{"class":38,"line":742},[36,26065,26066],{"class":3943},"    \u002F\u002F1.通过对象进行访问\n",[36,26068,26069],{"class":38,"line":748},[36,26070,26071],{"class":42},"    Person p;  \n",[36,26073,26074,26076,26078,26080,26082],{"class":38,"line":754},[36,26075,5286],{"class":42},[36,26077,4912],{"class":46},[36,26079,25722],{"class":42},[36,26081,4912],{"class":46},[36,26083,4934],{"class":42},[36,26085,26086],{"class":38,"line":760},[36,26087,26088],{"class":3943},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[36,26090,26091],{"class":38,"line":766},[36,26092,26093],{"class":3943},"    \u002F\u002F2.通过类名进行访问\n",[36,26095,26096,26098,26100,26102,26104,26106],{"class":38,"line":772},[36,26097,5286],{"class":42},[36,26099,4912],{"class":46},[36,26101,22668],{"class":101},[36,26103,25824],{"class":42},[36,26105,4912],{"class":46},[36,26107,4934],{"class":42},[36,26109,26110,26112,26114,26116,26118,26120,26122],{"class":38,"line":778},[36,26111,5286],{"class":42},[36,26113,4912],{"class":46},[36,26115,22668],{"class":101},[36,26117,26033],{"class":42},[36,26119,4912],{"class":46},[36,26121,4977],{"class":42},[36,26123,26124],{"class":3943}," \u002F\u002F没有访问权限，报错\n",[36,26126,26127],{"class":38,"line":783},[36,26128,5300],{"class":42},[36,26130,26131,26133,26135],{"class":38,"line":789},[36,26132,1378],{"class":46},[36,26134,1823],{"class":101},[36,26136,903],{"class":42},[36,26138,26139],{"class":38,"line":795},[36,26140,5281],{"class":42},[36,26142,26143,26145],{"class":38,"line":801},[36,26144,9395],{"class":101},[36,26146,9329],{"class":42},[36,26148,26149],{"class":38,"line":807},[36,26150,5300],{"class":42},[25619,26152,26154],{"id":26153},"_8282静态成员函数","8.2.8.2静态成员函数",[19,26156,26157],{},"1.静态成员函数定义与访问",[26,26159,26161],{"className":3879,"code":26160,"language":3881,"meta":31,"style":31},"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",[33,26162,26163,26169,26173,26177,26182,26193,26197,26211,26215,26219,26227,26231,26236,26241,26245,26253,26258,26268],{"__ignoreMap":31},[36,26164,26165,26167],{"class":38,"line":39},[36,26166,832],{"class":46},[36,26168,18827],{"class":101},[36,26170,26171],{"class":38,"line":53},[36,26172,5281],{"class":42},[36,26174,26175],{"class":38,"line":196},[36,26176,18373],{"class":46},[36,26178,26179],{"class":38,"line":642},[36,26180,26181],{"class":3943},"    \u002F\u002F在公共权限下定义静态成员函数\n",[36,26183,26184,26186,26189,26191],{"class":38,"line":655},[36,26185,14681],{"class":46},[36,26187,26188],{"class":46}," void",[36,26190,15046],{"class":101},[36,26192,903],{"class":42},[36,26194,26195],{"class":38,"line":662},[36,26196,5742],{"class":42},[36,26198,26199,26202,26204,26207,26209],{"class":38,"line":667},[36,26200,26201],{"class":42},"        coout",[36,26203,4912],{"class":46},[36,26205,26206],{"class":105},"\"静态成员函数的调用\"",[36,26208,4912],{"class":46},[36,26210,4934],{"class":42},[36,26212,26213],{"class":38,"line":679},[36,26214,5899],{"class":42},[36,26216,26217],{"class":38,"line":685},[36,26218,7693],{"class":42},[36,26220,26221,26223,26225],{"class":38,"line":691},[36,26222,9057],{"class":46},[36,26224,9281],{"class":101},[36,26226,903],{"class":42},[36,26228,26229],{"class":38,"line":696},[36,26230,5281],{"class":42},[36,26232,26233],{"class":38,"line":702},[36,26234,26235],{"class":3943},"    \u002F\u002F静态成员函数的调用方式:\n",[36,26237,26238],{"class":38,"line":708},[36,26239,26240],{"class":3943},"    \u002F\u002F1.通过对象访问\n",[36,26242,26243],{"class":38,"line":713},[36,26244,18969],{"class":42},[36,26246,26247,26249,26251],{"class":38,"line":719},[36,26248,19522],{"class":42},[36,26250,15212],{"class":101},[36,26252,9329],{"class":42},[36,26254,26255],{"class":38,"line":725},[36,26256,26257],{"class":3943},"    \u002F\u002F2.通过类名访问\n",[36,26259,26260,26262,26264,26266],{"class":38,"line":731},[36,26261,22141],{"class":101},[36,26263,21354],{"class":42},[36,26265,15212],{"class":101},[36,26267,9329],{"class":42},[36,26269,26270],{"class":38,"line":736},[36,26271,5300],{"class":42},[211,26273,26274],{"start":53},[214,26275,26276],{},"静态成员函数只能访问静态成员变量",[26,26278,26280],{"className":3879,"code":26279,"language":3881,"meta":31,"style":31},"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",[33,26281,26282,26288,26292,26296,26300,26310,26314,26328,26333,26345,26349,26360,26370,26374,26378,26382,26392,26396,26409,26413,26417,26421,26425,26439,26447,26451,26455,26459,26463,26471,26475,26485,26490,26494,26502,26506,26512],{"__ignoreMap":31},[36,26283,26284,26286],{"class":38,"line":39},[36,26285,832],{"class":46},[36,26287,18827],{"class":101},[36,26289,26290],{"class":38,"line":53},[36,26291,5281],{"class":42},[36,26293,26294],{"class":38,"line":196},[36,26295,18373],{"class":46},[36,26297,26298],{"class":38,"line":642},[36,26299,26181],{"class":3943},[36,26301,26302,26304,26306,26308],{"class":38,"line":655},[36,26303,14681],{"class":46},[36,26305,26188],{"class":46},[36,26307,15046],{"class":101},[36,26309,903],{"class":42},[36,26311,26312],{"class":38,"line":662},[36,26313,5742],{"class":42},[36,26315,26316,26319,26321,26323,26325],{"class":38,"line":667},[36,26317,26318],{"class":42},"        m_A",[36,26320,47],{"class":46},[36,26322,4186],{"class":112},[36,26324,3940],{"class":42},[36,26326,26327],{"class":3943}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[36,26329,26330],{"class":38,"line":679},[36,26331,26332],{"class":3943},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[36,26334,26335,26337,26339,26341,26343],{"class":38,"line":685},[36,26336,26201],{"class":42},[36,26338,4912],{"class":46},[36,26340,26206],{"class":105},[36,26342,4912],{"class":46},[36,26344,4934],{"class":42},[36,26346,26347],{"class":38,"line":691},[36,26348,5899],{"class":42},[36,26350,26351,26353,26355,26357],{"class":38,"line":696},[36,26352,14681],{"class":46},[36,26354,6094],{"class":46},[36,26356,19104],{"class":42},[36,26358,26359],{"class":3943}," \u002F\u002F静态成员变量\n",[36,26361,26362,26364,26367],{"class":38,"line":702},[36,26363,5697],{"class":46},[36,26365,26366],{"class":42}," m_B;",[36,26368,26369],{"class":3943}," \u002F\u002F非静态成员变量\n",[36,26371,26372],{"class":38,"line":708},[36,26373,659],{"emptyLinePlaceholder":658},[36,26375,26376],{"class":38,"line":713},[36,26377,18878],{"class":46},[36,26379,26380],{"class":38,"line":719},[36,26381,25994],{"class":3943},[36,26383,26384,26386,26388,26390],{"class":38,"line":725},[36,26385,14681],{"class":46},[36,26387,26188],{"class":46},[36,26389,17277],{"class":101},[36,26391,903],{"class":42},[36,26393,26394],{"class":38,"line":731},[36,26395,5742],{"class":42},[36,26397,26398,26400,26402,26405,26407],{"class":38,"line":736},[36,26399,7150],{"class":42},[36,26401,4912],{"class":46},[36,26403,26404],{"class":105},"\"这是私有权限下的静态函数调用\"",[36,26406,4912],{"class":46},[36,26408,4934],{"class":42},[36,26410,26411],{"class":38,"line":742},[36,26412,5899],{"class":42},[36,26414,26415],{"class":38,"line":748},[36,26416,659],{"emptyLinePlaceholder":658},[36,26418,26419],{"class":38,"line":754},[36,26420,659],{"emptyLinePlaceholder":658},[36,26422,26423],{"class":38,"line":760},[36,26424,7693],{"class":42},[36,26426,26427,26429,26431,26433,26435,26437],{"class":38,"line":766},[36,26428,1378],{"class":46},[36,26430,19225],{"class":101},[36,26432,25824],{"class":42},[36,26434,47],{"class":46},[36,26436,1859],{"class":112},[36,26438,5029],{"class":42},[36,26440,26441,26443,26445],{"class":38,"line":772},[36,26442,9057],{"class":46},[36,26444,9281],{"class":101},[36,26446,903],{"class":42},[36,26448,26449],{"class":38,"line":778},[36,26450,5281],{"class":42},[36,26452,26453],{"class":38,"line":783},[36,26454,26235],{"class":3943},[36,26456,26457],{"class":38,"line":789},[36,26458,26240],{"class":3943},[36,26460,26461],{"class":38,"line":795},[36,26462,18969],{"class":42},[36,26464,26465,26467,26469],{"class":38,"line":801},[36,26466,19522],{"class":42},[36,26468,15212],{"class":101},[36,26470,9329],{"class":42},[36,26472,26473],{"class":38,"line":807},[36,26474,26257],{"class":3943},[36,26476,26477,26479,26481,26483],{"class":38,"line":813},[36,26478,22141],{"class":101},[36,26480,21354],{"class":42},[36,26482,15212],{"class":101},[36,26484,9329],{"class":42},[36,26486,26487],{"class":38,"line":819},[36,26488,26489],{"class":3943},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[36,26491,26492],{"class":38,"line":824},[36,26493,5300],{"class":42},[36,26495,26496,26498,26500],{"class":38,"line":829},[36,26497,1378],{"class":46},[36,26499,1823],{"class":101},[36,26501,903],{"class":42},[36,26503,26504],{"class":38,"line":851},[36,26505,5281],{"class":42},[36,26507,26508,26510],{"class":38,"line":868},[36,26509,9326],{"class":101},[36,26511,9329],{"class":42},[36,26513,26514],{"class":38,"line":873},[36,26515,5300],{"class":42},[318,26517,26519],{"id":26518},"_83c对象模型和this指针","8.3C++对象模型和this指针",[25619,26521,26523],{"id":26522},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,26525,26526],{},"在c++中，类内的成员变量和成员函数分开存储",[19,26528,26529],{},"只有非静态成员变量才属于类的对象上",[26531,26532,26534],"h5",{"id":26533},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[26,26536,26538],{"className":3879,"code":26537,"language":3881,"meta":31,"style":31},"#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",[33,26539,26540,26547,26557,26563,26567,26571,26575,26583,26587,26591,26614,26618,26626,26630,26636],{"__ignoreMap":31},[36,26541,26542,26544],{"class":38,"line":39},[36,26543,5664],{"class":46},[36,26545,26546],{"class":105},"\u003Ciostraem>\n",[36,26548,26549,26551,26553,26555],{"class":38,"line":53},[36,26550,5672],{"class":46},[36,26552,5675],{"class":46},[36,26554,5678],{"class":101},[36,26556,5029],{"class":42},[36,26558,26559,26561],{"class":38,"line":196},[36,26560,832],{"class":46},[36,26562,18827],{"class":101},[36,26564,26565],{"class":38,"line":642},[36,26566,5281],{"class":42},[36,26568,26569],{"class":38,"line":655},[36,26570,659],{"emptyLinePlaceholder":658},[36,26572,26573],{"class":38,"line":662},[36,26574,7693],{"class":42},[36,26576,26577,26579,26581],{"class":38,"line":667},[36,26578,9057],{"class":46},[36,26580,9281],{"class":101},[36,26582,903],{"class":42},[36,26584,26585],{"class":38,"line":679},[36,26586,5281],{"class":42},[36,26588,26589],{"class":38,"line":685},[36,26590,18969],{"class":42},[36,26592,26593,26595,26597,26600,26602,26605,26607,26609,26611],{"class":38,"line":691},[36,26594,5286],{"class":42},[36,26596,4912],{"class":46},[36,26598,26599],{"class":105},"\"size of p=\"",[36,26601,4912],{"class":46},[36,26603,26604],{"class":101},"sizeoif",[36,26606,10230],{"class":42},[36,26608,4912],{"class":46},[36,26610,4977],{"class":42},[36,26612,26613],{"class":3943}," \u002F\u002F查看这个空类的占用的内存空间\n",[36,26615,26616],{"class":38,"line":696},[36,26617,5300],{"class":42},[36,26619,26620,26622,26624],{"class":38,"line":702},[36,26621,1378],{"class":46},[36,26623,1823],{"class":101},[36,26625,903],{"class":42},[36,26627,26628],{"class":38,"line":708},[36,26629,5281],{"class":42},[36,26631,26632,26634],{"class":38,"line":713},[36,26633,9326],{"class":101},[36,26635,9329],{"class":42},[36,26637,26638],{"class":38,"line":719},[36,26639,5300],{"class":42},[19,26641,26642],{},"输出结果为：size of p=1",[19,26644,26645],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,26647,26648],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[26531,26650,26652],{"id":26651},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[26,26654,26656],{"className":3879,"code":26655,"language":3881,"meta":31,"style":31},"#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",[33,26657,26658,26664,26674,26682,26686,26695,26699,26707,26711,26715,26734,26738,26742,26750,26754,26760],{"__ignoreMap":31},[36,26659,26660,26662],{"class":38,"line":39},[36,26661,5664],{"class":46},[36,26663,5667],{"class":105},[36,26665,26666,26668,26670,26672],{"class":38,"line":53},[36,26667,5672],{"class":46},[36,26669,5675],{"class":46},[36,26671,5678],{"class":101},[36,26673,5029],{"class":42},[36,26675,26676,26678,26680],{"class":38,"line":196},[36,26677,832],{"class":46},[36,26679,19225],{"class":101},[36,26681,6377],{"class":42},[36,26683,26684],{"class":38,"line":642},[36,26685,5281],{"class":42},[36,26687,26688,26690,26692],{"class":38,"line":655},[36,26689,5697],{"class":46},[36,26691,19104],{"class":42},[36,26693,26694],{"class":3943},"\u002F\u002F非静态成员变量\n",[36,26696,26697],{"class":38,"line":662},[36,26698,7693],{"class":42},[36,26700,26701,26703,26705],{"class":38,"line":667},[36,26702,9057],{"class":46},[36,26704,9281],{"class":101},[36,26706,903],{"class":42},[36,26708,26709],{"class":38,"line":679},[36,26710,5281],{"class":42},[36,26712,26713],{"class":38,"line":685},[36,26714,18969],{"class":42},[36,26716,26717,26719,26721,26723,26725,26727,26729,26731],{"class":38,"line":691},[36,26718,5286],{"class":42},[36,26720,4912],{"class":46},[36,26722,26599],{"class":105},[36,26724,5108],{"class":46},[36,26726,10230],{"class":42},[36,26728,4912],{"class":46},[36,26730,4977],{"class":42},[36,26732,26733],{"class":3943}," \u002F\u002F查看不是空对象时占用多少内存\n",[36,26735,26736],{"class":38,"line":696},[36,26737,659],{"emptyLinePlaceholder":658},[36,26739,26740],{"class":38,"line":702},[36,26741,5300],{"class":42},[36,26743,26744,26746,26748],{"class":38,"line":708},[36,26745,1378],{"class":46},[36,26747,1823],{"class":101},[36,26749,903],{"class":42},[36,26751,26752],{"class":38,"line":713},[36,26753,5281],{"class":42},[36,26755,26756,26758],{"class":38,"line":719},[36,26757,9326],{"class":101},[36,26759,9329],{"class":42},[36,26761,26762],{"class":38,"line":725},[36,26763,5300],{"class":42},[19,26765,26766],{},"输出结果：size of p=4",[19,26768,26769],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[211,26771,26772],{},[214,26773,26774],{},"如果加上非静态成员变量，Person类修改如下",[26,26776,26778],{"className":3879,"code":26777,"language":3881,"meta":31,"style":31},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[33,26779,26780,26786,26790,26796,26804,26808,26813],{"__ignoreMap":31},[36,26781,26782,26784],{"class":38,"line":39},[36,26783,832],{"class":46},[36,26785,18827],{"class":101},[36,26787,26788],{"class":38,"line":53},[36,26789,5281],{"class":42},[36,26791,26792,26794],{"class":38,"line":196},[36,26793,5697],{"class":46},[36,26795,25013],{"class":42},[36,26797,26798,26800,26802],{"class":38,"line":642},[36,26799,14681],{"class":46},[36,26801,6094],{"class":46},[36,26803,25020],{"class":42},[36,26805,26806],{"class":38,"line":655},[36,26807,7693],{"class":42},[36,26809,26810],{"class":38,"line":662},[36,26811,26812],{"class":3943},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[36,26814,26815,26817,26819,26821,26823,26825],{"class":38,"line":667},[36,26816,1378],{"class":46},[36,26818,19225],{"class":101},[36,26820,26033],{"class":42},[36,26822,47],{"class":46},[36,26824,1859],{"class":112},[36,26826,5029],{"class":42},[19,26828,26829],{},"输出结果：4",[19,26831,26832],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[211,26834,26835],{"start":53},[214,26836,26837],{},"加上非静态成员函数",[26,26839,26841],{"className":3879,"code":26840,"language":3881,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[33,26842,26843,26850,26854,26860,26868,26872,26876,26880],{"__ignoreMap":31},[36,26844,26845,26847],{"class":38,"line":39},[36,26846,832],{"class":46},[36,26848,26849],{"class":101},"  Person\n",[36,26851,26852],{"class":38,"line":53},[36,26853,5281],{"class":42},[36,26855,26856,26858],{"class":38,"line":196},[36,26857,5697],{"class":46},[36,26859,25013],{"class":42},[36,26861,26862,26864,26866],{"class":38,"line":642},[36,26863,18565],{"class":46},[36,26865,15046],{"class":101},[36,26867,903],{"class":42},[36,26869,26870],{"class":38,"line":655},[36,26871,5742],{"class":42},[36,26873,26874],{"class":38,"line":662},[36,26875,659],{"emptyLinePlaceholder":658},[36,26877,26878],{"class":38,"line":667},[36,26879,5899],{"class":42},[36,26881,26882],{"class":38,"line":679},[36,26883,7693],{"class":42},[19,26885,26886],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[211,26888,26889],{"start":196},[214,26890,26891],{},"加上静态成员函数",[26,26893,26895],{"className":3879,"code":26894,"language":3881,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[33,26896,26897,26903,26907,26913,26921,26925,26929,26933,26944,26948,26952,26956],{"__ignoreMap":31},[36,26898,26899,26901],{"class":38,"line":39},[36,26900,832],{"class":46},[36,26902,26849],{"class":101},[36,26904,26905],{"class":38,"line":53},[36,26906,5281],{"class":42},[36,26908,26909,26911],{"class":38,"line":196},[36,26910,5697],{"class":46},[36,26912,25013],{"class":42},[36,26914,26915,26917,26919],{"class":38,"line":642},[36,26916,18565],{"class":46},[36,26918,15046],{"class":101},[36,26920,903],{"class":42},[36,26922,26923],{"class":38,"line":655},[36,26924,5742],{"class":42},[36,26926,26927],{"class":38,"line":662},[36,26928,659],{"emptyLinePlaceholder":658},[36,26930,26931],{"class":38,"line":667},[36,26932,5899],{"class":42},[36,26934,26935,26937,26939,26942],{"class":38,"line":679},[36,26936,14681],{"class":46},[36,26938,26188],{"class":46},[36,26940,26941],{"class":101}," func1",[36,26943,903],{"class":42},[36,26945,26946],{"class":38,"line":685},[36,26947,5742],{"class":42},[36,26949,26950],{"class":38,"line":691},[36,26951,659],{"emptyLinePlaceholder":658},[36,26953,26954],{"class":38,"line":696},[36,26955,5899],{"class":42},[36,26957,26958],{"class":38,"line":702},[36,26959,7693],{"class":42},[19,26961,26829],{},[19,26963,26964],{},"解释：静态成员函数也不属于类上",[3785,26966,11365],{},{"title":31,"searchDepth":53,"depth":53,"links":26968},[26969,26975],{"id":18303,"depth":53,"text":18304,"children":26970},[26971,26972,26973,26974],{"id":18307,"depth":196,"text":18308},{"id":19030,"depth":196,"text":19031},{"id":19202,"depth":196,"text":19203},{"id":19661,"depth":196,"text":19662},{"id":21999,"depth":53,"text":22000,"children":26976},[26977,26978,26979,26980,26981,26982,26983,26984,26985],{"id":22011,"depth":196,"text":22012},{"id":22304,"depth":196,"text":22305},{"id":22795,"depth":196,"text":22796},{"id":23892,"depth":196,"text":23893},{"id":24315,"depth":196,"text":24316},{"id":24794,"depth":196,"text":24795},{"id":25168,"depth":196,"text":25169},{"id":25581,"depth":196,"text":25582},{"id":26518,"depth":196,"text":26519},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":18269,"description":26986},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":26993,"title":3881,"body":26994,"description":26998,"extension":3817,"meta":26999,"navigation":658,"path":27001,"seo":27002,"stem":27003,"__hash__":27004},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":26995,"toc":26996},[],{"title":31,"searchDepth":53,"depth":53,"links":26997},[],null,{"category":27000},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":3881,"description":26998},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":27006,"title":27007,"body":27008,"description":31,"extension":3817,"meta":27593,"navigation":658,"path":27594,"seo":27595,"stem":27596,"__hash__":27597},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":27009,"toc":27575},[27010,27013,27017,27020,27023,27026,27044,27049,27052,27055,27058,27061,27066,27069,27074,27077,27080,27084,27087,27090,27096,27099,27117,27121,27125,27128,27133,27136,27140,27143,27156,27159,27163,27166,27169,27172,27197,27200,27209,27220,27235,27267,27271,27277,27285,27289,27292,27295,27300,27304,27307,27310,27315,27318,27322,27325,27328,27333,27336,27340,27345,27349,27415,27419,27422,27425,27428,27431,27434,27440,27457,27460,27474,27483,27487,27490,27493,27498,27501,27506,27511,27514,27517,27522,27527,27530,27535,27540,27543,27548,27553,27556,27559,27564,27567,27572],[10,27011,27007],{"id":27012},"_1强化学习基本认识",[14,27014,27016],{"id":27015},"_11什么是强化学习","1.1.什么是强化学习",[19,27018,27019],{},"强化学习有两部分组成：智能体和环境；",[19,27021,27022],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,27024,27025],{},"强化学习与监督学习的区别:",[211,27027,27028,27031,27034,27037],{},[214,27029,27030],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[214,27032,27033],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[214,27035,27036],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[214,27038,27039,27040,27043],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[4027,27041,27042],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,27045,27046],{},[5198,27047],{"alt":31,"src":27048},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,27050,27051],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,27053,27054],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,27056,27057],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,27059,27060],{},"获取奖励",[19,27062,27063],{},[5198,27064],{"alt":31,"src":27065},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,27067,27068],{},"强化学习可以分成标准强化学习和深度强化学习",[19,27070,27071],{},[5198,27072],{"alt":31,"src":27073},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,27075,27076],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,27078,27079],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,27081,27083],{"id":27082},"_12强化学习应用场景","1.2.强化学习应用场景",[19,27085,27086],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,27088,27089],{},"具身智能中的应用",[19,27091,27092,27095],{},[4027,27093,27094],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,27097,27098],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,27100,27101,27102,27105,27106,27109,27110,27113,27114],{},"机器人是",[4027,27103,27104],{},"躯体","，深度学习是",[4027,27107,27108],{},"神经元****网络","，VLA是",[4027,27111,27112],{},"通用的行为逻辑","，而强化学习是",[4027,27115,27116],{},"教练",[14,27118,27120],{"id":27119},"_13序列决策","1.3.序列决策",[318,27122,27124],{"id":27123},"_131智能体与环境","1.3.1.智能体与环境",[19,27126,27127],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,27129,27130],{},[5198,27131],{"alt":31,"src":27132},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,27134,27135],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[318,27137,27139],{"id":27138},"_132奖励","1.3.2.奖励",[19,27141,27142],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,27144,27145,27146,27155],{},"取某个策略的表现如何。强化学习的目的就是",[4027,27147,27148,27149,27154],{},"最大化",[4027,27150,27151],{},[4027,27152,27153],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,27157,27158],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[318,27160,27162],{"id":27161},"_133序列决策","1.3.3.序列决策",[19,27164,27165],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,27167,27168],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,27170,27171],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,27173,27174,27178,27179,27181,27182,27184,27185,27187,27188,17454,27191,17454,27194],{},[27175,27176,27177],"em",{},"Ht"," = ",[27175,27180,4467],{},"1*, a",[27175,27183,4092],{},", r",[27175,27186,4092],{},", . . . ,* ",[27175,27189,27190],{},"ot",[27175,27192,27193],{},", at ,",[27175,27195,27196],{},"rt",[19,27198,27199],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,27201,27202,27178,27205,5386,27207,4304],{},[27175,27203,27204],{},"st",[27175,27206,3937],{},[27175,27208,27177],{},[19,27210,27211,27212,27215,27216,27219],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[4027,27213,27214],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[4027,27217,27218],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,27221,27222,27223,27226,27227,27230,27231,27234],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[4027,27224,27225],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[4027,27228,27229],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[27175,27232,27233],{},"S, A, T, R, Ω, O, γ",")。",[19,27236,27237,27238,27240,27241,27243,27244,495,27246,27249,27250,27252,27253,495,27256,27259,27260,27262,27263,27266],{},"其中 ",[27175,27239,4560],{}," 表示状态空间，为隐变量，",[27175,27242,4107],{}," 为动作空间，",[27175,27245,4584],{},[27175,27247,27248],{},"s ′ |s, a",") 为状态转移概率，",[27175,27251,4535],{}," 为奖励函数，",[27175,27254,27255],{},"Ω",[27175,27257,27258],{},"o|s, a",") 为观测概率，",[27175,27261,4461],{}," 为观测空间，",[27175,27264,27265],{},"γ"," 为折扣因子。",[14,27268,27270],{"id":27269},"_14动作空间","1.4.动作空间",[19,27272,27273,27274,27276],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[4027,27275,307],{}," ，动作空间分为:",[211,27278,27279,27282],{},[214,27280,27281],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[214,27283,27284],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,27286,27288],{"id":27287},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,27290,27291],{},"由策略、价值函数、模型三部分组成",[19,27293,27294],{},"这三者组成马尔可夫决策过程",[19,27296,27297],{},[5198,27298],{"alt":31,"src":27299},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[318,27301,27303],{"id":27302},"_151策略","1.5.1.策略",[19,27305,27306],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,27308,27309],{},"策略可分为两种：",[19,27311,27312],{},[5198,27313],{"alt":31,"src":27314},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,27316,27317],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[318,27319,27321],{"id":27320},"_152价值函数","1.5.2.价值函数",[19,27323,27324],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,27326,27327],{},"价值函数中有一个折扣因子，类似于存款利息",[19,27329,27330],{},[5198,27331],{"alt":31,"src":27332},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,27334,27335],{},"进入某个状态采取的最优动作可以通过Q函数得到",[318,27337,27339],{"id":27338},"_153模型","1.5.3.模型",[19,27341,27342],{},[5198,27343],{"alt":31,"src":27344},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,27346,27348],{"id":27347},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[248,27350,27351,27361],{},[251,27352,27353],{},[254,27354,27355,27358],{},[257,27356,27357],{"align":259},"类型",[257,27359,27360],{"align":259},"特点",[265,27362,27363,27373,27383,27393,27405],{},[254,27364,27365,27370],{},[270,27366,27367],{"align":259},[4027,27368,27369],{},"基于价值的智能体",[270,27371,27372],{"align":259},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[254,27374,27375,27380],{},[270,27376,27377],{"align":259},[4027,27378,27379],{},"基于策略的智能体",[270,27381,27382],{"align":259},"直接学习策略，没有学习价值函数",[254,27384,27385,27390],{},[270,27386,27387],{"align":259},[4027,27388,27389],{},"演员-评论员智能体",[270,27391,27392],{"align":259},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[254,27394,27395,27400],{},[270,27396,27397],{"align":259},[4027,27398,27399],{},"有模型强化学习智能体",[270,27401,27402],{"align":259},[5198,27403],{"alt":31,"src":27404},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[254,27406,27407,27412],{},[270,27408,27409],{"align":259},[4027,27410,27411],{},"免模型强化学习智能体",[270,27413,27414],{"align":259},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,27416,27418],{"id":27417},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,27420,27421],{},"学习和规划是序列决策的两个基本问题",[19,27423,27424],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,27426,27427],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,27429,27430],{},"强化学习用到的库：Gym",[19,27432,27433],{},"Gym可以检验强化学习算法的优劣",[19,27435,27436,27439],{},[4027,27437,27438],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[26,27441,27443],{"className":92,"code":27442,"language":94,"meta":31,"style":31},"pip install gym==0.25.2\n",[33,27444,27445],{"__ignoreMap":31},[36,27446,27447,27449,27451,27454],{"class":38,"line":39},[36,27448,141],{"class":101},[36,27450,109],{"class":105},[36,27452,27453],{"class":105}," gym==",[36,27455,27456],{"class":112},"0.25.2\n",[19,27458,27459],{},"显示图形界面需要",[26,27461,27463],{"className":92,"code":27462,"language":94,"meta":31,"style":31},"pip install pygame\n",[33,27464,27465],{"__ignoreMap":31},[36,27466,27467,27469,27471],{"class":38,"line":39},[36,27468,141],{"class":101},[36,27470,109],{"class":105},[36,27472,27473],{"class":105}," pygame\n",[19,27475,27476,27477],{},"有关Gym库的相关文档介绍：",[4113,27478,27482],{"href":27479,"rel":27480},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[27481],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,27484,27486],{"id":27485},"_18一些补充基础概念","1.8.一些补充基础概念",[19,27488,27489],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,27491,27492],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,27494,27495],{},[5198,27496],{"alt":31,"src":27497},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,27499,27500],{},"折扣率需要自己来设定",[19,27502,27503],{},[5198,27504],{"alt":31,"src":27505},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[211,27507,27508],{},[214,27509,27510],{},"状态转移函数：",[19,27512,27513],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,27515,27516],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,27518,27519],{},[5198,27520],{"alt":31,"src":27521},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[211,27523,27524],{"start":53},[214,27525,27526],{},"动作价值函数：",[19,27528,27529],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,27531,27532],{},[5198,27533],{"alt":31,"src":27534},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[211,27536,27537],{"start":196},[214,27538,27539],{},"最优动作价值函数：",[19,27541,27542],{},"这个函数是对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,27544,27545],{},[5198,27546],{"alt":31,"src":27547},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[211,27549,27550],{"start":642},[214,27551,27552],{},"状态价值函数:",[19,27554,27555],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,27557,27558],{},"它衡量的是“一个具体动作”的长期价值",[19,27560,27561],{},[5198,27562],{"alt":31,"src":27563},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,27565,27566],{},"几个价值函数之间的比较：",[19,27568,27569],{},[5198,27570],{"alt":31,"src":27571},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[3785,27573,27574],{},"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":31,"searchDepth":53,"depth":53,"links":27576},[27577,27578,27579,27584,27585,27590,27591,27592],{"id":27015,"depth":53,"text":27016},{"id":27082,"depth":53,"text":27083},{"id":27119,"depth":53,"text":27120,"children":27580},[27581,27582,27583],{"id":27123,"depth":196,"text":27124},{"id":27138,"depth":196,"text":27139},{"id":27161,"depth":196,"text":27162},{"id":27269,"depth":53,"text":27270},{"id":27287,"depth":53,"text":27288,"children":27586},[27587,27588,27589],{"id":27302,"depth":196,"text":27303},{"id":27320,"depth":196,"text":27321},{"id":27338,"depth":196,"text":27339},{"id":27347,"depth":53,"text":27348},{"id":27417,"depth":53,"text":27418},{"id":27485,"depth":53,"text":27486},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":27007,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":27599,"title":27600,"body":27601,"description":27608,"extension":3817,"meta":27619,"navigation":658,"path":27620,"seo":27621,"stem":27622,"__hash__":27623},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":27602,"toc":27617},[27603,27606,27609,27614],[10,27604,27600],{"id":27605},"_2马尔可夫决策过程",[19,27607,27608],{},"这是强化学习的基本框架",[19,27610,27611],{},[5198,27612],{"alt":31,"src":27613},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,27615,27616],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":31,"searchDepth":53,"depth":53,"links":27618},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":27600,"description":27608},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":27625,"title":27626,"body":27627,"description":31,"extension":3817,"meta":27743,"navigation":658,"path":27744,"seo":27745,"stem":27746,"__hash__":27747},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":27628,"toc":27738},[27629,27632,27636,27639,27644,27649,27652,27657,27660,27665,27668,27672,27677,27680,27685,27690,27695,27698,27702,27707,27710,27715,27720,27725,27730,27733],[10,27630,27626],{"id":27631},"_3动作价值函数",[14,27633,27635],{"id":27634},"_31dqn","3.1.DQN",[19,27637,27638],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,27640,27641],{},[5198,27642],{"alt":31,"src":27643},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,27645,27646],{},[5198,27647],{"alt":31,"src":27648},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,27650,27651],{},"DQN算法的描述：",[19,27653,27654],{},[5198,27655],{"alt":31,"src":27656},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,27658,27659],{},"这里的Dense指的是全连接层",[19,27661,27662],{},[5198,27663],{"alt":31,"src":27664},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,27666,27667],{},"当前观测的状态为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,27669,27671],{"id":27670},"_32dqn的举例","3.2.DQN的举例",[19,27673,27674],{},[5198,27675],{"alt":31,"src":27676},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,27678,27679],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,27681,27682],{},[5198,27683],{"alt":31,"src":27684},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,27686,27687],{},[5198,27688],{"alt":31,"src":27689},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,27691,27692],{},[5198,27693],{"alt":31,"src":27694},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,27696,27697],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,27699,27701],{"id":27700},"_33td算法","3.3.TD算法",[19,27703,27704],{},[5198,27705],{"alt":31,"src":27706},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,27708,27709],{},"强化学习TD算法公式的粗略解释：",[19,27711,27712],{},[5198,27713],{"alt":31,"src":27714},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,27716,27717],{},[5198,27718],{"alt":31,"src":27719},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,27721,27722],{},[5198,27723],{"alt":31,"src":27724},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,27726,27727],{},[5198,27728],{"alt":31,"src":27729},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,27731,27732],{},"TD算法总结：",[19,27734,27735],{},[5198,27736],{"alt":31,"src":27737},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":31,"searchDepth":53,"depth":53,"links":27739},[27740,27741,27742],{"id":27634,"depth":53,"text":27635},{"id":27670,"depth":53,"text":27671},{"id":27700,"depth":53,"text":27701},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":27626,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":27749,"title":27750,"body":27751,"description":31,"extension":3817,"meta":27984,"navigation":658,"path":27985,"seo":27986,"stem":27987,"__hash__":27988},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":27752,"toc":27980},[27753,27756,27760,27763,27766,27771,27776,27779,27784,27789,27792,27797,27800,27805,27808,27813,27816,27821,27824,27829,27834,27837,27842,27845,27848,27853,27856,27861,27866,27870,27873,27876,27881,27886,27889,27894,27899,27902,27907,27910,27913,27918,27921,27926,27929,27934,27939,27942,27947,27952,27955,27960,27963,27968,27971],[10,27754,27750],{"id":27755},"_4策略学习",[14,27757,27759],{"id":27758},"_41概念描述","4.1.概念描述",[19,27761,27762],{},"用神经网络（策略网络）近似策略函数",[19,27764,27765],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,27767,27768],{},[5198,27769],{"alt":31,"src":27770},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,27772,27773],{},[5198,27774],{"alt":31,"src":27775},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,27777,27778],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,27780,27781],{},[5198,27782],{"alt":31,"src":27783},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,27785,27786],{},[5198,27787],{"alt":31,"src":27788},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,27790,27791],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,27793,27794],{},[5198,27795],{"alt":31,"src":27796},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,27798,27799],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,27801,27802],{},[5198,27803],{"alt":31,"src":27804},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,27806,27807],{},"改进theta要用到策略梯度算法",[19,27809,27810],{},[5198,27811],{"alt":31,"src":27812},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,27814,27815],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,27817,27818],{},[5198,27819],{"alt":31,"src":27820},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,27822,27823],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,27825,27826],{},[5198,27827],{"alt":31,"src":27828},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,27830,27831],{},[5198,27832],{"alt":31,"src":27833},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,27835,27836],{},"梯度公式总结：",[19,27838,27839],{},[5198,27840],{"alt":31,"src":27841},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,27843,27844],{},"两个公式的分别应用场景：",[19,27846,27847],{},"对于离散的动作：",[19,27849,27850],{},[5198,27851],{"alt":31,"src":27852},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,27854,27855],{},"对于连续的动作：",[19,27857,27858],{},[5198,27859],{"alt":31,"src":27860},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,27862,27863],{},[5198,27864],{"alt":31,"src":27865},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,27867,27869],{"id":27868},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,27871,27872],{},"使用蒙特卡洛来近似计算策略梯度",[19,27874,27875],{},"蒙特卡洛法的解释如下：",[19,27877,27878],{},[5198,27879],{"alt":31,"src":27880},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,27882,27883],{},[5198,27884],{"alt":31,"src":27885},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,27887,27888],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[211,27890,27891],{},[214,27892,27893],{},"方法一：reinforce算法",[19,27895,27896],{},[5198,27897],{"alt":31,"src":27898},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,27900,27901],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[211,27903,27904],{"start":53},[214,27905,27906],{},"方法二：actor-critic算法",[19,27908,27909],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,27911,27912],{},"两个网络的构建：",[19,27914,27915],{},[5198,27916],{"alt":31,"src":27917},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,27919,27920],{},"actor网路：",[19,27922,27923],{},[5198,27924],{"alt":31,"src":27925},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,27927,27928],{},"critic网络",[19,27930,27931],{},[5198,27932],{"alt":31,"src":27933},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[211,27935,27936],{"start":196},[214,27937,27938],{},"网络的训练",[19,27940,27941],{},"网络描述",[19,27943,27944],{},[5198,27945],{"alt":31,"src":27946},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,27948,27949],{},[5198,27950],{"alt":31,"src":27951},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,27953,27954],{},"TD算法更新梯度：",[19,27956,27957],{},[5198,27958],{"alt":31,"src":27959},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,27961,27962],{},"策略网络更新梯度：",[19,27964,27965],{},[5198,27966],{"alt":31,"src":27967},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,27969,27970],{},"训练整个流程的具体描述：",[19,27972,27973,27976,27977],{},[5198,27974],{"alt":31,"src":27975},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[5198,27978],{"alt":31,"src":27979},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":31,"searchDepth":53,"depth":53,"links":27981},[27982,27983],{"id":27758,"depth":53,"text":27759},{"id":27868,"depth":53,"text":27869},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":27750,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":27990,"title":27991,"body":27992,"description":27999,"extension":3817,"meta":28049,"navigation":658,"path":28050,"seo":28051,"stem":28052,"__hash__":28053},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":27993,"toc":28045},[27994,27997,28000,28004,28007,28012,28016,28019,28024,28027,28032,28037,28040],[10,27995,27991],{"id":27996},"_5alphago算法",[19,27998,27999],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,28001,28003],{"id":28002},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,28005,28006],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,28008,28009],{},[5198,28010],{"alt":31,"src":28011},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,28013,28015],{"id":28014},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,28017,28018],{},"采用强化学习的方式训练策略网络",[19,28020,28021],{},[5198,28022],{"alt":31,"src":28023},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,28025,28026],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,28028,28029],{},[5198,28030],{"alt":31,"src":28031},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,28033,28034],{},[5198,28035],{"alt":31,"src":28036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,28038,28039],{},"强化学习训练策略网络的总结：",[19,28041,28042],{},[5198,28043],{"alt":31,"src":28044},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":31,"searchDepth":53,"depth":53,"links":28046},[28047,28048],{"id":28002,"depth":53,"text":28003},{"id":28014,"depth":53,"text":28015},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":27991,"description":27999},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":28055,"title":28056,"body":28057,"description":28064,"extension":3817,"meta":28067,"navigation":658,"path":28068,"seo":28069,"stem":28070,"__hash__":28071},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":28058,"toc":28065},[28059,28062],[10,28060,28056],{"id":28061},"_6价值网络",[19,28063,28064],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":31,"searchDepth":53,"depth":53,"links":28066},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":28056,"description":28064},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":28073,"title":28074,"body":28075,"description":28079,"extension":3817,"meta":28080,"navigation":658,"path":28081,"seo":28082,"stem":28083,"__hash__":28084},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":28076,"toc":28077},[],{"title":31,"searchDepth":53,"depth":53,"links":28078},[],"记录自己的强化学习笔记。",{"category":27000},"\u002Fwiki\u002F2025-12-04",{"title":28074,"description":28079},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":28086,"title":28087,"body":28088,"description":26998,"extension":3817,"meta":28127,"navigation":658,"path":28128,"seo":28129,"stem":28130,"__hash__":28131},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":28089,"toc":28125},[28090,28093,28096,28102,28105,28111,28114,28119,28122],[10,28091,28087],{"id":28092},"_1-项目概览与官方资源",[19,28094,28095],{},"官方文档：",[19,28097,28098],{},[4113,28099,28100],{"href":28100,"rel":28101},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[27481],[19,28103,28104],{},"官方代码仓库：",[19,28106,28107],{},[4113,28108,28109],{"href":28109,"rel":28110},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[27481],[19,28112,28113],{},"复现大体流程：",[19,28115,28116],{},[5198,28117],{"alt":31,"src":28118},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,28120,28121],{},"本教程的目标是打通这条链路：",[19,28123,28124],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":31,"searchDepth":53,"depth":53,"links":28126},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":28087,"description":26998},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":28133,"title":28134,"body":28135,"description":26998,"extension":3817,"meta":28250,"navigation":658,"path":28251,"seo":28252,"stem":28253,"__hash__":28254},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":28136,"toc":28245},[28137,28140,28144,28147,28154,28158,28161,28170,28180,28184,28213,28216,28242],[10,28138,28134],{"id":28139},"_2-环境准备与设备连接",[14,28141,28143],{"id":28142},"_21-系统与环境","2.1 系统与环境",[19,28145,28146],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,28148,28149,28150,28153],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[33,28151,28152],{},"lerobot"," 依赖。",[14,28155,28157],{"id":28156},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,28159,28160],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[26,28162,28164],{"className":92,"code":28163,"language":94,"meta":31,"style":31},"lerobot-find-out\n",[33,28165,28166],{"__ignoreMap":31},[36,28167,28168],{"class":38,"line":39},[36,28169,28163],{"class":101},[19,28171,28172,28173,4087,28176,28179],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[33,28174,28175],{},"\u002Fdev\u002FttyACM0",[33,28177,28178],{},"\u002Fdev\u002FttyACM1","）。",[14,28181,28183],{"id":28182},"_23-串口授权","2.3 串口授权",[26,28185,28187],{"className":92,"code":28186,"language":94,"meta":31,"style":31},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[33,28188,28189,28202],{"__ignoreMap":31},[36,28190,28191,28193,28196,28199],{"class":38,"line":39},[36,28192,102],{"class":101},[36,28194,28195],{"class":105}," chmod",[36,28197,28198],{"class":112}," 666",[36,28200,28201],{"class":105}," \u002Fdev\u002FttyACM0\n",[36,28203,28204,28206,28208,28210],{"class":38,"line":53},[36,28205,102],{"class":101},[36,28207,28195],{"class":105},[36,28209,28198],{"class":112},[36,28211,28212],{"class":105}," \u002Fdev\u002FttyACM1\n",[19,28214,28215],{},"说明：",[4875,28217,28218,28223,28229,28239],{},[214,28219,28220,28222],{},[33,28221,102],{},"：以 root 权限执行命令。",[214,28224,28225,28228],{},[33,28226,28227],{},"chmod","：修改设备节点权限。",[214,28230,28231,28234,28235,28238],{},[33,28232,28233],{},"666","：",[33,28236,28237],{},"rw-rw-rw-","，所有用户可读写。",[214,28240,28241],{},"串口号必须替换为你机器上的真实端口。",[3785,28243,28244],{},"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":31,"searchDepth":53,"depth":53,"links":28246},[28247,28248,28249],{"id":28142,"depth":53,"text":28143},{"id":28156,"depth":53,"text":28157},{"id":28182,"depth":53,"text":28183},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":28134,"description":26998},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":28256,"title":28257,"body":28258,"description":26998,"extension":3817,"meta":28419,"navigation":658,"path":28420,"seo":28421,"stem":28422,"__hash__":28423},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":28259,"toc":28415},[28260,28264,28268,28274,28277,28334,28337,28341,28344,28412],[10,28261,28263],{"id":28262},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,28265,28267],{"id":28266},"_31-配置电机-id","3.1 配置电机 ID",[19,28269,28270,28271,28273],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[33,28272,4092],{},"，需要改成机械臂链路里不冲突的编号。",[19,28275,28276],{},"方式一：用 LeRobot 命令逐步写入。",[26,28278,28280],{"className":92,"code":28279,"language":94,"meta":31,"style":31},"# 主臂舵机配置 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",[33,28281,28282,28287,28295,28302,28307,28311,28316,28322,28329],{"__ignoreMap":31},[36,28283,28284],{"class":38,"line":39},[36,28285,28286],{"class":3943},"# 主臂舵机配置 ID\n",[36,28288,28289,28292],{"class":38,"line":53},[36,28290,28291],{"class":101},"lerobot-setup-motors",[36,28293,28294],{"class":112}," \\\n",[36,28296,28297,28300],{"class":38,"line":196},[36,28298,28299],{"class":112},"  --teleop.type=so101_leader",[36,28301,28294],{"class":112},[36,28303,28304],{"class":38,"line":642},[36,28305,28306],{"class":112},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[36,28308,28309],{"class":38,"line":655},[36,28310,659],{"emptyLinePlaceholder":658},[36,28312,28313],{"class":38,"line":662},[36,28314,28315],{"class":3943},"# 从臂舵机配置 ID\n",[36,28317,28318,28320],{"class":38,"line":667},[36,28319,28291],{"class":101},[36,28321,28294],{"class":112},[36,28323,28324,28327],{"class":38,"line":679},[36,28325,28326],{"class":112},"  --robot.type=so101_follower",[36,28328,28294],{"class":112},[36,28330,28331],{"class":38,"line":685},[36,28332,28333],{"class":112},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,28335,28336],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,28338,28340],{"id":28339},"_32-机械臂校准","3.2 机械臂校准",[19,28342,28343],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[26,28345,28347],{"className":92,"code":28346,"language":94,"meta":31,"style":31},"# 主臂校准\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",[33,28348,28349,28354,28361,28367,28374,28379,28383,28388,28394,28400,28407],{"__ignoreMap":31},[36,28350,28351],{"class":38,"line":39},[36,28352,28353],{"class":3943},"# 主臂校准\n",[36,28355,28356,28359],{"class":38,"line":53},[36,28357,28358],{"class":101},"lerobot-calibrate",[36,28360,28294],{"class":112},[36,28362,28363,28365],{"class":38,"line":196},[36,28364,28299],{"class":112},[36,28366,28294],{"class":112},[36,28368,28369,28372],{"class":38,"line":642},[36,28370,28371],{"class":112},"  --teleop.port=\u002Fdev\u002FttyACM0",[36,28373,28294],{"class":112},[36,28375,28376],{"class":38,"line":655},[36,28377,28378],{"class":112},"  --teleop.id=my_awesome_leader_arm\n",[36,28380,28381],{"class":38,"line":662},[36,28382,659],{"emptyLinePlaceholder":658},[36,28384,28385],{"class":38,"line":667},[36,28386,28387],{"class":3943},"# 从臂校准\n",[36,28389,28390,28392],{"class":38,"line":679},[36,28391,28358],{"class":101},[36,28393,28294],{"class":112},[36,28395,28396,28398],{"class":38,"line":685},[36,28397,28326],{"class":112},[36,28399,28294],{"class":112},[36,28401,28402,28405],{"class":38,"line":691},[36,28403,28404],{"class":112},"  --robot.port=\u002Fdev\u002FttyACM1",[36,28406,28294],{"class":112},[36,28408,28409],{"class":38,"line":696},[36,28410,28411],{"class":112},"  --robot.id=my_awesome_follower_arm\n",[3785,28413,28414],{},"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":31,"searchDepth":53,"depth":53,"links":28416},[28417,28418],{"id":28266,"depth":53,"text":28267},{"id":28339,"depth":53,"text":28340},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":28257,"description":26998},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":28425,"title":28426,"body":28427,"description":26998,"extension":3817,"meta":28618,"navigation":658,"path":28619,"seo":28620,"stem":28621,"__hash__":28622},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":28428,"toc":28614},[28429,28432,28436,28483,28487,28500,28563,28566,28611],[10,28430,28426],{"id":28431},"_4-遥操与相机接入",[14,28433,28435],{"id":28434},"_41-不带相机遥操","4.1 不带相机遥操",[26,28437,28439],{"className":92,"code":28438,"language":94,"meta":31,"style":31},"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",[33,28440,28441,28448,28454,28460,28467,28473,28479],{"__ignoreMap":31},[36,28442,28443,28446],{"class":38,"line":39},[36,28444,28445],{"class":101},"lerobot-teleoperate",[36,28447,28294],{"class":112},[36,28449,28450,28452],{"class":38,"line":53},[36,28451,28326],{"class":112},[36,28453,28294],{"class":112},[36,28455,28456,28458],{"class":38,"line":196},[36,28457,28404],{"class":112},[36,28459,28294],{"class":112},[36,28461,28462,28465],{"class":38,"line":642},[36,28463,28464],{"class":112},"  --robot.id=my_awesome_follower_arm",[36,28466,28294],{"class":112},[36,28468,28469,28471],{"class":38,"line":655},[36,28470,28299],{"class":112},[36,28472,28294],{"class":112},[36,28474,28475,28477],{"class":38,"line":662},[36,28476,28371],{"class":112},[36,28478,28294],{"class":112},[36,28480,28481],{"class":38,"line":667},[36,28482,28378],{"class":112},[14,28484,28486],{"id":28485},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[26,28488,28490],{"className":92,"code":28489,"language":94,"meta":31,"style":31},"lerobot-find-cameras opencv\n",[33,28491,28492],{"__ignoreMap":31},[36,28493,28494,28497],{"class":38,"line":39},[36,28495,28496],{"class":101},"lerobot-find-cameras",[36,28498,28499],{"class":105}," opencv\n",[26,28501,28503],{"className":92,"code":28502,"language":94,"meta":31,"style":31},"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",[33,28504,28505,28511,28517,28523,28529,28539,28545,28551,28558],{"__ignoreMap":31},[36,28506,28507,28509],{"class":38,"line":39},[36,28508,28445],{"class":101},[36,28510,28294],{"class":112},[36,28512,28513,28515],{"class":38,"line":53},[36,28514,28326],{"class":112},[36,28516,28294],{"class":112},[36,28518,28519,28521],{"class":38,"line":196},[36,28520,28404],{"class":112},[36,28522,28294],{"class":112},[36,28524,28525,28527],{"class":38,"line":642},[36,28526,28464],{"class":112},[36,28528,28294],{"class":112},[36,28530,28531,28534,28537],{"class":38,"line":655},[36,28532,28533],{"class":112},"  --robot.cameras=",[36,28535,28536],{"class":105},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[36,28538,28294],{"class":112},[36,28540,28541,28543],{"class":38,"line":662},[36,28542,28299],{"class":112},[36,28544,28294],{"class":112},[36,28546,28547,28549],{"class":38,"line":667},[36,28548,28371],{"class":112},[36,28550,28294],{"class":112},[36,28552,28553,28556],{"class":38,"line":679},[36,28554,28555],{"class":112},"  --teleop.id=my_awesome_leader_arm",[36,28557,28294],{"class":112},[36,28559,28560],{"class":38,"line":685},[36,28561,28562],{"class":112},"  --display_data=true\n",[19,28564,28565],{},"相机参数说明：",[4875,28567,28568,28574,28580,28589,28599,28605],{},[214,28569,28570,28573],{},[33,28571,28572],{},"front","：相机名称。",[214,28575,28576,28579],{},[33,28577,28578],{},"type: opencv","：相机驱动类型。",[214,28581,28582,28585,28586,28179],{},[33,28583,28584],{},"index_or_path","：设备编号或设备路径（如 ",[33,28587,28588],{},"\u002Fdev\u002Fvideo4",[214,28590,28591,28594,28595,28598],{},[33,28592,28593],{},"width"," \u002F ",[33,28596,28597],{},"height","：图像分辨率。",[214,28600,28601,28604],{},[33,28602,28603],{},"fps","：采样帧率。",[214,28606,28607,28610],{},[33,28608,28609],{},"--display_data=true","：启用实时可视化。",[3785,28612,28613],{},"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":31,"searchDepth":53,"depth":53,"links":28615},[28616,28617],{"id":28434,"depth":53,"text":28435},{"id":28485,"depth":53,"text":28486},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":28426,"description":26998},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":28624,"title":28625,"body":28626,"description":26998,"extension":3817,"meta":28796,"navigation":658,"path":28797,"seo":28798,"stem":28799,"__hash__":28800},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":28627,"toc":28791},[28628,28632,28636,28641,28646,28649,28691,28697,28701,28748,28753,28757,28760,28768,28773,28778,28783,28788],[10,28629,28631],{"id":28630},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,28633,28635],{"id":28634},"_51-生成访问令牌","5.1 生成访问令牌",[19,28637,28638],{},[5198,28639],{"alt":31,"src":28640},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,28642,28643],{},[5198,28644],{"alt":31,"src":28645},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,28647,28648],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[26,28650,28652],{"className":92,"code":28651,"language":94,"meta":31,"style":31},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[33,28653,28654,28667],{"__ignoreMap":31},[36,28655,28656,28659,28662,28664],{"class":38,"line":39},[36,28657,28658],{"class":46},"export",[36,28660,28661],{"class":42}," HF_TOKEN",[36,28663,47],{"class":46},[36,28665,28666],{"class":105},"\"your_huggingface_token\"\n",[36,28668,28669,28672,28675,28678,28681,28683,28686,28688],{"class":38,"line":53},[36,28670,28671],{"class":101},"hf",[36,28673,28674],{"class":105}," auth",[36,28676,28677],{"class":105}," login",[36,28679,28680],{"class":112}," --token",[36,28682,13403],{"class":105},[36,28684,28685],{"class":42},"$HF_TOKEN",[36,28687,4126],{"class":105},[36,28689,28690],{"class":112}," --add-to-git-credential\n",[19,28692,28693,28696],{},[33,28694,28695],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,28698,28700],{"id":28699},"_52-验证登录","5.2 验证登录",[26,28702,28704],{"className":92,"code":28703,"language":94,"meta":31,"style":31},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[33,28705,28706,28735],{"__ignoreMap":31},[36,28707,28708,28711,28713,28716,28718,28720,28723,28725,28728,28730,28733],{"class":38,"line":39},[36,28709,28710],{"class":42},"HF_USER",[36,28712,47],{"class":46},[36,28714,28715],{"class":42},"$(",[36,28717,28671],{"class":101},[36,28719,28674],{"class":105},[36,28721,28722],{"class":105}," whoami",[36,28724,1381],{"class":46},[36,28726,28727],{"class":101}," head",[36,28729,171],{"class":112},[36,28731,28732],{"class":112}," 1",[36,28734,922],{"class":42},[36,28736,28737,28740,28742,28745],{"class":38,"line":53},[36,28738,28739],{"class":112},"echo",[36,28741,13403],{"class":105},[36,28743,28744],{"class":42},"$HF_USER",[36,28746,28747],{"class":105},"\"\n",[19,28749,28750],{},[5198,28751],{"alt":31,"src":28752},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,28754,28756],{"id":28755},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,28758,28759],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[4875,28761,28762,28765],{},[214,28763,28764],{},"Dataset Repo（用于上传演示数据）",[214,28766,28767],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,28769,28770],{},[5198,28771],{"alt":31,"src":28772},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,28774,28775],{},[5198,28776],{"alt":31,"src":28777},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,28779,28780],{},[5198,28781],{"alt":31,"src":28782},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,28784,28785],{},[5198,28786],{"alt":31,"src":28787},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[3785,28789,28790],{},"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":31,"searchDepth":53,"depth":53,"links":28792},[28793,28794,28795],{"id":28634,"depth":53,"text":28635},{"id":28699,"depth":53,"text":28700},{"id":28755,"depth":53,"text":28756},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":28625,"description":26998},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":28802,"title":28803,"body":28804,"description":26998,"extension":3817,"meta":29001,"navigation":658,"path":29002,"seo":29003,"stem":29004,"__hash__":29005},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":28805,"toc":28996},[28806,28810,28814,28910,28918,28923,28927,28943,28946,28950,28993],[10,28807,28809],{"id":28808},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,28811,28813],{"id":28812},"_61-录制示教数据","6.1 录制示教数据",[26,28815,28817],{"className":92,"code":28816,"language":94,"meta":31,"style":31},"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",[33,28818,28819,28826,28832,28838,28844,28853,28859,28865,28871,28878,28888,28895,28905],{"__ignoreMap":31},[36,28820,28821,28824],{"class":38,"line":39},[36,28822,28823],{"class":101},"lerobot-record",[36,28825,28294],{"class":112},[36,28827,28828,28830],{"class":38,"line":53},[36,28829,28326],{"class":112},[36,28831,28294],{"class":112},[36,28833,28834,28836],{"class":38,"line":196},[36,28835,28404],{"class":112},[36,28837,28294],{"class":112},[36,28839,28840,28842],{"class":38,"line":642},[36,28841,28464],{"class":112},[36,28843,28294],{"class":112},[36,28845,28846,28848,28851],{"class":38,"line":655},[36,28847,28533],{"class":112},[36,28849,28850],{"class":105},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[36,28852,28294],{"class":112},[36,28854,28855,28857],{"class":38,"line":662},[36,28856,28299],{"class":112},[36,28858,28294],{"class":112},[36,28860,28861,28863],{"class":38,"line":667},[36,28862,28371],{"class":112},[36,28864,28294],{"class":112},[36,28866,28867,28869],{"class":38,"line":679},[36,28868,28555],{"class":112},[36,28870,28294],{"class":112},[36,28872,28873,28876],{"class":38,"line":685},[36,28874,28875],{"class":112},"  --display_data=true",[36,28877,28294],{"class":112},[36,28879,28880,28883,28886],{"class":38,"line":691},[36,28881,28882],{"class":112},"  --dataset.repo_id=",[36,28884,28885],{"class":105},"\"Embodied-AI-6\u002Fso101_test\"",[36,28887,28294],{"class":112},[36,28889,28890,28893],{"class":38,"line":696},[36,28891,28892],{"class":112},"  --dataset.num_episodes=10",[36,28894,28294],{"class":112},[36,28896,28897,28900,28903],{"class":38,"line":702},[36,28898,28899],{"class":112},"  --dataset.single_task=",[36,28901,28902],{"class":105},"\"Grab the green cube\"",[36,28904,28294],{"class":112},[36,28906,28907],{"class":38,"line":708},[36,28908,28909],{"class":112},"  --resume=true\n",[4875,28911,28912],{},[214,28913,28914,28917],{},[33,28915,28916],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,28919,28920],{},[5198,28921],{"alt":31,"src":28922},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,28924,28926],{"id":28925},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[26,28928,28930],{"className":92,"code":28929,"language":94,"meta":31,"style":31},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[33,28931,28932],{"__ignoreMap":31},[36,28933,28934,28937,28940],{"class":38,"line":39},[36,28935,28936],{"class":101},"rm",[36,28938,28939],{"class":112}," -rf",[36,28941,28942],{"class":105}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,28944,28945],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,28947,28949],{"id":28948},"_63-回放指定-episode","6.3 回放指定 episode",[26,28951,28953],{"className":92,"code":28952,"language":94,"meta":31,"style":31},"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",[33,28954,28955,28962,28968,28974,28980,28988],{"__ignoreMap":31},[36,28956,28957,28960],{"class":38,"line":39},[36,28958,28959],{"class":101},"lerobot-replay",[36,28961,28294],{"class":112},[36,28963,28964,28966],{"class":38,"line":53},[36,28965,28326],{"class":112},[36,28967,28294],{"class":112},[36,28969,28970,28972],{"class":38,"line":196},[36,28971,28404],{"class":112},[36,28973,28294],{"class":112},[36,28975,28976,28978],{"class":38,"line":642},[36,28977,28464],{"class":112},[36,28979,28294],{"class":112},[36,28981,28982,28984,28986],{"class":38,"line":655},[36,28983,28882],{"class":112},[36,28985,28885],{"class":105},[36,28987,28294],{"class":112},[36,28989,28990],{"class":38,"line":662},[36,28991,28992],{"class":112},"  --dataset.episode=0\n",[3785,28994,28995],{},"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":31,"searchDepth":53,"depth":53,"links":28997},[28998,28999,29000],{"id":28812,"depth":53,"text":28813},{"id":28925,"depth":53,"text":28926},{"id":28948,"depth":53,"text":28949},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":28803,"description":26998},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":29007,"title":29008,"body":29009,"description":26998,"extension":3817,"meta":29137,"navigation":658,"path":29138,"seo":29139,"stem":29140,"__hash__":29141},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":29010,"toc":29135},[29011,29015,29078,29081,29128,29133],[10,29012,29014],{"id":29013},"_7-act-模型训练","7. ACT 模型训练",[26,29016,29018],{"className":92,"code":29017,"language":94,"meta":31,"style":31},"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",[33,29019,29020,29027,29035,29042,29049,29056,29063,29070],{"__ignoreMap":31},[36,29021,29022,29025],{"class":38,"line":39},[36,29023,29024],{"class":101},"lerobot-train",[36,29026,28294],{"class":112},[36,29028,29029,29031,29033],{"class":38,"line":53},[36,29030,28882],{"class":112},[36,29032,28885],{"class":105},[36,29034,28294],{"class":112},[36,29036,29037,29040],{"class":38,"line":196},[36,29038,29039],{"class":112},"  --policy.type=act",[36,29041,28294],{"class":112},[36,29043,29044,29047],{"class":38,"line":642},[36,29045,29046],{"class":112},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[36,29048,28294],{"class":112},[36,29050,29051,29054],{"class":38,"line":655},[36,29052,29053],{"class":112},"  --job_name=act_so101_test",[36,29055,28294],{"class":112},[36,29057,29058,29061],{"class":38,"line":662},[36,29059,29060],{"class":112},"  --policy.device=cuda",[36,29062,28294],{"class":112},[36,29064,29065,29068],{"class":38,"line":667},[36,29066,29067],{"class":112},"  --wandb.enable=false",[36,29069,28294],{"class":112},[36,29071,29072,29075],{"class":38,"line":679},[36,29073,29074],{"class":112},"  --policy.repo_id=",[36,29076,29077],{"class":105},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,29079,29080],{},"参数说明：",[4875,29082,29083,29089,29095,29101,29107,29116,29122],{},[214,29084,29085,29088],{},[33,29086,29087],{},"--dataset.repo_id","：训练数据集仓库。",[214,29090,29091,29094],{},[33,29092,29093],{},"--policy.type=act","：策略模型类型为 ACT。",[214,29096,29097,29100],{},[33,29098,29099],{},"--output_dir","：本地训练输出目录。",[214,29102,29103,29106],{},[33,29104,29105],{},"--job_name","：训练任务名称。",[214,29108,29109,29112,29113,28179],{},[33,29110,29111],{},"--policy.device","：训练设备（如 ",[33,29114,29115],{},"cuda",[214,29117,29118,29121],{},[33,29119,29120],{},"--wandb.enable","：是否启用 WandB 可视化。",[214,29123,29124,29127],{},[33,29125,29126],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,29129,29130],{},[5198,29131],{"alt":31,"src":29132},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[3785,29134,28995],{},{"title":31,"searchDepth":53,"depth":53,"links":29136},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":29008,"description":26998},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":29143,"title":29144,"body":29145,"description":26998,"extension":3817,"meta":29232,"navigation":658,"path":29233,"seo":29234,"stem":29235,"__hash__":29236},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":29146,"toc":29230},[29147,29150,29153,29220,29228],[10,29148,29144],{"id":29149},"_8-策略部署与自动采集",[19,29151,29152],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[26,29154,29156],{"className":92,"code":29155,"language":94,"meta":31,"style":31},"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",[33,29157,29158,29164,29170,29176,29184,29190,29197,29205,29213],{"__ignoreMap":31},[36,29159,29160,29162],{"class":38,"line":39},[36,29161,28823],{"class":101},[36,29163,28294],{"class":112},[36,29165,29166,29168],{"class":38,"line":53},[36,29167,28326],{"class":112},[36,29169,28294],{"class":112},[36,29171,29172,29174],{"class":38,"line":196},[36,29173,28404],{"class":112},[36,29175,28294],{"class":112},[36,29177,29178,29180,29182],{"class":38,"line":642},[36,29179,28533],{"class":112},[36,29181,28850],{"class":105},[36,29183,28294],{"class":112},[36,29185,29186,29188],{"class":38,"line":655},[36,29187,28464],{"class":112},[36,29189,28294],{"class":112},[36,29191,29192,29195],{"class":38,"line":662},[36,29193,29194],{"class":112},"  --display_data=false",[36,29196,28294],{"class":112},[36,29198,29199,29201,29203],{"class":38,"line":667},[36,29200,28882],{"class":112},[36,29202,28885],{"class":105},[36,29204,28294],{"class":112},[36,29206,29207,29209,29211],{"class":38,"line":679},[36,29208,28899],{"class":112},[36,29210,28902],{"class":105},[36,29212,28294],{"class":112},[36,29214,29215,29218],{"class":38,"line":685},[36,29216,29217],{"class":112},"  --policy.path=",[36,29219,29077],{"class":105},[4875,29221,29222],{},[214,29223,29224,29227],{},[33,29225,29226],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[3785,29229,28995],{},{"title":31,"searchDepth":53,"depth":53,"links":29231},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":29144,"description":26998},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":29238,"title":29239,"body":29240,"description":26998,"extension":3817,"meta":29269,"navigation":658,"path":29270,"seo":29271,"stem":29272,"__hash__":29273},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":29241,"toc":29267},[29242,29246,29249,29255,29258,29264],[10,29243,29245],{"id":29244},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,29247,29248],{},"项目地址：",[19,29250,29251],{},[4113,29252,29253],{"href":29253,"rel":29254},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[27481],[19,29256,29257],{},"参考教程：",[19,29259,29260],{},[4113,29261,29262],{"href":29262,"rel":29263},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[27481],[19,29265,29266],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":31,"searchDepth":53,"depth":53,"links":29268},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":29239,"description":26998},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":29275,"title":29276,"body":29277,"description":29281,"extension":3817,"meta":29282,"navigation":658,"path":29283,"seo":29284,"stem":29285,"__hash__":29286},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":29278,"toc":29279},[],{"title":31,"searchDepth":53,"depth":53,"links":29280},[],"act复现",{"category":27000},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":29276,"description":29281},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":29288,"title":29289,"body":29290,"description":31,"extension":3817,"meta":29592,"navigation":658,"path":29593,"seo":29594,"stem":29595,"__hash__":29596},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":29291,"toc":29584},[29292,29295,29299,29309,29316,29323,29326,29333,29336,29339,29343,29355,29359,29405,29408,29411,29414,29417,29420,29424,29462,29468,29472,29526,29531,29534,29537,29542,29545,29550,29553,29556,29560,29563,29566,29570],[10,29293,29289],{"id":29294},"_1简介",[318,29296,29298],{"id":29297},"_11什么是-docker","1.1什么是 Docker？",[19,29300,29301,29302,29305,29306],{},"Docker 是一个开源的 ",[4027,29303,29304],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[4027,29307,29308],{},"一次构建，到处运行。",[19,29310,29311,29312,29315],{},"“ ",[4027,29313,29314],{},"一次构建，到处运行"," ”也就是说：",[211,29317,29318],{},[214,29319,29320],{},[4027,29321,29322],{},"之前：",[19,29324,29325],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[211,29327,29328],{},[214,29329,29330],{},[4027,29331,29332],{},"使用docker后：",[19,29334,29335],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,29337,29338],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[318,29340,29342],{"id":29341},"_12它是怎么工作的","1.2.它是怎么工作的？",[4875,29344,29345,29348],{},[214,29346,29347],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[214,29349,29350,29351,29354],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[4027,29352,29353],{},"无论在哪运行都一样稳定"," 。",[318,29356,29358],{"id":29357},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[248,29360,29361,29371],{},[251,29362,29363],{},[254,29364,29365,29368],{},[257,29366,29367],{"align":259},"概念",[257,29369,29370],{"align":259},"解释",[265,29372,29373,29381,29389,29397],{},[254,29374,29375,29378],{},[270,29376,29377],{"align":259},"镜像",[270,29379,29380],{"align":259},"Image，运行容器的模板，像是一个应用快照",[254,29382,29383,29386],{},[270,29384,29385],{"align":259},"容器",[270,29387,29388],{"align":259},"Container，运行中的镜像实例，有自己的文件系统、网络等",[254,29390,29391,29394],{},[270,29392,29393],{"align":259},"Dockerfile",[270,29395,29396],{"align":259},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[254,29398,29399,29402],{},[270,29400,29401],{"align":259},"仓库",[270,29403,29404],{"align":259},"Registry，存放镜像的地方，比如 Docker Hub",[19,29406,29407],{},"抽象化理解:",[19,29409,29410],{},"Docker镜像≈C++类",[19,29412,29413],{},"Docker容器≈C++类实例(即对象)",[19,29415,29416],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,29418,29419],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[318,29421,29423],{"id":29422},"_14类比理解","1.4.类比理解",[248,29425,29426,29436],{},[251,29427,29428],{},[254,29429,29430,29433],{},[257,29431,29432],{"align":259},"传统部署",[257,29434,29435],{"align":259},"Docker部署",[265,29437,29438,29446,29454],{},[254,29439,29440,29443],{},[270,29441,29442],{"align":259},"手动安装依赖、调试版本不一致问题",[270,29444,29445],{"align":259},"一次打包环境和代码",[254,29447,29448,29451],{},[270,29449,29450],{"align":259},"程序“裸奔”跑在系统上",[270,29452,29453],{"align":259},"程序“穿着容器”隔离运行",[254,29455,29456,29459],{},[270,29457,29458],{"align":259},"容易“在我电脑上能跑”",[270,29460,29461],{"align":259},"保证“无论在哪都能跑”",[19,29463,29464,29465],{},"就像快递包裹： ",[4027,29466,29467],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[318,29469,29471],{"id":29470},"_15docker-的核心优势","1.5.Docker 的核心优势",[248,29473,29474,29484],{},[251,29475,29476],{},[254,29477,29478,29481],{},[257,29479,29480],{"align":259},"优势",[257,29482,29483],{"align":259},"说明",[265,29485,29486,29494,29502,29510,29518],{},[254,29487,29488,29491],{},[270,29489,29490],{"align":259},"轻量级",[270,29492,29493],{"align":259},"基于系统内核共享，启动速度快，占资源少",[254,29495,29496,29499],{},[270,29497,29498],{"align":259},"跨平台",[270,29500,29501],{"align":259},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[254,29503,29504,29507],{},[270,29505,29506],{"align":259},"易于迁移部署",[270,29508,29509],{"align":259},"应用和环境一起封装，不怕依赖不一致",[254,29511,29512,29515],{},[270,29513,29514],{"align":259},"易于版本控制",[270,29516,29517],{"align":259},"镜像版本可控，支持回滚",[254,29519,29520,29523],{},[270,29521,29522],{"align":259},"生态丰富",[270,29524,29525],{"align":259},"Docker Hub 上有成千上万的现成镜像可用",[211,29527,29528],{},[214,29529,29530],{},"在Linux上可以几乎实现无性能损失。",[19,29532,29533],{},"docker里的发行版和本机共用Linux内核。",[19,29535,29536],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[211,29538,29539],{},[214,29540,29541],{},"可以快速部署在绝大多数Linux发行版",[19,29543,29544],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[211,29546,29547],{},[214,29548,29549],{},"配置环境简单",[19,29551,29552],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,29554,29555],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[211,29557,29558],{},[214,29559,29522],{},[19,29561,29562],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,29564,29565],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[318,29567,29569],{"id":29568},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[4875,29571,29572,29575,29578,29581],{},[214,29573,29574],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[214,29576,29577],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[214,29579,29580],{},"微服务架构：每个服务一个容器，灵活组合",[214,29582,29583],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":31,"searchDepth":53,"depth":53,"links":29585},[29586,29587,29588,29589,29590,29591],{"id":29297,"depth":196,"text":29298},{"id":29341,"depth":196,"text":29342},{"id":29357,"depth":196,"text":29358},{"id":29422,"depth":196,"text":29423},{"id":29470,"depth":196,"text":29471},{"id":29568,"depth":196,"text":29569},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":29289,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":29598,"title":29599,"body":29600,"description":31,"extension":3817,"meta":30330,"navigation":658,"path":30331,"seo":30332,"stem":30333,"__hash__":30334},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":29601,"toc":30325},[29602,29605,29609,29612,29615,29621,29627,29631,29640,29643,29699,29702,29753,29756,29839,29842,29879,29883,29894,29907,29914,29917,29996,29999,30048,30051,30074,30078,30085,30088,30104,30110,30113,30129,30135,30138,30154,30168,30174,30194,30200,30203,30215,30221,30224,30238,30244,30247,30267,30272,30275,30278,30282,30285,30288,30291,30298,30301,30304,30307,30312,30317,30322],[10,29603,29599],{"id":29604},"_2安装docker",[318,29606,29608],{"id":29607},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,29610,29611],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,29613,29614],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,29616,29617],{},[4113,29618,29619],{"href":29619,"rel":29620},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[27481],[19,29622,29623],{},[4113,29624,29625],{"href":29625,"rel":29626},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[27481],[25619,29628,29630],{"id":29629},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,29632,29633,29634,29639],{},"以下内容根据 ",[4113,29635,29638],{"href":29636,"rel":29637},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[27481],"官方文档"," 修改而来。",[19,29641,29642],{},"如果你过去安装过 docker，先删掉：",[26,29644,29646],{"className":92,"code":29645,"language":94,"meta":31,"style":31},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[33,29647,29648],{"__ignoreMap":31},[36,29649,29650,29652,29655,29657,29660,29663,29666,29669,29672,29675,29678,29681,29684,29687,29690,29693,29696],{"class":38,"line":39},[36,29651,3120],{"class":46},[36,29653,29654],{"class":42}," pkg ",[36,29656,1619],{"class":46},[36,29658,29659],{"class":105}," docker.io",[36,29661,29662],{"class":105}," docker-doc",[36,29664,29665],{"class":105}," docker-compose",[36,29667,29668],{"class":105}," docker-compose-v2",[36,29670,29671],{"class":105}," podman-docker",[36,29673,29674],{"class":105}," containerd",[36,29676,29677],{"class":105}," runc",[36,29679,29680],{"class":42},"; ",[36,29682,29683],{"class":46},"do",[36,29685,29686],{"class":101}," sudo",[36,29688,29689],{"class":105}," apt-get",[36,29691,29692],{"class":105}," remove",[36,29694,29695],{"class":42}," $pkg; ",[36,29697,29698],{"class":46},"done\n",[19,29700,29701],{},"首先安装依赖和GPG：",[26,29703,29707],{"className":29704,"code":29705,"language":29706,"meta":31,"style":31},"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",[33,29708,29709,29714,29719,29724,29729,29734,29739,29743,29748],{"__ignoreMap":31},[36,29710,29711],{"class":38,"line":39},[36,29712,29713],{},"# Add Docker's official GPG key:\n",[36,29715,29716],{"class":38,"line":53},[36,29717,29718],{},"sudo apt-get update\n",[36,29720,29721],{"class":38,"line":196},[36,29722,29723],{},"sudo apt-get install ca-certificates curl\n",[36,29725,29726],{"class":38,"line":642},[36,29727,29728],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[36,29730,29731],{"class":38,"line":655},[36,29732,29733],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[36,29735,29736],{"class":38,"line":662},[36,29737,29738],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[36,29740,29741],{"class":38,"line":667},[36,29742,659],{"emptyLinePlaceholder":658},[36,29744,29745],{"class":38,"line":679},[36,29746,29747],{},"# 如果上面这行报错就弄下面这行\n",[36,29749,29750],{"class":38,"line":685},[36,29751,29752],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,29754,29755],{},"信任 Docker 的 GPG 公钥并添加仓库：",[26,29757,29759],{"className":92,"code":29758,"language":94,"meta":31,"style":31},"# 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",[33,29760,29761,29766,29772,29789,29822],{"__ignoreMap":31},[36,29762,29763],{"class":38,"line":39},[36,29764,29765],{"class":3943},"# Add the repository to Apt sources:\n",[36,29767,29768,29770],{"class":38,"line":53},[36,29769,28739],{"class":112},[36,29771,28294],{"class":112},[36,29773,29774,29777,29780,29783,29786],{"class":38,"line":196},[36,29775,29776],{"class":105},"  \"deb [arch=$(",[36,29778,29779],{"class":101},"dpkg",[36,29781,29782],{"class":112}," --print-architecture",[36,29784,29785],{"class":105},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[36,29787,29788],{"class":112},"\\\n",[36,29790,29791,29794,29796,29798,29801,29804,29806,29808,29811,29813,29815,29818,29820],{"class":38,"line":642},[36,29792,29793],{"class":105},"  \"",[36,29795,28715],{"class":42},[36,29797,842],{"class":112},[36,29799,29800],{"class":105}," \u002Fetc\u002Fos-release",[36,29802,29803],{"class":42}," && ",[36,29805,28739],{"class":112},[36,29807,13403],{"class":105},[36,29809,29810],{"class":42},"$VERSION_CODENAME",[36,29812,4126],{"class":105},[36,29814,4304],{"class":42},[36,29816,29817],{"class":105},"\" stable\"",[36,29819,1381],{"class":46},[36,29821,28294],{"class":112},[36,29823,29824,29827,29830,29833,29836],{"class":38,"line":655},[36,29825,29826],{"class":101},"  sudo",[36,29828,29829],{"class":105}," tee",[36,29831,29832],{"class":105}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[36,29834,29835],{"class":46}," >",[36,29837,29838],{"class":105}," \u002Fdev\u002Fnull\n",[19,29840,29841],{},"最后安装",[26,29843,29845],{"className":92,"code":29844,"language":94,"meta":31,"style":31},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[33,29846,29847,29856],{"__ignoreMap":31},[36,29848,29849,29851,29853],{"class":38,"line":39},[36,29850,102],{"class":101},[36,29852,29689],{"class":105},[36,29854,29855],{"class":105}," update\n",[36,29857,29858,29860,29862,29864,29867,29870,29873,29876],{"class":38,"line":53},[36,29859,102],{"class":101},[36,29861,29689],{"class":105},[36,29863,109],{"class":105},[36,29865,29866],{"class":105}," docker-ce",[36,29868,29869],{"class":105}," docker-ce-cli",[36,29871,29872],{"class":105}," containerd.io",[36,29874,29875],{"class":105}," docker-buildx-plugin",[36,29877,29878],{"class":105}," docker-compose-plugin\n",[25619,29880,29882],{"id":29881},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,29884,29885,29886,29889,29890,29893],{},"查看自己自己包管理工具版本（dnf是 ",[4027,29887,29888],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[4027,29891,29892],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[26,29895,29897],{"className":92,"code":29896,"language":94,"meta":31,"style":31},"dnf --version\n",[33,29898,29899],{"__ignoreMap":31},[36,29900,29901,29904],{"class":38,"line":39},[36,29902,29903],{"class":101},"dnf",[36,29905,29906],{"class":112}," --version\n",[19,29908,29633,29909,29913],{},[4113,29910,29638],{"href":29911,"rel":29912},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[27481]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,29915,29916],{},"如果你之前安装过 docker，请先删掉",[26,29918,29920],{"className":92,"code":29919,"language":94,"meta":31,"style":31},"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",[33,29921,29922,29935,29942,29949,29956,29963,29970,29977,29984,29991],{"__ignoreMap":31},[36,29923,29924,29926,29928,29930,29933],{"class":38,"line":39},[36,29925,102],{"class":101},[36,29927,106],{"class":105},[36,29929,29692],{"class":105},[36,29931,29932],{"class":105}," docker",[36,29934,28294],{"class":112},[36,29936,29937,29940],{"class":38,"line":53},[36,29938,29939],{"class":105},"                  docker-client",[36,29941,28294],{"class":112},[36,29943,29944,29947],{"class":38,"line":196},[36,29945,29946],{"class":105},"                  docker-client-latest",[36,29948,28294],{"class":112},[36,29950,29951,29954],{"class":38,"line":642},[36,29952,29953],{"class":105},"                  docker-common",[36,29955,28294],{"class":112},[36,29957,29958,29961],{"class":38,"line":655},[36,29959,29960],{"class":105},"                  docker-latest",[36,29962,28294],{"class":112},[36,29964,29965,29968],{"class":38,"line":662},[36,29966,29967],{"class":105},"                  docker-latest-logrotate",[36,29969,28294],{"class":112},[36,29971,29972,29975],{"class":38,"line":667},[36,29973,29974],{"class":105},"                  docker-logrotate",[36,29976,28294],{"class":112},[36,29978,29979,29982],{"class":38,"line":679},[36,29980,29981],{"class":105},"                  docker-selinux",[36,29983,28294],{"class":112},[36,29985,29986,29989],{"class":38,"line":685},[36,29987,29988],{"class":105},"                  docker-engine-selinux",[36,29990,28294],{"class":112},[36,29992,29993],{"class":38,"line":691},[36,29994,29995],{"class":105},"                  docker-engine\n",[19,29997,29998],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[26,30000,30002],{"className":92,"code":30001,"language":94,"meta":31,"style":31},"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",[33,30003,30004,30017,30032],{"__ignoreMap":31},[36,30005,30006,30008,30010,30012,30014],{"class":38,"line":39},[36,30007,102],{"class":101},[36,30009,106],{"class":105},[36,30011,113],{"class":112},[36,30013,109],{"class":105},[36,30015,30016],{"class":105}," dnf-plugins-core\n",[36,30018,30019,30021,30023,30026,30029],{"class":38,"line":53},[36,30020,102],{"class":101},[36,30022,106],{"class":105},[36,30024,30025],{"class":105}," config-manager",[36,30027,30028],{"class":105}," addrepo",[36,30030,30031],{"class":112}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[36,30033,30034,30036,30039,30042,30045],{"class":38,"line":196},[36,30035,102],{"class":101},[36,30037,30038],{"class":105}," sed",[36,30040,30041],{"class":112}," -i",[36,30043,30044],{"class":105}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[36,30046,30047],{"class":105}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,30049,30050],{},"最后安装：",[26,30052,30054],{"className":92,"code":30053,"language":94,"meta":31,"style":31},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[33,30055,30056],{"__ignoreMap":31},[36,30057,30058,30060,30062,30064,30066,30068,30070,30072],{"class":38,"line":39},[36,30059,102],{"class":101},[36,30061,106],{"class":105},[36,30063,109],{"class":105},[36,30065,29866],{"class":105},[36,30067,29869],{"class":105},[36,30069,29872],{"class":105},[36,30071,29875],{"class":105},[36,30073,29878],{"class":105},[318,30075,30077],{"id":30076},"_22配置环境","2.2.配置环境",[25619,30079,30081,30084],{"id":30080},"_221检查-docker-服务状态",[4027,30082,30083],{},"2.2.1.检查 Docker 服务状态"," ：",[19,30086,30087],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[26,30089,30091],{"className":92,"code":30090,"language":94,"meta":31,"style":31},"systemctl status docker\n",[33,30092,30093],{"__ignoreMap":31},[36,30094,30095,30098,30101],{"class":38,"line":39},[36,30096,30097],{"class":101},"systemctl",[36,30099,30100],{"class":105}," status",[36,30102,30103],{"class":105}," docker\n",[25619,30105,30107,30084],{"id":30106},"_222启动-docker-服务",[4027,30108,30109],{},"2.2.2.启动 Docker 服务",[19,30111,30112],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[26,30114,30116],{"className":92,"code":30115,"language":94,"meta":31,"style":31},"sudo systemctl start docker\n",[33,30117,30118],{"__ignoreMap":31},[36,30119,30120,30122,30125,30127],{"class":38,"line":39},[36,30121,102],{"class":101},[36,30123,30124],{"class":105}," systemctl",[36,30126,7881],{"class":105},[36,30128,30103],{"class":105},[25619,30130,30132,30084],{"id":30131},"_223设置-docker-开机自启",[4027,30133,30134],{},"2.2.3.设置 Docker 开机自启",[19,30136,30137],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[26,30139,30141],{"className":92,"code":30140,"language":94,"meta":31,"style":31},"sudo systemctl enable docker\n",[33,30142,30143],{"__ignoreMap":31},[36,30144,30145,30147,30149,30152],{"class":38,"line":39},[36,30146,102],{"class":101},[36,30148,30124],{"class":105},[36,30150,30151],{"class":105}," enable",[36,30153,30103],{"class":105},[25619,30155,30157,17454,30160,17454,30165,30084],{"id":30156},"_224将用户添加到-docker-组",[4027,30158,30159],{},"2.2.4.将用户添加到",[4027,30161,30162],{},[33,30163,30164],{},"docker",[4027,30166,30167],{},"组",[19,30169,30170,30171,30173],{},"使用以下命令将当前用户添加到 ",[33,30172,30164],{}," 组：",[26,30175,30177],{"className":92,"code":30176,"language":94,"meta":31,"style":31},"sudo usermod -aG docker $USER\n",[33,30178,30179],{"__ignoreMap":31},[36,30180,30181,30183,30186,30189,30191],{"class":38,"line":39},[36,30182,102],{"class":101},[36,30184,30185],{"class":105}," usermod",[36,30187,30188],{"class":112}," -aG",[36,30190,29932],{"class":105},[36,30192,30193],{"class":42}," $USER\n",[25619,30195,30197,30084],{"id":30196},"_225退出并重新登录",[4027,30198,30199],{},"2.2.5.退出并重新登录",[19,30201,30202],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[26,30204,30206],{"className":92,"code":30205,"language":94,"meta":31,"style":31},"newgrp docker\n",[33,30207,30208],{"__ignoreMap":31},[36,30209,30210,30213],{"class":38,"line":39},[36,30211,30212],{"class":101},"newgrp",[36,30214,30103],{"class":105},[25619,30216,30218,30084],{"id":30217},"_226重新启动-docker-服务如果需要",[4027,30219,30220],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,30222,30223],{},"确保 Docker 服务正在运行，可以使用以下命令：",[26,30225,30226],{"className":92,"code":30115,"language":94,"meta":31,"style":31},[33,30227,30228],{"__ignoreMap":31},[36,30229,30230,30232,30234,30236],{"class":38,"line":39},[36,30231,102],{"class":101},[36,30233,30124],{"class":105},[36,30235,7881],{"class":105},[36,30237,30103],{"class":105},[25619,30239,30241,30084],{"id":30240},"_227重启电脑后检查-docker-服务状态",[4027,30242,30243],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,30245,30246],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[26,30248,30250],{"className":92,"code":30249,"language":94,"meta":31,"style":31},"sudo reboot\nsystemctl status docker\n",[33,30251,30252,30259],{"__ignoreMap":31},[36,30253,30254,30256],{"class":38,"line":39},[36,30255,102],{"class":101},[36,30257,30258],{"class":105}," reboot\n",[36,30260,30261,30263,30265],{"class":38,"line":53},[36,30262,30097],{"class":101},[36,30264,30100],{"class":105},[36,30266,30103],{"class":105},[19,30268,30269],{},[5198,30270],{"alt":31,"src":30271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,30273,30274],{},"第三行显示enabled说明开机自启动成功",[19,30276,30277],{},"按q退出",[318,30279,30281],{"id":30280},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,30283,30284],{},"优先使用linux来使用docker是比较好的",[19,30286,30287],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,30289,30290],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,30292,30293,30294],{},"官方下载安装:",[4113,30295,30296],{"href":30296,"rel":30297},"https:\u002F\u002Fwww.docker.com\u002F",[27481],[19,30299,30300],{},"Windows的Docker显卡直通与USB直通:",[19,30302,30303],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,30305,30306],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,30308,30309],{},[5198,30310],{"alt":31,"src":30311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,30313,30314],{},[5198,30315],{"alt":31,"src":30316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,30318,30319],{},[5198,30320],{"alt":31,"src":30321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[3785,30323,30324],{},"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":31,"searchDepth":53,"depth":53,"links":30326},[30327,30328,30329],{"id":29607,"depth":196,"text":29608},{"id":30076,"depth":196,"text":30077},{"id":30280,"depth":196,"text":30281},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":29599,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":30336,"title":30337,"body":30338,"description":30345,"extension":3817,"meta":31038,"navigation":658,"path":31039,"seo":31040,"stem":31041,"__hash__":31042},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":30339,"toc":31032},[30340,30343,30346,30350,30355,30360,30363,30391,30396,30405,30408,30413,30417,30424,30429,30435,30439,30442,30446,30451,30543,30548,30566,30571,30592,30597,30613,30617,30622,30651,30656,30702,30707,30751,30759,30776,30781,30797,30802,30816,30819,30822,30825,30828,30857,30860,30865,30869,30872,30875,30881,30884,30887,30890,30952,30959,30964,30967,30985,30989,30992,31009,31012,31015,31029],[10,30341,30337],{"id":30342},"_3docker直通",[19,30344,30345],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[318,30347,30349],{"id":30348},"_31usb直通","3.1.USB直通",[19,30351,30352],{},[5198,30353],{"alt":31,"src":30354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[211,30356,30357],{},[214,30358,30359],{},"方法一(不是很推荐新手)：",[19,30361,30362],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[26,30364,30366],{"className":92,"code":30365,"language":94,"meta":31,"style":31},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[33,30367,30368,30376,30381],{"__ignoreMap":31},[36,30369,30370,30373],{"class":38,"line":39},[36,30371,30372],{"class":101},"ls",[36,30374,30375],{"class":105}," \u002Fdev\n",[36,30377,30378],{"class":38,"line":53},[36,30379,30380],{"class":3943},"#例如\n",[36,30382,30383,30386,30388],{"class":38,"line":196},[36,30384,30385],{"class":42},"--device",[36,30387,47],{"class":46},[36,30389,30390],{"class":105},"\u002Fdev\u002Ftty_USB0\n",[211,30392,30393],{"start":53},[214,30394,30395],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[26,30397,30399],{"className":92,"code":30398,"language":94,"meta":31,"style":31},"--privileged\n",[33,30400,30401],{"__ignoreMap":31},[36,30402,30403],{"class":38,"line":39},[36,30404,30398],{"class":101},[19,30406,30407],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,30409,30410],{},[5198,30411],{"alt":31,"src":30412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[318,30414,30416],{"id":30415},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,30418,30419,30420,30423],{},"NVIDIA Container Toolkit使用户 ",[4027,30421,30422],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,30425,30426],{},[5198,30427],{"alt":31,"src":30428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,30430,30431],{},[4113,30432,30433],{"href":30433,"rel":30434},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[27481],[25619,30436,30438],{"id":30437},"_321安装","3.2.1.安装",[19,30440,30441],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[26531,30443,30445],{"id":30444},"_3211ubuntu","3.2.1.1.Ubuntu",[211,30447,30448],{},[214,30449,30450],{},"配置存储库 并更新",[26,30452,30454],{"className":92,"code":30453,"language":94,"meta":31,"style":31},"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",[33,30455,30456,30485,30505,30517,30529,30535],{"__ignoreMap":31},[36,30457,30458,30461,30464,30467,30469,30471,30474,30477,30480,30483],{"class":38,"line":39},[36,30459,30460],{"class":101},"curl",[36,30462,30463],{"class":112}," -fsSL",[36,30465,30466],{"class":105}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[36,30468,1381],{"class":46},[36,30470,29686],{"class":101},[36,30472,30473],{"class":105}," gpg",[36,30475,30476],{"class":112}," --dearmor",[36,30478,30479],{"class":112}," -o",[36,30481,30482],{"class":105}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[36,30484,28294],{"class":112},[36,30486,30487,30490,30492,30495,30498,30501,30503],{"class":38,"line":53},[36,30488,30489],{"class":42},"  && ",[36,30491,30460],{"class":101},[36,30493,30494],{"class":112}," -s",[36,30496,30497],{"class":112}," -L",[36,30499,30500],{"class":105}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[36,30502,1381],{"class":46},[36,30504,28294],{"class":112},[36,30506,30507,30510,30513,30515],{"class":38,"line":196},[36,30508,30509],{"class":101},"    sed",[36,30511,30512],{"class":105}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[36,30514,1381],{"class":46},[36,30516,28294],{"class":112},[36,30518,30519,30522,30524,30527],{"class":38,"line":642},[36,30520,30521],{"class":101},"    sudo",[36,30523,29829],{"class":105},[36,30525,30526],{"class":105}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[36,30528,28294],{"class":112},[36,30530,30531,30533],{"class":38,"line":655},[36,30532,30489],{"class":42},[36,30534,29788],{"class":112},[36,30536,30537,30539,30541],{"class":38,"line":662},[36,30538,30521],{"class":101},[36,30540,29689],{"class":105},[36,30542,29855],{"class":105},[211,30544,30545],{"start":53},[214,30546,30547],{},"安装nvidia-docker2",[26,30549,30551],{"className":92,"code":30550,"language":94,"meta":31,"style":31},"sudo apt-get install -y nvidia-docker2\n",[33,30552,30553],{"__ignoreMap":31},[36,30554,30555,30557,30559,30561,30563],{"class":38,"line":39},[36,30556,102],{"class":101},[36,30558,29689],{"class":105},[36,30560,109],{"class":105},[36,30562,113],{"class":112},[36,30564,30565],{"class":105}," nvidia-docker2\n",[211,30567,30568],{"start":196},[214,30569,30570],{},"使用nvidia-ctk命令配置container runtime",[26,30572,30574],{"className":92,"code":30573,"language":94,"meta":31,"style":31},"sudo nvidia-ctk runtime configure --runtime=docker\n",[33,30575,30576],{"__ignoreMap":31},[36,30577,30578,30580,30583,30586,30589],{"class":38,"line":39},[36,30579,102],{"class":101},[36,30581,30582],{"class":105}," nvidia-ctk",[36,30584,30585],{"class":105}," runtime",[36,30587,30588],{"class":105}," configure",[36,30590,30591],{"class":112}," --runtime=docker\n",[211,30593,30594],{"start":642},[214,30595,30596],{},"重启docker服务:",[26,30598,30600],{"className":92,"code":30599,"language":94,"meta":31,"style":31},"sudo systemctl restart docker\n",[33,30601,30602],{"__ignoreMap":31},[36,30603,30604,30606,30608,30611],{"class":38,"line":39},[36,30605,102],{"class":101},[36,30607,30124],{"class":105},[36,30609,30610],{"class":105}," restart",[36,30612,30103],{"class":105},[26531,30614,30616],{"id":30615},"_3212fedora","3.2.1.2.Fedora",[211,30618,30619],{},[214,30620,30621],{},"配置存储库",[26,30623,30625],{"className":92,"code":30624,"language":94,"meta":31,"style":31},"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",[33,30626,30627,30642],{"__ignoreMap":31},[36,30628,30629,30631,30633,30635,30638,30640],{"class":38,"line":39},[36,30630,30460],{"class":101},[36,30632,30494],{"class":112},[36,30634,30497],{"class":112},[36,30636,30637],{"class":105}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[36,30639,1381],{"class":46},[36,30641,28294],{"class":112},[36,30643,30644,30646,30648],{"class":38,"line":53},[36,30645,102],{"class":101},[36,30647,29829],{"class":105},[36,30649,30650],{"class":105}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[211,30652,30653],{"start":53},[214,30654,30655],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[26,30657,30659],{"className":92,"code":30658,"language":94,"meta":31,"style":31},"# 如果是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",[33,30660,30661,30666,30680,30684,30689],{"__ignoreMap":31},[36,30662,30663],{"class":38,"line":39},[36,30664,30665],{"class":3943},"# 如果是RHEL或者Rocky（DNF4）\n",[36,30667,30668,30670,30672,30674,30677],{"class":38,"line":53},[36,30669,102],{"class":101},[36,30671,106],{"class":105},[36,30673,30025],{"class":105},[36,30675,30676],{"class":112}," --add-repo",[36,30678,30679],{"class":105}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[36,30681,30682],{"class":38,"line":196},[36,30683,659],{"emptyLinePlaceholder":658},[36,30685,30686],{"class":38,"line":642},[36,30687,30688],{"class":3943},"# 如果是Feodra41+（DNF5）\n",[36,30690,30691,30693,30695,30697,30699],{"class":38,"line":655},[36,30692,102],{"class":101},[36,30694,106],{"class":105},[36,30696,30025],{"class":105},[36,30698,30028],{"class":105},[36,30700,30701],{"class":112}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[211,30703,30704],{"start":196},[214,30705,30706],{},"安装NVIDIA Container Toolki包",[26,30708,30710],{"className":92,"code":30709,"language":94,"meta":31,"style":31},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[33,30711,30712,30717,30730,30734,30739],{"__ignoreMap":31},[36,30713,30714],{"class":38,"line":39},[36,30715,30716],{"class":3943},"# 如果是RHEL或者Rocky\n",[36,30718,30719,30721,30723,30725,30727],{"class":38,"line":53},[36,30720,102],{"class":101},[36,30722,106],{"class":105},[36,30724,109],{"class":105},[36,30726,113],{"class":112},[36,30728,30729],{"class":105}," nvidia-container-toolkit\n",[36,30731,30732],{"class":38,"line":196},[36,30733,659],{"emptyLinePlaceholder":658},[36,30735,30736],{"class":38,"line":642},[36,30737,30738],{"class":3943},"# 如果是Fedora\n",[36,30740,30741,30743,30745,30747,30749],{"class":38,"line":655},[36,30742,102],{"class":101},[36,30744,106],{"class":105},[36,30746,109],{"class":105},[36,30748,113],{"class":112},[36,30750,30729],{"class":105},[211,30752,30753],{"start":642},[214,30754,30755,30756,30758],{},"安装nvidia-docker2 ： 在Fedora上使用",[33,30757,29903],{},"进行安装",[26,30760,30762],{"className":92,"code":30761,"language":94,"meta":31,"style":31},"sudo dnf install -y nvidia-docker2\n",[33,30763,30764],{"__ignoreMap":31},[36,30765,30766,30768,30770,30772,30774],{"class":38,"line":39},[36,30767,102],{"class":101},[36,30769,106],{"class":105},[36,30771,109],{"class":105},[36,30773,113],{"class":112},[36,30775,30565],{"class":105},[211,30777,30778],{"start":655},[214,30779,30780],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[26,30782,30783],{"className":92,"code":30573,"language":94,"meta":31,"style":31},[33,30784,30785],{"__ignoreMap":31},[36,30786,30787,30789,30791,30793,30795],{"class":38,"line":39},[36,30788,102],{"class":101},[36,30790,30582],{"class":105},[36,30792,30585],{"class":105},[36,30794,30588],{"class":105},[36,30796,30591],{"class":112},[211,30798,30799],{"start":662},[214,30800,30801],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[26,30803,30804],{"className":92,"code":30599,"language":94,"meta":31,"style":31},[33,30805,30806],{"__ignoreMap":31},[36,30807,30808,30810,30812,30814],{"class":38,"line":39},[36,30809,102],{"class":101},[36,30811,30124],{"class":105},[36,30813,30610],{"class":105},[36,30815,30103],{"class":105},[19,30817,30818],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,30820,30821],{},"方法：",[19,30823,30824],{},"1️⃣nvidia-smi",[19,30826,30827],{},"2️⃣运行nvidia cuda 容器进行测试",[26,30829,30831],{"className":92,"code":30830,"language":94,"meta":31,"style":31},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[33,30832,30833],{"__ignoreMap":31},[36,30834,30835,30837,30839,30842,30845,30848,30851,30854],{"class":38,"line":39},[36,30836,102],{"class":101},[36,30838,29932],{"class":105},[36,30840,30841],{"class":105}," run",[36,30843,30844],{"class":112}," --rm",[36,30846,30847],{"class":112}," --gpus",[36,30849,30850],{"class":105}," all",[36,30852,30853],{"class":105}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[36,30855,30856],{"class":105}," nvidia-smi\n",[19,30858,30859],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,30861,30862],{},[5198,30863],{"alt":31,"src":30864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[318,30866,30868],{"id":30867},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,30870,30871],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,30873,30874],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,30876,30877],{},[4113,30878,30879],{"href":30879,"rel":30880},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[27481],[19,30882,30883],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,30885,30886],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,30888,30889],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[248,30891,30892,30908],{},[251,30893,30894],{},[254,30895,30896,30899,30902,30905],{},[257,30897,30898],{"align":259},"镜像类型",[257,30900,30901],{"align":259},"适用场景",[257,30903,30904],{"align":259},"示例标签",[257,30906,30907],{"align":259},"大小",[265,30909,30910,30924,30938],{},[254,30911,30912,30915,30918,30921],{},[270,30913,30914],{"align":259},"base",[270,30916,30917],{"align":259},"仅需 CUDA 运行时库",[270,30919,30920],{"align":259},"12.4.0-base-ubuntu22.04",[270,30922,30923],{"align":259},"~240MB",[254,30925,30926,30929,30932,30935],{},[270,30927,30928],{"align":259},"runtime",[270,30930,30931],{"align":259},"部署编译后的应用（含数学库）",[270,30933,30934],{"align":259},"12.4.0-runtime-ubuntu22.04",[270,30936,30937],{"align":259},"~2GB",[254,30939,30940,30943,30946,30949],{},[270,30941,30942],{"align":259},"devel",[270,30944,30945],{"align":259},"开发环境（含编译工具）",[270,30947,30948],{"align":259},"12.4.0-devel-ubuntu22.04",[270,30950,30951],{"align":259},"~3GB",[19,30953,30954,30955,30958],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[33,30956,30957],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,30960,30961],{},[5198,30962],{"alt":31,"src":30963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,30965,30966],{},"在dockerfile里就可以开头这么写：",[26,30968,30970],{"className":92,"code":30969,"language":94,"meta":31,"style":31},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[33,30971,30972,30977],{"__ignoreMap":31},[36,30973,30974],{"class":38,"line":39},[36,30975,30976],{"class":3943},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[36,30978,30979,30982],{"class":38,"line":53},[36,30980,30981],{"class":101},"FROM",[36,30983,30984],{"class":105}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[318,30986,30988],{"id":30987},"_34配置以太网","3.4.配置以太网",[19,30990,30991],{},"指定网络模式",[26,30993,30995],{"className":92,"code":30994,"language":94,"meta":31,"style":31},"--net=host \\\n",[33,30996,30997],{"__ignoreMap":31},[36,30998,30999,31002,31004,31007],{"class":38,"line":39},[36,31000,31001],{"class":42},"--net",[36,31003,47],{"class":46},[36,31005,31006],{"class":105},"host",[36,31008,28294],{"class":101},[19,31010,31011],{},"启动参数里加上这行即可。具体在下方",[19,31013,31014],{},"--net选项：指定网络模式，该选项有以下参数可选：",[4875,31016,31017,31020,31023,31026],{},[214,31018,31019],{},"--net=bridge:默认选项，表示连接到默认的网桥",[214,31021,31022],{},"--net=host:容器使用宿主机的网络",[214,31024,31025],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[214,31027,31028],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[3785,31030,31031],{},"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":31,"searchDepth":53,"depth":53,"links":31033},[31034,31035,31036,31037],{"id":30348,"depth":196,"text":30349},{"id":30415,"depth":196,"text":30416},{"id":30867,"depth":196,"text":30868},{"id":30987,"depth":196,"text":30988},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":30337,"description":30345},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":31044,"title":31045,"body":31046,"description":31053,"extension":3817,"meta":31059,"navigation":658,"path":31060,"seo":31061,"stem":31062,"__hash__":31063},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":31047,"toc":31057},[31048,31051,31054],[10,31049,31045],{"id":31050},"_4dockerhub换源",[19,31052,31053],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,31055,31056],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":31,"searchDepth":53,"depth":53,"links":31058},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":31045,"description":31053},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":31065,"title":31066,"body":31067,"description":31,"extension":3817,"meta":32078,"navigation":658,"path":32079,"seo":32080,"stem":32081,"__hash__":32082},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":31068,"toc":32073},[31069,31072,31076,31082,31086,31089,31429,31432,31435,31438,31443,31448,31451,31454,31457,31460,31479,31482,31493,31499,31681,31691,31707,31970,31972,31996,32011,32020,32070],[10,31070,31066],{"id":31071},"_5docker命令学习",[318,31073,31075],{"id":31074},"_51参考文档","5.1.参考文档",[19,31077,31078],{},[4113,31079,31080],{"href":31080,"rel":31081},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[27481],[318,31083,31085],{"id":31084},"_52常用命令","5.2.常用命令",[19,31087,31088],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[248,31090,31091,31104],{},[251,31092,31093],{},[254,31094,31095,31098,31101],{},[257,31096,31097],{"align":259},"命令",[257,31099,31100],{"align":259},"描述",[257,31102,31103],{"align":259},"示例",[265,31105,31106,31117,31128,31139,31150,31161,31172,31183,31193,31204,31215,31226,31236,31247,31258,31269,31279,31289,31299,31309,31320,31331,31342,31353,31364,31375,31385,31396,31407,31418],{},[254,31107,31108,31111,31114],{},[270,31109,31110],{"align":259},"docker run",[270,31112,31113],{"align":259},"创建并启动一个新的容器。",[270,31115,31116],{"align":259},"docker run -it ubuntu bash",[254,31118,31119,31122,31125],{},[270,31120,31121],{"align":259},"docker build",[270,31123,31124],{"align":259},"通过指定的 Dockerfile 创建一个新的镜像。",[270,31126,31127],{"align":259},"docker build -t myimage .",[254,31129,31130,31133,31136],{},[270,31131,31132],{"align":259},"docker pull",[270,31134,31135],{"align":259},"从 Docker 仓库拉取镜像。",[270,31137,31138],{"align":259},"docker pull ubuntu",[254,31140,31141,31144,31147],{},[270,31142,31143],{"align":259},"docker push",[270,31145,31146],{"align":259},"将本地镜像推送到 Docker 仓库。",[270,31148,31149],{"align":259},"docker push myimage",[254,31151,31152,31155,31158],{},[270,31153,31154],{"align":259},"docker stop",[270,31156,31157],{"align":259},"停止一个正在运行的容器。",[270,31159,31160],{"align":259},"docker stop container_id",[254,31162,31163,31166,31169],{},[270,31164,31165],{"align":259},"docker start",[270,31167,31168],{"align":259},"启动一个已经存在的容器。",[270,31170,31171],{"align":259},"docker start container_id",[254,31173,31174,31177,31180],{},[270,31175,31176],{"align":259},"docker restart",[270,31178,31179],{"align":259},"重新启动容器。",[270,31181,31182],{"align":259},"docker restart container_id",[254,31184,31185,31188,31191],{},[270,31186,31187],{"align":259},"docker ps",[270,31189,31190],{"align":259},"列出当前正在运行的容器。",[270,31192,31187],{"align":259},[254,31194,31195,31198,31201],{},[270,31196,31197],{"align":259},"docker rm",[270,31199,31200],{"align":259},"删除一个或多个停止的容器。",[270,31202,31203],{"align":259},"docker rm container_id",[254,31205,31206,31209,31212],{},[270,31207,31208],{"align":259},"docker exec",[270,31210,31211],{"align":259},"在一个正在运行的容器中执行命令。",[270,31213,31214],{"align":259},"docker exec -it container_id bash",[254,31216,31217,31220,31223],{},[270,31218,31219],{"align":259},"docker logs",[270,31221,31222],{"align":259},"查看容器的日志输出。",[270,31224,31225],{"align":259},"docker logs container_id",[254,31227,31228,31231,31234],{},[270,31229,31230],{"align":259},"docker images",[270,31232,31233],{"align":259},"列出本地所有镜像。",[270,31235,31230],{"align":259},[254,31237,31238,31241,31244],{},[270,31239,31240],{"align":259},"docker rmi",[270,31242,31243],{"align":259},"删除一个或多个镜像。",[270,31245,31246],{"align":259},"docker rmi myimage",[254,31248,31249,31252,31255],{},[270,31250,31251],{"align":259},"docker network",[270,31253,31254],{"align":259},"管理 Docker 网络。",[270,31256,31257],{"align":259},"docker network ls",[254,31259,31260,31263,31266],{},[270,31261,31262],{"align":259},"docker volume",[270,31264,31265],{"align":259},"管理 Docker 数据卷。",[270,31267,31268],{"align":259},"docker volume ls",[254,31270,31271,31274,31277],{},[270,31272,31273],{"align":259},"docker-compose up",[270,31275,31276],{"align":259},"启动 docker-compose.yml 中定义的所有服务。",[270,31278,31273],{"align":259},[254,31280,31281,31284,31287],{},[270,31282,31283],{"align":259},"docker-compose down",[270,31285,31286],{"align":259},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[270,31288,31283],{"align":259},[254,31290,31291,31294,31297],{},[270,31292,31293],{"align":259},"docker info",[270,31295,31296],{"align":259},"显示 Docker 系统的详细信息。",[270,31298,31293],{"align":259},[254,31300,31301,31304,31307],{},[270,31302,31303],{"align":259},"docker stats",[270,31305,31306],{"align":259},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[270,31308,31303],{"align":259},[254,31310,31311,31314,31317],{},[270,31312,31313],{"align":259},"docker inspect",[270,31315,31316],{"align":259},"查看容器或镜像的详细信息（JSON 格式）。",[270,31318,31319],{"align":259},"docker inspect container_id",[254,31321,31322,31325,31328],{},[270,31323,31324],{"align":259},"docker save",[270,31326,31327],{"align":259},"将一个镜像保存为 tar 文件。",[270,31329,31330],{"align":259},"docker save -o myimage.tar myimage",[254,31332,31333,31336,31339],{},[270,31334,31335],{"align":259},"docker load",[270,31337,31338],{"align":259},"从 tar 文件中加载镜像。",[270,31340,31341],{"align":259},"docker load -i myimage.tar",[254,31343,31344,31347,31350],{},[270,31345,31346],{"align":259},"docker tag",[270,31348,31349],{"align":259},"为镜像添加标签（tag）。",[270,31351,31352],{"align":259},"docker tag myimage myimage:v1",[254,31354,31355,31358,31361],{},[270,31356,31357],{"align":259},"docker buildx build",[270,31359,31360],{"align":259},"使用 Buildx 构建多架构镜像。",[270,31362,31363],{"align":259},"docker buildx build -t myimage .",[254,31365,31366,31369,31372],{},[270,31367,31368],{"align":259},"docker buildx create",[270,31370,31371],{"align":259},"创建一个新的 Buildx 构建实例。",[270,31373,31374],{"align":259},"docker buildx create –use",[254,31376,31377,31380,31383],{},[270,31378,31379],{"align":259},"docker buildx ls",[270,31381,31382],{"align":259},"列出所有可用的 Buildx 构建实例。",[270,31384,31379],{"align":259},[254,31386,31387,31390,31393],{},[270,31388,31389],{"align":259},"docker buildx use",[270,31391,31392],{"align":259},"设置当前的 Buildx 构建实例。",[270,31394,31395],{"align":259},"docker buildx use mybuilder",[254,31397,31398,31401,31404],{},[270,31399,31400],{"align":259},"docker buildx bake",[270,31402,31403],{"align":259},"使用 Bake 文件批量构建镜像。",[270,31405,31406],{"align":259},"docker buildx bake -f bake.hcl",[254,31408,31409,31412,31415],{},[270,31410,31411],{"align":259},"docker buildx build –push",[270,31413,31414],{"align":259},"构建镜像并推送到镜像仓库。",[270,31416,31417],{"align":259},"docker buildx build –push -t myimage .",[254,31419,31420,31423,31426],{},[270,31421,31422],{"align":259},"docker buildx build –platform",[270,31424,31425],{"align":259},"构建镜像并为多个平台生成支持。",[270,31427,31428],{"align":259},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,31430,31431],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,31433,31434],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,31436,31437],{},"docker images 可以查看已经下载的镜像",[19,31439,31440],{},[5198,31441],{"alt":31,"src":31442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,31444,31445],{},[4027,31446,31447],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,31449,31450],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,31452,31453],{},"docker container logs 查看容器日志",[19,31455,31456],{},"docker top 查看容器里的进程",[19,31458,31459],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[26,31461,31463],{"className":92,"code":31462,"language":94,"meta":31,"style":31},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[33,31464,31465],{"__ignoreMap":31},[36,31466,31467,31470,31473,31476],{"class":38,"line":39},[36,31468,31469],{"class":101},"如：docker",[36,31471,31472],{"class":105}," cp",[36,31474,31475],{"class":105}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[36,31477,31478],{"class":105}," \u002Fmydata\u002Fnginx\n",[19,31480,31481],{},"docker run时在启动容器的时候会有几个常用的选项：",[4875,31483,31484,31487,31490],{},[214,31485,31486],{},"-d选项：表示后台运行",[214,31488,31489],{},"-P选项：随机端口映射",[214,31491,31492],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[318,31494,31496],{"id":31495},"_53run命令的参数非常重要",[4027,31497,31498],{},"5.3.run命令的参数（非常重要）",[248,31500,31501,31514],{},[251,31502,31503],{},[254,31504,31505,31508,31511],{},[257,31506,31507],{"align":259},"参数\u002F配置",[257,31509,31510],{"align":259},"功能说明",[257,31512,31513],{"align":259},"重要性与参考依据",[265,31515,31516,31527,31538,31549,31560,31571,31582,31593,31604,31615,31626,31637,31648,31659,31670],{},[254,31517,31518,31521,31524],{},[270,31519,31520],{"align":259},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[270,31522,31523],{"align":259},"指定容器名称，便于后续管理",[270,31525,31526],{"align":259},"替代随机生成的容器名。",[254,31528,31529,31532,31535],{},[270,31530,31531],{"align":259},"–gpus all",[270,31533,31534],{"align":259},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[270,31536,31537],{"align":259},"用于CUDA加速等GPU依赖任务。",[254,31539,31540,31543,31546],{},[270,31541,31542],{"align":259},"-e NVIDIA_DRIVER_CAPABILITIES=all",[270,31544,31545],{"align":259},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[270,31547,31548],{"align":259},"确保容器内GPU功能完整67。",[254,31550,31551,31554,31557],{},[270,31552,31553],{"align":259},"-dit",[270,31555,31556],{"align":259},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[270,31558,31559],{"align":259},"允许容器在后台运行并支持交互操作。",[254,31561,31562,31565,31568],{},[270,31563,31564],{"align":259},"–privileged",[270,31566,31567],{"align":259},"赋予容器完全主机权限（可访问设备、内核模块等）",[270,31569,31570],{"align":259},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[254,31572,31573,31576,31579],{},[270,31574,31575],{"align":259},"–net=host",[270,31577,31578],{"align":259},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[270,31580,31581],{"align":259},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[254,31583,31584,31587,31590],{},[270,31585,31586],{"align":259},"–group-add audio–group-add video–group-add dialout",[270,31588,31589],{"align":259},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[270,31591,31592],{"align":259},"避免权限问题（如避免无法调用摄像头、麦克风）。",[254,31594,31595,31598,31601],{},[270,31596,31597],{"align":259},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[270,31599,31600],{"align":259},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[270,31602,31603],{"align":259},"支持容器内运行图形界面应用（如OpenCV可视化）。",[254,31605,31606,31609,31612],{},[270,31607,31608],{"align":259},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[270,31610,31611],{"align":259},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[270,31613,31614],{"align":259},"实现容器内图形显示。",[254,31616,31617,31620,31623],{},[270,31618,31619],{"align":259},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[270,31621,31622],{"align":259},"挂载X11认证文件（只读）",[270,31624,31625],{"align":259},"确保容器有权连接宿主机显示服务。",[254,31627,31628,31631,31634],{},[270,31629,31630],{"align":259},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[270,31632,31633],{"align":259},"挂载Wayland显示协议相关目录",[270,31635,31636],{"align":259},"支持Wayland协议的图形显示。",[254,31638,31639,31642,31645],{},[270,31640,31641],{"align":259},"–ulimit nofile=1024:524288",[270,31643,31644],{"align":259},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[270,31646,31647],{"align":259},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[254,31649,31650,31653,31656],{},[270,31651,31652],{"align":259},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[270,31654,31655],{"align":259},"挂载宿主机用户目录到容器内同名路径",[270,31657,31658],{"align":259},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[254,31660,31661,31664,31667],{},[270,31662,31663],{"align":259},"-w \u002Fhome\u002Ftungchiahui",[270,31665,31666],{"align":259},"设置容器启动后的默认工作目录",[270,31668,31669],{"align":259},"直接进入项目路径，方便执行命令2324。",[254,31671,31672,31675,31678],{},[270,31673,31674],{"align":259},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[270,31676,31677],{"align":259},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[270,31679,31680],{"align":259},"提供预配置的深度学习与机器人开发环境。",[19,31682,31683,31684,31686,31687,31690],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[33,31685,102],{},"加不加",[33,31688,31689],{},"sudo -E","都无所谓。",[19,31692,31693,31694,31696,31697,31699,31700,31703,31704,31706],{},"用户已经被加到docker组了，不用",[33,31695,102],{},"也行跑，其次，",[33,31698,102],{},"运行的话，你的",[33,31701,31702],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[33,31705,31702],{},"更不可能变了。",[26,31708,31710],{"className":92,"code":31709,"language":94,"meta":31,"style":31},"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",[33,31711,31712,31725,31735,31745,31757,31764,31771,31778,31788,31797,31806,31820,31832,31844,31853,31863,31872,31887,31920,31947,31958,31965],{"__ignoreMap":31},[36,31713,31714,31716,31718,31720,31723],{"class":38,"line":39},[36,31715,102],{"class":101},[36,31717,29932],{"class":105},[36,31719,30841],{"class":105},[36,31721,31722],{"class":112}," --name=ros_opencv_cuda",[36,31724,28294],{"class":112},[36,31726,31727,31730,31733],{"class":38,"line":53},[36,31728,31729],{"class":42},"--gpus ",[36,31731,31732],{"class":105},"all",[36,31734,28294],{"class":112},[36,31736,31737,31740,31743],{"class":38,"line":196},[36,31738,31739],{"class":42},"-e ",[36,31741,31742],{"class":105},"NVIDIA_DRIVER_CAPABILITIES=all",[36,31744,28294],{"class":112},[36,31746,31747,31749,31752,31755],{"class":38,"line":642},[36,31748,31739],{"class":42},[36,31750,31751],{"class":105},"DISPLAY=",[36,31753,31754],{"class":42},"$DISPLAY ",[36,31756,29788],{"class":112},[36,31758,31759,31762],{"class":38,"line":655},[36,31760,31761],{"class":42},"-dit ",[36,31763,29788],{"class":112},[36,31765,31766,31769],{"class":38,"line":662},[36,31767,31768],{"class":42},"--privileged ",[36,31770,29788],{"class":112},[36,31772,31773,31776],{"class":38,"line":667},[36,31774,31775],{"class":42},"--net=host ",[36,31777,29788],{"class":112},[36,31779,31780,31783,31786],{"class":38,"line":679},[36,31781,31782],{"class":42},"--group-add ",[36,31784,31785],{"class":105},"audio",[36,31787,28294],{"class":112},[36,31789,31790,31792,31795],{"class":38,"line":685},[36,31791,31782],{"class":42},[36,31793,31794],{"class":105},"video",[36,31796,28294],{"class":112},[36,31798,31799,31801,31804],{"class":38,"line":691},[36,31800,31782],{"class":42},[36,31802,31803],{"class":105},"dialout",[36,31805,28294],{"class":112},[36,31807,31808,31810,31813,31815,31818],{"class":38,"line":696},[36,31809,31739],{"class":42},[36,31811,31812],{"class":105},"XAUTHORITY=",[36,31814,31702],{"class":42},[36,31816,31817],{"class":105},"\u002F.Xauthority",[36,31819,28294],{"class":112},[36,31821,31822,31824,31827,31830],{"class":38,"line":702},[36,31823,31739],{"class":42},[36,31825,31826],{"class":105},"WAYLAND_DISPLAY=",[36,31828,31829],{"class":42},"$WAYLAND_DISPLAY ",[36,31831,29788],{"class":112},[36,31833,31834,31836,31839,31842],{"class":38,"line":708},[36,31835,31739],{"class":42},[36,31837,31838],{"class":105},"XDG_RUNTIME_DIR=",[36,31840,31841],{"class":42},"$XDG_RUNTIME_DIR ",[36,31843,29788],{"class":112},[36,31845,31846,31848,31851],{"class":38,"line":713},[36,31847,31739],{"class":42},[36,31849,31850],{"class":105},"QT_QPA_PLATFORM=xcb",[36,31852,28294],{"class":112},[36,31854,31855,31858,31861],{"class":38,"line":719},[36,31856,31857],{"class":42},"-v ",[36,31859,31860],{"class":105},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[36,31862,28294],{"class":112},[36,31864,31865,31867,31870],{"class":38,"line":725},[36,31866,31857],{"class":42},[36,31868,31869],{"class":105},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[36,31871,28294],{"class":112},[36,31873,31874,31877,31880,31882,31885],{"class":38,"line":731},[36,31875,31876],{"class":42},"-v $HOME",[36,31878,31879],{"class":105},"\u002F.Xauthority:",[36,31881,31702],{"class":42},[36,31883,31884],{"class":105},"\u002F.Xauthority:ro",[36,31886,28294],{"class":112},[36,31888,31889,31891,31894,31896,31899,31902,31904,31907,31909,31911,31913,31915,31918],{"class":38,"line":736},[36,31890,31857],{"class":42},[36,31892,31893],{"class":105},"\u002Frun\u002Fuser\u002F",[36,31895,28715],{"class":42},[36,31897,31898],{"class":101},"id",[36,31900,31901],{"class":112}," -u",[36,31903,4304],{"class":42},[36,31905,31906],{"class":105},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[36,31908,28715],{"class":42},[36,31910,31898],{"class":101},[36,31912,31901],{"class":112},[36,31914,4304],{"class":42},[36,31916,31917],{"class":105},"\u002Fwayland-0",[36,31919,28294],{"class":112},[36,31921,31922,31924,31926,31928,31930,31932,31934,31937,31939,31941,31943,31945],{"class":38,"line":742},[36,31923,31857],{"class":42},[36,31925,31893],{"class":105},[36,31927,28715],{"class":42},[36,31929,31898],{"class":101},[36,31931,31901],{"class":112},[36,31933,4304],{"class":42},[36,31935,31936],{"class":105},":\u002Frun\u002Fuser\u002F",[36,31938,28715],{"class":42},[36,31940,31898],{"class":101},[36,31942,31901],{"class":112},[36,31944,17373],{"class":42},[36,31946,29788],{"class":112},[36,31948,31949,31951,31953,31956],{"class":38,"line":748},[36,31950,31876],{"class":42},[36,31952,4729],{"class":105},[36,31954,31955],{"class":42},"$HOME ",[36,31957,29788],{"class":112},[36,31959,31960,31963],{"class":38,"line":754},[36,31961,31962],{"class":42},"-w $HOME ",[36,31964,29788],{"class":112},[36,31966,31967],{"class":38,"line":760},[36,31968,31969],{"class":42},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,31971,12706],{},[211,31973,31974,31982,31985,31988],{},[214,31975,31976,17454,31978,31981],{},[33,31977,31742],{},[33,31979,31980],{},"--gpus all","没有英伟达显卡请注释。",[214,31983,31984],{},"--name后面请自己为容器起名。",[214,31986,31987],{},"最后一行仓库名称请你自己找对应的镜像填上。",[214,31989,31990,31991,224],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[27175,31992,31993],{},[4027,31994,31995],{},"请不要加",[26,31997,31999],{"className":92,"code":31998,"language":94,"meta":31,"style":31},"--ulimit nofile=1024:524288 \\\n",[33,32000,32001],{"__ignoreMap":31},[36,32002,32003,32006,32009],{"class":38,"line":39},[36,32004,32005],{"class":101},"--ulimit",[36,32007,32008],{"class":105}," nofile=1024:524288",[36,32010,28294],{"class":112},[19,32012,32013,32014,32019],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[27175,32015,32016],{},[4027,32017,32018],{},"不建议","**.**",[26,32021,32023],{"className":92,"code":32022,"language":94,"meta":31,"style":31},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[33,32024,32025,32052,32061],{"__ignoreMap":31},[36,32026,32027,32030,32033,32035,32037,32039,32041,32043,32045,32048,32050],{"class":38,"line":39},[36,32028,32029],{"class":101},"--user",[36,32031,32032],{"class":42}," $(",[36,32034,31898],{"class":101},[36,32036,31901],{"class":112},[36,32038,4304],{"class":42},[36,32040,4729],{"class":105},[36,32042,28715],{"class":42},[36,32044,31898],{"class":101},[36,32046,32047],{"class":112}," -g",[36,32049,17373],{"class":42},[36,32051,29788],{"class":112},[36,32053,32054,32056,32059],{"class":38,"line":53},[36,32055,31857],{"class":42},[36,32057,32058],{"class":105},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[36,32060,28294],{"class":112},[36,32062,32063,32065,32068],{"class":38,"line":196},[36,32064,31857],{"class":42},[36,32066,32067],{"class":105},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[36,32069,28294],{"class":112},[3785,32071,32072],{},"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":31,"searchDepth":53,"depth":53,"links":32074},[32075,32076,32077],{"id":31074,"depth":196,"text":31075},{"id":31084,"depth":196,"text":31085},{"id":31495,"depth":196,"text":31498},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":31066,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":32084,"title":32085,"body":32086,"description":31,"extension":3817,"meta":33708,"navigation":658,"path":33709,"seo":33710,"stem":33711,"__hash__":33712},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":32087,"toc":33703},[32088,32091,32095,32098,32320,32324,32328,32331,32437,32442,32445,32450,32453,32458,32461,32466,32469,32481,32484,32489,32496,32524,32531,32607,32612,32615,32638,32640,32715,32720,32723,32727,32735,32740,32745,32749,32760,32766,32769,32772,32795,32798,32801,32829,32832,32835,33300,33303,33308,33313,33317,33340,33345,33349,33353,33356,33359,33362,33389,33392,33395,33413,33416,33419,33441,33449,33454,33459,33463,33466,33469,33472,33475,33520,33523,33541,33544,33549,33552,33573,33576,33632,33635,33640,33644,33647,33654,33657,33660,33665,33668,33684,33687,33700],[10,32089,32085],{"id":32090},"_6手动创建docker镜像",[318,32092,32094],{"id":32093},"_61dockerfile","6.1.DockerFile",[19,32096,32097],{},"常用命令：",[248,32099,32100,32111],{},[251,32101,32102],{},[254,32103,32104,32107,32109],{},[257,32105,32106],{"align":259},"指令",[257,32108,29483],{"align":259},[257,32110,31103],{"align":259},[265,32112,32113,32123,32139,32150,32161,32172,32183,32194,32205,32219,32233,32244,32258,32269,32280,32294,32309],{},[254,32114,32115,32117,32120],{},[270,32116,30981],{"align":259},[270,32118,32119],{"align":259},"指定基础镜像，是 Dockerfile 的起点",[270,32121,32122],{"align":259},"FROM ubuntu:22.04",[254,32124,32125,32128,32131],{},[270,32126,32127],{"align":259},"LABEL",[270,32129,32130],{"align":259},"添加元数据（如作者、版本等）",[270,32132,32133,32134,32138],{"align":259},"LABEL maintainer=”",[4113,32135,32137],{"href":32136},"mailto:you@example.com","you@example.com","”",[254,32140,32141,32144,32147],{},[270,32142,32143],{"align":259},"ENV",[270,32145,32146],{"align":259},"设置环境变量",[270,32148,32149],{"align":259},"ENV PORT=8080",[254,32151,32152,32155,32158],{},[270,32153,32154],{"align":259},"ARG",[270,32156,32157],{"align":259},"构建参数，只在构建期间可用",[270,32159,32160],{"align":259},"ARG VERSION=1.0",[254,32162,32163,32166,32169],{},[270,32164,32165],{"align":259},"RUN",[270,32167,32168],{"align":259},"构建镜像时运行命令",[270,32170,32171],{"align":259},"RUN apt-get update && apt-get install -y curl",[254,32173,32174,32177,32180],{},[270,32175,32176],{"align":259},"COPY",[270,32178,32179],{"align":259},"复制文件到镜像中",[270,32181,32182],{"align":259},"COPY . \u002Fapp",[254,32184,32185,32188,32191],{},[270,32186,32187],{"align":259},"ADD",[270,32189,32190],{"align":259},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[270,32192,32193],{"align":259},"ADD archive.tar.gz \u002Fdata\u002F",[254,32195,32196,32199,32202],{},[270,32197,32198],{"align":259},"WORKDIR",[270,32200,32201],{"align":259},"设置工作目录",[270,32203,32204],{"align":259},"WORKDIR \u002Fopt",[254,32206,32207,32210,32213],{},[270,32208,32209],{"align":259},"CMD",[270,32211,32212],{"align":259},"设置容器启动时默认命令（可被 docker run 覆盖）",[270,32214,32215,32216],{"align":259},"CMD ",[36,32217,32218],{},"“node”, “index.js”",[254,32220,32221,32224,32227],{},[270,32222,32223],{"align":259},"ENTRYPOINT",[270,32225,32226],{"align":259},"设置容器启动时固定命令（通常用于 CLI 工具等）",[270,32228,32229,32230],{"align":259},"ENTRYPOINT ",[36,32231,32232],{},"“python3”",[254,32234,32235,32238,32241],{},[270,32236,32237],{"align":259},"EXPOSE",[270,32239,32240],{"align":259},"声明镜像内服务监听的端口（不会自动映射）",[270,32242,32243],{"align":259},"EXPOSE 80",[254,32245,32246,32249,32252],{},[270,32247,32248],{"align":259},"VOLUME",[270,32250,32251],{"align":259},"声明数据卷挂载点",[270,32253,32254,32255],{"align":259},"VOLUME ",[36,32256,32257],{},"“\u002Fdata”",[254,32259,32260,32263,32266],{},[270,32261,32262],{"align":259},"USER",[270,32264,32265],{"align":259},"设置后续命令执行的用户",[270,32267,32268],{"align":259},"USER appuser",[254,32270,32271,32274,32277],{},[270,32272,32273],{"align":259},"ONBUILD",[270,32275,32276],{"align":259},"当镜像作为其他镜像基础镜像时触发的构建指令",[270,32278,32279],{"align":259},"ONBUILD COPY . \u002Fsrc",[254,32281,32282,32285,32288],{},[270,32283,32284],{"align":259},"SHELL",[270,32286,32287],{"align":259},"更改默认 shell，比如将 sh -c 改为 bash -c",[270,32289,32290,32291],{"align":259},"SHELL ",[36,32292,32293],{},"“\u002Fbin\u002Fbash”, “-c”",[254,32295,32296,32299,32302],{},[270,32297,32298],{"align":259},"HEALTHCHECK",[270,32300,32301],{"align":259},"定义容器运行时的健康检查命令",[270,32303,32304,32305],{"align":259},"`HEALTHCHECK CMD curl –fail ",[4113,32306,32307],{"href":32307,"rel":32308},"http:\u002F\u002Flocalhost:8080",[27481],[254,32310,32311,32314,32317],{},[270,32312,32313],{"align":259},"STOPSIGNAL",[270,32315,32316],{"align":259},"容器停止时发送的信号",[270,32318,32319],{"align":259},"STOPSIGNAL SIGKILL",[318,32321,32323],{"id":32322},"_62自己创建容器","6.2.自己创建容器",[25619,32325,32327],{"id":32326},"_621手动创建","6.2.1.手动创建",[19,32329,32330],{},"在x86电脑上编译x86的：",[26,32332,32334],{"className":92,"code":32333,"language":94,"meta":31,"style":31},"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",[33,32335,32336,32352,32356,32369,32373,32386,32390,32403,32407,32420,32424],{"__ignoreMap":31},[36,32337,32338,32340,32343,32346,32349],{"class":38,"line":39},[36,32339,30164],{"class":101},[36,32341,32342],{"class":105}," build",[36,32344,32345],{"class":112}," -t",[36,32347,32348],{"class":105}," ros-melodic-cuda118-cudnn8-bionic:latest",[36,32350,32351],{"class":105}," .\n",[36,32353,32354],{"class":38,"line":53},[36,32355,659],{"emptyLinePlaceholder":658},[36,32357,32358,32360,32362,32364,32367],{"class":38,"line":196},[36,32359,30164],{"class":101},[36,32361,32342],{"class":105},[36,32363,32345],{"class":112},[36,32365,32366],{"class":105}," ros-noetic-focal:latest",[36,32368,32351],{"class":105},[36,32370,32371],{"class":38,"line":642},[36,32372,659],{"emptyLinePlaceholder":658},[36,32374,32375,32377,32379,32381,32384],{"class":38,"line":655},[36,32376,30164],{"class":101},[36,32378,32342],{"class":105},[36,32380,32345],{"class":112},[36,32382,32383],{"class":105}," ros-humble-jammy:latest",[36,32385,32351],{"class":105},[36,32387,32388],{"class":38,"line":662},[36,32389,659],{"emptyLinePlaceholder":658},[36,32391,32392,32394,32396,32398,32401],{"class":38,"line":667},[36,32393,30164],{"class":101},[36,32395,32342],{"class":105},[36,32397,32345],{"class":112},[36,32399,32400],{"class":105}," ros-jazzy-noble:latest",[36,32402,32351],{"class":105},[36,32404,32405],{"class":38,"line":679},[36,32406,659],{"emptyLinePlaceholder":658},[36,32408,32409,32411,32413,32415,32418],{"class":38,"line":685},[36,32410,30164],{"class":101},[36,32412,32342],{"class":105},[36,32414,32345],{"class":112},[36,32416,32417],{"class":105}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[36,32419,32351],{"class":105},[36,32421,32422],{"class":38,"line":691},[36,32423,659],{"emptyLinePlaceholder":658},[36,32425,32426,32428,32430,32432,32435],{"class":38,"line":696},[36,32427,30164],{"class":101},[36,32429,32342],{"class":105},[36,32431,32345],{"class":112},[36,32433,32434],{"class":105}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[36,32436,32351],{"class":105},[19,32438,32439],{},[5198,32440],{"alt":31,"src":32441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,32443,32444],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,32446,32447],{},[5198,32448],{"alt":31,"src":32449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,32451,32452],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[211,32454,32455],{},[214,32456,32457],{},"创建 Docker Hub 账户",[19,32459,32460],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[211,32462,32463],{"start":53},[214,32464,32465],{},"登录 Docker Hub",[19,32467,32468],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[26,32470,32472],{"className":92,"code":32471,"language":94,"meta":31,"style":31},"docker login\n",[33,32473,32474],{"__ignoreMap":31},[36,32475,32476,32478],{"class":38,"line":39},[36,32477,30164],{"class":101},[36,32479,32480],{"class":105}," login\n",[19,32482,32483],{},"输入你的 Docker Hub 用户名和密码进行验证。",[211,32485,32486],{},[214,32487,32488],{},"为你的镜像打标签",[19,32490,32491,32492,32495],{},"Docker Hub 使用 ",[33,32493,32494],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[26,32497,32499],{"className":92,"code":32498,"language":94,"meta":31,"style":31},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[33,32500,32501],{"__ignoreMap":31},[36,32502,32503,32505,32508,32510,32513,32516,32519,32521],{"class":38,"line":39},[36,32504,30164],{"class":101},[36,32506,32507],{"class":105}," tag",[36,32509,32400],{"class":105},[36,32511,32512],{"class":46}," \u003C",[36,32514,32515],{"class":105},"你的用户",[36,32517,32518],{"class":42},"名",[36,32520,4829],{"class":46},[36,32522,32523],{"class":105},"\u002Fros-jazzy-noble:latest\n",[19,32525,32526,32527,32530],{},"例如，如果你的 Docker Hub 用户名是 ",[33,32528,32529],{},"tungchiahui","，你应该执行：",[26,32532,32534],{"className":92,"code":32533,"language":94,"meta":31,"style":31},"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",[33,32535,32536,32547,32551,32562,32566,32577,32581,32592,32596],{"__ignoreMap":31},[36,32537,32538,32540,32542,32544],{"class":38,"line":39},[36,32539,30164],{"class":101},[36,32541,32507],{"class":105},[36,32543,32366],{"class":105},[36,32545,32546],{"class":105}," tungchiahui\u002Fros-noetic-focal:latest\n",[36,32548,32549],{"class":38,"line":53},[36,32550,659],{"emptyLinePlaceholder":658},[36,32552,32553,32555,32557,32559],{"class":38,"line":196},[36,32554,30164],{"class":101},[36,32556,32507],{"class":105},[36,32558,32383],{"class":105},[36,32560,32561],{"class":105}," tungchiahui\u002Fros-humble-jammy:latest\n",[36,32563,32564],{"class":38,"line":642},[36,32565,659],{"emptyLinePlaceholder":658},[36,32567,32568,32570,32572,32574],{"class":38,"line":655},[36,32569,30164],{"class":101},[36,32571,32507],{"class":105},[36,32573,32400],{"class":105},[36,32575,32576],{"class":105}," tungchiahui\u002Fros-jazzy-noble:latest\n",[36,32578,32579],{"class":38,"line":662},[36,32580,659],{"emptyLinePlaceholder":658},[36,32582,32583,32585,32587,32589],{"class":38,"line":667},[36,32584,30164],{"class":101},[36,32586,32507],{"class":105},[36,32588,32417],{"class":105},[36,32590,32591],{"class":105}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,32593,32594],{"class":38,"line":679},[36,32595,659],{"emptyLinePlaceholder":658},[36,32597,32598,32600,32602,32604],{"class":38,"line":685},[36,32599,30164],{"class":101},[36,32601,32507],{"class":105},[36,32603,32434],{"class":105},[36,32605,32606],{"class":105}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[211,32608,32609],{"start":53},[214,32610,32611],{},"推送镜像到 Docker Hub",[19,32613,32614],{},"使用以下命令将镜像推送到 Docker Hub：",[26,32616,32618],{"className":92,"code":32617,"language":94,"meta":31,"style":31},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[33,32619,32620],{"__ignoreMap":31},[36,32621,32622,32624,32627,32629,32631,32633,32635],{"class":38,"line":39},[36,32623,30164],{"class":101},[36,32625,32626],{"class":105}," push",[36,32628,32512],{"class":46},[36,32630,32515],{"class":105},[36,32632,32518],{"class":42},[36,32634,4829],{"class":46},[36,32636,32637],{"class":105},"\u002Fros-noetic-jazzy-noble:latest\n",[19,32639,447],{},[26,32641,32643],{"className":92,"code":32642,"language":94,"meta":31,"style":31},"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",[33,32644,32645,32653,32657,32665,32669,32677,32681,32690,32694,32702,32706],{"__ignoreMap":31},[36,32646,32647,32649,32651],{"class":38,"line":39},[36,32648,30164],{"class":101},[36,32650,32626],{"class":105},[36,32652,32546],{"class":105},[36,32654,32655],{"class":38,"line":53},[36,32656,659],{"emptyLinePlaceholder":658},[36,32658,32659,32661,32663],{"class":38,"line":196},[36,32660,30164],{"class":101},[36,32662,32626],{"class":105},[36,32664,32561],{"class":105},[36,32666,32667],{"class":38,"line":642},[36,32668,659],{"emptyLinePlaceholder":658},[36,32670,32671,32673,32675],{"class":38,"line":655},[36,32672,30164],{"class":101},[36,32674,32626],{"class":105},[36,32676,32576],{"class":105},[36,32678,32679],{"class":38,"line":662},[36,32680,659],{"emptyLinePlaceholder":658},[36,32682,32683,32685,32687],{"class":38,"line":667},[36,32684,30164],{"class":101},[36,32686,32626],{"class":105},[36,32688,32689],{"class":105}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,32691,32692],{"class":38,"line":679},[36,32693,659],{"emptyLinePlaceholder":658},[36,32695,32696,32698,32700],{"class":38,"line":685},[36,32697,30164],{"class":101},[36,32699,32626],{"class":105},[36,32701,32606],{"class":105},[36,32703,32704],{"class":38,"line":691},[36,32705,659],{"emptyLinePlaceholder":658},[36,32707,32708,32710,32712],{"class":38,"line":696},[36,32709,30164],{"class":101},[36,32711,32626],{"class":105},[36,32713,32714],{"class":105}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[211,32716,32717],{"start":196},[214,32718,32719],{},"验证推送成功",[19,32721,32722],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,32724,32725],{},[4027,32726,7482],{},[4875,32728,32729,32732],{},[214,32730,32731],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[214,32733,32734],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,32736,32737],{},[5198,32738],{"alt":31,"src":32739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,32741,32742],{},[5198,32743],{"alt":31,"src":32744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[25619,32746,32748],{"id":32747},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,32750,32751,32752,32755,32756,32759],{},"如果您想在 ",[4027,32753,32754],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[4027,32757,32758],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,32761,32762,32763],{},"1. ",[4027,32764,32765],{},"启用 Docker 跨平台构建",[19,32767,32768],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,32770,32771],{},"第一步：启用 buildx（只需执行一次）",[26,32773,32775],{"className":92,"code":32774,"language":94,"meta":31,"style":31},"docker buildx create --name multiarch_builder --use\n",[33,32776,32777],{"__ignoreMap":31},[36,32778,32779,32781,32784,32786,32789,32792],{"class":38,"line":39},[36,32780,30164],{"class":101},[36,32782,32783],{"class":105}," buildx",[36,32785,168],{"class":105},[36,32787,32788],{"class":112}," --name",[36,32790,32791],{"class":105}," multiarch_builder",[36,32793,32794],{"class":112}," --use\n",[19,32796,32797],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,32799,32800],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[26,32802,32804],{"className":92,"code":32803,"language":94,"meta":31,"style":31},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[33,32805,32806],{"__ignoreMap":31},[36,32807,32808,32810,32812,32814,32817,32820,32823,32826],{"class":38,"line":39},[36,32809,30164],{"class":101},[36,32811,30841],{"class":105},[36,32813,30844],{"class":112},[36,32815,32816],{"class":112}," --privileged",[36,32818,32819],{"class":105}," multiarch\u002Fqemu-user-static",[36,32821,32822],{"class":112}," --reset",[36,32824,32825],{"class":112}," -p",[36,32827,32828],{"class":105}," yes\n",[19,32830,32831],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,32833,32834],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[26,32836,32838],{"className":92,"code":32837,"language":94,"meta":31,"style":31},"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",[33,32839,32840,32882,32886,32891,32901,32911,32920,32926,32930,32934,32944,32952,32961,32967,32971,32975,32985,32993,33002,33008,33012,33016,33026,33034,33043,33049,33053,33057,33067,33075,33084,33090,33094,33098,33108,33116,33125,33131,33135,33139,33149,33157,33166,33172,33176,33180,33190,33198,33207,33213,33217,33221,33231,33239,33248,33254,33258,33262,33273,33281,33290,33296],{"__ignoreMap":31},[36,32841,32842,32844,32846,32848,32851,32854,32856,32858,32861,32863,32865,32867,32869,32872,32875,32877,32880],{"class":38,"line":39},[36,32843,30164],{"class":101},[36,32845,32783],{"class":105},[36,32847,32342],{"class":105},[36,32849,32850],{"class":112}," --platform",[36,32852,32853],{"class":105}," linux\u002Famd64,linux\u002Farm64",[36,32855,32345],{"class":112},[36,32857,32512],{"class":46},[36,32859,32860],{"class":105},"你的镜像",[36,32862,32518],{"class":42},[36,32864,4829],{"class":46},[36,32866,4729],{"class":105},[36,32868,393],{"class":46},[36,32870,32871],{"class":105},"标",[36,32873,32874],{"class":42},"签",[36,32876,4829],{"class":46},[36,32878,32879],{"class":112}," --push",[36,32881,32351],{"class":105},[36,32883,32884],{"class":38,"line":53},[36,32885,659],{"emptyLinePlaceholder":658},[36,32887,32888],{"class":38,"line":196},[36,32889,32890],{"class":3943},"# 例子：\n",[36,32892,32893,32895,32897,32899],{"class":38,"line":642},[36,32894,30164],{"class":101},[36,32896,32783],{"class":105},[36,32898,32342],{"class":105},[36,32900,28294],{"class":112},[36,32902,32903,32906,32909],{"class":38,"line":655},[36,32904,32905],{"class":42},"--platform ",[36,32907,32908],{"class":105},"linux\u002Famd64,linux\u002Farm64",[36,32910,28294],{"class":112},[36,32912,32913,32915,32918],{"class":38,"line":662},[36,32914,32345],{"class":112},[36,32916,32917],{"class":105}," tungchiahui\u002Fros:noetic-focal",[36,32919,28294],{"class":112},[36,32921,32922,32924],{"class":38,"line":667},[36,32923,32879],{"class":112},[36,32925,28294],{"class":112},[36,32927,32928],{"class":38,"line":679},[36,32929,32351],{"class":105},[36,32931,32932],{"class":38,"line":685},[36,32933,659],{"emptyLinePlaceholder":658},[36,32935,32936,32938,32940,32942],{"class":38,"line":691},[36,32937,30164],{"class":101},[36,32939,32783],{"class":105},[36,32941,32342],{"class":105},[36,32943,28294],{"class":112},[36,32945,32946,32948,32950],{"class":38,"line":696},[36,32947,32905],{"class":42},[36,32949,32908],{"class":105},[36,32951,28294],{"class":112},[36,32953,32954,32956,32959],{"class":38,"line":702},[36,32955,32345],{"class":112},[36,32957,32958],{"class":105}," tungchiahui\u002Fros:humble-jammy",[36,32960,28294],{"class":112},[36,32962,32963,32965],{"class":38,"line":708},[36,32964,32879],{"class":112},[36,32966,28294],{"class":112},[36,32968,32969],{"class":38,"line":713},[36,32970,32351],{"class":105},[36,32972,32973],{"class":38,"line":719},[36,32974,659],{"emptyLinePlaceholder":658},[36,32976,32977,32979,32981,32983],{"class":38,"line":725},[36,32978,30164],{"class":101},[36,32980,32783],{"class":105},[36,32982,32342],{"class":105},[36,32984,28294],{"class":112},[36,32986,32987,32989,32991],{"class":38,"line":731},[36,32988,32905],{"class":42},[36,32990,32908],{"class":105},[36,32992,28294],{"class":112},[36,32994,32995,32997,33000],{"class":38,"line":736},[36,32996,32345],{"class":112},[36,32998,32999],{"class":105}," tungchiahui\u002Fros:jazzy-noble",[36,33001,28294],{"class":112},[36,33003,33004,33006],{"class":38,"line":742},[36,33005,32879],{"class":112},[36,33007,28294],{"class":112},[36,33009,33010],{"class":38,"line":748},[36,33011,32351],{"class":105},[36,33013,33014],{"class":38,"line":754},[36,33015,659],{"emptyLinePlaceholder":658},[36,33017,33018,33020,33022,33024],{"class":38,"line":760},[36,33019,29932],{"class":101},[36,33021,32783],{"class":105},[36,33023,32342],{"class":105},[36,33025,28294],{"class":112},[36,33027,33028,33030,33032],{"class":38,"line":766},[36,33029,32905],{"class":42},[36,33031,32908],{"class":105},[36,33033,28294],{"class":112},[36,33035,33036,33038,33041],{"class":38,"line":772},[36,33037,32345],{"class":112},[36,33039,33040],{"class":105}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[36,33042,28294],{"class":112},[36,33044,33045,33047],{"class":38,"line":778},[36,33046,32879],{"class":112},[36,33048,28294],{"class":112},[36,33050,33051],{"class":38,"line":783},[36,33052,32351],{"class":105},[36,33054,33055],{"class":38,"line":789},[36,33056,659],{"emptyLinePlaceholder":658},[36,33058,33059,33061,33063,33065],{"class":38,"line":795},[36,33060,30164],{"class":101},[36,33062,32783],{"class":105},[36,33064,32342],{"class":105},[36,33066,28294],{"class":112},[36,33068,33069,33071,33073],{"class":38,"line":801},[36,33070,32905],{"class":42},[36,33072,32908],{"class":105},[36,33074,28294],{"class":112},[36,33076,33077,33079,33082],{"class":38,"line":807},[36,33078,32345],{"class":112},[36,33080,33081],{"class":105}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[36,33083,28294],{"class":112},[36,33085,33086,33088],{"class":38,"line":813},[36,33087,32879],{"class":112},[36,33089,28294],{"class":112},[36,33091,33092],{"class":38,"line":819},[36,33093,32351],{"class":105},[36,33095,33096],{"class":38,"line":824},[36,33097,659],{"emptyLinePlaceholder":658},[36,33099,33100,33102,33104,33106],{"class":38,"line":829},[36,33101,29932],{"class":101},[36,33103,32783],{"class":105},[36,33105,32342],{"class":105},[36,33107,28294],{"class":112},[36,33109,33110,33112,33114],{"class":38,"line":851},[36,33111,32905],{"class":42},[36,33113,32908],{"class":105},[36,33115,28294],{"class":112},[36,33117,33118,33120,33123],{"class":38,"line":868},[36,33119,32345],{"class":112},[36,33121,33122],{"class":105}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[36,33124,28294],{"class":112},[36,33126,33127,33129],{"class":38,"line":873},[36,33128,32879],{"class":112},[36,33130,28294],{"class":112},[36,33132,33133],{"class":38,"line":891},[36,33134,32351],{"class":105},[36,33136,33137],{"class":38,"line":906},[36,33138,659],{"emptyLinePlaceholder":658},[36,33140,33141,33143,33145,33147],{"class":38,"line":925},[36,33142,30164],{"class":101},[36,33144,32783],{"class":105},[36,33146,32342],{"class":105},[36,33148,28294],{"class":112},[36,33150,33151,33153,33155],{"class":38,"line":943},[36,33152,32905],{"class":42},[36,33154,32908],{"class":105},[36,33156,28294],{"class":112},[36,33158,33159,33161,33164],{"class":38,"line":948},[36,33160,32345],{"class":112},[36,33162,33163],{"class":105}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[36,33165,28294],{"class":112},[36,33167,33168,33170],{"class":38,"line":971},[36,33169,32879],{"class":112},[36,33171,28294],{"class":112},[36,33173,33174],{"class":38,"line":992},[36,33175,32351],{"class":105},[36,33177,33178],{"class":38,"line":1020},[36,33179,659],{"emptyLinePlaceholder":658},[36,33181,33182,33184,33186,33188],{"class":38,"line":1036},[36,33183,30164],{"class":101},[36,33185,32783],{"class":105},[36,33187,32342],{"class":105},[36,33189,28294],{"class":112},[36,33191,33192,33194,33196],{"class":38,"line":1041},[36,33193,32905],{"class":42},[36,33195,32908],{"class":105},[36,33197,28294],{"class":112},[36,33199,33200,33202,33205],{"class":38,"line":1052},[36,33201,32345],{"class":112},[36,33203,33204],{"class":105}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,33206,28294],{"class":112},[36,33208,33209,33211],{"class":38,"line":1065},[36,33210,32879],{"class":112},[36,33212,28294],{"class":112},[36,33214,33215],{"class":38,"line":1077},[36,33216,32351],{"class":105},[36,33218,33219],{"class":38,"line":1082},[36,33220,659],{"emptyLinePlaceholder":658},[36,33222,33223,33225,33227,33229],{"class":38,"line":1125},[36,33224,29932],{"class":101},[36,33226,32783],{"class":105},[36,33228,32342],{"class":105},[36,33230,28294],{"class":112},[36,33232,33233,33235,33237],{"class":38,"line":1164},[36,33234,32905],{"class":42},[36,33236,32908],{"class":105},[36,33238,28294],{"class":112},[36,33240,33241,33243,33246],{"class":38,"line":1169},[36,33242,32345],{"class":112},[36,33244,33245],{"class":105}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[36,33247,28294],{"class":112},[36,33249,33250,33252],{"class":38,"line":1180},[36,33251,32879],{"class":112},[36,33253,28294],{"class":112},[36,33255,33256],{"class":38,"line":1198},[36,33257,32351],{"class":105},[36,33259,33260],{"class":38,"line":1215},[36,33261,659],{"emptyLinePlaceholder":658},[36,33263,33264,33267,33269,33271],{"class":38,"line":1236},[36,33265,33266],{"class":101},"  docker",[36,33268,32783],{"class":105},[36,33270,32342],{"class":105},[36,33272,28294],{"class":112},[36,33274,33275,33277,33279],{"class":38,"line":1245},[36,33276,32905],{"class":42},[36,33278,32908],{"class":105},[36,33280,28294],{"class":112},[36,33282,33283,33285,33288],{"class":38,"line":1250},[36,33284,32345],{"class":112},[36,33286,33287],{"class":105}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,33289,28294],{"class":112},[36,33291,33292,33294],{"class":38,"line":1265},[36,33293,32879],{"class":112},[36,33295,28294],{"class":112},[36,33297,33298],{"class":38,"line":1281},[36,33299,32351],{"class":105},[19,33301,33302],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,33304,33305],{},[5198,33306],{"alt":31,"src":33307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,33309,33310],{},[5198,33311],{"alt":31,"src":33312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[25619,33314,33316],{"id":33315},"_623清除构建缓存","6.2.3.清除构建缓存",[26,33318,33320],{"className":92,"code":33319,"language":94,"meta":31,"style":31},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[33,33321,33322,33327],{"__ignoreMap":31},[36,33323,33324],{"class":38,"line":39},[36,33325,33326],{"class":3943},"# 清理BuildKit构建缓存\n",[36,33328,33329,33331,33334,33337],{"class":38,"line":53},[36,33330,30164],{"class":101},[36,33332,33333],{"class":105}," builder",[36,33335,33336],{"class":105}," prune",[36,33338,33339],{"class":112}," -f\n",[19,33341,33342],{},[5198,33343],{"alt":31,"src":33344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[318,33346,33348],{"id":33347},"_63补充","6.3.补充",[25619,33350,33352],{"id":33351},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,33354,33355],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,33357,33358],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,33360,33361],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[26,33363,33365],{"className":92,"code":33364,"language":94,"meta":31,"style":31},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[33,33366,33367,33374],{"__ignoreMap":31},[36,33368,33369,33371],{"class":38,"line":39},[36,33370,30981],{"class":101},[36,33372,33373],{"class":105}," nginx\n",[36,33375,33376,33378,33381,33384,33386],{"class":38,"line":53},[36,33377,32165],{"class":101},[36,33379,33380],{"class":105}," echo",[36,33382,33383],{"class":105}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[36,33385,29835],{"class":46},[36,33387,33388],{"class":105}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,33390,33391],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,33393,33394],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[26,33396,33398],{"className":92,"code":33397,"language":94,"meta":31,"style":31},"docker build -t nginx:tuling .\n",[33,33399,33400],{"__ignoreMap":31},[36,33401,33402,33404,33406,33408,33411],{"class":38,"line":39},[36,33403,30164],{"class":101},[36,33405,32342],{"class":105},[36,33407,32345],{"class":112},[36,33409,33410],{"class":105}," nginx:tuling",[36,33412,32351],{"class":105},[19,33414,33415],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,33417,33418],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[26,33420,33422],{"className":92,"code":33421,"language":94,"meta":31,"style":31},"docker run -d -p 92:80 nginx:tuling\n",[33,33423,33424],{"__ignoreMap":31},[36,33425,33426,33428,33430,33433,33435,33438],{"class":38,"line":39},[36,33427,30164],{"class":101},[36,33429,30841],{"class":105},[36,33431,33432],{"class":112}," -d",[36,33434,32825],{"class":112},[36,33436,33437],{"class":105}," 92:80",[36,33439,33440],{"class":105}," nginx:tuling\n",[19,33442,33443,33444],{},"4、访问 ",[4113,33445,33448],{"href":33446,"rel":33447},"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",[27481],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,33450,33451],{},[5198,33452],{"alt":31,"src":33453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,33455,33456],{},[5198,33457],{"alt":31,"src":33458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[25619,33460,33462],{"id":33461},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,33464,33465],{},"只需要知道大体流程即可",[19,33467,33468],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,33470,33471],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,33473,33474],{},"2、在Dockerfile中添加以下内容",[26,33476,33478],{"className":29704,"code":33477,"language":29706,"meta":31,"style":31},"# 基于哪个镜像\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",[33,33479,33480,33485,33490,33495,33500,33505,33510,33515],{"__ignoreMap":31},[36,33481,33482],{"class":38,"line":39},[36,33483,33484],{},"# 基于哪个镜像\n",[36,33486,33487],{"class":38,"line":53},[36,33488,33489],{},"From java:8\n",[36,33491,33492],{"class":38,"line":196},[36,33493,33494],{},"# 复制文件到容器\n",[36,33496,33497],{"class":38,"line":642},[36,33498,33499],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[36,33501,33502],{"class":38,"line":655},[36,33503,33504],{},"# 声明需要暴露的端口\n",[36,33506,33507],{"class":38,"line":662},[36,33508,33509],{},"EXPOSE 8877\n",[36,33511,33512],{"class":38,"line":667},[36,33513,33514],{},"# 配置容器启动后执行的命令\n",[36,33516,33517],{"class":38,"line":679},[36,33518,33519],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,33521,33522],{},"3、使用docker build命令构建镜像",[26,33524,33526],{"className":92,"code":33525,"language":94,"meta":31,"style":31},"docker build -t tulingmall-member:0.0.5 .\n",[33,33527,33528],{"__ignoreMap":31},[36,33529,33530,33532,33534,33536,33539],{"class":38,"line":39},[36,33531,30164],{"class":101},[36,33533,32342],{"class":105},[36,33535,32345],{"class":112},[36,33537,33538],{"class":105}," tulingmall-member:0.0.5",[36,33540,32351],{"class":105},[19,33542,33543],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,33545,33546],{},[5198,33547],{"alt":31,"src":33548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,33550,33551],{},"4、启动镜像，加-d可在后台启动",[26,33553,33555],{"className":92,"code":33554,"language":94,"meta":31,"style":31},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[33,33556,33557],{"__ignoreMap":31},[36,33558,33559,33561,33563,33565,33567,33570],{"class":38,"line":39},[36,33560,30164],{"class":101},[36,33562,30841],{"class":105},[36,33564,33432],{"class":112},[36,33566,32825],{"class":112},[36,33568,33569],{"class":105}," 8877:8877",[36,33571,33572],{"class":105}," tulingmall-member:0.0.5\n",[19,33574,33575],{},"加上JVM参数：",[26,33577,33579],{"className":92,"code":33578,"language":94,"meta":31,"style":31},"# --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",[33,33580,33581,33586,33601,33611,33620,33627],{"__ignoreMap":31},[36,33582,33583],{"class":38,"line":39},[36,33584,33585],{"class":3943},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[36,33587,33588,33590,33592,33595,33597,33599],{"class":38,"line":53},[36,33589,30164],{"class":101},[36,33591,30841],{"class":105},[36,33593,33594],{"class":112},"  -d",[36,33596,32825],{"class":112},[36,33598,33569],{"class":105},[36,33600,28294],{"class":112},[36,33602,33603,33605,33608],{"class":38,"line":196},[36,33604,31739],{"class":42},[36,33606,33607],{"class":105},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[36,33609,33610],{"class":112},"  \\\n",[36,33612,33613,33615,33618],{"class":38,"line":642},[36,33614,31739],{"class":42},[36,33616,33617],{"class":105},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[36,33619,33610],{"class":112},[36,33621,33622,33625],{"class":38,"line":655},[36,33623,33624],{"class":42},"--cap-add=SYS_PTRACE  ",[36,33626,29788],{"class":112},[36,33628,33629],{"class":38,"line":662},[36,33630,33631],{"class":42},"tulingmall-member:0.0.5\n",[19,33633,33634],{},"5、访问会员服务接口",[19,33636,33637],{},[5198,33638],{"alt":31,"src":33639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[25619,33641,33643],{"id":33642},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,33645,33646],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,33648,33649,33650],{},"阿里云docker镜像仓库：",[4113,33651,33652],{"href":33652,"rel":33653},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[27481],[19,33655,33656],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,33658,33659],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,33661,33662],{},[5198,33663],{"alt":31,"src":33664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,33666,33667],{},"要把镜像推送到镜像仓库",[26,33669,33671],{"className":92,"code":33670,"language":94,"meta":31,"style":31},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,33672,33673],{"__ignoreMap":31},[36,33674,33675,33677,33679,33681],{"class":38,"line":39},[36,33676,30164],{"class":101},[36,33678,32507],{"class":105},[36,33680,33538],{"class":105},[36,33682,33683],{"class":105}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,33685,33686],{},"最后将镜像推送到远程仓库",[26,33688,33690],{"className":92,"code":33689,"language":94,"meta":31,"style":31},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,33691,33692],{"__ignoreMap":31},[36,33693,33694,33696,33698],{"class":38,"line":39},[36,33695,30164],{"class":101},[36,33697,32626],{"class":105},[36,33699,33683],{"class":105},[3785,33701,33702],{},"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":31,"searchDepth":53,"depth":53,"links":33704},[33705,33706,33707],{"id":32093,"depth":196,"text":32094},{"id":32322,"depth":196,"text":32323},{"id":33347,"depth":196,"text":33348},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":32085,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":33714,"title":33715,"body":33716,"description":31,"extension":3817,"meta":33859,"navigation":658,"path":33860,"seo":33861,"stem":33862,"__hash__":33863},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":33717,"toc":33857},[33718,33721,33726,33731,33734,33739,33744,33747,33752,33757,33760,33765,33768,33771,33774,33777,33780,33783,33803,33825,33828,33831,33851,33854],[10,33719,33715],{"id":33720},"_7vscode远程开发",[211,33722,33723],{},[214,33724,33725],{},"插件1：微软Docker工具",[19,33727,33728],{},[5198,33729],{"alt":31,"src":33730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,33732,33733],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,33735,33736],{},[5198,33737],{"alt":31,"src":33738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[211,33740,33741],{"start":53},[214,33742,33743],{},"插件2：微软Docker远程开发工具",[19,33745,33746],{},"下面这是远程开发的插件。",[19,33748,33749],{},[5198,33750],{"alt":31,"src":33751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,33753,33754],{},[5198,33755],{"alt":31,"src":33756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,33758,33759],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,33761,33762],{},[5198,33763],{"alt":31,"src":33764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,33766,33767],{},"安装完拓展之后，vscode进行链接：",[19,33769,33770],{},"1.按ctrl+shift+p",[19,33772,33773],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,33775,33776],{},"3.选择目前运行的容器",[19,33778,33779],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,33781,33782],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[26,33784,33786],{"className":92,"code":33785,"language":94,"meta":31,"style":31},"docker run -v 主机目录:容器目录 image-name\n",[33,33787,33788],{"__ignoreMap":31},[36,33789,33790,33792,33794,33797,33800],{"class":38,"line":39},[36,33791,30164],{"class":101},[36,33793,30841],{"class":105},[36,33795,33796],{"class":112}," -v",[36,33798,33799],{"class":105}," 主机目录:容器目录",[36,33801,33802],{"class":105}," image-name\n",[26,33804,33806],{"className":92,"code":33805,"language":94,"meta":31,"style":31},"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",[33,33807,33808],{"__ignoreMap":31},[36,33809,33810,33812,33814,33817,33819,33822],{"class":38,"line":39},[36,33811,30164],{"class":101},[36,33813,30841],{"class":105},[36,33815,33816],{"class":112}," -it",[36,33818,33796],{"class":112},[36,33820,33821],{"class":105}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[36,33823,33824],{"class":105}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,33826,33827],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,33829,33830],{},"查看挂载情况：",[26,33832,33834],{"className":92,"code":33833,"language":94,"meta":31,"style":31},"mount | grep -i project\n",[33,33835,33836],{"__ignoreMap":31},[36,33837,33838,33841,33843,33846,33848],{"class":38,"line":39},[36,33839,33840],{"class":101},"mount",[36,33842,1381],{"class":46},[36,33844,33845],{"class":101}," grep",[36,33847,30041],{"class":112},[36,33849,33850],{"class":105}," project\n",[19,33852,33853],{},"也可以通过ls来进行查看",[3785,33855,33856],{},"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":31,"searchDepth":53,"depth":53,"links":33858},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":33715,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":33865,"title":33866,"body":33867,"description":26998,"extension":3817,"meta":33871,"navigation":658,"path":33873,"seo":33874,"stem":33875,"__hash__":33876},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":33868,"toc":33869},[],{"title":31,"searchDepth":53,"depth":53,"links":33870},[],{"category":33872},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":33866,"description":26998},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":33878,"title":33879,"body":33880,"description":26998,"extension":3817,"meta":33884,"navigation":658,"path":33885,"seo":33886,"stem":33887,"__hash__":33888},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":33881,"toc":33882},[],{"title":31,"searchDepth":53,"depth":53,"links":33883},[],{"category":33872},"\u002Fwiki\u002F2025-11-10-k8s",{"title":33879,"description":26998},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":33890,"title":33891,"body":33892,"description":26998,"extension":3817,"meta":34179,"navigation":658,"path":34180,"seo":34181,"stem":34182,"__hash__":34183},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":33893,"toc":34177},[33894,33897,33905,33920,33925,33975,33978,33984,34166,34171,34174],[10,33895,33891],{"id":33896},"_1验证深度学习环境",[19,33898,33899,33900],{},"关于环境的安装，看",[4113,33901,33904],{"href":33902,"rel":33903},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[27481],"Pytorch-->深度学习",[19,33906,33907,33908,33911,33912,33915,33916,33919],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[33,33909,33910],{},"pytorch-cuda=12.4"," 是一个“ ",[4027,33913,33914],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[4027,33917,33918],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,33921,33922],{},[5198,33923],{"alt":31,"src":33924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-001.png",[26,33926,33928],{"className":92,"code":33927,"language":94,"meta":31,"style":31},"# 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",[33,33929,33930,33935],{"__ignoreMap":31},[36,33931,33932],{"class":38,"line":39},[36,33933,33934],{"class":3943},"# CUDA 12.4\n",[36,33936,33937,33939,33941,33944,33947,33950,33953,33956,33958,33961,33964,33967,33970,33972],{"class":38,"line":53},[36,33938,165],{"class":101},[36,33940,109],{"class":105},[36,33942,33943],{"class":105}," pytorch==",[36,33945,33946],{"class":112},"2.5.1",[36,33948,33949],{"class":105}," torchvision==",[36,33951,33952],{"class":112},"0.20.1",[36,33954,33955],{"class":105}," torchaudio==",[36,33957,33946],{"class":112},[36,33959,33960],{"class":105}," pytorch-cuda=",[36,33962,33963],{"class":112},"12.4",[36,33965,33966],{"class":112}," -c",[36,33968,33969],{"class":105}," pytorch",[36,33971,33966],{"class":112},[36,33973,33974],{"class":105}," nvidia\n",[19,33976,33977],{},"）：",[19,33979,33980],{},[4113,33981,33982],{"href":33982,"rel":33983},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[27481],[26,33985,33987],{"className":28,"code":33986,"language":30,"meta":31,"style":31},"# 对深度学习环境进行测试\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",[33,33988,33989,33994,34001,34006,34016,34031,34036,34046,34083,34090,34101,34117,34122,34132,34144,34154],{"__ignoreMap":31},[36,33990,33991],{"class":38,"line":39},[36,33992,33993],{"class":3943},"# 对深度学习环境进行测试\n",[36,33995,33996,33998],{"class":38,"line":53},[36,33997,611],{"class":46},[36,33999,34000],{"class":42}," torch\n",[36,34002,34003],{"class":38,"line":196},[36,34004,34005],{"class":3943},"# 查看cuda是否被激活\n",[36,34007,34008,34011,34013],{"class":38,"line":642},[36,34009,34010],{"class":42},"flag",[36,34012,47],{"class":46},[36,34014,34015],{"class":42},"torch.cuda.is_available()\n",[36,34017,34018,34020,34022,34025,34028],{"class":38,"line":655},[36,34019,3486],{"class":112},[36,34021,495],{"class":42},[36,34023,34024],{"class":105},"\"cuda:\"",[36,34026,34027],{"class":42},", flag)   ",[36,34029,34030],{"class":3943},"#返回true的话说明被激活\n",[36,34032,34033],{"class":38,"line":662},[36,34034,34035],{"class":3943},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[36,34037,34038,34041,34043],{"class":38,"line":667},[36,34039,34040],{"class":42},"ngpu",[36,34042,47],{"class":46},[36,34044,34045],{"class":112},"1\n",[36,34047,34048,34051,34053,34056,34059,34061,34064,34067,34070,34072,34074,34076,34078,34081],{"class":38,"line":679},[36,34049,34050],{"class":42},"device",[36,34052,47],{"class":46},[36,34054,34055],{"class":42},"torch.device(",[36,34057,34058],{"class":105},"\"cuda:0\"",[36,34060,5428],{"class":46},[36,34062,34063],{"class":42},"(torch.cuda.is_available() ",[36,34065,34066],{"class":46},"and",[36,34068,34069],{"class":42}," ngpu",[36,34071,4829],{"class":46},[36,34073,1859],{"class":112},[36,34075,17373],{"class":42},[36,34077,5425],{"class":46},[36,34079,34080],{"class":105}," \"cpu\"",[36,34082,922],{"class":42},[36,34084,34085,34087],{"class":38,"line":685},[36,34086,3486],{"class":112},[36,34088,34089],{"class":42},"(device)\n",[36,34091,34092,34094,34097,34099],{"class":38,"line":691},[36,34093,3486],{"class":112},[36,34095,34096],{"class":42},"(torch.cuda.get_device_name(",[36,34098,1859],{"class":112},[36,34100,2005],{"class":42},[36,34102,34103,34105,34108,34110,34112,34114],{"class":38,"line":696},[36,34104,3486],{"class":112},[36,34106,34107],{"class":42},"(torch.rand(",[36,34109,1982],{"class":112},[36,34111,4253],{"class":42},[36,34113,1982],{"class":112},[36,34115,34116],{"class":42},").cuda())\n",[36,34118,34119],{"class":38,"line":702},[36,34120,34121],{"class":3943},"# 查看cuda和cudnn的版本\n",[36,34123,34124,34127,34129],{"class":38,"line":708},[36,34125,34126],{"class":42},"cuda_version",[36,34128,47],{"class":46},[36,34130,34131],{"class":42},"torch.version.cuda\n",[36,34133,34134,34136,34138,34141],{"class":38,"line":713},[36,34135,3486],{"class":112},[36,34137,495],{"class":42},[36,34139,34140],{"class":105},"\"cuda version\"",[36,34142,34143],{"class":42},",cuda_version)\n",[36,34145,34146,34149,34151],{"class":38,"line":719},[36,34147,34148],{"class":42},"cudnn_version",[36,34150,47],{"class":46},[36,34152,34153],{"class":42},"torch.backends.cudnn.version()\n",[36,34155,34156,34158,34160,34163],{"class":38,"line":725},[36,34157,3486],{"class":112},[36,34159,495],{"class":42},[36,34161,34162],{"class":105},"\"cudnn version\"",[36,34164,34165],{"class":42},",cudnn_version)\n",[19,34167,34168],{},[5198,34169],{"alt":31,"src":34170},"\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,34172,34173],{},"cuda:0 指的是一块显卡",[3785,34175,34176],{},"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":31,"searchDepth":53,"depth":53,"links":34178},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":33891,"description":26998},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":34185,"title":34186,"body":34187,"description":26998,"extension":3817,"meta":53945,"navigation":658,"path":53946,"seo":53947,"stem":53948,"__hash__":53949},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":34188,"toc":53939},[34189,34192,34196,34200,34203,34208,34213,34216,34221,34226,34231,34234,34238,34243,34247,34252,34255,34260,34263,34266,34269,34272,34277,34280,34285,34290,34295,34300,34303,34307,34310,34315,34909,34914,34917,34922,34925,34928,35387,35390,35393,35396,35399,37422,37425,37430,37435,38230,38233,38238,39016,39020,40679,40683,41397,41401,41405,41410,41415,41420,41423,41428,41433,41438,41443,41448,41452,41457,42737,42742,42745,42748,42751,42906,42909,42912,44128,44133,44828,44832,44836,44841,44846,44849,44854,44859,44864,44869,44874,44879,44884,44889,44894,44899,44904,44909,44914,44919,44924,44929,44934,44939,44944,44949,44954,44959,44964,44969,44974,44979,44984,44989,44994,44999,45003,45007,45010,46488,46492,48139,48143,48837,48841,48844,48847,49391,49394,49398,49401,50798,50802,50805,51382,53169,53173,53176,53936],[10,34190,34186],{"id":34191},"_2经典神经网络",[318,34193,34195],{"id":34194},"_21lenet与alexnet","2.1.LeNet与AlexNet",[25619,34197,34199],{"id":34198},"_211原理介绍","2.1.1.原理介绍",[19,34201,34202],{},"LeNet-5",[211,34204,34205],{},[214,34206,34207],{},"原理",[19,34209,34210],{},[5198,34211],{"alt":31,"src":34212},"\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,34214,34215],{},"B是batch批次；C是channel通道",[211,34217,34218],{"start":53},[214,34219,34220],{},"网络参数详细",[19,34222,34223],{},[5198,34224],{"alt":31,"src":34225},"\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,34227,34228],{},[5198,34229],{"alt":31,"src":34230},"\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,34232,34233],{},"AlexNet",[211,34235,34236],{},[214,34237,34207],{},[19,34239,34240],{},[5198,34241],{"alt":31,"src":34242},"\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",[211,34244,34245],{"start":53},[214,34246,34220],{},[19,34248,34249],{},[5198,34250],{"alt":31,"src":34251},"\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,34253,34254],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,34256,34257],{},[5198,34258],{"alt":31,"src":34259},"\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,34261,34262],{},"数据处理中的图像增强操作:",[19,34264,34265],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,34267,34268],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,34270,34271],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,34273,34274],{},[5198,34275],{"alt":31,"src":34276},"\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,34278,34279],{},"提升网络精确度的方法：LRN正则化",[19,34281,34282],{},[5198,34283],{"alt":31,"src":34284},"\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,34286,34287],{},[5198,34288],{"alt":31,"src":34289},"\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",[211,34291,34292],{"start":196},[214,34293,34294],{},"AlexNet的总结",[19,34296,34297],{},[5198,34298],{"alt":31,"src":34299},"\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,34301,34302],{},"比LeNet模型要深一丢丢",[25619,34304,34306],{"id":34305},"_212代码实现","2.1.2.代码实现",[19,34308,34309],{},"（1）LeNet",[211,34311,34312],{},[214,34313,34314],{},"模型搭建",[26,34316,34318],{"className":28,"code":34317,"language":30,"meta":31,"style":31},"# 导入库\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",[33,34319,34320,34325,34331,34336,34348,34353,34365,34369,34388,34393,34398,34407,34412,34428,34432,34437,34485,34497,34502,34531,34566,34593,34598,34610,34615,34635,34654,34673,34677,34682,34692,34709,34720,34735,34746,34757,34772,34787,34798,34805,34809,34822,34827,34850,34855,34860,34865,34869,34874,34879,34889],{"__ignoreMap":31},[36,34321,34322],{"class":38,"line":39},[36,34323,34324],{"class":3943},"# 导入库\n",[36,34326,34327,34329],{"class":38,"line":53},[36,34328,611],{"class":46},[36,34330,34000],{"class":42},[36,34332,34333],{"class":38,"line":196},[36,34334,34335],{"class":3943},"# 导入神经网络层\n",[36,34337,34338,34340,34343,34345],{"class":38,"line":642},[36,34339,645],{"class":46},[36,34341,34342],{"class":42}," torch ",[36,34344,611],{"class":46},[36,34346,34347],{"class":42}," nn\n",[36,34349,34350],{"class":38,"line":655},[36,34351,34352],{"class":3943},"# 导入展示神经网络参数的包\n",[36,34354,34355,34357,34360,34362],{"class":38,"line":662},[36,34356,645],{"class":46},[36,34358,34359],{"class":42}," torchsummary ",[36,34361,611],{"class":46},[36,34363,34364],{"class":42}," summary\n",[36,34366,34367],{"class":38,"line":667},[36,34368,659],{"emptyLinePlaceholder":658},[36,34370,34371,34373,34376,34378,34381,34383,34386],{"class":38,"line":679},[36,34372,832],{"class":46},[36,34374,34375],{"class":101}," LeNet",[36,34377,495],{"class":42},[36,34379,34380],{"class":101},"nn",[36,34382,842],{"class":42},[36,34384,34385],{"class":101},"Module",[36,34387,848],{"class":42},[36,34389,34390],{"class":38,"line":685},[36,34391,34392],{"class":3943},"    # 模型初始化:\n",[36,34394,34395],{"class":38,"line":691},[36,34396,34397],{"class":3943},"    # 定义一些网络层和激活函数\n",[36,34399,34400,34402,34404],{"class":38,"line":696},[36,34401,876],{"class":46},[36,34403,879],{"class":112},[36,34405,34406],{"class":42},"(self):\n",[36,34408,34409],{"class":38,"line":702},[36,34410,34411],{"class":3943},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[36,34413,34414,34416,34419,34421,34424,34426],{"class":38,"line":708},[36,34415,894],{"class":112},[36,34417,34418],{"class":42},"(LeNet,",[36,34420,457],{"class":112},[36,34422,34423],{"class":42},").",[36,34425,900],{"class":112},[36,34427,903],{"class":42},[36,34429,34430],{"class":38,"line":713},[36,34431,659],{"emptyLinePlaceholder":658},[36,34433,34434],{"class":38,"line":719},[36,34435,34436],{"class":3943},"        # 定义网络层\n",[36,34438,34439,34441,34444,34446,34449,34452,34454,34456,34458,34461,34463,34465,34467,34470,34472,34474,34476,34479,34481,34483],{"class":38,"line":725},[36,34440,909],{"class":112},[36,34442,34443],{"class":42},".c1",[36,34445,47],{"class":46},[36,34447,34448],{"class":42},"nn.Conv2d(",[36,34450,34451],{"class":468},"in_channels",[36,34453,47],{"class":46},[36,34455,4092],{"class":112},[36,34457,4253],{"class":42},[36,34459,34460],{"class":468},"out_channels",[36,34462,47],{"class":46},[36,34464,4219],{"class":112},[36,34466,4253],{"class":42},[36,34468,34469],{"class":468},"kernel_size",[36,34471,47],{"class":46},[36,34473,4194],{"class":112},[36,34475,4253],{"class":42},[36,34477,34478],{"class":468},"padding",[36,34480,47],{"class":46},[36,34482,498],{"class":112},[36,34484,922],{"class":42},[36,34486,34487,34489,34492,34494],{"class":38,"line":731},[36,34488,909],{"class":112},[36,34490,34491],{"class":42},".sig",[36,34493,47],{"class":46},[36,34495,34496],{"class":42},"nn.Sigmoid()\n",[36,34498,34499],{"class":38,"line":736},[36,34500,34501],{"class":3943},"        # 定义池化\n",[36,34503,34504,34506,34509,34511,34514,34516,34518,34520,34522,34525,34527,34529],{"class":38,"line":742},[36,34505,909],{"class":112},[36,34507,34508],{"class":42},".s2",[36,34510,47],{"class":46},[36,34512,34513],{"class":42},"nn.AvgPool2d(",[36,34515,34469],{"class":468},[36,34517,47],{"class":46},[36,34519,498],{"class":112},[36,34521,4253],{"class":42},[36,34523,34524],{"class":468},"stride",[36,34526,47],{"class":46},[36,34528,498],{"class":112},[36,34530,922],{"class":42},[36,34532,34533,34535,34538,34540,34542,34544,34546,34548,34550,34552,34554,34556,34558,34560,34562,34564],{"class":38,"line":748},[36,34534,909],{"class":112},[36,34536,34537],{"class":42},".c3",[36,34539,47],{"class":46},[36,34541,34448],{"class":42},[36,34543,34451],{"class":468},[36,34545,47],{"class":46},[36,34547,4219],{"class":112},[36,34549,4253],{"class":42},[36,34551,34460],{"class":468},[36,34553,47],{"class":46},[36,34555,4472],{"class":112},[36,34557,4253],{"class":42},[36,34559,34469],{"class":468},[36,34561,47],{"class":46},[36,34563,4194],{"class":112},[36,34565,922],{"class":42},[36,34567,34568,34570,34573,34575,34577,34579,34581,34583,34585,34587,34589,34591],{"class":38,"line":754},[36,34569,909],{"class":112},[36,34571,34572],{"class":42},".s4",[36,34574,47],{"class":46},[36,34576,34513],{"class":42},[36,34578,34469],{"class":468},[36,34580,47],{"class":46},[36,34582,498],{"class":112},[36,34584,4253],{"class":42},[36,34586,34524],{"class":468},[36,34588,47],{"class":46},[36,34590,498],{"class":112},[36,34592,922],{"class":42},[36,34594,34595],{"class":38,"line":760},[36,34596,34597],{"class":3943},"        # 定义平展层\n",[36,34599,34600,34602,34605,34607],{"class":38,"line":766},[36,34601,909],{"class":112},[36,34603,34604],{"class":42},".flatten",[36,34606,47],{"class":46},[36,34608,34609],{"class":42},"nn.Flatten()\n",[36,34611,34612],{"class":38,"line":772},[36,34613,34614],{"class":3943},"        # 定义全连接层\n",[36,34616,34617,34619,34622,34624,34627,34629,34631,34633],{"class":38,"line":778},[36,34618,909],{"class":112},[36,34620,34621],{"class":42},".f5",[36,34623,47],{"class":46},[36,34625,34626],{"class":42},"nn.Linear(",[36,34628,7685],{"class":112},[36,34630,4253],{"class":42},[36,34632,4687],{"class":112},[36,34634,922],{"class":42},[36,34636,34637,34639,34642,34644,34646,34648,34650,34652],{"class":38,"line":783},[36,34638,909],{"class":112},[36,34640,34641],{"class":42},".f6",[36,34643,47],{"class":46},[36,34645,34626],{"class":42},[36,34647,4687],{"class":112},[36,34649,4253],{"class":42},[36,34651,4581],{"class":112},[36,34653,922],{"class":42},[36,34655,34656,34658,34661,34663,34665,34667,34669,34671],{"class":38,"line":789},[36,34657,909],{"class":112},[36,34659,34660],{"class":42},".f7",[36,34662,47],{"class":46},[36,34664,34626],{"class":42},[36,34666,4581],{"class":112},[36,34668,4253],{"class":42},[36,34670,554],{"class":112},[36,34672,922],{"class":42},[36,34674,34675],{"class":38,"line":795},[36,34676,659],{"emptyLinePlaceholder":658},[36,34678,34679],{"class":38,"line":801},[36,34680,34681],{"class":3943},"    # 写工具->写前向传播\n",[36,34683,34684,34686,34689],{"class":38,"line":807},[36,34685,876],{"class":46},[36,34687,34688],{"class":101}," forward",[36,34690,34691],{"class":42},"(self,x):\n",[36,34693,34694,34697,34699,34701,34704,34706],{"class":38,"line":813},[36,34695,34696],{"class":42},"        x",[36,34698,47],{"class":46},[36,34700,457],{"class":112},[36,34702,34703],{"class":42},".sig(",[36,34705,457],{"class":112},[36,34707,34708],{"class":42},".c1(x))\n",[36,34710,34711,34713,34715,34717],{"class":38,"line":819},[36,34712,34696],{"class":42},[36,34714,47],{"class":46},[36,34716,457],{"class":112},[36,34718,34719],{"class":42},".s2(x)\n",[36,34721,34722,34724,34726,34728,34730,34732],{"class":38,"line":824},[36,34723,34696],{"class":42},[36,34725,47],{"class":46},[36,34727,457],{"class":112},[36,34729,34703],{"class":42},[36,34731,457],{"class":112},[36,34733,34734],{"class":42},".c3(x))\n",[36,34736,34737,34739,34741,34743],{"class":38,"line":829},[36,34738,34696],{"class":42},[36,34740,47],{"class":46},[36,34742,457],{"class":112},[36,34744,34745],{"class":42},".s4(x)\n",[36,34747,34748,34750,34752,34754],{"class":38,"line":851},[36,34749,34696],{"class":42},[36,34751,47],{"class":46},[36,34753,457],{"class":112},[36,34755,34756],{"class":42},".flatten(x)\n",[36,34758,34759,34761,34763,34765,34767,34769],{"class":38,"line":868},[36,34760,34696],{"class":42},[36,34762,47],{"class":46},[36,34764,457],{"class":112},[36,34766,34703],{"class":42},[36,34768,457],{"class":112},[36,34770,34771],{"class":42},".f5(x))\n",[36,34773,34774,34776,34778,34780,34782,34784],{"class":38,"line":873},[36,34775,34696],{"class":42},[36,34777,47],{"class":46},[36,34779,457],{"class":112},[36,34781,34703],{"class":42},[36,34783,457],{"class":112},[36,34785,34786],{"class":42},".f6(x))\n",[36,34788,34789,34791,34793,34795],{"class":38,"line":891},[36,34790,34696],{"class":42},[36,34792,47],{"class":46},[36,34794,457],{"class":112},[36,34796,34797],{"class":42},".f7(x)\n",[36,34799,34800,34802],{"class":38,"line":906},[36,34801,1239],{"class":46},[36,34803,34804],{"class":42}," x\n",[36,34806,34807],{"class":38,"line":925},[36,34808,659],{"emptyLinePlaceholder":658},[36,34810,34811,34813,34815,34817,34820],{"class":38,"line":943},[36,34812,2067],{"class":46},[36,34814,2070],{"class":112},[36,34816,6652],{"class":46},[36,34818,34819],{"class":105},"\"__main__\"",[36,34821,888],{"class":42},[36,34823,34824],{"class":38,"line":948},[36,34825,34826],{"class":3943},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[36,34828,34829,34832,34834,34836,34839,34841,34844,34846,34848],{"class":38,"line":971},[36,34830,34831],{"class":42},"    device",[36,34833,47],{"class":46},[36,34835,34055],{"class":42},[36,34837,34838],{"class":105},"\"cuda\"",[36,34840,5428],{"class":46},[36,34842,34843],{"class":42}," torch.cuda.is_available() ",[36,34845,5425],{"class":46},[36,34847,34080],{"class":105},[36,34849,922],{"class":42},[36,34851,34852],{"class":38,"line":992},[36,34853,34854],{"class":3943},"    # 如果就是想指定用cpu用下方代码:\n",[36,34856,34857],{"class":38,"line":1020},[36,34858,34859],{"class":3943},"    # device=\"cpu\"\n",[36,34861,34862],{"class":38,"line":1036},[36,34863,34864],{"class":3943},"    # print(device)\n",[36,34866,34867],{"class":38,"line":1041},[36,34868,659],{"emptyLinePlaceholder":658},[36,34870,34871],{"class":38,"line":1052},[36,34872,34873],{"class":3943},"    # 实例化模型\n",[36,34875,34876],{"class":38,"line":1065},[36,34877,34878],{"class":3943},"    # 将模型放到设备中去运行\n",[36,34880,34881,34884,34886],{"class":38,"line":1077},[36,34882,34883],{"class":42},"    model",[36,34885,47],{"class":46},[36,34887,34888],{"class":42},"LeNet().to(device)\n",[36,34890,34891,34893,34896,34898,34900,34902,34904,34906],{"class":38,"line":1082},[36,34892,1867],{"class":112},[36,34894,34895],{"class":42},"(summary(model,(",[36,34897,4092],{"class":112},[36,34899,4253],{"class":42},[36,34901,4771],{"class":112},[36,34903,4253],{"class":42},[36,34905,4771],{"class":112},[36,34907,34908],{"class":42},")))\n",[19,34910,34911],{},[5198,34912],{"alt":31,"src":34913},"\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,34915,34916],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[211,34918,34919],{"start":53},[214,34920,34921],{},"训练",[19,34923,34924],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,34926,34927],{},"在训练之前可以将数据展示看一下",[26,34929,34931],{"className":28,"code":34930,"language":30,"meta":31,"style":31},"# 建立画图的函数，用于展示数据\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",[33,34932,34933,34938,34943,34955,34967,34977,34982,34994,34999,35011,35016,35028,35032,35036,35057,35069,35074,35094,35105,35109,35114,35132,35143,35148,35159,35164,35175,35179,35184,35199,35211,35216,35221,35234,35247,35260,35265,35269,35274,35294,35311,35331,35344,35357,35367,35382],{"__ignoreMap":31},[36,34934,34935],{"class":38,"line":39},[36,34936,34937],{"class":3943},"# 建立画图的函数，用于展示数据\n",[36,34939,34940],{"class":38,"line":53},[36,34941,34942],{"class":3943},"# torchvision中包含很多内置的数据集\n",[36,34944,34945,34947,34950,34952],{"class":38,"line":196},[36,34946,645],{"class":46},[36,34948,34949],{"class":42}," sklearn.externals.array_api_compat.torch ",[36,34951,611],{"class":46},[36,34953,34954],{"class":42}," squeeze\n",[36,34956,34957,34959,34962,34964],{"class":38,"line":642},[36,34958,645],{"class":46},[36,34960,34961],{"class":42}," torchvision.datasets ",[36,34963,611],{"class":46},[36,34965,34966],{"class":42}," FashionMNIST\n",[36,34968,34969,34971,34973,34975],{"class":38,"line":655},[36,34970,611],{"class":46},[36,34972,634],{"class":42},[36,34974,617],{"class":46},[36,34976,639],{"class":42},[36,34978,34979],{"class":38,"line":662},[36,34980,34981],{"class":3943},"# 引入处理数据集的包\n",[36,34983,34984,34986,34989,34991],{"class":38,"line":667},[36,34985,645],{"class":46},[36,34987,34988],{"class":42}," torchvision ",[36,34990,611],{"class":46},[36,34992,34993],{"class":42}," transforms\n",[36,34995,34996],{"class":38,"line":679},[36,34997,34998],{"class":3943},"# 从torch库中引入数据处理的包\n",[36,35000,35001,35003,35006,35008],{"class":38,"line":685},[36,35002,611],{"class":46},[36,35004,35005],{"class":42}," torch.utils.data ",[36,35007,617],{"class":46},[36,35009,35010],{"class":42}," Data\n",[36,35012,35013],{"class":38,"line":691},[36,35014,35015],{"class":3943},"# 导入画图的库\n",[36,35017,35018,35020,35023,35025],{"class":38,"line":696},[36,35019,611],{"class":46},[36,35021,35022],{"class":42}," matplotlib.pyplot ",[36,35024,617],{"class":46},[36,35026,35027],{"class":42}," plt\n",[36,35029,35030],{"class":38,"line":702},[36,35031,659],{"emptyLinePlaceholder":658},[36,35033,35034],{"class":38,"line":708},[36,35035,659],{"emptyLinePlaceholder":658},[36,35037,35038,35041,35043,35046,35049,35051,35054],{"class":38,"line":713},[36,35039,35040],{"class":42},"train_data",[36,35042,47],{"class":46},[36,35044,35045],{"class":42},"FashionMNIST(",[36,35047,35048],{"class":468},"root",[36,35050,47],{"class":46},[36,35052,35053],{"class":105},"'.\u002Fdata'",[36,35055,35056],{"class":42},",\n",[36,35058,35059,35062,35064,35067],{"class":38,"line":719},[36,35060,35061],{"class":468},"                        train",[36,35063,47],{"class":46},[36,35065,35066],{"class":112},"True",[36,35068,35056],{"class":42},[36,35070,35071],{"class":38,"line":725},[36,35072,35073],{"class":3943},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[36,35075,35076,35079,35081,35084,35086,35088,35091],{"class":38,"line":731},[36,35077,35078],{"class":468},"                        transform",[36,35080,47],{"class":46},[36,35082,35083],{"class":42},"transforms.Compose([transforms.Resize(",[36,35085,1476],{"class":468},[36,35087,47],{"class":46},[36,35089,35090],{"class":112},"224",[36,35092,35093],{"class":42},"),transforms.ToTensor()]),\n",[36,35095,35096,35099,35101,35103],{"class":38,"line":736},[36,35097,35098],{"class":468},"                        download",[36,35100,47],{"class":46},[36,35102,35066],{"class":112},[36,35104,922],{"class":42},[36,35106,35107],{"class":38,"line":742},[36,35108,659],{"emptyLinePlaceholder":658},[36,35110,35111],{"class":38,"line":748},[36,35112,35113],{"class":3943},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[36,35115,35116,35119,35121,35124,35127,35129],{"class":38,"line":754},[36,35117,35118],{"class":42},"train_loader",[36,35120,47],{"class":46},[36,35122,35123],{"class":42},"Data.DataLoader(",[36,35125,35126],{"class":468},"dataset",[36,35128,47],{"class":46},[36,35130,35131],{"class":42},"train_data,\n",[36,35133,35134,35137,35139,35141],{"class":38,"line":760},[36,35135,35136],{"class":468},"                             batch_size",[36,35138,47],{"class":46},[36,35140,4078],{"class":112},[36,35142,35056],{"class":42},[36,35144,35145],{"class":38,"line":766},[36,35146,35147],{"class":3943},"                             # 数据是否打乱\n",[36,35149,35150,35153,35155,35157],{"class":38,"line":772},[36,35151,35152],{"class":468},"                             shuffle",[36,35154,47],{"class":46},[36,35156,35066],{"class":112},[36,35158,35056],{"class":42},[36,35160,35161],{"class":38,"line":778},[36,35162,35163],{"class":3943},"                             # 规定加载数据的进程\n",[36,35165,35166,35169,35171,35173],{"class":38,"line":783},[36,35167,35168],{"class":468},"                             num_workers",[36,35170,47],{"class":46},[36,35172,1859],{"class":112},[36,35174,922],{"class":42},[36,35176,35177],{"class":38,"line":789},[36,35178,659],{"emptyLinePlaceholder":658},[36,35180,35181],{"class":38,"line":795},[36,35182,35183],{"class":3943},"# 获得一个batch的数据\n",[36,35185,35186,35188,35191,35193,35196],{"class":38,"line":801},[36,35187,3120],{"class":46},[36,35189,35190],{"class":42}," step,(b_x,b_y) ",[36,35192,1619],{"class":46},[36,35194,35195],{"class":112}," enumerate",[36,35197,35198],{"class":42},"(train_loader):\n",[36,35200,35201,35203,35205,35207,35209],{"class":38,"line":807},[36,35202,3752],{"class":46},[36,35204,1912],{"class":42},[36,35206,4829],{"class":46},[36,35208,1004],{"class":112},[36,35210,888],{"class":42},[36,35212,35213],{"class":38,"line":813},[36,35214,35215],{"class":46},"        break\n",[36,35217,35218],{"class":38,"line":819},[36,35219,35220],{"class":3943},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[36,35222,35223,35226,35228,35231],{"class":38,"line":824},[36,35224,35225],{"class":42},"batch_x",[36,35227,47],{"class":46},[36,35229,35230],{"class":42},"b_x.squeeze().numpy()  ",[36,35232,35233],{"class":3943},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[36,35235,35236,35239,35241,35244],{"class":38,"line":829},[36,35237,35238],{"class":42},"batch_y",[36,35240,47],{"class":46},[36,35242,35243],{"class":42},"b_y.numpy()   ",[36,35245,35246],{"class":3943},"#将张量转换成功numpy数组\n",[36,35248,35249,35252,35254,35257],{"class":38,"line":851},[36,35250,35251],{"class":42},"class_label",[36,35253,47],{"class":46},[36,35255,35256],{"class":42},"train_data.classes  ",[36,35258,35259],{"class":3943},"#训练集标签\n",[36,35261,35262],{"class":38,"line":868},[36,35263,35264],{"class":3943},"# print(class_label)\n",[36,35266,35267],{"class":38,"line":873},[36,35268,659],{"emptyLinePlaceholder":658},[36,35270,35271],{"class":38,"line":891},[36,35272,35273],{"class":3943},"# 可视化一个batch的图像\n",[36,35275,35276,35279,35282,35284,35286,35288,35290,35292],{"class":38,"line":906},[36,35277,35278],{"class":42},"plt.figure(",[36,35280,35281],{"class":468},"figsize",[36,35283,47],{"class":46},[36,35285,495],{"class":42},[36,35287,4371],{"class":112},[36,35289,4253],{"class":42},[36,35291,4194],{"class":112},[36,35293,2005],{"class":42},[36,35295,35296,35298,35301,35303,35306,35308],{"class":38,"line":925},[36,35297,3120],{"class":46},[36,35299,35300],{"class":42}," ii ",[36,35302,1619],{"class":46},[36,35304,35305],{"class":42}," np.arange(",[36,35307,11049],{"class":112},[36,35309,35310],{"class":42},"(batch_y)):\n",[36,35312,35313,35316,35318,35320,35322,35325,35327,35329],{"class":38,"line":943},[36,35314,35315],{"class":42},"    plt.subplot(",[36,35317,4168],{"class":112},[36,35319,4253],{"class":42},[36,35321,4472],{"class":112},[36,35323,35324],{"class":42},",ii ",[36,35326,4354],{"class":46},[36,35328,28732],{"class":112},[36,35330,922],{"class":42},[36,35332,35333,35336,35339,35341],{"class":38,"line":948},[36,35334,35335],{"class":42},"    plt.imshow(batch_x[ii,:,:],",[36,35337,35338],{"class":468},"cmap",[36,35340,47],{"class":46},[36,35342,35343],{"class":42},"plt.cm.gray)\n",[36,35345,35346,35349,35351,35353,35355],{"class":38,"line":971},[36,35347,35348],{"class":42},"    plt.title(class_label[batch_y[ii]],",[36,35350,1476],{"class":468},[36,35352,47],{"class":46},[36,35354,554],{"class":112},[36,35356,922],{"class":42},[36,35358,35359,35362,35365],{"class":38,"line":992},[36,35360,35361],{"class":42},"    plt.axis(",[36,35363,35364],{"class":105},"\"off\"",[36,35366,922],{"class":42},[36,35368,35369,35372,35375,35377,35380],{"class":38,"line":1020},[36,35370,35371],{"class":42},"    plt.subplots_adjust(",[36,35373,35374],{"class":468},"wspace",[36,35376,47],{"class":46},[36,35378,35379],{"class":112},"0.05",[36,35381,922],{"class":42},[36,35383,35384],{"class":38,"line":1036},[36,35385,35386],{"class":42},"plt.show()\n",[19,35388,35389],{},"用matplotlib进行展示的过程可以后续再补",[19,35391,35392],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,35394,35395],{},"训练次数就是按照批次过整个训练集数据的次数",[19,35397,35398],{},"模型训练：",[26,35400,35402],{"className":28,"code":35401,"language":30,"meta":31,"style":31},"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",[33,35403,35404,35411,35418,35422,35434,35440,35451,35461,35471,35481,35491,35496,35508,35518,35522,35526,35531,35541,35554,35565,35582,35593,35631,35647,35659,35670,35675,35686,35702,35713,35724,35735,35742,35746,35751,35756,35760,35765,35775,35796,35800,35804,35809,35814,35819,35839,35843,35848,35858,35862,35867,35876,35881,35886,35891,35901,35905,35909,35914,35919,35929,35934,35944,35949,35958,35963,35972,35977,35986,35990,35995,36005,36009,36013,36018,36032,36058,36073,36077,36082,36087,36096,36101,36110,36115,36124,36129,36138,36143,36152,36157,36166,36171,36184,36189,36199,36204,36214,36219,36224,36229,36234,36244,36249,36268,36273,36283,36288,36293,36298,36303,36308,36313,36318,36337,36342,36357,36362,36375,36380,36394,36400,36409,36415,36424,36430,36436,36445,36451,36462,36468,36487,36493,36504,36510,36530,36546,36552,36566,36572,36578,36589,36595,36601,36611,36617,36628,36634,36644,36649,36655,36704,36751,36756,36762,36781,36787,36807,36813,36819,36829,36834,36840,36856,36901,36907,36913,36919,36930,36936,36942,36948,36966,36980,36989,36998,37007,37016,37022,37028,37036,37041,37047,37058,37064,37084,37090,37096,37102,37119,37125,37131,37137,37143,37149,37176,37200,37206,37212,37218,37229,37240,37246,37263,37286,37309,37315,37320,37329,37339,37345,37350,37356,37369,37375,37386,37397,37416],{"__ignoreMap":31},[36,35405,35406,35408],{"class":38,"line":39},[36,35407,611],{"class":46},[36,35409,35410],{"class":42}," copy\n",[36,35412,35413,35415],{"class":38,"line":53},[36,35414,611],{"class":46},[36,35416,35417],{"class":42}," time\n",[36,35419,35420],{"class":38,"line":196},[36,35421,659],{"emptyLinePlaceholder":658},[36,35423,35424,35426,35429,35431],{"class":38,"line":642},[36,35425,611],{"class":46},[36,35427,35428],{"class":42}," pandas ",[36,35430,617],{"class":46},[36,35432,35433],{"class":42}," pd\n",[36,35435,35436,35438],{"class":38,"line":655},[36,35437,611],{"class":46},[36,35439,34000],{"class":42},[36,35441,35442,35444,35446,35448],{"class":38,"line":662},[36,35443,645],{"class":46},[36,35445,35005],{"class":42},[36,35447,611],{"class":46},[36,35449,35450],{"class":42}," Dataset\n",[36,35452,35453,35455,35457,35459],{"class":38,"line":667},[36,35454,645],{"class":46},[36,35456,34961],{"class":42},[36,35458,611],{"class":46},[36,35460,34966],{"class":42},[36,35462,35463,35465,35467,35469],{"class":38,"line":679},[36,35464,645],{"class":46},[36,35466,34988],{"class":42},[36,35468,611],{"class":46},[36,35470,34993],{"class":42},[36,35472,35473,35475,35477,35479],{"class":38,"line":685},[36,35474,611],{"class":46},[36,35476,35005],{"class":42},[36,35478,617],{"class":46},[36,35480,35010],{"class":42},[36,35482,35483,35485,35487,35489],{"class":38,"line":691},[36,35484,611],{"class":46},[36,35486,35022],{"class":42},[36,35488,617],{"class":46},[36,35490,35027],{"class":42},[36,35492,35493],{"class":38,"line":696},[36,35494,35495],{"class":3943},"# 导入模型\n",[36,35497,35498,35500,35503,35505],{"class":38,"line":702},[36,35499,645],{"class":46},[36,35501,35502],{"class":42}," model ",[36,35504,611],{"class":46},[36,35506,35507],{"class":42}," LeNet\n",[36,35509,35510,35512,35514,35516],{"class":38,"line":708},[36,35511,645],{"class":46},[36,35513,34342],{"class":42},[36,35515,611],{"class":46},[36,35517,34347],{"class":42},[36,35519,35520],{"class":38,"line":713},[36,35521,659],{"emptyLinePlaceholder":658},[36,35523,35524],{"class":38,"line":719},[36,35525,659],{"emptyLinePlaceholder":658},[36,35527,35528],{"class":38,"line":725},[36,35529,35530],{"class":3943},"# 处理训练集与验证集函数--->划分数据集\n",[36,35532,35533,35535,35538],{"class":38,"line":731},[36,35534,1820],{"class":46},[36,35536,35537],{"class":101}," train_val_data_process",[36,35539,35540],{"class":42},"():\n",[36,35542,35543,35546,35548,35550,35552],{"class":38,"line":736},[36,35544,35545],{"class":42},"    train_data",[36,35547,47],{"class":46},[36,35549,35045],{"class":42},[36,35551,35053],{"class":105},[36,35553,35056],{"class":42},[36,35555,35556,35559,35561,35563],{"class":38,"line":742},[36,35557,35558],{"class":468},"                            train",[36,35560,47],{"class":46},[36,35562,35066],{"class":112},[36,35564,35056],{"class":42},[36,35566,35567,35570,35572,35574,35576,35578,35580],{"class":38,"line":748},[36,35568,35569],{"class":468},"                            transform",[36,35571,47],{"class":46},[36,35573,35083],{"class":42},[36,35575,1476],{"class":468},[36,35577,47],{"class":46},[36,35579,4771],{"class":112},[36,35581,35093],{"class":42},[36,35583,35584,35587,35589,35591],{"class":38,"line":754},[36,35585,35586],{"class":468},"                            download",[36,35588,47],{"class":46},[36,35590,35066],{"class":112},[36,35592,922],{"class":42},[36,35594,35595,35598,35600,35603,35605,35607,35610,35612,35614,35617,35619,35621,35624,35626,35628],{"class":38,"line":760},[36,35596,35597],{"class":42},"    train_data,val_data",[36,35599,47],{"class":46},[36,35601,35602],{"class":42},"Data.random_split(train_data,[",[36,35604,1976],{"class":112},[36,35606,495],{"class":42},[36,35608,35609],{"class":112},"0.8",[36,35611,1372],{"class":46},[36,35613,11049],{"class":112},[36,35615,35616],{"class":42},"(train_data)),",[36,35618,1976],{"class":112},[36,35620,495],{"class":42},[36,35622,35623],{"class":112},"0.2",[36,35625,1372],{"class":46},[36,35627,11049],{"class":112},[36,35629,35630],{"class":42},"(train_data))])\n",[36,35632,35633,35636,35638,35641,35643,35645],{"class":38,"line":766},[36,35634,35635],{"class":42},"    train_dataloader ",[36,35637,47],{"class":46},[36,35639,35640],{"class":42}," Data.DataLoader(",[36,35642,35126],{"class":468},[36,35644,47],{"class":46},[36,35646,35131],{"class":42},[36,35648,35649,35652,35654,35657],{"class":38,"line":772},[36,35650,35651],{"class":468},"                                       batch_size",[36,35653,47],{"class":46},[36,35655,35656],{"class":112},"128",[36,35658,35056],{"class":42},[36,35660,35661,35664,35666,35668],{"class":38,"line":778},[36,35662,35663],{"class":468},"                                       shuffle",[36,35665,47],{"class":46},[36,35667,35066],{"class":112},[36,35669,35056],{"class":42},[36,35671,35672],{"class":38,"line":783},[36,35673,35674],{"class":3943},"                                       # 规定8个进程\n",[36,35676,35677,35680,35682,35684],{"class":38,"line":789},[36,35678,35679],{"class":468},"                                       num_workers",[36,35681,47],{"class":46},[36,35683,4270],{"class":112},[36,35685,922],{"class":42},[36,35687,35688,35691,35693,35695,35697,35699],{"class":38,"line":795},[36,35689,35690],{"class":42},"    val_dataloader",[36,35692,47],{"class":46},[36,35694,35123],{"class":42},[36,35696,35126],{"class":468},[36,35698,47],{"class":46},[36,35700,35701],{"class":42},"val_data,\n",[36,35703,35704,35707,35709,35711],{"class":38,"line":801},[36,35705,35706],{"class":468},"                                   batch_size",[36,35708,47],{"class":46},[36,35710,35656],{"class":112},[36,35712,35056],{"class":42},[36,35714,35715,35718,35720,35722],{"class":38,"line":807},[36,35716,35717],{"class":468},"                                   shuffle",[36,35719,47],{"class":46},[36,35721,35066],{"class":112},[36,35723,35056],{"class":42},[36,35725,35726,35729,35731,35733],{"class":38,"line":813},[36,35727,35728],{"class":468},"                                   num_workers",[36,35730,47],{"class":46},[36,35732,4270],{"class":112},[36,35734,922],{"class":42},[36,35736,35737,35739],{"class":38,"line":819},[36,35738,7788],{"class":46},[36,35740,35741],{"class":42}," train_dataloader,val_dataloader\n",[36,35743,35744],{"class":38,"line":824},[36,35745,659],{"emptyLinePlaceholder":658},[36,35747,35748],{"class":38,"line":829},[36,35749,35750],{"class":3943},"# 验证是否出错\n",[36,35752,35753],{"class":38,"line":851},[36,35754,35755],{"class":3943},"# train_val_data_process()\n",[36,35757,35758],{"class":38,"line":868},[36,35759,659],{"emptyLinePlaceholder":658},[36,35761,35762],{"class":38,"line":873},[36,35763,35764],{"class":3943},"# 定义模型训练函数\n",[36,35766,35767,35769,35772],{"class":38,"line":891},[36,35768,1820],{"class":46},[36,35770,35771],{"class":101}," train_model_process",[36,35773,35774],{"class":42},"(model,train_dataloader,val_dataloader,num_epochs):\n",[36,35776,35777,35779,35781,35783,35785,35787,35789,35791,35794],{"class":38,"line":906},[36,35778,34831],{"class":42},[36,35780,47],{"class":46},[36,35782,34055],{"class":42},[36,35784,34838],{"class":105},[36,35786,5428],{"class":46},[36,35788,34843],{"class":42},[36,35790,5425],{"class":46},[36,35792,35793],{"class":105}," 'cpu'",[36,35795,922],{"class":42},[36,35797,35798],{"class":38,"line":925},[36,35799,659],{"emptyLinePlaceholder":658},[36,35801,35802],{"class":38,"line":943},[36,35803,659],{"emptyLinePlaceholder":658},[36,35805,35806],{"class":38,"line":948},[36,35807,35808],{"class":3943},"    # 定义优化器\n",[36,35810,35811],{"class":38,"line":971},[36,35812,35813],{"class":3943},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[36,35815,35816],{"class":38,"line":992},[36,35817,35818],{"class":3943},"    # lr为学习率\n",[36,35820,35821,35824,35826,35829,35832,35834,35837],{"class":38,"line":1020},[36,35822,35823],{"class":42},"    optimizer",[36,35825,47],{"class":46},[36,35827,35828],{"class":42},"torch.optim.Adam(model.parameters(),",[36,35830,35831],{"class":468},"lr",[36,35833,47],{"class":46},[36,35835,35836],{"class":112},"0.001",[36,35838,922],{"class":42},[36,35840,35841],{"class":38,"line":1036},[36,35842,659],{"emptyLinePlaceholder":658},[36,35844,35845],{"class":38,"line":1041},[36,35846,35847],{"class":3943},"    # 定义损失函数使用交叉熵损失函数\n",[36,35849,35850,35853,35855],{"class":38,"line":1052},[36,35851,35852],{"class":42},"    criterion",[36,35854,47],{"class":46},[36,35856,35857],{"class":42},"nn.CrossEntropyLoss()\n",[36,35859,35860],{"class":38,"line":1065},[36,35861,659],{"emptyLinePlaceholder":658},[36,35863,35864],{"class":38,"line":1077},[36,35865,35866],{"class":3943},"    # 将模型放到GPU中进行训练\n",[36,35868,35869,35871,35873],{"class":38,"line":1082},[36,35870,34883],{"class":42},[36,35872,47],{"class":46},[36,35874,35875],{"class":42},"model.to(device)\n",[36,35877,35878],{"class":38,"line":1125},[36,35879,35880],{"class":3943},"    # 复制当前模型的参数\n",[36,35882,35883],{"class":38,"line":1164},[36,35884,35885],{"class":3943},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[36,35887,35888],{"class":38,"line":1169},[36,35889,35890],{"class":3943},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[36,35892,35893,35896,35898],{"class":38,"line":1180},[36,35894,35895],{"class":42},"    best_model_wts",[36,35897,47],{"class":46},[36,35899,35900],{"class":42},"copy.deepcopy(model.state_dict())\n",[36,35902,35903],{"class":38,"line":1198},[36,35904,659],{"emptyLinePlaceholder":658},[36,35906,35907],{"class":38,"line":1215},[36,35908,659],{"emptyLinePlaceholder":658},[36,35910,35911],{"class":38,"line":1236},[36,35912,35913],{"class":3943},"    # 初始化参数\n",[36,35915,35916],{"class":38,"line":1245},[36,35917,35918],{"class":3943},"    # 最高准确度\n",[36,35920,35921,35924,35926],{"class":38,"line":1250},[36,35922,35923],{"class":42},"    best_acc",[36,35925,47],{"class":46},[36,35927,35928],{"class":112},"0.0\n",[36,35930,35931],{"class":38,"line":1265},[36,35932,35933],{"class":3943},"    # 训练集损失列表\n",[36,35935,35936,35939,35941],{"class":38,"line":1281},[36,35937,35938],{"class":42},"    train_loss_all",[36,35940,47],{"class":46},[36,35942,35943],{"class":42},"[]\n",[36,35945,35946],{"class":38,"line":1297},[36,35947,35948],{"class":3943},"    # 验证集函数列表\n",[36,35950,35951,35954,35956],{"class":38,"line":1314},[36,35952,35953],{"class":42},"    val_loss_all",[36,35955,47],{"class":46},[36,35957,35943],{"class":42},[36,35959,35960],{"class":38,"line":1336},[36,35961,35962],{"class":3943},"    # 训练集准确度列表\n",[36,35964,35965,35968,35970],{"class":38,"line":1356},[36,35966,35967],{"class":42},"    train_acc_all",[36,35969,47],{"class":46},[36,35971,35943],{"class":42},[36,35973,35974],{"class":38,"line":1361},[36,35975,35976],{"class":3943},"    # 验证集准确度列表\n",[36,35978,35979,35982,35984],{"class":38,"line":1407},[36,35980,35981],{"class":42},"    val_acc_all",[36,35983,47],{"class":46},[36,35985,35943],{"class":42},[36,35987,35988],{"class":38,"line":1423},[36,35989,659],{"emptyLinePlaceholder":658},[36,35991,35992],{"class":38,"line":1439},[36,35993,35994],{"class":3943},"    # 保存当前时间--->方便看每轮训练的时间\n",[36,35996,35997,36000,36002],{"class":38,"line":1444},[36,35998,35999],{"class":42},"    since",[36,36001,47],{"class":46},[36,36003,36004],{"class":42},"time.time()\n",[36,36006,36007],{"class":38,"line":1486},[36,36008,659],{"emptyLinePlaceholder":658},[36,36010,36011],{"class":38,"line":1499},[36,36012,659],{"emptyLinePlaceholder":658},[36,36014,36015],{"class":38,"line":1513},[36,36016,36017],{"class":3943},"    # 准备工作完成--->开始训练模型\n",[36,36019,36020,36022,36025,36027,36029],{"class":38,"line":1518},[36,36021,1909],{"class":46},[36,36023,36024],{"class":42}," epoch ",[36,36026,1619],{"class":46},[36,36028,1622],{"class":112},[36,36030,36031],{"class":42},"(num_epochs):\n",[36,36033,36034,36036,36038,36041,36043,36045,36047,36049,36052,36054,36056],{"class":38,"line":1529},[36,36035,1960],{"class":112},[36,36037,495],{"class":42},[36,36039,36040],{"class":105},"\"Epoch ",[36,36042,3649],{"class":112},[36,36044,4455],{"class":105},[36,36046,3649],{"class":112},[36,36048,4126],{"class":105},[36,36050,36051],{"class":42},".format(epoch,num_epochs",[36,36053,1308],{"class":46},[36,36055,4092],{"class":112},[36,36057,2005],{"class":42},[36,36059,36060,36062,36064,36067,36069,36071],{"class":38,"line":1539},[36,36061,1960],{"class":112},[36,36063,495],{"class":42},[36,36065,36066],{"class":105},"\"-\"",[36,36068,1372],{"class":46},[36,36070,554],{"class":112},[36,36072,922],{"class":42},[36,36074,36075],{"class":38,"line":1544},[36,36076,659],{"emptyLinePlaceholder":658},[36,36078,36079],{"class":38,"line":1555},[36,36080,36081],{"class":3943},"        # 初始化参数\n",[36,36083,36084],{"class":38,"line":1572},[36,36085,36086],{"class":3943},"        # 训练集损失函数\n",[36,36088,36089,36092,36094],{"class":38,"line":1592},[36,36090,36091],{"class":42},"        train_loss",[36,36093,47],{"class":46},[36,36095,35928],{"class":112},[36,36097,36098],{"class":38,"line":1597},[36,36099,36100],{"class":3943},"        # 训练集准确度\n",[36,36102,36103,36106,36108],{"class":38,"line":1610},[36,36104,36105],{"class":42},"        train_corrects",[36,36107,47],{"class":46},[36,36109,6787],{"class":112},[36,36111,36112],{"class":38,"line":1632},[36,36113,36114],{"class":3943},"        # 验证集损失函数\n",[36,36116,36117,36120,36122],{"class":38,"line":1646},[36,36118,36119],{"class":42},"        val_loss",[36,36121,47],{"class":46},[36,36123,35928],{"class":112},[36,36125,36126],{"class":38,"line":1651},[36,36127,36128],{"class":3943},"        # 验证集准确度\n",[36,36130,36131,36134,36136],{"class":38,"line":1664},[36,36132,36133],{"class":42},"        val_corrects",[36,36135,47],{"class":46},[36,36137,6787],{"class":112},[36,36139,36140],{"class":38,"line":1669},[36,36141,36142],{"class":3943},"        # 训练集样本数量\n",[36,36144,36145,36148,36150],{"class":38,"line":1681},[36,36146,36147],{"class":42},"        train_num",[36,36149,47],{"class":46},[36,36151,6787],{"class":112},[36,36153,36154],{"class":38,"line":1694},[36,36155,36156],{"class":3943},"        # 验证集样本数量\n",[36,36158,36159,36162,36164],{"class":38,"line":1699},[36,36160,36161],{"class":42},"        val_num",[36,36163,47],{"class":46},[36,36165,6787],{"class":112},[36,36167,36168],{"class":38,"line":1714},[36,36169,36170],{"class":3943},"        # 将数据放到设备,并开始训练\n",[36,36172,36173,36175,36177,36179,36181],{"class":38,"line":1729},[36,36174,1613],{"class":46},[36,36176,35190],{"class":42},[36,36178,1619],{"class":46},[36,36180,35195],{"class":112},[36,36182,36183],{"class":42},"(train_dataloader):\n",[36,36185,36186],{"class":38,"line":1746},[36,36187,36188],{"class":3943},"            # 将特征放入到训练设备\n",[36,36190,36191,36194,36196],{"class":38,"line":1751},[36,36192,36193],{"class":42},"            b_x",[36,36195,47],{"class":46},[36,36197,36198],{"class":42},"b_x.to(device)\n",[36,36200,36201],{"class":38,"line":1765},[36,36202,36203],{"class":3943},"            # 将标签放入到训练设备当中\n",[36,36205,36206,36209,36211],{"class":38,"line":1783},[36,36207,36208],{"class":42},"            b_y",[36,36210,47],{"class":46},[36,36212,36213],{"class":42},"b_y.to(device)\n",[36,36215,36216],{"class":38,"line":1799},[36,36217,36218],{"class":3943},"            # 设置模型为训练模式\n",[36,36220,36221],{"class":38,"line":1807},[36,36222,36223],{"class":42},"            model.train()\n",[36,36225,36226],{"class":38,"line":1812},[36,36227,36228],{"class":3943},"            # 将数据放到模型当中,开始前向传播\n",[36,36230,36231],{"class":38,"line":1817},[36,36232,36233],{"class":3943},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[36,36235,36236,36239,36241],{"class":38,"line":1833},[36,36237,36238],{"class":42},"            output",[36,36240,47],{"class":46},[36,36242,36243],{"class":42},"model(b_x)\n",[36,36245,36246],{"class":38,"line":1844},[36,36247,36248],{"class":3943},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[36,36250,36251,36254,36256,36259,36262,36264,36266],{"class":38,"line":1864},[36,36252,36253],{"class":42},"            pre_lab",[36,36255,47],{"class":46},[36,36257,36258],{"class":42},"torch.argmax(output,",[36,36260,36261],{"class":468},"dim",[36,36263,47],{"class":46},[36,36265,4092],{"class":112},[36,36267,922],{"class":42},[36,36269,36270],{"class":38,"line":1878},[36,36271,36272],{"class":3943},"            # 计算每一个batch的损失函数\n",[36,36274,36275,36278,36280],{"class":38,"line":1891},[36,36276,36277],{"class":42},"            loss",[36,36279,47],{"class":46},[36,36281,36282],{"class":42},"criterion(output,b_y)\n",[36,36284,36285],{"class":38,"line":1896},[36,36286,36287],{"class":3943},"            # 将梯度初始化为0\n",[36,36289,36290],{"class":38,"line":1906},[36,36291,36292],{"class":42},"            optimizer.zero_grad()\n",[36,36294,36295],{"class":38,"line":1926},[36,36296,36297],{"class":3943},"            # 梯度置为0后再进行反向传播\n",[36,36299,36300],{"class":38,"line":1936},[36,36301,36302],{"class":42},"            loss.backward()\n",[36,36304,36305],{"class":38,"line":1946},[36,36306,36307],{"class":3943},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[36,36309,36310],{"class":38,"line":1957},[36,36311,36312],{"class":42},"            optimizer.step()\n",[36,36314,36315],{"class":38,"line":2008},[36,36316,36317],{"class":3943},"            # loss.item()指的是batch的平均损失\n",[36,36319,36320,36323,36325,36328,36330,36333,36335],{"class":38,"line":2022},[36,36321,36322],{"class":42},"            train_loss",[36,36324,1658],{"class":46},[36,36326,36327],{"class":42},"loss.item()",[36,36329,1372],{"class":46},[36,36331,36332],{"class":42},"b_x.size(",[36,36334,1859],{"class":112},[36,36336,922],{"class":42},[36,36338,36339],{"class":38,"line":2028},[36,36340,36341],{"class":3943},"            # 计算每个批次中正确预测的数量\n",[36,36343,36344,36347,36349,36352,36354],{"class":38,"line":2033},[36,36345,36346],{"class":42},"            train_corrects",[36,36348,1658],{"class":46},[36,36350,36351],{"class":42},"torch.sum(pre_lab",[36,36353,6652],{"class":46},[36,36355,36356],{"class":42},"b_y.data)\n",[36,36358,36359],{"class":38,"line":2054},[36,36360,36361],{"class":3943},"            # 计算目前为止一共处理了多少样本\n",[36,36363,36364,36367,36369,36371,36373],{"class":38,"line":2059},[36,36365,36366],{"class":42},"            train_num",[36,36368,1658],{"class":46},[36,36370,36332],{"class":42},[36,36372,1859],{"class":112},[36,36374,922],{"class":42},[36,36376,36377],{"class":38,"line":2064},[36,36378,36379],{"class":3943},"        # 验证数据\n",[36,36381,36382,36384,36387,36389,36391],{"class":38,"line":2081},[36,36383,1613],{"class":46},[36,36385,36386],{"class":42}," step ,(b_x,b_y) ",[36,36388,1619],{"class":46},[36,36390,35195],{"class":112},[36,36392,36393],{"class":42},"(val_dataloader):\n",[36,36395,36397],{"class":38,"line":36396},121,[36,36398,36399],{"class":3943},"            # 将特征放到验证设备当中\n",[36,36401,36403,36405,36407],{"class":38,"line":36402},122,[36,36404,36193],{"class":42},[36,36406,47],{"class":46},[36,36408,36198],{"class":42},[36,36410,36412],{"class":38,"line":36411},123,[36,36413,36414],{"class":3943},"            # 将标签放到放到训练设备当中\n",[36,36416,36418,36420,36422],{"class":38,"line":36417},124,[36,36419,36208],{"class":42},[36,36421,47],{"class":46},[36,36423,36213],{"class":42},[36,36425,36427],{"class":38,"line":36426},125,[36,36428,36429],{"class":3943},"            # 开启验证模式，设置模型为评估模式\n",[36,36431,36433],{"class":38,"line":36432},126,[36,36434,36435],{"class":42},"            model.eval()\n",[36,36437,36439,36442],{"class":38,"line":36438},127,[36,36440,36441],{"class":46},"            with",[36,36443,36444],{"class":42}," torch.no_grad():\n",[36,36446,36448],{"class":38,"line":36447},128,[36,36449,36450],{"class":3943},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[36,36452,36454,36457,36459],{"class":38,"line":36453},129,[36,36455,36456],{"class":42},"                output ",[36,36458,47],{"class":46},[36,36460,36461],{"class":42}," model(b_x)\n",[36,36463,36465],{"class":38,"line":36464},130,[36,36466,36467],{"class":3943},"                # 查找每一行中最大值对应的下标\n",[36,36469,36471,36474,36476,36479,36481,36483,36485],{"class":38,"line":36470},131,[36,36472,36473],{"class":42},"                pre_lab ",[36,36475,47],{"class":46},[36,36477,36478],{"class":42}," torch.argmax(output, ",[36,36480,36261],{"class":468},[36,36482,47],{"class":46},[36,36484,4092],{"class":112},[36,36486,922],{"class":42},[36,36488,36490],{"class":38,"line":36489},132,[36,36491,36492],{"class":3943},"                # 计算验证集上的当前 batch 损失\n",[36,36494,36496,36499,36501],{"class":38,"line":36495},133,[36,36497,36498],{"class":42},"                val_batch_loss ",[36,36500,47],{"class":46},[36,36502,36503],{"class":42}," criterion(output, b_y)\n",[36,36505,36507],{"class":38,"line":36506},134,[36,36508,36509],{"class":3943},"                # 对损失函数进行累加（按样本数加权）\n",[36,36511,36513,36516,36518,36521,36523,36526,36528],{"class":38,"line":36512},135,[36,36514,36515],{"class":42},"                val_loss ",[36,36517,1658],{"class":46},[36,36519,36520],{"class":42}," val_batch_loss.item() ",[36,36522,1372],{"class":46},[36,36524,36525],{"class":42}," b_x.size(",[36,36527,1859],{"class":112},[36,36529,922],{"class":42},[36,36531,36533,36536,36538,36541,36543],{"class":38,"line":36532},136,[36,36534,36535],{"class":42},"                val_corrects ",[36,36537,1658],{"class":46},[36,36539,36540],{"class":42}," torch.sum(pre_lab ",[36,36542,6652],{"class":46},[36,36544,36545],{"class":42}," b_y.data)\n",[36,36547,36549],{"class":38,"line":36548},137,[36,36550,36551],{"class":3943},"                # 当前用于验证的样本数量\n",[36,36553,36555,36558,36560,36562,36564],{"class":38,"line":36554},138,[36,36556,36557],{"class":42},"            val_num ",[36,36559,1658],{"class":46},[36,36561,36525],{"class":42},[36,36563,1859],{"class":112},[36,36565,922],{"class":42},[36,36567,36569],{"class":38,"line":36568},139,[36,36570,36571],{"class":3943},"        # 计算并保存每一次迭代的loss值和准确率\n",[36,36573,36575],{"class":38,"line":36574},140,[36,36576,36577],{"class":3943},"        # 计算并保存训练集的loss值\n",[36,36579,36581,36584,36586],{"class":38,"line":36580},141,[36,36582,36583],{"class":42},"        train_loss_all.append(train_loss",[36,36585,4455],{"class":46},[36,36587,36588],{"class":42},"train_num)\n",[36,36590,36592],{"class":38,"line":36591},142,[36,36593,36594],{"class":3943},"        # 取双精度\n",[36,36596,36598],{"class":38,"line":36597},143,[36,36599,36600],{"class":3943},"        # 计算并保存训练集的准确率\n",[36,36602,36604,36607,36609],{"class":38,"line":36603},144,[36,36605,36606],{"class":42},"        train_acc_all.append(train_corrects.double().item()",[36,36608,4455],{"class":46},[36,36610,36588],{"class":42},[36,36612,36614],{"class":38,"line":36613},145,[36,36615,36616],{"class":3943},"        # 计算并保存验证集的loss值\n",[36,36618,36620,36623,36625],{"class":38,"line":36619},146,[36,36621,36622],{"class":42},"        val_loss_all.append(val_loss",[36,36624,4455],{"class":46},[36,36626,36627],{"class":42},"val_num)\n",[36,36629,36631],{"class":38,"line":36630},147,[36,36632,36633],{"class":3943},"        # 计算并保存验证集的准确率\n",[36,36635,36637,36640,36642],{"class":38,"line":36636},148,[36,36638,36639],{"class":42},"        val_acc_all.append(val_corrects.double().item()",[36,36641,4455],{"class":46},[36,36643,36627],{"class":42},[36,36645,36647],{"class":38,"line":36646},149,[36,36648,659],{"emptyLinePlaceholder":658},[36,36650,36652],{"class":38,"line":36651},150,[36,36653,36654],{"class":3943},"        # 打印训练一轮的loss值和准确率\n",[36,36656,36658,36660,36662,36664,36666,36669,36671,36674,36676,36679,36681,36683,36685,36687,36690,36692,36694,36697,36699,36701],{"class":38,"line":36657},151,[36,36659,1960],{"class":112},[36,36661,495],{"class":42},[36,36663,7291],{"class":105},[36,36665,3649],{"class":112},[36,36667,36668],{"class":105},"train loss:",[36,36670,4766],{"class":112},[36,36672,36673],{"class":46},":.4f",[36,36675,4815],{"class":112},[36,36677,36678],{"class":105}," train acc:",[36,36680,4766],{"class":112},[36,36682,36673],{"class":46},[36,36684,4815],{"class":112},[36,36686,7291],{"class":105},[36,36688,36689],{"class":42},".format(epoch,train_loss_all[",[36,36691,1308],{"class":46},[36,36693,4092],{"class":112},[36,36695,36696],{"class":42},"],train_acc_all[",[36,36698,1308],{"class":46},[36,36700,4092],{"class":112},[36,36702,36703],{"class":42},"]))\n",[36,36705,36707,36709,36711,36713,36715,36718,36720,36722,36724,36727,36729,36731,36733,36735,36738,36740,36742,36745,36747,36749],{"class":38,"line":36706},152,[36,36708,1960],{"class":112},[36,36710,495],{"class":42},[36,36712,7291],{"class":105},[36,36714,3649],{"class":112},[36,36716,36717],{"class":105},"val loss:",[36,36719,4766],{"class":112},[36,36721,36673],{"class":46},[36,36723,4815],{"class":112},[36,36725,36726],{"class":105}," val acc:",[36,36728,4766],{"class":112},[36,36730,36673],{"class":46},[36,36732,4815],{"class":112},[36,36734,7291],{"class":105},[36,36736,36737],{"class":42},".format(epoch,val_loss_all[",[36,36739,1308],{"class":46},[36,36741,4092],{"class":112},[36,36743,36744],{"class":42},"],val_acc_all[",[36,36746,1308],{"class":46},[36,36748,4092],{"class":112},[36,36750,36703],{"class":42},[36,36752,36754],{"class":38,"line":36753},153,[36,36755,659],{"emptyLinePlaceholder":658},[36,36757,36759],{"class":38,"line":36758},154,[36,36760,36761],{"class":3943},"        # 判断准确度--->保存最优模型\n",[36,36763,36765,36767,36770,36772,36774,36776,36778],{"class":38,"line":36764},155,[36,36766,995],{"class":46},[36,36768,36769],{"class":42}," val_acc_all[",[36,36771,1308],{"class":46},[36,36773,4092],{"class":112},[36,36775,4809],{"class":42},[36,36777,4829],{"class":46},[36,36779,36780],{"class":42},"best_acc:\n",[36,36782,36784],{"class":38,"line":36783},156,[36,36785,36786],{"class":3943},"            # 保存当前模型准确度\n",[36,36788,36790,36793,36795,36797,36800,36802,36804],{"class":38,"line":36789},157,[36,36791,36792],{"class":42},"            best_acc:",[36,36794,1260],{"class":112},[36,36796,47],{"class":46},[36,36798,36799],{"class":42},"val_acc_all[",[36,36801,1308],{"class":46},[36,36803,4092],{"class":112},[36,36805,36806],{"class":42},"]\n",[36,36808,36810],{"class":38,"line":36809},158,[36,36811,36812],{"class":3943},"            # 保存当前的准确度\n",[36,36814,36816],{"class":38,"line":36815},159,[36,36817,36818],{"class":3943},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[36,36820,36822,36825,36827],{"class":38,"line":36821},160,[36,36823,36824],{"class":42},"            best_model_wts",[36,36826,47],{"class":46},[36,36828,35900],{"class":42},[36,36830,36832],{"class":38,"line":36831},161,[36,36833,659],{"emptyLinePlaceholder":658},[36,36835,36837],{"class":38,"line":36836},162,[36,36838,36839],{"class":3943},"        # 计算耗时\n",[36,36841,36843,36846,36848,36851,36853],{"class":38,"line":36842},163,[36,36844,36845],{"class":42},"        time_use",[36,36847,47],{"class":46},[36,36849,36850],{"class":42},"time.time()",[36,36852,1308],{"class":46},[36,36854,36855],{"class":42},"since\n",[36,36857,36859,36861,36863,36866,36868,36871,36873,36875,36877,36879,36881,36884,36887,36890,36892,36895,36897,36899],{"class":38,"line":36858},164,[36,36860,1960],{"class":112},[36,36862,495],{"class":42},[36,36864,36865],{"class":105},"'训练和验证耗费的时间",[36,36867,4766],{"class":112},[36,36869,36870],{"class":46},":.0f",[36,36872,4815],{"class":112},[36,36874,4416],{"class":105},[36,36876,4766],{"class":112},[36,36878,36870],{"class":46},[36,36880,4815],{"class":112},[36,36882,36883],{"class":105},"s'",[36,36885,36886],{"class":42},".format(time_use",[36,36888,36889],{"class":46},"\u002F\u002F",[36,36891,4777],{"class":112},[36,36893,36894],{"class":42},",time_use",[36,36896,4203],{"class":46},[36,36898,4777],{"class":112},[36,36900,2005],{"class":42},[36,36902,36904],{"class":38,"line":36903},165,[36,36905,36906],{"class":3943},"    # 选择最优参数\n",[36,36908,36910],{"class":38,"line":36909},166,[36,36911,36912],{"class":3943},"    # 加载最高准确率下的模型参数\n",[36,36914,36916],{"class":38,"line":36915},167,[36,36917,36918],{"class":3943},"    # model.load_state_dict(best_model_wts)\n",[36,36920,36922,36925,36928],{"class":38,"line":36921},168,[36,36923,36924],{"class":42},"    torch.save(model.state_dict(best_model_wts), ",[36,36926,36927],{"class":105},"'.\u002Fbest_model.pth'",[36,36929,922],{"class":42},[36,36931,36933],{"class":38,"line":36932},169,[36,36934,36935],{"class":3943},"    # 或者写成\n",[36,36937,36939],{"class":38,"line":36938},170,[36,36940,36941],{"class":3943},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[36,36943,36945],{"class":38,"line":36944},171,[36,36946,36947],{"class":3943},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[36,36949,36951,36954,36956,36959,36962,36964],{"class":38,"line":36950},172,[36,36952,36953],{"class":42},"    train_process",[36,36955,47],{"class":46},[36,36957,36958],{"class":42},"pd.DataFrame(",[36,36960,36961],{"class":468},"data",[36,36963,47],{"class":46},[36,36965,5281],{"class":42},[36,36967,36969,36972,36974,36977],{"class":38,"line":36968},173,[36,36970,36971],{"class":105},"        \"epoch\"",[36,36973,4729],{"class":42},[36,36975,36976],{"class":112},"range",[36,36978,36979],{"class":42},"(num_epochs),\n",[36,36981,36983,36986],{"class":38,"line":36982},174,[36,36984,36985],{"class":105},"        \"train_loss_all\"",[36,36987,36988],{"class":42},":train_loss_all,\n",[36,36990,36992,36995],{"class":38,"line":36991},175,[36,36993,36994],{"class":105},"        \"val_loss_all\"",[36,36996,36997],{"class":42},":val_loss_all,\n",[36,36999,37001,37004],{"class":38,"line":37000},176,[36,37002,37003],{"class":105},"        \"train_acc_all\"",[36,37005,37006],{"class":42},":train_acc_all,\n",[36,37008,37010,37013],{"class":38,"line":37009},177,[36,37011,37012],{"class":105},"        \"val_acc_all\"",[36,37014,37015],{"class":42},":val_acc_all\n",[36,37017,37019],{"class":38,"line":37018},178,[36,37020,37021],{"class":42},"    })\n",[36,37023,37025],{"class":38,"line":37024},179,[36,37026,37027],{"class":3943},"    # 返回训练保存的过程\n",[36,37029,37031,37033],{"class":38,"line":37030},180,[36,37032,7788],{"class":46},[36,37034,37035],{"class":42}," train_process\n",[36,37037,37039],{"class":38,"line":37038},181,[36,37040,659],{"emptyLinePlaceholder":658},[36,37042,37044],{"class":38,"line":37043},182,[36,37045,37046],{"class":3943},"# 将loss值和精度按照图片的形式展示出来\n",[36,37048,37050,37052,37055],{"class":38,"line":37049},183,[36,37051,1820],{"class":46},[36,37053,37054],{"class":101}," matplot_acc_loss",[36,37056,37057],{"class":42},"(train_process):\n",[36,37059,37061],{"class":38,"line":37060},184,[36,37062,37063],{"class":3943},"    # 设置图的大小\n",[36,37065,37067,37070,37072,37074,37076,37078,37080,37082],{"class":38,"line":37066},185,[36,37068,37069],{"class":42},"    plt.figure(",[36,37071,35281],{"class":468},[36,37073,47],{"class":46},[36,37075,495],{"class":42},[36,37077,4371],{"class":112},[36,37079,4253],{"class":42},[36,37081,4168],{"class":112},[36,37083,2005],{"class":42},[36,37085,37087],{"class":38,"line":37086},186,[36,37088,37089],{"class":3943},"    # 设置图中有几张图\n",[36,37091,37093],{"class":38,"line":37092},187,[36,37094,37095],{"class":3943},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[36,37097,37099],{"class":38,"line":37098},188,[36,37100,37101],{"class":3943},"    # ①loss图\n",[36,37103,37105,37107,37109,37111,37113,37115,37117],{"class":38,"line":37104},189,[36,37106,35315],{"class":42},[36,37108,4092],{"class":112},[36,37110,4253],{"class":42},[36,37112,498],{"class":112},[36,37114,4253],{"class":42},[36,37116,4092],{"class":112},[36,37118,922],{"class":42},[36,37120,37122],{"class":38,"line":37121},190,[36,37123,37124],{"class":3943},"    # 补充:\n",[36,37126,37128],{"class":38,"line":37127},191,[36,37129,37130],{"class":3943},"    # plt.subplot(nrows, ncols, index)\n",[36,37132,37134],{"class":38,"line":37133},192,[36,37135,37136],{"class":3943},"    # nrows：行数\n",[36,37138,37140],{"class":38,"line":37139},193,[36,37141,37142],{"class":3943},"    # ncols：列数\n",[36,37144,37146],{"class":38,"line":37145},194,[36,37147,37148],{"class":3943},"    # index：目前选中第几个子图（从1开始）\n",[36,37150,37152,37155,37158,37161,37164,37166,37169,37171,37174],{"class":38,"line":37151},195,[36,37153,37154],{"class":42},"    plt.plot(train_process[",[36,37156,37157],{"class":105},"\"epoch\"",[36,37159,37160],{"class":42},"],train_process.train_loss_all,",[36,37162,37163],{"class":105},"'ro-'",[36,37165,4253],{"class":42},[36,37167,37168],{"class":468},"label",[36,37170,47],{"class":46},[36,37172,37173],{"class":105},"'train loss'",[36,37175,922],{"class":42},[36,37177,37179,37181,37183,37186,37189,37191,37193,37195,37198],{"class":38,"line":37178},196,[36,37180,37154],{"class":42},[36,37182,37157],{"class":105},[36,37184,37185],{"class":42},"],train_process.val_loss_all,",[36,37187,37188],{"class":105},"'bs--'",[36,37190,4253],{"class":42},[36,37192,37168],{"class":468},[36,37194,47],{"class":46},[36,37196,37197],{"class":105},"'val loss'",[36,37199,922],{"class":42},[36,37201,37203],{"class":38,"line":37202},197,[36,37204,37205],{"class":3943},"    # 添加一个图例\n",[36,37207,37209],{"class":38,"line":37208},198,[36,37210,37211],{"class":42},"    plt.legend()\n",[36,37213,37215],{"class":38,"line":37214},199,[36,37216,37217],{"class":3943},"    # 给轴添加标签\n",[36,37219,37221,37224,37227],{"class":38,"line":37220},200,[36,37222,37223],{"class":42},"    plt.xlabel(",[36,37225,37226],{"class":105},"'epoch'",[36,37228,922],{"class":42},[36,37230,37232,37235,37238],{"class":38,"line":37231},201,[36,37233,37234],{"class":42},"    plt.ylabel(",[36,37236,37237],{"class":105},"'loss'",[36,37239,922],{"class":42},[36,37241,37243],{"class":38,"line":37242},202,[36,37244,37245],{"class":3943},"    # ②准确度图\n",[36,37247,37249,37251,37253,37255,37257,37259,37261],{"class":38,"line":37248},203,[36,37250,35315],{"class":42},[36,37252,4092],{"class":112},[36,37254,4253],{"class":42},[36,37256,498],{"class":112},[36,37258,4253],{"class":42},[36,37260,498],{"class":112},[36,37262,922],{"class":42},[36,37264,37266,37268,37270,37273,37275,37277,37279,37281,37284],{"class":38,"line":37265},204,[36,37267,37154],{"class":42},[36,37269,37157],{"class":105},[36,37271,37272],{"class":42},"],train_process.train_acc_all,",[36,37274,37163],{"class":105},[36,37276,4253],{"class":42},[36,37278,37168],{"class":468},[36,37280,47],{"class":46},[36,37282,37283],{"class":105},"'train acc'",[36,37285,922],{"class":42},[36,37287,37289,37291,37293,37296,37298,37300,37302,37304,37307],{"class":38,"line":37288},205,[36,37290,37154],{"class":42},[36,37292,37157],{"class":105},[36,37294,37295],{"class":42},"],train_process.val_acc_all,",[36,37297,37188],{"class":105},[36,37299,4253],{"class":42},[36,37301,37168],{"class":468},[36,37303,47],{"class":46},[36,37305,37306],{"class":105},"'val acc'",[36,37308,922],{"class":42},[36,37310,37312],{"class":38,"line":37311},206,[36,37313,37314],{"class":3943},"    # 添加图例\n",[36,37316,37318],{"class":38,"line":37317},207,[36,37319,37211],{"class":42},[36,37321,37323,37325,37327],{"class":38,"line":37322},208,[36,37324,37223],{"class":42},[36,37326,37157],{"class":105},[36,37328,922],{"class":42},[36,37330,37332,37334,37337],{"class":38,"line":37331},209,[36,37333,37234],{"class":42},[36,37335,37336],{"class":105},"\"acc\"",[36,37338,922],{"class":42},[36,37340,37342],{"class":38,"line":37341},210,[36,37343,37344],{"class":42},"    plt.show()\n",[36,37346,37348],{"class":38,"line":37347},211,[36,37349,659],{"emptyLinePlaceholder":658},[36,37351,37353],{"class":38,"line":37352},212,[36,37354,37355],{"class":3943},"# 正式开始训练:\n",[36,37357,37359,37361,37363,37365,37367],{"class":38,"line":37358},213,[36,37360,2067],{"class":46},[36,37362,2070],{"class":112},[36,37364,6652],{"class":46},[36,37366,34819],{"class":105},[36,37368,888],{"class":42},[36,37370,37372],{"class":38,"line":37371},214,[36,37373,37374],{"class":3943},"    # 将模型实例化\n",[36,37376,37378,37381,37383],{"class":38,"line":37377},215,[36,37379,37380],{"class":42},"    LeNet",[36,37382,47],{"class":46},[36,37384,37385],{"class":42},"LeNet()\n",[36,37387,37389,37392,37394],{"class":38,"line":37388},216,[36,37390,37391],{"class":42},"    train_dataloader,val_dataloader",[36,37393,47],{"class":46},[36,37395,37396],{"class":42},"train_val_data_process()\n",[36,37398,37400,37402,37404,37407,37410,37412,37414],{"class":38,"line":37399},217,[36,37401,36953],{"class":42},[36,37403,47],{"class":46},[36,37405,37406],{"class":42},"train_model_process(LeNet,train_dataloader,val_dataloader,",[36,37408,37409],{"class":468},"num_epochs",[36,37411,47],{"class":46},[36,37413,1921],{"class":112},[36,37415,922],{"class":42},[36,37417,37419],{"class":38,"line":37418},218,[36,37420,37421],{"class":42},"    matplot_acc_loss(train_process)\n",[19,37423,37424],{},"画图的补充点学习：",[19,37426,37427],{},[5198,37428],{"alt":31,"src":37429},"\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",[211,37431,37432],{"start":196},[214,37433,37434],{},"测试",[26,37436,37438],{"className":28,"code":37437,"language":30,"meta":31,"style":31},"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",[33,37439,37440,37446,37456,37468,37478,37483,37493,37503,37507,37512,37521,37538,37550,37567,37578,37594,37599,37610,37621,37632,37639,37643,37648,37658,37663,37680,37688,37692,37697,37706,37715,37719,37724,37729,37734,37741,37746,37758,37768,37778,37783,37787,37792,37801,37806,37822,37827,37832,37837,37851,37856,37870,37874,37879,37894,37899,37911,37915,37920,37932,37937,37945,37950,37955,37965,37970,37979,37984,37989,37993,37998,38003,38019,38027,38032,38037,38096,38102,38107,38118,38126,38134,38138,38143,38147,38152,38160,38165,38181,38186,38196,38206],{"__ignoreMap":31},[36,37441,37442,37444],{"class":38,"line":39},[36,37443,611],{"class":46},[36,37445,34000],{"class":42},[36,37447,37448,37450,37452,37454],{"class":38,"line":53},[36,37449,611],{"class":46},[36,37451,35005],{"class":42},[36,37453,617],{"class":46},[36,37455,35010],{"class":42},[36,37457,37458,37460,37463,37465],{"class":38,"line":196},[36,37459,645],{"class":46},[36,37461,37462],{"class":42}," jupyter_client.consoleapp ",[36,37464,611],{"class":46},[36,37466,37467],{"class":42}," classes\n",[36,37469,37470,37472,37474,37476],{"class":38,"line":642},[36,37471,645],{"class":46},[36,37473,34988],{"class":42},[36,37475,611],{"class":46},[36,37477,34993],{"class":42},[36,37479,37480],{"class":38,"line":655},[36,37481,37482],{"class":3943},"# 导入数据集\n",[36,37484,37485,37487,37489,37491],{"class":38,"line":662},[36,37486,645],{"class":46},[36,37488,34961],{"class":42},[36,37490,611],{"class":46},[36,37492,34966],{"class":42},[36,37494,37495,37497,37499,37501],{"class":38,"line":667},[36,37496,645],{"class":46},[36,37498,35502],{"class":42},[36,37500,611],{"class":46},[36,37502,35507],{"class":42},[36,37504,37505],{"class":38,"line":679},[36,37506,659],{"emptyLinePlaceholder":658},[36,37508,37509],{"class":38,"line":685},[36,37510,37511],{"class":3943},"# 测试数据处理\n",[36,37513,37514,37516,37519],{"class":38,"line":691},[36,37515,1820],{"class":46},[36,37517,37518],{"class":101}," test_data_process",[36,37520,35540],{"class":42},[36,37522,37523,37526,37528,37530,37532,37534,37536],{"class":38,"line":696},[36,37524,37525],{"class":42},"    test_data",[36,37527,47],{"class":46},[36,37529,35045],{"class":42},[36,37531,35048],{"class":468},[36,37533,47],{"class":46},[36,37535,35053],{"class":105},[36,37537,35056],{"class":42},[36,37539,37540,37543,37545,37548],{"class":38,"line":702},[36,37541,37542],{"class":468},"                           train",[36,37544,47],{"class":46},[36,37546,37547],{"class":112},"False",[36,37549,35056],{"class":42},[36,37551,37552,37555,37557,37559,37561,37563,37565],{"class":38,"line":708},[36,37553,37554],{"class":468},"                           transform",[36,37556,47],{"class":46},[36,37558,35083],{"class":42},[36,37560,1476],{"class":468},[36,37562,47],{"class":46},[36,37564,4771],{"class":112},[36,37566,35093],{"class":42},[36,37568,37569,37572,37574,37576],{"class":38,"line":713},[36,37570,37571],{"class":468},"                           download",[36,37573,47],{"class":46},[36,37575,35066],{"class":112},[36,37577,922],{"class":42},[36,37579,37580,37583,37585,37587,37589,37591],{"class":38,"line":719},[36,37581,37582],{"class":42},"    test_dataloader",[36,37584,47],{"class":46},[36,37586,35123],{"class":42},[36,37588,35126],{"class":468},[36,37590,47],{"class":46},[36,37592,37593],{"class":42},"test_data,\n",[36,37595,37596],{"class":38,"line":725},[36,37597,37598],{"class":3943},"                                    # 这里是一张一张进行测试\n",[36,37600,37601,37604,37606,37608],{"class":38,"line":731},[36,37602,37603],{"class":468},"                                    batch_size",[36,37605,47],{"class":46},[36,37607,4092],{"class":112},[36,37609,35056],{"class":42},[36,37611,37612,37615,37617,37619],{"class":38,"line":736},[36,37613,37614],{"class":468},"                                    shuffle",[36,37616,47],{"class":46},[36,37618,35066],{"class":112},[36,37620,35056],{"class":42},[36,37622,37623,37626,37628,37630],{"class":38,"line":742},[36,37624,37625],{"class":468},"                                    num_workers",[36,37627,47],{"class":46},[36,37629,1859],{"class":112},[36,37631,922],{"class":42},[36,37633,37634,37636],{"class":38,"line":748},[36,37635,7788],{"class":46},[36,37637,37638],{"class":42}," test_dataloader\n",[36,37640,37641],{"class":38,"line":754},[36,37642,659],{"emptyLinePlaceholder":658},[36,37644,37645],{"class":38,"line":760},[36,37646,37647],{"class":3943},"# 定义模型测试函数\n",[36,37649,37650,37652,37655],{"class":38,"line":766},[36,37651,1820],{"class":46},[36,37653,37654],{"class":101}," test_model_process",[36,37656,37657],{"class":42},"(model,test_dataloader):\n",[36,37659,37660],{"class":38,"line":772},[36,37661,37662],{"class":3943},"    # 将模型放到设备当中，先进行判断\n",[36,37664,37665,37667,37669,37671,37673,37675,37677],{"class":38,"line":778},[36,37666,34831],{"class":42},[36,37668,47],{"class":46},[36,37670,34838],{"class":105},[36,37672,5428],{"class":46},[36,37674,34843],{"class":42},[36,37676,5425],{"class":46},[36,37678,37679],{"class":105}," \"cpu\"\n",[36,37681,37682,37684,37686],{"class":38,"line":783},[36,37683,34883],{"class":42},[36,37685,47],{"class":46},[36,37687,35875],{"class":42},[36,37689,37690],{"class":38,"line":789},[36,37691,659],{"emptyLinePlaceholder":658},[36,37693,37694],{"class":38,"line":795},[36,37695,37696],{"class":3943},"    # 设置初始化参数\n",[36,37698,37699,37702,37704],{"class":38,"line":801},[36,37700,37701],{"class":42},"    test_corrects",[36,37703,47],{"class":46},[36,37705,35928],{"class":112},[36,37707,37708,37711,37713],{"class":38,"line":807},[36,37709,37710],{"class":42},"    test_num",[36,37712,47],{"class":46},[36,37714,6787],{"class":112},[36,37716,37717],{"class":38,"line":813},[36,37718,659],{"emptyLinePlaceholder":658},[36,37720,37721],{"class":38,"line":819},[36,37722,37723],{"class":3943},"    # 进行模型测试\n",[36,37725,37726],{"class":38,"line":824},[36,37727,37728],{"class":3943},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[36,37730,37731],{"class":38,"line":829},[36,37732,37733],{"class":3943},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[36,37735,37736,37739],{"class":38,"line":851},[36,37737,37738],{"class":46},"    with",[36,37740,36444],{"class":42},[36,37742,37743],{"class":38,"line":868},[36,37744,37745],{"class":3943},"        # 从数据中进行\n",[36,37747,37748,37750,37753,37755],{"class":38,"line":873},[36,37749,1613],{"class":46},[36,37751,37752],{"class":42}," test_data_x,test_data_y ",[36,37754,1619],{"class":46},[36,37756,37757],{"class":42}," test_dataloader:\n",[36,37759,37760,37763,37765],{"class":38,"line":891},[36,37761,37762],{"class":42},"            test_data_x",[36,37764,47],{"class":46},[36,37766,37767],{"class":42},"test_data_x.to(device)\n",[36,37769,37770,37773,37775],{"class":38,"line":906},[36,37771,37772],{"class":42},"            test_data_y",[36,37774,47],{"class":46},[36,37776,37777],{"class":42},"test_data_y.to(device)\n",[36,37779,37780],{"class":38,"line":925},[36,37781,37782],{"class":3943},"            # 设置为验证模式\n",[36,37784,37785],{"class":38,"line":943},[36,37786,36435],{"class":42},[36,37788,37789],{"class":38,"line":948},[36,37790,37791],{"class":3943},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[36,37793,37794,37796,37798],{"class":38,"line":971},[36,37795,36238],{"class":42},[36,37797,47],{"class":46},[36,37799,37800],{"class":42},"model(test_data_x)\n",[36,37802,37803],{"class":38,"line":992},[36,37804,37805],{"class":3943},"            # 查找每一行中最大值对应的下标\n",[36,37807,37808,37810,37812,37814,37816,37818,37820],{"class":38,"line":1020},[36,37809,36253],{"class":42},[36,37811,47],{"class":46},[36,37813,36258],{"class":42},[36,37815,36261],{"class":468},[36,37817,47],{"class":46},[36,37819,4092],{"class":112},[36,37821,922],{"class":42},[36,37823,37824],{"class":38,"line":1036},[36,37825,37826],{"class":3943},"            # 计算正确率\n",[36,37828,37829],{"class":38,"line":1041},[36,37830,37831],{"class":3943},"            # .data表示是一个不带梯度信息的tensor\n",[36,37833,37834],{"class":38,"line":1052},[36,37835,37836],{"class":3943},"            # 如果预测正确，则准确度test_corrects加1\n",[36,37838,37839,37842,37844,37846,37848],{"class":38,"line":1065},[36,37840,37841],{"class":42},"            test_corrects",[36,37843,1658],{"class":46},[36,37845,36351],{"class":42},[36,37847,6652],{"class":46},[36,37849,37850],{"class":42},"test_data_y.data)\n",[36,37852,37853],{"class":38,"line":1077},[36,37854,37855],{"class":3943},"            # 将所有的测试样本进行累计\n",[36,37857,37858,37861,37863,37866,37868],{"class":38,"line":1082},[36,37859,37860],{"class":42},"            test_num",[36,37862,1658],{"class":46},[36,37864,37865],{"class":42},"test_data_x.size(",[36,37867,1859],{"class":112},[36,37869,922],{"class":42},[36,37871,37872],{"class":38,"line":1125},[36,37873,659],{"emptyLinePlaceholder":658},[36,37875,37876],{"class":38,"line":1164},[36,37877,37878],{"class":3943},"        # 计算准确度\n",[36,37880,37881,37884,37886,37889,37891],{"class":38,"line":1169},[36,37882,37883],{"class":42},"        test_acc",[36,37885,47],{"class":46},[36,37887,37888],{"class":42},"test_corrects.double().item()",[36,37890,4455],{"class":46},[36,37892,37893],{"class":42},"test_num\n",[36,37895,37896],{"class":38,"line":1180},[36,37897,37898],{"class":3943},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[36,37900,37901,37903,37905,37908],{"class":38,"line":1198},[36,37902,1960],{"class":112},[36,37904,495],{"class":42},[36,37906,37907],{"class":105},"\"测试的准确率：\"",[36,37909,37910],{"class":42},",test_acc)\n",[36,37912,37913],{"class":38,"line":1215},[36,37914,659],{"emptyLinePlaceholder":658},[36,37916,37917],{"class":38,"line":1236},[36,37918,37919],{"class":3943},"# 实现模型的测试功能\n",[36,37921,37922,37924,37926,37928,37930],{"class":38,"line":1245},[36,37923,2067],{"class":46},[36,37925,2070],{"class":112},[36,37927,6652],{"class":46},[36,37929,34819],{"class":105},[36,37931,888],{"class":42},[36,37933,37934],{"class":38,"line":1250},[36,37935,37936],{"class":3943},"    # 加载模型\n",[36,37938,37939,37941,37943],{"class":38,"line":1265},[36,37940,34883],{"class":42},[36,37942,47],{"class":46},[36,37944,37385],{"class":42},[36,37946,37947],{"class":38,"line":1281},[36,37948,37949],{"class":3943},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[36,37951,37952],{"class":38,"line":1297},[36,37953,37954],{"class":3943},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[36,37956,37957,37960,37963],{"class":38,"line":1314},[36,37958,37959],{"class":42},"    model.load_state_dict(torch.load(",[36,37961,37962],{"class":105},"'best_model.pth'",[36,37964,2005],{"class":42},[36,37966,37967],{"class":38,"line":1336},[36,37968,37969],{"class":3943},"    # 数据加载\n",[36,37971,37972,37974,37976],{"class":38,"line":1356},[36,37973,37582],{"class":42},[36,37975,47],{"class":46},[36,37977,37978],{"class":42},"test_data_process()\n",[36,37980,37981],{"class":38,"line":1361},[36,37982,37983],{"class":3943},"    # 加载模型测试的函数\n",[36,37985,37986],{"class":38,"line":1407},[36,37987,37988],{"class":42},"    test_model_process(model,test_dataloader)\n",[36,37990,37991],{"class":38,"line":1423},[36,37992,659],{"emptyLinePlaceholder":658},[36,37994,37995],{"class":38,"line":1439},[36,37996,37997],{"class":3943},"    # 验证集推理实现：\n",[36,37999,38000],{"class":38,"line":1444},[36,38001,38002],{"class":3943},"    # 加载数据加载的更详细一些\n",[36,38004,38005,38007,38009,38011,38013,38015,38017],{"class":38,"line":1486},[36,38006,34831],{"class":42},[36,38008,47],{"class":46},[36,38010,34838],{"class":105},[36,38012,5428],{"class":46},[36,38014,34843],{"class":42},[36,38016,5425],{"class":46},[36,38018,37679],{"class":105},[36,38020,38021,38023,38025],{"class":38,"line":1499},[36,38022,34883],{"class":42},[36,38024,47],{"class":46},[36,38026,35875],{"class":42},[36,38028,38029],{"class":38,"line":1513},[36,38030,38031],{"class":3943},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[36,38033,38034],{"class":38,"line":1518},[36,38035,38036],{"class":3943},"    # 顺序不可改变\n",[36,38038,38039,38042,38044,38046,38049,38051,38054,38056,38059,38061,38064,38066,38069,38071,38074,38076,38079,38081,38084,38086,38089,38091,38094],{"class":38,"line":1529},[36,38040,38041],{"class":42},"    classes",[36,38043,47],{"class":46},[36,38045,4760],{"class":42},[36,38047,38048],{"class":105},"'T-shirt\u002Ftop'",[36,38050,4253],{"class":42},[36,38052,38053],{"class":105},"'Trouser'",[36,38055,4253],{"class":42},[36,38057,38058],{"class":105},"'Pullover'",[36,38060,4253],{"class":42},[36,38062,38063],{"class":105},"'Dress'",[36,38065,4253],{"class":42},[36,38067,38068],{"class":105},"'Coat'",[36,38070,4253],{"class":42},[36,38072,38073],{"class":105},"'Sandal'",[36,38075,4253],{"class":42},[36,38077,38078],{"class":105},"'Shirt'",[36,38080,4253],{"class":42},[36,38082,38083],{"class":105},"'Sneaker'",[36,38085,4253],{"class":42},[36,38087,38088],{"class":105},"'Bag'",[36,38090,4253],{"class":42},[36,38092,38093],{"class":105},"'Ankle boot'",[36,38095,36806],{"class":42},[36,38097,38098,38100],{"class":38,"line":1539},[36,38099,37738],{"class":46},[36,38101,36444],{"class":42},[36,38103,38104],{"class":38,"line":1544},[36,38105,38106],{"class":3943},"        # 将数据和标签都放到设备当中\n",[36,38108,38109,38111,38114,38116],{"class":38,"line":1555},[36,38110,1613],{"class":46},[36,38112,38113],{"class":42}," b_x,b_y ",[36,38115,1619],{"class":46},[36,38117,37757],{"class":42},[36,38119,38120,38122,38124],{"class":38,"line":1572},[36,38121,36193],{"class":42},[36,38123,47],{"class":46},[36,38125,36198],{"class":42},[36,38127,38128,38130,38132],{"class":38,"line":1592},[36,38129,36208],{"class":42},[36,38131,47],{"class":46},[36,38133,36213],{"class":42},[36,38135,38136],{"class":38,"line":1597},[36,38137,659],{"emptyLinePlaceholder":658},[36,38139,38140],{"class":38,"line":1610},[36,38141,38142],{"class":3943},"            # 设置模型为验证模式\n",[36,38144,38145],{"class":38,"line":1632},[36,38146,36435],{"class":42},[36,38148,38149],{"class":38,"line":1646},[36,38150,38151],{"class":3943},"            # 模型推理结果\n",[36,38153,38154,38156,38158],{"class":38,"line":1651},[36,38155,36238],{"class":42},[36,38157,47],{"class":46},[36,38159,36243],{"class":42},[36,38161,38162],{"class":38,"line":1664},[36,38163,38164],{"class":3943},"            # 获取最大下标，最大下标就是类别号\n",[36,38166,38167,38169,38171,38173,38175,38177,38179],{"class":38,"line":1669},[36,38168,36253],{"class":42},[36,38170,47],{"class":46},[36,38172,36258],{"class":42},[36,38174,36261],{"class":468},[36,38176,47],{"class":46},[36,38178,4092],{"class":112},[36,38180,922],{"class":42},[36,38182,38183],{"class":38,"line":1681},[36,38184,38185],{"class":3943},"            # 取出张量中的数值\n",[36,38187,38188,38191,38193],{"class":38,"line":1694},[36,38189,38190],{"class":42},"            result",[36,38192,47],{"class":46},[36,38194,38195],{"class":42},"pre_lab.item()\n",[36,38197,38198,38201,38203],{"class":38,"line":1699},[36,38199,38200],{"class":42},"            label",[36,38202,47],{"class":46},[36,38204,38205],{"class":42},"b_y.item()\n",[36,38207,38208,38211,38213,38216,38219,38222,38224,38227],{"class":38,"line":1714},[36,38209,38210],{"class":112},"            print",[36,38212,495],{"class":42},[36,38214,38215],{"class":105},"\"预测值：\"",[36,38217,38218],{"class":42},",classes[result],",[36,38220,38221],{"class":105},"\"------\"",[36,38223,4253],{"class":42},[36,38225,38226],{"class":105},"\"真实值：\"",[36,38228,38229],{"class":42},",classes[label])\n",[19,38231,38232],{},"（2）AlexNet",[211,38234,38235],{},[214,38236,38237],{},"神经网络构建",[26,38239,38241],{"className":28,"code":38240,"language":30,"meta":31,"style":31},"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",[33,38242,38243,38249,38259,38269,38281,38285,38302,38310,38325,38337,38379,38406,38449,38475,38519,38562,38605,38632,38636,38646,38651,38679,38698,38717,38721,38726,38734,38749,38759,38773,38783,38798,38813,38828,38839,38843,38848,38858,38873,38878,38892,38907,38919,38924,38935,38940,38946,38951,38963,38983,38988,38997],{"__ignoreMap":31},[36,38244,38245,38247],{"class":38,"line":39},[36,38246,611],{"class":46},[36,38248,34000],{"class":42},[36,38250,38251,38253,38255,38257],{"class":38,"line":53},[36,38252,645],{"class":46},[36,38254,34342],{"class":42},[36,38256,611],{"class":46},[36,38258,34347],{"class":42},[36,38260,38261,38263,38265,38267],{"class":38,"line":196},[36,38262,645],{"class":46},[36,38264,34359],{"class":42},[36,38266,611],{"class":46},[36,38268,34364],{"class":42},[36,38270,38271,38273,38276,38278],{"class":38,"line":642},[36,38272,611],{"class":46},[36,38274,38275],{"class":42}," torch.nn.functional ",[36,38277,617],{"class":46},[36,38279,38280],{"class":42}," F\n",[36,38282,38283],{"class":38,"line":655},[36,38284,659],{"emptyLinePlaceholder":658},[36,38286,38287,38289,38292,38294,38296,38298,38300],{"class":38,"line":662},[36,38288,832],{"class":46},[36,38290,38291],{"class":101}," AlexNet",[36,38293,495],{"class":42},[36,38295,34380],{"class":101},[36,38297,842],{"class":42},[36,38299,34385],{"class":101},[36,38301,848],{"class":42},[36,38303,38304,38306,38308],{"class":38,"line":667},[36,38305,876],{"class":46},[36,38307,879],{"class":112},[36,38309,34406],{"class":42},[36,38311,38312,38314,38317,38319,38321,38323],{"class":38,"line":679},[36,38313,894],{"class":112},[36,38315,38316],{"class":42},"(AlexNet,",[36,38318,457],{"class":112},[36,38320,34423],{"class":42},[36,38322,900],{"class":112},[36,38324,903],{"class":42},[36,38326,38327,38329,38332,38334],{"class":38,"line":685},[36,38328,909],{"class":112},[36,38330,38331],{"class":42},".ReLu",[36,38333,47],{"class":46},[36,38335,38336],{"class":42},"nn.ReLU()\n",[36,38338,38339,38341,38343,38345,38347,38349,38351,38353,38355,38357,38359,38361,38363,38365,38367,38369,38371,38373,38375,38377],{"class":38,"line":691},[36,38340,909],{"class":112},[36,38342,34443],{"class":42},[36,38344,47],{"class":46},[36,38346,34448],{"class":42},[36,38348,34451],{"class":468},[36,38350,47],{"class":46},[36,38352,4092],{"class":112},[36,38354,4253],{"class":42},[36,38356,34460],{"class":468},[36,38358,47],{"class":46},[36,38360,4084],{"class":112},[36,38362,4253],{"class":42},[36,38364,34469],{"class":468},[36,38366,47],{"class":46},[36,38368,4345],{"class":112},[36,38370,4253],{"class":42},[36,38372,34524],{"class":468},[36,38374,47],{"class":46},[36,38376,4168],{"class":112},[36,38378,922],{"class":42},[36,38380,38381,38383,38385,38387,38390,38392,38394,38396,38398,38400,38402,38404],{"class":38,"line":696},[36,38382,909],{"class":112},[36,38384,34508],{"class":42},[36,38386,47],{"class":46},[36,38388,38389],{"class":42},"nn.MaxPool2d(",[36,38391,34469],{"class":468},[36,38393,47],{"class":46},[36,38395,1982],{"class":112},[36,38397,4253],{"class":42},[36,38399,34524],{"class":468},[36,38401,47],{"class":46},[36,38403,498],{"class":112},[36,38405,922],{"class":42},[36,38407,38408,38410,38412,38414,38416,38418,38420,38422,38424,38426,38428,38431,38433,38435,38437,38439,38441,38443,38445,38447],{"class":38,"line":702},[36,38409,909],{"class":112},[36,38411,34537],{"class":42},[36,38413,47],{"class":46},[36,38415,34448],{"class":42},[36,38417,34451],{"class":468},[36,38419,47],{"class":46},[36,38421,4084],{"class":112},[36,38423,4253],{"class":42},[36,38425,34460],{"class":468},[36,38427,47],{"class":46},[36,38429,38430],{"class":112},"256",[36,38432,4253],{"class":42},[36,38434,34469],{"class":468},[36,38436,47],{"class":46},[36,38438,4194],{"class":112},[36,38440,4253],{"class":42},[36,38442,34478],{"class":468},[36,38444,47],{"class":46},[36,38446,498],{"class":112},[36,38448,922],{"class":42},[36,38450,38451,38453,38455,38457,38459,38461,38463,38465,38467,38469,38471,38473],{"class":38,"line":708},[36,38452,909],{"class":112},[36,38454,34572],{"class":42},[36,38456,47],{"class":46},[36,38458,38389],{"class":42},[36,38460,34469],{"class":468},[36,38462,47],{"class":46},[36,38464,1982],{"class":112},[36,38466,4253],{"class":42},[36,38468,34524],{"class":468},[36,38470,47],{"class":46},[36,38472,498],{"class":112},[36,38474,922],{"class":42},[36,38476,38477,38479,38482,38484,38486,38488,38490,38492,38494,38496,38498,38501,38503,38505,38507,38509,38511,38513,38515,38517],{"class":38,"line":713},[36,38478,909],{"class":112},[36,38480,38481],{"class":42},".c5",[36,38483,47],{"class":46},[36,38485,34448],{"class":42},[36,38487,34451],{"class":468},[36,38489,47],{"class":46},[36,38491,38430],{"class":112},[36,38493,4253],{"class":42},[36,38495,34460],{"class":468},[36,38497,47],{"class":46},[36,38499,38500],{"class":112},"384",[36,38502,4253],{"class":42},[36,38504,34469],{"class":468},[36,38506,47],{"class":46},[36,38508,1982],{"class":112},[36,38510,4253],{"class":42},[36,38512,34478],{"class":468},[36,38514,47],{"class":46},[36,38516,4092],{"class":112},[36,38518,922],{"class":42},[36,38520,38521,38523,38526,38528,38530,38532,38534,38536,38538,38540,38542,38544,38546,38548,38550,38552,38554,38556,38558,38560],{"class":38,"line":719},[36,38522,909],{"class":112},[36,38524,38525],{"class":42},".c6",[36,38527,47],{"class":46},[36,38529,34448],{"class":42},[36,38531,34451],{"class":468},[36,38533,47],{"class":46},[36,38535,38500],{"class":112},[36,38537,4253],{"class":42},[36,38539,34460],{"class":468},[36,38541,47],{"class":46},[36,38543,38500],{"class":112},[36,38545,4253],{"class":42},[36,38547,34469],{"class":468},[36,38549,47],{"class":46},[36,38551,1982],{"class":112},[36,38553,4253],{"class":42},[36,38555,34478],{"class":468},[36,38557,47],{"class":46},[36,38559,4092],{"class":112},[36,38561,922],{"class":42},[36,38563,38564,38566,38569,38571,38573,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595,38597,38599,38601,38603],{"class":38,"line":725},[36,38565,909],{"class":112},[36,38567,38568],{"class":42},".c7",[36,38570,47],{"class":46},[36,38572,34448],{"class":42},[36,38574,34451],{"class":468},[36,38576,47],{"class":46},[36,38578,38500],{"class":112},[36,38580,4253],{"class":42},[36,38582,34460],{"class":468},[36,38584,47],{"class":46},[36,38586,38430],{"class":112},[36,38588,4253],{"class":42},[36,38590,34469],{"class":468},[36,38592,47],{"class":46},[36,38594,1982],{"class":112},[36,38596,4253],{"class":42},[36,38598,34478],{"class":468},[36,38600,47],{"class":46},[36,38602,4092],{"class":112},[36,38604,922],{"class":42},[36,38606,38607,38609,38612,38614,38616,38618,38620,38622,38624,38626,38628,38630],{"class":38,"line":731},[36,38608,909],{"class":112},[36,38610,38611],{"class":42},".s8",[36,38613,47],{"class":46},[36,38615,38389],{"class":42},[36,38617,34469],{"class":468},[36,38619,47],{"class":46},[36,38621,1982],{"class":112},[36,38623,4253],{"class":42},[36,38625,34524],{"class":468},[36,38627,47],{"class":46},[36,38629,498],{"class":112},[36,38631,922],{"class":42},[36,38633,38634],{"class":38,"line":736},[36,38635,34597],{"class":3943},[36,38637,38638,38640,38642,38644],{"class":38,"line":742},[36,38639,909],{"class":112},[36,38641,34604],{"class":42},[36,38643,47],{"class":46},[36,38645,34609],{"class":42},[36,38647,38648],{"class":38,"line":748},[36,38649,38650],{"class":3943},"       # 定义全连接层\n",[36,38652,38653,38655,38658,38660,38662,38664,38666,38668,38670,38672,38674,38677],{"class":38,"line":754},[36,38654,909],{"class":112},[36,38656,38657],{"class":42},".f1",[36,38659,47],{"class":46},[36,38661,34626],{"class":42},[36,38663,4219],{"class":112},[36,38665,1372],{"class":46},[36,38667,4219],{"class":112},[36,38669,1372],{"class":46},[36,38671,38430],{"class":112},[36,38673,4253],{"class":42},[36,38675,38676],{"class":112},"4096",[36,38678,922],{"class":42},[36,38680,38681,38683,38686,38688,38690,38692,38694,38696],{"class":38,"line":760},[36,38682,909],{"class":112},[36,38684,38685],{"class":42},".f2",[36,38687,47],{"class":46},[36,38689,34626],{"class":42},[36,38691,38676],{"class":112},[36,38693,4253],{"class":42},[36,38695,38676],{"class":112},[36,38697,922],{"class":42},[36,38699,38700,38702,38705,38707,38709,38711,38713,38715],{"class":38,"line":766},[36,38701,909],{"class":112},[36,38703,38704],{"class":42},".f3",[36,38706,47],{"class":46},[36,38708,34626],{"class":42},[36,38710,38676],{"class":112},[36,38712,4253],{"class":42},[36,38714,554],{"class":112},[36,38716,922],{"class":42},[36,38718,38719],{"class":38,"line":772},[36,38720,659],{"emptyLinePlaceholder":658},[36,38722,38723],{"class":38,"line":778},[36,38724,38725],{"class":3943},"    # 定义前向传播\n",[36,38727,38728,38730,38732],{"class":38,"line":783},[36,38729,876],{"class":46},[36,38731,34688],{"class":101},[36,38733,34691],{"class":42},[36,38735,38736,38738,38740,38742,38745,38747],{"class":38,"line":789},[36,38737,34696],{"class":42},[36,38739,47],{"class":46},[36,38741,457],{"class":112},[36,38743,38744],{"class":42},".ReLu(",[36,38746,457],{"class":112},[36,38748,34708],{"class":42},[36,38750,38751,38753,38755,38757],{"class":38,"line":795},[36,38752,34696],{"class":42},[36,38754,47],{"class":46},[36,38756,457],{"class":112},[36,38758,34719],{"class":42},[36,38760,38761,38763,38765,38767,38769,38771],{"class":38,"line":801},[36,38762,34696],{"class":42},[36,38764,47],{"class":46},[36,38766,457],{"class":112},[36,38768,38744],{"class":42},[36,38770,457],{"class":112},[36,38772,34734],{"class":42},[36,38774,38775,38777,38779,38781],{"class":38,"line":807},[36,38776,34696],{"class":42},[36,38778,47],{"class":46},[36,38780,457],{"class":112},[36,38782,34745],{"class":42},[36,38784,38785,38787,38789,38791,38793,38795],{"class":38,"line":813},[36,38786,34696],{"class":42},[36,38788,47],{"class":46},[36,38790,457],{"class":112},[36,38792,38744],{"class":42},[36,38794,457],{"class":112},[36,38796,38797],{"class":42},".c5(x))\n",[36,38799,38800,38802,38804,38806,38808,38810],{"class":38,"line":819},[36,38801,34696],{"class":42},[36,38803,47],{"class":46},[36,38805,457],{"class":112},[36,38807,38744],{"class":42},[36,38809,457],{"class":112},[36,38811,38812],{"class":42},".c6(x))\n",[36,38814,38815,38817,38819,38821,38823,38825],{"class":38,"line":824},[36,38816,34696],{"class":42},[36,38818,47],{"class":46},[36,38820,457],{"class":112},[36,38822,38744],{"class":42},[36,38824,457],{"class":112},[36,38826,38827],{"class":42},".c7(x))\n",[36,38829,38830,38832,38834,38836],{"class":38,"line":829},[36,38831,34696],{"class":42},[36,38833,47],{"class":46},[36,38835,457],{"class":112},[36,38837,38838],{"class":42},".s8(x)\n",[36,38840,38841],{"class":38,"line":851},[36,38842,659],{"emptyLinePlaceholder":658},[36,38844,38845],{"class":38,"line":868},[36,38846,38847],{"class":3943},"        # 展平加线性全连接层\n",[36,38849,38850,38852,38854,38856],{"class":38,"line":873},[36,38851,34696],{"class":42},[36,38853,47],{"class":46},[36,38855,457],{"class":112},[36,38857,34756],{"class":42},[36,38859,38860,38862,38864,38866,38868,38870],{"class":38,"line":891},[36,38861,34696],{"class":42},[36,38863,47],{"class":46},[36,38865,457],{"class":112},[36,38867,38744],{"class":42},[36,38869,457],{"class":112},[36,38871,38872],{"class":42},".f1(x))\n",[36,38874,38875],{"class":38,"line":906},[36,38876,38877],{"class":3943},"        # 还需要dropout对神经元随机进行失活\n",[36,38879,38880,38882,38884,38887,38890],{"class":38,"line":925},[36,38881,34696],{"class":42},[36,38883,47],{"class":46},[36,38885,38886],{"class":42},"F.dropout(x,",[36,38888,38889],{"class":112},"0.5",[36,38891,922],{"class":42},[36,38893,38894,38896,38898,38900,38902,38904],{"class":38,"line":943},[36,38895,34696],{"class":42},[36,38897,47],{"class":46},[36,38899,457],{"class":112},[36,38901,38744],{"class":42},[36,38903,457],{"class":112},[36,38905,38906],{"class":42},".f2(x))\n",[36,38908,38909,38911,38913,38915,38917],{"class":38,"line":948},[36,38910,34696],{"class":42},[36,38912,47],{"class":46},[36,38914,38886],{"class":42},[36,38916,38889],{"class":112},[36,38918,922],{"class":42},[36,38920,38921],{"class":38,"line":971},[36,38922,38923],{"class":3943},"        # 直接输出\n",[36,38925,38926,38928,38930,38932],{"class":38,"line":992},[36,38927,34696],{"class":42},[36,38929,47],{"class":46},[36,38931,457],{"class":112},[36,38933,38934],{"class":42},".f3(x)\n",[36,38936,38937],{"class":38,"line":1020},[36,38938,38939],{"class":3943},"        # 前向传播输出\n",[36,38941,38942,38944],{"class":38,"line":1036},[36,38943,1239],{"class":46},[36,38945,34804],{"class":42},[36,38947,38948],{"class":38,"line":1041},[36,38949,38950],{"class":3943},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[36,38952,38953,38955,38957,38959,38961],{"class":38,"line":1052},[36,38954,2067],{"class":46},[36,38956,2070],{"class":112},[36,38958,6652],{"class":46},[36,38960,34819],{"class":105},[36,38962,888],{"class":42},[36,38964,38965,38967,38969,38971,38973,38975,38977,38979,38981],{"class":38,"line":1065},[36,38966,34831],{"class":42},[36,38968,47],{"class":46},[36,38970,34055],{"class":42},[36,38972,34838],{"class":105},[36,38974,5428],{"class":46},[36,38976,34843],{"class":42},[36,38978,5425],{"class":46},[36,38980,34080],{"class":105},[36,38982,922],{"class":42},[36,38984,38985],{"class":38,"line":1077},[36,38986,38987],{"class":3943},"    # 模型实例化，然后将实例化的模型放到设备中\n",[36,38989,38990,38992,38994],{"class":38,"line":1082},[36,38991,34883],{"class":42},[36,38993,47],{"class":46},[36,38995,38996],{"class":42},"AlexNet().to(device)\n",[36,38998,38999,39001,39003,39005,39007,39010,39012,39014],{"class":38,"line":1125},[36,39000,1867],{"class":112},[36,39002,34895],{"class":42},[36,39004,4092],{"class":112},[36,39006,4253],{"class":42},[36,39008,39009],{"class":112},"227",[36,39011,4253],{"class":42},[36,39013,39009],{"class":112},[36,39015,34908],{"class":42},[211,39017,39018],{"start":53},[214,39019,34921],{},[26,39021,39023],{"className":28,"code":39022,"language":30,"meta":31,"style":31},"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",[33,39024,39025,39031,39037,39047,39053,39063,39073,39083,39093,39103,39107,39118,39128,39132,39136,39140,39148,39160,39170,39186,39196,39228,39242,39252,39262,39266,39276,39290,39300,39310,39320,39326,39330,39334,39338,39342,39346,39354,39374,39378,39382,39386,39390,39394,39410,39414,39418,39426,39430,39434,39442,39446,39450,39454,39462,39466,39470,39474,39478,39486,39490,39498,39502,39510,39514,39522,39526,39534,39538,39542,39550,39554,39558,39562,39574,39598,39612,39616,39620,39624,39632,39636,39644,39648,39656,39660,39668,39672,39680,39684,39692,39696,39708,39712,39720,39724,39732,39736,39740,39744,39748,39756,39760,39776,39780,39788,39792,39796,39800,39804,39808,39812,39816,39832,39836,39848,39852,39864,39868,39880,39884,39892,39896,39904,39908,39912,39917,39923,39927,39936,39940,39957,39961,39970,39974,39992,40005,40010,40023,40027,40031,40039,40043,40047,40055,40059,40067,40071,40079,40083,40087,40129,40171,40175,40179,40195,40199,40215,40219,40223,40231,40235,40239,40251,40289,40294,40299,40308,40312,40326,40336,40342,40348,40354,40360,40364,40368,40374,40378,40382,40390,40394,40412,40416,40420,40424,40440,40444,40448,40452,40456,40460,40480,40500,40504,40508,40512,40520,40528,40532,40548,40568,40588,40592,40596,40604,40612,40616,40620,40624,40636,40640,40650,40658,40675],{"__ignoreMap":31},[36,39026,39027,39029],{"class":38,"line":39},[36,39028,611],{"class":46},[36,39030,35410],{"class":42},[36,39032,39033,39035],{"class":38,"line":53},[36,39034,611],{"class":46},[36,39036,35417],{"class":42},[36,39038,39039,39041,39043,39045],{"class":38,"line":196},[36,39040,611],{"class":46},[36,39042,35428],{"class":42},[36,39044,617],{"class":46},[36,39046,35433],{"class":42},[36,39048,39049,39051],{"class":38,"line":642},[36,39050,611],{"class":46},[36,39052,34000],{"class":42},[36,39054,39055,39057,39059,39061],{"class":38,"line":655},[36,39056,645],{"class":46},[36,39058,35005],{"class":42},[36,39060,611],{"class":46},[36,39062,35450],{"class":42},[36,39064,39065,39067,39069,39071],{"class":38,"line":662},[36,39066,645],{"class":46},[36,39068,34961],{"class":42},[36,39070,611],{"class":46},[36,39072,34966],{"class":42},[36,39074,39075,39077,39079,39081],{"class":38,"line":667},[36,39076,645],{"class":46},[36,39078,34988],{"class":42},[36,39080,611],{"class":46},[36,39082,34993],{"class":42},[36,39084,39085,39087,39089,39091],{"class":38,"line":679},[36,39086,611],{"class":46},[36,39088,35005],{"class":42},[36,39090,617],{"class":46},[36,39092,35010],{"class":42},[36,39094,39095,39097,39099,39101],{"class":38,"line":685},[36,39096,611],{"class":46},[36,39098,35022],{"class":42},[36,39100,617],{"class":46},[36,39102,35027],{"class":42},[36,39104,39105],{"class":38,"line":691},[36,39106,35495],{"class":3943},[36,39108,39109,39111,39113,39115],{"class":38,"line":696},[36,39110,645],{"class":46},[36,39112,35502],{"class":42},[36,39114,611],{"class":46},[36,39116,39117],{"class":42}," AlexNet\n",[36,39119,39120,39122,39124,39126],{"class":38,"line":702},[36,39121,645],{"class":46},[36,39123,34342],{"class":42},[36,39125,611],{"class":46},[36,39127,34347],{"class":42},[36,39129,39130],{"class":38,"line":708},[36,39131,659],{"emptyLinePlaceholder":658},[36,39133,39134],{"class":38,"line":713},[36,39135,659],{"emptyLinePlaceholder":658},[36,39137,39138],{"class":38,"line":719},[36,39139,35530],{"class":3943},[36,39141,39142,39144,39146],{"class":38,"line":725},[36,39143,1820],{"class":46},[36,39145,35537],{"class":101},[36,39147,35540],{"class":42},[36,39149,39150,39152,39154,39156,39158],{"class":38,"line":731},[36,39151,35545],{"class":42},[36,39153,47],{"class":46},[36,39155,35045],{"class":42},[36,39157,35053],{"class":105},[36,39159,35056],{"class":42},[36,39161,39162,39164,39166,39168],{"class":38,"line":736},[36,39163,35558],{"class":468},[36,39165,47],{"class":46},[36,39167,35066],{"class":112},[36,39169,35056],{"class":42},[36,39171,39172,39174,39176,39178,39180,39182,39184],{"class":38,"line":742},[36,39173,35569],{"class":468},[36,39175,47],{"class":46},[36,39177,35083],{"class":42},[36,39179,1476],{"class":468},[36,39181,47],{"class":46},[36,39183,39009],{"class":112},[36,39185,35093],{"class":42},[36,39187,39188,39190,39192,39194],{"class":38,"line":748},[36,39189,35586],{"class":468},[36,39191,47],{"class":46},[36,39193,35066],{"class":112},[36,39195,922],{"class":42},[36,39197,39198,39200,39202,39204,39206,39208,39210,39212,39214,39216,39218,39220,39222,39224,39226],{"class":38,"line":754},[36,39199,35597],{"class":42},[36,39201,47],{"class":46},[36,39203,35602],{"class":42},[36,39205,1976],{"class":112},[36,39207,495],{"class":42},[36,39209,35609],{"class":112},[36,39211,1372],{"class":46},[36,39213,11049],{"class":112},[36,39215,35616],{"class":42},[36,39217,1976],{"class":112},[36,39219,495],{"class":42},[36,39221,35623],{"class":112},[36,39223,1372],{"class":46},[36,39225,11049],{"class":112},[36,39227,35630],{"class":42},[36,39229,39230,39232,39234,39236,39238,39240],{"class":38,"line":760},[36,39231,35635],{"class":42},[36,39233,47],{"class":46},[36,39235,35640],{"class":42},[36,39237,35126],{"class":468},[36,39239,47],{"class":46},[36,39241,35131],{"class":42},[36,39243,39244,39246,39248,39250],{"class":38,"line":766},[36,39245,35651],{"class":468},[36,39247,47],{"class":46},[36,39249,35656],{"class":112},[36,39251,35056],{"class":42},[36,39253,39254,39256,39258,39260],{"class":38,"line":772},[36,39255,35663],{"class":468},[36,39257,47],{"class":46},[36,39259,35066],{"class":112},[36,39261,35056],{"class":42},[36,39263,39264],{"class":38,"line":778},[36,39265,35674],{"class":3943},[36,39267,39268,39270,39272,39274],{"class":38,"line":783},[36,39269,35679],{"class":468},[36,39271,47],{"class":46},[36,39273,4270],{"class":112},[36,39275,922],{"class":42},[36,39277,39278,39280,39282,39284,39286,39288],{"class":38,"line":789},[36,39279,35690],{"class":42},[36,39281,47],{"class":46},[36,39283,35123],{"class":42},[36,39285,35126],{"class":468},[36,39287,47],{"class":46},[36,39289,35701],{"class":42},[36,39291,39292,39294,39296,39298],{"class":38,"line":795},[36,39293,35706],{"class":468},[36,39295,47],{"class":46},[36,39297,35656],{"class":112},[36,39299,35056],{"class":42},[36,39301,39302,39304,39306,39308],{"class":38,"line":801},[36,39303,35717],{"class":468},[36,39305,47],{"class":46},[36,39307,35066],{"class":112},[36,39309,35056],{"class":42},[36,39311,39312,39314,39316,39318],{"class":38,"line":807},[36,39313,35728],{"class":468},[36,39315,47],{"class":46},[36,39317,4270],{"class":112},[36,39319,922],{"class":42},[36,39321,39322,39324],{"class":38,"line":813},[36,39323,7788],{"class":46},[36,39325,35741],{"class":42},[36,39327,39328],{"class":38,"line":819},[36,39329,659],{"emptyLinePlaceholder":658},[36,39331,39332],{"class":38,"line":824},[36,39333,35750],{"class":3943},[36,39335,39336],{"class":38,"line":829},[36,39337,35755],{"class":3943},[36,39339,39340],{"class":38,"line":851},[36,39341,659],{"emptyLinePlaceholder":658},[36,39343,39344],{"class":38,"line":868},[36,39345,35764],{"class":3943},[36,39347,39348,39350,39352],{"class":38,"line":873},[36,39349,1820],{"class":46},[36,39351,35771],{"class":101},[36,39353,35774],{"class":42},[36,39355,39356,39358,39360,39362,39364,39366,39368,39370,39372],{"class":38,"line":891},[36,39357,34831],{"class":42},[36,39359,47],{"class":46},[36,39361,34055],{"class":42},[36,39363,34838],{"class":105},[36,39365,5428],{"class":46},[36,39367,34843],{"class":42},[36,39369,5425],{"class":46},[36,39371,35793],{"class":105},[36,39373,922],{"class":42},[36,39375,39376],{"class":38,"line":906},[36,39377,659],{"emptyLinePlaceholder":658},[36,39379,39380],{"class":38,"line":925},[36,39381,659],{"emptyLinePlaceholder":658},[36,39383,39384],{"class":38,"line":943},[36,39385,35808],{"class":3943},[36,39387,39388],{"class":38,"line":948},[36,39389,35813],{"class":3943},[36,39391,39392],{"class":38,"line":971},[36,39393,35818],{"class":3943},[36,39395,39396,39398,39400,39402,39404,39406,39408],{"class":38,"line":992},[36,39397,35823],{"class":42},[36,39399,47],{"class":46},[36,39401,35828],{"class":42},[36,39403,35831],{"class":468},[36,39405,47],{"class":46},[36,39407,35836],{"class":112},[36,39409,922],{"class":42},[36,39411,39412],{"class":38,"line":1020},[36,39413,659],{"emptyLinePlaceholder":658},[36,39415,39416],{"class":38,"line":1036},[36,39417,35847],{"class":3943},[36,39419,39420,39422,39424],{"class":38,"line":1041},[36,39421,35852],{"class":42},[36,39423,47],{"class":46},[36,39425,35857],{"class":42},[36,39427,39428],{"class":38,"line":1052},[36,39429,659],{"emptyLinePlaceholder":658},[36,39431,39432],{"class":38,"line":1065},[36,39433,35866],{"class":3943},[36,39435,39436,39438,39440],{"class":38,"line":1077},[36,39437,34883],{"class":42},[36,39439,47],{"class":46},[36,39441,35875],{"class":42},[36,39443,39444],{"class":38,"line":1082},[36,39445,35880],{"class":3943},[36,39447,39448],{"class":38,"line":1125},[36,39449,35885],{"class":3943},[36,39451,39452],{"class":38,"line":1164},[36,39453,35890],{"class":3943},[36,39455,39456,39458,39460],{"class":38,"line":1169},[36,39457,35895],{"class":42},[36,39459,47],{"class":46},[36,39461,35900],{"class":42},[36,39463,39464],{"class":38,"line":1180},[36,39465,659],{"emptyLinePlaceholder":658},[36,39467,39468],{"class":38,"line":1198},[36,39469,659],{"emptyLinePlaceholder":658},[36,39471,39472],{"class":38,"line":1215},[36,39473,35913],{"class":3943},[36,39475,39476],{"class":38,"line":1236},[36,39477,35918],{"class":3943},[36,39479,39480,39482,39484],{"class":38,"line":1245},[36,39481,35923],{"class":42},[36,39483,47],{"class":46},[36,39485,35928],{"class":112},[36,39487,39488],{"class":38,"line":1250},[36,39489,35933],{"class":3943},[36,39491,39492,39494,39496],{"class":38,"line":1265},[36,39493,35938],{"class":42},[36,39495,47],{"class":46},[36,39497,35943],{"class":42},[36,39499,39500],{"class":38,"line":1281},[36,39501,35948],{"class":3943},[36,39503,39504,39506,39508],{"class":38,"line":1297},[36,39505,35953],{"class":42},[36,39507,47],{"class":46},[36,39509,35943],{"class":42},[36,39511,39512],{"class":38,"line":1314},[36,39513,35962],{"class":3943},[36,39515,39516,39518,39520],{"class":38,"line":1336},[36,39517,35967],{"class":42},[36,39519,47],{"class":46},[36,39521,35943],{"class":42},[36,39523,39524],{"class":38,"line":1356},[36,39525,35976],{"class":3943},[36,39527,39528,39530,39532],{"class":38,"line":1361},[36,39529,35981],{"class":42},[36,39531,47],{"class":46},[36,39533,35943],{"class":42},[36,39535,39536],{"class":38,"line":1407},[36,39537,659],{"emptyLinePlaceholder":658},[36,39539,39540],{"class":38,"line":1423},[36,39541,35994],{"class":3943},[36,39543,39544,39546,39548],{"class":38,"line":1439},[36,39545,35999],{"class":42},[36,39547,47],{"class":46},[36,39549,36004],{"class":42},[36,39551,39552],{"class":38,"line":1444},[36,39553,659],{"emptyLinePlaceholder":658},[36,39555,39556],{"class":38,"line":1486},[36,39557,659],{"emptyLinePlaceholder":658},[36,39559,39560],{"class":38,"line":1499},[36,39561,36017],{"class":3943},[36,39563,39564,39566,39568,39570,39572],{"class":38,"line":1513},[36,39565,1909],{"class":46},[36,39567,36024],{"class":42},[36,39569,1619],{"class":46},[36,39571,1622],{"class":112},[36,39573,36031],{"class":42},[36,39575,39576,39578,39580,39582,39584,39586,39588,39590,39592,39594,39596],{"class":38,"line":1518},[36,39577,1960],{"class":112},[36,39579,495],{"class":42},[36,39581,36040],{"class":105},[36,39583,3649],{"class":112},[36,39585,4455],{"class":105},[36,39587,3649],{"class":112},[36,39589,4126],{"class":105},[36,39591,36051],{"class":42},[36,39593,1308],{"class":46},[36,39595,4092],{"class":112},[36,39597,2005],{"class":42},[36,39599,39600,39602,39604,39606,39608,39610],{"class":38,"line":1529},[36,39601,1960],{"class":112},[36,39603,495],{"class":42},[36,39605,36066],{"class":105},[36,39607,1372],{"class":46},[36,39609,554],{"class":112},[36,39611,922],{"class":42},[36,39613,39614],{"class":38,"line":1539},[36,39615,659],{"emptyLinePlaceholder":658},[36,39617,39618],{"class":38,"line":1544},[36,39619,36081],{"class":3943},[36,39621,39622],{"class":38,"line":1555},[36,39623,36086],{"class":3943},[36,39625,39626,39628,39630],{"class":38,"line":1572},[36,39627,36091],{"class":42},[36,39629,47],{"class":46},[36,39631,35928],{"class":112},[36,39633,39634],{"class":38,"line":1592},[36,39635,36100],{"class":3943},[36,39637,39638,39640,39642],{"class":38,"line":1597},[36,39639,36105],{"class":42},[36,39641,47],{"class":46},[36,39643,6787],{"class":112},[36,39645,39646],{"class":38,"line":1610},[36,39647,36114],{"class":3943},[36,39649,39650,39652,39654],{"class":38,"line":1632},[36,39651,36119],{"class":42},[36,39653,47],{"class":46},[36,39655,35928],{"class":112},[36,39657,39658],{"class":38,"line":1646},[36,39659,36128],{"class":3943},[36,39661,39662,39664,39666],{"class":38,"line":1651},[36,39663,36133],{"class":42},[36,39665,47],{"class":46},[36,39667,6787],{"class":112},[36,39669,39670],{"class":38,"line":1664},[36,39671,36142],{"class":3943},[36,39673,39674,39676,39678],{"class":38,"line":1669},[36,39675,36147],{"class":42},[36,39677,47],{"class":46},[36,39679,6787],{"class":112},[36,39681,39682],{"class":38,"line":1681},[36,39683,36156],{"class":3943},[36,39685,39686,39688,39690],{"class":38,"line":1694},[36,39687,36161],{"class":42},[36,39689,47],{"class":46},[36,39691,6787],{"class":112},[36,39693,39694],{"class":38,"line":1699},[36,39695,36170],{"class":3943},[36,39697,39698,39700,39702,39704,39706],{"class":38,"line":1714},[36,39699,1613],{"class":46},[36,39701,35190],{"class":42},[36,39703,1619],{"class":46},[36,39705,35195],{"class":112},[36,39707,36183],{"class":42},[36,39709,39710],{"class":38,"line":1729},[36,39711,36188],{"class":3943},[36,39713,39714,39716,39718],{"class":38,"line":1746},[36,39715,36193],{"class":42},[36,39717,47],{"class":46},[36,39719,36198],{"class":42},[36,39721,39722],{"class":38,"line":1751},[36,39723,36203],{"class":3943},[36,39725,39726,39728,39730],{"class":38,"line":1765},[36,39727,36208],{"class":42},[36,39729,47],{"class":46},[36,39731,36213],{"class":42},[36,39733,39734],{"class":38,"line":1783},[36,39735,36218],{"class":3943},[36,39737,39738],{"class":38,"line":1799},[36,39739,36223],{"class":42},[36,39741,39742],{"class":38,"line":1807},[36,39743,36228],{"class":3943},[36,39745,39746],{"class":38,"line":1812},[36,39747,36233],{"class":3943},[36,39749,39750,39752,39754],{"class":38,"line":1817},[36,39751,36238],{"class":42},[36,39753,47],{"class":46},[36,39755,36243],{"class":42},[36,39757,39758],{"class":38,"line":1833},[36,39759,36248],{"class":3943},[36,39761,39762,39764,39766,39768,39770,39772,39774],{"class":38,"line":1844},[36,39763,36253],{"class":42},[36,39765,47],{"class":46},[36,39767,36258],{"class":42},[36,39769,36261],{"class":468},[36,39771,47],{"class":46},[36,39773,4092],{"class":112},[36,39775,922],{"class":42},[36,39777,39778],{"class":38,"line":1864},[36,39779,36272],{"class":3943},[36,39781,39782,39784,39786],{"class":38,"line":1878},[36,39783,36277],{"class":42},[36,39785,47],{"class":46},[36,39787,36282],{"class":42},[36,39789,39790],{"class":38,"line":1891},[36,39791,36287],{"class":3943},[36,39793,39794],{"class":38,"line":1896},[36,39795,36292],{"class":42},[36,39797,39798],{"class":38,"line":1906},[36,39799,36297],{"class":3943},[36,39801,39802],{"class":38,"line":1926},[36,39803,36302],{"class":42},[36,39805,39806],{"class":38,"line":1936},[36,39807,36307],{"class":3943},[36,39809,39810],{"class":38,"line":1946},[36,39811,36312],{"class":42},[36,39813,39814],{"class":38,"line":1957},[36,39815,36317],{"class":3943},[36,39817,39818,39820,39822,39824,39826,39828,39830],{"class":38,"line":2008},[36,39819,36322],{"class":42},[36,39821,1658],{"class":46},[36,39823,36327],{"class":42},[36,39825,1372],{"class":46},[36,39827,36332],{"class":42},[36,39829,1859],{"class":112},[36,39831,922],{"class":42},[36,39833,39834],{"class":38,"line":2022},[36,39835,36341],{"class":3943},[36,39837,39838,39840,39842,39844,39846],{"class":38,"line":2028},[36,39839,36346],{"class":42},[36,39841,1658],{"class":46},[36,39843,36351],{"class":42},[36,39845,6652],{"class":46},[36,39847,36356],{"class":42},[36,39849,39850],{"class":38,"line":2033},[36,39851,36361],{"class":3943},[36,39853,39854,39856,39858,39860,39862],{"class":38,"line":2054},[36,39855,36366],{"class":42},[36,39857,1658],{"class":46},[36,39859,36332],{"class":42},[36,39861,1859],{"class":112},[36,39863,922],{"class":42},[36,39865,39866],{"class":38,"line":2059},[36,39867,36379],{"class":3943},[36,39869,39870,39872,39874,39876,39878],{"class":38,"line":2064},[36,39871,1613],{"class":46},[36,39873,36386],{"class":42},[36,39875,1619],{"class":46},[36,39877,35195],{"class":112},[36,39879,36393],{"class":42},[36,39881,39882],{"class":38,"line":2081},[36,39883,36399],{"class":3943},[36,39885,39886,39888,39890],{"class":38,"line":36396},[36,39887,36193],{"class":42},[36,39889,47],{"class":46},[36,39891,36198],{"class":42},[36,39893,39894],{"class":38,"line":36402},[36,39895,36414],{"class":3943},[36,39897,39898,39900,39902],{"class":38,"line":36411},[36,39899,36208],{"class":42},[36,39901,47],{"class":46},[36,39903,36213],{"class":42},[36,39905,39906],{"class":38,"line":36417},[36,39907,36429],{"class":3943},[36,39909,39910],{"class":38,"line":36426},[36,39911,36435],{"class":42},[36,39913,39914],{"class":38,"line":36432},[36,39915,39916],{"class":3943},"            # 验证时不计算梯度以节省内存\u002F计算\n",[36,39918,39919,39921],{"class":38,"line":36438},[36,39920,36441],{"class":46},[36,39922,36444],{"class":42},[36,39924,39925],{"class":38,"line":36447},[36,39926,36450],{"class":3943},[36,39928,39929,39932,39934],{"class":38,"line":36453},[36,39930,39931],{"class":42},"                output",[36,39933,47],{"class":46},[36,39935,36243],{"class":42},[36,39937,39938],{"class":38,"line":36464},[36,39939,36467],{"class":3943},[36,39941,39942,39945,39947,39949,39951,39953,39955],{"class":38,"line":36470},[36,39943,39944],{"class":42},"                pre_lab",[36,39946,47],{"class":46},[36,39948,36258],{"class":42},[36,39950,36261],{"class":468},[36,39952,47],{"class":46},[36,39954,4092],{"class":112},[36,39956,922],{"class":42},[36,39958,39959],{"class":38,"line":36489},[36,39960,36492],{"class":3943},[36,39962,39963,39966,39968],{"class":38,"line":36495},[36,39964,39965],{"class":42},"                val_batch_loss",[36,39967,47],{"class":46},[36,39969,36282],{"class":42},[36,39971,39972],{"class":38,"line":36506},[36,39973,36509],{"class":3943},[36,39975,39976,39979,39981,39984,39986,39988,39990],{"class":38,"line":36512},[36,39977,39978],{"class":42},"                val_loss",[36,39980,1658],{"class":46},[36,39982,39983],{"class":42},"val_batch_loss.item()",[36,39985,1372],{"class":46},[36,39987,36332],{"class":42},[36,39989,1859],{"class":112},[36,39991,922],{"class":42},[36,39993,39994,39997,39999,40001,40003],{"class":38,"line":36532},[36,39995,39996],{"class":42},"                val_corrects",[36,39998,1658],{"class":46},[36,40000,36351],{"class":42},[36,40002,6652],{"class":46},[36,40004,36356],{"class":42},[36,40006,40007],{"class":38,"line":36548},[36,40008,40009],{"class":3943},"            # 当前用于验证的样本数量\n",[36,40011,40012,40015,40017,40019,40021],{"class":38,"line":36554},[36,40013,40014],{"class":42},"            val_num",[36,40016,1658],{"class":46},[36,40018,36332],{"class":42},[36,40020,1859],{"class":112},[36,40022,922],{"class":42},[36,40024,40025],{"class":38,"line":36568},[36,40026,36571],{"class":3943},[36,40028,40029],{"class":38,"line":36574},[36,40030,36577],{"class":3943},[36,40032,40033,40035,40037],{"class":38,"line":36580},[36,40034,36583],{"class":42},[36,40036,4455],{"class":46},[36,40038,36588],{"class":42},[36,40040,40041],{"class":38,"line":36591},[36,40042,36594],{"class":3943},[36,40044,40045],{"class":38,"line":36597},[36,40046,36600],{"class":3943},[36,40048,40049,40051,40053],{"class":38,"line":36603},[36,40050,36606],{"class":42},[36,40052,4455],{"class":46},[36,40054,36588],{"class":42},[36,40056,40057],{"class":38,"line":36613},[36,40058,36616],{"class":3943},[36,40060,40061,40063,40065],{"class":38,"line":36619},[36,40062,36622],{"class":42},[36,40064,4455],{"class":46},[36,40066,36627],{"class":42},[36,40068,40069],{"class":38,"line":36630},[36,40070,36633],{"class":3943},[36,40072,40073,40075,40077],{"class":38,"line":36636},[36,40074,36639],{"class":42},[36,40076,4455],{"class":46},[36,40078,36627],{"class":42},[36,40080,40081],{"class":38,"line":36646},[36,40082,659],{"emptyLinePlaceholder":658},[36,40084,40085],{"class":38,"line":36651},[36,40086,36654],{"class":3943},[36,40088,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127],{"class":38,"line":36657},[36,40090,1960],{"class":112},[36,40092,495],{"class":42},[36,40094,7291],{"class":105},[36,40096,3649],{"class":112},[36,40098,36668],{"class":105},[36,40100,4766],{"class":112},[36,40102,36673],{"class":46},[36,40104,4815],{"class":112},[36,40106,36678],{"class":105},[36,40108,4766],{"class":112},[36,40110,36673],{"class":46},[36,40112,4815],{"class":112},[36,40114,7291],{"class":105},[36,40116,36689],{"class":42},[36,40118,1308],{"class":46},[36,40120,4092],{"class":112},[36,40122,36696],{"class":42},[36,40124,1308],{"class":46},[36,40126,4092],{"class":112},[36,40128,36703],{"class":42},[36,40130,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169],{"class":38,"line":36706},[36,40132,1960],{"class":112},[36,40134,495],{"class":42},[36,40136,7291],{"class":105},[36,40138,3649],{"class":112},[36,40140,36717],{"class":105},[36,40142,4766],{"class":112},[36,40144,36673],{"class":46},[36,40146,4815],{"class":112},[36,40148,36726],{"class":105},[36,40150,4766],{"class":112},[36,40152,36673],{"class":46},[36,40154,4815],{"class":112},[36,40156,7291],{"class":105},[36,40158,36737],{"class":42},[36,40160,1308],{"class":46},[36,40162,4092],{"class":112},[36,40164,36744],{"class":42},[36,40166,1308],{"class":46},[36,40168,4092],{"class":112},[36,40170,36703],{"class":42},[36,40172,40173],{"class":38,"line":36753},[36,40174,659],{"emptyLinePlaceholder":658},[36,40176,40177],{"class":38,"line":36758},[36,40178,36761],{"class":3943},[36,40180,40181,40183,40185,40187,40189,40191,40193],{"class":38,"line":36764},[36,40182,995],{"class":46},[36,40184,36769],{"class":42},[36,40186,1308],{"class":46},[36,40188,4092],{"class":112},[36,40190,4809],{"class":42},[36,40192,4829],{"class":46},[36,40194,36780],{"class":42},[36,40196,40197],{"class":38,"line":36783},[36,40198,36786],{"class":3943},[36,40200,40201,40203,40205,40207,40209,40211,40213],{"class":38,"line":36789},[36,40202,36792],{"class":42},[36,40204,1260],{"class":112},[36,40206,47],{"class":46},[36,40208,36799],{"class":42},[36,40210,1308],{"class":46},[36,40212,4092],{"class":112},[36,40214,36806],{"class":42},[36,40216,40217],{"class":38,"line":36809},[36,40218,36812],{"class":3943},[36,40220,40221],{"class":38,"line":36815},[36,40222,36818],{"class":3943},[36,40224,40225,40227,40229],{"class":38,"line":36821},[36,40226,36824],{"class":42},[36,40228,47],{"class":46},[36,40230,35900],{"class":42},[36,40232,40233],{"class":38,"line":36831},[36,40234,659],{"emptyLinePlaceholder":658},[36,40236,40237],{"class":38,"line":36836},[36,40238,36839],{"class":3943},[36,40240,40241,40243,40245,40247,40249],{"class":38,"line":36842},[36,40242,36845],{"class":42},[36,40244,47],{"class":46},[36,40246,36850],{"class":42},[36,40248,1308],{"class":46},[36,40250,36855],{"class":42},[36,40252,40253,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287],{"class":38,"line":36858},[36,40254,1960],{"class":112},[36,40256,495],{"class":42},[36,40258,36865],{"class":105},[36,40260,4766],{"class":112},[36,40262,36870],{"class":46},[36,40264,4815],{"class":112},[36,40266,4416],{"class":105},[36,40268,4766],{"class":112},[36,40270,36870],{"class":46},[36,40272,4815],{"class":112},[36,40274,36883],{"class":105},[36,40276,36886],{"class":42},[36,40278,36889],{"class":46},[36,40280,4777],{"class":112},[36,40282,36894],{"class":42},[36,40284,4203],{"class":46},[36,40286,4777],{"class":112},[36,40288,2005],{"class":42},[36,40290,40291],{"class":38,"line":36903},[36,40292,40293],{"class":3943},"    # 选择最优参数并保存\n",[36,40295,40296],{"class":38,"line":36909},[36,40297,40298],{"class":3943},"    # 保存最佳模型权重字典\n",[36,40300,40301,40304,40306],{"class":38,"line":36915},[36,40302,40303],{"class":42},"    torch.save(best_model_wts,",[36,40305,36927],{"class":105},[36,40307,922],{"class":42},[36,40309,40310],{"class":38,"line":36921},[36,40311,36947],{"class":3943},[36,40313,40314,40316,40318,40320,40322,40324],{"class":38,"line":36932},[36,40315,36953],{"class":42},[36,40317,47],{"class":46},[36,40319,36958],{"class":42},[36,40321,36961],{"class":468},[36,40323,47],{"class":46},[36,40325,5281],{"class":42},[36,40327,40328,40330,40332,40334],{"class":38,"line":36938},[36,40329,36971],{"class":105},[36,40331,4729],{"class":42},[36,40333,36976],{"class":112},[36,40335,36979],{"class":42},[36,40337,40338,40340],{"class":38,"line":36944},[36,40339,36985],{"class":105},[36,40341,36988],{"class":42},[36,40343,40344,40346],{"class":38,"line":36950},[36,40345,36994],{"class":105},[36,40347,36997],{"class":42},[36,40349,40350,40352],{"class":38,"line":36968},[36,40351,37003],{"class":105},[36,40353,37006],{"class":42},[36,40355,40356,40358],{"class":38,"line":36982},[36,40357,37012],{"class":105},[36,40359,37015],{"class":42},[36,40361,40362],{"class":38,"line":36991},[36,40363,37021],{"class":42},[36,40365,40366],{"class":38,"line":37000},[36,40367,37027],{"class":3943},[36,40369,40370,40372],{"class":38,"line":37009},[36,40371,7788],{"class":46},[36,40373,37035],{"class":42},[36,40375,40376],{"class":38,"line":37018},[36,40377,659],{"emptyLinePlaceholder":658},[36,40379,40380],{"class":38,"line":37024},[36,40381,37046],{"class":3943},[36,40383,40384,40386,40388],{"class":38,"line":37030},[36,40385,1820],{"class":46},[36,40387,37054],{"class":101},[36,40389,37057],{"class":42},[36,40391,40392],{"class":38,"line":37038},[36,40393,37063],{"class":3943},[36,40395,40396,40398,40400,40402,40404,40406,40408,40410],{"class":38,"line":37043},[36,40397,37069],{"class":42},[36,40399,35281],{"class":468},[36,40401,47],{"class":46},[36,40403,495],{"class":42},[36,40405,4371],{"class":112},[36,40407,4253],{"class":42},[36,40409,4168],{"class":112},[36,40411,2005],{"class":42},[36,40413,40414],{"class":38,"line":37049},[36,40415,37089],{"class":3943},[36,40417,40418],{"class":38,"line":37060},[36,40419,37095],{"class":3943},[36,40421,40422],{"class":38,"line":37066},[36,40423,37101],{"class":3943},[36,40425,40426,40428,40430,40432,40434,40436,40438],{"class":38,"line":37086},[36,40427,35315],{"class":42},[36,40429,4092],{"class":112},[36,40431,4253],{"class":42},[36,40433,498],{"class":112},[36,40435,4253],{"class":42},[36,40437,4092],{"class":112},[36,40439,922],{"class":42},[36,40441,40442],{"class":38,"line":37092},[36,40443,37124],{"class":3943},[36,40445,40446],{"class":38,"line":37098},[36,40447,37130],{"class":3943},[36,40449,40450],{"class":38,"line":37104},[36,40451,37136],{"class":3943},[36,40453,40454],{"class":38,"line":37121},[36,40455,37142],{"class":3943},[36,40457,40458],{"class":38,"line":37127},[36,40459,37148],{"class":3943},[36,40461,40462,40464,40466,40468,40470,40472,40474,40476,40478],{"class":38,"line":37133},[36,40463,37154],{"class":42},[36,40465,37157],{"class":105},[36,40467,37160],{"class":42},[36,40469,37163],{"class":105},[36,40471,4253],{"class":42},[36,40473,37168],{"class":468},[36,40475,47],{"class":46},[36,40477,37173],{"class":105},[36,40479,922],{"class":42},[36,40481,40482,40484,40486,40488,40490,40492,40494,40496,40498],{"class":38,"line":37139},[36,40483,37154],{"class":42},[36,40485,37157],{"class":105},[36,40487,37185],{"class":42},[36,40489,37188],{"class":105},[36,40491,4253],{"class":42},[36,40493,37168],{"class":468},[36,40495,47],{"class":46},[36,40497,37197],{"class":105},[36,40499,922],{"class":42},[36,40501,40502],{"class":38,"line":37145},[36,40503,37205],{"class":3943},[36,40505,40506],{"class":38,"line":37151},[36,40507,37211],{"class":42},[36,40509,40510],{"class":38,"line":37178},[36,40511,37217],{"class":3943},[36,40513,40514,40516,40518],{"class":38,"line":37202},[36,40515,37223],{"class":42},[36,40517,37226],{"class":105},[36,40519,922],{"class":42},[36,40521,40522,40524,40526],{"class":38,"line":37208},[36,40523,37234],{"class":42},[36,40525,37237],{"class":105},[36,40527,922],{"class":42},[36,40529,40530],{"class":38,"line":37214},[36,40531,37245],{"class":3943},[36,40533,40534,40536,40538,40540,40542,40544,40546],{"class":38,"line":37220},[36,40535,35315],{"class":42},[36,40537,4092],{"class":112},[36,40539,4253],{"class":42},[36,40541,498],{"class":112},[36,40543,4253],{"class":42},[36,40545,498],{"class":112},[36,40547,922],{"class":42},[36,40549,40550,40552,40554,40556,40558,40560,40562,40564,40566],{"class":38,"line":37231},[36,40551,37154],{"class":42},[36,40553,37157],{"class":105},[36,40555,37272],{"class":42},[36,40557,37163],{"class":105},[36,40559,4253],{"class":42},[36,40561,37168],{"class":468},[36,40563,47],{"class":46},[36,40565,37283],{"class":105},[36,40567,922],{"class":42},[36,40569,40570,40572,40574,40576,40578,40580,40582,40584,40586],{"class":38,"line":37242},[36,40571,37154],{"class":42},[36,40573,37157],{"class":105},[36,40575,37295],{"class":42},[36,40577,37188],{"class":105},[36,40579,4253],{"class":42},[36,40581,37168],{"class":468},[36,40583,47],{"class":46},[36,40585,37306],{"class":105},[36,40587,922],{"class":42},[36,40589,40590],{"class":38,"line":37248},[36,40591,37314],{"class":3943},[36,40593,40594],{"class":38,"line":37265},[36,40595,37211],{"class":42},[36,40597,40598,40600,40602],{"class":38,"line":37288},[36,40599,37223],{"class":42},[36,40601,37157],{"class":105},[36,40603,922],{"class":42},[36,40605,40606,40608,40610],{"class":38,"line":37311},[36,40607,37234],{"class":42},[36,40609,37336],{"class":105},[36,40611,922],{"class":42},[36,40613,40614],{"class":38,"line":37317},[36,40615,37344],{"class":42},[36,40617,40618],{"class":38,"line":37322},[36,40619,659],{"emptyLinePlaceholder":658},[36,40621,40622],{"class":38,"line":37331},[36,40623,37355],{"class":3943},[36,40625,40626,40628,40630,40632,40634],{"class":38,"line":37341},[36,40627,2067],{"class":46},[36,40629,2070],{"class":112},[36,40631,6652],{"class":46},[36,40633,34819],{"class":105},[36,40635,888],{"class":42},[36,40637,40638],{"class":38,"line":37347},[36,40639,37374],{"class":3943},[36,40641,40642,40645,40647],{"class":38,"line":37352},[36,40643,40644],{"class":42},"    AlexNet",[36,40646,47],{"class":46},[36,40648,40649],{"class":42},"AlexNet()\n",[36,40651,40652,40654,40656],{"class":38,"line":37358},[36,40653,37391],{"class":42},[36,40655,47],{"class":46},[36,40657,37396],{"class":42},[36,40659,40660,40662,40664,40667,40669,40671,40673],{"class":38,"line":37371},[36,40661,36953],{"class":42},[36,40663,47],{"class":46},[36,40665,40666],{"class":42},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[36,40668,37409],{"class":468},[36,40670,47],{"class":46},[36,40672,1921],{"class":112},[36,40674,922],{"class":42},[36,40676,40677],{"class":38,"line":37377},[36,40678,37421],{"class":42},[211,40680,40681],{"start":196},[214,40682,37434],{},[26,40684,40686],{"className":28,"code":40685,"language":30,"meta":31,"style":31},"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",[33,40687,40688,40694,40704,40714,40724,40728,40738,40748,40759,40763,40767,40771,40779,40795,40805,40821,40831,40845,40849,40859,40869,40879,40885,40889,40893,40901,40905,40921,40929,40933,40937,40945,40953,40957,40961,40965,40969,40975,40979,40989,40997,41005,41009,41013,41017,41025,41029,41045,41049,41053,41057,41069,41073,41085,41089,41093,41105,41109,41119,41123,41127,41139,41143,41151,41155,41159,41167,41171,41179,41183,41187,41191,41195,41199,41215,41223,41227,41231,41279,41285,41289,41299,41307,41315,41319,41323,41327,41331,41339,41343,41359,41363,41371,41379],{"__ignoreMap":31},[36,40689,40690,40692],{"class":38,"line":39},[36,40691,611],{"class":46},[36,40693,34000],{"class":42},[36,40695,40696,40698,40700,40702],{"class":38,"line":53},[36,40697,611],{"class":46},[36,40699,35005],{"class":42},[36,40701,617],{"class":46},[36,40703,35010],{"class":42},[36,40705,40706,40708,40710,40712],{"class":38,"line":196},[36,40707,645],{"class":46},[36,40709,37462],{"class":42},[36,40711,611],{"class":46},[36,40713,37467],{"class":42},[36,40715,40716,40718,40720,40722],{"class":38,"line":642},[36,40717,645],{"class":46},[36,40719,34988],{"class":42},[36,40721,611],{"class":46},[36,40723,34993],{"class":42},[36,40725,40726],{"class":38,"line":655},[36,40727,37482],{"class":3943},[36,40729,40730,40732,40734,40736],{"class":38,"line":662},[36,40731,645],{"class":46},[36,40733,34961],{"class":42},[36,40735,611],{"class":46},[36,40737,34966],{"class":42},[36,40739,40740,40742,40744,40746],{"class":38,"line":667},[36,40741,645],{"class":46},[36,40743,35502],{"class":42},[36,40745,611],{"class":46},[36,40747,39117],{"class":42},[36,40749,40750,40752,40755,40757],{"class":38,"line":679},[36,40751,645],{"class":46},[36,40753,40754],{"class":42}," 练习.AlexNet.model ",[36,40756,611],{"class":46},[36,40758,39117],{"class":42},[36,40760,40761],{"class":38,"line":685},[36,40762,659],{"emptyLinePlaceholder":658},[36,40764,40765],{"class":38,"line":691},[36,40766,659],{"emptyLinePlaceholder":658},[36,40768,40769],{"class":38,"line":696},[36,40770,37511],{"class":3943},[36,40772,40773,40775,40777],{"class":38,"line":702},[36,40774,1820],{"class":46},[36,40776,37518],{"class":101},[36,40778,35540],{"class":42},[36,40780,40781,40783,40785,40787,40789,40791,40793],{"class":38,"line":708},[36,40782,37525],{"class":42},[36,40784,47],{"class":46},[36,40786,35045],{"class":42},[36,40788,35048],{"class":468},[36,40790,47],{"class":46},[36,40792,35053],{"class":105},[36,40794,35056],{"class":42},[36,40796,40797,40799,40801,40803],{"class":38,"line":713},[36,40798,37542],{"class":468},[36,40800,47],{"class":46},[36,40802,37547],{"class":112},[36,40804,35056],{"class":42},[36,40806,40807,40809,40811,40813,40815,40817,40819],{"class":38,"line":719},[36,40808,37554],{"class":468},[36,40810,47],{"class":46},[36,40812,35083],{"class":42},[36,40814,1476],{"class":468},[36,40816,47],{"class":46},[36,40818,39009],{"class":112},[36,40820,35093],{"class":42},[36,40822,40823,40825,40827,40829],{"class":38,"line":725},[36,40824,37571],{"class":468},[36,40826,47],{"class":46},[36,40828,35066],{"class":112},[36,40830,922],{"class":42},[36,40832,40833,40835,40837,40839,40841,40843],{"class":38,"line":731},[36,40834,37582],{"class":42},[36,40836,47],{"class":46},[36,40838,35123],{"class":42},[36,40840,35126],{"class":468},[36,40842,47],{"class":46},[36,40844,37593],{"class":42},[36,40846,40847],{"class":38,"line":736},[36,40848,37598],{"class":3943},[36,40850,40851,40853,40855,40857],{"class":38,"line":742},[36,40852,37603],{"class":468},[36,40854,47],{"class":46},[36,40856,4092],{"class":112},[36,40858,35056],{"class":42},[36,40860,40861,40863,40865,40867],{"class":38,"line":748},[36,40862,37614],{"class":468},[36,40864,47],{"class":46},[36,40866,35066],{"class":112},[36,40868,35056],{"class":42},[36,40870,40871,40873,40875,40877],{"class":38,"line":754},[36,40872,37625],{"class":468},[36,40874,47],{"class":46},[36,40876,1859],{"class":112},[36,40878,922],{"class":42},[36,40880,40881,40883],{"class":38,"line":760},[36,40882,7788],{"class":46},[36,40884,37638],{"class":42},[36,40886,40887],{"class":38,"line":766},[36,40888,659],{"emptyLinePlaceholder":658},[36,40890,40891],{"class":38,"line":772},[36,40892,37647],{"class":3943},[36,40894,40895,40897,40899],{"class":38,"line":778},[36,40896,1820],{"class":46},[36,40898,37654],{"class":101},[36,40900,37657],{"class":42},[36,40902,40903],{"class":38,"line":783},[36,40904,37662],{"class":3943},[36,40906,40907,40909,40911,40913,40915,40917,40919],{"class":38,"line":789},[36,40908,34831],{"class":42},[36,40910,47],{"class":46},[36,40912,34838],{"class":105},[36,40914,5428],{"class":46},[36,40916,34843],{"class":42},[36,40918,5425],{"class":46},[36,40920,37679],{"class":105},[36,40922,40923,40925,40927],{"class":38,"line":795},[36,40924,34883],{"class":42},[36,40926,47],{"class":46},[36,40928,35875],{"class":42},[36,40930,40931],{"class":38,"line":801},[36,40932,659],{"emptyLinePlaceholder":658},[36,40934,40935],{"class":38,"line":807},[36,40936,37696],{"class":3943},[36,40938,40939,40941,40943],{"class":38,"line":813},[36,40940,37701],{"class":42},[36,40942,47],{"class":46},[36,40944,35928],{"class":112},[36,40946,40947,40949,40951],{"class":38,"line":819},[36,40948,37710],{"class":42},[36,40950,47],{"class":46},[36,40952,6787],{"class":112},[36,40954,40955],{"class":38,"line":824},[36,40956,659],{"emptyLinePlaceholder":658},[36,40958,40959],{"class":38,"line":829},[36,40960,37723],{"class":3943},[36,40962,40963],{"class":38,"line":851},[36,40964,37728],{"class":3943},[36,40966,40967],{"class":38,"line":868},[36,40968,37733],{"class":3943},[36,40970,40971,40973],{"class":38,"line":873},[36,40972,37738],{"class":46},[36,40974,36444],{"class":42},[36,40976,40977],{"class":38,"line":891},[36,40978,37745],{"class":3943},[36,40980,40981,40983,40985,40987],{"class":38,"line":906},[36,40982,1613],{"class":46},[36,40984,37752],{"class":42},[36,40986,1619],{"class":46},[36,40988,37757],{"class":42},[36,40990,40991,40993,40995],{"class":38,"line":925},[36,40992,37762],{"class":42},[36,40994,47],{"class":46},[36,40996,37767],{"class":42},[36,40998,40999,41001,41003],{"class":38,"line":943},[36,41000,37772],{"class":42},[36,41002,47],{"class":46},[36,41004,37777],{"class":42},[36,41006,41007],{"class":38,"line":948},[36,41008,37782],{"class":3943},[36,41010,41011],{"class":38,"line":971},[36,41012,36435],{"class":42},[36,41014,41015],{"class":38,"line":992},[36,41016,37791],{"class":3943},[36,41018,41019,41021,41023],{"class":38,"line":1020},[36,41020,36238],{"class":42},[36,41022,47],{"class":46},[36,41024,37800],{"class":42},[36,41026,41027],{"class":38,"line":1036},[36,41028,37805],{"class":3943},[36,41030,41031,41033,41035,41037,41039,41041,41043],{"class":38,"line":1041},[36,41032,36253],{"class":42},[36,41034,47],{"class":46},[36,41036,36258],{"class":42},[36,41038,36261],{"class":468},[36,41040,47],{"class":46},[36,41042,4092],{"class":112},[36,41044,922],{"class":42},[36,41046,41047],{"class":38,"line":1052},[36,41048,37826],{"class":3943},[36,41050,41051],{"class":38,"line":1065},[36,41052,37831],{"class":3943},[36,41054,41055],{"class":38,"line":1077},[36,41056,37836],{"class":3943},[36,41058,41059,41061,41063,41065,41067],{"class":38,"line":1082},[36,41060,37841],{"class":42},[36,41062,1658],{"class":46},[36,41064,36351],{"class":42},[36,41066,6652],{"class":46},[36,41068,37850],{"class":42},[36,41070,41071],{"class":38,"line":1125},[36,41072,37855],{"class":3943},[36,41074,41075,41077,41079,41081,41083],{"class":38,"line":1164},[36,41076,37860],{"class":42},[36,41078,1658],{"class":46},[36,41080,37865],{"class":42},[36,41082,1859],{"class":112},[36,41084,922],{"class":42},[36,41086,41087],{"class":38,"line":1169},[36,41088,659],{"emptyLinePlaceholder":658},[36,41090,41091],{"class":38,"line":1180},[36,41092,37878],{"class":3943},[36,41094,41095,41097,41099,41101,41103],{"class":38,"line":1198},[36,41096,37883],{"class":42},[36,41098,47],{"class":46},[36,41100,37888],{"class":42},[36,41102,4455],{"class":46},[36,41104,37893],{"class":42},[36,41106,41107],{"class":38,"line":1215},[36,41108,37898],{"class":3943},[36,41110,41111,41113,41115,41117],{"class":38,"line":1236},[36,41112,1960],{"class":112},[36,41114,495],{"class":42},[36,41116,37907],{"class":105},[36,41118,37910],{"class":42},[36,41120,41121],{"class":38,"line":1245},[36,41122,659],{"emptyLinePlaceholder":658},[36,41124,41125],{"class":38,"line":1250},[36,41126,37919],{"class":3943},[36,41128,41129,41131,41133,41135,41137],{"class":38,"line":1265},[36,41130,2067],{"class":46},[36,41132,2070],{"class":112},[36,41134,6652],{"class":46},[36,41136,34819],{"class":105},[36,41138,888],{"class":42},[36,41140,41141],{"class":38,"line":1281},[36,41142,37936],{"class":3943},[36,41144,41145,41147,41149],{"class":38,"line":1297},[36,41146,34883],{"class":42},[36,41148,47],{"class":46},[36,41150,40649],{"class":42},[36,41152,41153],{"class":38,"line":1314},[36,41154,37949],{"class":3943},[36,41156,41157],{"class":38,"line":1336},[36,41158,37954],{"class":3943},[36,41160,41161,41163,41165],{"class":38,"line":1356},[36,41162,37959],{"class":42},[36,41164,37962],{"class":105},[36,41166,2005],{"class":42},[36,41168,41169],{"class":38,"line":1361},[36,41170,37969],{"class":3943},[36,41172,41173,41175,41177],{"class":38,"line":1407},[36,41174,37582],{"class":42},[36,41176,47],{"class":46},[36,41178,37978],{"class":42},[36,41180,41181],{"class":38,"line":1423},[36,41182,37983],{"class":3943},[36,41184,41185],{"class":38,"line":1439},[36,41186,37988],{"class":42},[36,41188,41189],{"class":38,"line":1444},[36,41190,659],{"emptyLinePlaceholder":658},[36,41192,41193],{"class":38,"line":1486},[36,41194,37997],{"class":3943},[36,41196,41197],{"class":38,"line":1499},[36,41198,38002],{"class":3943},[36,41200,41201,41203,41205,41207,41209,41211,41213],{"class":38,"line":1513},[36,41202,34831],{"class":42},[36,41204,47],{"class":46},[36,41206,34838],{"class":105},[36,41208,5428],{"class":46},[36,41210,34843],{"class":42},[36,41212,5425],{"class":46},[36,41214,37679],{"class":105},[36,41216,41217,41219,41221],{"class":38,"line":1518},[36,41218,34883],{"class":42},[36,41220,47],{"class":46},[36,41222,35875],{"class":42},[36,41224,41225],{"class":38,"line":1529},[36,41226,38031],{"class":3943},[36,41228,41229],{"class":38,"line":1539},[36,41230,38036],{"class":3943},[36,41232,41233,41235,41237,41239,41241,41243,41245,41247,41249,41251,41253,41255,41257,41259,41261,41263,41265,41267,41269,41271,41273,41275,41277],{"class":38,"line":1544},[36,41234,38041],{"class":42},[36,41236,47],{"class":46},[36,41238,4760],{"class":42},[36,41240,38048],{"class":105},[36,41242,4253],{"class":42},[36,41244,38053],{"class":105},[36,41246,4253],{"class":42},[36,41248,38058],{"class":105},[36,41250,4253],{"class":42},[36,41252,38063],{"class":105},[36,41254,4253],{"class":42},[36,41256,38068],{"class":105},[36,41258,4253],{"class":42},[36,41260,38073],{"class":105},[36,41262,4253],{"class":42},[36,41264,38078],{"class":105},[36,41266,4253],{"class":42},[36,41268,38083],{"class":105},[36,41270,4253],{"class":42},[36,41272,38088],{"class":105},[36,41274,4253],{"class":42},[36,41276,38093],{"class":105},[36,41278,36806],{"class":42},[36,41280,41281,41283],{"class":38,"line":1555},[36,41282,37738],{"class":46},[36,41284,36444],{"class":42},[36,41286,41287],{"class":38,"line":1572},[36,41288,38106],{"class":3943},[36,41290,41291,41293,41295,41297],{"class":38,"line":1592},[36,41292,1613],{"class":46},[36,41294,38113],{"class":42},[36,41296,1619],{"class":46},[36,41298,37757],{"class":42},[36,41300,41301,41303,41305],{"class":38,"line":1597},[36,41302,36193],{"class":42},[36,41304,47],{"class":46},[36,41306,36198],{"class":42},[36,41308,41309,41311,41313],{"class":38,"line":1610},[36,41310,36208],{"class":42},[36,41312,47],{"class":46},[36,41314,36213],{"class":42},[36,41316,41317],{"class":38,"line":1632},[36,41318,659],{"emptyLinePlaceholder":658},[36,41320,41321],{"class":38,"line":1646},[36,41322,38142],{"class":3943},[36,41324,41325],{"class":38,"line":1651},[36,41326,36435],{"class":42},[36,41328,41329],{"class":38,"line":1664},[36,41330,38151],{"class":3943},[36,41332,41333,41335,41337],{"class":38,"line":1669},[36,41334,36238],{"class":42},[36,41336,47],{"class":46},[36,41338,36243],{"class":42},[36,41340,41341],{"class":38,"line":1681},[36,41342,38164],{"class":3943},[36,41344,41345,41347,41349,41351,41353,41355,41357],{"class":38,"line":1694},[36,41346,36253],{"class":42},[36,41348,47],{"class":46},[36,41350,36258],{"class":42},[36,41352,36261],{"class":468},[36,41354,47],{"class":46},[36,41356,4092],{"class":112},[36,41358,922],{"class":42},[36,41360,41361],{"class":38,"line":1699},[36,41362,38185],{"class":3943},[36,41364,41365,41367,41369],{"class":38,"line":1714},[36,41366,38190],{"class":42},[36,41368,47],{"class":46},[36,41370,38195],{"class":42},[36,41372,41373,41375,41377],{"class":38,"line":1729},[36,41374,38200],{"class":42},[36,41376,47],{"class":46},[36,41378,38205],{"class":42},[36,41380,41381,41383,41385,41387,41389,41391,41393,41395],{"class":38,"line":1746},[36,41382,38210],{"class":112},[36,41384,495],{"class":42},[36,41386,38215],{"class":105},[36,41388,38218],{"class":42},[36,41390,38221],{"class":105},[36,41392,4253],{"class":42},[36,41394,38226],{"class":105},[36,41396,38229],{"class":42},[318,41398,41400],{"id":41399},"_22vgg","2.2.VGG",[25619,41402,41404],{"id":41403},"_221原理","2.2.1.原理",[19,41406,41407],{},[5198,41408],{"alt":31,"src":41409},"\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,41411,41412],{},[5198,41413],{"alt":31,"src":41414},"\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,41416,41417],{},[5198,41418],{"alt":31,"src":41419},"\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,41421,41422],{},"参数详细描述：",[19,41424,41425],{},[5198,41426],{"alt":31,"src":41427},"\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,41429,41430],{},[5198,41431],{"alt":31,"src":41432},"\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,41434,41435],{},[5198,41436],{"alt":31,"src":41437},"\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,41439,41440],{},[5198,41441],{"alt":31,"src":41442},"\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,41444,41445],{},[5198,41446],{"alt":31,"src":41447},"\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",[25619,41449,41451],{"id":41450},"_222代码实现","2.2.2.代码实现",[211,41453,41454],{},[214,41455,41456],{},"网络搭建",[26,41458,41460],{"className":28,"code":41459,"language":30,"meta":31,"style":31},"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",[33,41461,41462,41468,41480,41490,41500,41504,41521,41529,41548,41553,41558,41570,41608,41613,41649,41653,41682,41687,41692,41703,41739,41743,41779,41783,41811,41815,41820,41831,41867,41871,41907,41911,41947,41951,41979,41983,41988,41999,42036,42040,42076,42080,42116,42120,42148,42152,42157,42168,42204,42208,42244,42248,42284,42288,42316,42320,42325,42336,42341,42346,42351,42372,42376,42388,42392,42404,42408,42412,42417,42422,42436,42441,42451,42456,42471,42476,42494,42499,42508,42513,42523,42528,42533,42547,42552,42566,42574,42578,42582,42590,42601,42612,42623,42634,42645,42656,42662,42666,42671,42684,42704,42710,42719],{"__ignoreMap":31},[36,41463,41464,41466],{"class":38,"line":39},[36,41465,611],{"class":46},[36,41467,34000],{"class":42},[36,41469,41470,41472,41475,41477],{"class":38,"line":53},[36,41471,645],{"class":46},[36,41473,41474],{"class":42}," sympy.core.sympify ",[36,41476,611],{"class":46},[36,41478,41479],{"class":42}," kernS\n",[36,41481,41482,41484,41486,41488],{"class":38,"line":196},[36,41483,645],{"class":46},[36,41485,34342],{"class":42},[36,41487,611],{"class":46},[36,41489,34347],{"class":42},[36,41491,41492,41494,41496,41498],{"class":38,"line":642},[36,41493,645],{"class":46},[36,41495,34359],{"class":42},[36,41497,611],{"class":46},[36,41499,34364],{"class":42},[36,41501,41502],{"class":38,"line":655},[36,41503,659],{"emptyLinePlaceholder":658},[36,41505,41506,41508,41511,41513,41515,41517,41519],{"class":38,"line":662},[36,41507,832],{"class":46},[36,41509,41510],{"class":101}," VGG16",[36,41512,495],{"class":42},[36,41514,34380],{"class":101},[36,41516,842],{"class":42},[36,41518,34385],{"class":101},[36,41520,848],{"class":42},[36,41522,41523,41525,41527],{"class":38,"line":667},[36,41524,876],{"class":46},[36,41526,879],{"class":112},[36,41528,34406],{"class":42},[36,41530,41531,41533,41535,41538,41540,41542,41544,41546],{"class":38,"line":679},[36,41532,894],{"class":112},[36,41534,495],{"class":42},[36,41536,41537],{"class":112},"VGG16",[36,41539,478],{"class":42},[36,41541,457],{"class":112},[36,41543,34423],{"class":42},[36,41545,900],{"class":112},[36,41547,903],{"class":42},[36,41549,41550],{"class":38,"line":685},[36,41551,41552],{"class":3943},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[36,41554,41555],{"class":38,"line":691},[36,41556,41557],{"class":3943},"        # 这里用的是灰度图\n",[36,41559,41560,41562,41565,41567],{"class":38,"line":696},[36,41561,909],{"class":112},[36,41563,41564],{"class":42},".block1",[36,41566,47],{"class":46},[36,41568,41569],{"class":42},"nn.Sequential(\n",[36,41571,41572,41575,41577,41579,41581,41583,41585,41587,41589,41591,41593,41595,41597,41599,41601,41603,41605],{"class":38,"line":702},[36,41573,41574],{"class":42},"            nn.Conv2d(",[36,41576,34451],{"class":468},[36,41578,47],{"class":46},[36,41580,4092],{"class":112},[36,41582,4253],{"class":42},[36,41584,34460],{"class":468},[36,41586,47],{"class":46},[36,41588,4078],{"class":112},[36,41590,4253],{"class":42},[36,41592,34469],{"class":468},[36,41594,47],{"class":46},[36,41596,1982],{"class":112},[36,41598,4253],{"class":42},[36,41600,34478],{"class":468},[36,41602,47],{"class":46},[36,41604,4092],{"class":112},[36,41606,41607],{"class":42},"),\n",[36,41609,41610],{"class":38,"line":708},[36,41611,41612],{"class":42},"            nn.ReLU(),\n",[36,41614,41615,41617,41619,41621,41623,41625,41627,41629,41631,41633,41635,41637,41639,41641,41643,41645,41647],{"class":38,"line":713},[36,41616,41574],{"class":42},[36,41618,34451],{"class":468},[36,41620,47],{"class":46},[36,41622,4078],{"class":112},[36,41624,4253],{"class":42},[36,41626,34460],{"class":468},[36,41628,47],{"class":46},[36,41630,4078],{"class":112},[36,41632,4253],{"class":42},[36,41634,34469],{"class":468},[36,41636,47],{"class":46},[36,41638,1982],{"class":112},[36,41640,4253],{"class":42},[36,41642,34478],{"class":468},[36,41644,47],{"class":46},[36,41646,4092],{"class":112},[36,41648,41607],{"class":42},[36,41650,41651],{"class":38,"line":719},[36,41652,41612],{"class":42},[36,41654,41655,41658,41660,41662,41664,41666,41668,41670,41672,41674,41676,41678,41680],{"class":38,"line":725},[36,41656,41657],{"class":42},"            nn.MaxPool2d(",[36,41659,34469],{"class":468},[36,41661,47],{"class":46},[36,41663,498],{"class":112},[36,41665,4253],{"class":42},[36,41667,34524],{"class":468},[36,41669,47],{"class":46},[36,41671,498],{"class":112},[36,41673,4253],{"class":42},[36,41675,34478],{"class":468},[36,41677,47],{"class":46},[36,41679,1859],{"class":112},[36,41681,922],{"class":42},[36,41683,41684],{"class":38,"line":731},[36,41685,41686],{"class":42},"        )\n",[36,41688,41689],{"class":38,"line":736},[36,41690,41691],{"class":3943},"        # 第二层\n",[36,41693,41694,41696,41699,41701],{"class":38,"line":742},[36,41695,909],{"class":112},[36,41697,41698],{"class":42},".block2",[36,41700,47],{"class":46},[36,41702,41569],{"class":42},[36,41704,41705,41707,41709,41711,41713,41715,41717,41719,41721,41723,41725,41727,41729,41731,41733,41735,41737],{"class":38,"line":748},[36,41706,41574],{"class":42},[36,41708,34451],{"class":468},[36,41710,47],{"class":46},[36,41712,4078],{"class":112},[36,41714,4253],{"class":42},[36,41716,34460],{"class":468},[36,41718,47],{"class":46},[36,41720,35656],{"class":112},[36,41722,4253],{"class":42},[36,41724,34469],{"class":468},[36,41726,47],{"class":46},[36,41728,1982],{"class":112},[36,41730,4253],{"class":42},[36,41732,34478],{"class":468},[36,41734,47],{"class":46},[36,41736,4092],{"class":112},[36,41738,41607],{"class":42},[36,41740,41741],{"class":38,"line":754},[36,41742,41612],{"class":42},[36,41744,41745,41747,41749,41751,41753,41755,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777],{"class":38,"line":760},[36,41746,41574],{"class":42},[36,41748,34451],{"class":468},[36,41750,47],{"class":46},[36,41752,35656],{"class":112},[36,41754,4253],{"class":42},[36,41756,34460],{"class":468},[36,41758,47],{"class":46},[36,41760,35656],{"class":112},[36,41762,4253],{"class":42},[36,41764,34469],{"class":468},[36,41766,47],{"class":46},[36,41768,1982],{"class":112},[36,41770,4253],{"class":42},[36,41772,34478],{"class":468},[36,41774,47],{"class":46},[36,41776,4092],{"class":112},[36,41778,41607],{"class":42},[36,41780,41781],{"class":38,"line":766},[36,41782,41612],{"class":42},[36,41784,41785,41787,41789,41791,41793,41795,41797,41799,41801,41803,41805,41807,41809],{"class":38,"line":772},[36,41786,41657],{"class":42},[36,41788,34469],{"class":468},[36,41790,47],{"class":46},[36,41792,498],{"class":112},[36,41794,4253],{"class":42},[36,41796,34524],{"class":468},[36,41798,47],{"class":46},[36,41800,498],{"class":112},[36,41802,4253],{"class":42},[36,41804,34478],{"class":468},[36,41806,47],{"class":46},[36,41808,1859],{"class":112},[36,41810,922],{"class":42},[36,41812,41813],{"class":38,"line":778},[36,41814,41686],{"class":42},[36,41816,41817],{"class":38,"line":783},[36,41818,41819],{"class":3943},"        # 第三层\n",[36,41821,41822,41824,41827,41829],{"class":38,"line":789},[36,41823,909],{"class":112},[36,41825,41826],{"class":42},".block3",[36,41828,47],{"class":46},[36,41830,41569],{"class":42},[36,41832,41833,41835,41837,41839,41841,41843,41845,41847,41849,41851,41853,41855,41857,41859,41861,41863,41865],{"class":38,"line":795},[36,41834,41574],{"class":42},[36,41836,34451],{"class":468},[36,41838,47],{"class":46},[36,41840,35656],{"class":112},[36,41842,4253],{"class":42},[36,41844,34460],{"class":468},[36,41846,47],{"class":46},[36,41848,38430],{"class":112},[36,41850,4253],{"class":42},[36,41852,34469],{"class":468},[36,41854,47],{"class":46},[36,41856,1982],{"class":112},[36,41858,4253],{"class":42},[36,41860,34478],{"class":468},[36,41862,47],{"class":46},[36,41864,4092],{"class":112},[36,41866,41607],{"class":42},[36,41868,41869],{"class":38,"line":801},[36,41870,41612],{"class":42},[36,41872,41873,41875,41877,41879,41881,41883,41885,41887,41889,41891,41893,41895,41897,41899,41901,41903,41905],{"class":38,"line":807},[36,41874,41574],{"class":42},[36,41876,34451],{"class":468},[36,41878,47],{"class":46},[36,41880,38430],{"class":112},[36,41882,4253],{"class":42},[36,41884,34460],{"class":468},[36,41886,47],{"class":46},[36,41888,38430],{"class":112},[36,41890,4253],{"class":42},[36,41892,34469],{"class":468},[36,41894,47],{"class":46},[36,41896,1982],{"class":112},[36,41898,4253],{"class":42},[36,41900,34478],{"class":468},[36,41902,47],{"class":46},[36,41904,4092],{"class":112},[36,41906,41607],{"class":42},[36,41908,41909],{"class":38,"line":813},[36,41910,41612],{"class":42},[36,41912,41913,41915,41917,41919,41921,41923,41925,41927,41929,41931,41933,41935,41937,41939,41941,41943,41945],{"class":38,"line":819},[36,41914,41574],{"class":42},[36,41916,34451],{"class":468},[36,41918,47],{"class":46},[36,41920,38430],{"class":112},[36,41922,4253],{"class":42},[36,41924,34460],{"class":468},[36,41926,47],{"class":46},[36,41928,38430],{"class":112},[36,41930,4253],{"class":42},[36,41932,34469],{"class":468},[36,41934,47],{"class":46},[36,41936,1982],{"class":112},[36,41938,4253],{"class":42},[36,41940,34478],{"class":468},[36,41942,47],{"class":46},[36,41944,4092],{"class":112},[36,41946,41607],{"class":42},[36,41948,41949],{"class":38,"line":824},[36,41950,41612],{"class":42},[36,41952,41953,41955,41957,41959,41961,41963,41965,41967,41969,41971,41973,41975,41977],{"class":38,"line":829},[36,41954,41657],{"class":42},[36,41956,34469],{"class":468},[36,41958,47],{"class":46},[36,41960,498],{"class":112},[36,41962,4253],{"class":42},[36,41964,34524],{"class":468},[36,41966,47],{"class":46},[36,41968,498],{"class":112},[36,41970,4253],{"class":42},[36,41972,34478],{"class":468},[36,41974,47],{"class":46},[36,41976,1859],{"class":112},[36,41978,922],{"class":42},[36,41980,41981],{"class":38,"line":851},[36,41982,41686],{"class":42},[36,41984,41985],{"class":38,"line":868},[36,41986,41987],{"class":3943},"        # 第四层\n",[36,41989,41990,41992,41995,41997],{"class":38,"line":873},[36,41991,909],{"class":112},[36,41993,41994],{"class":42},".block4",[36,41996,47],{"class":46},[36,41998,41569],{"class":42},[36,42000,42001,42003,42005,42007,42009,42011,42013,42015,42018,42020,42022,42024,42026,42028,42030,42032,42034],{"class":38,"line":891},[36,42002,41574],{"class":42},[36,42004,34451],{"class":468},[36,42006,47],{"class":46},[36,42008,38430],{"class":112},[36,42010,4253],{"class":42},[36,42012,34460],{"class":468},[36,42014,47],{"class":46},[36,42016,42017],{"class":112},"512",[36,42019,4253],{"class":42},[36,42021,34469],{"class":468},[36,42023,47],{"class":46},[36,42025,1982],{"class":112},[36,42027,4253],{"class":42},[36,42029,34478],{"class":468},[36,42031,47],{"class":46},[36,42033,4092],{"class":112},[36,42035,41607],{"class":42},[36,42037,42038],{"class":38,"line":906},[36,42039,41612],{"class":42},[36,42041,42042,42044,42046,42048,42050,42052,42054,42056,42058,42060,42062,42064,42066,42068,42070,42072,42074],{"class":38,"line":925},[36,42043,41574],{"class":42},[36,42045,34451],{"class":468},[36,42047,47],{"class":46},[36,42049,42017],{"class":112},[36,42051,4253],{"class":42},[36,42053,34460],{"class":468},[36,42055,47],{"class":46},[36,42057,42017],{"class":112},[36,42059,4253],{"class":42},[36,42061,34469],{"class":468},[36,42063,47],{"class":46},[36,42065,1982],{"class":112},[36,42067,4253],{"class":42},[36,42069,34478],{"class":468},[36,42071,47],{"class":46},[36,42073,4092],{"class":112},[36,42075,41607],{"class":42},[36,42077,42078],{"class":38,"line":943},[36,42079,41612],{"class":42},[36,42081,42082,42084,42086,42088,42090,42092,42094,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114],{"class":38,"line":948},[36,42083,41574],{"class":42},[36,42085,34451],{"class":468},[36,42087,47],{"class":46},[36,42089,42017],{"class":112},[36,42091,4253],{"class":42},[36,42093,34460],{"class":468},[36,42095,47],{"class":46},[36,42097,42017],{"class":112},[36,42099,4253],{"class":42},[36,42101,34469],{"class":468},[36,42103,47],{"class":46},[36,42105,1982],{"class":112},[36,42107,4253],{"class":42},[36,42109,34478],{"class":468},[36,42111,47],{"class":46},[36,42113,4092],{"class":112},[36,42115,41607],{"class":42},[36,42117,42118],{"class":38,"line":971},[36,42119,41612],{"class":42},[36,42121,42122,42124,42126,42128,42130,42132,42134,42136,42138,42140,42142,42144,42146],{"class":38,"line":992},[36,42123,41657],{"class":42},[36,42125,34469],{"class":468},[36,42127,47],{"class":46},[36,42129,498],{"class":112},[36,42131,4253],{"class":42},[36,42133,34524],{"class":468},[36,42135,47],{"class":46},[36,42137,498],{"class":112},[36,42139,4253],{"class":42},[36,42141,34478],{"class":468},[36,42143,47],{"class":46},[36,42145,1859],{"class":112},[36,42147,922],{"class":42},[36,42149,42150],{"class":38,"line":1020},[36,42151,41686],{"class":42},[36,42153,42154],{"class":38,"line":1036},[36,42155,42156],{"class":3943},"        # 第五层\n",[36,42158,42159,42161,42164,42166],{"class":38,"line":1041},[36,42160,909],{"class":112},[36,42162,42163],{"class":42},".block5",[36,42165,47],{"class":46},[36,42167,41569],{"class":42},[36,42169,42170,42172,42174,42176,42178,42180,42182,42184,42186,42188,42190,42192,42194,42196,42198,42200,42202],{"class":38,"line":1052},[36,42171,41574],{"class":42},[36,42173,34451],{"class":468},[36,42175,47],{"class":46},[36,42177,42017],{"class":112},[36,42179,4253],{"class":42},[36,42181,34460],{"class":468},[36,42183,47],{"class":46},[36,42185,42017],{"class":112},[36,42187,4253],{"class":42},[36,42189,34469],{"class":468},[36,42191,47],{"class":46},[36,42193,1982],{"class":112},[36,42195,4253],{"class":42},[36,42197,34478],{"class":468},[36,42199,47],{"class":46},[36,42201,4092],{"class":112},[36,42203,41607],{"class":42},[36,42205,42206],{"class":38,"line":1065},[36,42207,41612],{"class":42},[36,42209,42210,42212,42214,42216,42218,42220,42222,42224,42226,42228,42230,42232,42234,42236,42238,42240,42242],{"class":38,"line":1077},[36,42211,41574],{"class":42},[36,42213,34451],{"class":468},[36,42215,47],{"class":46},[36,42217,42017],{"class":112},[36,42219,4253],{"class":42},[36,42221,34460],{"class":468},[36,42223,47],{"class":46},[36,42225,42017],{"class":112},[36,42227,4253],{"class":42},[36,42229,34469],{"class":468},[36,42231,47],{"class":46},[36,42233,1982],{"class":112},[36,42235,4253],{"class":42},[36,42237,34478],{"class":468},[36,42239,47],{"class":46},[36,42241,4092],{"class":112},[36,42243,41607],{"class":42},[36,42245,42246],{"class":38,"line":1082},[36,42247,41612],{"class":42},[36,42249,42250,42252,42254,42256,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282],{"class":38,"line":1125},[36,42251,41574],{"class":42},[36,42253,34451],{"class":468},[36,42255,47],{"class":46},[36,42257,42017],{"class":112},[36,42259,4253],{"class":42},[36,42261,34460],{"class":468},[36,42263,47],{"class":46},[36,42265,42017],{"class":112},[36,42267,4253],{"class":42},[36,42269,34469],{"class":468},[36,42271,47],{"class":46},[36,42273,1982],{"class":112},[36,42275,4253],{"class":42},[36,42277,34478],{"class":468},[36,42279,47],{"class":46},[36,42281,4092],{"class":112},[36,42283,41607],{"class":42},[36,42285,42286],{"class":38,"line":1164},[36,42287,41612],{"class":42},[36,42289,42290,42292,42294,42296,42298,42300,42302,42304,42306,42308,42310,42312,42314],{"class":38,"line":1169},[36,42291,41657],{"class":42},[36,42293,34469],{"class":468},[36,42295,47],{"class":46},[36,42297,498],{"class":112},[36,42299,4253],{"class":42},[36,42301,34524],{"class":468},[36,42303,47],{"class":46},[36,42305,498],{"class":112},[36,42307,4253],{"class":42},[36,42309,34478],{"class":468},[36,42311,47],{"class":46},[36,42313,1859],{"class":112},[36,42315,922],{"class":42},[36,42317,42318],{"class":38,"line":1180},[36,42319,41686],{"class":42},[36,42321,42322],{"class":38,"line":1198},[36,42323,42324],{"class":3943},"        # 全连接层\n",[36,42326,42327,42329,42332,42334],{"class":38,"line":1215},[36,42328,909],{"class":112},[36,42330,42331],{"class":42},".block6",[36,42333,47],{"class":46},[36,42335,41569],{"class":42},[36,42337,42338],{"class":38,"line":1236},[36,42339,42340],{"class":3943},"            # 平展操作\n",[36,42342,42343],{"class":38,"line":1245},[36,42344,42345],{"class":3943},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[36,42347,42348],{"class":38,"line":1250},[36,42349,42350],{"class":42},"            nn.Flatten(),\n",[36,42352,42353,42356,42358,42360,42362,42364,42366,42368,42370],{"class":38,"line":1265},[36,42354,42355],{"class":42},"            nn.Linear(",[36,42357,4244],{"class":112},[36,42359,1372],{"class":46},[36,42361,4244],{"class":112},[36,42363,1372],{"class":46},[36,42365,42017],{"class":112},[36,42367,4253],{"class":42},[36,42369,38430],{"class":112},[36,42371,41607],{"class":42},[36,42373,42374],{"class":38,"line":1281},[36,42375,41612],{"class":42},[36,42377,42378,42380,42382,42384,42386],{"class":38,"line":1297},[36,42379,42355],{"class":42},[36,42381,38430],{"class":112},[36,42383,4253],{"class":42},[36,42385,35656],{"class":112},[36,42387,41607],{"class":42},[36,42389,42390],{"class":38,"line":1314},[36,42391,41612],{"class":42},[36,42393,42394,42396,42398,42400,42402],{"class":38,"line":1336},[36,42395,42355],{"class":42},[36,42397,35656],{"class":112},[36,42399,4253],{"class":42},[36,42401,554],{"class":112},[36,42403,922],{"class":42},[36,42405,42406],{"class":38,"line":1356},[36,42407,41686],{"class":42},[36,42409,42410],{"class":38,"line":1361},[36,42411,659],{"emptyLinePlaceholder":658},[36,42413,42414],{"class":38,"line":1407},[36,42415,42416],{"class":3943},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,42418,42419],{"class":38,"line":1423},[36,42420,42421],{"class":3943},"        # 循环遍历模型\n",[36,42423,42424,42426,42429,42431,42433],{"class":38,"line":1439},[36,42425,1613],{"class":46},[36,42427,42428],{"class":42}," m ",[36,42430,1619],{"class":46},[36,42432,406],{"class":112},[36,42434,42435],{"class":42},".modules():\n",[36,42437,42438],{"class":38,"line":1444},[36,42439,42440],{"class":3943},"            # print(m)\n",[36,42442,42443,42445,42448],{"class":38,"line":1486},[36,42444,8338],{"class":46},[36,42446,42447],{"class":112}," isinstance",[36,42449,42450],{"class":42},"(m,nn.Conv2d):\n",[36,42452,42453],{"class":38,"line":1499},[36,42454,42455],{"class":3943},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,42457,42458,42461,42464,42466,42469],{"class":38,"line":1513},[36,42459,42460],{"class":42},"                nn.init.kaiming_normal_(m.weight,",[36,42462,42463],{"class":468},"nonlinearity",[36,42465,47],{"class":46},[36,42467,42468],{"class":105},"'relu'",[36,42470,922],{"class":42},[36,42472,42473],{"class":38,"line":1518},[36,42474,42475],{"class":3943},"                # 判断b参数是否存在\n",[36,42477,42478,42481,42484,42487,42490,42492],{"class":38,"line":1529},[36,42479,42480],{"class":46},"                if",[36,42482,42483],{"class":42}," m.bias ",[36,42485,42486],{"class":46},"is",[36,42488,42489],{"class":46}," not",[36,42491,1384],{"class":112},[36,42493,888],{"class":42},[36,42495,42496],{"class":38,"line":1539},[36,42497,42498],{"class":3943},"                    # 如果参数不存在的化初始化b=0\n",[36,42500,42501,42504,42506],{"class":38,"line":1544},[36,42502,42503],{"class":42},"                    nn.init.constant_(m.bias,",[36,42505,1859],{"class":112},[36,42507,922],{"class":42},[36,42509,42510],{"class":38,"line":1555},[36,42511,42512],{"class":3943},"            # 全连接层初始化\n",[36,42514,42515,42518,42520],{"class":38,"line":1572},[36,42516,42517],{"class":46},"            elif",[36,42519,42447],{"class":112},[36,42521,42522],{"class":42},"(m,nn.Linear):\n",[36,42524,42525],{"class":38,"line":1592},[36,42526,42527],{"class":3943},"                # 这个初始化方法是利用的是正太分布的方式\n",[36,42529,42530],{"class":38,"line":1597},[36,42531,42532],{"class":3943},"                # 均值为0，方差为0.01\n",[36,42534,42535,42538,42540,42542,42545],{"class":38,"line":1610},[36,42536,42537],{"class":42},"                nn.init.normal_(m.weight,",[36,42539,1859],{"class":112},[36,42541,4253],{"class":42},[36,42543,42544],{"class":112},"0.01",[36,42546,922],{"class":42},[36,42548,42549],{"class":38,"line":1632},[36,42550,42551],{"class":3943},"                # 初始化b参数\n",[36,42553,42554,42556,42558,42560,42562,42564],{"class":38,"line":1646},[36,42555,42480],{"class":46},[36,42557,42483],{"class":42},[36,42559,42486],{"class":46},[36,42561,42489],{"class":46},[36,42563,1384],{"class":112},[36,42565,888],{"class":42},[36,42567,42568,42570,42572],{"class":38,"line":1651},[36,42569,42503],{"class":42},[36,42571,1859],{"class":112},[36,42573,922],{"class":42},[36,42575,42576],{"class":38,"line":1664},[36,42577,659],{"emptyLinePlaceholder":658},[36,42579,42580],{"class":38,"line":1669},[36,42581,38725],{"class":3943},[36,42583,42584,42586,42588],{"class":38,"line":1681},[36,42585,876],{"class":46},[36,42587,34688],{"class":101},[36,42589,34691],{"class":42},[36,42591,42592,42594,42596,42598],{"class":38,"line":1694},[36,42593,34696],{"class":42},[36,42595,47],{"class":46},[36,42597,457],{"class":112},[36,42599,42600],{"class":42},".block1(x)\n",[36,42602,42603,42605,42607,42609],{"class":38,"line":1699},[36,42604,34696],{"class":42},[36,42606,47],{"class":46},[36,42608,457],{"class":112},[36,42610,42611],{"class":42},".block2(x)\n",[36,42613,42614,42616,42618,42620],{"class":38,"line":1714},[36,42615,34696],{"class":42},[36,42617,47],{"class":46},[36,42619,457],{"class":112},[36,42621,42622],{"class":42},".block3(x)\n",[36,42624,42625,42627,42629,42631],{"class":38,"line":1729},[36,42626,34696],{"class":42},[36,42628,47],{"class":46},[36,42630,457],{"class":112},[36,42632,42633],{"class":42},".block4(x)\n",[36,42635,42636,42638,42640,42642],{"class":38,"line":1746},[36,42637,34696],{"class":42},[36,42639,47],{"class":46},[36,42641,457],{"class":112},[36,42643,42644],{"class":42},".block5(x)\n",[36,42646,42647,42649,42651,42653],{"class":38,"line":1751},[36,42648,34696],{"class":42},[36,42650,47],{"class":46},[36,42652,457],{"class":112},[36,42654,42655],{"class":42},".block6(x)\n",[36,42657,42658,42660],{"class":38,"line":1765},[36,42659,1239],{"class":46},[36,42661,34804],{"class":42},[36,42663,42664],{"class":38,"line":1783},[36,42665,659],{"emptyLinePlaceholder":658},[36,42667,42668],{"class":38,"line":1799},[36,42669,42670],{"class":3943},"# 验证模型\n",[36,42672,42673,42675,42677,42679,42682],{"class":38,"line":1807},[36,42674,2067],{"class":46},[36,42676,2070],{"class":112},[36,42678,6652],{"class":46},[36,42680,42681],{"class":105},"'__main__'",[36,42683,888],{"class":42},[36,42685,42686,42688,42690,42692,42694,42696,42698,42700,42702],{"class":38,"line":1812},[36,42687,34831],{"class":42},[36,42689,47],{"class":46},[36,42691,34055],{"class":42},[36,42693,34838],{"class":105},[36,42695,5428],{"class":46},[36,42697,34843],{"class":42},[36,42699,5425],{"class":46},[36,42701,34080],{"class":105},[36,42703,922],{"class":42},[36,42705,42706,42708],{"class":38,"line":1817},[36,42707,1867],{"class":112},[36,42709,34089],{"class":42},[36,42711,42712,42714,42716],{"class":38,"line":1833},[36,42713,34883],{"class":42},[36,42715,47],{"class":46},[36,42717,42718],{"class":42},"VGG16().to(device)\n",[36,42720,42721,42723,42725,42727,42729,42731,42733,42735],{"class":38,"line":1844},[36,42722,1867],{"class":112},[36,42724,34895],{"class":42},[36,42726,4092],{"class":112},[36,42728,4253],{"class":42},[36,42730,35090],{"class":112},[36,42732,4253],{"class":42},[36,42734,35090],{"class":112},[36,42736,34908],{"class":42},[211,42738,42739],{"start":53},[214,42740,42741],{},"训练代码",[19,42743,42744],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,42746,42747],{},"解决方式:",[19,42749,42750],{},"①权重初始化",[26,42752,42754],{"className":28,"code":42753,"language":30,"meta":31,"style":31},"# 权重初始化,保证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",[33,42755,42756,42761,42766,42778,42783,42791,42796,42809,42814,42828,42833,42842,42847,42856,42861,42866,42879,42884,42898],{"__ignoreMap":31},[36,42757,42758],{"class":38,"line":39},[36,42759,42760],{"class":3943},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,42762,42763],{"class":38,"line":53},[36,42764,42765],{"class":3943},"# 循环遍历模型\n",[36,42767,42768,42770,42772,42774,42776],{"class":38,"line":196},[36,42769,3120],{"class":46},[36,42771,42428],{"class":42},[36,42773,1619],{"class":46},[36,42775,406],{"class":112},[36,42777,42435],{"class":42},[36,42779,42780],{"class":38,"line":642},[36,42781,42782],{"class":3943},"    # print(m)\n",[36,42784,42785,42787,42789],{"class":38,"line":655},[36,42786,3752],{"class":46},[36,42788,42447],{"class":112},[36,42790,42450],{"class":42},[36,42792,42793],{"class":38,"line":662},[36,42794,42795],{"class":3943},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,42797,42798,42801,42803,42805,42807],{"class":38,"line":667},[36,42799,42800],{"class":42},"        nn.init.kaiming_normal_(m.weight,",[36,42802,42463],{"class":468},[36,42804,47],{"class":46},[36,42806,42468],{"class":105},[36,42808,922],{"class":42},[36,42810,42811],{"class":38,"line":679},[36,42812,42813],{"class":3943},"        # 判断b参数是否存在\n",[36,42815,42816,42818,42820,42822,42824,42826],{"class":38,"line":685},[36,42817,995],{"class":46},[36,42819,42483],{"class":42},[36,42821,42486],{"class":46},[36,42823,42489],{"class":46},[36,42825,1384],{"class":112},[36,42827,888],{"class":42},[36,42829,42830],{"class":38,"line":691},[36,42831,42832],{"class":3943},"            # 如果参数不存在的化初始化b=0\n",[36,42834,42835,42838,42840],{"class":38,"line":696},[36,42836,42837],{"class":42},"            nn.init.constant_(m.bias,",[36,42839,1859],{"class":112},[36,42841,922],{"class":42},[36,42843,42844],{"class":38,"line":702},[36,42845,42846],{"class":3943},"    # 全连接层初始化\n",[36,42848,42849,42852,42854],{"class":38,"line":708},[36,42850,42851],{"class":46},"    elif",[36,42853,42447],{"class":112},[36,42855,42522],{"class":42},[36,42857,42858],{"class":38,"line":713},[36,42859,42860],{"class":3943},"        # 这个初始化方法是利用的是正太分布的方式\n",[36,42862,42863],{"class":38,"line":719},[36,42864,42865],{"class":3943},"        # 均值为0，方差为0.01\n",[36,42867,42868,42871,42873,42875,42877],{"class":38,"line":725},[36,42869,42870],{"class":42},"        nn.init.normal_(m.weight,",[36,42872,1859],{"class":112},[36,42874,4253],{"class":42},[36,42876,42544],{"class":112},[36,42878,922],{"class":42},[36,42880,42881],{"class":38,"line":731},[36,42882,42883],{"class":3943},"        # 初始化b参数\n",[36,42885,42886,42888,42890,42892,42894,42896],{"class":38,"line":736},[36,42887,995],{"class":46},[36,42889,42483],{"class":42},[36,42891,42486],{"class":46},[36,42893,42489],{"class":46},[36,42895,1384],{"class":112},[36,42897,888],{"class":42},[36,42899,42900,42902,42904],{"class":38,"line":742},[36,42901,42837],{"class":42},[36,42903,1859],{"class":112},[36,42905,922],{"class":42},[19,42907,42908],{},"②尽可能地增加批次",[19,42910,42911],{},"训练完整代码：",[26,42913,42914],{"className":28,"code":41459,"language":30,"meta":31,"style":31},[33,42915,42916,42922,42932,42942,42952,42956,42972,42980,42998,43002,43006,43016,43052,43056,43092,43096,43124,43128,43132,43142,43178,43182,43218,43222,43250,43254,43258,43268,43304,43308,43344,43348,43384,43388,43416,43420,43424,43434,43470,43474,43510,43514,43550,43554,43582,43586,43590,43600,43636,43640,43676,43680,43716,43720,43748,43752,43756,43766,43770,43774,43778,43798,43802,43814,43818,43830,43834,43838,43842,43846,43858,43862,43870,43874,43886,43890,43904,43908,43916,43920,43928,43932,43936,43948,43952,43966,43974,43978,43982,43990,44000,44010,44020,44030,44040,44050,44056,44060,44064,44076,44096,44102,44110],{"__ignoreMap":31},[36,42917,42918,42920],{"class":38,"line":39},[36,42919,611],{"class":46},[36,42921,34000],{"class":42},[36,42923,42924,42926,42928,42930],{"class":38,"line":53},[36,42925,645],{"class":46},[36,42927,41474],{"class":42},[36,42929,611],{"class":46},[36,42931,41479],{"class":42},[36,42933,42934,42936,42938,42940],{"class":38,"line":196},[36,42935,645],{"class":46},[36,42937,34342],{"class":42},[36,42939,611],{"class":46},[36,42941,34347],{"class":42},[36,42943,42944,42946,42948,42950],{"class":38,"line":642},[36,42945,645],{"class":46},[36,42947,34359],{"class":42},[36,42949,611],{"class":46},[36,42951,34364],{"class":42},[36,42953,42954],{"class":38,"line":655},[36,42955,659],{"emptyLinePlaceholder":658},[36,42957,42958,42960,42962,42964,42966,42968,42970],{"class":38,"line":662},[36,42959,832],{"class":46},[36,42961,41510],{"class":101},[36,42963,495],{"class":42},[36,42965,34380],{"class":101},[36,42967,842],{"class":42},[36,42969,34385],{"class":101},[36,42971,848],{"class":42},[36,42973,42974,42976,42978],{"class":38,"line":667},[36,42975,876],{"class":46},[36,42977,879],{"class":112},[36,42979,34406],{"class":42},[36,42981,42982,42984,42986,42988,42990,42992,42994,42996],{"class":38,"line":679},[36,42983,894],{"class":112},[36,42985,495],{"class":42},[36,42987,41537],{"class":112},[36,42989,478],{"class":42},[36,42991,457],{"class":112},[36,42993,34423],{"class":42},[36,42995,900],{"class":112},[36,42997,903],{"class":42},[36,42999,43000],{"class":38,"line":685},[36,43001,41552],{"class":3943},[36,43003,43004],{"class":38,"line":691},[36,43005,41557],{"class":3943},[36,43007,43008,43010,43012,43014],{"class":38,"line":696},[36,43009,909],{"class":112},[36,43011,41564],{"class":42},[36,43013,47],{"class":46},[36,43015,41569],{"class":42},[36,43017,43018,43020,43022,43024,43026,43028,43030,43032,43034,43036,43038,43040,43042,43044,43046,43048,43050],{"class":38,"line":702},[36,43019,41574],{"class":42},[36,43021,34451],{"class":468},[36,43023,47],{"class":46},[36,43025,4092],{"class":112},[36,43027,4253],{"class":42},[36,43029,34460],{"class":468},[36,43031,47],{"class":46},[36,43033,4078],{"class":112},[36,43035,4253],{"class":42},[36,43037,34469],{"class":468},[36,43039,47],{"class":46},[36,43041,1982],{"class":112},[36,43043,4253],{"class":42},[36,43045,34478],{"class":468},[36,43047,47],{"class":46},[36,43049,4092],{"class":112},[36,43051,41607],{"class":42},[36,43053,43054],{"class":38,"line":708},[36,43055,41612],{"class":42},[36,43057,43058,43060,43062,43064,43066,43068,43070,43072,43074,43076,43078,43080,43082,43084,43086,43088,43090],{"class":38,"line":713},[36,43059,41574],{"class":42},[36,43061,34451],{"class":468},[36,43063,47],{"class":46},[36,43065,4078],{"class":112},[36,43067,4253],{"class":42},[36,43069,34460],{"class":468},[36,43071,47],{"class":46},[36,43073,4078],{"class":112},[36,43075,4253],{"class":42},[36,43077,34469],{"class":468},[36,43079,47],{"class":46},[36,43081,1982],{"class":112},[36,43083,4253],{"class":42},[36,43085,34478],{"class":468},[36,43087,47],{"class":46},[36,43089,4092],{"class":112},[36,43091,41607],{"class":42},[36,43093,43094],{"class":38,"line":719},[36,43095,41612],{"class":42},[36,43097,43098,43100,43102,43104,43106,43108,43110,43112,43114,43116,43118,43120,43122],{"class":38,"line":725},[36,43099,41657],{"class":42},[36,43101,34469],{"class":468},[36,43103,47],{"class":46},[36,43105,498],{"class":112},[36,43107,4253],{"class":42},[36,43109,34524],{"class":468},[36,43111,47],{"class":46},[36,43113,498],{"class":112},[36,43115,4253],{"class":42},[36,43117,34478],{"class":468},[36,43119,47],{"class":46},[36,43121,1859],{"class":112},[36,43123,922],{"class":42},[36,43125,43126],{"class":38,"line":731},[36,43127,41686],{"class":42},[36,43129,43130],{"class":38,"line":736},[36,43131,41691],{"class":3943},[36,43133,43134,43136,43138,43140],{"class":38,"line":742},[36,43135,909],{"class":112},[36,43137,41698],{"class":42},[36,43139,47],{"class":46},[36,43141,41569],{"class":42},[36,43143,43144,43146,43148,43150,43152,43154,43156,43158,43160,43162,43164,43166,43168,43170,43172,43174,43176],{"class":38,"line":748},[36,43145,41574],{"class":42},[36,43147,34451],{"class":468},[36,43149,47],{"class":46},[36,43151,4078],{"class":112},[36,43153,4253],{"class":42},[36,43155,34460],{"class":468},[36,43157,47],{"class":46},[36,43159,35656],{"class":112},[36,43161,4253],{"class":42},[36,43163,34469],{"class":468},[36,43165,47],{"class":46},[36,43167,1982],{"class":112},[36,43169,4253],{"class":42},[36,43171,34478],{"class":468},[36,43173,47],{"class":46},[36,43175,4092],{"class":112},[36,43177,41607],{"class":42},[36,43179,43180],{"class":38,"line":754},[36,43181,41612],{"class":42},[36,43183,43184,43186,43188,43190,43192,43194,43196,43198,43200,43202,43204,43206,43208,43210,43212,43214,43216],{"class":38,"line":760},[36,43185,41574],{"class":42},[36,43187,34451],{"class":468},[36,43189,47],{"class":46},[36,43191,35656],{"class":112},[36,43193,4253],{"class":42},[36,43195,34460],{"class":468},[36,43197,47],{"class":46},[36,43199,35656],{"class":112},[36,43201,4253],{"class":42},[36,43203,34469],{"class":468},[36,43205,47],{"class":46},[36,43207,1982],{"class":112},[36,43209,4253],{"class":42},[36,43211,34478],{"class":468},[36,43213,47],{"class":46},[36,43215,4092],{"class":112},[36,43217,41607],{"class":42},[36,43219,43220],{"class":38,"line":766},[36,43221,41612],{"class":42},[36,43223,43224,43226,43228,43230,43232,43234,43236,43238,43240,43242,43244,43246,43248],{"class":38,"line":772},[36,43225,41657],{"class":42},[36,43227,34469],{"class":468},[36,43229,47],{"class":46},[36,43231,498],{"class":112},[36,43233,4253],{"class":42},[36,43235,34524],{"class":468},[36,43237,47],{"class":46},[36,43239,498],{"class":112},[36,43241,4253],{"class":42},[36,43243,34478],{"class":468},[36,43245,47],{"class":46},[36,43247,1859],{"class":112},[36,43249,922],{"class":42},[36,43251,43252],{"class":38,"line":778},[36,43253,41686],{"class":42},[36,43255,43256],{"class":38,"line":783},[36,43257,41819],{"class":3943},[36,43259,43260,43262,43264,43266],{"class":38,"line":789},[36,43261,909],{"class":112},[36,43263,41826],{"class":42},[36,43265,47],{"class":46},[36,43267,41569],{"class":42},[36,43269,43270,43272,43274,43276,43278,43280,43282,43284,43286,43288,43290,43292,43294,43296,43298,43300,43302],{"class":38,"line":795},[36,43271,41574],{"class":42},[36,43273,34451],{"class":468},[36,43275,47],{"class":46},[36,43277,35656],{"class":112},[36,43279,4253],{"class":42},[36,43281,34460],{"class":468},[36,43283,47],{"class":46},[36,43285,38430],{"class":112},[36,43287,4253],{"class":42},[36,43289,34469],{"class":468},[36,43291,47],{"class":46},[36,43293,1982],{"class":112},[36,43295,4253],{"class":42},[36,43297,34478],{"class":468},[36,43299,47],{"class":46},[36,43301,4092],{"class":112},[36,43303,41607],{"class":42},[36,43305,43306],{"class":38,"line":801},[36,43307,41612],{"class":42},[36,43309,43310,43312,43314,43316,43318,43320,43322,43324,43326,43328,43330,43332,43334,43336,43338,43340,43342],{"class":38,"line":807},[36,43311,41574],{"class":42},[36,43313,34451],{"class":468},[36,43315,47],{"class":46},[36,43317,38430],{"class":112},[36,43319,4253],{"class":42},[36,43321,34460],{"class":468},[36,43323,47],{"class":46},[36,43325,38430],{"class":112},[36,43327,4253],{"class":42},[36,43329,34469],{"class":468},[36,43331,47],{"class":46},[36,43333,1982],{"class":112},[36,43335,4253],{"class":42},[36,43337,34478],{"class":468},[36,43339,47],{"class":46},[36,43341,4092],{"class":112},[36,43343,41607],{"class":42},[36,43345,43346],{"class":38,"line":813},[36,43347,41612],{"class":42},[36,43349,43350,43352,43354,43356,43358,43360,43362,43364,43366,43368,43370,43372,43374,43376,43378,43380,43382],{"class":38,"line":819},[36,43351,41574],{"class":42},[36,43353,34451],{"class":468},[36,43355,47],{"class":46},[36,43357,38430],{"class":112},[36,43359,4253],{"class":42},[36,43361,34460],{"class":468},[36,43363,47],{"class":46},[36,43365,38430],{"class":112},[36,43367,4253],{"class":42},[36,43369,34469],{"class":468},[36,43371,47],{"class":46},[36,43373,1982],{"class":112},[36,43375,4253],{"class":42},[36,43377,34478],{"class":468},[36,43379,47],{"class":46},[36,43381,4092],{"class":112},[36,43383,41607],{"class":42},[36,43385,43386],{"class":38,"line":824},[36,43387,41612],{"class":42},[36,43389,43390,43392,43394,43396,43398,43400,43402,43404,43406,43408,43410,43412,43414],{"class":38,"line":829},[36,43391,41657],{"class":42},[36,43393,34469],{"class":468},[36,43395,47],{"class":46},[36,43397,498],{"class":112},[36,43399,4253],{"class":42},[36,43401,34524],{"class":468},[36,43403,47],{"class":46},[36,43405,498],{"class":112},[36,43407,4253],{"class":42},[36,43409,34478],{"class":468},[36,43411,47],{"class":46},[36,43413,1859],{"class":112},[36,43415,922],{"class":42},[36,43417,43418],{"class":38,"line":851},[36,43419,41686],{"class":42},[36,43421,43422],{"class":38,"line":868},[36,43423,41987],{"class":3943},[36,43425,43426,43428,43430,43432],{"class":38,"line":873},[36,43427,909],{"class":112},[36,43429,41994],{"class":42},[36,43431,47],{"class":46},[36,43433,41569],{"class":42},[36,43435,43436,43438,43440,43442,43444,43446,43448,43450,43452,43454,43456,43458,43460,43462,43464,43466,43468],{"class":38,"line":891},[36,43437,41574],{"class":42},[36,43439,34451],{"class":468},[36,43441,47],{"class":46},[36,43443,38430],{"class":112},[36,43445,4253],{"class":42},[36,43447,34460],{"class":468},[36,43449,47],{"class":46},[36,43451,42017],{"class":112},[36,43453,4253],{"class":42},[36,43455,34469],{"class":468},[36,43457,47],{"class":46},[36,43459,1982],{"class":112},[36,43461,4253],{"class":42},[36,43463,34478],{"class":468},[36,43465,47],{"class":46},[36,43467,4092],{"class":112},[36,43469,41607],{"class":42},[36,43471,43472],{"class":38,"line":906},[36,43473,41612],{"class":42},[36,43475,43476,43478,43480,43482,43484,43486,43488,43490,43492,43494,43496,43498,43500,43502,43504,43506,43508],{"class":38,"line":925},[36,43477,41574],{"class":42},[36,43479,34451],{"class":468},[36,43481,47],{"class":46},[36,43483,42017],{"class":112},[36,43485,4253],{"class":42},[36,43487,34460],{"class":468},[36,43489,47],{"class":46},[36,43491,42017],{"class":112},[36,43493,4253],{"class":42},[36,43495,34469],{"class":468},[36,43497,47],{"class":46},[36,43499,1982],{"class":112},[36,43501,4253],{"class":42},[36,43503,34478],{"class":468},[36,43505,47],{"class":46},[36,43507,4092],{"class":112},[36,43509,41607],{"class":42},[36,43511,43512],{"class":38,"line":943},[36,43513,41612],{"class":42},[36,43515,43516,43518,43520,43522,43524,43526,43528,43530,43532,43534,43536,43538,43540,43542,43544,43546,43548],{"class":38,"line":948},[36,43517,41574],{"class":42},[36,43519,34451],{"class":468},[36,43521,47],{"class":46},[36,43523,42017],{"class":112},[36,43525,4253],{"class":42},[36,43527,34460],{"class":468},[36,43529,47],{"class":46},[36,43531,42017],{"class":112},[36,43533,4253],{"class":42},[36,43535,34469],{"class":468},[36,43537,47],{"class":46},[36,43539,1982],{"class":112},[36,43541,4253],{"class":42},[36,43543,34478],{"class":468},[36,43545,47],{"class":46},[36,43547,4092],{"class":112},[36,43549,41607],{"class":42},[36,43551,43552],{"class":38,"line":971},[36,43553,41612],{"class":42},[36,43555,43556,43558,43560,43562,43564,43566,43568,43570,43572,43574,43576,43578,43580],{"class":38,"line":992},[36,43557,41657],{"class":42},[36,43559,34469],{"class":468},[36,43561,47],{"class":46},[36,43563,498],{"class":112},[36,43565,4253],{"class":42},[36,43567,34524],{"class":468},[36,43569,47],{"class":46},[36,43571,498],{"class":112},[36,43573,4253],{"class":42},[36,43575,34478],{"class":468},[36,43577,47],{"class":46},[36,43579,1859],{"class":112},[36,43581,922],{"class":42},[36,43583,43584],{"class":38,"line":1020},[36,43585,41686],{"class":42},[36,43587,43588],{"class":38,"line":1036},[36,43589,42156],{"class":3943},[36,43591,43592,43594,43596,43598],{"class":38,"line":1041},[36,43593,909],{"class":112},[36,43595,42163],{"class":42},[36,43597,47],{"class":46},[36,43599,41569],{"class":42},[36,43601,43602,43604,43606,43608,43610,43612,43614,43616,43618,43620,43622,43624,43626,43628,43630,43632,43634],{"class":38,"line":1052},[36,43603,41574],{"class":42},[36,43605,34451],{"class":468},[36,43607,47],{"class":46},[36,43609,42017],{"class":112},[36,43611,4253],{"class":42},[36,43613,34460],{"class":468},[36,43615,47],{"class":46},[36,43617,42017],{"class":112},[36,43619,4253],{"class":42},[36,43621,34469],{"class":468},[36,43623,47],{"class":46},[36,43625,1982],{"class":112},[36,43627,4253],{"class":42},[36,43629,34478],{"class":468},[36,43631,47],{"class":46},[36,43633,4092],{"class":112},[36,43635,41607],{"class":42},[36,43637,43638],{"class":38,"line":1065},[36,43639,41612],{"class":42},[36,43641,43642,43644,43646,43648,43650,43652,43654,43656,43658,43660,43662,43664,43666,43668,43670,43672,43674],{"class":38,"line":1077},[36,43643,41574],{"class":42},[36,43645,34451],{"class":468},[36,43647,47],{"class":46},[36,43649,42017],{"class":112},[36,43651,4253],{"class":42},[36,43653,34460],{"class":468},[36,43655,47],{"class":46},[36,43657,42017],{"class":112},[36,43659,4253],{"class":42},[36,43661,34469],{"class":468},[36,43663,47],{"class":46},[36,43665,1982],{"class":112},[36,43667,4253],{"class":42},[36,43669,34478],{"class":468},[36,43671,47],{"class":46},[36,43673,4092],{"class":112},[36,43675,41607],{"class":42},[36,43677,43678],{"class":38,"line":1082},[36,43679,41612],{"class":42},[36,43681,43682,43684,43686,43688,43690,43692,43694,43696,43698,43700,43702,43704,43706,43708,43710,43712,43714],{"class":38,"line":1125},[36,43683,41574],{"class":42},[36,43685,34451],{"class":468},[36,43687,47],{"class":46},[36,43689,42017],{"class":112},[36,43691,4253],{"class":42},[36,43693,34460],{"class":468},[36,43695,47],{"class":46},[36,43697,42017],{"class":112},[36,43699,4253],{"class":42},[36,43701,34469],{"class":468},[36,43703,47],{"class":46},[36,43705,1982],{"class":112},[36,43707,4253],{"class":42},[36,43709,34478],{"class":468},[36,43711,47],{"class":46},[36,43713,4092],{"class":112},[36,43715,41607],{"class":42},[36,43717,43718],{"class":38,"line":1164},[36,43719,41612],{"class":42},[36,43721,43722,43724,43726,43728,43730,43732,43734,43736,43738,43740,43742,43744,43746],{"class":38,"line":1169},[36,43723,41657],{"class":42},[36,43725,34469],{"class":468},[36,43727,47],{"class":46},[36,43729,498],{"class":112},[36,43731,4253],{"class":42},[36,43733,34524],{"class":468},[36,43735,47],{"class":46},[36,43737,498],{"class":112},[36,43739,4253],{"class":42},[36,43741,34478],{"class":468},[36,43743,47],{"class":46},[36,43745,1859],{"class":112},[36,43747,922],{"class":42},[36,43749,43750],{"class":38,"line":1180},[36,43751,41686],{"class":42},[36,43753,43754],{"class":38,"line":1198},[36,43755,42324],{"class":3943},[36,43757,43758,43760,43762,43764],{"class":38,"line":1215},[36,43759,909],{"class":112},[36,43761,42331],{"class":42},[36,43763,47],{"class":46},[36,43765,41569],{"class":42},[36,43767,43768],{"class":38,"line":1236},[36,43769,42340],{"class":3943},[36,43771,43772],{"class":38,"line":1245},[36,43773,42345],{"class":3943},[36,43775,43776],{"class":38,"line":1250},[36,43777,42350],{"class":42},[36,43779,43780,43782,43784,43786,43788,43790,43792,43794,43796],{"class":38,"line":1265},[36,43781,42355],{"class":42},[36,43783,4244],{"class":112},[36,43785,1372],{"class":46},[36,43787,4244],{"class":112},[36,43789,1372],{"class":46},[36,43791,42017],{"class":112},[36,43793,4253],{"class":42},[36,43795,38430],{"class":112},[36,43797,41607],{"class":42},[36,43799,43800],{"class":38,"line":1281},[36,43801,41612],{"class":42},[36,43803,43804,43806,43808,43810,43812],{"class":38,"line":1297},[36,43805,42355],{"class":42},[36,43807,38430],{"class":112},[36,43809,4253],{"class":42},[36,43811,35656],{"class":112},[36,43813,41607],{"class":42},[36,43815,43816],{"class":38,"line":1314},[36,43817,41612],{"class":42},[36,43819,43820,43822,43824,43826,43828],{"class":38,"line":1336},[36,43821,42355],{"class":42},[36,43823,35656],{"class":112},[36,43825,4253],{"class":42},[36,43827,554],{"class":112},[36,43829,922],{"class":42},[36,43831,43832],{"class":38,"line":1356},[36,43833,41686],{"class":42},[36,43835,43836],{"class":38,"line":1361},[36,43837,659],{"emptyLinePlaceholder":658},[36,43839,43840],{"class":38,"line":1407},[36,43841,42416],{"class":3943},[36,43843,43844],{"class":38,"line":1423},[36,43845,42421],{"class":3943},[36,43847,43848,43850,43852,43854,43856],{"class":38,"line":1439},[36,43849,1613],{"class":46},[36,43851,42428],{"class":42},[36,43853,1619],{"class":46},[36,43855,406],{"class":112},[36,43857,42435],{"class":42},[36,43859,43860],{"class":38,"line":1444},[36,43861,42440],{"class":3943},[36,43863,43864,43866,43868],{"class":38,"line":1486},[36,43865,8338],{"class":46},[36,43867,42447],{"class":112},[36,43869,42450],{"class":42},[36,43871,43872],{"class":38,"line":1499},[36,43873,42455],{"class":3943},[36,43875,43876,43878,43880,43882,43884],{"class":38,"line":1513},[36,43877,42460],{"class":42},[36,43879,42463],{"class":468},[36,43881,47],{"class":46},[36,43883,42468],{"class":105},[36,43885,922],{"class":42},[36,43887,43888],{"class":38,"line":1518},[36,43889,42475],{"class":3943},[36,43891,43892,43894,43896,43898,43900,43902],{"class":38,"line":1529},[36,43893,42480],{"class":46},[36,43895,42483],{"class":42},[36,43897,42486],{"class":46},[36,43899,42489],{"class":46},[36,43901,1384],{"class":112},[36,43903,888],{"class":42},[36,43905,43906],{"class":38,"line":1539},[36,43907,42498],{"class":3943},[36,43909,43910,43912,43914],{"class":38,"line":1544},[36,43911,42503],{"class":42},[36,43913,1859],{"class":112},[36,43915,922],{"class":42},[36,43917,43918],{"class":38,"line":1555},[36,43919,42512],{"class":3943},[36,43921,43922,43924,43926],{"class":38,"line":1572},[36,43923,42517],{"class":46},[36,43925,42447],{"class":112},[36,43927,42522],{"class":42},[36,43929,43930],{"class":38,"line":1592},[36,43931,42527],{"class":3943},[36,43933,43934],{"class":38,"line":1597},[36,43935,42532],{"class":3943},[36,43937,43938,43940,43942,43944,43946],{"class":38,"line":1610},[36,43939,42537],{"class":42},[36,43941,1859],{"class":112},[36,43943,4253],{"class":42},[36,43945,42544],{"class":112},[36,43947,922],{"class":42},[36,43949,43950],{"class":38,"line":1632},[36,43951,42551],{"class":3943},[36,43953,43954,43956,43958,43960,43962,43964],{"class":38,"line":1646},[36,43955,42480],{"class":46},[36,43957,42483],{"class":42},[36,43959,42486],{"class":46},[36,43961,42489],{"class":46},[36,43963,1384],{"class":112},[36,43965,888],{"class":42},[36,43967,43968,43970,43972],{"class":38,"line":1651},[36,43969,42503],{"class":42},[36,43971,1859],{"class":112},[36,43973,922],{"class":42},[36,43975,43976],{"class":38,"line":1664},[36,43977,659],{"emptyLinePlaceholder":658},[36,43979,43980],{"class":38,"line":1669},[36,43981,38725],{"class":3943},[36,43983,43984,43986,43988],{"class":38,"line":1681},[36,43985,876],{"class":46},[36,43987,34688],{"class":101},[36,43989,34691],{"class":42},[36,43991,43992,43994,43996,43998],{"class":38,"line":1694},[36,43993,34696],{"class":42},[36,43995,47],{"class":46},[36,43997,457],{"class":112},[36,43999,42600],{"class":42},[36,44001,44002,44004,44006,44008],{"class":38,"line":1699},[36,44003,34696],{"class":42},[36,44005,47],{"class":46},[36,44007,457],{"class":112},[36,44009,42611],{"class":42},[36,44011,44012,44014,44016,44018],{"class":38,"line":1714},[36,44013,34696],{"class":42},[36,44015,47],{"class":46},[36,44017,457],{"class":112},[36,44019,42622],{"class":42},[36,44021,44022,44024,44026,44028],{"class":38,"line":1729},[36,44023,34696],{"class":42},[36,44025,47],{"class":46},[36,44027,457],{"class":112},[36,44029,42633],{"class":42},[36,44031,44032,44034,44036,44038],{"class":38,"line":1746},[36,44033,34696],{"class":42},[36,44035,47],{"class":46},[36,44037,457],{"class":112},[36,44039,42644],{"class":42},[36,44041,44042,44044,44046,44048],{"class":38,"line":1751},[36,44043,34696],{"class":42},[36,44045,47],{"class":46},[36,44047,457],{"class":112},[36,44049,42655],{"class":42},[36,44051,44052,44054],{"class":38,"line":1765},[36,44053,1239],{"class":46},[36,44055,34804],{"class":42},[36,44057,44058],{"class":38,"line":1783},[36,44059,659],{"emptyLinePlaceholder":658},[36,44061,44062],{"class":38,"line":1799},[36,44063,42670],{"class":3943},[36,44065,44066,44068,44070,44072,44074],{"class":38,"line":1807},[36,44067,2067],{"class":46},[36,44069,2070],{"class":112},[36,44071,6652],{"class":46},[36,44073,42681],{"class":105},[36,44075,888],{"class":42},[36,44077,44078,44080,44082,44084,44086,44088,44090,44092,44094],{"class":38,"line":1812},[36,44079,34831],{"class":42},[36,44081,47],{"class":46},[36,44083,34055],{"class":42},[36,44085,34838],{"class":105},[36,44087,5428],{"class":46},[36,44089,34843],{"class":42},[36,44091,5425],{"class":46},[36,44093,34080],{"class":105},[36,44095,922],{"class":42},[36,44097,44098,44100],{"class":38,"line":1817},[36,44099,1867],{"class":112},[36,44101,34089],{"class":42},[36,44103,44104,44106,44108],{"class":38,"line":1833},[36,44105,34883],{"class":42},[36,44107,47],{"class":46},[36,44109,42718],{"class":42},[36,44111,44112,44114,44116,44118,44120,44122,44124,44126],{"class":38,"line":1844},[36,44113,1867],{"class":112},[36,44115,34895],{"class":42},[36,44117,4092],{"class":112},[36,44119,4253],{"class":42},[36,44121,35090],{"class":112},[36,44123,4253],{"class":42},[36,44125,35090],{"class":112},[36,44127,34908],{"class":42},[211,44129,44130],{"start":196},[214,44131,44132],{},"测试代码",[26,44134,44136],{"className":28,"code":44135,"language":30,"meta":31,"style":31},"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",[33,44137,44138,44144,44154,44164,44168,44178,44189,44193,44197,44201,44209,44225,44235,44251,44261,44275,44279,44289,44299,44309,44315,44319,44323,44331,44335,44351,44359,44363,44367,44375,44383,44387,44391,44395,44399,44405,44409,44419,44427,44435,44439,44443,44447,44455,44459,44475,44479,44483,44487,44499,44503,44515,44519,44523,44535,44539,44549,44553,44557,44569,44573,44582,44586,44590,44598,44602,44610,44614,44618,44622,44626,44630,44646,44654,44658,44662,44710,44716,44720,44730,44738,44746,44750,44754,44758,44762,44770,44774,44790,44794,44802,44810],{"__ignoreMap":31},[36,44139,44140,44142],{"class":38,"line":39},[36,44141,611],{"class":46},[36,44143,34000],{"class":42},[36,44145,44146,44148,44150,44152],{"class":38,"line":53},[36,44147,611],{"class":46},[36,44149,35005],{"class":42},[36,44151,617],{"class":46},[36,44153,35010],{"class":42},[36,44155,44156,44158,44160,44162],{"class":38,"line":196},[36,44157,645],{"class":46},[36,44159,34988],{"class":42},[36,44161,611],{"class":46},[36,44163,34993],{"class":42},[36,44165,44166],{"class":38,"line":642},[36,44167,37482],{"class":3943},[36,44169,44170,44172,44174,44176],{"class":38,"line":655},[36,44171,645],{"class":46},[36,44173,34961],{"class":42},[36,44175,611],{"class":46},[36,44177,34966],{"class":42},[36,44179,44180,44182,44184,44186],{"class":38,"line":662},[36,44181,645],{"class":46},[36,44183,35502],{"class":42},[36,44185,611],{"class":46},[36,44187,44188],{"class":112}," VGG16\n",[36,44190,44191],{"class":38,"line":667},[36,44192,659],{"emptyLinePlaceholder":658},[36,44194,44195],{"class":38,"line":679},[36,44196,659],{"emptyLinePlaceholder":658},[36,44198,44199],{"class":38,"line":685},[36,44200,37511],{"class":3943},[36,44202,44203,44205,44207],{"class":38,"line":691},[36,44204,1820],{"class":46},[36,44206,37518],{"class":101},[36,44208,35540],{"class":42},[36,44210,44211,44213,44215,44217,44219,44221,44223],{"class":38,"line":696},[36,44212,37525],{"class":42},[36,44214,47],{"class":46},[36,44216,35045],{"class":42},[36,44218,35048],{"class":468},[36,44220,47],{"class":46},[36,44222,35053],{"class":105},[36,44224,35056],{"class":42},[36,44226,44227,44229,44231,44233],{"class":38,"line":702},[36,44228,37542],{"class":468},[36,44230,47],{"class":46},[36,44232,37547],{"class":112},[36,44234,35056],{"class":42},[36,44236,44237,44239,44241,44243,44245,44247,44249],{"class":38,"line":708},[36,44238,37554],{"class":468},[36,44240,47],{"class":46},[36,44242,35083],{"class":42},[36,44244,1476],{"class":468},[36,44246,47],{"class":46},[36,44248,35090],{"class":112},[36,44250,35093],{"class":42},[36,44252,44253,44255,44257,44259],{"class":38,"line":713},[36,44254,37571],{"class":468},[36,44256,47],{"class":46},[36,44258,35066],{"class":112},[36,44260,922],{"class":42},[36,44262,44263,44265,44267,44269,44271,44273],{"class":38,"line":719},[36,44264,37582],{"class":42},[36,44266,47],{"class":46},[36,44268,35123],{"class":42},[36,44270,35126],{"class":468},[36,44272,47],{"class":46},[36,44274,37593],{"class":42},[36,44276,44277],{"class":38,"line":725},[36,44278,37598],{"class":3943},[36,44280,44281,44283,44285,44287],{"class":38,"line":731},[36,44282,37603],{"class":468},[36,44284,47],{"class":46},[36,44286,4092],{"class":112},[36,44288,35056],{"class":42},[36,44290,44291,44293,44295,44297],{"class":38,"line":736},[36,44292,37614],{"class":468},[36,44294,47],{"class":46},[36,44296,35066],{"class":112},[36,44298,35056],{"class":42},[36,44300,44301,44303,44305,44307],{"class":38,"line":742},[36,44302,37625],{"class":468},[36,44304,47],{"class":46},[36,44306,1859],{"class":112},[36,44308,922],{"class":42},[36,44310,44311,44313],{"class":38,"line":748},[36,44312,7788],{"class":46},[36,44314,37638],{"class":42},[36,44316,44317],{"class":38,"line":754},[36,44318,659],{"emptyLinePlaceholder":658},[36,44320,44321],{"class":38,"line":760},[36,44322,37647],{"class":3943},[36,44324,44325,44327,44329],{"class":38,"line":766},[36,44326,1820],{"class":46},[36,44328,37654],{"class":101},[36,44330,37657],{"class":42},[36,44332,44333],{"class":38,"line":772},[36,44334,37662],{"class":3943},[36,44336,44337,44339,44341,44343,44345,44347,44349],{"class":38,"line":778},[36,44338,34831],{"class":42},[36,44340,47],{"class":46},[36,44342,34838],{"class":105},[36,44344,5428],{"class":46},[36,44346,34843],{"class":42},[36,44348,5425],{"class":46},[36,44350,37679],{"class":105},[36,44352,44353,44355,44357],{"class":38,"line":783},[36,44354,34883],{"class":42},[36,44356,47],{"class":46},[36,44358,35875],{"class":42},[36,44360,44361],{"class":38,"line":789},[36,44362,659],{"emptyLinePlaceholder":658},[36,44364,44365],{"class":38,"line":795},[36,44366,37696],{"class":3943},[36,44368,44369,44371,44373],{"class":38,"line":801},[36,44370,37701],{"class":42},[36,44372,47],{"class":46},[36,44374,35928],{"class":112},[36,44376,44377,44379,44381],{"class":38,"line":807},[36,44378,37710],{"class":42},[36,44380,47],{"class":46},[36,44382,6787],{"class":112},[36,44384,44385],{"class":38,"line":813},[36,44386,659],{"emptyLinePlaceholder":658},[36,44388,44389],{"class":38,"line":819},[36,44390,37723],{"class":3943},[36,44392,44393],{"class":38,"line":824},[36,44394,37728],{"class":3943},[36,44396,44397],{"class":38,"line":829},[36,44398,37733],{"class":3943},[36,44400,44401,44403],{"class":38,"line":851},[36,44402,37738],{"class":46},[36,44404,36444],{"class":42},[36,44406,44407],{"class":38,"line":868},[36,44408,37745],{"class":3943},[36,44410,44411,44413,44415,44417],{"class":38,"line":873},[36,44412,1613],{"class":46},[36,44414,37752],{"class":42},[36,44416,1619],{"class":46},[36,44418,37757],{"class":42},[36,44420,44421,44423,44425],{"class":38,"line":891},[36,44422,37762],{"class":42},[36,44424,47],{"class":46},[36,44426,37767],{"class":42},[36,44428,44429,44431,44433],{"class":38,"line":906},[36,44430,37772],{"class":42},[36,44432,47],{"class":46},[36,44434,37777],{"class":42},[36,44436,44437],{"class":38,"line":925},[36,44438,37782],{"class":3943},[36,44440,44441],{"class":38,"line":943},[36,44442,36435],{"class":42},[36,44444,44445],{"class":38,"line":948},[36,44446,37791],{"class":3943},[36,44448,44449,44451,44453],{"class":38,"line":971},[36,44450,36238],{"class":42},[36,44452,47],{"class":46},[36,44454,37800],{"class":42},[36,44456,44457],{"class":38,"line":992},[36,44458,37805],{"class":3943},[36,44460,44461,44463,44465,44467,44469,44471,44473],{"class":38,"line":1020},[36,44462,36253],{"class":42},[36,44464,47],{"class":46},[36,44466,36258],{"class":42},[36,44468,36261],{"class":468},[36,44470,47],{"class":46},[36,44472,4092],{"class":112},[36,44474,922],{"class":42},[36,44476,44477],{"class":38,"line":1036},[36,44478,37826],{"class":3943},[36,44480,44481],{"class":38,"line":1041},[36,44482,37831],{"class":3943},[36,44484,44485],{"class":38,"line":1052},[36,44486,37836],{"class":3943},[36,44488,44489,44491,44493,44495,44497],{"class":38,"line":1065},[36,44490,37841],{"class":42},[36,44492,1658],{"class":46},[36,44494,36351],{"class":42},[36,44496,6652],{"class":46},[36,44498,37850],{"class":42},[36,44500,44501],{"class":38,"line":1077},[36,44502,37855],{"class":3943},[36,44504,44505,44507,44509,44511,44513],{"class":38,"line":1082},[36,44506,37860],{"class":42},[36,44508,1658],{"class":46},[36,44510,37865],{"class":42},[36,44512,1859],{"class":112},[36,44514,922],{"class":42},[36,44516,44517],{"class":38,"line":1125},[36,44518,659],{"emptyLinePlaceholder":658},[36,44520,44521],{"class":38,"line":1164},[36,44522,37878],{"class":3943},[36,44524,44525,44527,44529,44531,44533],{"class":38,"line":1169},[36,44526,37883],{"class":42},[36,44528,47],{"class":46},[36,44530,37888],{"class":42},[36,44532,4455],{"class":46},[36,44534,37893],{"class":42},[36,44536,44537],{"class":38,"line":1180},[36,44538,37898],{"class":3943},[36,44540,44541,44543,44545,44547],{"class":38,"line":1198},[36,44542,1960],{"class":112},[36,44544,495],{"class":42},[36,44546,37907],{"class":105},[36,44548,37910],{"class":42},[36,44550,44551],{"class":38,"line":1215},[36,44552,659],{"emptyLinePlaceholder":658},[36,44554,44555],{"class":38,"line":1236},[36,44556,37919],{"class":3943},[36,44558,44559,44561,44563,44565,44567],{"class":38,"line":1245},[36,44560,2067],{"class":46},[36,44562,2070],{"class":112},[36,44564,6652],{"class":46},[36,44566,34819],{"class":105},[36,44568,888],{"class":42},[36,44570,44571],{"class":38,"line":1250},[36,44572,37936],{"class":3943},[36,44574,44575,44577,44579],{"class":38,"line":1265},[36,44576,34883],{"class":42},[36,44578,47],{"class":46},[36,44580,44581],{"class":42},"VGG16()\n",[36,44583,44584],{"class":38,"line":1281},[36,44585,37949],{"class":3943},[36,44587,44588],{"class":38,"line":1297},[36,44589,37954],{"class":3943},[36,44591,44592,44594,44596],{"class":38,"line":1314},[36,44593,37959],{"class":42},[36,44595,37962],{"class":105},[36,44597,2005],{"class":42},[36,44599,44600],{"class":38,"line":1336},[36,44601,37969],{"class":3943},[36,44603,44604,44606,44608],{"class":38,"line":1356},[36,44605,37582],{"class":42},[36,44607,47],{"class":46},[36,44609,37978],{"class":42},[36,44611,44612],{"class":38,"line":1361},[36,44613,37983],{"class":3943},[36,44615,44616],{"class":38,"line":1407},[36,44617,37988],{"class":42},[36,44619,44620],{"class":38,"line":1423},[36,44621,659],{"emptyLinePlaceholder":658},[36,44623,44624],{"class":38,"line":1439},[36,44625,37997],{"class":3943},[36,44627,44628],{"class":38,"line":1444},[36,44629,38002],{"class":3943},[36,44631,44632,44634,44636,44638,44640,44642,44644],{"class":38,"line":1486},[36,44633,34831],{"class":42},[36,44635,47],{"class":46},[36,44637,34838],{"class":105},[36,44639,5428],{"class":46},[36,44641,34843],{"class":42},[36,44643,5425],{"class":46},[36,44645,37679],{"class":105},[36,44647,44648,44650,44652],{"class":38,"line":1499},[36,44649,34883],{"class":42},[36,44651,47],{"class":46},[36,44653,35875],{"class":42},[36,44655,44656],{"class":38,"line":1513},[36,44657,38031],{"class":3943},[36,44659,44660],{"class":38,"line":1518},[36,44661,38036],{"class":3943},[36,44663,44664,44666,44668,44670,44672,44674,44676,44678,44680,44682,44684,44686,44688,44690,44692,44694,44696,44698,44700,44702,44704,44706,44708],{"class":38,"line":1529},[36,44665,38041],{"class":42},[36,44667,47],{"class":46},[36,44669,4760],{"class":42},[36,44671,38048],{"class":105},[36,44673,4253],{"class":42},[36,44675,38053],{"class":105},[36,44677,4253],{"class":42},[36,44679,38058],{"class":105},[36,44681,4253],{"class":42},[36,44683,38063],{"class":105},[36,44685,4253],{"class":42},[36,44687,38068],{"class":105},[36,44689,4253],{"class":42},[36,44691,38073],{"class":105},[36,44693,4253],{"class":42},[36,44695,38078],{"class":105},[36,44697,4253],{"class":42},[36,44699,38083],{"class":105},[36,44701,4253],{"class":42},[36,44703,38088],{"class":105},[36,44705,4253],{"class":42},[36,44707,38093],{"class":105},[36,44709,36806],{"class":42},[36,44711,44712,44714],{"class":38,"line":1539},[36,44713,37738],{"class":46},[36,44715,36444],{"class":42},[36,44717,44718],{"class":38,"line":1544},[36,44719,38106],{"class":3943},[36,44721,44722,44724,44726,44728],{"class":38,"line":1555},[36,44723,1613],{"class":46},[36,44725,38113],{"class":42},[36,44727,1619],{"class":46},[36,44729,37757],{"class":42},[36,44731,44732,44734,44736],{"class":38,"line":1572},[36,44733,36193],{"class":42},[36,44735,47],{"class":46},[36,44737,36198],{"class":42},[36,44739,44740,44742,44744],{"class":38,"line":1592},[36,44741,36208],{"class":42},[36,44743,47],{"class":46},[36,44745,36213],{"class":42},[36,44747,44748],{"class":38,"line":1597},[36,44749,659],{"emptyLinePlaceholder":658},[36,44751,44752],{"class":38,"line":1610},[36,44753,38142],{"class":3943},[36,44755,44756],{"class":38,"line":1632},[36,44757,36435],{"class":42},[36,44759,44760],{"class":38,"line":1646},[36,44761,38151],{"class":3943},[36,44763,44764,44766,44768],{"class":38,"line":1651},[36,44765,36238],{"class":42},[36,44767,47],{"class":46},[36,44769,36243],{"class":42},[36,44771,44772],{"class":38,"line":1664},[36,44773,38164],{"class":3943},[36,44775,44776,44778,44780,44782,44784,44786,44788],{"class":38,"line":1669},[36,44777,36253],{"class":42},[36,44779,47],{"class":46},[36,44781,36258],{"class":42},[36,44783,36261],{"class":468},[36,44785,47],{"class":46},[36,44787,4092],{"class":112},[36,44789,922],{"class":42},[36,44791,44792],{"class":38,"line":1681},[36,44793,38185],{"class":3943},[36,44795,44796,44798,44800],{"class":38,"line":1694},[36,44797,38190],{"class":42},[36,44799,47],{"class":46},[36,44801,38195],{"class":42},[36,44803,44804,44806,44808],{"class":38,"line":1699},[36,44805,38200],{"class":42},[36,44807,47],{"class":46},[36,44809,38205],{"class":42},[36,44811,44812,44814,44816,44818,44820,44822,44824,44826],{"class":38,"line":1714},[36,44813,38210],{"class":112},[36,44815,495],{"class":42},[36,44817,38215],{"class":105},[36,44819,38218],{"class":42},[36,44821,38221],{"class":105},[36,44823,4253],{"class":42},[36,44825,38226],{"class":105},[36,44827,38229],{"class":42},[318,44829,44831],{"id":44830},"_23googlenet","2.3.GoogLeNet",[25619,44833,44835],{"id":44834},"_231原理","2.3.1.原理",[211,44837,44838],{},[214,44839,44840],{},"网络结构",[19,44842,44843],{},[5198,44844],{"alt":31,"src":44845},"\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,44847,44848],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,44850,44851],{},[5198,44852],{"alt":31,"src":44853},"\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,44855,44856],{},[5198,44857],{"alt":31,"src":44858},"\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,44860,44861],{},[5198,44862],{"alt":31,"src":44863},"\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",[211,44865,44866],{"start":53},[214,44867,44868],{},"1x1卷积的优点",[19,44870,44871],{},[5198,44872],{"alt":31,"src":44873},"\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",[211,44875,44876],{"start":196},[214,44877,44878],{},"全局平均池化层优点",[19,44880,44881],{},[5198,44882],{"alt":31,"src":44883},"\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,44885,44886],{},[5198,44887],{"alt":31,"src":44888},"\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",[211,44890,44891],{"start":642},[214,44892,44893],{},"参数详细描述",[19,44895,44896],{},[5198,44897],{"alt":31,"src":44898},"\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,44900,44901],{},[5198,44902],{"alt":31,"src":44903},"\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,44905,44906],{},[5198,44907],{"alt":31,"src":44908},"\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,44910,44911],{},[5198,44912],{"alt":31,"src":44913},"\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,44915,44916],{},[5198,44917],{"alt":31,"src":44918},"\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,44920,44921],{},[5198,44922],{"alt":31,"src":44923},"\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,44925,44926],{},[5198,44927],{"alt":31,"src":44928},"\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,44930,44931],{},[5198,44932],{"alt":31,"src":44933},"\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,44935,44936],{},[5198,44937],{"alt":31,"src":44938},"\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,44940,44941],{},[5198,44942],{"alt":31,"src":44943},"\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,44945,44946],{},[5198,44947],{"alt":31,"src":44948},"\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,44950,44951],{},[5198,44952],{"alt":31,"src":44953},"\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,44955,44956],{},[5198,44957],{"alt":31,"src":44958},"\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,44960,44961],{},[5198,44962],{"alt":31,"src":44963},"\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,44965,44966],{},[5198,44967],{"alt":31,"src":44968},"\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,44970,44971],{},[5198,44972],{"alt":31,"src":44973},"\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,44975,44976],{},[5198,44977],{"alt":31,"src":44978},"\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,44980,44981],{},[5198,44982],{"alt":31,"src":44983},"\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,44985,44986],{},[5198,44987],{"alt":31,"src":44988},"\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,44990,44991],{},[5198,44992],{"alt":31,"src":44993},"\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,44995,44996],{},[5198,44997],{"alt":31,"src":44998},"\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",[25619,45000,45002],{"id":45001},"_232代码实现","2.3.2.代码实现",[211,45004,45005],{},[214,45006,34314],{},[19,45008,45009],{},"根据原理一步一步搭建即可",[26,45011,45013],{"className":28,"code":45012,"language":30,"meta":31,"style":31},"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",[33,45014,45015,45021,45031,45041,45045,45062,45071,45086,45096,45101,45134,45139,45176,45223,45228,45264,45311,45316,45321,45356,45388,45392,45400,45416,45440,45465,45486,45491,45506,45510,45514,45519,45536,45541,45550,45565,45576,45620,45624,45652,45656,45667,45695,45699,45736,45740,45768,45772,45783,45819,45851,45879,45883,45894,45928,45960,45992,46025,46059,46087,46091,46102,46135,46167,46181,46185,46198,46202,46207,46219,46227,46249,46254,46259,46264,46269,46274,46279,46293,46301,46310,46323,46338,46347,46351,46359,46370,46381,46392,46403,46414,46420,46424,46429,46441,46461,46470],{"__ignoreMap":31},[36,45016,45017,45019],{"class":38,"line":39},[36,45018,611],{"class":46},[36,45020,34000],{"class":42},[36,45022,45023,45025,45027,45029],{"class":38,"line":53},[36,45024,645],{"class":46},[36,45026,34342],{"class":42},[36,45028,611],{"class":46},[36,45030,34347],{"class":42},[36,45032,45033,45035,45037,45039],{"class":38,"line":196},[36,45034,645],{"class":46},[36,45036,34359],{"class":42},[36,45038,611],{"class":46},[36,45040,34364],{"class":42},[36,45042,45043],{"class":38,"line":642},[36,45044,659],{"emptyLinePlaceholder":658},[36,45046,45047,45049,45052,45054,45056,45058,45060],{"class":38,"line":655},[36,45048,832],{"class":46},[36,45050,45051],{"class":101}," Inception",[36,45053,495],{"class":42},[36,45055,34380],{"class":101},[36,45057,842],{"class":42},[36,45059,34385],{"class":101},[36,45061,848],{"class":42},[36,45063,45064,45066,45068],{"class":38,"line":662},[36,45065,876],{"class":46},[36,45067,879],{"class":112},[36,45069,45070],{"class":42},"(self,in_channels,c1,c2,c3,c4):\n",[36,45072,45073,45075,45078,45080,45082,45084],{"class":38,"line":667},[36,45074,894],{"class":112},[36,45076,45077],{"class":42},"(Inception,",[36,45079,457],{"class":112},[36,45081,34423],{"class":42},[36,45083,900],{"class":112},[36,45085,903],{"class":42},[36,45087,45088,45090,45092,45094],{"class":38,"line":679},[36,45089,909],{"class":112},[36,45091,38331],{"class":42},[36,45093,47],{"class":46},[36,45095,38336],{"class":42},[36,45097,45098],{"class":38,"line":685},[36,45099,45100],{"class":3943},"        # 路线1：定义1*1卷积\n",[36,45102,45103,45105,45108,45110,45112,45114,45116,45119,45121,45123,45126,45128,45130,45132],{"class":38,"line":691},[36,45104,909],{"class":112},[36,45106,45107],{"class":42},".p1_1",[36,45109,47],{"class":46},[36,45111,34448],{"class":42},[36,45113,34451],{"class":468},[36,45115,47],{"class":46},[36,45117,45118],{"class":42},"in_channels,",[36,45120,34460],{"class":468},[36,45122,47],{"class":46},[36,45124,45125],{"class":42},"c1,",[36,45127,34469],{"class":468},[36,45129,47],{"class":46},[36,45131,4092],{"class":112},[36,45133,922],{"class":42},[36,45135,45136],{"class":38,"line":696},[36,45137,45138],{"class":3943},"        # 路线2：定义1*1卷积和3*3\n",[36,45140,45141,45143,45146,45148,45150,45152,45154,45156,45158,45160,45163,45165,45168,45170,45172,45174],{"class":38,"line":702},[36,45142,909],{"class":112},[36,45144,45145],{"class":42},".p2_1",[36,45147,47],{"class":46},[36,45149,34448],{"class":42},[36,45151,34451],{"class":468},[36,45153,47],{"class":46},[36,45155,45118],{"class":42},[36,45157,34460],{"class":468},[36,45159,47],{"class":46},[36,45161,45162],{"class":42},"c2[",[36,45164,1859],{"class":112},[36,45166,45167],{"class":42},"],",[36,45169,34469],{"class":468},[36,45171,47],{"class":46},[36,45173,4092],{"class":112},[36,45175,922],{"class":42},[36,45177,45178,45180,45183,45185,45187,45189,45191,45193,45195,45197,45199,45201,45203,45205,45207,45209,45211,45213,45215,45217,45219,45221],{"class":38,"line":708},[36,45179,909],{"class":112},[36,45181,45182],{"class":42},".p2_2",[36,45184,47],{"class":46},[36,45186,34448],{"class":42},[36,45188,34451],{"class":468},[36,45190,47],{"class":46},[36,45192,45162],{"class":42},[36,45194,1859],{"class":112},[36,45196,45167],{"class":42},[36,45198,34460],{"class":468},[36,45200,47],{"class":46},[36,45202,45162],{"class":42},[36,45204,4092],{"class":112},[36,45206,45167],{"class":42},[36,45208,34469],{"class":468},[36,45210,47],{"class":46},[36,45212,1982],{"class":112},[36,45214,4253],{"class":42},[36,45216,34478],{"class":468},[36,45218,47],{"class":46},[36,45220,4092],{"class":112},[36,45222,922],{"class":42},[36,45224,45225],{"class":38,"line":713},[36,45226,45227],{"class":3943},"        # 路线3：定义1*1卷积和5*5\n",[36,45229,45230,45232,45235,45237,45239,45241,45243,45245,45247,45249,45252,45254,45256,45258,45260,45262],{"class":38,"line":719},[36,45231,909],{"class":112},[36,45233,45234],{"class":42},".p3_1",[36,45236,47],{"class":46},[36,45238,34448],{"class":42},[36,45240,34451],{"class":468},[36,45242,47],{"class":46},[36,45244,45118],{"class":42},[36,45246,34460],{"class":468},[36,45248,47],{"class":46},[36,45250,45251],{"class":42},"c3[",[36,45253,1859],{"class":112},[36,45255,45167],{"class":42},[36,45257,34469],{"class":468},[36,45259,47],{"class":46},[36,45261,4092],{"class":112},[36,45263,922],{"class":42},[36,45265,45266,45268,45271,45273,45275,45277,45279,45281,45283,45285,45287,45289,45291,45293,45295,45297,45299,45301,45303,45305,45307,45309],{"class":38,"line":725},[36,45267,909],{"class":112},[36,45269,45270],{"class":42},".p3_2",[36,45272,47],{"class":46},[36,45274,34448],{"class":42},[36,45276,34451],{"class":468},[36,45278,47],{"class":46},[36,45280,45251],{"class":42},[36,45282,1859],{"class":112},[36,45284,45167],{"class":42},[36,45286,34460],{"class":468},[36,45288,47],{"class":46},[36,45290,45251],{"class":42},[36,45292,4092],{"class":112},[36,45294,45167],{"class":42},[36,45296,34469],{"class":468},[36,45298,47],{"class":46},[36,45300,4194],{"class":112},[36,45302,4253],{"class":42},[36,45304,34478],{"class":468},[36,45306,47],{"class":46},[36,45308,498],{"class":112},[36,45310,922],{"class":42},[36,45312,45313],{"class":38,"line":731},[36,45314,45315],{"class":3943},"        # 路线4：定义3*3最大池化和1*1卷积\n",[36,45317,45318],{"class":38,"line":736},[36,45319,45320],{"class":3943},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[36,45322,45323,45325,45328,45330,45332,45334,45336,45338,45340,45342,45344,45346,45348,45350,45352,45354],{"class":38,"line":742},[36,45324,909],{"class":112},[36,45326,45327],{"class":42},".p4_1",[36,45329,47],{"class":46},[36,45331,38389],{"class":42},[36,45333,34469],{"class":468},[36,45335,47],{"class":46},[36,45337,1982],{"class":112},[36,45339,4253],{"class":42},[36,45341,34524],{"class":468},[36,45343,47],{"class":46},[36,45345,4092],{"class":112},[36,45347,4253],{"class":42},[36,45349,34478],{"class":468},[36,45351,47],{"class":46},[36,45353,4092],{"class":112},[36,45355,922],{"class":42},[36,45357,45358,45360,45363,45365,45367,45369,45371,45373,45375,45377,45380,45382,45384,45386],{"class":38,"line":748},[36,45359,909],{"class":112},[36,45361,45362],{"class":42},".p4_2",[36,45364,47],{"class":46},[36,45366,34448],{"class":42},[36,45368,34451],{"class":468},[36,45370,47],{"class":46},[36,45372,45118],{"class":42},[36,45374,34460],{"class":468},[36,45376,47],{"class":46},[36,45378,45379],{"class":42},"c4,",[36,45381,34469],{"class":468},[36,45383,47],{"class":46},[36,45385,4092],{"class":112},[36,45387,922],{"class":42},[36,45389,45390],{"class":38,"line":754},[36,45391,659],{"emptyLinePlaceholder":658},[36,45393,45394,45396,45398],{"class":38,"line":760},[36,45395,876],{"class":46},[36,45397,34688],{"class":101},[36,45399,34691],{"class":42},[36,45401,45402,45405,45407,45409,45411,45413],{"class":38,"line":766},[36,45403,45404],{"class":42},"        p1",[36,45406,47],{"class":46},[36,45408,457],{"class":112},[36,45410,38744],{"class":42},[36,45412,457],{"class":112},[36,45414,45415],{"class":42},".p1_1(x))\n",[36,45417,45418,45420,45422,45424,45426,45428,45431,45433,45435,45437],{"class":38,"line":772},[36,45419,10776],{"class":42},[36,45421,47],{"class":46},[36,45423,457],{"class":112},[36,45425,38744],{"class":42},[36,45427,457],{"class":112},[36,45429,45430],{"class":42},".p2_2(",[36,45432,457],{"class":112},[36,45434,38744],{"class":42},[36,45436,457],{"class":112},[36,45438,45439],{"class":42},".p2_1(x))))\n",[36,45441,45442,45445,45447,45449,45451,45453,45456,45458,45460,45462],{"class":38,"line":778},[36,45443,45444],{"class":42},"        p3",[36,45446,47],{"class":46},[36,45448,457],{"class":112},[36,45450,38744],{"class":42},[36,45452,457],{"class":112},[36,45454,45455],{"class":42},".p3_2(",[36,45457,457],{"class":112},[36,45459,38744],{"class":42},[36,45461,457],{"class":112},[36,45463,45464],{"class":42},".p3_1(x))))\n",[36,45466,45467,45470,45472,45474,45476,45478,45481,45483],{"class":38,"line":783},[36,45468,45469],{"class":42},"        p4",[36,45471,47],{"class":46},[36,45473,457],{"class":112},[36,45475,38744],{"class":42},[36,45477,457],{"class":112},[36,45479,45480],{"class":42},".p4_2(",[36,45482,457],{"class":112},[36,45484,45485],{"class":42},".p4_1(x)))\n",[36,45487,45488],{"class":38,"line":789},[36,45489,45490],{"class":3943},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[36,45492,45493,45495,45498,45500,45502,45504],{"class":38,"line":795},[36,45494,1239],{"class":46},[36,45496,45497],{"class":42}," torch.cat((p1,p2,p3,p4),",[36,45499,36261],{"class":468},[36,45501,47],{"class":46},[36,45503,4092],{"class":112},[36,45505,922],{"class":42},[36,45507,45508],{"class":38,"line":801},[36,45509,659],{"emptyLinePlaceholder":658},[36,45511,45512],{"class":38,"line":807},[36,45513,659],{"emptyLinePlaceholder":658},[36,45515,45516],{"class":38,"line":813},[36,45517,45518],{"class":3943},"# 搭建GoogLeNet网络\n",[36,45520,45521,45523,45526,45528,45530,45532,45534],{"class":38,"line":819},[36,45522,832],{"class":46},[36,45524,45525],{"class":101}," GoogLeNet",[36,45527,495],{"class":42},[36,45529,34380],{"class":101},[36,45531,842],{"class":42},[36,45533,34385],{"class":101},[36,45535,848],{"class":42},[36,45537,45538],{"class":38,"line":824},[36,45539,45540],{"class":3943},"    # 必须把Inception导入到里边\n",[36,45542,45543,45545,45547],{"class":38,"line":829},[36,45544,876],{"class":46},[36,45546,879],{"class":112},[36,45548,45549],{"class":42},"(self,Inception):\n",[36,45551,45552,45554,45557,45559,45561,45563],{"class":38,"line":851},[36,45553,894],{"class":112},[36,45555,45556],{"class":42},"(GoogLeNet,",[36,45558,457],{"class":112},[36,45560,34423],{"class":42},[36,45562,900],{"class":112},[36,45564,903],{"class":42},[36,45566,45567,45569,45572,45574],{"class":38,"line":868},[36,45568,909],{"class":112},[36,45570,45571],{"class":42},".b1",[36,45573,47],{"class":46},[36,45575,41569],{"class":42},[36,45577,45578,45580,45582,45584,45586,45588,45590,45592,45594,45596,45598,45600,45602,45604,45606,45608,45610,45612,45614,45616,45618],{"class":38,"line":873},[36,45579,41574],{"class":42},[36,45581,34451],{"class":468},[36,45583,47],{"class":46},[36,45585,4092],{"class":112},[36,45587,4253],{"class":42},[36,45589,34460],{"class":468},[36,45591,47],{"class":46},[36,45593,4078],{"class":112},[36,45595,4253],{"class":42},[36,45597,34469],{"class":468},[36,45599,47],{"class":46},[36,45601,4244],{"class":112},[36,45603,4253],{"class":42},[36,45605,34524],{"class":468},[36,45607,47],{"class":46},[36,45609,498],{"class":112},[36,45611,4253],{"class":42},[36,45613,34478],{"class":468},[36,45615,47],{"class":46},[36,45617,1982],{"class":112},[36,45619,41607],{"class":42},[36,45621,45622],{"class":38,"line":891},[36,45623,41612],{"class":42},[36,45625,45626,45628,45630,45632,45634,45636,45638,45640,45642,45644,45646,45648,45650],{"class":38,"line":906},[36,45627,41657],{"class":42},[36,45629,34469],{"class":468},[36,45631,47],{"class":46},[36,45633,1982],{"class":112},[36,45635,4253],{"class":42},[36,45637,34524],{"class":468},[36,45639,47],{"class":46},[36,45641,498],{"class":112},[36,45643,4253],{"class":42},[36,45645,34478],{"class":468},[36,45647,47],{"class":46},[36,45649,4092],{"class":112},[36,45651,922],{"class":42},[36,45653,45654],{"class":38,"line":925},[36,45655,41686],{"class":42},[36,45657,45658,45660,45663,45665],{"class":38,"line":943},[36,45659,909],{"class":112},[36,45661,45662],{"class":42},".b2",[36,45664,47],{"class":46},[36,45666,41569],{"class":42},[36,45668,45669,45671,45673,45675,45677,45679,45681,45683,45685,45687,45689,45691,45693],{"class":38,"line":948},[36,45670,41574],{"class":42},[36,45672,34451],{"class":468},[36,45674,47],{"class":46},[36,45676,4078],{"class":112},[36,45678,4253],{"class":42},[36,45680,34460],{"class":468},[36,45682,47],{"class":46},[36,45684,4078],{"class":112},[36,45686,4253],{"class":42},[36,45688,34469],{"class":468},[36,45690,47],{"class":46},[36,45692,4092],{"class":112},[36,45694,41607],{"class":42},[36,45696,45697],{"class":38,"line":971},[36,45698,41612],{"class":42},[36,45700,45701,45703,45705,45707,45709,45711,45713,45715,45718,45720,45722,45724,45726,45728,45730,45732,45734],{"class":38,"line":992},[36,45702,41574],{"class":42},[36,45704,34451],{"class":468},[36,45706,47],{"class":46},[36,45708,4078],{"class":112},[36,45710,4253],{"class":42},[36,45712,34460],{"class":468},[36,45714,47],{"class":46},[36,45716,45717],{"class":112},"192",[36,45719,4253],{"class":42},[36,45721,34469],{"class":468},[36,45723,47],{"class":46},[36,45725,1982],{"class":112},[36,45727,4253],{"class":42},[36,45729,34478],{"class":468},[36,45731,47],{"class":46},[36,45733,4092],{"class":112},[36,45735,41607],{"class":42},[36,45737,45738],{"class":38,"line":1020},[36,45739,41612],{"class":42},[36,45741,45742,45744,45746,45748,45750,45752,45754,45756,45758,45760,45762,45764,45766],{"class":38,"line":1036},[36,45743,41657],{"class":42},[36,45745,34469],{"class":468},[36,45747,47],{"class":46},[36,45749,1982],{"class":112},[36,45751,4253],{"class":42},[36,45753,34524],{"class":468},[36,45755,47],{"class":46},[36,45757,498],{"class":112},[36,45759,4253],{"class":42},[36,45761,34478],{"class":468},[36,45763,47],{"class":46},[36,45765,4092],{"class":112},[36,45767,922],{"class":42},[36,45769,45770],{"class":38,"line":1041},[36,45771,41686],{"class":42},[36,45773,45774,45776,45779,45781],{"class":38,"line":1052},[36,45775,909],{"class":112},[36,45777,45778],{"class":42},".b3",[36,45780,47],{"class":46},[36,45782,41569],{"class":42},[36,45784,45785,45788,45790,45792,45794,45797,45799,45801,45803,45806,45808,45810,45812,45815,45817],{"class":38,"line":1065},[36,45786,45787],{"class":42},"            Inception(",[36,45789,45717],{"class":112},[36,45791,4253],{"class":42},[36,45793,4078],{"class":112},[36,45795,45796],{"class":42},",(",[36,45798,4084],{"class":112},[36,45800,4253],{"class":42},[36,45802,35656],{"class":112},[36,45804,45805],{"class":42},"),(",[36,45807,4472],{"class":112},[36,45809,4253],{"class":42},[36,45811,4072],{"class":112},[36,45813,45814],{"class":42},"),",[36,45816,4072],{"class":112},[36,45818,41607],{"class":42},[36,45820,45821,45823,45825,45827,45829,45831,45833,45835,45837,45839,45841,45843,45845,45847,45849],{"class":38,"line":1077},[36,45822,45787],{"class":42},[36,45824,38430],{"class":112},[36,45826,4253],{"class":42},[36,45828,35656],{"class":112},[36,45830,45796],{"class":42},[36,45832,35656],{"class":112},[36,45834,4253],{"class":42},[36,45836,45717],{"class":112},[36,45838,45805],{"class":42},[36,45840,4072],{"class":112},[36,45842,4253],{"class":42},[36,45844,4084],{"class":112},[36,45846,45814],{"class":42},[36,45848,4078],{"class":112},[36,45850,41607],{"class":42},[36,45852,45853,45855,45857,45859,45861,45863,45865,45867,45869,45871,45873,45875,45877],{"class":38,"line":1082},[36,45854,41657],{"class":42},[36,45856,34469],{"class":468},[36,45858,47],{"class":46},[36,45860,1982],{"class":112},[36,45862,4253],{"class":42},[36,45864,34524],{"class":468},[36,45866,47],{"class":46},[36,45868,498],{"class":112},[36,45870,4253],{"class":42},[36,45872,34478],{"class":468},[36,45874,47],{"class":46},[36,45876,4092],{"class":112},[36,45878,922],{"class":42},[36,45880,45881],{"class":38,"line":1125},[36,45882,41686],{"class":42},[36,45884,45885,45887,45890,45892],{"class":38,"line":1164},[36,45886,909],{"class":112},[36,45888,45889],{"class":42},".b4",[36,45891,47],{"class":46},[36,45893,41569],{"class":42},[36,45895,45896,45898,45901,45903,45905,45907,45909,45911,45914,45916,45918,45920,45922,45924,45926],{"class":38,"line":1169},[36,45897,45787],{"class":42},[36,45899,45900],{"class":112},"480",[36,45902,4253],{"class":42},[36,45904,45717],{"class":112},[36,45906,45796],{"class":42},[36,45908,4084],{"class":112},[36,45910,4253],{"class":42},[36,45912,45913],{"class":112},"208",[36,45915,45805],{"class":42},[36,45917,4472],{"class":112},[36,45919,4253],{"class":42},[36,45921,4478],{"class":112},[36,45923,45814],{"class":42},[36,45925,4078],{"class":112},[36,45927,41607],{"class":42},[36,45929,45930,45932,45934,45936,45938,45940,45942,45944,45946,45948,45950,45952,45954,45956,45958],{"class":38,"line":1180},[36,45931,45787],{"class":42},[36,45933,42017],{"class":112},[36,45935,4253],{"class":42},[36,45937,24670],{"class":112},[36,45939,45796],{"class":42},[36,45941,4489],{"class":112},[36,45943,4253],{"class":42},[36,45945,35090],{"class":112},[36,45947,45805],{"class":42},[36,45949,4670],{"class":112},[36,45951,4253],{"class":42},[36,45953,4078],{"class":112},[36,45955,45814],{"class":42},[36,45957,4078],{"class":112},[36,45959,41607],{"class":42},[36,45961,45962,45964,45966,45968,45970,45972,45974,45976,45978,45980,45982,45984,45986,45988,45990],{"class":38,"line":1198},[36,45963,45787],{"class":42},[36,45965,42017],{"class":112},[36,45967,4253],{"class":42},[36,45969,35656],{"class":112},[36,45971,45796],{"class":42},[36,45973,35656],{"class":112},[36,45975,4253],{"class":42},[36,45977,38430],{"class":112},[36,45979,45805],{"class":42},[36,45981,4670],{"class":112},[36,45983,4253],{"class":42},[36,45985,4078],{"class":112},[36,45987,45814],{"class":42},[36,45989,4078],{"class":112},[36,45991,41607],{"class":42},[36,45993,45994,45996,45998,46000,46002,46004,46006,46008,46011,46013,46015,46017,46019,46021,46023],{"class":38,"line":1215},[36,45995,45787],{"class":42},[36,45997,42017],{"class":112},[36,45999,4253],{"class":42},[36,46001,4489],{"class":112},[36,46003,45796],{"class":42},[36,46005,35656],{"class":112},[36,46007,4253],{"class":42},[36,46009,46010],{"class":112},"288",[36,46012,45805],{"class":42},[36,46014,4072],{"class":112},[36,46016,4253],{"class":42},[36,46018,4078],{"class":112},[36,46020,45814],{"class":42},[36,46022,4078],{"class":112},[36,46024,41607],{"class":42},[36,46026,46027,46029,46032,46034,46036,46038,46040,46042,46045,46047,46049,46051,46053,46055,46057],{"class":38,"line":1236},[36,46028,45787],{"class":42},[36,46030,46031],{"class":112},"528",[36,46033,4253],{"class":42},[36,46035,38430],{"class":112},[36,46037,45796],{"class":42},[36,46039,24670],{"class":112},[36,46041,4253],{"class":42},[36,46043,46044],{"class":112},"320",[36,46046,45805],{"class":42},[36,46048,4072],{"class":112},[36,46050,4253],{"class":42},[36,46052,35656],{"class":112},[36,46054,45814],{"class":42},[36,46056,35656],{"class":112},[36,46058,41607],{"class":42},[36,46060,46061,46063,46065,46067,46069,46071,46073,46075,46077,46079,46081,46083,46085],{"class":38,"line":1245},[36,46062,41657],{"class":42},[36,46064,34469],{"class":468},[36,46066,47],{"class":46},[36,46068,1982],{"class":112},[36,46070,4253],{"class":42},[36,46072,34524],{"class":468},[36,46074,47],{"class":46},[36,46076,498],{"class":112},[36,46078,4253],{"class":42},[36,46080,34478],{"class":468},[36,46082,47],{"class":46},[36,46084,4092],{"class":112},[36,46086,922],{"class":42},[36,46088,46089],{"class":38,"line":1250},[36,46090,41686],{"class":42},[36,46092,46093,46095,46098,46100],{"class":38,"line":1265},[36,46094,909],{"class":112},[36,46096,46097],{"class":42},".b5",[36,46099,47],{"class":46},[36,46101,41569],{"class":42},[36,46103,46104,46106,46109,46111,46113,46115,46117,46119,46121,46123,46125,46127,46129,46131,46133],{"class":38,"line":1281},[36,46105,45787],{"class":42},[36,46107,46108],{"class":112},"832",[36,46110,4253],{"class":42},[36,46112,38430],{"class":112},[36,46114,45796],{"class":42},[36,46116,24670],{"class":112},[36,46118,4253],{"class":42},[36,46120,46044],{"class":112},[36,46122,45805],{"class":42},[36,46124,4072],{"class":112},[36,46126,4253],{"class":42},[36,46128,35656],{"class":112},[36,46130,45814],{"class":42},[36,46132,35656],{"class":112},[36,46134,41607],{"class":42},[36,46136,46137,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159,46161,46163,46165],{"class":38,"line":1297},[36,46138,45787],{"class":42},[36,46140,46108],{"class":112},[36,46142,4253],{"class":42},[36,46144,38500],{"class":112},[36,46146,45796],{"class":42},[36,46148,45717],{"class":112},[36,46150,4253],{"class":42},[36,46152,38500],{"class":112},[36,46154,45805],{"class":42},[36,46156,4478],{"class":112},[36,46158,4253],{"class":42},[36,46160,35656],{"class":112},[36,46162,45814],{"class":42},[36,46164,35656],{"class":112},[36,46166,41607],{"class":42},[36,46168,46169,46172,46174,46176,46178],{"class":38,"line":1314},[36,46170,46171],{"class":42},"            nn.AdaptiveAvgPool2d((",[36,46173,4092],{"class":112},[36,46175,4253],{"class":42},[36,46177,4092],{"class":112},[36,46179,46180],{"class":42},")),\n",[36,46182,46183],{"class":38,"line":1336},[36,46184,42350],{"class":42},[36,46186,46187,46189,46192,46194,46196],{"class":38,"line":1356},[36,46188,42355],{"class":42},[36,46190,46191],{"class":112},"1024",[36,46193,4253],{"class":42},[36,46195,554],{"class":112},[36,46197,922],{"class":42},[36,46199,46200],{"class":38,"line":1361},[36,46201,41686],{"class":42},[36,46203,46204],{"class":38,"line":1407},[36,46205,46206],{"class":3943},"        # 对模型参数初始化\n",[36,46208,46209,46211,46213,46215,46217],{"class":38,"line":1423},[36,46210,1613],{"class":46},[36,46212,42428],{"class":42},[36,46214,1619],{"class":46},[36,46216,406],{"class":112},[36,46218,42435],{"class":42},[36,46220,46221,46223,46225],{"class":38,"line":1439},[36,46222,8338],{"class":46},[36,46224,42447],{"class":112},[36,46226,42450],{"class":42},[36,46228,46229,46231,46234,46236,46239,46241,46243,46245,46247],{"class":38,"line":1444},[36,46230,42460],{"class":42},[36,46232,46233],{"class":468},"mode",[36,46235,47],{"class":46},[36,46237,46238],{"class":105},"'fan_out'",[36,46240,4253],{"class":42},[36,46242,42463],{"class":468},[36,46244,47],{"class":46},[36,46246,42468],{"class":105},[36,46248,922],{"class":42},[36,46250,46251],{"class":38,"line":1486},[36,46252,46253],{"class":3943},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[36,46255,46256],{"class":38,"line":1499},[36,46257,46258],{"class":3943},"                # ② mode = 'fan_out'决定使用的fan值：\n",[36,46260,46261],{"class":38,"line":1513},[36,46262,46263],{"class":3943},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[36,46265,46266],{"class":38,"line":1518},[36,46267,46268],{"class":3943},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[36,46270,46271],{"class":38,"line":1529},[36,46272,46273],{"class":3943},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[36,46275,46276],{"class":38,"line":1539},[36,46277,46278],{"class":3943},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[36,46280,46281,46283,46285,46287,46289,46291],{"class":38,"line":1544},[36,46282,42480],{"class":46},[36,46284,42483],{"class":42},[36,46286,42486],{"class":46},[36,46288,42489],{"class":46},[36,46290,1384],{"class":112},[36,46292,888],{"class":42},[36,46294,46295,46297,46299],{"class":38,"line":1555},[36,46296,42503],{"class":42},[36,46298,1859],{"class":112},[36,46300,922],{"class":42},[36,46302,46303,46306,46308],{"class":38,"line":1572},[36,46304,46305],{"class":46},"                elif",[36,46307,42447],{"class":112},[36,46309,42522],{"class":42},[36,46311,46312,46315,46317,46319,46321],{"class":38,"line":1592},[36,46313,46314],{"class":42},"                    nn.init.normal_(m.weight,",[36,46316,1859],{"class":112},[36,46318,4253],{"class":42},[36,46320,42544],{"class":112},[36,46322,922],{"class":42},[36,46324,46325,46328,46330,46332,46334,46336],{"class":38,"line":1597},[36,46326,46327],{"class":46},"                    if",[36,46329,42483],{"class":42},[36,46331,42486],{"class":46},[36,46333,42489],{"class":46},[36,46335,1384],{"class":112},[36,46337,888],{"class":42},[36,46339,46340,46343,46345],{"class":38,"line":1610},[36,46341,46342],{"class":42},"                        nn.init.constant_(m.bias,",[36,46344,1859],{"class":112},[36,46346,922],{"class":42},[36,46348,46349],{"class":38,"line":1632},[36,46350,38725],{"class":3943},[36,46352,46353,46355,46357],{"class":38,"line":1646},[36,46354,876],{"class":46},[36,46356,34688],{"class":101},[36,46358,34691],{"class":42},[36,46360,46361,46363,46365,46367],{"class":38,"line":1651},[36,46362,34696],{"class":42},[36,46364,47],{"class":46},[36,46366,457],{"class":112},[36,46368,46369],{"class":42},".b1(x)\n",[36,46371,46372,46374,46376,46378],{"class":38,"line":1664},[36,46373,34696],{"class":42},[36,46375,47],{"class":46},[36,46377,457],{"class":112},[36,46379,46380],{"class":42},".b2(x)\n",[36,46382,46383,46385,46387,46389],{"class":38,"line":1669},[36,46384,34696],{"class":42},[36,46386,47],{"class":46},[36,46388,457],{"class":112},[36,46390,46391],{"class":42},".b3(x)\n",[36,46393,46394,46396,46398,46400],{"class":38,"line":1681},[36,46395,34696],{"class":42},[36,46397,47],{"class":46},[36,46399,457],{"class":112},[36,46401,46402],{"class":42},".b4(x)\n",[36,46404,46405,46407,46409,46411],{"class":38,"line":1694},[36,46406,34696],{"class":42},[36,46408,47],{"class":46},[36,46410,457],{"class":112},[36,46412,46413],{"class":42},".b5(x)\n",[36,46415,46416,46418],{"class":38,"line":1699},[36,46417,1239],{"class":46},[36,46419,34804],{"class":42},[36,46421,46422],{"class":38,"line":1714},[36,46423,659],{"emptyLinePlaceholder":658},[36,46425,46426],{"class":38,"line":1729},[36,46427,46428],{"class":3943},"# 模型展示\n",[36,46430,46431,46433,46435,46437,46439],{"class":38,"line":1746},[36,46432,2067],{"class":46},[36,46434,2070],{"class":112},[36,46436,6652],{"class":46},[36,46438,34819],{"class":105},[36,46440,888],{"class":42},[36,46442,46443,46445,46447,46449,46451,46453,46455,46457,46459],{"class":38,"line":1751},[36,46444,34831],{"class":42},[36,46446,47],{"class":46},[36,46448,34055],{"class":42},[36,46450,34838],{"class":105},[36,46452,5428],{"class":46},[36,46454,34843],{"class":42},[36,46456,5425],{"class":46},[36,46458,34080],{"class":105},[36,46460,922],{"class":42},[36,46462,46463,46465,46467],{"class":38,"line":1765},[36,46464,34883],{"class":42},[36,46466,47],{"class":46},[36,46468,46469],{"class":42},"GoogLeNet(Inception).to(device)\n",[36,46471,46472,46474,46476,46478,46480,46482,46484,46486],{"class":38,"line":1783},[36,46473,1867],{"class":112},[36,46475,34895],{"class":42},[36,46477,4092],{"class":112},[36,46479,4253],{"class":42},[36,46481,35090],{"class":112},[36,46483,4253],{"class":42},[36,46485,35090],{"class":112},[36,46487,34908],{"class":42},[211,46489,46490],{"start":53},[214,46491,42741],{},[26,46493,46495],{"className":28,"code":46494,"language":30,"meta":31,"style":31},"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",[33,46496,46497,46503,46509,46519,46525,46535,46545,46555,46565,46575,46579,46590,46600,46604,46608,46612,46620,46632,46642,46658,46668,46700,46714,46724,46734,46738,46748,46762,46772,46782,46792,46798,46802,46806,46810,46814,46818,46826,46846,46850,46854,46858,46862,46866,46882,46886,46890,46898,46902,46906,46914,46918,46922,46926,46934,46938,46942,46946,46950,46958,46962,46970,46974,46982,46986,46994,46998,47006,47010,47014,47022,47026,47030,47034,47046,47070,47084,47088,47092,47096,47104,47108,47116,47120,47128,47132,47140,47144,47152,47156,47164,47168,47180,47184,47192,47196,47204,47208,47212,47216,47220,47228,47232,47248,47252,47260,47264,47268,47272,47276,47280,47284,47288,47304,47308,47320,47324,47336,47340,47352,47356,47364,47368,47376,47380,47384,47388,47394,47398,47406,47410,47426,47430,47438,47442,47458,47470,47474,47486,47490,47494,47502,47506,47510,47518,47522,47530,47534,47542,47546,47550,47592,47634,47638,47642,47658,47662,47678,47682,47686,47694,47698,47702,47714,47752,47756,47760,47768,47772,47786,47796,47802,47808,47814,47820,47824,47828,47834,47838,47842,47850,47854,47872,47876,47880,47884,47900,47904,47908,47912,47916,47920,47940,47960,47964,47968,47972,47980,47988,47992,48008,48028,48048,48052,48056,48064,48072,48076,48080,48084,48096,48100,48110,48118,48135],{"__ignoreMap":31},[36,46498,46499,46501],{"class":38,"line":39},[36,46500,611],{"class":46},[36,46502,35410],{"class":42},[36,46504,46505,46507],{"class":38,"line":53},[36,46506,611],{"class":46},[36,46508,35417],{"class":42},[36,46510,46511,46513,46515,46517],{"class":38,"line":196},[36,46512,611],{"class":46},[36,46514,35428],{"class":42},[36,46516,617],{"class":46},[36,46518,35433],{"class":42},[36,46520,46521,46523],{"class":38,"line":642},[36,46522,611],{"class":46},[36,46524,34000],{"class":42},[36,46526,46527,46529,46531,46533],{"class":38,"line":655},[36,46528,645],{"class":46},[36,46530,35005],{"class":42},[36,46532,611],{"class":46},[36,46534,35450],{"class":42},[36,46536,46537,46539,46541,46543],{"class":38,"line":662},[36,46538,645],{"class":46},[36,46540,34961],{"class":42},[36,46542,611],{"class":46},[36,46544,34966],{"class":42},[36,46546,46547,46549,46551,46553],{"class":38,"line":667},[36,46548,645],{"class":46},[36,46550,34988],{"class":42},[36,46552,611],{"class":46},[36,46554,34993],{"class":42},[36,46556,46557,46559,46561,46563],{"class":38,"line":679},[36,46558,611],{"class":46},[36,46560,35005],{"class":42},[36,46562,617],{"class":46},[36,46564,35010],{"class":42},[36,46566,46567,46569,46571,46573],{"class":38,"line":685},[36,46568,611],{"class":46},[36,46570,35022],{"class":42},[36,46572,617],{"class":46},[36,46574,35027],{"class":42},[36,46576,46577],{"class":38,"line":691},[36,46578,35495],{"class":3943},[36,46580,46581,46583,46585,46587],{"class":38,"line":696},[36,46582,645],{"class":46},[36,46584,35502],{"class":42},[36,46586,611],{"class":46},[36,46588,46589],{"class":42}," GoogLeNet, Inception\n",[36,46591,46592,46594,46596,46598],{"class":38,"line":702},[36,46593,645],{"class":46},[36,46595,34342],{"class":42},[36,46597,611],{"class":46},[36,46599,34347],{"class":42},[36,46601,46602],{"class":38,"line":708},[36,46603,659],{"emptyLinePlaceholder":658},[36,46605,46606],{"class":38,"line":713},[36,46607,659],{"emptyLinePlaceholder":658},[36,46609,46610],{"class":38,"line":719},[36,46611,35530],{"class":3943},[36,46613,46614,46616,46618],{"class":38,"line":725},[36,46615,1820],{"class":46},[36,46617,35537],{"class":101},[36,46619,35540],{"class":42},[36,46621,46622,46624,46626,46628,46630],{"class":38,"line":731},[36,46623,35545],{"class":42},[36,46625,47],{"class":46},[36,46627,35045],{"class":42},[36,46629,35053],{"class":105},[36,46631,35056],{"class":42},[36,46633,46634,46636,46638,46640],{"class":38,"line":736},[36,46635,35558],{"class":468},[36,46637,47],{"class":46},[36,46639,35066],{"class":112},[36,46641,35056],{"class":42},[36,46643,46644,46646,46648,46650,46652,46654,46656],{"class":38,"line":742},[36,46645,35569],{"class":468},[36,46647,47],{"class":46},[36,46649,35083],{"class":42},[36,46651,1476],{"class":468},[36,46653,47],{"class":46},[36,46655,39009],{"class":112},[36,46657,35093],{"class":42},[36,46659,46660,46662,46664,46666],{"class":38,"line":748},[36,46661,35586],{"class":468},[36,46663,47],{"class":46},[36,46665,35066],{"class":112},[36,46667,922],{"class":42},[36,46669,46670,46672,46674,46676,46678,46680,46682,46684,46686,46688,46690,46692,46694,46696,46698],{"class":38,"line":754},[36,46671,35597],{"class":42},[36,46673,47],{"class":46},[36,46675,35602],{"class":42},[36,46677,1976],{"class":112},[36,46679,495],{"class":42},[36,46681,35609],{"class":112},[36,46683,1372],{"class":46},[36,46685,11049],{"class":112},[36,46687,35616],{"class":42},[36,46689,1976],{"class":112},[36,46691,495],{"class":42},[36,46693,35623],{"class":112},[36,46695,1372],{"class":46},[36,46697,11049],{"class":112},[36,46699,35630],{"class":42},[36,46701,46702,46704,46706,46708,46710,46712],{"class":38,"line":760},[36,46703,35635],{"class":42},[36,46705,47],{"class":46},[36,46707,35640],{"class":42},[36,46709,35126],{"class":468},[36,46711,47],{"class":46},[36,46713,35131],{"class":42},[36,46715,46716,46718,46720,46722],{"class":38,"line":766},[36,46717,35651],{"class":468},[36,46719,47],{"class":46},[36,46721,4072],{"class":112},[36,46723,35056],{"class":42},[36,46725,46726,46728,46730,46732],{"class":38,"line":772},[36,46727,35663],{"class":468},[36,46729,47],{"class":46},[36,46731,35066],{"class":112},[36,46733,35056],{"class":42},[36,46735,46736],{"class":38,"line":778},[36,46737,35674],{"class":3943},[36,46739,46740,46742,46744,46746],{"class":38,"line":783},[36,46741,35679],{"class":468},[36,46743,47],{"class":46},[36,46745,4270],{"class":112},[36,46747,922],{"class":42},[36,46749,46750,46752,46754,46756,46758,46760],{"class":38,"line":789},[36,46751,35690],{"class":42},[36,46753,47],{"class":46},[36,46755,35123],{"class":42},[36,46757,35126],{"class":468},[36,46759,47],{"class":46},[36,46761,35701],{"class":42},[36,46763,46764,46766,46768,46770],{"class":38,"line":795},[36,46765,35706],{"class":468},[36,46767,47],{"class":46},[36,46769,4072],{"class":112},[36,46771,35056],{"class":42},[36,46773,46774,46776,46778,46780],{"class":38,"line":801},[36,46775,35717],{"class":468},[36,46777,47],{"class":46},[36,46779,35066],{"class":112},[36,46781,35056],{"class":42},[36,46783,46784,46786,46788,46790],{"class":38,"line":807},[36,46785,35728],{"class":468},[36,46787,47],{"class":46},[36,46789,4270],{"class":112},[36,46791,922],{"class":42},[36,46793,46794,46796],{"class":38,"line":813},[36,46795,7788],{"class":46},[36,46797,35741],{"class":42},[36,46799,46800],{"class":38,"line":819},[36,46801,659],{"emptyLinePlaceholder":658},[36,46803,46804],{"class":38,"line":824},[36,46805,35750],{"class":3943},[36,46807,46808],{"class":38,"line":829},[36,46809,35755],{"class":3943},[36,46811,46812],{"class":38,"line":851},[36,46813,659],{"emptyLinePlaceholder":658},[36,46815,46816],{"class":38,"line":868},[36,46817,35764],{"class":3943},[36,46819,46820,46822,46824],{"class":38,"line":873},[36,46821,1820],{"class":46},[36,46823,35771],{"class":101},[36,46825,35774],{"class":42},[36,46827,46828,46830,46832,46834,46836,46838,46840,46842,46844],{"class":38,"line":891},[36,46829,34831],{"class":42},[36,46831,47],{"class":46},[36,46833,34055],{"class":42},[36,46835,34838],{"class":105},[36,46837,5428],{"class":46},[36,46839,34843],{"class":42},[36,46841,5425],{"class":46},[36,46843,35793],{"class":105},[36,46845,922],{"class":42},[36,46847,46848],{"class":38,"line":906},[36,46849,659],{"emptyLinePlaceholder":658},[36,46851,46852],{"class":38,"line":925},[36,46853,659],{"emptyLinePlaceholder":658},[36,46855,46856],{"class":38,"line":943},[36,46857,35808],{"class":3943},[36,46859,46860],{"class":38,"line":948},[36,46861,35813],{"class":3943},[36,46863,46864],{"class":38,"line":971},[36,46865,35818],{"class":3943},[36,46867,46868,46870,46872,46874,46876,46878,46880],{"class":38,"line":992},[36,46869,35823],{"class":42},[36,46871,47],{"class":46},[36,46873,35828],{"class":42},[36,46875,35831],{"class":468},[36,46877,47],{"class":46},[36,46879,35836],{"class":112},[36,46881,922],{"class":42},[36,46883,46884],{"class":38,"line":1020},[36,46885,659],{"emptyLinePlaceholder":658},[36,46887,46888],{"class":38,"line":1036},[36,46889,35847],{"class":3943},[36,46891,46892,46894,46896],{"class":38,"line":1041},[36,46893,35852],{"class":42},[36,46895,47],{"class":46},[36,46897,35857],{"class":42},[36,46899,46900],{"class":38,"line":1052},[36,46901,659],{"emptyLinePlaceholder":658},[36,46903,46904],{"class":38,"line":1065},[36,46905,35866],{"class":3943},[36,46907,46908,46910,46912],{"class":38,"line":1077},[36,46909,34883],{"class":42},[36,46911,47],{"class":46},[36,46913,35875],{"class":42},[36,46915,46916],{"class":38,"line":1082},[36,46917,35880],{"class":3943},[36,46919,46920],{"class":38,"line":1125},[36,46921,35885],{"class":3943},[36,46923,46924],{"class":38,"line":1164},[36,46925,35890],{"class":3943},[36,46927,46928,46930,46932],{"class":38,"line":1169},[36,46929,35895],{"class":42},[36,46931,47],{"class":46},[36,46933,35900],{"class":42},[36,46935,46936],{"class":38,"line":1180},[36,46937,659],{"emptyLinePlaceholder":658},[36,46939,46940],{"class":38,"line":1198},[36,46941,659],{"emptyLinePlaceholder":658},[36,46943,46944],{"class":38,"line":1215},[36,46945,35913],{"class":3943},[36,46947,46948],{"class":38,"line":1236},[36,46949,35918],{"class":3943},[36,46951,46952,46954,46956],{"class":38,"line":1245},[36,46953,35923],{"class":42},[36,46955,47],{"class":46},[36,46957,35928],{"class":112},[36,46959,46960],{"class":38,"line":1250},[36,46961,35933],{"class":3943},[36,46963,46964,46966,46968],{"class":38,"line":1265},[36,46965,35938],{"class":42},[36,46967,47],{"class":46},[36,46969,35943],{"class":42},[36,46971,46972],{"class":38,"line":1281},[36,46973,35948],{"class":3943},[36,46975,46976,46978,46980],{"class":38,"line":1297},[36,46977,35953],{"class":42},[36,46979,47],{"class":46},[36,46981,35943],{"class":42},[36,46983,46984],{"class":38,"line":1314},[36,46985,35962],{"class":3943},[36,46987,46988,46990,46992],{"class":38,"line":1336},[36,46989,35967],{"class":42},[36,46991,47],{"class":46},[36,46993,35943],{"class":42},[36,46995,46996],{"class":38,"line":1356},[36,46997,35976],{"class":3943},[36,46999,47000,47002,47004],{"class":38,"line":1361},[36,47001,35981],{"class":42},[36,47003,47],{"class":46},[36,47005,35943],{"class":42},[36,47007,47008],{"class":38,"line":1407},[36,47009,659],{"emptyLinePlaceholder":658},[36,47011,47012],{"class":38,"line":1423},[36,47013,35994],{"class":3943},[36,47015,47016,47018,47020],{"class":38,"line":1439},[36,47017,35999],{"class":42},[36,47019,47],{"class":46},[36,47021,36004],{"class":42},[36,47023,47024],{"class":38,"line":1444},[36,47025,659],{"emptyLinePlaceholder":658},[36,47027,47028],{"class":38,"line":1486},[36,47029,659],{"emptyLinePlaceholder":658},[36,47031,47032],{"class":38,"line":1499},[36,47033,36017],{"class":3943},[36,47035,47036,47038,47040,47042,47044],{"class":38,"line":1513},[36,47037,1909],{"class":46},[36,47039,36024],{"class":42},[36,47041,1619],{"class":46},[36,47043,1622],{"class":112},[36,47045,36031],{"class":42},[36,47047,47048,47050,47052,47054,47056,47058,47060,47062,47064,47066,47068],{"class":38,"line":1518},[36,47049,1960],{"class":112},[36,47051,495],{"class":42},[36,47053,36040],{"class":105},[36,47055,3649],{"class":112},[36,47057,4455],{"class":105},[36,47059,3649],{"class":112},[36,47061,4126],{"class":105},[36,47063,36051],{"class":42},[36,47065,1308],{"class":46},[36,47067,4092],{"class":112},[36,47069,2005],{"class":42},[36,47071,47072,47074,47076,47078,47080,47082],{"class":38,"line":1529},[36,47073,1960],{"class":112},[36,47075,495],{"class":42},[36,47077,36066],{"class":105},[36,47079,1372],{"class":46},[36,47081,554],{"class":112},[36,47083,922],{"class":42},[36,47085,47086],{"class":38,"line":1539},[36,47087,659],{"emptyLinePlaceholder":658},[36,47089,47090],{"class":38,"line":1544},[36,47091,36081],{"class":3943},[36,47093,47094],{"class":38,"line":1555},[36,47095,36086],{"class":3943},[36,47097,47098,47100,47102],{"class":38,"line":1572},[36,47099,36091],{"class":42},[36,47101,47],{"class":46},[36,47103,35928],{"class":112},[36,47105,47106],{"class":38,"line":1592},[36,47107,36100],{"class":3943},[36,47109,47110,47112,47114],{"class":38,"line":1597},[36,47111,36105],{"class":42},[36,47113,47],{"class":46},[36,47115,6787],{"class":112},[36,47117,47118],{"class":38,"line":1610},[36,47119,36114],{"class":3943},[36,47121,47122,47124,47126],{"class":38,"line":1632},[36,47123,36119],{"class":42},[36,47125,47],{"class":46},[36,47127,35928],{"class":112},[36,47129,47130],{"class":38,"line":1646},[36,47131,36128],{"class":3943},[36,47133,47134,47136,47138],{"class":38,"line":1651},[36,47135,36133],{"class":42},[36,47137,47],{"class":46},[36,47139,6787],{"class":112},[36,47141,47142],{"class":38,"line":1664},[36,47143,36142],{"class":3943},[36,47145,47146,47148,47150],{"class":38,"line":1669},[36,47147,36147],{"class":42},[36,47149,47],{"class":46},[36,47151,6787],{"class":112},[36,47153,47154],{"class":38,"line":1681},[36,47155,36156],{"class":3943},[36,47157,47158,47160,47162],{"class":38,"line":1694},[36,47159,36161],{"class":42},[36,47161,47],{"class":46},[36,47163,6787],{"class":112},[36,47165,47166],{"class":38,"line":1699},[36,47167,36170],{"class":3943},[36,47169,47170,47172,47174,47176,47178],{"class":38,"line":1714},[36,47171,1613],{"class":46},[36,47173,35190],{"class":42},[36,47175,1619],{"class":46},[36,47177,35195],{"class":112},[36,47179,36183],{"class":42},[36,47181,47182],{"class":38,"line":1729},[36,47183,36188],{"class":3943},[36,47185,47186,47188,47190],{"class":38,"line":1746},[36,47187,36193],{"class":42},[36,47189,47],{"class":46},[36,47191,36198],{"class":42},[36,47193,47194],{"class":38,"line":1751},[36,47195,36203],{"class":3943},[36,47197,47198,47200,47202],{"class":38,"line":1765},[36,47199,36208],{"class":42},[36,47201,47],{"class":46},[36,47203,36213],{"class":42},[36,47205,47206],{"class":38,"line":1783},[36,47207,36218],{"class":3943},[36,47209,47210],{"class":38,"line":1799},[36,47211,36223],{"class":42},[36,47213,47214],{"class":38,"line":1807},[36,47215,36228],{"class":3943},[36,47217,47218],{"class":38,"line":1812},[36,47219,36233],{"class":3943},[36,47221,47222,47224,47226],{"class":38,"line":1817},[36,47223,36238],{"class":42},[36,47225,47],{"class":46},[36,47227,36243],{"class":42},[36,47229,47230],{"class":38,"line":1833},[36,47231,36248],{"class":3943},[36,47233,47234,47236,47238,47240,47242,47244,47246],{"class":38,"line":1844},[36,47235,36253],{"class":42},[36,47237,47],{"class":46},[36,47239,36258],{"class":42},[36,47241,36261],{"class":468},[36,47243,47],{"class":46},[36,47245,4092],{"class":112},[36,47247,922],{"class":42},[36,47249,47250],{"class":38,"line":1864},[36,47251,36272],{"class":3943},[36,47253,47254,47256,47258],{"class":38,"line":1878},[36,47255,36277],{"class":42},[36,47257,47],{"class":46},[36,47259,36282],{"class":42},[36,47261,47262],{"class":38,"line":1891},[36,47263,36287],{"class":3943},[36,47265,47266],{"class":38,"line":1896},[36,47267,36292],{"class":42},[36,47269,47270],{"class":38,"line":1906},[36,47271,36297],{"class":3943},[36,47273,47274],{"class":38,"line":1926},[36,47275,36302],{"class":42},[36,47277,47278],{"class":38,"line":1936},[36,47279,36307],{"class":3943},[36,47281,47282],{"class":38,"line":1946},[36,47283,36312],{"class":42},[36,47285,47286],{"class":38,"line":1957},[36,47287,36317],{"class":3943},[36,47289,47290,47292,47294,47296,47298,47300,47302],{"class":38,"line":2008},[36,47291,36322],{"class":42},[36,47293,1658],{"class":46},[36,47295,36327],{"class":42},[36,47297,1372],{"class":46},[36,47299,36332],{"class":42},[36,47301,1859],{"class":112},[36,47303,922],{"class":42},[36,47305,47306],{"class":38,"line":2022},[36,47307,36341],{"class":3943},[36,47309,47310,47312,47314,47316,47318],{"class":38,"line":2028},[36,47311,36346],{"class":42},[36,47313,1658],{"class":46},[36,47315,36351],{"class":42},[36,47317,6652],{"class":46},[36,47319,36356],{"class":42},[36,47321,47322],{"class":38,"line":2033},[36,47323,36361],{"class":3943},[36,47325,47326,47328,47330,47332,47334],{"class":38,"line":2054},[36,47327,36366],{"class":42},[36,47329,1658],{"class":46},[36,47331,36332],{"class":42},[36,47333,1859],{"class":112},[36,47335,922],{"class":42},[36,47337,47338],{"class":38,"line":2059},[36,47339,36379],{"class":3943},[36,47341,47342,47344,47346,47348,47350],{"class":38,"line":2064},[36,47343,1613],{"class":46},[36,47345,36386],{"class":42},[36,47347,1619],{"class":46},[36,47349,35195],{"class":112},[36,47351,36393],{"class":42},[36,47353,47354],{"class":38,"line":2081},[36,47355,36399],{"class":3943},[36,47357,47358,47360,47362],{"class":38,"line":36396},[36,47359,36193],{"class":42},[36,47361,47],{"class":46},[36,47363,36198],{"class":42},[36,47365,47366],{"class":38,"line":36402},[36,47367,36414],{"class":3943},[36,47369,47370,47372,47374],{"class":38,"line":36411},[36,47371,36208],{"class":42},[36,47373,47],{"class":46},[36,47375,36213],{"class":42},[36,47377,47378],{"class":38,"line":36417},[36,47379,36429],{"class":3943},[36,47381,47382],{"class":38,"line":36426},[36,47383,36435],{"class":42},[36,47385,47386],{"class":38,"line":36432},[36,47387,39916],{"class":3943},[36,47389,47390,47392],{"class":38,"line":36438},[36,47391,36441],{"class":46},[36,47393,36444],{"class":42},[36,47395,47396],{"class":38,"line":36447},[36,47397,36450],{"class":3943},[36,47399,47400,47402,47404],{"class":38,"line":36453},[36,47401,39931],{"class":42},[36,47403,47],{"class":46},[36,47405,36243],{"class":42},[36,47407,47408],{"class":38,"line":36464},[36,47409,36467],{"class":3943},[36,47411,47412,47414,47416,47418,47420,47422,47424],{"class":38,"line":36470},[36,47413,39944],{"class":42},[36,47415,47],{"class":46},[36,47417,36258],{"class":42},[36,47419,36261],{"class":468},[36,47421,47],{"class":46},[36,47423,4092],{"class":112},[36,47425,922],{"class":42},[36,47427,47428],{"class":38,"line":36489},[36,47429,36492],{"class":3943},[36,47431,47432,47434,47436],{"class":38,"line":36495},[36,47433,39965],{"class":42},[36,47435,47],{"class":46},[36,47437,36282],{"class":42},[36,47439,47440],{"class":38,"line":36506},[36,47441,36509],{"class":3943},[36,47443,47444,47446,47448,47450,47452,47454,47456],{"class":38,"line":36512},[36,47445,39978],{"class":42},[36,47447,1658],{"class":46},[36,47449,39983],{"class":42},[36,47451,1372],{"class":46},[36,47453,36332],{"class":42},[36,47455,1859],{"class":112},[36,47457,922],{"class":42},[36,47459,47460,47462,47464,47466,47468],{"class":38,"line":36532},[36,47461,39996],{"class":42},[36,47463,1658],{"class":46},[36,47465,36351],{"class":42},[36,47467,6652],{"class":46},[36,47469,36356],{"class":42},[36,47471,47472],{"class":38,"line":36548},[36,47473,40009],{"class":3943},[36,47475,47476,47478,47480,47482,47484],{"class":38,"line":36554},[36,47477,40014],{"class":42},[36,47479,1658],{"class":46},[36,47481,36332],{"class":42},[36,47483,1859],{"class":112},[36,47485,922],{"class":42},[36,47487,47488],{"class":38,"line":36568},[36,47489,36571],{"class":3943},[36,47491,47492],{"class":38,"line":36574},[36,47493,36577],{"class":3943},[36,47495,47496,47498,47500],{"class":38,"line":36580},[36,47497,36583],{"class":42},[36,47499,4455],{"class":46},[36,47501,36588],{"class":42},[36,47503,47504],{"class":38,"line":36591},[36,47505,36594],{"class":3943},[36,47507,47508],{"class":38,"line":36597},[36,47509,36600],{"class":3943},[36,47511,47512,47514,47516],{"class":38,"line":36603},[36,47513,36606],{"class":42},[36,47515,4455],{"class":46},[36,47517,36588],{"class":42},[36,47519,47520],{"class":38,"line":36613},[36,47521,36616],{"class":3943},[36,47523,47524,47526,47528],{"class":38,"line":36619},[36,47525,36622],{"class":42},[36,47527,4455],{"class":46},[36,47529,36627],{"class":42},[36,47531,47532],{"class":38,"line":36630},[36,47533,36633],{"class":3943},[36,47535,47536,47538,47540],{"class":38,"line":36636},[36,47537,36639],{"class":42},[36,47539,4455],{"class":46},[36,47541,36627],{"class":42},[36,47543,47544],{"class":38,"line":36646},[36,47545,659],{"emptyLinePlaceholder":658},[36,47547,47548],{"class":38,"line":36651},[36,47549,36654],{"class":3943},[36,47551,47552,47554,47556,47558,47560,47562,47564,47566,47568,47570,47572,47574,47576,47578,47580,47582,47584,47586,47588,47590],{"class":38,"line":36657},[36,47553,1960],{"class":112},[36,47555,495],{"class":42},[36,47557,7291],{"class":105},[36,47559,3649],{"class":112},[36,47561,36668],{"class":105},[36,47563,4766],{"class":112},[36,47565,36673],{"class":46},[36,47567,4815],{"class":112},[36,47569,36678],{"class":105},[36,47571,4766],{"class":112},[36,47573,36673],{"class":46},[36,47575,4815],{"class":112},[36,47577,7291],{"class":105},[36,47579,36689],{"class":42},[36,47581,1308],{"class":46},[36,47583,4092],{"class":112},[36,47585,36696],{"class":42},[36,47587,1308],{"class":46},[36,47589,4092],{"class":112},[36,47591,36703],{"class":42},[36,47593,47594,47596,47598,47600,47602,47604,47606,47608,47610,47612,47614,47616,47618,47620,47622,47624,47626,47628,47630,47632],{"class":38,"line":36706},[36,47595,1960],{"class":112},[36,47597,495],{"class":42},[36,47599,7291],{"class":105},[36,47601,3649],{"class":112},[36,47603,36717],{"class":105},[36,47605,4766],{"class":112},[36,47607,36673],{"class":46},[36,47609,4815],{"class":112},[36,47611,36726],{"class":105},[36,47613,4766],{"class":112},[36,47615,36673],{"class":46},[36,47617,4815],{"class":112},[36,47619,7291],{"class":105},[36,47621,36737],{"class":42},[36,47623,1308],{"class":46},[36,47625,4092],{"class":112},[36,47627,36744],{"class":42},[36,47629,1308],{"class":46},[36,47631,4092],{"class":112},[36,47633,36703],{"class":42},[36,47635,47636],{"class":38,"line":36753},[36,47637,659],{"emptyLinePlaceholder":658},[36,47639,47640],{"class":38,"line":36758},[36,47641,36761],{"class":3943},[36,47643,47644,47646,47648,47650,47652,47654,47656],{"class":38,"line":36764},[36,47645,995],{"class":46},[36,47647,36769],{"class":42},[36,47649,1308],{"class":46},[36,47651,4092],{"class":112},[36,47653,4809],{"class":42},[36,47655,4829],{"class":46},[36,47657,36780],{"class":42},[36,47659,47660],{"class":38,"line":36783},[36,47661,36786],{"class":3943},[36,47663,47664,47666,47668,47670,47672,47674,47676],{"class":38,"line":36789},[36,47665,36792],{"class":42},[36,47667,1260],{"class":112},[36,47669,47],{"class":46},[36,47671,36799],{"class":42},[36,47673,1308],{"class":46},[36,47675,4092],{"class":112},[36,47677,36806],{"class":42},[36,47679,47680],{"class":38,"line":36809},[36,47681,36812],{"class":3943},[36,47683,47684],{"class":38,"line":36815},[36,47685,36818],{"class":3943},[36,47687,47688,47690,47692],{"class":38,"line":36821},[36,47689,36824],{"class":42},[36,47691,47],{"class":46},[36,47693,35900],{"class":42},[36,47695,47696],{"class":38,"line":36831},[36,47697,659],{"emptyLinePlaceholder":658},[36,47699,47700],{"class":38,"line":36836},[36,47701,36839],{"class":3943},[36,47703,47704,47706,47708,47710,47712],{"class":38,"line":36842},[36,47705,36845],{"class":42},[36,47707,47],{"class":46},[36,47709,36850],{"class":42},[36,47711,1308],{"class":46},[36,47713,36855],{"class":42},[36,47715,47716,47718,47720,47722,47724,47726,47728,47730,47732,47734,47736,47738,47740,47742,47744,47746,47748,47750],{"class":38,"line":36858},[36,47717,1960],{"class":112},[36,47719,495],{"class":42},[36,47721,36865],{"class":105},[36,47723,4766],{"class":112},[36,47725,36870],{"class":46},[36,47727,4815],{"class":112},[36,47729,4416],{"class":105},[36,47731,4766],{"class":112},[36,47733,36870],{"class":46},[36,47735,4815],{"class":112},[36,47737,36883],{"class":105},[36,47739,36886],{"class":42},[36,47741,36889],{"class":46},[36,47743,4777],{"class":112},[36,47745,36894],{"class":42},[36,47747,4203],{"class":46},[36,47749,4777],{"class":112},[36,47751,2005],{"class":42},[36,47753,47754],{"class":38,"line":36903},[36,47755,40293],{"class":3943},[36,47757,47758],{"class":38,"line":36909},[36,47759,40298],{"class":3943},[36,47761,47762,47764,47766],{"class":38,"line":36915},[36,47763,40303],{"class":42},[36,47765,36927],{"class":105},[36,47767,922],{"class":42},[36,47769,47770],{"class":38,"line":36921},[36,47771,36947],{"class":3943},[36,47773,47774,47776,47778,47780,47782,47784],{"class":38,"line":36932},[36,47775,36953],{"class":42},[36,47777,47],{"class":46},[36,47779,36958],{"class":42},[36,47781,36961],{"class":468},[36,47783,47],{"class":46},[36,47785,5281],{"class":42},[36,47787,47788,47790,47792,47794],{"class":38,"line":36938},[36,47789,36971],{"class":105},[36,47791,4729],{"class":42},[36,47793,36976],{"class":112},[36,47795,36979],{"class":42},[36,47797,47798,47800],{"class":38,"line":36944},[36,47799,36985],{"class":105},[36,47801,36988],{"class":42},[36,47803,47804,47806],{"class":38,"line":36950},[36,47805,36994],{"class":105},[36,47807,36997],{"class":42},[36,47809,47810,47812],{"class":38,"line":36968},[36,47811,37003],{"class":105},[36,47813,37006],{"class":42},[36,47815,47816,47818],{"class":38,"line":36982},[36,47817,37012],{"class":105},[36,47819,37015],{"class":42},[36,47821,47822],{"class":38,"line":36991},[36,47823,37021],{"class":42},[36,47825,47826],{"class":38,"line":37000},[36,47827,37027],{"class":3943},[36,47829,47830,47832],{"class":38,"line":37009},[36,47831,7788],{"class":46},[36,47833,37035],{"class":42},[36,47835,47836],{"class":38,"line":37018},[36,47837,659],{"emptyLinePlaceholder":658},[36,47839,47840],{"class":38,"line":37024},[36,47841,37046],{"class":3943},[36,47843,47844,47846,47848],{"class":38,"line":37030},[36,47845,1820],{"class":46},[36,47847,37054],{"class":101},[36,47849,37057],{"class":42},[36,47851,47852],{"class":38,"line":37038},[36,47853,37063],{"class":3943},[36,47855,47856,47858,47860,47862,47864,47866,47868,47870],{"class":38,"line":37043},[36,47857,37069],{"class":42},[36,47859,35281],{"class":468},[36,47861,47],{"class":46},[36,47863,495],{"class":42},[36,47865,4371],{"class":112},[36,47867,4253],{"class":42},[36,47869,4168],{"class":112},[36,47871,2005],{"class":42},[36,47873,47874],{"class":38,"line":37049},[36,47875,37089],{"class":3943},[36,47877,47878],{"class":38,"line":37060},[36,47879,37095],{"class":3943},[36,47881,47882],{"class":38,"line":37066},[36,47883,37101],{"class":3943},[36,47885,47886,47888,47890,47892,47894,47896,47898],{"class":38,"line":37086},[36,47887,35315],{"class":42},[36,47889,4092],{"class":112},[36,47891,4253],{"class":42},[36,47893,498],{"class":112},[36,47895,4253],{"class":42},[36,47897,4092],{"class":112},[36,47899,922],{"class":42},[36,47901,47902],{"class":38,"line":37092},[36,47903,37124],{"class":3943},[36,47905,47906],{"class":38,"line":37098},[36,47907,37130],{"class":3943},[36,47909,47910],{"class":38,"line":37104},[36,47911,37136],{"class":3943},[36,47913,47914],{"class":38,"line":37121},[36,47915,37142],{"class":3943},[36,47917,47918],{"class":38,"line":37127},[36,47919,37148],{"class":3943},[36,47921,47922,47924,47926,47928,47930,47932,47934,47936,47938],{"class":38,"line":37133},[36,47923,37154],{"class":42},[36,47925,37157],{"class":105},[36,47927,37160],{"class":42},[36,47929,37163],{"class":105},[36,47931,4253],{"class":42},[36,47933,37168],{"class":468},[36,47935,47],{"class":46},[36,47937,37173],{"class":105},[36,47939,922],{"class":42},[36,47941,47942,47944,47946,47948,47950,47952,47954,47956,47958],{"class":38,"line":37139},[36,47943,37154],{"class":42},[36,47945,37157],{"class":105},[36,47947,37185],{"class":42},[36,47949,37188],{"class":105},[36,47951,4253],{"class":42},[36,47953,37168],{"class":468},[36,47955,47],{"class":46},[36,47957,37197],{"class":105},[36,47959,922],{"class":42},[36,47961,47962],{"class":38,"line":37145},[36,47963,37205],{"class":3943},[36,47965,47966],{"class":38,"line":37151},[36,47967,37211],{"class":42},[36,47969,47970],{"class":38,"line":37178},[36,47971,37217],{"class":3943},[36,47973,47974,47976,47978],{"class":38,"line":37202},[36,47975,37223],{"class":42},[36,47977,37226],{"class":105},[36,47979,922],{"class":42},[36,47981,47982,47984,47986],{"class":38,"line":37208},[36,47983,37234],{"class":42},[36,47985,37237],{"class":105},[36,47987,922],{"class":42},[36,47989,47990],{"class":38,"line":37214},[36,47991,37245],{"class":3943},[36,47993,47994,47996,47998,48000,48002,48004,48006],{"class":38,"line":37220},[36,47995,35315],{"class":42},[36,47997,4092],{"class":112},[36,47999,4253],{"class":42},[36,48001,498],{"class":112},[36,48003,4253],{"class":42},[36,48005,498],{"class":112},[36,48007,922],{"class":42},[36,48009,48010,48012,48014,48016,48018,48020,48022,48024,48026],{"class":38,"line":37231},[36,48011,37154],{"class":42},[36,48013,37157],{"class":105},[36,48015,37272],{"class":42},[36,48017,37163],{"class":105},[36,48019,4253],{"class":42},[36,48021,37168],{"class":468},[36,48023,47],{"class":46},[36,48025,37283],{"class":105},[36,48027,922],{"class":42},[36,48029,48030,48032,48034,48036,48038,48040,48042,48044,48046],{"class":38,"line":37242},[36,48031,37154],{"class":42},[36,48033,37157],{"class":105},[36,48035,37295],{"class":42},[36,48037,37188],{"class":105},[36,48039,4253],{"class":42},[36,48041,37168],{"class":468},[36,48043,47],{"class":46},[36,48045,37306],{"class":105},[36,48047,922],{"class":42},[36,48049,48050],{"class":38,"line":37248},[36,48051,37314],{"class":3943},[36,48053,48054],{"class":38,"line":37265},[36,48055,37211],{"class":42},[36,48057,48058,48060,48062],{"class":38,"line":37288},[36,48059,37223],{"class":42},[36,48061,37157],{"class":105},[36,48063,922],{"class":42},[36,48065,48066,48068,48070],{"class":38,"line":37311},[36,48067,37234],{"class":42},[36,48069,37336],{"class":105},[36,48071,922],{"class":42},[36,48073,48074],{"class":38,"line":37317},[36,48075,37344],{"class":42},[36,48077,48078],{"class":38,"line":37322},[36,48079,659],{"emptyLinePlaceholder":658},[36,48081,48082],{"class":38,"line":37331},[36,48083,37355],{"class":3943},[36,48085,48086,48088,48090,48092,48094],{"class":38,"line":37341},[36,48087,2067],{"class":46},[36,48089,2070],{"class":112},[36,48091,6652],{"class":46},[36,48093,34819],{"class":105},[36,48095,888],{"class":42},[36,48097,48098],{"class":38,"line":37347},[36,48099,37374],{"class":3943},[36,48101,48102,48105,48107],{"class":38,"line":37352},[36,48103,48104],{"class":42},"    GoogLeNet",[36,48106,47],{"class":46},[36,48108,48109],{"class":42},"GoogLeNet(Inception)\n",[36,48111,48112,48114,48116],{"class":38,"line":37358},[36,48113,37391],{"class":42},[36,48115,47],{"class":46},[36,48117,37396],{"class":42},[36,48119,48120,48122,48124,48127,48129,48131,48133],{"class":38,"line":37371},[36,48121,36953],{"class":42},[36,48123,47],{"class":46},[36,48125,48126],{"class":42},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[36,48128,37409],{"class":468},[36,48130,47],{"class":46},[36,48132,4820],{"class":112},[36,48134,922],{"class":42},[36,48136,48137],{"class":38,"line":37377},[36,48138,37421],{"class":42},[211,48140,48141],{"start":196},[214,48142,44132],{},[26,48144,48146],{"className":28,"code":48145,"language":30,"meta":31,"style":31},"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",[33,48147,48148,48154,48164,48174,48178,48188,48199,48203,48207,48211,48219,48235,48245,48261,48271,48285,48289,48299,48309,48319,48325,48329,48333,48341,48345,48361,48369,48373,48377,48385,48393,48397,48401,48405,48409,48415,48419,48429,48437,48445,48449,48453,48457,48465,48469,48485,48489,48493,48497,48509,48513,48525,48529,48533,48545,48549,48559,48563,48567,48579,48583,48591,48595,48599,48607,48611,48619,48623,48627,48631,48635,48639,48655,48663,48667,48671,48719,48725,48729,48739,48747,48755,48759,48763,48767,48771,48779,48783,48799,48803,48811,48819],{"__ignoreMap":31},[36,48149,48150,48152],{"class":38,"line":39},[36,48151,611],{"class":46},[36,48153,34000],{"class":42},[36,48155,48156,48158,48160,48162],{"class":38,"line":53},[36,48157,611],{"class":46},[36,48159,35005],{"class":42},[36,48161,617],{"class":46},[36,48163,35010],{"class":42},[36,48165,48166,48168,48170,48172],{"class":38,"line":196},[36,48167,645],{"class":46},[36,48169,34988],{"class":42},[36,48171,611],{"class":46},[36,48173,34993],{"class":42},[36,48175,48176],{"class":38,"line":642},[36,48177,37482],{"class":3943},[36,48179,48180,48182,48184,48186],{"class":38,"line":655},[36,48181,645],{"class":46},[36,48183,34961],{"class":42},[36,48185,611],{"class":46},[36,48187,34966],{"class":42},[36,48189,48190,48192,48194,48196],{"class":38,"line":662},[36,48191,645],{"class":46},[36,48193,35502],{"class":42},[36,48195,611],{"class":46},[36,48197,48198],{"class":42}," GoogLeNet,Inception\n",[36,48200,48201],{"class":38,"line":667},[36,48202,659],{"emptyLinePlaceholder":658},[36,48204,48205],{"class":38,"line":679},[36,48206,659],{"emptyLinePlaceholder":658},[36,48208,48209],{"class":38,"line":685},[36,48210,37511],{"class":3943},[36,48212,48213,48215,48217],{"class":38,"line":691},[36,48214,1820],{"class":46},[36,48216,37518],{"class":101},[36,48218,35540],{"class":42},[36,48220,48221,48223,48225,48227,48229,48231,48233],{"class":38,"line":696},[36,48222,37525],{"class":42},[36,48224,47],{"class":46},[36,48226,35045],{"class":42},[36,48228,35048],{"class":468},[36,48230,47],{"class":46},[36,48232,35053],{"class":105},[36,48234,35056],{"class":42},[36,48236,48237,48239,48241,48243],{"class":38,"line":702},[36,48238,37542],{"class":468},[36,48240,47],{"class":46},[36,48242,37547],{"class":112},[36,48244,35056],{"class":42},[36,48246,48247,48249,48251,48253,48255,48257,48259],{"class":38,"line":708},[36,48248,37554],{"class":468},[36,48250,47],{"class":46},[36,48252,35083],{"class":42},[36,48254,1476],{"class":468},[36,48256,47],{"class":46},[36,48258,39009],{"class":112},[36,48260,35093],{"class":42},[36,48262,48263,48265,48267,48269],{"class":38,"line":713},[36,48264,37571],{"class":468},[36,48266,47],{"class":46},[36,48268,35066],{"class":112},[36,48270,922],{"class":42},[36,48272,48273,48275,48277,48279,48281,48283],{"class":38,"line":719},[36,48274,37582],{"class":42},[36,48276,47],{"class":46},[36,48278,35123],{"class":42},[36,48280,35126],{"class":468},[36,48282,47],{"class":46},[36,48284,37593],{"class":42},[36,48286,48287],{"class":38,"line":725},[36,48288,37598],{"class":3943},[36,48290,48291,48293,48295,48297],{"class":38,"line":731},[36,48292,37603],{"class":468},[36,48294,47],{"class":46},[36,48296,4092],{"class":112},[36,48298,35056],{"class":42},[36,48300,48301,48303,48305,48307],{"class":38,"line":736},[36,48302,37614],{"class":468},[36,48304,47],{"class":46},[36,48306,35066],{"class":112},[36,48308,35056],{"class":42},[36,48310,48311,48313,48315,48317],{"class":38,"line":742},[36,48312,37625],{"class":468},[36,48314,47],{"class":46},[36,48316,1859],{"class":112},[36,48318,922],{"class":42},[36,48320,48321,48323],{"class":38,"line":748},[36,48322,7788],{"class":46},[36,48324,37638],{"class":42},[36,48326,48327],{"class":38,"line":754},[36,48328,659],{"emptyLinePlaceholder":658},[36,48330,48331],{"class":38,"line":760},[36,48332,37647],{"class":3943},[36,48334,48335,48337,48339],{"class":38,"line":766},[36,48336,1820],{"class":46},[36,48338,37654],{"class":101},[36,48340,37657],{"class":42},[36,48342,48343],{"class":38,"line":772},[36,48344,37662],{"class":3943},[36,48346,48347,48349,48351,48353,48355,48357,48359],{"class":38,"line":778},[36,48348,34831],{"class":42},[36,48350,47],{"class":46},[36,48352,34838],{"class":105},[36,48354,5428],{"class":46},[36,48356,34843],{"class":42},[36,48358,5425],{"class":46},[36,48360,37679],{"class":105},[36,48362,48363,48365,48367],{"class":38,"line":783},[36,48364,34883],{"class":42},[36,48366,47],{"class":46},[36,48368,35875],{"class":42},[36,48370,48371],{"class":38,"line":789},[36,48372,659],{"emptyLinePlaceholder":658},[36,48374,48375],{"class":38,"line":795},[36,48376,37696],{"class":3943},[36,48378,48379,48381,48383],{"class":38,"line":801},[36,48380,37701],{"class":42},[36,48382,47],{"class":46},[36,48384,35928],{"class":112},[36,48386,48387,48389,48391],{"class":38,"line":807},[36,48388,37710],{"class":42},[36,48390,47],{"class":46},[36,48392,6787],{"class":112},[36,48394,48395],{"class":38,"line":813},[36,48396,659],{"emptyLinePlaceholder":658},[36,48398,48399],{"class":38,"line":819},[36,48400,37723],{"class":3943},[36,48402,48403],{"class":38,"line":824},[36,48404,37728],{"class":3943},[36,48406,48407],{"class":38,"line":829},[36,48408,37733],{"class":3943},[36,48410,48411,48413],{"class":38,"line":851},[36,48412,37738],{"class":46},[36,48414,36444],{"class":42},[36,48416,48417],{"class":38,"line":868},[36,48418,37745],{"class":3943},[36,48420,48421,48423,48425,48427],{"class":38,"line":873},[36,48422,1613],{"class":46},[36,48424,37752],{"class":42},[36,48426,1619],{"class":46},[36,48428,37757],{"class":42},[36,48430,48431,48433,48435],{"class":38,"line":891},[36,48432,37762],{"class":42},[36,48434,47],{"class":46},[36,48436,37767],{"class":42},[36,48438,48439,48441,48443],{"class":38,"line":906},[36,48440,37772],{"class":42},[36,48442,47],{"class":46},[36,48444,37777],{"class":42},[36,48446,48447],{"class":38,"line":925},[36,48448,37782],{"class":3943},[36,48450,48451],{"class":38,"line":943},[36,48452,36435],{"class":42},[36,48454,48455],{"class":38,"line":948},[36,48456,37791],{"class":3943},[36,48458,48459,48461,48463],{"class":38,"line":971},[36,48460,36238],{"class":42},[36,48462,47],{"class":46},[36,48464,37800],{"class":42},[36,48466,48467],{"class":38,"line":992},[36,48468,37805],{"class":3943},[36,48470,48471,48473,48475,48477,48479,48481,48483],{"class":38,"line":1020},[36,48472,36253],{"class":42},[36,48474,47],{"class":46},[36,48476,36258],{"class":42},[36,48478,36261],{"class":468},[36,48480,47],{"class":46},[36,48482,4092],{"class":112},[36,48484,922],{"class":42},[36,48486,48487],{"class":38,"line":1036},[36,48488,37826],{"class":3943},[36,48490,48491],{"class":38,"line":1041},[36,48492,37831],{"class":3943},[36,48494,48495],{"class":38,"line":1052},[36,48496,37836],{"class":3943},[36,48498,48499,48501,48503,48505,48507],{"class":38,"line":1065},[36,48500,37841],{"class":42},[36,48502,1658],{"class":46},[36,48504,36351],{"class":42},[36,48506,6652],{"class":46},[36,48508,37850],{"class":42},[36,48510,48511],{"class":38,"line":1077},[36,48512,37855],{"class":3943},[36,48514,48515,48517,48519,48521,48523],{"class":38,"line":1082},[36,48516,37860],{"class":42},[36,48518,1658],{"class":46},[36,48520,37865],{"class":42},[36,48522,1859],{"class":112},[36,48524,922],{"class":42},[36,48526,48527],{"class":38,"line":1125},[36,48528,659],{"emptyLinePlaceholder":658},[36,48530,48531],{"class":38,"line":1164},[36,48532,37878],{"class":3943},[36,48534,48535,48537,48539,48541,48543],{"class":38,"line":1169},[36,48536,37883],{"class":42},[36,48538,47],{"class":46},[36,48540,37888],{"class":42},[36,48542,4455],{"class":46},[36,48544,37893],{"class":42},[36,48546,48547],{"class":38,"line":1180},[36,48548,37898],{"class":3943},[36,48550,48551,48553,48555,48557],{"class":38,"line":1198},[36,48552,1960],{"class":112},[36,48554,495],{"class":42},[36,48556,37907],{"class":105},[36,48558,37910],{"class":42},[36,48560,48561],{"class":38,"line":1215},[36,48562,659],{"emptyLinePlaceholder":658},[36,48564,48565],{"class":38,"line":1236},[36,48566,37919],{"class":3943},[36,48568,48569,48571,48573,48575,48577],{"class":38,"line":1245},[36,48570,2067],{"class":46},[36,48572,2070],{"class":112},[36,48574,6652],{"class":46},[36,48576,34819],{"class":105},[36,48578,888],{"class":42},[36,48580,48581],{"class":38,"line":1250},[36,48582,37936],{"class":3943},[36,48584,48585,48587,48589],{"class":38,"line":1265},[36,48586,34883],{"class":42},[36,48588,47],{"class":46},[36,48590,48109],{"class":42},[36,48592,48593],{"class":38,"line":1281},[36,48594,37949],{"class":3943},[36,48596,48597],{"class":38,"line":1297},[36,48598,37954],{"class":3943},[36,48600,48601,48603,48605],{"class":38,"line":1314},[36,48602,37959],{"class":42},[36,48604,37962],{"class":105},[36,48606,2005],{"class":42},[36,48608,48609],{"class":38,"line":1336},[36,48610,37969],{"class":3943},[36,48612,48613,48615,48617],{"class":38,"line":1356},[36,48614,37582],{"class":42},[36,48616,47],{"class":46},[36,48618,37978],{"class":42},[36,48620,48621],{"class":38,"line":1361},[36,48622,37983],{"class":3943},[36,48624,48625],{"class":38,"line":1407},[36,48626,37988],{"class":42},[36,48628,48629],{"class":38,"line":1423},[36,48630,659],{"emptyLinePlaceholder":658},[36,48632,48633],{"class":38,"line":1439},[36,48634,37997],{"class":3943},[36,48636,48637],{"class":38,"line":1444},[36,48638,38002],{"class":3943},[36,48640,48641,48643,48645,48647,48649,48651,48653],{"class":38,"line":1486},[36,48642,34831],{"class":42},[36,48644,47],{"class":46},[36,48646,34838],{"class":105},[36,48648,5428],{"class":46},[36,48650,34843],{"class":42},[36,48652,5425],{"class":46},[36,48654,37679],{"class":105},[36,48656,48657,48659,48661],{"class":38,"line":1499},[36,48658,34883],{"class":42},[36,48660,47],{"class":46},[36,48662,35875],{"class":42},[36,48664,48665],{"class":38,"line":1513},[36,48666,38031],{"class":3943},[36,48668,48669],{"class":38,"line":1518},[36,48670,38036],{"class":3943},[36,48672,48673,48675,48677,48679,48681,48683,48685,48687,48689,48691,48693,48695,48697,48699,48701,48703,48705,48707,48709,48711,48713,48715,48717],{"class":38,"line":1529},[36,48674,38041],{"class":42},[36,48676,47],{"class":46},[36,48678,4760],{"class":42},[36,48680,38048],{"class":105},[36,48682,4253],{"class":42},[36,48684,38053],{"class":105},[36,48686,4253],{"class":42},[36,48688,38058],{"class":105},[36,48690,4253],{"class":42},[36,48692,38063],{"class":105},[36,48694,4253],{"class":42},[36,48696,38068],{"class":105},[36,48698,4253],{"class":42},[36,48700,38073],{"class":105},[36,48702,4253],{"class":42},[36,48704,38078],{"class":105},[36,48706,4253],{"class":42},[36,48708,38083],{"class":105},[36,48710,4253],{"class":42},[36,48712,38088],{"class":105},[36,48714,4253],{"class":42},[36,48716,38093],{"class":105},[36,48718,36806],{"class":42},[36,48720,48721,48723],{"class":38,"line":1539},[36,48722,37738],{"class":46},[36,48724,36444],{"class":42},[36,48726,48727],{"class":38,"line":1544},[36,48728,38106],{"class":3943},[36,48730,48731,48733,48735,48737],{"class":38,"line":1555},[36,48732,1613],{"class":46},[36,48734,38113],{"class":42},[36,48736,1619],{"class":46},[36,48738,37757],{"class":42},[36,48740,48741,48743,48745],{"class":38,"line":1572},[36,48742,36193],{"class":42},[36,48744,47],{"class":46},[36,48746,36198],{"class":42},[36,48748,48749,48751,48753],{"class":38,"line":1592},[36,48750,36208],{"class":42},[36,48752,47],{"class":46},[36,48754,36213],{"class":42},[36,48756,48757],{"class":38,"line":1597},[36,48758,659],{"emptyLinePlaceholder":658},[36,48760,48761],{"class":38,"line":1610},[36,48762,38142],{"class":3943},[36,48764,48765],{"class":38,"line":1632},[36,48766,36435],{"class":42},[36,48768,48769],{"class":38,"line":1646},[36,48770,38151],{"class":3943},[36,48772,48773,48775,48777],{"class":38,"line":1651},[36,48774,36238],{"class":42},[36,48776,47],{"class":46},[36,48778,36243],{"class":42},[36,48780,48781],{"class":38,"line":1664},[36,48782,38164],{"class":3943},[36,48784,48785,48787,48789,48791,48793,48795,48797],{"class":38,"line":1669},[36,48786,36253],{"class":42},[36,48788,47],{"class":46},[36,48790,36258],{"class":42},[36,48792,36261],{"class":468},[36,48794,47],{"class":46},[36,48796,4092],{"class":112},[36,48798,922],{"class":42},[36,48800,48801],{"class":38,"line":1681},[36,48802,38185],{"class":3943},[36,48804,48805,48807,48809],{"class":38,"line":1694},[36,48806,38190],{"class":42},[36,48808,47],{"class":46},[36,48810,38195],{"class":42},[36,48812,48813,48815,48817],{"class":38,"line":1699},[36,48814,38200],{"class":42},[36,48816,47],{"class":46},[36,48818,38205],{"class":42},[36,48820,48821,48823,48825,48827,48829,48831,48833,48835],{"class":38,"line":1714},[36,48822,38210],{"class":112},[36,48824,495],{"class":42},[36,48826,38215],{"class":105},[36,48828,38218],{"class":42},[36,48830,38221],{"class":105},[36,48832,4253],{"class":42},[36,48834,38226],{"class":105},[36,48836,38229],{"class":42},[318,48838,48840],{"id":48839},"_24训练自己的数据集","2.4.训练自己的数据集",[19,48842,48843],{},"猫狗分类任务",[19,48845,48846],{},"划分数据集和验证集",[26,48848,48850],{"className":28,"code":48849,"language":30,"meta":31,"style":31},"# 创建脚本，用于划分数据集和验证集\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",[33,48851,48852,48857,48864,48869,48880,48887,48891,48901,48915,48924,48928,48933,48943,48963,48967,48972,48982,48993,49006,49010,49015,49024,49034,49045,49049,49054,49064,49068,49073,49078,49083,49088,49093,49097,49107,49134,49147,49159,49186,49191,49196,49210,49215,49227,49242,49257,49265,49269,49274,49280,49292,49305,49310,49315,49320,49370,49376,49380],{"__ignoreMap":31},[36,48853,48854],{"class":38,"line":39},[36,48855,48856],{"class":3943},"# 创建脚本，用于划分数据集和验证集\n",[36,48858,48859,48861],{"class":38,"line":53},[36,48860,611],{"class":46},[36,48862,48863],{"class":42}," os\n",[36,48865,48866],{"class":38,"line":196},[36,48867,48868],{"class":3943},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[36,48870,48871,48873,48876,48878],{"class":38,"line":642},[36,48872,645],{"class":46},[36,48874,48875],{"class":42}," shutil ",[36,48877,611],{"class":46},[36,48879,35410],{"class":42},[36,48881,48882,48884],{"class":38,"line":655},[36,48883,611],{"class":46},[36,48885,48886],{"class":42}," random\n",[36,48888,48889],{"class":38,"line":662},[36,48890,659],{"emptyLinePlaceholder":658},[36,48892,48893,48895,48898],{"class":38,"line":667},[36,48894,1820],{"class":46},[36,48896,48897],{"class":101}," mkfile",[36,48899,48900],{"class":42},"(file):\n",[36,48902,48903,48905,48907,48910,48913],{"class":38,"line":679},[36,48904,3752],{"class":46},[36,48906,42489],{"class":46},[36,48908,48909],{"class":42}," os.path.exists(",[36,48911,48912],{"class":468},"file",[36,48914,848],{"class":42},[36,48916,48917,48920,48922],{"class":38,"line":685},[36,48918,48919],{"class":42},"        os.makedirs(",[36,48921,48912],{"class":468},[36,48923,922],{"class":42},[36,48925,48926],{"class":38,"line":691},[36,48927,659],{"emptyLinePlaceholder":658},[36,48929,48930],{"class":38,"line":696},[36,48931,48932],{"class":3943},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[36,48934,48935,48938,48940],{"class":38,"line":702},[36,48936,48937],{"class":42},"file_path",[36,48939,47],{"class":46},[36,48941,48942],{"class":105},"'data_cat_dog'\n",[36,48944,48945,48948,48950,48953,48955,48958,48960],{"class":38,"line":708},[36,48946,48947],{"class":42},"flower_class",[36,48949,47],{"class":46},[36,48951,48952],{"class":42},"[cla ",[36,48954,3120],{"class":46},[36,48956,48957],{"class":42}," cla ",[36,48959,1619],{"class":46},[36,48961,48962],{"class":42}," os.listdir(file_path)]\n",[36,48964,48965],{"class":38,"line":713},[36,48966,659],{"emptyLinePlaceholder":658},[36,48968,48969],{"class":38,"line":719},[36,48970,48971],{"class":3943},"# 创建训练集train文件夹\n",[36,48973,48974,48977,48980],{"class":38,"line":725},[36,48975,48976],{"class":42},"mkfile(",[36,48978,48979],{"class":105},"'data\u002Ftrain'",[36,48981,922],{"class":42},[36,48983,48984,48986,48988,48990],{"class":38,"line":731},[36,48985,3120],{"class":46},[36,48987,48957],{"class":42},[36,48989,1619],{"class":46},[36,48991,48992],{"class":42}," flower_class:\n",[36,48994,48995,48998,49001,49003],{"class":38,"line":736},[36,48996,48997],{"class":42},"    mkfile(",[36,48999,49000],{"class":105},"'data\u002Ftrain\u002F'",[36,49002,4354],{"class":46},[36,49004,49005],{"class":42},"cla)\n",[36,49007,49008],{"class":38,"line":742},[36,49009,659],{"emptyLinePlaceholder":658},[36,49011,49012],{"class":38,"line":748},[36,49013,49014],{"class":3943},"# 创建验证集val文件夹\n",[36,49016,49017,49019,49022],{"class":38,"line":754},[36,49018,48976],{"class":42},[36,49020,49021],{"class":105},"'data\u002Ftest'",[36,49023,922],{"class":42},[36,49025,49026,49028,49030,49032],{"class":38,"line":760},[36,49027,3120],{"class":46},[36,49029,48957],{"class":42},[36,49031,1619],{"class":46},[36,49033,48992],{"class":42},[36,49035,49036,49038,49041,49043],{"class":38,"line":766},[36,49037,48997],{"class":42},[36,49039,49040],{"class":105},"'data\u002Ftest\u002F'",[36,49042,4354],{"class":46},[36,49044,49005],{"class":42},[36,49046,49047],{"class":38,"line":772},[36,49048,659],{"emptyLinePlaceholder":658},[36,49050,49051],{"class":38,"line":778},[36,49052,49053],{"class":3943},"# 划分比例，训练集：测试集=9：1\n",[36,49055,49056,49059,49061],{"class":38,"line":783},[36,49057,49058],{"class":42},"split_rate",[36,49060,47],{"class":46},[36,49062,49063],{"class":112},"0.1\n",[36,49065,49066],{"class":38,"line":789},[36,49067,659],{"emptyLinePlaceholder":658},[36,49069,49070],{"class":38,"line":795},[36,49071,49072],{"class":3943},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[36,49074,49075],{"class":38,"line":801},[36,49076,49077],{"class":3943},"# cla_path：当前类别的原始图片路径\n",[36,49079,49080],{"class":38,"line":807},[36,49081,49082],{"class":3943},"# images：当前类别下所有图片的文件名列表\n",[36,49084,49085],{"class":38,"line":813},[36,49086,49087],{"class":3943},"# num：该类别图片总数\n",[36,49089,49090],{"class":38,"line":819},[36,49091,49092],{"class":3943},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[36,49094,49095],{"class":38,"line":824},[36,49096,659],{"emptyLinePlaceholder":658},[36,49098,49099,49101,49103,49105],{"class":38,"line":829},[36,49100,3120],{"class":46},[36,49102,48957],{"class":42},[36,49104,1619],{"class":46},[36,49106,48992],{"class":42},[36,49108,49109,49112,49114,49117,49119,49122,49125,49127,49129,49131],{"class":38,"line":851},[36,49110,49111],{"class":42},"    cla_path ",[36,49113,47],{"class":46},[36,49115,49116],{"class":42}," file_path ",[36,49118,4354],{"class":46},[36,49120,49121],{"class":105}," '\u002F'",[36,49123,49124],{"class":46}," +",[36,49126,48957],{"class":42},[36,49128,4354],{"class":46},[36,49130,49121],{"class":105},[36,49132,49133],{"class":3943},"  # 某一类别的子目录\n",[36,49135,49136,49139,49141,49144],{"class":38,"line":868},[36,49137,49138],{"class":42},"    images ",[36,49140,47],{"class":46},[36,49142,49143],{"class":42}," os.listdir(cla_path)  ",[36,49145,49146],{"class":3943},"# iamges 列表存储了该目录下所有图像的名称\n",[36,49148,49149,49152,49154,49156],{"class":38,"line":873},[36,49150,49151],{"class":42},"    num ",[36,49153,47],{"class":46},[36,49155,11022],{"class":112},[36,49157,49158],{"class":42},"(images)\n",[36,49160,49161,49164,49166,49169,49171,49173,49175,49178,49180,49183],{"class":38,"line":891},[36,49162,49163],{"class":42},"    eval_index ",[36,49165,47],{"class":46},[36,49167,49168],{"class":42}," random.sample(images, ",[36,49170,4366],{"class":468},[36,49172,47],{"class":46},[36,49174,1378],{"class":112},[36,49176,49177],{"class":42},"(num ",[36,49179,1372],{"class":46},[36,49181,49182],{"class":42}," split_rate))  ",[36,49184,49185],{"class":3943},"# 从images列表中随机抽取 k 个图像名称\n",[36,49187,49188],{"class":38,"line":906},[36,49189,49190],{"class":3943},"    # 遍历该类别下的所有图片\n",[36,49192,49193],{"class":38,"line":925},[36,49194,49195],{"class":3943},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[36,49197,49198,49200,49203,49205,49207],{"class":38,"line":943},[36,49199,1909],{"class":46},[36,49201,49202],{"class":42}," index, image ",[36,49204,1619],{"class":46},[36,49206,35195],{"class":112},[36,49208,49209],{"class":42},"(images):\n",[36,49211,49212],{"class":38,"line":948},[36,49213,49214],{"class":3943},"        # eval_index 中保存验证集val的图像名称\n",[36,49216,49217,49219,49222,49224],{"class":38,"line":971},[36,49218,995],{"class":46},[36,49220,49221],{"class":42}," image ",[36,49223,1619],{"class":46},[36,49225,49226],{"class":42}," eval_index:\n",[36,49228,49229,49232,49234,49237,49239],{"class":38,"line":992},[36,49230,49231],{"class":42},"            image_path ",[36,49233,47],{"class":46},[36,49235,49236],{"class":42}," cla_path ",[36,49238,4354],{"class":46},[36,49240,49241],{"class":42}," image\n",[36,49243,49244,49247,49249,49252,49254],{"class":38,"line":1020},[36,49245,49246],{"class":42},"            new_path ",[36,49248,47],{"class":46},[36,49250,49251],{"class":105}," 'data\u002Ftest\u002F'",[36,49253,49124],{"class":46},[36,49255,49256],{"class":42}," cla\n",[36,49258,49259,49262],{"class":38,"line":1036},[36,49260,49261],{"class":42},"            copy(image_path, new_path)  ",[36,49263,49264],{"class":3943},"# 将选中的图像复制到新路径\n",[36,49266,49267],{"class":38,"line":1041},[36,49268,659],{"emptyLinePlaceholder":658},[36,49270,49271],{"class":38,"line":1052},[36,49272,49273],{"class":3943},"        # 其余的图像保存在训练集train中\n",[36,49275,49276,49278],{"class":38,"line":1065},[36,49277,6244],{"class":46},[36,49279,888],{"class":42},[36,49281,49282,49284,49286,49288,49290],{"class":38,"line":1077},[36,49283,49231],{"class":42},[36,49285,47],{"class":46},[36,49287,49236],{"class":42},[36,49289,4354],{"class":46},[36,49291,49241],{"class":42},[36,49293,49294,49296,49298,49301,49303],{"class":38,"line":1082},[36,49295,49246],{"class":42},[36,49297,47],{"class":46},[36,49299,49300],{"class":105}," 'data\u002Ftrain\u002F'",[36,49302,49124],{"class":46},[36,49304,49256],{"class":42},[36,49306,49307],{"class":38,"line":1125},[36,49308,49309],{"class":42},"            copy(image_path, new_path)\n",[36,49311,49312],{"class":38,"line":1164},[36,49313,49314],{"class":3943},"            # 打印进度条信息\n",[36,49316,49317],{"class":38,"line":1169},[36,49318,49319],{"class":3943},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[36,49321,49322,49324,49326,49328,49331,49333,49335,49338,49340,49342,49344,49347,49350,49352,49354,49357,49360,49362,49364,49367],{"class":38,"line":1180},[36,49323,1960],{"class":112},[36,49325,495],{"class":42},[36,49327,4126],{"class":105},[36,49329,49330],{"class":112},"\\r",[36,49332,4760],{"class":105},[36,49334,3649],{"class":112},[36,49336,49337],{"class":105},"] processing [",[36,49339,3649],{"class":112},[36,49341,4455],{"class":105},[36,49343,3649],{"class":112},[36,49345,49346],{"class":105},"]\"",[36,49348,49349],{"class":42},".format(cla, index ",[36,49351,4354],{"class":46},[36,49353,28732],{"class":112},[36,49355,49356],{"class":42},", num), ",[36,49358,49359],{"class":468},"end",[36,49361,47],{"class":46},[36,49363,11343],{"class":105},[36,49365,49366],{"class":42},")  ",[36,49368,49369],{"class":3943},"# processing bar\n",[36,49371,49372,49374],{"class":38,"line":1198},[36,49373,1867],{"class":112},[36,49375,903],{"class":42},[36,49377,49378],{"class":38,"line":1215},[36,49379,659],{"emptyLinePlaceholder":658},[36,49381,49382,49384,49386,49389],{"class":38,"line":1236},[36,49383,3486],{"class":112},[36,49385,495],{"class":42},[36,49387,49388],{"class":105},"\"processing done!\"",[36,49390,922],{"class":42},[19,49392,49393],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[25619,49395,49397],{"id":49396},"_242模型代码","2.4.2.模型代码",[19,49399,49400],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[26,49402,49404],{"className":28,"code":49403,"language":30,"meta":31,"style":31},"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",[33,49405,49406,49412,49422,49432,49436,49452,49460,49474,49484,49488,49518,49522,49556,49602,49606,49640,49686,49690,49694,49728,49758,49762,49770,49784,49806,49828,49846,49850,49864,49868,49872,49888,49892,49900,49914,49924,49968,49972,50000,50004,50014,50042,50046,50082,50086,50114,50118,50128,50160,50192,50220,50224,50234,50266,50298,50330,50362,50394,50422,50426,50436,50468,50500,50512,50516,50528,50532,50536,50548,50556,50576,50580,50584,50588,50592,50596,50600,50614,50622,50630,50642,50656,50664,50668,50676,50686,50696,50706,50716,50726,50732,50736,50740,50752,50772,50780],{"__ignoreMap":31},[36,49407,49408,49410],{"class":38,"line":39},[36,49409,611],{"class":46},[36,49411,34000],{"class":42},[36,49413,49414,49416,49418,49420],{"class":38,"line":53},[36,49415,645],{"class":46},[36,49417,34342],{"class":42},[36,49419,611],{"class":46},[36,49421,34347],{"class":42},[36,49423,49424,49426,49428,49430],{"class":38,"line":196},[36,49425,645],{"class":46},[36,49427,34359],{"class":42},[36,49429,611],{"class":46},[36,49431,34364],{"class":42},[36,49433,49434],{"class":38,"line":642},[36,49435,659],{"emptyLinePlaceholder":658},[36,49437,49438,49440,49442,49444,49446,49448,49450],{"class":38,"line":655},[36,49439,832],{"class":46},[36,49441,45051],{"class":101},[36,49443,495],{"class":42},[36,49445,34380],{"class":101},[36,49447,842],{"class":42},[36,49449,34385],{"class":101},[36,49451,848],{"class":42},[36,49453,49454,49456,49458],{"class":38,"line":662},[36,49455,876],{"class":46},[36,49457,879],{"class":112},[36,49459,45070],{"class":42},[36,49461,49462,49464,49466,49468,49470,49472],{"class":38,"line":667},[36,49463,894],{"class":112},[36,49465,45077],{"class":42},[36,49467,457],{"class":112},[36,49469,34423],{"class":42},[36,49471,900],{"class":112},[36,49473,903],{"class":42},[36,49475,49476,49478,49480,49482],{"class":38,"line":679},[36,49477,909],{"class":112},[36,49479,38331],{"class":42},[36,49481,47],{"class":46},[36,49483,38336],{"class":42},[36,49485,49486],{"class":38,"line":685},[36,49487,45100],{"class":3943},[36,49489,49490,49492,49494,49496,49498,49500,49502,49504,49506,49508,49510,49512,49514,49516],{"class":38,"line":691},[36,49491,909],{"class":112},[36,49493,45107],{"class":42},[36,49495,47],{"class":46},[36,49497,34448],{"class":42},[36,49499,34451],{"class":468},[36,49501,47],{"class":46},[36,49503,45118],{"class":42},[36,49505,34460],{"class":468},[36,49507,47],{"class":46},[36,49509,45125],{"class":42},[36,49511,34469],{"class":468},[36,49513,47],{"class":46},[36,49515,4092],{"class":112},[36,49517,922],{"class":42},[36,49519,49520],{"class":38,"line":696},[36,49521,45138],{"class":3943},[36,49523,49524,49526,49528,49530,49532,49534,49536,49538,49540,49542,49544,49546,49548,49550,49552,49554],{"class":38,"line":702},[36,49525,909],{"class":112},[36,49527,45145],{"class":42},[36,49529,47],{"class":46},[36,49531,34448],{"class":42},[36,49533,34451],{"class":468},[36,49535,47],{"class":46},[36,49537,45118],{"class":42},[36,49539,34460],{"class":468},[36,49541,47],{"class":46},[36,49543,45162],{"class":42},[36,49545,1859],{"class":112},[36,49547,45167],{"class":42},[36,49549,34469],{"class":468},[36,49551,47],{"class":46},[36,49553,4092],{"class":112},[36,49555,922],{"class":42},[36,49557,49558,49560,49562,49564,49566,49568,49570,49572,49574,49576,49578,49580,49582,49584,49586,49588,49590,49592,49594,49596,49598,49600],{"class":38,"line":708},[36,49559,909],{"class":112},[36,49561,45182],{"class":42},[36,49563,47],{"class":46},[36,49565,34448],{"class":42},[36,49567,34451],{"class":468},[36,49569,47],{"class":46},[36,49571,45162],{"class":42},[36,49573,1859],{"class":112},[36,49575,45167],{"class":42},[36,49577,34460],{"class":468},[36,49579,47],{"class":46},[36,49581,45162],{"class":42},[36,49583,4092],{"class":112},[36,49585,45167],{"class":42},[36,49587,34469],{"class":468},[36,49589,47],{"class":46},[36,49591,1982],{"class":112},[36,49593,4253],{"class":42},[36,49595,34478],{"class":468},[36,49597,47],{"class":46},[36,49599,4092],{"class":112},[36,49601,922],{"class":42},[36,49603,49604],{"class":38,"line":713},[36,49605,45227],{"class":3943},[36,49607,49608,49610,49612,49614,49616,49618,49620,49622,49624,49626,49628,49630,49632,49634,49636,49638],{"class":38,"line":719},[36,49609,909],{"class":112},[36,49611,45234],{"class":42},[36,49613,47],{"class":46},[36,49615,34448],{"class":42},[36,49617,34451],{"class":468},[36,49619,47],{"class":46},[36,49621,45118],{"class":42},[36,49623,34460],{"class":468},[36,49625,47],{"class":46},[36,49627,45251],{"class":42},[36,49629,1859],{"class":112},[36,49631,45167],{"class":42},[36,49633,34469],{"class":468},[36,49635,47],{"class":46},[36,49637,4092],{"class":112},[36,49639,922],{"class":42},[36,49641,49642,49644,49646,49648,49650,49652,49654,49656,49658,49660,49662,49664,49666,49668,49670,49672,49674,49676,49678,49680,49682,49684],{"class":38,"line":725},[36,49643,909],{"class":112},[36,49645,45270],{"class":42},[36,49647,47],{"class":46},[36,49649,34448],{"class":42},[36,49651,34451],{"class":468},[36,49653,47],{"class":46},[36,49655,45251],{"class":42},[36,49657,1859],{"class":112},[36,49659,45167],{"class":42},[36,49661,34460],{"class":468},[36,49663,47],{"class":46},[36,49665,45251],{"class":42},[36,49667,4092],{"class":112},[36,49669,45167],{"class":42},[36,49671,34469],{"class":468},[36,49673,47],{"class":46},[36,49675,4194],{"class":112},[36,49677,4253],{"class":42},[36,49679,34478],{"class":468},[36,49681,47],{"class":46},[36,49683,498],{"class":112},[36,49685,922],{"class":42},[36,49687,49688],{"class":38,"line":731},[36,49689,45315],{"class":3943},[36,49691,49692],{"class":38,"line":736},[36,49693,45320],{"class":3943},[36,49695,49696,49698,49700,49702,49704,49706,49708,49710,49712,49714,49716,49718,49720,49722,49724,49726],{"class":38,"line":742},[36,49697,909],{"class":112},[36,49699,45327],{"class":42},[36,49701,47],{"class":46},[36,49703,38389],{"class":42},[36,49705,34469],{"class":468},[36,49707,47],{"class":46},[36,49709,1982],{"class":112},[36,49711,4253],{"class":42},[36,49713,34524],{"class":468},[36,49715,47],{"class":46},[36,49717,4092],{"class":112},[36,49719,4253],{"class":42},[36,49721,34478],{"class":468},[36,49723,47],{"class":46},[36,49725,4092],{"class":112},[36,49727,922],{"class":42},[36,49729,49730,49732,49734,49736,49738,49740,49742,49744,49746,49748,49750,49752,49754,49756],{"class":38,"line":748},[36,49731,909],{"class":112},[36,49733,45362],{"class":42},[36,49735,47],{"class":46},[36,49737,34448],{"class":42},[36,49739,34451],{"class":468},[36,49741,47],{"class":46},[36,49743,45118],{"class":42},[36,49745,34460],{"class":468},[36,49747,47],{"class":46},[36,49749,45379],{"class":42},[36,49751,34469],{"class":468},[36,49753,47],{"class":46},[36,49755,4092],{"class":112},[36,49757,922],{"class":42},[36,49759,49760],{"class":38,"line":754},[36,49761,659],{"emptyLinePlaceholder":658},[36,49763,49764,49766,49768],{"class":38,"line":760},[36,49765,876],{"class":46},[36,49767,34688],{"class":101},[36,49769,34691],{"class":42},[36,49771,49772,49774,49776,49778,49780,49782],{"class":38,"line":766},[36,49773,45404],{"class":42},[36,49775,47],{"class":46},[36,49777,457],{"class":112},[36,49779,38744],{"class":42},[36,49781,457],{"class":112},[36,49783,45415],{"class":42},[36,49785,49786,49788,49790,49792,49794,49796,49798,49800,49802,49804],{"class":38,"line":772},[36,49787,10776],{"class":42},[36,49789,47],{"class":46},[36,49791,457],{"class":112},[36,49793,38744],{"class":42},[36,49795,457],{"class":112},[36,49797,45430],{"class":42},[36,49799,457],{"class":112},[36,49801,38744],{"class":42},[36,49803,457],{"class":112},[36,49805,45439],{"class":42},[36,49807,49808,49810,49812,49814,49816,49818,49820,49822,49824,49826],{"class":38,"line":778},[36,49809,45444],{"class":42},[36,49811,47],{"class":46},[36,49813,457],{"class":112},[36,49815,38744],{"class":42},[36,49817,457],{"class":112},[36,49819,45455],{"class":42},[36,49821,457],{"class":112},[36,49823,38744],{"class":42},[36,49825,457],{"class":112},[36,49827,45464],{"class":42},[36,49829,49830,49832,49834,49836,49838,49840,49842,49844],{"class":38,"line":783},[36,49831,45469],{"class":42},[36,49833,47],{"class":46},[36,49835,457],{"class":112},[36,49837,38744],{"class":42},[36,49839,457],{"class":112},[36,49841,45480],{"class":42},[36,49843,457],{"class":112},[36,49845,45485],{"class":42},[36,49847,49848],{"class":38,"line":789},[36,49849,45490],{"class":3943},[36,49851,49852,49854,49856,49858,49860,49862],{"class":38,"line":795},[36,49853,1239],{"class":46},[36,49855,45497],{"class":42},[36,49857,36261],{"class":468},[36,49859,47],{"class":46},[36,49861,4092],{"class":112},[36,49863,922],{"class":42},[36,49865,49866],{"class":38,"line":801},[36,49867,659],{"emptyLinePlaceholder":658},[36,49869,49870],{"class":38,"line":807},[36,49871,45518],{"class":3943},[36,49873,49874,49876,49878,49880,49882,49884,49886],{"class":38,"line":813},[36,49875,832],{"class":46},[36,49877,45525],{"class":101},[36,49879,495],{"class":42},[36,49881,34380],{"class":101},[36,49883,842],{"class":42},[36,49885,34385],{"class":101},[36,49887,848],{"class":42},[36,49889,49890],{"class":38,"line":819},[36,49891,45540],{"class":3943},[36,49893,49894,49896,49898],{"class":38,"line":824},[36,49895,876],{"class":46},[36,49897,879],{"class":112},[36,49899,45549],{"class":42},[36,49901,49902,49904,49906,49908,49910,49912],{"class":38,"line":829},[36,49903,894],{"class":112},[36,49905,45556],{"class":42},[36,49907,457],{"class":112},[36,49909,34423],{"class":42},[36,49911,900],{"class":112},[36,49913,903],{"class":42},[36,49915,49916,49918,49920,49922],{"class":38,"line":851},[36,49917,909],{"class":112},[36,49919,45571],{"class":42},[36,49921,47],{"class":46},[36,49923,41569],{"class":42},[36,49925,49926,49928,49930,49932,49934,49936,49938,49940,49942,49944,49946,49948,49950,49952,49954,49956,49958,49960,49962,49964,49966],{"class":38,"line":868},[36,49927,41574],{"class":42},[36,49929,34451],{"class":468},[36,49931,47],{"class":46},[36,49933,1982],{"class":112},[36,49935,4253],{"class":42},[36,49937,34460],{"class":468},[36,49939,47],{"class":46},[36,49941,4078],{"class":112},[36,49943,4253],{"class":42},[36,49945,34469],{"class":468},[36,49947,47],{"class":46},[36,49949,4244],{"class":112},[36,49951,4253],{"class":42},[36,49953,34524],{"class":468},[36,49955,47],{"class":46},[36,49957,498],{"class":112},[36,49959,4253],{"class":42},[36,49961,34478],{"class":468},[36,49963,47],{"class":46},[36,49965,1982],{"class":112},[36,49967,41607],{"class":42},[36,49969,49970],{"class":38,"line":873},[36,49971,41612],{"class":42},[36,49973,49974,49976,49978,49980,49982,49984,49986,49988,49990,49992,49994,49996,49998],{"class":38,"line":891},[36,49975,41657],{"class":42},[36,49977,34469],{"class":468},[36,49979,47],{"class":46},[36,49981,1982],{"class":112},[36,49983,4253],{"class":42},[36,49985,34524],{"class":468},[36,49987,47],{"class":46},[36,49989,498],{"class":112},[36,49991,4253],{"class":42},[36,49993,34478],{"class":468},[36,49995,47],{"class":46},[36,49997,4092],{"class":112},[36,49999,922],{"class":42},[36,50001,50002],{"class":38,"line":906},[36,50003,41686],{"class":42},[36,50005,50006,50008,50010,50012],{"class":38,"line":925},[36,50007,909],{"class":112},[36,50009,45662],{"class":42},[36,50011,47],{"class":46},[36,50013,41569],{"class":42},[36,50015,50016,50018,50020,50022,50024,50026,50028,50030,50032,50034,50036,50038,50040],{"class":38,"line":943},[36,50017,41574],{"class":42},[36,50019,34451],{"class":468},[36,50021,47],{"class":46},[36,50023,4078],{"class":112},[36,50025,4253],{"class":42},[36,50027,34460],{"class":468},[36,50029,47],{"class":46},[36,50031,4078],{"class":112},[36,50033,4253],{"class":42},[36,50035,34469],{"class":468},[36,50037,47],{"class":46},[36,50039,4092],{"class":112},[36,50041,41607],{"class":42},[36,50043,50044],{"class":38,"line":948},[36,50045,41612],{"class":42},[36,50047,50048,50050,50052,50054,50056,50058,50060,50062,50064,50066,50068,50070,50072,50074,50076,50078,50080],{"class":38,"line":971},[36,50049,41574],{"class":42},[36,50051,34451],{"class":468},[36,50053,47],{"class":46},[36,50055,4078],{"class":112},[36,50057,4253],{"class":42},[36,50059,34460],{"class":468},[36,50061,47],{"class":46},[36,50063,45717],{"class":112},[36,50065,4253],{"class":42},[36,50067,34469],{"class":468},[36,50069,47],{"class":46},[36,50071,1982],{"class":112},[36,50073,4253],{"class":42},[36,50075,34478],{"class":468},[36,50077,47],{"class":46},[36,50079,4092],{"class":112},[36,50081,41607],{"class":42},[36,50083,50084],{"class":38,"line":992},[36,50085,41612],{"class":42},[36,50087,50088,50090,50092,50094,50096,50098,50100,50102,50104,50106,50108,50110,50112],{"class":38,"line":1020},[36,50089,41657],{"class":42},[36,50091,34469],{"class":468},[36,50093,47],{"class":46},[36,50095,1982],{"class":112},[36,50097,4253],{"class":42},[36,50099,34524],{"class":468},[36,50101,47],{"class":46},[36,50103,498],{"class":112},[36,50105,4253],{"class":42},[36,50107,34478],{"class":468},[36,50109,47],{"class":46},[36,50111,4092],{"class":112},[36,50113,922],{"class":42},[36,50115,50116],{"class":38,"line":1036},[36,50117,41686],{"class":42},[36,50119,50120,50122,50124,50126],{"class":38,"line":1041},[36,50121,909],{"class":112},[36,50123,45778],{"class":42},[36,50125,47],{"class":46},[36,50127,41569],{"class":42},[36,50129,50130,50132,50134,50136,50138,50140,50142,50144,50146,50148,50150,50152,50154,50156,50158],{"class":38,"line":1052},[36,50131,45787],{"class":42},[36,50133,45717],{"class":112},[36,50135,4253],{"class":42},[36,50137,4078],{"class":112},[36,50139,45796],{"class":42},[36,50141,4084],{"class":112},[36,50143,4253],{"class":42},[36,50145,35656],{"class":112},[36,50147,45805],{"class":42},[36,50149,4472],{"class":112},[36,50151,4253],{"class":42},[36,50153,4072],{"class":112},[36,50155,45814],{"class":42},[36,50157,4072],{"class":112},[36,50159,41607],{"class":42},[36,50161,50162,50164,50166,50168,50170,50172,50174,50176,50178,50180,50182,50184,50186,50188,50190],{"class":38,"line":1065},[36,50163,45787],{"class":42},[36,50165,38430],{"class":112},[36,50167,4253],{"class":42},[36,50169,35656],{"class":112},[36,50171,45796],{"class":42},[36,50173,35656],{"class":112},[36,50175,4253],{"class":42},[36,50177,45717],{"class":112},[36,50179,45805],{"class":42},[36,50181,4072],{"class":112},[36,50183,4253],{"class":42},[36,50185,4084],{"class":112},[36,50187,45814],{"class":42},[36,50189,4078],{"class":112},[36,50191,41607],{"class":42},[36,50193,50194,50196,50198,50200,50202,50204,50206,50208,50210,50212,50214,50216,50218],{"class":38,"line":1077},[36,50195,41657],{"class":42},[36,50197,34469],{"class":468},[36,50199,47],{"class":46},[36,50201,1982],{"class":112},[36,50203,4253],{"class":42},[36,50205,34524],{"class":468},[36,50207,47],{"class":46},[36,50209,498],{"class":112},[36,50211,4253],{"class":42},[36,50213,34478],{"class":468},[36,50215,47],{"class":46},[36,50217,4092],{"class":112},[36,50219,922],{"class":42},[36,50221,50222],{"class":38,"line":1082},[36,50223,41686],{"class":42},[36,50225,50226,50228,50230,50232],{"class":38,"line":1125},[36,50227,909],{"class":112},[36,50229,45889],{"class":42},[36,50231,47],{"class":46},[36,50233,41569],{"class":42},[36,50235,50236,50238,50240,50242,50244,50246,50248,50250,50252,50254,50256,50258,50260,50262,50264],{"class":38,"line":1164},[36,50237,45787],{"class":42},[36,50239,45900],{"class":112},[36,50241,4253],{"class":42},[36,50243,45717],{"class":112},[36,50245,45796],{"class":42},[36,50247,4084],{"class":112},[36,50249,4253],{"class":42},[36,50251,45913],{"class":112},[36,50253,45805],{"class":42},[36,50255,4472],{"class":112},[36,50257,4253],{"class":42},[36,50259,4478],{"class":112},[36,50261,45814],{"class":42},[36,50263,4078],{"class":112},[36,50265,41607],{"class":42},[36,50267,50268,50270,50272,50274,50276,50278,50280,50282,50284,50286,50288,50290,50292,50294,50296],{"class":38,"line":1169},[36,50269,45787],{"class":42},[36,50271,42017],{"class":112},[36,50273,4253],{"class":42},[36,50275,24670],{"class":112},[36,50277,45796],{"class":42},[36,50279,4489],{"class":112},[36,50281,4253],{"class":42},[36,50283,35090],{"class":112},[36,50285,45805],{"class":42},[36,50287,4670],{"class":112},[36,50289,4253],{"class":42},[36,50291,4078],{"class":112},[36,50293,45814],{"class":42},[36,50295,4078],{"class":112},[36,50297,41607],{"class":42},[36,50299,50300,50302,50304,50306,50308,50310,50312,50314,50316,50318,50320,50322,50324,50326,50328],{"class":38,"line":1180},[36,50301,45787],{"class":42},[36,50303,42017],{"class":112},[36,50305,4253],{"class":42},[36,50307,35656],{"class":112},[36,50309,45796],{"class":42},[36,50311,35656],{"class":112},[36,50313,4253],{"class":42},[36,50315,38430],{"class":112},[36,50317,45805],{"class":42},[36,50319,4670],{"class":112},[36,50321,4253],{"class":42},[36,50323,4078],{"class":112},[36,50325,45814],{"class":42},[36,50327,4078],{"class":112},[36,50329,41607],{"class":42},[36,50331,50332,50334,50336,50338,50340,50342,50344,50346,50348,50350,50352,50354,50356,50358,50360],{"class":38,"line":1198},[36,50333,45787],{"class":42},[36,50335,42017],{"class":112},[36,50337,4253],{"class":42},[36,50339,4489],{"class":112},[36,50341,45796],{"class":42},[36,50343,35656],{"class":112},[36,50345,4253],{"class":42},[36,50347,46010],{"class":112},[36,50349,45805],{"class":42},[36,50351,4072],{"class":112},[36,50353,4253],{"class":42},[36,50355,4078],{"class":112},[36,50357,45814],{"class":42},[36,50359,4078],{"class":112},[36,50361,41607],{"class":42},[36,50363,50364,50366,50368,50370,50372,50374,50376,50378,50380,50382,50384,50386,50388,50390,50392],{"class":38,"line":1215},[36,50365,45787],{"class":42},[36,50367,46031],{"class":112},[36,50369,4253],{"class":42},[36,50371,38430],{"class":112},[36,50373,45796],{"class":42},[36,50375,24670],{"class":112},[36,50377,4253],{"class":42},[36,50379,46044],{"class":112},[36,50381,45805],{"class":42},[36,50383,4072],{"class":112},[36,50385,4253],{"class":42},[36,50387,35656],{"class":112},[36,50389,45814],{"class":42},[36,50391,35656],{"class":112},[36,50393,41607],{"class":42},[36,50395,50396,50398,50400,50402,50404,50406,50408,50410,50412,50414,50416,50418,50420],{"class":38,"line":1236},[36,50397,41657],{"class":42},[36,50399,34469],{"class":468},[36,50401,47],{"class":46},[36,50403,1982],{"class":112},[36,50405,4253],{"class":42},[36,50407,34524],{"class":468},[36,50409,47],{"class":46},[36,50411,498],{"class":112},[36,50413,4253],{"class":42},[36,50415,34478],{"class":468},[36,50417,47],{"class":46},[36,50419,4092],{"class":112},[36,50421,922],{"class":42},[36,50423,50424],{"class":38,"line":1245},[36,50425,41686],{"class":42},[36,50427,50428,50430,50432,50434],{"class":38,"line":1250},[36,50429,909],{"class":112},[36,50431,46097],{"class":42},[36,50433,47],{"class":46},[36,50435,41569],{"class":42},[36,50437,50438,50440,50442,50444,50446,50448,50450,50452,50454,50456,50458,50460,50462,50464,50466],{"class":38,"line":1265},[36,50439,45787],{"class":42},[36,50441,46108],{"class":112},[36,50443,4253],{"class":42},[36,50445,38430],{"class":112},[36,50447,45796],{"class":42},[36,50449,24670],{"class":112},[36,50451,4253],{"class":42},[36,50453,46044],{"class":112},[36,50455,45805],{"class":42},[36,50457,4072],{"class":112},[36,50459,4253],{"class":42},[36,50461,35656],{"class":112},[36,50463,45814],{"class":42},[36,50465,35656],{"class":112},[36,50467,41607],{"class":42},[36,50469,50470,50472,50474,50476,50478,50480,50482,50484,50486,50488,50490,50492,50494,50496,50498],{"class":38,"line":1281},[36,50471,45787],{"class":42},[36,50473,46108],{"class":112},[36,50475,4253],{"class":42},[36,50477,38500],{"class":112},[36,50479,45796],{"class":42},[36,50481,45717],{"class":112},[36,50483,4253],{"class":42},[36,50485,38500],{"class":112},[36,50487,45805],{"class":42},[36,50489,4478],{"class":112},[36,50491,4253],{"class":42},[36,50493,35656],{"class":112},[36,50495,45814],{"class":42},[36,50497,35656],{"class":112},[36,50499,41607],{"class":42},[36,50501,50502,50504,50506,50508,50510],{"class":38,"line":1297},[36,50503,46171],{"class":42},[36,50505,4092],{"class":112},[36,50507,4253],{"class":42},[36,50509,4092],{"class":112},[36,50511,46180],{"class":42},[36,50513,50514],{"class":38,"line":1314},[36,50515,42350],{"class":42},[36,50517,50518,50520,50522,50524,50526],{"class":38,"line":1336},[36,50519,42355],{"class":42},[36,50521,46191],{"class":112},[36,50523,4253],{"class":42},[36,50525,498],{"class":112},[36,50527,922],{"class":42},[36,50529,50530],{"class":38,"line":1356},[36,50531,41686],{"class":42},[36,50533,50534],{"class":38,"line":1361},[36,50535,46206],{"class":3943},[36,50537,50538,50540,50542,50544,50546],{"class":38,"line":1407},[36,50539,1613],{"class":46},[36,50541,42428],{"class":42},[36,50543,1619],{"class":46},[36,50545,406],{"class":112},[36,50547,42435],{"class":42},[36,50549,50550,50552,50554],{"class":38,"line":1423},[36,50551,8338],{"class":46},[36,50553,42447],{"class":112},[36,50555,42450],{"class":42},[36,50557,50558,50560,50562,50564,50566,50568,50570,50572,50574],{"class":38,"line":1439},[36,50559,42460],{"class":42},[36,50561,46233],{"class":468},[36,50563,47],{"class":46},[36,50565,46238],{"class":105},[36,50567,4253],{"class":42},[36,50569,42463],{"class":468},[36,50571,47],{"class":46},[36,50573,42468],{"class":105},[36,50575,922],{"class":42},[36,50577,50578],{"class":38,"line":1444},[36,50579,46253],{"class":3943},[36,50581,50582],{"class":38,"line":1486},[36,50583,46258],{"class":3943},[36,50585,50586],{"class":38,"line":1499},[36,50587,46263],{"class":3943},[36,50589,50590],{"class":38,"line":1513},[36,50591,46268],{"class":3943},[36,50593,50594],{"class":38,"line":1518},[36,50595,46273],{"class":3943},[36,50597,50598],{"class":38,"line":1529},[36,50599,46278],{"class":3943},[36,50601,50602,50604,50606,50608,50610,50612],{"class":38,"line":1539},[36,50603,42480],{"class":46},[36,50605,42483],{"class":42},[36,50607,42486],{"class":46},[36,50609,42489],{"class":46},[36,50611,1384],{"class":112},[36,50613,888],{"class":42},[36,50615,50616,50618,50620],{"class":38,"line":1544},[36,50617,42503],{"class":42},[36,50619,1859],{"class":112},[36,50621,922],{"class":42},[36,50623,50624,50626,50628],{"class":38,"line":1555},[36,50625,46305],{"class":46},[36,50627,42447],{"class":112},[36,50629,42522],{"class":42},[36,50631,50632,50634,50636,50638,50640],{"class":38,"line":1572},[36,50633,46314],{"class":42},[36,50635,1859],{"class":112},[36,50637,4253],{"class":42},[36,50639,42544],{"class":112},[36,50641,922],{"class":42},[36,50643,50644,50646,50648,50650,50652,50654],{"class":38,"line":1592},[36,50645,46327],{"class":46},[36,50647,42483],{"class":42},[36,50649,42486],{"class":46},[36,50651,42489],{"class":46},[36,50653,1384],{"class":112},[36,50655,888],{"class":42},[36,50657,50658,50660,50662],{"class":38,"line":1597},[36,50659,46342],{"class":42},[36,50661,1859],{"class":112},[36,50663,922],{"class":42},[36,50665,50666],{"class":38,"line":1610},[36,50667,38725],{"class":3943},[36,50669,50670,50672,50674],{"class":38,"line":1632},[36,50671,876],{"class":46},[36,50673,34688],{"class":101},[36,50675,34691],{"class":42},[36,50677,50678,50680,50682,50684],{"class":38,"line":1646},[36,50679,34696],{"class":42},[36,50681,47],{"class":46},[36,50683,457],{"class":112},[36,50685,46369],{"class":42},[36,50687,50688,50690,50692,50694],{"class":38,"line":1651},[36,50689,34696],{"class":42},[36,50691,47],{"class":46},[36,50693,457],{"class":112},[36,50695,46380],{"class":42},[36,50697,50698,50700,50702,50704],{"class":38,"line":1664},[36,50699,34696],{"class":42},[36,50701,47],{"class":46},[36,50703,457],{"class":112},[36,50705,46391],{"class":42},[36,50707,50708,50710,50712,50714],{"class":38,"line":1669},[36,50709,34696],{"class":42},[36,50711,47],{"class":46},[36,50713,457],{"class":112},[36,50715,46402],{"class":42},[36,50717,50718,50720,50722,50724],{"class":38,"line":1681},[36,50719,34696],{"class":42},[36,50721,47],{"class":46},[36,50723,457],{"class":112},[36,50725,46413],{"class":42},[36,50727,50728,50730],{"class":38,"line":1694},[36,50729,1239],{"class":46},[36,50731,34804],{"class":42},[36,50733,50734],{"class":38,"line":1699},[36,50735,659],{"emptyLinePlaceholder":658},[36,50737,50738],{"class":38,"line":1714},[36,50739,46428],{"class":3943},[36,50741,50742,50744,50746,50748,50750],{"class":38,"line":1729},[36,50743,2067],{"class":46},[36,50745,2070],{"class":112},[36,50747,6652],{"class":46},[36,50749,34819],{"class":105},[36,50751,888],{"class":42},[36,50753,50754,50756,50758,50760,50762,50764,50766,50768,50770],{"class":38,"line":1746},[36,50755,34831],{"class":42},[36,50757,47],{"class":46},[36,50759,34055],{"class":42},[36,50761,34838],{"class":105},[36,50763,5428],{"class":46},[36,50765,34843],{"class":42},[36,50767,5425],{"class":46},[36,50769,34080],{"class":105},[36,50771,922],{"class":42},[36,50773,50774,50776,50778],{"class":38,"line":1751},[36,50775,34883],{"class":42},[36,50777,47],{"class":46},[36,50779,46469],{"class":42},[36,50781,50782,50784,50786,50788,50790,50792,50794,50796],{"class":38,"line":1765},[36,50783,1867],{"class":112},[36,50785,34895],{"class":42},[36,50787,4092],{"class":112},[36,50789,4253],{"class":42},[36,50791,35090],{"class":112},[36,50793,4253],{"class":42},[36,50795,35090],{"class":112},[36,50797,34908],{"class":42},[25619,50799,50801],{"id":50800},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,50803,50804],{},"计算图片的均值与方差，用于训练中归一化处理操作",[26,50806,50808],{"className":28,"code":50807,"language":30,"meta":31,"style":31},"# 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",[33,50809,50810,50815,50828,50833,50839,50844,50854,50858,50863,50873,50877,50882,50891,50908,50912,50917,50929,50941,50972,50981,50991,51001,51005,51010,51025,51029,51034,51039,51044,51054,51059,51084,51088,51093,51108,51112,51125,51129,51134,51139,51144,51149,51154,51164,51174,51197,51205,51213,51221,51225,51237,51241,51246,51250,51254,51261,51281,51305,51312,51326,51331,51336,51340,51354,51358,51370],{"__ignoreMap":31},[36,50811,50812],{"class":38,"line":39},[36,50813,50814],{"class":3943},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[36,50816,50817,50819,50822,50825],{"class":38,"line":53},[36,50818,645],{"class":46},[36,50820,50821],{"class":112}," PIL",[36,50823,50824],{"class":46}," import",[36,50826,50827],{"class":42}," Image\n",[36,50829,50830],{"class":38,"line":196},[36,50831,50832],{"class":3943},"# os 用来处理文件夹和文件路径\n",[36,50834,50835,50837],{"class":38,"line":642},[36,50836,611],{"class":46},[36,50838,48863],{"class":42},[36,50840,50841],{"class":38,"line":655},[36,50842,50843],{"class":3943},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[36,50845,50846,50848,50850,50852],{"class":38,"line":662},[36,50847,611],{"class":46},[36,50849,634],{"class":42},[36,50851,617],{"class":46},[36,50853,639],{"class":42},[36,50855,50856],{"class":38,"line":667},[36,50857,659],{"emptyLinePlaceholder":658},[36,50859,50860],{"class":38,"line":679},[36,50861,50862],{"class":3943},"# 文件夹路径，包含所有图片文件\n",[36,50864,50865,50868,50870],{"class":38,"line":685},[36,50866,50867],{"class":42},"folder_path ",[36,50869,47],{"class":46},[36,50871,50872],{"class":105}," 'data_cat_dog'\n",[36,50874,50875],{"class":38,"line":691},[36,50876,659],{"emptyLinePlaceholder":658},[36,50878,50879],{"class":38,"line":696},[36,50880,50881],{"class":3943},"# 初始化累积变量\n",[36,50883,50884,50887,50889],{"class":38,"line":702},[36,50885,50886],{"class":42},"total_pixels ",[36,50888,47],{"class":46},[36,50890,1074],{"class":112},[36,50892,50893,50896,50898,50901,50903,50905],{"class":38,"line":708},[36,50894,50895],{"class":42},"sum_normalized_pixel_values ",[36,50897,47],{"class":46},[36,50899,50900],{"class":42}," np.zeros(",[36,50902,1982],{"class":112},[36,50904,49366],{"class":42},[36,50906,50907],{"class":3943},"# 如果是RGB图像，需要三个通道的均值和方差\n",[36,50909,50910],{"class":38,"line":713},[36,50911,659],{"emptyLinePlaceholder":658},[36,50913,50914],{"class":38,"line":719},[36,50915,50916],{"class":3943},"# 遍历文件夹中的图片文件\n",[36,50918,50919,50921,50924,50926],{"class":38,"line":725},[36,50920,3120],{"class":46},[36,50922,50923],{"class":42}," root, dirs, files ",[36,50925,1619],{"class":46},[36,50927,50928],{"class":42}," os.walk(folder_path):\n",[36,50930,50931,50933,50936,50938],{"class":38,"line":731},[36,50932,1909],{"class":46},[36,50934,50935],{"class":42}," filename ",[36,50937,1619],{"class":46},[36,50939,50940],{"class":42}," files:\n",[36,50942,50943,50945,50948,50951,50953,50956,50958,50961,50963,50966,50969],{"class":38,"line":736},[36,50944,995],{"class":46},[36,50946,50947],{"class":42}," filename.endswith((",[36,50949,50950],{"class":105},"'.jpg'",[36,50952,478],{"class":42},[36,50954,50955],{"class":105},"'.jpeg'",[36,50957,478],{"class":42},[36,50959,50960],{"class":105},"'.png'",[36,50962,478],{"class":42},[36,50964,50965],{"class":105},"'.bmp'",[36,50967,50968],{"class":42},")):  ",[36,50970,50971],{"class":3943},"# 可根据实际情况添加其他格式\n",[36,50973,50974,50976,50978],{"class":38,"line":742},[36,50975,49231],{"class":42},[36,50977,47],{"class":46},[36,50979,50980],{"class":42}," os.path.join(root, filename)\n",[36,50982,50983,50986,50988],{"class":38,"line":748},[36,50984,50985],{"class":42},"            image ",[36,50987,47],{"class":46},[36,50989,50990],{"class":42}," Image.open(image_path)\n",[36,50992,50993,50996,50998],{"class":38,"line":754},[36,50994,50995],{"class":42},"            image_array ",[36,50997,47],{"class":46},[36,50999,51000],{"class":42}," np.array(image)\n",[36,51002,51003],{"class":38,"line":760},[36,51004,659],{"emptyLinePlaceholder":658},[36,51006,51007],{"class":38,"line":766},[36,51008,51009],{"class":3943},"            # 归一化像素值到0-1之间\n",[36,51011,51012,51015,51017,51020,51022],{"class":38,"line":772},[36,51013,51014],{"class":42},"            normalized_image_array ",[36,51016,47],{"class":46},[36,51018,51019],{"class":42}," image_array ",[36,51021,4455],{"class":46},[36,51023,51024],{"class":112}," 255.0\n",[36,51026,51027],{"class":38,"line":778},[36,51028,659],{"emptyLinePlaceholder":658},[36,51030,51031],{"class":38,"line":783},[36,51032,51033],{"class":3943},"            # print(image_path)\n",[36,51035,51036],{"class":38,"line":789},[36,51037,51038],{"class":3943},"            # print(normalized_image_array.shape)\n",[36,51040,51041],{"class":38,"line":795},[36,51042,51043],{"class":3943},"            # 累积归一化后的像素值和像素数量\n",[36,51045,51046,51049,51051],{"class":38,"line":801},[36,51047,51048],{"class":42},"            total_pixels ",[36,51050,1658],{"class":46},[36,51052,51053],{"class":42}," normalized_image_array.size\n",[36,51055,51056],{"class":38,"line":807},[36,51057,51058],{"class":3943},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[36,51060,51061,51064,51066,51069,51072,51074,51076,51078,51080,51082],{"class":38,"line":813},[36,51062,51063],{"class":42},"            sum_normalized_pixel_values ",[36,51065,1658],{"class":46},[36,51067,51068],{"class":42}," np.sum(normalized_image_array, ",[36,51070,51071],{"class":468},"axis",[36,51073,47],{"class":46},[36,51075,495],{"class":42},[36,51077,1859],{"class":112},[36,51079,478],{"class":42},[36,51081,4092],{"class":112},[36,51083,2005],{"class":42},[36,51085,51086],{"class":38,"line":819},[36,51087,659],{"emptyLinePlaceholder":658},[36,51089,51090],{"class":38,"line":824},[36,51091,51092],{"class":3943},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[36,51094,51095,51098,51100,51103,51105],{"class":38,"line":829},[36,51096,51097],{"class":42},"mean ",[36,51099,47],{"class":46},[36,51101,51102],{"class":42}," sum_normalized_pixel_values ",[36,51104,4455],{"class":46},[36,51106,51107],{"class":42}," total_pixels\n",[36,51109,51110],{"class":38,"line":851},[36,51111,659],{"emptyLinePlaceholder":658},[36,51113,51114,51117,51119,51121,51123],{"class":38,"line":868},[36,51115,51116],{"class":42},"sum_squared_diff ",[36,51118,47],{"class":46},[36,51120,50900],{"class":42},[36,51122,1982],{"class":112},[36,51124,922],{"class":42},[36,51126,51127],{"class":38,"line":873},[36,51128,659],{"emptyLinePlaceholder":658},[36,51130,51131],{"class":38,"line":891},[36,51132,51133],{"class":3943},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[36,51135,51136],{"class":38,"line":906},[36,51137,51138],{"class":3943},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[36,51140,51141],{"class":38,"line":925},[36,51142,51143],{"class":3943},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[36,51145,51146],{"class":38,"line":943},[36,51147,51148],{"class":3943},"# Image.open(image_path)：打开图片\n",[36,51150,51151],{"class":38,"line":948},[36,51152,51153],{"class":3943},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[36,51155,51156,51158,51160,51162],{"class":38,"line":971},[36,51157,3120],{"class":46},[36,51159,50923],{"class":42},[36,51161,1619],{"class":46},[36,51163,50928],{"class":42},[36,51165,51166,51168,51170,51172],{"class":38,"line":992},[36,51167,1909],{"class":46},[36,51169,50935],{"class":42},[36,51171,1619],{"class":46},[36,51173,50940],{"class":42},[36,51175,51176,51178,51180,51182,51184,51186,51188,51190,51192,51194],{"class":38,"line":1020},[36,51177,995],{"class":46},[36,51179,50947],{"class":42},[36,51181,50950],{"class":105},[36,51183,478],{"class":42},[36,51185,50955],{"class":105},[36,51187,478],{"class":42},[36,51189,50960],{"class":105},[36,51191,478],{"class":42},[36,51193,50965],{"class":105},[36,51195,51196],{"class":42},")):\n",[36,51198,51199,51201,51203],{"class":38,"line":1036},[36,51200,49231],{"class":42},[36,51202,47],{"class":46},[36,51204,50980],{"class":42},[36,51206,51207,51209,51211],{"class":38,"line":1041},[36,51208,50985],{"class":42},[36,51210,47],{"class":46},[36,51212,50990],{"class":42},[36,51214,51215,51217,51219],{"class":38,"line":1052},[36,51216,50995],{"class":42},[36,51218,47],{"class":46},[36,51220,51000],{"class":42},[36,51222,51223],{"class":38,"line":1065},[36,51224,51009],{"class":3943},[36,51226,51227,51229,51231,51233,51235],{"class":38,"line":1077},[36,51228,51014],{"class":42},[36,51230,47],{"class":46},[36,51232,51019],{"class":42},[36,51234,4455],{"class":46},[36,51236,51024],{"class":112},[36,51238,51239],{"class":38,"line":1082},[36,51240,51038],{"class":3943},[36,51242,51243],{"class":38,"line":1125},[36,51244,51245],{"class":3943},"            # print(mean.shape)\n",[36,51247,51248],{"class":38,"line":1164},[36,51249,51033],{"class":3943},[36,51251,51252],{"class":38,"line":1169},[36,51253,659],{"emptyLinePlaceholder":658},[36,51255,51256,51259],{"class":38,"line":1180},[36,51257,51258],{"class":46},"            try",[36,51260,888],{"class":42},[36,51262,51263,51266,51268,51271,51273,51276,51278],{"class":38,"line":1198},[36,51264,51265],{"class":42},"                diff ",[36,51267,47],{"class":46},[36,51269,51270],{"class":42}," (normalized_image_array ",[36,51272,1308],{"class":46},[36,51274,51275],{"class":42}," mean) ",[36,51277,14322],{"class":46},[36,51279,51280],{"class":112}," 2\n",[36,51282,51283,51286,51288,51291,51293,51295,51297,51299,51301,51303],{"class":38,"line":1215},[36,51284,51285],{"class":42},"                sum_squared_diff ",[36,51287,1658],{"class":46},[36,51289,51290],{"class":42}," np.sum(diff, ",[36,51292,51071],{"class":468},[36,51294,47],{"class":46},[36,51296,495],{"class":42},[36,51298,1859],{"class":112},[36,51300,478],{"class":42},[36,51302,4092],{"class":112},[36,51304,2005],{"class":42},[36,51306,51307,51310],{"class":38,"line":1236},[36,51308,51309],{"class":46},"            except",[36,51311,888],{"class":42},[36,51313,51314,51317,51319,51321,51324],{"class":38,"line":1245},[36,51315,51316],{"class":112},"                print",[36,51318,495],{"class":42},[36,51320,3937],{"class":46},[36,51322,51323],{"class":105},"\"捕获到自定义异常\"",[36,51325,922],{"class":42},[36,51327,51328],{"class":38,"line":1250},[36,51329,51330],{"class":3943},"            # diff = (normalized_image_array - mean) ** 2\n",[36,51332,51333],{"class":38,"line":1265},[36,51334,51335],{"class":3943},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[36,51337,51338],{"class":38,"line":1281},[36,51339,659],{"emptyLinePlaceholder":658},[36,51341,51342,51345,51347,51350,51352],{"class":38,"line":1297},[36,51343,51344],{"class":42},"variance ",[36,51346,47],{"class":46},[36,51348,51349],{"class":42}," sum_squared_diff ",[36,51351,4455],{"class":46},[36,51353,51107],{"class":42},[36,51355,51356],{"class":38,"line":1314},[36,51357,659],{"emptyLinePlaceholder":658},[36,51359,51360,51362,51364,51367],{"class":38,"line":1336},[36,51361,3486],{"class":112},[36,51363,495],{"class":42},[36,51365,51366],{"class":105},"\"Mean:\"",[36,51368,51369],{"class":42},", mean)\n",[36,51371,51372,51374,51376,51379],{"class":38,"line":1356},[36,51373,3486],{"class":112},[36,51375,495],{"class":42},[36,51377,51378],{"class":105},"\"Variance:\"",[36,51380,51381],{"class":42},", variance)\n",[26,51383,51385],{"className":28,"code":51384,"language":30,"meta":31,"style":31},"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",[33,51386,51387,51393,51399,51409,51415,51425,51439,51449,51459,51469,51473,51483,51493,51497,51501,51509,51514,51519,51538,51542,51547,51552,51557,51562,51603,51608,51618,51623,51636,51641,51646,51651,51656,51661,51665,51670,51675,51697,51701,51733,51747,51757,51767,51771,51781,51795,51805,51815,51825,51831,51835,51839,51843,51847,51851,51859,51879,51883,51887,51891,51895,51911,51915,51919,51927,51931,51935,51943,51947,51951,51955,51963,51967,51971,51975,51983,51987,51995,51999,52007,52011,52019,52023,52031,52035,52039,52047,52051,52055,52067,52091,52105,52109,52113,52117,52125,52129,52137,52141,52149,52153,52161,52165,52173,52177,52185,52189,52201,52205,52213,52217,52225,52229,52233,52237,52241,52249,52253,52269,52273,52281,52285,52289,52293,52297,52301,52305,52309,52325,52329,52341,52345,52357,52361,52373,52377,52385,52389,52397,52401,52405,52409,52415,52419,52427,52431,52447,52451,52459,52463,52479,52491,52495,52507,52511,52515,52523,52527,52531,52539,52543,52551,52555,52563,52567,52571,52613,52655,52659,52663,52679,52683,52699,52703,52707,52715,52719,52723,52735,52773,52777,52781,52789,52793,52807,52817,52823,52829,52835,52841,52845,52849,52855,52859,52863,52871,52875,52893,52897,52901,52905,52921,52925,52929,52933,52937,52941,52961,52981,52985,52989,52993,53001,53009,53013,53029,53049,53069,53073,53078,53087,53096,53101,53106,53111,53124,53129,53138,53147,53164],{"__ignoreMap":31},[36,51388,51389,51391],{"class":38,"line":39},[36,51390,611],{"class":46},[36,51392,35410],{"class":42},[36,51394,51395,51397],{"class":38,"line":53},[36,51396,611],{"class":46},[36,51398,35417],{"class":42},[36,51400,51401,51403,51405,51407],{"class":38,"line":196},[36,51402,611],{"class":46},[36,51404,35428],{"class":42},[36,51406,617],{"class":46},[36,51408,35433],{"class":42},[36,51410,51411,51413],{"class":38,"line":642},[36,51412,611],{"class":46},[36,51414,34000],{"class":42},[36,51416,51417,51419,51421,51423],{"class":38,"line":655},[36,51418,645],{"class":46},[36,51420,35005],{"class":42},[36,51422,611],{"class":46},[36,51424,35450],{"class":42},[36,51426,51427,51429,51431,51433,51436],{"class":38,"line":662},[36,51428,645],{"class":46},[36,51430,34961],{"class":42},[36,51432,611],{"class":46},[36,51434,51435],{"class":42}," ImageFolder ",[36,51437,51438],{"class":3943},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[36,51440,51441,51443,51445,51447],{"class":38,"line":667},[36,51442,645],{"class":46},[36,51444,34988],{"class":42},[36,51446,611],{"class":46},[36,51448,34993],{"class":42},[36,51450,51451,51453,51455,51457],{"class":38,"line":679},[36,51452,611],{"class":46},[36,51454,35005],{"class":42},[36,51456,617],{"class":46},[36,51458,35010],{"class":42},[36,51460,51461,51463,51465,51467],{"class":38,"line":685},[36,51462,611],{"class":46},[36,51464,35022],{"class":42},[36,51466,617],{"class":46},[36,51468,35027],{"class":42},[36,51470,51471],{"class":38,"line":691},[36,51472,35495],{"class":3943},[36,51474,51475,51477,51479,51481],{"class":38,"line":696},[36,51476,645],{"class":46},[36,51478,35502],{"class":42},[36,51480,611],{"class":46},[36,51482,46589],{"class":42},[36,51484,51485,51487,51489,51491],{"class":38,"line":702},[36,51486,645],{"class":46},[36,51488,34342],{"class":42},[36,51490,611],{"class":46},[36,51492,34347],{"class":42},[36,51494,51495],{"class":38,"line":708},[36,51496,659],{"emptyLinePlaceholder":658},[36,51498,51499],{"class":38,"line":713},[36,51500,35530],{"class":3943},[36,51502,51503,51505,51507],{"class":38,"line":719},[36,51504,1820],{"class":46},[36,51506,35537],{"class":101},[36,51508,35540],{"class":42},[36,51510,51511],{"class":38,"line":725},[36,51512,51513],{"class":3943},"    # 导入自己的数据集，并进行数据处理\n",[36,51515,51516],{"class":38,"line":731},[36,51517,51518],{"class":3943},"    # 定义数据集的路径\n",[36,51520,51521,51524,51526,51528,51530,51532,51536],{"class":38,"line":736},[36,51522,51523],{"class":112},"    ROOT_PATH",[36,51525,47],{"class":46},[36,51527,4541],{"class":46},[36,51529,4126],{"class":105},[36,51531,842],{"class":112},[36,51533,51535],{"class":51534},"sA_wV","\u002Fdata\u002Ftrain",[36,51537,28747],{"class":105},[36,51539,51540],{"class":38,"line":742},[36,51541,659],{"emptyLinePlaceholder":658},[36,51543,51544],{"class":38,"line":748},[36,51545,51546],{"class":3943},"    # 定义归一化方法\n",[36,51548,51549],{"class":38,"line":754},[36,51550,51551],{"class":3943},"    # 这里需要先计算一下数据集的均值和方差\n",[36,51553,51554],{"class":38,"line":760},[36,51555,51556],{"class":3943},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[36,51558,51559],{"class":38,"line":766},[36,51560,51561],{"class":3943},"    # 第一个参数是均值，第二个参数是方差\n",[36,51563,51564,51567,51569,51572,51575,51577,51580,51582,51585,51588,51591,51593,51596,51598,51601],{"class":38,"line":772},[36,51565,51566],{"class":42},"    normalize",[36,51568,47],{"class":46},[36,51570,51571],{"class":42},"transforms.Normalize([",[36,51573,51574],{"class":112},"0.162",[36,51576,4253],{"class":42},[36,51578,51579],{"class":112},"0.151",[36,51581,4253],{"class":42},[36,51583,51584],{"class":112},"0.138",[36,51586,51587],{"class":42},"],[",[36,51589,51590],{"class":112},"0.058",[36,51592,4253],{"class":42},[36,51594,51595],{"class":112},"0.052",[36,51597,4253],{"class":42},[36,51599,51600],{"class":112},"0.048",[36,51602,8353],{"class":42},[36,51604,51605],{"class":38,"line":778},[36,51606,51607],{"class":3943},"    # 定义数据集处理方法变量\n",[36,51609,51610,51613,51615],{"class":38,"line":783},[36,51611,51612],{"class":42},"    train_transform",[36,51614,47],{"class":46},[36,51616,51617],{"class":42},"transforms.Compose([\n",[36,51619,51620],{"class":38,"line":789},[36,51621,51622],{"class":3943},"        # 调整图像大小为224*224\n",[36,51624,51625,51628,51630,51632,51634],{"class":38,"line":795},[36,51626,51627],{"class":42},"        transforms.Resize((",[36,51629,35090],{"class":112},[36,51631,4253],{"class":42},[36,51633,35090],{"class":112},[36,51635,46180],{"class":42},[36,51637,51638],{"class":38,"line":801},[36,51639,51640],{"class":3943},"        # 将图像转换为张量\n",[36,51642,51643],{"class":38,"line":807},[36,51644,51645],{"class":42},"        transforms.ToTensor(),\n",[36,51647,51648],{"class":38,"line":813},[36,51649,51650],{"class":42},"        normalize])\n",[36,51652,51653],{"class":38,"line":819},[36,51654,51655],{"class":3943},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[36,51657,51658],{"class":38,"line":824},[36,51659,51660],{"class":3943},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[36,51662,51663],{"class":38,"line":829},[36,51664,659],{"emptyLinePlaceholder":658},[36,51666,51667],{"class":38,"line":851},[36,51668,51669],{"class":3943},"    # 加载数据集\n",[36,51671,51672],{"class":38,"line":868},[36,51673,51674],{"class":3943},"    # 传入数据集路径与处理方法\n",[36,51676,51677,51679,51681,51684,51687,51689,51692,51694],{"class":38,"line":873},[36,51678,35545],{"class":42},[36,51680,47],{"class":46},[36,51682,51683],{"class":42},"ImageFolder(",[36,51685,51686],{"class":112},"ROOT_PATH",[36,51688,4253],{"class":42},[36,51690,51691],{"class":468},"transform",[36,51693,47],{"class":46},[36,51695,51696],{"class":42},"train_transform)\n",[36,51698,51699],{"class":38,"line":891},[36,51700,659],{"emptyLinePlaceholder":658},[36,51702,51703,51705,51707,51709,51711,51713,51715,51717,51719,51721,51723,51725,51727,51729,51731],{"class":38,"line":906},[36,51704,35597],{"class":42},[36,51706,47],{"class":46},[36,51708,35602],{"class":42},[36,51710,1976],{"class":112},[36,51712,495],{"class":42},[36,51714,35609],{"class":112},[36,51716,1372],{"class":46},[36,51718,11049],{"class":112},[36,51720,35616],{"class":42},[36,51722,1976],{"class":112},[36,51724,495],{"class":42},[36,51726,35623],{"class":112},[36,51728,1372],{"class":46},[36,51730,11049],{"class":112},[36,51732,35630],{"class":42},[36,51734,51735,51737,51739,51741,51743,51745],{"class":38,"line":925},[36,51736,35635],{"class":42},[36,51738,47],{"class":46},[36,51740,35640],{"class":42},[36,51742,35126],{"class":468},[36,51744,47],{"class":46},[36,51746,35131],{"class":42},[36,51748,51749,51751,51753,51755],{"class":38,"line":943},[36,51750,35651],{"class":468},[36,51752,47],{"class":46},[36,51754,4072],{"class":112},[36,51756,35056],{"class":42},[36,51758,51759,51761,51763,51765],{"class":38,"line":948},[36,51760,35663],{"class":468},[36,51762,47],{"class":46},[36,51764,35066],{"class":112},[36,51766,35056],{"class":42},[36,51768,51769],{"class":38,"line":971},[36,51770,35674],{"class":3943},[36,51772,51773,51775,51777,51779],{"class":38,"line":992},[36,51774,35679],{"class":468},[36,51776,47],{"class":46},[36,51778,4270],{"class":112},[36,51780,922],{"class":42},[36,51782,51783,51785,51787,51789,51791,51793],{"class":38,"line":1020},[36,51784,35690],{"class":42},[36,51786,47],{"class":46},[36,51788,35123],{"class":42},[36,51790,35126],{"class":468},[36,51792,47],{"class":46},[36,51794,35701],{"class":42},[36,51796,51797,51799,51801,51803],{"class":38,"line":1036},[36,51798,35706],{"class":468},[36,51800,47],{"class":46},[36,51802,4072],{"class":112},[36,51804,35056],{"class":42},[36,51806,51807,51809,51811,51813],{"class":38,"line":1041},[36,51808,35717],{"class":468},[36,51810,47],{"class":46},[36,51812,35066],{"class":112},[36,51814,35056],{"class":42},[36,51816,51817,51819,51821,51823],{"class":38,"line":1052},[36,51818,35728],{"class":468},[36,51820,47],{"class":46},[36,51822,4270],{"class":112},[36,51824,922],{"class":42},[36,51826,51827,51829],{"class":38,"line":1065},[36,51828,7788],{"class":46},[36,51830,35741],{"class":42},[36,51832,51833],{"class":38,"line":1077},[36,51834,659],{"emptyLinePlaceholder":658},[36,51836,51837],{"class":38,"line":1082},[36,51838,35750],{"class":3943},[36,51840,51841],{"class":38,"line":1125},[36,51842,35755],{"class":3943},[36,51844,51845],{"class":38,"line":1164},[36,51846,659],{"emptyLinePlaceholder":658},[36,51848,51849],{"class":38,"line":1169},[36,51850,35764],{"class":3943},[36,51852,51853,51855,51857],{"class":38,"line":1180},[36,51854,1820],{"class":46},[36,51856,35771],{"class":101},[36,51858,35774],{"class":42},[36,51860,51861,51863,51865,51867,51869,51871,51873,51875,51877],{"class":38,"line":1198},[36,51862,34831],{"class":42},[36,51864,47],{"class":46},[36,51866,34055],{"class":42},[36,51868,34838],{"class":105},[36,51870,5428],{"class":46},[36,51872,34843],{"class":42},[36,51874,5425],{"class":46},[36,51876,35793],{"class":105},[36,51878,922],{"class":42},[36,51880,51881],{"class":38,"line":1215},[36,51882,659],{"emptyLinePlaceholder":658},[36,51884,51885],{"class":38,"line":1236},[36,51886,35808],{"class":3943},[36,51888,51889],{"class":38,"line":1245},[36,51890,35813],{"class":3943},[36,51892,51893],{"class":38,"line":1250},[36,51894,35818],{"class":3943},[36,51896,51897,51899,51901,51903,51905,51907,51909],{"class":38,"line":1265},[36,51898,35823],{"class":42},[36,51900,47],{"class":46},[36,51902,35828],{"class":42},[36,51904,35831],{"class":468},[36,51906,47],{"class":46},[36,51908,35836],{"class":112},[36,51910,922],{"class":42},[36,51912,51913],{"class":38,"line":1281},[36,51914,659],{"emptyLinePlaceholder":658},[36,51916,51917],{"class":38,"line":1297},[36,51918,35847],{"class":3943},[36,51920,51921,51923,51925],{"class":38,"line":1314},[36,51922,35852],{"class":42},[36,51924,47],{"class":46},[36,51926,35857],{"class":42},[36,51928,51929],{"class":38,"line":1336},[36,51930,659],{"emptyLinePlaceholder":658},[36,51932,51933],{"class":38,"line":1356},[36,51934,35866],{"class":3943},[36,51936,51937,51939,51941],{"class":38,"line":1361},[36,51938,34883],{"class":42},[36,51940,47],{"class":46},[36,51942,35875],{"class":42},[36,51944,51945],{"class":38,"line":1407},[36,51946,35880],{"class":3943},[36,51948,51949],{"class":38,"line":1423},[36,51950,35885],{"class":3943},[36,51952,51953],{"class":38,"line":1439},[36,51954,35890],{"class":3943},[36,51956,51957,51959,51961],{"class":38,"line":1444},[36,51958,35895],{"class":42},[36,51960,47],{"class":46},[36,51962,35900],{"class":42},[36,51964,51965],{"class":38,"line":1486},[36,51966,659],{"emptyLinePlaceholder":658},[36,51968,51969],{"class":38,"line":1499},[36,51970,35913],{"class":3943},[36,51972,51973],{"class":38,"line":1513},[36,51974,35918],{"class":3943},[36,51976,51977,51979,51981],{"class":38,"line":1518},[36,51978,35923],{"class":42},[36,51980,47],{"class":46},[36,51982,35928],{"class":112},[36,51984,51985],{"class":38,"line":1529},[36,51986,35933],{"class":3943},[36,51988,51989,51991,51993],{"class":38,"line":1539},[36,51990,35938],{"class":42},[36,51992,47],{"class":46},[36,51994,35943],{"class":42},[36,51996,51997],{"class":38,"line":1544},[36,51998,35948],{"class":3943},[36,52000,52001,52003,52005],{"class":38,"line":1555},[36,52002,35953],{"class":42},[36,52004,47],{"class":46},[36,52006,35943],{"class":42},[36,52008,52009],{"class":38,"line":1572},[36,52010,35962],{"class":3943},[36,52012,52013,52015,52017],{"class":38,"line":1592},[36,52014,35967],{"class":42},[36,52016,47],{"class":46},[36,52018,35943],{"class":42},[36,52020,52021],{"class":38,"line":1597},[36,52022,35976],{"class":3943},[36,52024,52025,52027,52029],{"class":38,"line":1610},[36,52026,35981],{"class":42},[36,52028,47],{"class":46},[36,52030,35943],{"class":42},[36,52032,52033],{"class":38,"line":1632},[36,52034,659],{"emptyLinePlaceholder":658},[36,52036,52037],{"class":38,"line":1646},[36,52038,35994],{"class":3943},[36,52040,52041,52043,52045],{"class":38,"line":1651},[36,52042,35999],{"class":42},[36,52044,47],{"class":46},[36,52046,36004],{"class":42},[36,52048,52049],{"class":38,"line":1664},[36,52050,659],{"emptyLinePlaceholder":658},[36,52052,52053],{"class":38,"line":1669},[36,52054,36017],{"class":3943},[36,52056,52057,52059,52061,52063,52065],{"class":38,"line":1681},[36,52058,1909],{"class":46},[36,52060,36024],{"class":42},[36,52062,1619],{"class":46},[36,52064,1622],{"class":112},[36,52066,36031],{"class":42},[36,52068,52069,52071,52073,52075,52077,52079,52081,52083,52085,52087,52089],{"class":38,"line":1694},[36,52070,1960],{"class":112},[36,52072,495],{"class":42},[36,52074,36040],{"class":105},[36,52076,3649],{"class":112},[36,52078,4455],{"class":105},[36,52080,3649],{"class":112},[36,52082,4126],{"class":105},[36,52084,36051],{"class":42},[36,52086,1308],{"class":46},[36,52088,4092],{"class":112},[36,52090,2005],{"class":42},[36,52092,52093,52095,52097,52099,52101,52103],{"class":38,"line":1699},[36,52094,1960],{"class":112},[36,52096,495],{"class":42},[36,52098,36066],{"class":105},[36,52100,1372],{"class":46},[36,52102,554],{"class":112},[36,52104,922],{"class":42},[36,52106,52107],{"class":38,"line":1714},[36,52108,659],{"emptyLinePlaceholder":658},[36,52110,52111],{"class":38,"line":1729},[36,52112,36081],{"class":3943},[36,52114,52115],{"class":38,"line":1746},[36,52116,36086],{"class":3943},[36,52118,52119,52121,52123],{"class":38,"line":1751},[36,52120,36091],{"class":42},[36,52122,47],{"class":46},[36,52124,35928],{"class":112},[36,52126,52127],{"class":38,"line":1765},[36,52128,36100],{"class":3943},[36,52130,52131,52133,52135],{"class":38,"line":1783},[36,52132,36105],{"class":42},[36,52134,47],{"class":46},[36,52136,6787],{"class":112},[36,52138,52139],{"class":38,"line":1799},[36,52140,36114],{"class":3943},[36,52142,52143,52145,52147],{"class":38,"line":1807},[36,52144,36119],{"class":42},[36,52146,47],{"class":46},[36,52148,35928],{"class":112},[36,52150,52151],{"class":38,"line":1812},[36,52152,36128],{"class":3943},[36,52154,52155,52157,52159],{"class":38,"line":1817},[36,52156,36133],{"class":42},[36,52158,47],{"class":46},[36,52160,6787],{"class":112},[36,52162,52163],{"class":38,"line":1833},[36,52164,36142],{"class":3943},[36,52166,52167,52169,52171],{"class":38,"line":1844},[36,52168,36147],{"class":42},[36,52170,47],{"class":46},[36,52172,6787],{"class":112},[36,52174,52175],{"class":38,"line":1864},[36,52176,36156],{"class":3943},[36,52178,52179,52181,52183],{"class":38,"line":1878},[36,52180,36161],{"class":42},[36,52182,47],{"class":46},[36,52184,6787],{"class":112},[36,52186,52187],{"class":38,"line":1891},[36,52188,36170],{"class":3943},[36,52190,52191,52193,52195,52197,52199],{"class":38,"line":1896},[36,52192,1613],{"class":46},[36,52194,35190],{"class":42},[36,52196,1619],{"class":46},[36,52198,35195],{"class":112},[36,52200,36183],{"class":42},[36,52202,52203],{"class":38,"line":1906},[36,52204,36188],{"class":3943},[36,52206,52207,52209,52211],{"class":38,"line":1926},[36,52208,36193],{"class":42},[36,52210,47],{"class":46},[36,52212,36198],{"class":42},[36,52214,52215],{"class":38,"line":1936},[36,52216,36203],{"class":3943},[36,52218,52219,52221,52223],{"class":38,"line":1946},[36,52220,36208],{"class":42},[36,52222,47],{"class":46},[36,52224,36213],{"class":42},[36,52226,52227],{"class":38,"line":1957},[36,52228,36218],{"class":3943},[36,52230,52231],{"class":38,"line":2008},[36,52232,36223],{"class":42},[36,52234,52235],{"class":38,"line":2022},[36,52236,36228],{"class":3943},[36,52238,52239],{"class":38,"line":2028},[36,52240,36233],{"class":3943},[36,52242,52243,52245,52247],{"class":38,"line":2033},[36,52244,36238],{"class":42},[36,52246,47],{"class":46},[36,52248,36243],{"class":42},[36,52250,52251],{"class":38,"line":2054},[36,52252,36248],{"class":3943},[36,52254,52255,52257,52259,52261,52263,52265,52267],{"class":38,"line":2059},[36,52256,36253],{"class":42},[36,52258,47],{"class":46},[36,52260,36258],{"class":42},[36,52262,36261],{"class":468},[36,52264,47],{"class":46},[36,52266,4092],{"class":112},[36,52268,922],{"class":42},[36,52270,52271],{"class":38,"line":2064},[36,52272,36272],{"class":3943},[36,52274,52275,52277,52279],{"class":38,"line":2081},[36,52276,36277],{"class":42},[36,52278,47],{"class":46},[36,52280,36282],{"class":42},[36,52282,52283],{"class":38,"line":36396},[36,52284,36287],{"class":3943},[36,52286,52287],{"class":38,"line":36402},[36,52288,36292],{"class":42},[36,52290,52291],{"class":38,"line":36411},[36,52292,36297],{"class":3943},[36,52294,52295],{"class":38,"line":36417},[36,52296,36302],{"class":42},[36,52298,52299],{"class":38,"line":36426},[36,52300,36307],{"class":3943},[36,52302,52303],{"class":38,"line":36432},[36,52304,36312],{"class":42},[36,52306,52307],{"class":38,"line":36438},[36,52308,36317],{"class":3943},[36,52310,52311,52313,52315,52317,52319,52321,52323],{"class":38,"line":36447},[36,52312,36322],{"class":42},[36,52314,1658],{"class":46},[36,52316,36327],{"class":42},[36,52318,1372],{"class":46},[36,52320,36332],{"class":42},[36,52322,1859],{"class":112},[36,52324,922],{"class":42},[36,52326,52327],{"class":38,"line":36453},[36,52328,36341],{"class":3943},[36,52330,52331,52333,52335,52337,52339],{"class":38,"line":36464},[36,52332,36346],{"class":42},[36,52334,1658],{"class":46},[36,52336,36351],{"class":42},[36,52338,6652],{"class":46},[36,52340,36356],{"class":42},[36,52342,52343],{"class":38,"line":36470},[36,52344,36361],{"class":3943},[36,52346,52347,52349,52351,52353,52355],{"class":38,"line":36489},[36,52348,36366],{"class":42},[36,52350,1658],{"class":46},[36,52352,36332],{"class":42},[36,52354,1859],{"class":112},[36,52356,922],{"class":42},[36,52358,52359],{"class":38,"line":36495},[36,52360,36379],{"class":3943},[36,52362,52363,52365,52367,52369,52371],{"class":38,"line":36506},[36,52364,1613],{"class":46},[36,52366,36386],{"class":42},[36,52368,1619],{"class":46},[36,52370,35195],{"class":112},[36,52372,36393],{"class":42},[36,52374,52375],{"class":38,"line":36512},[36,52376,36399],{"class":3943},[36,52378,52379,52381,52383],{"class":38,"line":36532},[36,52380,36193],{"class":42},[36,52382,47],{"class":46},[36,52384,36198],{"class":42},[36,52386,52387],{"class":38,"line":36548},[36,52388,36414],{"class":3943},[36,52390,52391,52393,52395],{"class":38,"line":36554},[36,52392,36208],{"class":42},[36,52394,47],{"class":46},[36,52396,36213],{"class":42},[36,52398,52399],{"class":38,"line":36568},[36,52400,36429],{"class":3943},[36,52402,52403],{"class":38,"line":36574},[36,52404,36435],{"class":42},[36,52406,52407],{"class":38,"line":36580},[36,52408,39916],{"class":3943},[36,52410,52411,52413],{"class":38,"line":36591},[36,52412,36441],{"class":46},[36,52414,36444],{"class":42},[36,52416,52417],{"class":38,"line":36597},[36,52418,36450],{"class":3943},[36,52420,52421,52423,52425],{"class":38,"line":36603},[36,52422,39931],{"class":42},[36,52424,47],{"class":46},[36,52426,36243],{"class":42},[36,52428,52429],{"class":38,"line":36613},[36,52430,36467],{"class":3943},[36,52432,52433,52435,52437,52439,52441,52443,52445],{"class":38,"line":36619},[36,52434,39944],{"class":42},[36,52436,47],{"class":46},[36,52438,36258],{"class":42},[36,52440,36261],{"class":468},[36,52442,47],{"class":46},[36,52444,4092],{"class":112},[36,52446,922],{"class":42},[36,52448,52449],{"class":38,"line":36630},[36,52450,36492],{"class":3943},[36,52452,52453,52455,52457],{"class":38,"line":36636},[36,52454,39965],{"class":42},[36,52456,47],{"class":46},[36,52458,36282],{"class":42},[36,52460,52461],{"class":38,"line":36646},[36,52462,36509],{"class":3943},[36,52464,52465,52467,52469,52471,52473,52475,52477],{"class":38,"line":36651},[36,52466,39978],{"class":42},[36,52468,1658],{"class":46},[36,52470,39983],{"class":42},[36,52472,1372],{"class":46},[36,52474,36332],{"class":42},[36,52476,1859],{"class":112},[36,52478,922],{"class":42},[36,52480,52481,52483,52485,52487,52489],{"class":38,"line":36657},[36,52482,39996],{"class":42},[36,52484,1658],{"class":46},[36,52486,36351],{"class":42},[36,52488,6652],{"class":46},[36,52490,36356],{"class":42},[36,52492,52493],{"class":38,"line":36706},[36,52494,40009],{"class":3943},[36,52496,52497,52499,52501,52503,52505],{"class":38,"line":36753},[36,52498,40014],{"class":42},[36,52500,1658],{"class":46},[36,52502,36332],{"class":42},[36,52504,1859],{"class":112},[36,52506,922],{"class":42},[36,52508,52509],{"class":38,"line":36758},[36,52510,36571],{"class":3943},[36,52512,52513],{"class":38,"line":36764},[36,52514,36577],{"class":3943},[36,52516,52517,52519,52521],{"class":38,"line":36783},[36,52518,36583],{"class":42},[36,52520,4455],{"class":46},[36,52522,36588],{"class":42},[36,52524,52525],{"class":38,"line":36789},[36,52526,36594],{"class":3943},[36,52528,52529],{"class":38,"line":36809},[36,52530,36600],{"class":3943},[36,52532,52533,52535,52537],{"class":38,"line":36815},[36,52534,36606],{"class":42},[36,52536,4455],{"class":46},[36,52538,36588],{"class":42},[36,52540,52541],{"class":38,"line":36821},[36,52542,36616],{"class":3943},[36,52544,52545,52547,52549],{"class":38,"line":36831},[36,52546,36622],{"class":42},[36,52548,4455],{"class":46},[36,52550,36627],{"class":42},[36,52552,52553],{"class":38,"line":36836},[36,52554,36633],{"class":3943},[36,52556,52557,52559,52561],{"class":38,"line":36842},[36,52558,36639],{"class":42},[36,52560,4455],{"class":46},[36,52562,36627],{"class":42},[36,52564,52565],{"class":38,"line":36858},[36,52566,659],{"emptyLinePlaceholder":658},[36,52568,52569],{"class":38,"line":36903},[36,52570,36654],{"class":3943},[36,52572,52573,52575,52577,52579,52581,52583,52585,52587,52589,52591,52593,52595,52597,52599,52601,52603,52605,52607,52609,52611],{"class":38,"line":36909},[36,52574,1960],{"class":112},[36,52576,495],{"class":42},[36,52578,7291],{"class":105},[36,52580,3649],{"class":112},[36,52582,36668],{"class":105},[36,52584,4766],{"class":112},[36,52586,36673],{"class":46},[36,52588,4815],{"class":112},[36,52590,36678],{"class":105},[36,52592,4766],{"class":112},[36,52594,36673],{"class":46},[36,52596,4815],{"class":112},[36,52598,7291],{"class":105},[36,52600,36689],{"class":42},[36,52602,1308],{"class":46},[36,52604,4092],{"class":112},[36,52606,36696],{"class":42},[36,52608,1308],{"class":46},[36,52610,4092],{"class":112},[36,52612,36703],{"class":42},[36,52614,52615,52617,52619,52621,52623,52625,52627,52629,52631,52633,52635,52637,52639,52641,52643,52645,52647,52649,52651,52653],{"class":38,"line":36915},[36,52616,1960],{"class":112},[36,52618,495],{"class":42},[36,52620,7291],{"class":105},[36,52622,3649],{"class":112},[36,52624,36717],{"class":105},[36,52626,4766],{"class":112},[36,52628,36673],{"class":46},[36,52630,4815],{"class":112},[36,52632,36726],{"class":105},[36,52634,4766],{"class":112},[36,52636,36673],{"class":46},[36,52638,4815],{"class":112},[36,52640,7291],{"class":105},[36,52642,36737],{"class":42},[36,52644,1308],{"class":46},[36,52646,4092],{"class":112},[36,52648,36744],{"class":42},[36,52650,1308],{"class":46},[36,52652,4092],{"class":112},[36,52654,36703],{"class":42},[36,52656,52657],{"class":38,"line":36921},[36,52658,659],{"emptyLinePlaceholder":658},[36,52660,52661],{"class":38,"line":36932},[36,52662,36761],{"class":3943},[36,52664,52665,52667,52669,52671,52673,52675,52677],{"class":38,"line":36938},[36,52666,995],{"class":46},[36,52668,36769],{"class":42},[36,52670,1308],{"class":46},[36,52672,4092],{"class":112},[36,52674,4809],{"class":42},[36,52676,4829],{"class":46},[36,52678,36780],{"class":42},[36,52680,52681],{"class":38,"line":36944},[36,52682,36786],{"class":3943},[36,52684,52685,52687,52689,52691,52693,52695,52697],{"class":38,"line":36950},[36,52686,36792],{"class":42},[36,52688,1260],{"class":112},[36,52690,47],{"class":46},[36,52692,36799],{"class":42},[36,52694,1308],{"class":46},[36,52696,4092],{"class":112},[36,52698,36806],{"class":42},[36,52700,52701],{"class":38,"line":36968},[36,52702,36812],{"class":3943},[36,52704,52705],{"class":38,"line":36982},[36,52706,36818],{"class":3943},[36,52708,52709,52711,52713],{"class":38,"line":36991},[36,52710,36824],{"class":42},[36,52712,47],{"class":46},[36,52714,35900],{"class":42},[36,52716,52717],{"class":38,"line":37000},[36,52718,659],{"emptyLinePlaceholder":658},[36,52720,52721],{"class":38,"line":37009},[36,52722,36839],{"class":3943},[36,52724,52725,52727,52729,52731,52733],{"class":38,"line":37018},[36,52726,36845],{"class":42},[36,52728,47],{"class":46},[36,52730,36850],{"class":42},[36,52732,1308],{"class":46},[36,52734,36855],{"class":42},[36,52736,52737,52739,52741,52743,52745,52747,52749,52751,52753,52755,52757,52759,52761,52763,52765,52767,52769,52771],{"class":38,"line":37024},[36,52738,1960],{"class":112},[36,52740,495],{"class":42},[36,52742,36865],{"class":105},[36,52744,4766],{"class":112},[36,52746,36870],{"class":46},[36,52748,4815],{"class":112},[36,52750,4416],{"class":105},[36,52752,4766],{"class":112},[36,52754,36870],{"class":46},[36,52756,4815],{"class":112},[36,52758,36883],{"class":105},[36,52760,36886],{"class":42},[36,52762,36889],{"class":46},[36,52764,4777],{"class":112},[36,52766,36894],{"class":42},[36,52768,4203],{"class":46},[36,52770,4777],{"class":112},[36,52772,2005],{"class":42},[36,52774,52775],{"class":38,"line":37030},[36,52776,40293],{"class":3943},[36,52778,52779],{"class":38,"line":37038},[36,52780,40298],{"class":3943},[36,52782,52783,52785,52787],{"class":38,"line":37043},[36,52784,40303],{"class":42},[36,52786,36927],{"class":105},[36,52788,922],{"class":42},[36,52790,52791],{"class":38,"line":37049},[36,52792,36947],{"class":3943},[36,52794,52795,52797,52799,52801,52803,52805],{"class":38,"line":37060},[36,52796,36953],{"class":42},[36,52798,47],{"class":46},[36,52800,36958],{"class":42},[36,52802,36961],{"class":468},[36,52804,47],{"class":46},[36,52806,5281],{"class":42},[36,52808,52809,52811,52813,52815],{"class":38,"line":37066},[36,52810,36971],{"class":105},[36,52812,4729],{"class":42},[36,52814,36976],{"class":112},[36,52816,36979],{"class":42},[36,52818,52819,52821],{"class":38,"line":37086},[36,52820,36985],{"class":105},[36,52822,36988],{"class":42},[36,52824,52825,52827],{"class":38,"line":37092},[36,52826,36994],{"class":105},[36,52828,36997],{"class":42},[36,52830,52831,52833],{"class":38,"line":37098},[36,52832,37003],{"class":105},[36,52834,37006],{"class":42},[36,52836,52837,52839],{"class":38,"line":37104},[36,52838,37012],{"class":105},[36,52840,37015],{"class":42},[36,52842,52843],{"class":38,"line":37121},[36,52844,37021],{"class":42},[36,52846,52847],{"class":38,"line":37127},[36,52848,37027],{"class":3943},[36,52850,52851,52853],{"class":38,"line":37133},[36,52852,7788],{"class":46},[36,52854,37035],{"class":42},[36,52856,52857],{"class":38,"line":37139},[36,52858,659],{"emptyLinePlaceholder":658},[36,52860,52861],{"class":38,"line":37145},[36,52862,37046],{"class":3943},[36,52864,52865,52867,52869],{"class":38,"line":37151},[36,52866,1820],{"class":46},[36,52868,37054],{"class":101},[36,52870,37057],{"class":42},[36,52872,52873],{"class":38,"line":37178},[36,52874,37063],{"class":3943},[36,52876,52877,52879,52881,52883,52885,52887,52889,52891],{"class":38,"line":37202},[36,52878,37069],{"class":42},[36,52880,35281],{"class":468},[36,52882,47],{"class":46},[36,52884,495],{"class":42},[36,52886,4371],{"class":112},[36,52888,4253],{"class":42},[36,52890,4168],{"class":112},[36,52892,2005],{"class":42},[36,52894,52895],{"class":38,"line":37208},[36,52896,37089],{"class":3943},[36,52898,52899],{"class":38,"line":37214},[36,52900,37095],{"class":3943},[36,52902,52903],{"class":38,"line":37220},[36,52904,37101],{"class":3943},[36,52906,52907,52909,52911,52913,52915,52917,52919],{"class":38,"line":37231},[36,52908,35315],{"class":42},[36,52910,4092],{"class":112},[36,52912,4253],{"class":42},[36,52914,498],{"class":112},[36,52916,4253],{"class":42},[36,52918,4092],{"class":112},[36,52920,922],{"class":42},[36,52922,52923],{"class":38,"line":37242},[36,52924,37124],{"class":3943},[36,52926,52927],{"class":38,"line":37248},[36,52928,37130],{"class":3943},[36,52930,52931],{"class":38,"line":37265},[36,52932,37136],{"class":3943},[36,52934,52935],{"class":38,"line":37288},[36,52936,37142],{"class":3943},[36,52938,52939],{"class":38,"line":37311},[36,52940,37148],{"class":3943},[36,52942,52943,52945,52947,52949,52951,52953,52955,52957,52959],{"class":38,"line":37317},[36,52944,37154],{"class":42},[36,52946,37157],{"class":105},[36,52948,37160],{"class":42},[36,52950,37163],{"class":105},[36,52952,4253],{"class":42},[36,52954,37168],{"class":468},[36,52956,47],{"class":46},[36,52958,37173],{"class":105},[36,52960,922],{"class":42},[36,52962,52963,52965,52967,52969,52971,52973,52975,52977,52979],{"class":38,"line":37322},[36,52964,37154],{"class":42},[36,52966,37157],{"class":105},[36,52968,37185],{"class":42},[36,52970,37188],{"class":105},[36,52972,4253],{"class":42},[36,52974,37168],{"class":468},[36,52976,47],{"class":46},[36,52978,37197],{"class":105},[36,52980,922],{"class":42},[36,52982,52983],{"class":38,"line":37331},[36,52984,37205],{"class":3943},[36,52986,52987],{"class":38,"line":37341},[36,52988,37211],{"class":42},[36,52990,52991],{"class":38,"line":37347},[36,52992,37217],{"class":3943},[36,52994,52995,52997,52999],{"class":38,"line":37352},[36,52996,37223],{"class":42},[36,52998,37226],{"class":105},[36,53000,922],{"class":42},[36,53002,53003,53005,53007],{"class":38,"line":37358},[36,53004,37234],{"class":42},[36,53006,37237],{"class":105},[36,53008,922],{"class":42},[36,53010,53011],{"class":38,"line":37371},[36,53012,37245],{"class":3943},[36,53014,53015,53017,53019,53021,53023,53025,53027],{"class":38,"line":37377},[36,53016,35315],{"class":42},[36,53018,4092],{"class":112},[36,53020,4253],{"class":42},[36,53022,498],{"class":112},[36,53024,4253],{"class":42},[36,53026,498],{"class":112},[36,53028,922],{"class":42},[36,53030,53031,53033,53035,53037,53039,53041,53043,53045,53047],{"class":38,"line":37388},[36,53032,37154],{"class":42},[36,53034,37157],{"class":105},[36,53036,37272],{"class":42},[36,53038,37163],{"class":105},[36,53040,4253],{"class":42},[36,53042,37168],{"class":468},[36,53044,47],{"class":46},[36,53046,37283],{"class":105},[36,53048,922],{"class":42},[36,53050,53051,53053,53055,53057,53059,53061,53063,53065,53067],{"class":38,"line":37399},[36,53052,37154],{"class":42},[36,53054,37157],{"class":105},[36,53056,37295],{"class":42},[36,53058,37188],{"class":105},[36,53060,4253],{"class":42},[36,53062,37168],{"class":468},[36,53064,47],{"class":46},[36,53066,37306],{"class":105},[36,53068,922],{"class":42},[36,53070,53071],{"class":38,"line":37418},[36,53072,37314],{"class":3943},[36,53074,53076],{"class":38,"line":53075},219,[36,53077,37211],{"class":42},[36,53079,53081,53083,53085],{"class":38,"line":53080},220,[36,53082,37223],{"class":42},[36,53084,37157],{"class":105},[36,53086,922],{"class":42},[36,53088,53090,53092,53094],{"class":38,"line":53089},221,[36,53091,37234],{"class":42},[36,53093,37336],{"class":105},[36,53095,922],{"class":42},[36,53097,53099],{"class":38,"line":53098},222,[36,53100,37344],{"class":42},[36,53102,53104],{"class":38,"line":53103},223,[36,53105,659],{"emptyLinePlaceholder":658},[36,53107,53109],{"class":38,"line":53108},224,[36,53110,37355],{"class":3943},[36,53112,53114,53116,53118,53120,53122],{"class":38,"line":53113},225,[36,53115,2067],{"class":46},[36,53117,2070],{"class":112},[36,53119,6652],{"class":46},[36,53121,34819],{"class":105},[36,53123,888],{"class":42},[36,53125,53127],{"class":38,"line":53126},226,[36,53128,37374],{"class":3943},[36,53130,53132,53134,53136],{"class":38,"line":53131},227,[36,53133,48104],{"class":42},[36,53135,47],{"class":46},[36,53137,48109],{"class":42},[36,53139,53141,53143,53145],{"class":38,"line":53140},228,[36,53142,37391],{"class":42},[36,53144,47],{"class":46},[36,53146,37396],{"class":42},[36,53148,53150,53152,53154,53156,53158,53160,53162],{"class":38,"line":53149},229,[36,53151,36953],{"class":42},[36,53153,47],{"class":46},[36,53155,48126],{"class":42},[36,53157,37409],{"class":468},[36,53159,47],{"class":46},[36,53161,4777],{"class":112},[36,53163,922],{"class":42},[36,53165,53167],{"class":38,"line":53166},230,[36,53168,37421],{"class":42},[25619,53170,53172],{"id":53171},"_242测试代码","2.4.2.测试代码",[19,53174,53175],{},"使用测试集进行测试与推理",[26,53177,53179],{"className":28,"code":53178,"language":30,"meta":31,"style":31},"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",[33,53180,53181,53187,53197,53207,53218,53228,53232,53236,53244,53249,53253,53270,53274,53278,53282,53286,53290,53322,53326,53334,53338,53350,53354,53358,53362,53366,53370,53374,53378,53382,53400,53414,53418,53428,53438,53448,53454,53458,53462,53470,53474,53490,53498,53502,53506,53514,53522,53526,53530,53534,53538,53544,53548,53558,53566,53574,53578,53582,53586,53594,53598,53614,53618,53622,53626,53638,53642,53654,53658,53662,53674,53678,53688,53692,53696,53708,53712,53720,53724,53728,53736,53740,53748,53752,53756,53760,53764,53768,53784,53792,53796,53800,53818,53824,53828,53838,53846,53854,53858,53862,53866,53870,53878,53882,53898,53902,53910,53918],{"__ignoreMap":31},[36,53182,53183,53185],{"class":38,"line":39},[36,53184,611],{"class":46},[36,53186,34000],{"class":42},[36,53188,53189,53191,53193,53195],{"class":38,"line":53},[36,53190,611],{"class":46},[36,53192,35005],{"class":42},[36,53194,617],{"class":46},[36,53196,35010],{"class":42},[36,53198,53199,53201,53203,53205],{"class":38,"line":196},[36,53200,645],{"class":46},[36,53202,34988],{"class":42},[36,53204,611],{"class":46},[36,53206,34993],{"class":42},[36,53208,53209,53211,53213,53215],{"class":38,"line":642},[36,53210,645],{"class":46},[36,53212,34961],{"class":42},[36,53214,611],{"class":46},[36,53216,53217],{"class":42}," ImageFolder\n",[36,53219,53220,53222,53224,53226],{"class":38,"line":655},[36,53221,645],{"class":46},[36,53223,35502],{"class":42},[36,53225,611],{"class":46},[36,53227,48198],{"class":42},[36,53229,53230],{"class":38,"line":662},[36,53231,659],{"emptyLinePlaceholder":658},[36,53233,53234],{"class":38,"line":667},[36,53235,37511],{"class":3943},[36,53237,53238,53240,53242],{"class":38,"line":679},[36,53239,1820],{"class":46},[36,53241,37518],{"class":101},[36,53243,35540],{"class":42},[36,53245,53246],{"class":38,"line":685},[36,53247,53248],{"class":3943},"   # 导入自己的数据集，并进行数据处理\n",[36,53250,53251],{"class":38,"line":691},[36,53252,51518],{"class":3943},[36,53254,53255,53257,53259,53261,53263,53265,53268],{"class":38,"line":696},[36,53256,51523],{"class":112},[36,53258,47],{"class":46},[36,53260,4541],{"class":46},[36,53262,4126],{"class":105},[36,53264,842],{"class":112},[36,53266,53267],{"class":51534},"\u002Fdata\u002Ftest",[36,53269,28747],{"class":105},[36,53271,53272],{"class":38,"line":702},[36,53273,659],{"emptyLinePlaceholder":658},[36,53275,53276],{"class":38,"line":708},[36,53277,51546],{"class":3943},[36,53279,53280],{"class":38,"line":713},[36,53281,51551],{"class":3943},[36,53283,53284],{"class":38,"line":719},[36,53285,51556],{"class":3943},[36,53287,53288],{"class":38,"line":725},[36,53289,51561],{"class":3943},[36,53291,53292,53294,53296,53298,53300,53302,53304,53306,53308,53310,53312,53314,53316,53318,53320],{"class":38,"line":731},[36,53293,51566],{"class":42},[36,53295,47],{"class":46},[36,53297,51571],{"class":42},[36,53299,51574],{"class":112},[36,53301,4253],{"class":42},[36,53303,51579],{"class":112},[36,53305,4253],{"class":42},[36,53307,51584],{"class":112},[36,53309,51587],{"class":42},[36,53311,51590],{"class":112},[36,53313,4253],{"class":42},[36,53315,51595],{"class":112},[36,53317,4253],{"class":42},[36,53319,51600],{"class":112},[36,53321,8353],{"class":42},[36,53323,53324],{"class":38,"line":736},[36,53325,51607],{"class":3943},[36,53327,53328,53330,53332],{"class":38,"line":742},[36,53329,51612],{"class":42},[36,53331,47],{"class":46},[36,53333,51617],{"class":42},[36,53335,53336],{"class":38,"line":748},[36,53337,51622],{"class":3943},[36,53339,53340,53342,53344,53346,53348],{"class":38,"line":754},[36,53341,51627],{"class":42},[36,53343,35090],{"class":112},[36,53345,4253],{"class":42},[36,53347,35090],{"class":112},[36,53349,46180],{"class":42},[36,53351,53352],{"class":38,"line":760},[36,53353,51640],{"class":3943},[36,53355,53356],{"class":38,"line":766},[36,53357,51645],{"class":42},[36,53359,53360],{"class":38,"line":772},[36,53361,51650],{"class":42},[36,53363,53364],{"class":38,"line":778},[36,53365,51655],{"class":3943},[36,53367,53368],{"class":38,"line":783},[36,53369,51660],{"class":3943},[36,53371,53372],{"class":38,"line":789},[36,53373,659],{"emptyLinePlaceholder":658},[36,53375,53376],{"class":38,"line":795},[36,53377,51669],{"class":3943},[36,53379,53380],{"class":38,"line":801},[36,53381,51674],{"class":3943},[36,53383,53384,53386,53388,53390,53392,53394,53396,53398],{"class":38,"line":807},[36,53385,37525],{"class":42},[36,53387,47],{"class":46},[36,53389,51683],{"class":42},[36,53391,51686],{"class":112},[36,53393,4253],{"class":42},[36,53395,51691],{"class":468},[36,53397,47],{"class":46},[36,53399,51696],{"class":42},[36,53401,53402,53404,53406,53408,53410,53412],{"class":38,"line":813},[36,53403,37582],{"class":42},[36,53405,47],{"class":46},[36,53407,35123],{"class":42},[36,53409,35126],{"class":468},[36,53411,47],{"class":46},[36,53413,37593],{"class":42},[36,53415,53416],{"class":38,"line":819},[36,53417,37598],{"class":3943},[36,53419,53420,53422,53424,53426],{"class":38,"line":824},[36,53421,37603],{"class":468},[36,53423,47],{"class":46},[36,53425,4092],{"class":112},[36,53427,35056],{"class":42},[36,53429,53430,53432,53434,53436],{"class":38,"line":829},[36,53431,37614],{"class":468},[36,53433,47],{"class":46},[36,53435,35066],{"class":112},[36,53437,35056],{"class":42},[36,53439,53440,53442,53444,53446],{"class":38,"line":851},[36,53441,37625],{"class":468},[36,53443,47],{"class":46},[36,53445,1859],{"class":112},[36,53447,922],{"class":42},[36,53449,53450,53452],{"class":38,"line":868},[36,53451,7788],{"class":46},[36,53453,37638],{"class":42},[36,53455,53456],{"class":38,"line":873},[36,53457,659],{"emptyLinePlaceholder":658},[36,53459,53460],{"class":38,"line":891},[36,53461,37647],{"class":3943},[36,53463,53464,53466,53468],{"class":38,"line":906},[36,53465,1820],{"class":46},[36,53467,37654],{"class":101},[36,53469,37657],{"class":42},[36,53471,53472],{"class":38,"line":925},[36,53473,37662],{"class":3943},[36,53475,53476,53478,53480,53482,53484,53486,53488],{"class":38,"line":943},[36,53477,34831],{"class":42},[36,53479,47],{"class":46},[36,53481,34838],{"class":105},[36,53483,5428],{"class":46},[36,53485,34843],{"class":42},[36,53487,5425],{"class":46},[36,53489,37679],{"class":105},[36,53491,53492,53494,53496],{"class":38,"line":948},[36,53493,34883],{"class":42},[36,53495,47],{"class":46},[36,53497,35875],{"class":42},[36,53499,53500],{"class":38,"line":971},[36,53501,659],{"emptyLinePlaceholder":658},[36,53503,53504],{"class":38,"line":992},[36,53505,37696],{"class":3943},[36,53507,53508,53510,53512],{"class":38,"line":1020},[36,53509,37701],{"class":42},[36,53511,47],{"class":46},[36,53513,35928],{"class":112},[36,53515,53516,53518,53520],{"class":38,"line":1036},[36,53517,37710],{"class":42},[36,53519,47],{"class":46},[36,53521,6787],{"class":112},[36,53523,53524],{"class":38,"line":1041},[36,53525,659],{"emptyLinePlaceholder":658},[36,53527,53528],{"class":38,"line":1052},[36,53529,37723],{"class":3943},[36,53531,53532],{"class":38,"line":1065},[36,53533,37728],{"class":3943},[36,53535,53536],{"class":38,"line":1077},[36,53537,37733],{"class":3943},[36,53539,53540,53542],{"class":38,"line":1082},[36,53541,37738],{"class":46},[36,53543,36444],{"class":42},[36,53545,53546],{"class":38,"line":1125},[36,53547,37745],{"class":3943},[36,53549,53550,53552,53554,53556],{"class":38,"line":1164},[36,53551,1613],{"class":46},[36,53553,37752],{"class":42},[36,53555,1619],{"class":46},[36,53557,37757],{"class":42},[36,53559,53560,53562,53564],{"class":38,"line":1169},[36,53561,37762],{"class":42},[36,53563,47],{"class":46},[36,53565,37767],{"class":42},[36,53567,53568,53570,53572],{"class":38,"line":1180},[36,53569,37772],{"class":42},[36,53571,47],{"class":46},[36,53573,37777],{"class":42},[36,53575,53576],{"class":38,"line":1198},[36,53577,37782],{"class":3943},[36,53579,53580],{"class":38,"line":1215},[36,53581,36435],{"class":42},[36,53583,53584],{"class":38,"line":1236},[36,53585,37791],{"class":3943},[36,53587,53588,53590,53592],{"class":38,"line":1245},[36,53589,36238],{"class":42},[36,53591,47],{"class":46},[36,53593,37800],{"class":42},[36,53595,53596],{"class":38,"line":1250},[36,53597,37805],{"class":3943},[36,53599,53600,53602,53604,53606,53608,53610,53612],{"class":38,"line":1265},[36,53601,36253],{"class":42},[36,53603,47],{"class":46},[36,53605,36258],{"class":42},[36,53607,36261],{"class":468},[36,53609,47],{"class":46},[36,53611,4092],{"class":112},[36,53613,922],{"class":42},[36,53615,53616],{"class":38,"line":1281},[36,53617,37826],{"class":3943},[36,53619,53620],{"class":38,"line":1297},[36,53621,37831],{"class":3943},[36,53623,53624],{"class":38,"line":1314},[36,53625,37836],{"class":3943},[36,53627,53628,53630,53632,53634,53636],{"class":38,"line":1336},[36,53629,37841],{"class":42},[36,53631,1658],{"class":46},[36,53633,36351],{"class":42},[36,53635,6652],{"class":46},[36,53637,37850],{"class":42},[36,53639,53640],{"class":38,"line":1356},[36,53641,37855],{"class":3943},[36,53643,53644,53646,53648,53650,53652],{"class":38,"line":1361},[36,53645,37860],{"class":42},[36,53647,1658],{"class":46},[36,53649,37865],{"class":42},[36,53651,1859],{"class":112},[36,53653,922],{"class":42},[36,53655,53656],{"class":38,"line":1407},[36,53657,659],{"emptyLinePlaceholder":658},[36,53659,53660],{"class":38,"line":1423},[36,53661,37878],{"class":3943},[36,53663,53664,53666,53668,53670,53672],{"class":38,"line":1439},[36,53665,37883],{"class":42},[36,53667,47],{"class":46},[36,53669,37888],{"class":42},[36,53671,4455],{"class":46},[36,53673,37893],{"class":42},[36,53675,53676],{"class":38,"line":1444},[36,53677,37898],{"class":3943},[36,53679,53680,53682,53684,53686],{"class":38,"line":1486},[36,53681,1960],{"class":112},[36,53683,495],{"class":42},[36,53685,37907],{"class":105},[36,53687,37910],{"class":42},[36,53689,53690],{"class":38,"line":1499},[36,53691,659],{"emptyLinePlaceholder":658},[36,53693,53694],{"class":38,"line":1513},[36,53695,37919],{"class":3943},[36,53697,53698,53700,53702,53704,53706],{"class":38,"line":1518},[36,53699,2067],{"class":46},[36,53701,2070],{"class":112},[36,53703,6652],{"class":46},[36,53705,34819],{"class":105},[36,53707,888],{"class":42},[36,53709,53710],{"class":38,"line":1529},[36,53711,37936],{"class":3943},[36,53713,53714,53716,53718],{"class":38,"line":1539},[36,53715,34883],{"class":42},[36,53717,47],{"class":46},[36,53719,48109],{"class":42},[36,53721,53722],{"class":38,"line":1544},[36,53723,37949],{"class":3943},[36,53725,53726],{"class":38,"line":1555},[36,53727,37954],{"class":3943},[36,53729,53730,53732,53734],{"class":38,"line":1572},[36,53731,37959],{"class":42},[36,53733,37962],{"class":105},[36,53735,2005],{"class":42},[36,53737,53738],{"class":38,"line":1592},[36,53739,37969],{"class":3943},[36,53741,53742,53744,53746],{"class":38,"line":1597},[36,53743,37582],{"class":42},[36,53745,47],{"class":46},[36,53747,37978],{"class":42},[36,53749,53750],{"class":38,"line":1610},[36,53751,37983],{"class":3943},[36,53753,53754],{"class":38,"line":1632},[36,53755,37988],{"class":42},[36,53757,53758],{"class":38,"line":1646},[36,53759,659],{"emptyLinePlaceholder":658},[36,53761,53762],{"class":38,"line":1651},[36,53763,37997],{"class":3943},[36,53765,53766],{"class":38,"line":1664},[36,53767,38002],{"class":3943},[36,53769,53770,53772,53774,53776,53778,53780,53782],{"class":38,"line":1669},[36,53771,34831],{"class":42},[36,53773,47],{"class":46},[36,53775,34838],{"class":105},[36,53777,5428],{"class":46},[36,53779,34843],{"class":42},[36,53781,5425],{"class":46},[36,53783,37679],{"class":105},[36,53785,53786,53788,53790],{"class":38,"line":1681},[36,53787,34883],{"class":42},[36,53789,47],{"class":46},[36,53791,35875],{"class":42},[36,53793,53794],{"class":38,"line":1694},[36,53795,38031],{"class":3943},[36,53797,53798],{"class":38,"line":1699},[36,53799,38036],{"class":3943},[36,53801,53802,53804,53806,53808,53811,53813,53816],{"class":38,"line":1714},[36,53803,38041],{"class":42},[36,53805,47],{"class":46},[36,53807,4760],{"class":42},[36,53809,53810],{"class":105},"'猫'",[36,53812,4253],{"class":42},[36,53814,53815],{"class":105},"'狗'",[36,53817,36806],{"class":42},[36,53819,53820,53822],{"class":38,"line":1729},[36,53821,37738],{"class":46},[36,53823,36444],{"class":42},[36,53825,53826],{"class":38,"line":1746},[36,53827,38106],{"class":3943},[36,53829,53830,53832,53834,53836],{"class":38,"line":1751},[36,53831,1613],{"class":46},[36,53833,38113],{"class":42},[36,53835,1619],{"class":46},[36,53837,37757],{"class":42},[36,53839,53840,53842,53844],{"class":38,"line":1765},[36,53841,36193],{"class":42},[36,53843,47],{"class":46},[36,53845,36198],{"class":42},[36,53847,53848,53850,53852],{"class":38,"line":1783},[36,53849,36208],{"class":42},[36,53851,47],{"class":46},[36,53853,36213],{"class":42},[36,53855,53856],{"class":38,"line":1799},[36,53857,659],{"emptyLinePlaceholder":658},[36,53859,53860],{"class":38,"line":1807},[36,53861,38142],{"class":3943},[36,53863,53864],{"class":38,"line":1812},[36,53865,36435],{"class":42},[36,53867,53868],{"class":38,"line":1817},[36,53869,38151],{"class":3943},[36,53871,53872,53874,53876],{"class":38,"line":1833},[36,53873,36238],{"class":42},[36,53875,47],{"class":46},[36,53877,36243],{"class":42},[36,53879,53880],{"class":38,"line":1844},[36,53881,38164],{"class":3943},[36,53883,53884,53886,53888,53890,53892,53894,53896],{"class":38,"line":1864},[36,53885,36253],{"class":42},[36,53887,47],{"class":46},[36,53889,36258],{"class":42},[36,53891,36261],{"class":468},[36,53893,47],{"class":46},[36,53895,4092],{"class":112},[36,53897,922],{"class":42},[36,53899,53900],{"class":38,"line":1878},[36,53901,38185],{"class":3943},[36,53903,53904,53906,53908],{"class":38,"line":1891},[36,53905,38190],{"class":42},[36,53907,47],{"class":46},[36,53909,38195],{"class":42},[36,53911,53912,53914,53916],{"class":38,"line":1896},[36,53913,38200],{"class":42},[36,53915,47],{"class":46},[36,53917,38205],{"class":42},[36,53919,53920,53922,53924,53926,53928,53930,53932,53934],{"class":38,"line":1906},[36,53921,38210],{"class":112},[36,53923,495],{"class":42},[36,53925,38215],{"class":105},[36,53927,38218],{"class":42},[36,53929,38221],{"class":105},[36,53931,4253],{"class":42},[36,53933,38226],{"class":105},[36,53935,38229],{"class":42},[3785,53937,53938],{},"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":31,"searchDepth":53,"depth":53,"links":53940},[53941,53942,53943,53944],{"id":34194,"depth":196,"text":34195},{"id":41399,"depth":196,"text":41400},{"id":44830,"depth":196,"text":44831},{"id":48839,"depth":196,"text":48840},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":34186,"description":26998},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":53951,"title":53952,"body":53953,"description":26998,"extension":3817,"meta":53960,"navigation":658,"path":53961,"seo":53962,"stem":53963,"__hash__":53964},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":53954,"toc":53958},[53955],[10,53956,53952],{"id":53957},"_3yolo模型学习",{"title":31,"searchDepth":53,"depth":53,"links":53959},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":53952,"description":26998},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":53966,"title":53967,"body":53968,"description":53975,"extension":3817,"meta":53976,"navigation":658,"path":53978,"seo":53979,"stem":53980,"__hash__":53981},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":53969,"toc":53973},[53970],[19,53971,53972],{},"yolo模型还未补充",{"title":31,"searchDepth":53,"depth":53,"links":53974},[],"深度学习学习",{"category":53977},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":53967,"description":53975},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":53983,"title":53984,"body":53985,"description":26998,"extension":3817,"meta":54010,"navigation":658,"path":54011,"seo":54012,"stem":54013,"__hash__":54014},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":53986,"toc":54008},[53987,53990,53993,53998,54005],[10,53988,53984],{"id":53989},"_1工具",[19,53991,53992],{},"提示错误插件：有问题会提前报错",[19,53994,53995],{},[5198,53996],{"alt":31,"src":53997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,53999,54000],{},[4113,54001,54004],{"href":54002,"rel":54003},"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",[27481],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,54006,54007],{},"alt键加上下箭头可以实现语句的移动",{"title":31,"searchDepth":53,"depth":53,"links":54009},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":53984,"description":26998},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":54016,"title":54017,"body":54018,"description":26998,"extension":3817,"meta":56882,"navigation":658,"path":56883,"seo":56884,"stem":56885,"__hash__":56886},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":54019,"toc":56833},[54020,54023,54027,54031,54036,54039,54044,54048,54055,54060,54067,54072,54079,54084,54088,54093,54096,54100,54105,54109,54114,54117,54120,54123,54126,54129,54132,54135,54138,54143,54148,54153,54157,54160,54163,54167,54172,54175,54183,54188,54205,54213,54218,54223,54228,54233,54238,54241,54246,54251,54255,54264,54269,54274,54278,54283,54286,54290,54295,54303,54308,54313,54316,54321,54326,54331,54334,54337,54340,54345,54350,54353,54358,54361,54366,54369,54372,54375,54380,54383,54386,54401,54406,54411,54416,54419,54422,54425,54439,54442,54447,54452,54455,54458,54461,54464,54467,54470,54473,54477,54481,54486,54490,54493,54498,54503,54506,54511,54514,54518,54523,54526,54529,54532,54535,54538,54541,54544,54547,54550,54554,54559,54564,54569,54572,54575,54579,54584,54587,54591,54594,54597,54602,54605,54608,54612,54616,54619,54624,54629,54632,54661,54666,54671,54676,54681,54685,54690,54694,54699,54702,54706,54710,54715,54719,54724,54729,54733,54738,54741,54743,54746,54751,54755,54760,54764,54768,54773,54778,54783,54788,54792,54797,54802,54807,54810,54813,54818,54821,54826,54831,54836,54841,54845,55652,55656,55999,56004,56007,56010,56013,56016,56019,56022,56025,56028,56030,56033,56035,56038,56042,56047,56050,56053,56056,56060,56065,56070,56090,56093,56097,56102,56107,56124,56128,56157,56161,56183,56185,56224,56232,56238,56242,56245,56248,56253,56258,56261,56264,56267,56272,56277,56280,56283,56286,56289,56292,56295,56298,56301,56304,56307,56310,56312,56315,56318,56321,56324,56327,56330,56333,56336,56340,56345,56348,56353,56356,56359,56362,56365,56368,56371,56374,56376,56379,56382,56385,56388,56391,56394,56398,56401,56410,56413,56418,56421,56426,56429,56432,56435,56438,56441,56444,56447,56451,56455,56458,56461,56466,56471,56476,56480,56485,56490,56493,56496,56499,56502,56505,56510,56513,56518,56520,56525,56528,56532,56537,56540,56543,56548,56552,56555,56560,56563,56566,56595,56600,56603,56606,56609,56612,56615,56619,56622,56708,56712,56715,56720,56725,56732,56735,56738,56741,56744,56747,56752,56757,56760,56763,56766,56769,56772,56775,56778,56781,56784,56786,56789,56793,56798,56803,56808,56811,56816,56821,56824,56827,56830],[10,54021,54017],{"id":54022},"_2基础语法",[14,54024,54026],{"id":54025},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[318,54028,54030],{"id":54029},"_211-js组成","2.1.1 js组成",[211,54032,54033],{},[214,54034,54035],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,54037,54038],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[211,54040,54041],{"start":53},[214,54042,54043],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[318,54045,54047],{"id":54046},"_212-js书写位置","2.1.2 js书写位置",[211,54049,54050],{},[214,54051,54052],{},[4027,54053,54054],{},"内部 JavaScript",[19,54056,54057],{},[5198,54058],{"alt":31,"src":54059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[211,54061,54062],{"start":53},[214,54063,54064],{},[4027,54065,54066],{},"外部 JavaScript",[19,54068,54069],{},[5198,54070],{"alt":31,"src":54071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[211,54073,54074],{"start":196},[214,54075,54076],{},[4027,54077,54078],{},"内联 JavaScript",[19,54080,54081],{},[5198,54082],{"alt":31,"src":54083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[318,54085,54087],{"id":54086},"_213-javascript注释","2.1.3 JavaScript注释",[19,54089,54090],{},[5198,54091],{"alt":31,"src":54092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,54094,54095],{},"alt+shift+a一定要记住！",[318,54097,54099],{"id":54098},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,54101,54102],{},[5198,54103],{"alt":31,"src":54104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[318,54106,54108],{"id":54107},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[211,54110,54111],{},[214,54112,54113],{},"输出语法：",[19,54115,54116],{},"①document.write('要出的内容')",[19,54118,54119],{},"向body内输出内容；",[19,54121,54122],{},"如果输出的内容写的是标签，也会被解析cheng",[19,54124,54125],{},"②alert('要出的内容')",[19,54127,54128],{},"页面弹出警告对话框",[19,54130,54131],{},"③console.log('控制台打印')",[19,54133,54134],{},"控制台输出语法，程序员调试使用",[19,54136,54137],{},"输入log就行，自动生成：",[19,54139,54140],{},[5198,54141],{"alt":31,"src":54142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[211,54144,54145],{"start":53},[214,54146,54147],{},"输入语法：",[19,54149,54150],{},[5198,54151],{"alt":31,"src":54152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[318,54154,54156],{"id":54155},"_2116-字面量","21.1.6 字面量",[19,54158,54159],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,54161,54162],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,54164,54166],{"id":54165},"_22-变量","2.2 变量",[211,54168,54169],{},[214,54170,54171],{},"变量声明",[19,54173,54174],{},"let 变量名",[4875,54176,54177,54180],{},[214,54178,54179],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[214,54181,54182],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[211,54184,54185],{"start":53},[214,54186,54187],{},"变量赋值",[26,54189,54193],{"className":54190,"code":54191,"language":54192,"meta":31,"style":31},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[33,54194,54195,54200],{"__ignoreMap":31},[36,54196,54197],{"class":38,"line":39},[36,54198,54199],{"class":42},"let age\n",[36,54201,54202],{"class":38,"line":53},[36,54203,54204],{"class":42},"age=18\n",[211,54206,54207,54210],{"start":196},[214,54208,54209],{},"连这些（变量的初始化）：let age=18",[214,54211,54212],{},"更新变量",[19,54214,54215],{},[5198,54216],{"alt":31,"src":54217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[211,54219,54220],{"start":655},[214,54221,54222],{},"声明多个变量",[19,54224,54225],{},[5198,54226],{"alt":31,"src":54227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[211,54229,54230],{"start":662},[214,54231,54232],{},"变量命名规则与规范",[19,54234,54235],{},[5198,54236],{"alt":31,"src":54237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,54239,54240],{},"遵守小驼峰！",[211,54242,54243],{"start":667},[214,54244,54245],{},"变量拓展-let和var的区别",[19,54247,54248],{},[5198,54249],{"alt":31,"src":54250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,54252,54254],{"id":54253},"_23-数组","2.3 数组",[26,54256,54258],{"className":54190,"code":54257,"language":54192,"meta":31,"style":31},"let arr = []\n",[33,54259,54260],{"__ignoreMap":31},[36,54261,54262],{"class":38,"line":39},[36,54263,54257],{"class":42},[19,54265,54266],{},[5198,54267],{"alt":31,"src":54268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,54270,54271],{},[5198,54272],{"alt":31,"src":54273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,54275,54277],{"id":54276},"_24-常量","2.4 常量",[19,54279,54280],{},[5198,54281],{"alt":31,"src":54282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,54284,54285],{},"const — 类似于 let ，但是变量的值无法被修改",[14,54287,54289],{"id":54288},"_25-数据类型","2.5 数据类型",[19,54291,54292],{},[5198,54293],{"alt":31,"src":54294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[211,54296,54297,54300],{},[214,54298,54299],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[214,54301,54302],{},"算数运算符：",[19,54304,54305],{},[5198,54306],{"alt":31,"src":54307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[211,54309,54310],{"start":196},[214,54311,54312],{},"数字类型（Number）",[19,54314,54315],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,54317,54318],{},[5198,54319],{"alt":31,"src":54320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[211,54322,54323],{"start":642},[214,54324,54325],{},"字符串类型（string）",[19,54327,54328],{},[5198,54329],{"alt":31,"src":54330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,54332,54333],{},"反引号也是可以使用的",[19,54335,54336],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,54338,54339],{},"例如：document.write(\"我今年\"+age+\"岁\")",[211,54341,54342],{"start":655},[214,54343,54344],{},"模板字符串",[19,54346,54347],{},[5198,54348],{"alt":31,"src":54349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,54351,54352],{},"类似于python的字符串格式化",[211,54354,54355],{"start":662},[214,54356,54357],{},"布尔类型",[19,54359,54360],{},"true 和 false",[211,54362,54363],{"start":667},[214,54364,54365],{},"未定义类型（underfined）",[19,54367,54368],{},"表示没有赋值",[19,54370,54371],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,54373,54374],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[211,54376,54377],{"start":679},[214,54378,54379],{},"null（空类型）",[19,54381,54382],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,54384,54385],{},"赋值了，但是内容为空",[26,54387,54389],{"className":54190,"code":54388,"language":54192,"meta":31,"style":31},"typeof null\n输出的是'object'，是一个对象数据类型\n",[33,54390,54391,54396],{"__ignoreMap":31},[36,54392,54393],{"class":38,"line":39},[36,54394,54395],{"class":42},"typeof null\n",[36,54397,54398],{"class":38,"line":53},[36,54399,54400],{"class":42},"输出的是'object'，是一个对象数据类型\n",[211,54402,54403],{"start":685},[214,54404,54405],{},"控制台检测数据类型",[19,54407,54408],{},[5198,54409],{"alt":31,"src":54410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[211,54412,54413],{"start":691},[214,54414,54415],{},"类型转换",[19,54417,54418],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,54420,54421],{},"转换方式：隐式转换和显示转换",[19,54423,54424],{},"①隐式转换",[4875,54426,54427,54430,54433,54436],{},[214,54428,54429],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[214,54431,54432],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[214,54434,54435],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[214,54437,54438],{},"任何数据和字符串相加结果都是字符串",[19,54440,54441],{},"②显示转换",[19,54443,54444],{},[5198,54445],{"alt":31,"src":54446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,54448,54449],{},[5198,54450],{"alt":31,"src":54451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,54453,54454],{},"在输入的时候要用好隐式转换，简单写起来",[19,54456,54457],{},"let num = +prompt(’请输入数字：‘)",[19,54459,54460],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,54462,54463],{},"console.log(parseInt('12.333px'))",[19,54465,54466],{},"输出为：12",[19,54468,54469],{},"console.log(parseInt('a'a'a12.333px'))",[19,54471,54472],{},"输出：NaN",[14,54474,54476],{"id":54475},"_26-运算符","2.6 运算符",[318,54478,54480],{"id":54479},"_261-赋值运算符","2.6.1 赋值运算符",[19,54482,54483],{},[5198,54484],{"alt":31,"src":54485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[318,54487,54489],{"id":54488},"_262-一元运算符","2.6.2 一元运算符",[19,54491,54492],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,54494,54495],{},[5198,54496],{"alt":31,"src":54497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,54499,54500],{},[5198,54501],{"alt":31,"src":54502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,54504,54505],{},"两者的区别：",[19,54507,54508],{},[5198,54509],{"alt":31,"src":54510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,54512,54513],{},"前置先自加；后置后加，代码执行完之后再加",[318,54515,54517],{"id":54516},"_263-比较运算符","2.6.3 比较运算符",[19,54519,54520],{},[5198,54521],{"alt":31,"src":54522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,54524,54525],{},"比较运算符也有隐式转换",[19,54527,54528],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,54530,54531],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,54533,54534],{},"要使用三等，开发的时候",[19,54536,54537],{},"NaN不等于任何人，包括它自己",[19,54539,54540],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,54542,54543],{},"7\u002F10=0.7",[19,54545,54546],{},"最后：0.5+0.2=0.7",[19,54548,54549],{},"字符串比较，比较的是字符对应的ASCII码",[318,54551,54553],{"id":54552},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,54555,54556],{},[5198,54557],{"alt":31,"src":54558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,54560,54561],{},[5198,54562],{"alt":31,"src":54563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,54565,54566],{},[5198,54567],{"alt":31,"src":54568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,54570,54571],{},"上述题目选D",[19,54573,54574],{},"与真2假1；或真1假2",[318,54576,54578],{"id":54577},"_265-运算符优先级","2.6.5 运算符优先级",[19,54580,54581],{},[5198,54582],{"alt":31,"src":54583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,54585,54586],{},"先算逻辑与，后算逻辑或",[14,54588,54590],{"id":54589},"_27-语句","2.7 语句",[19,54592,54593],{},"表达式：是可以被求值的代码，会有结果给我们",[19,54595,54596],{},"语句：语句是可以被执行的代码，例如prompt()",[19,54598,54599],{},[5198,54600],{"alt":31,"src":54601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,54603,54604],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,54606,54607],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[318,54609,54611],{"id":54610},"_271-分支语句","2.7.1 分支语句",[25619,54613,54615],{"id":54614},"_2711-if分支语句","2.7.1.1 if分支语句",[19,54617,54618],{},"if语句单行简单的话，可以不写{}，写在一行就行",[211,54620,54621],{},[214,54622,54623],{},"单分支语句",[19,54625,54626],{},[5198,54627],{"alt":31,"src":54628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,54630,54631],{},"除了0，所有数字都为真",[26,54633,54635],{"className":54190,"code":54634,"language":54192,"meta":31,"style":31},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[33,54636,54637,54642,54647,54652,54656],{"__ignoreMap":31},[36,54638,54639],{"class":38,"line":39},[36,54640,54641],{"class":42},"if（0) {\n",[36,54643,54644],{"class":38,"line":53},[36,54645,54646],{"class":42},"    let a=1\n",[36,54648,54649],{"class":38,"line":196},[36,54650,54651],{"class":42},"    alert(typeof a)\n",[36,54653,54654],{"class":38,"line":642},[36,54655,5300],{"class":42},[36,54657,54658],{"class":38,"line":655},[36,54659,54660],{"class":42},"不输出，括号为假\n",[211,54662,54663],{"start":53},[214,54664,54665],{},"双分支语句",[19,54667,54668],{},[5198,54669],{"alt":31,"src":54670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[211,54672,54673],{"start":196},[214,54674,54675],{},"多分支语句",[19,54677,54678],{},[5198,54679],{"alt":31,"src":54680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[25619,54682,54684],{"id":54683},"_2712-三元运算符","2.7.1.2 三元运算符",[19,54686,54687],{},[5198,54688],{"alt":31,"src":54689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[25619,54691,54693],{"id":54692},"_2713-switch语句","2.7.1.3 switch语句",[19,54695,54696],{},[5198,54697],{"alt":31,"src":54698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,54700,54701],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[318,54703,54705],{"id":54704},"_272-循环语句","2.7.2 循环语句",[25619,54707,54709],{"id":54708},"_2721-断点演示","2.7.2.1 断点演示",[19,54711,54712],{},[5198,54713],{"alt":31,"src":54714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[25619,54716,54718],{"id":54717},"_2722-while循环","2.7.2.2 while循环",[19,54720,54721],{},[5198,54722],{"alt":31,"src":54723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,54725,54726],{},[5198,54727],{"alt":31,"src":54728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[25619,54730,54732],{"id":54731},"_2723-for循环","2.7.2.3 for循环",[19,54734,54735],{},[5198,54736],{"alt":31,"src":54737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,54739,54740],{},"for(;;) {",[19,54742,4815],{},[19,54744,54745],{},"表示无限循环",[19,54747,54748],{},[5198,54749],{"alt":31,"src":54750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[25619,54752,54754],{"id":54753},"_2724-循环的退出","2.7.2.4 循环的退出",[19,54756,54757],{},[5198,54758],{"alt":31,"src":54759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,54761,54763],{"id":54762},"_28-数组","2.8 数组",[318,54765,54767],{"id":54766},"_281-基础认识","2.8.1 基础认识",[19,54769,54770],{},[5198,54771],{"alt":31,"src":54772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,54774,54775],{},[5198,54776],{"alt":31,"src":54777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,54779,54780],{},[5198,54781],{"alt":31,"src":54782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,54784,54785],{},[5198,54786],{"alt":31,"src":54787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[318,54789,54791],{"id":54790},"_282-操作数组","2.8.2 操作数组",[19,54793,54794],{},[5198,54795],{"alt":31,"src":54796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[211,54798,54799],{},[214,54800,54801],{},"添加元素",[19,54803,54804],{},[5198,54805],{"alt":31,"src":54806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,54808,54809],{},"console.log(arr.push('green'))",[19,54811,54812],{},"输出结果：为新数组的长度",[19,54814,54815],{},[5198,54816],{"alt":31,"src":54817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,54819,54820],{},"push用的非常多，一定要记住",[211,54822,54823],{},[214,54824,54825],{},"删除元素",[19,54827,54828],{},[5198,54829],{"alt":31,"src":54830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,54832,54833],{},[5198,54834],{"alt":31,"src":54835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,54837,54838],{},[5198,54839],{"alt":31,"src":54840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[318,54842,54844],{"id":54843},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[26,54846,54848],{"className":54190,"code":54847,"language":54192,"meta":31,"style":31},"\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",[33,54849,54850,54865,54881,54885,54894,54912,54936,54958,54972,54980,54987,54999,55010,55014,55018,55025,55037,55052,55065,55084,55101,55116,55128,55140,55152,55156,55160,55171,55181,55193,55205,55217,55228,55232,55236,55248,55252,55266,55270,55274,55285,55299,55311,55325,55329,55338,55347,55351,55360,55364,55373,55378,55383,55396,55424,55429,55434,55459,55464,55468,55473,55478,55493,55497,55502,55532,55544,55560,55576,55590,55595,55602,55606,55611,55624,55632,55640,55644],{"__ignoreMap":31},[36,54851,54852,54855,54859,54862],{"class":38,"line":39},[36,54853,54854],{"class":42},"\u003C!",[36,54856,54858],{"class":54857},"s9eBZ","DOCTYPE",[36,54860,54861],{"class":101}," html",[36,54863,54864],{"class":42},">\n",[36,54866,54867,54869,54871,54874,54876,54879],{"class":38,"line":53},[36,54868,393],{"class":42},[36,54870,54192],{"class":54857},[36,54872,54873],{"class":101}," lang",[36,54875,47],{"class":42},[36,54877,54878],{"class":105},"\"en\"",[36,54880,54864],{"class":42},[36,54882,54883],{"class":38,"line":196},[36,54884,659],{"emptyLinePlaceholder":658},[36,54886,54887,54889,54892],{"class":38,"line":642},[36,54888,393],{"class":42},[36,54890,54891],{"class":54857},"head",[36,54893,54864],{"class":42},[36,54895,54896,54899,54902,54905,54907,54910],{"class":38,"line":655},[36,54897,54898],{"class":42},"    \u003C",[36,54900,54901],{"class":54857},"meta",[36,54903,54904],{"class":101}," charset",[36,54906,47],{"class":42},[36,54908,54909],{"class":105},"\"UTF-8\"",[36,54911,54864],{"class":42},[36,54913,54914,54916,54918,54921,54923,54926,54929,54931,54934],{"class":38,"line":662},[36,54915,54898],{"class":42},[36,54917,54901],{"class":54857},[36,54919,54920],{"class":101}," http-equiv",[36,54922,47],{"class":42},[36,54924,54925],{"class":105},"\"X-UA-Compatible\"",[36,54927,54928],{"class":101}," content",[36,54930,47],{"class":42},[36,54932,54933],{"class":105},"\"IE=edge\"",[36,54935,54864],{"class":42},[36,54937,54938,54940,54942,54944,54946,54949,54951,54953,54956],{"class":38,"line":667},[36,54939,54898],{"class":42},[36,54941,54901],{"class":54857},[36,54943,18576],{"class":101},[36,54945,47],{"class":42},[36,54947,54948],{"class":105},"\"viewport\"",[36,54950,54928],{"class":101},[36,54952,47],{"class":42},[36,54954,54955],{"class":105},"\"width=device-width, initial-scale=1.0\"",[36,54957,54864],{"class":42},[36,54959,54960,54962,54965,54968,54970],{"class":38,"line":679},[36,54961,54898],{"class":42},[36,54963,54964],{"class":54857},"title",[36,54966,54967],{"class":42},">Document\u003C\u002F",[36,54969,54964],{"class":54857},[36,54971,54864],{"class":42},[36,54973,54974,54976,54978],{"class":38,"line":685},[36,54975,54898],{"class":42},[36,54977,3785],{"class":54857},[36,54979,54864],{"class":42},[36,54981,54982,54985],{"class":38,"line":691},[36,54983,54984],{"class":54857},"        *",[36,54986,19228],{"class":42},[36,54988,54989,54992,54995,54997],{"class":38,"line":696},[36,54990,54991],{"class":112},"            margin",[36,54993,54994],{"class":42},": ",[36,54996,1859],{"class":112},[36,54998,5029],{"class":42},[36,55000,55001,55004,55006,55008],{"class":38,"line":702},[36,55002,55003],{"class":112},"            padding",[36,55005,54994],{"class":42},[36,55007,1859],{"class":112},[36,55009,5029],{"class":42},[36,55011,55012],{"class":38,"line":708},[36,55013,6239],{"class":42},[36,55015,55016],{"class":38,"line":713},[36,55017,659],{"emptyLinePlaceholder":658},[36,55019,55020,55023],{"class":38,"line":719},[36,55021,55022],{"class":101},"        .box",[36,55024,19228],{"class":42},[36,55026,55027,55030,55032,55035],{"class":38,"line":725},[36,55028,55029],{"class":112},"            display",[36,55031,54994],{"class":42},[36,55033,55034],{"class":112},"flex",[36,55036,5029],{"class":42},[36,55038,55039,55042,55044,55047,55050],{"class":38,"line":731},[36,55040,55041],{"class":112},"            width",[36,55043,54994],{"class":42},[36,55045,55046],{"class":112},"700",[36,55048,55049],{"class":46},"px",[36,55051,5029],{"class":42},[36,55053,55054,55057,55059,55061,55063],{"class":38,"line":736},[36,55055,55056],{"class":112},"            height",[36,55058,54994],{"class":42},[36,55060,7671],{"class":112},[36,55062,55049],{"class":46},[36,55064,5029],{"class":42},[36,55066,55067,55070,55072,55074,55076,55079,55082],{"class":38,"line":742},[36,55068,55069],{"class":112},"            border-left",[36,55071,54994],{"class":42},[36,55073,4092],{"class":112},[36,55075,55049],{"class":46},[36,55077,55078],{"class":112}," solid",[36,55080,55081],{"class":112}," pink",[36,55083,5029],{"class":42},[36,55085,55086,55089,55091,55093,55095,55097,55099],{"class":38,"line":748},[36,55087,55088],{"class":112},"            border-bottom",[36,55090,54994],{"class":42},[36,55092,4092],{"class":112},[36,55094,55049],{"class":46},[36,55096,55078],{"class":112},[36,55098,55081],{"class":112},[36,55100,5029],{"class":42},[36,55102,55103,55105,55107,55109,55111,55114],{"class":38,"line":754},[36,55104,54991],{"class":112},[36,55106,54994],{"class":42},[36,55108,4527],{"class":112},[36,55110,55049],{"class":46},[36,55112,55113],{"class":112}," auto",[36,55115,5029],{"class":42},[36,55117,55118,55121,55123,55126],{"class":38,"line":760},[36,55119,55120],{"class":112},"            justify-content",[36,55122,54994],{"class":42},[36,55124,55125],{"class":112},"space-around",[36,55127,5029],{"class":42},[36,55129,55130,55133,55135,55138],{"class":38,"line":766},[36,55131,55132],{"class":112},"            align-items",[36,55134,54994],{"class":42},[36,55136,55137],{"class":112},"flex-end",[36,55139,5029],{"class":42},[36,55141,55142,55145,55147,55150],{"class":38,"line":772},[36,55143,55144],{"class":112},"            text-align",[36,55146,54994],{"class":42},[36,55148,55149],{"class":112},"center",[36,55151,5029],{"class":42},[36,55153,55154],{"class":38,"line":778},[36,55155,6239],{"class":42},[36,55157,55158],{"class":38,"line":783},[36,55159,659],{"emptyLinePlaceholder":658},[36,55161,55162,55164,55166,55169],{"class":38,"line":789},[36,55163,55022],{"class":101},[36,55165,4829],{"class":46},[36,55167,55168],{"class":54857},"div",[36,55170,19228],{"class":42},[36,55172,55173,55175,55177,55179],{"class":38,"line":795},[36,55174,55029],{"class":112},[36,55176,54994],{"class":42},[36,55178,55034],{"class":112},[36,55180,5029],{"class":42},[36,55182,55183,55185,55187,55189,55191],{"class":38,"line":801},[36,55184,55041],{"class":112},[36,55186,54994],{"class":42},[36,55188,4527],{"class":112},[36,55190,55049],{"class":46},[36,55192,5029],{"class":42},[36,55194,55195,55198,55200,55203],{"class":38,"line":807},[36,55196,55197],{"class":112},"            background-color",[36,55199,54994],{"class":42},[36,55201,55202],{"class":112},"pink",[36,55204,5029],{"class":42},[36,55206,55207,55210,55212,55215],{"class":38,"line":813},[36,55208,55209],{"class":112},"            flex-direction",[36,55211,54994],{"class":42},[36,55213,55214],{"class":112},"column",[36,55216,5029],{"class":42},[36,55218,55219,55221,55223,55226],{"class":38,"line":819},[36,55220,55120],{"class":112},[36,55222,54994],{"class":42},[36,55224,55225],{"class":112},"space-between",[36,55227,5029],{"class":42},[36,55229,55230],{"class":38,"line":824},[36,55231,6239],{"class":42},[36,55233,55234],{"class":38,"line":829},[36,55235,659],{"emptyLinePlaceholder":658},[36,55237,55238,55240,55243,55246],{"class":38,"line":851},[36,55239,55022],{"class":101},[36,55241,55242],{"class":54857}," div",[36,55244,55245],{"class":54857}," span",[36,55247,19228],{"class":42},[36,55249,55250],{"class":38,"line":868},[36,55251,659],{"emptyLinePlaceholder":658},[36,55253,55254,55257,55259,55262,55264],{"class":38,"line":873},[36,55255,55256],{"class":112},"            margin-top",[36,55258,54994],{"class":42},[36,55260,55261],{"class":112},"-20",[36,55263,55049],{"class":46},[36,55265,5029],{"class":42},[36,55267,55268],{"class":38,"line":891},[36,55269,6239],{"class":42},[36,55271,55272],{"class":38,"line":906},[36,55273,659],{"emptyLinePlaceholder":658},[36,55275,55276,55278,55280,55283],{"class":38,"line":925},[36,55277,55022],{"class":101},[36,55279,55242],{"class":54857},[36,55281,55282],{"class":54857}," h4",[36,55284,19228],{"class":42},[36,55286,55287,55290,55292,55295,55297],{"class":38,"line":943},[36,55288,55289],{"class":112},"            margin-bottom",[36,55291,54994],{"class":42},[36,55293,55294],{"class":112},"-35",[36,55296,55049],{"class":46},[36,55298,5029],{"class":42},[36,55300,55301,55303,55305,55307,55309],{"class":38,"line":948},[36,55302,55041],{"class":112},[36,55304,54994],{"class":42},[36,55306,4231],{"class":112},[36,55308,55049],{"class":46},[36,55310,5029],{"class":42},[36,55312,55313,55316,55318,55321,55323],{"class":38,"line":971},[36,55314,55315],{"class":112},"            margin-left",[36,55317,54994],{"class":42},[36,55319,55320],{"class":112},"-10",[36,55322,55049],{"class":46},[36,55324,5029],{"class":42},[36,55326,55327],{"class":38,"line":992},[36,55328,6239],{"class":42},[36,55330,55331,55334,55336],{"class":38,"line":1020},[36,55332,55333],{"class":42},"    \u003C\u002F",[36,55335,3785],{"class":54857},[36,55337,54864],{"class":42},[36,55339,55340,55343,55345],{"class":38,"line":1036},[36,55341,55342],{"class":42},"\u003C\u002F",[36,55344,54891],{"class":54857},[36,55346,54864],{"class":42},[36,55348,55349],{"class":38,"line":1041},[36,55350,659],{"emptyLinePlaceholder":658},[36,55352,55353,55355,55358],{"class":38,"line":1052},[36,55354,393],{"class":42},[36,55356,55357],{"class":54857},"body",[36,55359,54864],{"class":42},[36,55361,55362],{"class":38,"line":1065},[36,55363,659],{"emptyLinePlaceholder":658},[36,55365,55366,55368,55371],{"class":38,"line":1077},[36,55367,54898],{"class":42},[36,55369,55370],{"class":54857},"script",[36,55372,54864],{"class":42},[36,55374,55375],{"class":38,"line":1082},[36,55376,55377],{"class":3943},"        \u002F\u002F 1. 四次弹框效果\n",[36,55379,55380],{"class":38,"line":1125},[36,55381,55382],{"class":3943},"        \u002F\u002F 声明一个新的数组\n",[36,55384,55385,55388,55391,55393],{"class":38,"line":1164},[36,55386,55387],{"class":46},"        let",[36,55389,55390],{"class":42}," arr ",[36,55392,47],{"class":46},[36,55394,55395],{"class":42}," []\n",[36,55397,55398,55400,55402,55405,55407,55409,55411,55413,55415,55418,55420,55422],{"class":38,"line":1169},[36,55399,1613],{"class":46},[36,55401,5386],{"class":42},[36,55403,55404],{"class":46},"let",[36,55406,13119],{"class":42},[36,55408,47],{"class":46},[36,55410,28732],{"class":112},[36,55412,13126],{"class":42},[36,55414,5323],{"class":46},[36,55416,55417],{"class":112}," 4",[36,55419,6914],{"class":42},[36,55421,6004],{"class":46},[36,55423,16102],{"class":42},[36,55425,55426],{"class":38,"line":1180},[36,55427,55428],{"class":3943},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[36,55430,55431],{"class":38,"line":1198},[36,55432,55433],{"class":3943},"            \u002F\u002F arr.push(num)\n",[36,55435,55436,55439,55442,55444,55447,55449,55452,55454,55457],{"class":38,"line":1215},[36,55437,55438],{"class":42},"            arr.",[36,55440,55441],{"class":101},"push",[36,55443,495],{"class":42},[36,55445,55446],{"class":101},"prompt",[36,55448,495],{"class":42},[36,55450,55451],{"class":105},"`请输入第${",[36,55453,4316],{"class":42},[36,55455,55456],{"class":105},"}季度的数据:`",[36,55458,2005],{"class":42},[36,55460,55461],{"class":38,"line":1236},[36,55462,55463],{"class":3943},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[36,55465,55466],{"class":38,"line":1245},[36,55467,6239],{"class":42},[36,55469,55470],{"class":38,"line":1250},[36,55471,55472],{"class":3943},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[36,55474,55475],{"class":38,"line":1265},[36,55476,55477],{"class":3943},"        \u002F\u002F 盒子开头\n",[36,55479,55480,55483,55486,55488,55491],{"class":38,"line":1281},[36,55481,55482],{"class":42},"        document.",[36,55484,55485],{"class":101},"write",[36,55487,495],{"class":42},[36,55489,55490],{"class":105},"` \u003Cdiv class=\"box\">`",[36,55492,922],{"class":42},[36,55494,55495],{"class":38,"line":1297},[36,55496,659],{"emptyLinePlaceholder":658},[36,55498,55499],{"class":38,"line":1314},[36,55500,55501],{"class":3943},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[36,55503,55504,55506,55508,55510,55512,55514,55516,55518,55520,55523,55526,55528,55530],{"class":38,"line":1336},[36,55505,1613],{"class":46},[36,55507,5386],{"class":42},[36,55509,55404],{"class":46},[36,55511,13119],{"class":42},[36,55513,47],{"class":46},[36,55515,1004],{"class":112},[36,55517,13126],{"class":42},[36,55519,393],{"class":46},[36,55521,55522],{"class":42}," arr.",[36,55524,55525],{"class":112},"length",[36,55527,6914],{"class":42},[36,55529,6004],{"class":46},[36,55531,16102],{"class":42},[36,55533,55534,55537,55539,55541],{"class":38,"line":1356},[36,55535,55536],{"class":42},"            document.",[36,55538,55485],{"class":101},[36,55540,495],{"class":42},[36,55542,55543],{"class":105},"`\n",[36,55545,55546,55549,55551,55553,55555,55557],{"class":38,"line":1361},[36,55547,55548],{"class":105},"              \u003Cdiv style=\"height: ${",[36,55550,7578],{"class":42},[36,55552,4760],{"class":105},[36,55554,4316],{"class":42},[36,55556,4809],{"class":105},[36,55558,55559],{"class":105},"}px;\">\n",[36,55561,55562,55565,55567,55569,55571,55573],{"class":38,"line":1407},[36,55563,55564],{"class":105},"                \u003Cspan>${",[36,55566,7578],{"class":42},[36,55568,4760],{"class":105},[36,55570,4316],{"class":42},[36,55572,4809],{"class":105},[36,55574,55575],{"class":105},"}\u003C\u002Fspan>\n",[36,55577,55578,55581,55583,55585,55587],{"class":38,"line":1423},[36,55579,55580],{"class":105},"                \u003Ch4>第${",[36,55582,4316],{"class":42},[36,55584,49124],{"class":46},[36,55586,28732],{"class":112},[36,55588,55589],{"class":105},"}季度\u003C\u002Fh4>\n",[36,55591,55592],{"class":38,"line":1439},[36,55593,55594],{"class":105},"              \u003C\u002Fdiv>          \n",[36,55596,55597,55600],{"class":38,"line":1444},[36,55598,55599],{"class":105},"            `",[36,55601,922],{"class":42},[36,55603,55604],{"class":38,"line":1486},[36,55605,6239],{"class":42},[36,55607,55608],{"class":38,"line":1499},[36,55609,55610],{"class":3943},"        \u002F\u002F 盒子结尾\n",[36,55612,55613,55615,55617,55619,55622],{"class":38,"line":1513},[36,55614,55482],{"class":42},[36,55616,55485],{"class":101},[36,55618,495],{"class":42},[36,55620,55621],{"class":105},"` \u003C\u002Fdiv>`",[36,55623,922],{"class":42},[36,55625,55626,55628,55630],{"class":38,"line":1518},[36,55627,55333],{"class":42},[36,55629,55370],{"class":54857},[36,55631,54864],{"class":42},[36,55633,55634,55636,55638],{"class":38,"line":1529},[36,55635,55342],{"class":42},[36,55637,55357],{"class":54857},[36,55639,54864],{"class":42},[36,55641,55642],{"class":38,"line":1539},[36,55643,659],{"emptyLinePlaceholder":658},[36,55645,55646,55648,55650],{"class":38,"line":1544},[36,55647,55342],{"class":42},[36,55649,54192],{"class":54857},[36,55651,54864],{"class":42},[318,55653,55655],{"id":55654},"_284-冒泡排序","2.8.4 冒泡排序",[26,55657,55659],{"className":54190,"code":55658,"language":54192,"meta":31,"style":31},"\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",[33,55660,55661,55671,55685,55689,55697,55712,55732,55744,55752,55756,55764,55772,55804,55837,55874,55879,55898,55903,55916,55931,55947,55951,55956,55960,55970,55979,55987,55991],{"__ignoreMap":31},[36,55662,55663,55665,55667,55669],{"class":38,"line":39},[36,55664,54854],{"class":42},[36,55666,54858],{"class":54857},[36,55668,54861],{"class":101},[36,55670,54864],{"class":42},[36,55672,55673,55675,55677,55679,55681,55683],{"class":38,"line":53},[36,55674,393],{"class":42},[36,55676,54192],{"class":54857},[36,55678,54873],{"class":101},[36,55680,47],{"class":42},[36,55682,54878],{"class":105},[36,55684,54864],{"class":42},[36,55686,55687],{"class":38,"line":196},[36,55688,659],{"emptyLinePlaceholder":658},[36,55690,55691,55693,55695],{"class":38,"line":642},[36,55692,393],{"class":42},[36,55694,54891],{"class":54857},[36,55696,54864],{"class":42},[36,55698,55699,55702,55704,55706,55708,55710],{"class":38,"line":655},[36,55700,55701],{"class":42},"  \u003C",[36,55703,54901],{"class":54857},[36,55705,54904],{"class":101},[36,55707,47],{"class":42},[36,55709,54909],{"class":105},[36,55711,54864],{"class":42},[36,55713,55714,55716,55718,55720,55722,55724,55726,55728,55730],{"class":38,"line":662},[36,55715,55701],{"class":42},[36,55717,54901],{"class":54857},[36,55719,18576],{"class":101},[36,55721,47],{"class":42},[36,55723,54948],{"class":105},[36,55725,54928],{"class":101},[36,55727,47],{"class":42},[36,55729,54955],{"class":105},[36,55731,54864],{"class":42},[36,55733,55734,55736,55738,55740,55742],{"class":38,"line":667},[36,55735,55701],{"class":42},[36,55737,54964],{"class":54857},[36,55739,54967],{"class":42},[36,55741,54964],{"class":54857},[36,55743,54864],{"class":42},[36,55745,55746,55748,55750],{"class":38,"line":679},[36,55747,55342],{"class":42},[36,55749,54891],{"class":54857},[36,55751,54864],{"class":42},[36,55753,55754],{"class":38,"line":685},[36,55755,659],{"emptyLinePlaceholder":658},[36,55757,55758,55760,55762],{"class":38,"line":691},[36,55759,393],{"class":42},[36,55761,55357],{"class":54857},[36,55763,54864],{"class":42},[36,55765,55766,55768,55770],{"class":38,"line":696},[36,55767,55701],{"class":42},[36,55769,55370],{"class":54857},[36,55771,54864],{"class":42},[36,55773,55774,55777,55779,55781,55784,55786,55788,55790,55792,55794,55796,55798,55800,55802],{"class":38,"line":702},[36,55775,55776],{"class":46},"    let",[36,55778,55390],{"class":42},[36,55780,47],{"class":46},[36,55782,55783],{"class":42}," [",[36,55785,4194],{"class":112},[36,55787,478],{"class":42},[36,55789,4168],{"class":112},[36,55791,478],{"class":42},[36,55793,1982],{"class":112},[36,55795,478],{"class":42},[36,55797,498],{"class":112},[36,55799,478],{"class":42},[36,55801,4092],{"class":112},[36,55803,36806],{"class":42},[36,55805,55806,55808,55810,55812,55814,55816,55818,55820,55822,55824,55826,55829,55831,55833,55835],{"class":38,"line":708},[36,55807,1909],{"class":46},[36,55809,5386],{"class":42},[36,55811,55404],{"class":46},[36,55813,13119],{"class":42},[36,55815,47],{"class":46},[36,55817,1004],{"class":112},[36,55819,13126],{"class":42},[36,55821,393],{"class":46},[36,55823,55522],{"class":42},[36,55825,55525],{"class":112},[36,55827,55828],{"class":46}," -",[36,55830,28732],{"class":112},[36,55832,6914],{"class":42},[36,55834,6004],{"class":46},[36,55836,16102],{"class":42},[36,55838,55839,55842,55844,55846,55848,55850,55852,55854,55856,55858,55860,55862,55864,55866,55868,55870,55872],{"class":38,"line":713},[36,55840,55841],{"class":46},"      for",[36,55843,5386],{"class":42},[36,55845,55404],{"class":46},[36,55847,13180],{"class":42},[36,55849,47],{"class":46},[36,55851,1004],{"class":112},[36,55853,13187],{"class":42},[36,55855,393],{"class":46},[36,55857,55522],{"class":42},[36,55859,55525],{"class":112},[36,55861,55828],{"class":46},[36,55863,13119],{"class":42},[36,55865,1308],{"class":46},[36,55867,28732],{"class":112},[36,55869,13194],{"class":42},[36,55871,6004],{"class":46},[36,55873,16102],{"class":42},[36,55875,55876],{"class":38,"line":719},[36,55877,55878],{"class":3943},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[36,55880,55881,55883,55886,55888,55891,55893,55895],{"class":38,"line":725},[36,55882,995],{"class":46},[36,55884,55885],{"class":42}," (arr[j] ",[36,55887,4829],{"class":46},[36,55889,55890],{"class":42}," arr[j ",[36,55892,4354],{"class":46},[36,55894,28732],{"class":112},[36,55896,55897],{"class":42},"]) {\n",[36,55899,55900],{"class":38,"line":731},[36,55901,55902],{"class":3943},"          \u002F\u002F 交换两个变量\n",[36,55904,55905,55908,55911,55913],{"class":38,"line":736},[36,55906,55907],{"class":46},"          let",[36,55909,55910],{"class":42}," tmp ",[36,55912,47],{"class":46},[36,55914,55915],{"class":42}," arr[j]\n",[36,55917,55918,55921,55923,55925,55927,55929],{"class":38,"line":742},[36,55919,55920],{"class":42},"          arr[j] ",[36,55922,47],{"class":46},[36,55924,55890],{"class":42},[36,55926,4354],{"class":46},[36,55928,28732],{"class":112},[36,55930,36806],{"class":42},[36,55932,55933,55936,55938,55940,55942,55944],{"class":38,"line":748},[36,55934,55935],{"class":42},"          arr[j ",[36,55937,4354],{"class":46},[36,55939,28732],{"class":112},[36,55941,8140],{"class":42},[36,55943,47],{"class":46},[36,55945,55946],{"class":42}," tmp\n",[36,55948,55949],{"class":38,"line":754},[36,55950,6239],{"class":42},[36,55952,55953],{"class":38,"line":760},[36,55954,55955],{"class":42},"      }\n",[36,55957,55958],{"class":38,"line":766},[36,55959,5899],{"class":42},[36,55961,55962,55965,55967],{"class":38,"line":772},[36,55963,55964],{"class":42},"    document.",[36,55966,55485],{"class":101},[36,55968,55969],{"class":42},"(arr)\n",[36,55971,55972,55975,55977],{"class":38,"line":778},[36,55973,55974],{"class":42},"  \u003C\u002F",[36,55976,55370],{"class":54857},[36,55978,54864],{"class":42},[36,55980,55981,55983,55985],{"class":38,"line":783},[36,55982,55342],{"class":42},[36,55984,55357],{"class":54857},[36,55986,54864],{"class":42},[36,55988,55989],{"class":38,"line":789},[36,55990,659],{"emptyLinePlaceholder":658},[36,55992,55993,55995,55997],{"class":38,"line":795},[36,55994,55342],{"class":42},[36,55996,54192],{"class":54857},[36,55998,54864],{"class":42},[19,56000,56001],{},[5198,56002],{"alt":31,"src":56003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,56005,56006],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,56008,56009],{},"let arr = [4, 2, 5, 1, 3]",[19,56011,56012],{},"\u002F\u002F 1.升序排列写法",[19,56014,56015],{},"arr.sort(function (a, b) {",[19,56017,56018],{},"return a - b",[19,56020,56021],{},"})",[19,56023,56024],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,56026,56027],{},"\u002F\u002F 降序排列写法",[19,56029,56015],{},[19,56031,56032],{},"return b - a",[19,56034,56021],{},[19,56036,56037],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,56039,56041],{"id":56040},"_29-函数","2.9 函数",[19,56043,56044],{},[5198,56045],{"alt":31,"src":56046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,56048,56049],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,56051,56052],{},"函数的声明用function",[19,56054,56055],{},"函数里边可以嵌套函数",[318,56057,56059],{"id":56058},"_291-函数传参","2.9.1 函数传参",[19,56061,56062],{},[5198,56063],{"alt":31,"src":56064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,56066,56067],{},[5198,56068],{"alt":31,"src":56069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[4875,56071,56072,56075,56078,56081,56084,56087],{},[214,56073,56074],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[214,56076,56077],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[214,56079,56080],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[214,56082,56083],{},"开发中尽量保持形参和实参个数一致",[214,56085,56086],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[214,56088,56089],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,56091,56092],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[318,56094,56096],{"id":56095},"_292-函数的返回值","2.9.2 函数的返回值",[19,56098,56099],{},[5198,56100],{"alt":31,"src":56101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,56103,56104],{},[5198,56105],{"alt":31,"src":56106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[4875,56108,56109,56112,56115,56118,56121],{},[214,56110,56111],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[214,56113,56114],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[214,56116,56117],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[214,56119,56120],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[214,56122,56123],{},"断点调试:进入函数内部看执行过程F11",[318,56125,56127],{"id":56126},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[26,56129,56131],{"className":54190,"code":56130,"language":54192,"meta":31,"style":31},"    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",[33,56132,56133,56138,56143,56147,56152],{"__ignoreMap":31},[36,56134,56135],{"class":38,"line":39},[36,56136,56137],{"class":42},"    function fn(a, b) {\n",[36,56139,56140],{"class":38,"line":53},[36,56141,56142],{"class":42},"      console.log(a + b);\n",[36,56144,56145],{"class":38,"line":196},[36,56146,5899],{"class":42},[36,56148,56149],{"class":38,"line":642},[36,56150,56151],{"class":42},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[36,56153,56154],{"class":38,"line":655},[36,56155,56156],{"class":42},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[318,56158,56160],{"id":56159},"_294-作用域","2.9.4 作用域",[4875,56162,56163,56169,56174,56177,56180],{},[214,56164,56165,56166],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[4027,56167,56168],{},"作用域",[214,56170,56171],{},[4027,56172,56173],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[214,56175,56176],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[214,56178,56179],{},"函数内部可以直接所使用全局变量",[214,56181,56182],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,56184,447],{},[26,56186,56188],{"className":54190,"code":56187,"language":54192,"meta":31,"style":31},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[33,56189,56190,56195,56200,56204,56209,56214,56219],{"__ignoreMap":31},[36,56191,56192],{"class":38,"line":39},[36,56193,56194],{"class":42},"    function fun() {\n",[36,56196,56197],{"class":38,"line":53},[36,56198,56199],{"class":42},"      num = 10\n",[36,56201,56202],{"class":38,"line":196},[36,56203,5899],{"class":42},[36,56205,56206],{"class":38,"line":642},[36,56207,56208],{"class":42},"    fun()\n",[36,56210,56211],{"class":38,"line":655},[36,56212,56213],{"class":42},"    console.log(num)\n",[36,56215,56216],{"class":38,"line":662},[36,56217,56218],{"class":42},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[36,56220,56221],{"class":38,"line":667},[36,56222,56223],{"class":42},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[4875,56225,56226,56229],{},[214,56227,56228],{},"函数内部的形参可以看做是局部变量",[214,56230,56231],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,56233,56234,56235],{},"变量访问原则： ",[4027,56236,56237],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[318,56239,56241],{"id":56240},"_295-匿名函数","2.9.5 匿名函数",[19,56243,56244],{},"函数可以分为具名函数和匿名函数",[19,56246,56247],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[211,56249,56250],{},[214,56251,56252],{},"函数表达式",[19,56254,56255],{},[5198,56256],{"alt":31,"src":56257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,56259,56260],{},"里边也可以写参数",[19,56262,56263],{},"具名函数调用位置可以随意调整；",[19,56265,56266],{},"匿名函数函数表达式形式只能在声明后才可以使用",[211,56268,56269],{"start":53},[214,56270,56271],{},"立即执行函数",[19,56273,56274],{},[5198,56275],{"alt":31,"src":56276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,56278,56279],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,56281,56282],{},"写法：两个小括号，然后在第一个小括号中写function",[19,56284,56285],{},"(function () {})();",[19,56287,56288],{},"不要落下最后的;",[19,56290,56291],{},"立即执行函数必须要加;",[19,56293,56294],{},"分号写前写后都没问题",[19,56296,56297],{},"写前：",[19,56299,56300],{},"(function() {})()",[19,56302,56303],{},";(function () {})();",[19,56305,56306],{},"写后:",[19,56308,56309],{},"(function() {})();",[19,56311,56285],{},[19,56313,56314],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,56316,56317],{},"还有一种写法：",[19,56319,56320],{},"(function(){}());",[19,56322,56323],{},"或者:",[19,56325,56326],{},"!function(){}();",[19,56328,56329],{},"立即执行函数有时候也是可以加名字的：",[19,56331,56332],{},"(function flexible(window,document) {}(window,document));",[19,56334,56335],{},"省一些调用方法",[318,56337,56339],{"id":56338},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,56341,56342],{},[5198,56343],{"alt":31,"src":56344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,56346,56347],{},"这样就不用非得给x,y初始化了",[19,56349,56350],{},[5198,56351],{"alt":31,"src":56352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,56354,56355],{},"代码执行时先看左边",[19,56357,56358],{},"例如：console.log(false && 3+5)",[19,56360,56361],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,56363,56364],{},"&&都是真时，就返回最后一个真值",[19,56366,56367],{},"console.log(11 && 22)",[19,56369,56370],{},"输出22",[19,56372,56373],{},"逻辑与：遇真则真",[19,56375,447],{},[19,56377,56378],{},"let age=1",[19,56380,56381],{},"console.log(11 || age++)",[19,56383,56384],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,56386,56387],{},"console.log(11 || 22)",[19,56389,56390],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,56392,56393],{},"||如果都是假的话，就取最后一个假的值了",[318,56395,56397],{"id":56396},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,56399,56400],{},"显示转换：",[19,56402,56403,56406,56407],{},[4027,56404,56405],{},"记忆","： ",[4027,56408,56409],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,56411,56412],{},"空字符串为假，其他字符串全为真",[19,56414,56415],{},[5198,56416],{"alt":31,"src":56417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,56419,56420],{},"隐式转换：",[19,56422,56423],{},[5198,56424],{"alt":31,"src":56425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,56427,56428],{},"隐式转换:",[19,56430,56431],{},"null+3=3",[19,56433,56434],{},"undefined+3=NaN",[19,56436,56437],{},"null==undefined 输出true,他两个都当0看",[19,56439,56440],{},"null===undefined 输出false",[19,56442,56443],{},"undefined做任何操作都是NaN",[19,56445,56446],{},"NaN不等于NaN，NaN表示计算错误",[14,56448,56450],{"id":56449},"_210-对象","2.10 对象",[318,56452,56454],{"id":56453},"_2101-对象的介绍","2.10.1 对象的介绍",[19,56456,56457],{},"对象也是一种数据类型，里边的数据是无序的",[19,56459,56460],{},"对象由属性和方法组成",[19,56462,56463],{},[5198,56464],{"alt":31,"src":56465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,56467,56468],{},[5198,56469],{"alt":31,"src":56470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,56472,56473],{},[5198,56474],{"alt":31,"src":56475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[318,56477,56479],{"id":56478},"_2102-对象属性","2.10.2 对象属性",[19,56481,56482],{},[5198,56483],{"alt":31,"src":56484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[211,56486,56487],{},[214,56488,56489],{},"查询对象",[19,56491,56492],{},"对象名.属性 goods.uname",[19,56494,56495],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,56497,56498],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,56500,56501],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,56503,56504],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[211,56506,56507],{"start":53},[214,56508,56509],{},"重新赋值",[19,56511,56512],{},"对象名.属性=新值",[211,56514,56515],{"start":196},[214,56516,56517],{},"增加新数据",[19,56519,56512],{},[211,56521,56522],{"start":642},[214,56523,56524],{},"删除对象中的属性",[19,56526,56527],{},"delete 对象名.属性",[318,56529,56531],{"id":56530},"_2103-对象方法","2.10.3 对象方法",[19,56533,56534],{},[5198,56535],{"alt":31,"src":56536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,56538,56539],{},"后边跟的是匿名函数",[19,56541,56542],{},"对象外面的叫函数；对象内部的叫方法",[19,56544,56545],{},[5198,56546],{"alt":31,"src":56547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[318,56549,56551],{"id":56550},"_2104-遍历对象","2.10.4 遍历对象",[19,56553,56554],{},"理解为加括号的python字典遍历",[19,56556,56557],{},[5198,56558],{"alt":31,"src":56559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,56561,56562],{},"k是字符串类型",[19,56564,56565],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[26,56567,56569],{"className":54190,"code":56568,"language":54192,"meta":31,"style":31},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[33,56570,56571,56576,56581,56586,56591],{"__ignoreMap":31},[36,56572,56573],{"class":38,"line":39},[36,56574,56575],{"class":42},"   let arr = [1, 2, 3]\n",[36,56577,56578],{"class":38,"line":53},[36,56579,56580],{"class":42},"    for (let k in arr) {\n",[36,56582,56583],{"class":38,"line":196},[36,56584,56585],{"class":42},"      console.log(k)\n",[36,56587,56588],{"class":38,"line":642},[36,56589,56590],{"class":42},"      console.log(arr[k])\n",[36,56592,56593],{"class":38,"line":655},[36,56594,5899],{"class":42},[19,56596,56597],{},[5198,56598],{"alt":31,"src":56599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,56601,56602],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,56604,56605],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,56607,56608],{},"for in 得到的k是属性名",[55370,56610,56611],{},"\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,56613,56614],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[318,56616,56618],{"id":56617},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,56620,56621],{},"数组中放对象信息",[26,56623,56627],{"className":56624,"code":56625,"language":56626,"meta":31,"style":31},"language-xml shiki shiki-themes github-light github-dark","\u003Cscript>\n    let students = [\n      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n    ]\n    for (let i = 0; i \u003C students.length; i++) {\n      for (let k in students[i]) {\n        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n        \u002F\u002F输出每个人的名字：\n        \u002F\u002Fconsole.log(students[i].name)\n      }\n    }\n  \u003C\u002Fscript>\n","xml",[33,56628,56629,56637,56642,56647,56652,56657,56662,56667,56672,56677,56682,56687,56692,56696,56700],{"__ignoreMap":31},[36,56630,56631,56633,56635],{"class":38,"line":39},[36,56632,393],{"class":42},[36,56634,55370],{"class":54857},[36,56636,54864],{"class":42},[36,56638,56639],{"class":38,"line":53},[36,56640,56641],{"class":42},"    let students = [\n",[36,56643,56644],{"class":38,"line":196},[36,56645,56646],{"class":42},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[36,56648,56649],{"class":38,"line":642},[36,56650,56651],{"class":42},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[36,56653,56654],{"class":38,"line":655},[36,56655,56656],{"class":42},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[36,56658,56659],{"class":38,"line":662},[36,56660,56661],{"class":42},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[36,56663,56664],{"class":38,"line":667},[36,56665,56666],{"class":42},"    ]\n",[36,56668,56669],{"class":38,"line":679},[36,56670,56671],{"class":42},"    for (let i = 0; i \u003C students.length; i++) {\n",[36,56673,56674],{"class":38,"line":685},[36,56675,56676],{"class":42},"      for (let k in students[i]) {\n",[36,56678,56679],{"class":38,"line":691},[36,56680,56681],{"class":42},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[36,56683,56684],{"class":38,"line":696},[36,56685,56686],{"class":42},"        \u002F\u002F输出每个人的名字：\n",[36,56688,56689],{"class":38,"line":702},[36,56690,56691],{"class":42},"        \u002F\u002Fconsole.log(students[i].name)\n",[36,56693,56694],{"class":38,"line":708},[36,56695,55955],{"class":42},[36,56697,56698],{"class":38,"line":713},[36,56699,5899],{"class":42},[36,56701,56702,56704,56706],{"class":38,"line":719},[36,56703,55974],{"class":42},[36,56705,55370],{"class":54857},[36,56707,54864],{"class":42},[318,56709,56711],{"id":56710},"_2106-内置对象","2.10.6 内置对象",[19,56713,56714],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[211,56716,56717],{},[214,56718,56719],{},"数学对象Math",[19,56721,56722],{},[5198,56723],{"alt":31,"src":56724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,56726,56727],{},[4113,56728,56731],{"href":56729,"rel":56730},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[27481],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,56733,56734],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,56736,56737],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,56739,56740],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,56742,56743],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,56745,56746],{},"null属于对象数据类型",[211,56748,56749],{"start":53},[214,56750,56751],{},"生成任意范围随机数",[19,56753,56754],{},[5198,56755],{"alt":31,"src":56756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,56758,56759],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,56761,56762],{},"乘以几就取不到几",[19,56764,56765],{},"取数组中的随机元素：",[19,56767,56768],{},"let arr = ['red', 'green', 'blue']",[19,56770,56771],{},"let random = Math.floor(Math.random() * arr.length)",[19,56773,56774],{},"console.log(arr[random])",[19,56776,56777],{},"这个函数得到的是全闭区间",[19,56779,56780],{},"function getRandom(N, M) {",[19,56782,56783],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,56785,4815],{},[19,56787,56788],{},"console.log(getRandom(4, 8))",[318,56790,56792],{"id":56791},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,56794,56795],{},[5198,56796],{"alt":31,"src":56797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,56799,56800],{},[5198,56801],{"alt":31,"src":56802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,56804,56805],{},[5198,56806],{"alt":31,"src":56807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,56809,56810],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,56812,56813],{},[5198,56814],{"alt":31,"src":56815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,56817,56818],{},[5198,56819],{"alt":31,"src":56820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,56822,56823],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,56825,56826],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,56828,56829],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[3785,56831,56832],{},"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":31,"searchDepth":53,"depth":53,"links":56834},[56835,56843,56844,56845,56846,56847,56854,56858,56864,56873],{"id":54025,"depth":53,"text":54026,"children":56836},[56837,56838,56839,56840,56841,56842],{"id":54029,"depth":196,"text":54030},{"id":54046,"depth":196,"text":54047},{"id":54086,"depth":196,"text":54087},{"id":54098,"depth":196,"text":54099},{"id":54107,"depth":196,"text":54108},{"id":54155,"depth":196,"text":54156},{"id":54165,"depth":53,"text":54166},{"id":54253,"depth":53,"text":54254},{"id":54276,"depth":53,"text":54277},{"id":54288,"depth":53,"text":54289},{"id":54475,"depth":53,"text":54476,"children":56848},[56849,56850,56851,56852,56853],{"id":54479,"depth":196,"text":54480},{"id":54488,"depth":196,"text":54489},{"id":54516,"depth":196,"text":54517},{"id":54552,"depth":196,"text":54553},{"id":54577,"depth":196,"text":54578},{"id":54589,"depth":53,"text":54590,"children":56855},[56856,56857],{"id":54610,"depth":196,"text":54611},{"id":54704,"depth":196,"text":54705},{"id":54762,"depth":53,"text":54763,"children":56859},[56860,56861,56862,56863],{"id":54766,"depth":196,"text":54767},{"id":54790,"depth":196,"text":54791},{"id":54843,"depth":196,"text":54844},{"id":55654,"depth":196,"text":55655},{"id":56040,"depth":53,"text":56041,"children":56865},[56866,56867,56868,56869,56870,56871,56872],{"id":56058,"depth":196,"text":56059},{"id":56095,"depth":196,"text":56096},{"id":56126,"depth":196,"text":56127},{"id":56159,"depth":196,"text":56160},{"id":56240,"depth":196,"text":56241},{"id":56338,"depth":196,"text":56339},{"id":56396,"depth":196,"text":56397},{"id":56449,"depth":53,"text":56450,"children":56874},[56875,56876,56877,56878,56879,56880,56881],{"id":56453,"depth":196,"text":56454},{"id":56478,"depth":196,"text":56479},{"id":56530,"depth":196,"text":56531},{"id":56550,"depth":196,"text":56551},{"id":56617,"depth":196,"text":56618},{"id":56710,"depth":196,"text":56711},{"id":56791,"depth":196,"text":56792},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":54017,"description":26998},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":56888,"title":56889,"body":56890,"description":26998,"extension":3817,"meta":80227,"navigation":658,"path":80228,"seo":80229,"stem":80230,"__hash__":80231},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":56891,"toc":80167},[56892,56895,56898,56901,56906,56909,56912,56915,56919,56923,56929,56934,56942,56949,56952,56956,56961,56966,56971,56974,56977,56988,56991,56995,56998,57001,57006,57011,57016,57019,57022,57114,57117,57122,57125,57130,57133,57136,57141,57144,57149,57153,57156,57170,57174,57179,57182,57185,57189,57194,57197,57201,57205,57210,57214,57219,57222,57225,57228,57231,57234,57237,57242,57247,57275,57278,57281,57284,57289,57292,57295,57298,57301,57305,57334,57338,57343,57348,57351,57354,57357,57362,57477,57482,57487,57648,57653,57656,57660,57665,57670,57673,57676,57679,57682,57685,57688,57691,57694,57697,57700,57703,57706,57709,57712,57714,57717,57720,57723,57728,57732,58128,58131,58137,58141,58146,59427,59432,59435,59438,59441,59446,60642,60646,60652,60657,60660,60665,60670,60674,60678,60683,60686,60691,60694,60697,60701,61609,61612,61616,61837,61840,61843,61846,62072,62075,62299,62302,62306,62311,62314,62317,62545,62548,62581,62584,62588,62593,62597,62600,62603,62606,62609,62612,62615,62618,62623,63903,63907,63910,65003,65007,65010,65013,65016,65019,65023,65026,65029,65031,65039,66520,66524,66527,66530,66533,66742,66745,66749,66753,66758,66763,66766,66769,66774,66778,66783,66786,66895,66899,66904,66909,66912,66915,66919,66924,66929,66934,66937,66940,66951,66954,66959,66964,66967,66970,67043,67047,67052,67055,67057,67068,67072,67077,68403,68406,68409,68412,68414,68417,68420,68423,68426,68429,68432,68435,68438,68441,68444,68447,68450,68452,68454,68457,68461,69555,69558,69561,69577,69591,69594,69599,69605,69610,69614,69618,69623,69627,69632,70074,70079,70082,70086,70091,70094,70097,70101,70106,70110,70115,70120,70124,70129,70134,70137,70142,70147,70151,70156,70161,70265,70268,70272,70277,70643,70646,70649,70652,70655,70658,70661,70664,70667,71963,71967,71972,71977,71980,71983,71986,71989,71991,71996,72001,72004,72008,72013,72018,72023,72026,72029,72032,72035,72038,72043,72046,72050,72055,72060,72064,72069,72072,72077,72080,72083,72086,72089,72092,72097,72100,72103,72106,72109,72113,72118,72121,72125,72130,72133,72136,72140,72169,72172,72176,72180,72185,72189,72194,72197,72200,72203,72206,72209,72212,72215,72218,72221,72224,72227,72230,72233,72236,72240,72245,72250,72253,72257,72261,72266,72269,72273,72276,72279,72284,72289,72294,72299,72304,72307,72310,72315,72320,72324,72329,72332,72337,72340,72343,72346,72349,72354,72357,72366,72370,72375,72378,72381,72385,72388,72393,72397,72400,72406,72412,72416,72442,72445,74005,74008,74504,74507,74512,74517,74522,74526,74531,74536,74541,74545,74550,74553,74556,74559,74562,74566,74569,74574,74577,74582,74586,74591,74594,74599,74604,74609,74612,74615,74620,74625,74628,74631,74635,74638,74643,74646,74651,74654,74659,74664,74669,74672,74677,74742,74745,74756,74760,74765,74937,74941,74946,74949,74952,74955,74959,74970,74974,74977,74982,74987,74990,74993,74996,74999,75002,75004,75007,75010,75013,75018,75021,75026,75029,75033,75036,75039,75053,75057,75060,75115,75120,75123,75126,75131,75134,75138,75143,75273,75277,75282,75287,75368,75373,75377,75380,75385,75390,75396,75399,75402,75405,75409,75414,75417,75428,75432,75449,78496,78500,78503,78506,78509,78530,78534,78537,78545,78548,78553,78556,78559,78564,78569,78573,78594,78598,78603,78606,78609,78612,78615,78619,78624,78627,78631,78636,78639,78644,78647,78652,78655,78660,79863,79867,79872,79875,79880,80164],[10,56893,56889],{"id":56894},"_3web-apis",[19,56896,56897],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,56899,56900],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,56902,56903],{},[5198,56904],{"alt":31,"src":56905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,56907,56908],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,56910,56911],{},"建议数组和对象使用 const 来声明",[19,56913,56914],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,56916,56918],{"id":56917},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[318,56920,56922],{"id":56921},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,56924,56925,56928],{},[33,56926,56927],{},"document"," = HTML 文件解析后的对象化表示；",[19,56930,56931,56933],{},[33,56932,56927],{}," ≠ HTML 文件本身",[19,56935,56936,56941],{},[4027,56937,56938],{},[33,56939,56940],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,56943,56944,56948],{},[4027,56945,56946],{},[33,56947,56927],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,56950,56951],{},"document实际上为window.document的简写",[318,56953,56955],{"id":56954},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,56957,56958],{},[5198,56959],{"alt":31,"src":56960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,56962,56963],{},[5198,56964],{"alt":31,"src":56965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,56967,56968],{},[5198,56969],{"alt":31,"src":56970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,56972,56973],{},"console.dir()",[19,56975,56976],{},"dir用来打印对象",[4875,56978,56979,56982,56985],{},[214,56980,56981],{},"任何一个标签，都是一个对象",[214,56983,56984],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[214,56986,56987],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,56989,56990],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[318,56992,56994],{"id":56993},"_312-获取dom对象","3.1.2 获取DoM对象",[19,56996,56997],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,56999,57000],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,57002,57003],{},[4027,57004,57005],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[211,57007,57008],{},[214,57009,57010],{},"利用CSS选择器来获取标签元素",[19,57012,57013],{},[5198,57014],{"alt":31,"src":57015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,57017,57018],{},"里边的选择器必须必须加引号！！！",[19,57020,57021],{},"只选择第一个元素",[26,57023,57025],{"className":56624,"code":57024,"language":56626,"meta":31,"style":31},"\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",[33,57026,57027,57035,57056,57075,57083,57088,57093,57098,57106],{"__ignoreMap":31},[36,57028,57029,57031,57033],{"class":38,"line":39},[36,57030,393],{"class":42},[36,57032,55357],{"class":54857},[36,57034,54864],{"class":42},[36,57036,57037,57039,57041,57044,57046,57049,57052,57054],{"class":38,"line":53},[36,57038,55701],{"class":42},[36,57040,55168],{"class":54857},[36,57042,57043],{"class":101}," class",[36,57045,47],{"class":42},[36,57047,57048],{"class":105},"\"box\"",[36,57050,57051],{"class":42},">123\u003C\u002F",[36,57053,55168],{"class":54857},[36,57055,54864],{"class":42},[36,57057,57058,57060,57062,57064,57066,57068,57071,57073],{"class":38,"line":196},[36,57059,55701],{"class":42},[36,57061,55168],{"class":54857},[36,57063,57043],{"class":101},[36,57065,47],{"class":42},[36,57067,57048],{"class":105},[36,57069,57070],{"class":42},">456\u003C\u002F",[36,57072,55168],{"class":54857},[36,57074,54864],{"class":42},[36,57076,57077,57079,57081],{"class":38,"line":642},[36,57078,55701],{"class":42},[36,57080,55370],{"class":54857},[36,57082,54864],{"class":42},[36,57084,57085],{"class":38,"line":655},[36,57086,57087],{"class":42},"    \u002F\u002F 1.获取匹配的第一个元素\n",[36,57089,57090],{"class":38,"line":662},[36,57091,57092],{"class":42},"    const box = document.querySelector('div')\n",[36,57094,57095],{"class":38,"line":667},[36,57096,57097],{"class":42},"    console.dir(box)\n",[36,57099,57100,57102,57104],{"class":38,"line":679},[36,57101,55974],{"class":42},[36,57103,55370],{"class":54857},[36,57105,54864],{"class":42},[36,57107,57108,57110,57112],{"class":38,"line":685},[36,57109,55342],{"class":42},[36,57111,55357],{"class":54857},[36,57113,54864],{"class":42},[19,57115,57116],{},"只选123，不选456",[19,57118,57119],{},[5198,57120],{"alt":31,"src":57121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,57123,57124],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,57126,57127],{},[5198,57128],{"alt":31,"src":57129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,57131,57132],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,57134,57135],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[211,57137,57138],{"start":53},[214,57139,57140],{},"其他方法来获取标签元素",[19,57142,57143],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,57145,57146],{},[5198,57147],{"alt":31,"src":57148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[318,57150,57152],{"id":57151},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,57154,57155],{},"设置修改DOM元素内容有两种方式：",[4875,57157,57158,57161,57164,57167],{},[214,57159,57160],{},"元素.innerText=''",[214,57162,57163],{},"元素.innerHTML=''",[214,57165,57166],{},"不写字符串输出数字也是可以的",[214,57168,57169],{},"元素.innerHtml=1",[25619,57171,57173],{"id":57172},"_3131-innertext","3.1.3.1 innerText",[19,57175,57176],{},[5198,57177],{"alt":31,"src":57178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,57180,57181],{},"思路：实现了修改盒子中的内容！",[19,57183,57184],{},"它只显示纯文本，不解析标签",[25619,57186,57188],{"id":57187},"_3132-innerhtml","3.1.3.2 innerHTML",[19,57190,57191],{},[5198,57192],{"alt":31,"src":57193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,57195,57196],{},"相比于innerText，他的强大之处在于可以解析标签",[318,57198,57200],{"id":57199},"_314-操作元素属性","3.1.4 操作元素属性",[25619,57202,57204],{"id":57203},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,57206,57207],{},[5198,57208],{"alt":31,"src":57209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[25619,57211,57213],{"id":57212},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,57215,57216],{},[5198,57217],{"alt":31,"src":57218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,57220,57221],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,57223,57224],{},"div.style.backgroundColor = 'hotpink'",[19,57226,57227],{},"如果按照css的写法，-表示减，就会出错",[19,57229,57230],{},"body元素不需要再获取，直接用就行！！！！！！",[19,57232,57233],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,57235,57236],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,57238,57239],{},[5198,57240],{"alt":31,"src":57241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,57243,57244],{},[5198,57245],{"alt":31,"src":57246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[211,57248,57249,57252,57255,57258,57261,57264],{},[214,57250,57251],{},"className这个方式就是修改很多样式的时候来使用的！",[214,57253,57254],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[214,57256,57257],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[214,57259,57260],{},"className为属性名，如果还用class的话就导致与关键字冲突",[214,57262,57263],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[214,57265,57266,57267,57272],{},"解析标签的时候就变为了",[55168,57268],{"className":57269},[57270,57271],"nav","box",[57273,57274],"br",{},[19,57276,57277],{},"例子：",[55168,57279],{"className":57280},[57270],[55370,57282,57283],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,57285,57286],{},[5198,57287],{"alt":31,"src":57288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,57290,57291],{},"追加和删除类名用classList",[19,57293,57294],{},"常用于类似于开关的操作",[19,57296,57297],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,57299,57300],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[25619,57302,57304],{"id":57303},"_3143-牢记点","3.1.4.3 牢记点",[211,57306,57307,57310,57313,57316,57319,57322,57325,57328,57331],{},[214,57308,57309],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[214,57311,57312],{},"使用style属性操作css时不要忘记引号",[214,57314,57315],{},"使用className或者classList时也不要忘记引号",[214,57317,57318],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[214,57320,57321],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[214,57323,57324],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[214,57326,57327],{},"若： let arr=['1','2',3] arr[0]=1",[214,57329,57330],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[214,57332,57333],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[318,57335,57337],{"id":57336},"_315-操作表单元素","3.1.5 操作表单元素",[211,57339,57340],{},[214,57341,57342],{},"天生的属性",[19,57344,57345],{},[5198,57346],{"alt":31,"src":57347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,57349,57350],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,57352,57353],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,57355,57356],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,57358,57359],{},[5198,57360],{"alt":31,"src":57361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[26,57363,57365],{"className":54190,"code":57364,"language":54192,"meta":31,"style":31},"在复选框中如果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",[33,57366,57367,57372,57404,57409,57414,57419,57424,57428,57433,57438,57455,57467,57472],{"__ignoreMap":31},[36,57368,57369],{"class":38,"line":39},[36,57370,57371],{"class":42},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[36,57373,57374,57376,57379,57382,57384,57387,57389,57391,57393,57395,57397,57399,57402],{"class":38,"line":53},[36,57375,393],{"class":42},[36,57377,57378],{"class":54857},"input",[36,57380,57381],{"class":101}," type",[36,57383,47],{"class":42},[36,57385,57386],{"class":105},"\"checkbox\"",[36,57388,18576],{"class":101},[36,57390,47],{"class":42},[36,57392,11343],{"class":105},[36,57394,18615],{"class":101},[36,57396,47],{"class":42},[36,57398,11343],{"class":105},[36,57400,57401],{"class":101}," checked",[36,57403,54864],{"class":42},[36,57405,57406],{"class":38,"line":196},[36,57407,57408],{"class":42},"不选的话：\n",[36,57410,57411],{"class":38,"line":642},[36,57412,57413],{"class":42},"const input = document.querySelector('input')\n",[36,57415,57416],{"class":38,"line":655},[36,57417,57418],{"class":42},"input.checked=false\n",[36,57420,57421],{"class":38,"line":662},[36,57422,57423],{"class":42},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[36,57425,57426],{"class":38,"line":667},[36,57427,659],{"emptyLinePlaceholder":658},[36,57429,57430],{"class":38,"line":679},[36,57431,57432],{"class":42},"禁用按钮：\n",[36,57434,57435],{"class":38,"line":685},[36,57436,57437],{"class":42},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[36,57439,57440,57442,57445,57448,57451,57453],{"class":38,"line":691},[36,57441,393],{"class":42},[36,57443,57444],{"class":54857},"button",[36,57446,57447],{"class":101}," disabled",[36,57449,57450],{"class":42},">点击\u003C\u002F",[36,57452,57444],{"class":54857},[36,57454,54864],{"class":42},[36,57456,57457,57459,57461,57463,57465],{"class":38,"line":696},[36,57458,393],{"class":42},[36,57460,57444],{"class":54857},[36,57462,57450],{"class":42},[36,57464,57444],{"class":54857},[36,57466,54864],{"class":42},[36,57468,57469],{"class":38,"line":702},[36,57470,57471],{"class":42},"const bt = document.querySelector('button')\n",[36,57473,57474],{"class":38,"line":708},[36,57475,57476],{"class":42},"bt.disabled = false\n",[211,57478,57479],{"start":53},[214,57480,57481],{},"自定义属性",[19,57483,57484],{},[5198,57485],{"alt":31,"src":57486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[26,57488,57490],{"className":56624,"code":57489,"language":56626,"meta":31,"style":31},"\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",[33,57491,57492,57500,57528,57547,57566,57585,57604,57612,57617,57622,57627,57632,57640],{"__ignoreMap":31},[36,57493,57494,57496,57498],{"class":38,"line":39},[36,57495,393],{"class":42},[36,57497,55357],{"class":54857},[36,57499,54864],{"class":42},[36,57501,57502,57504,57506,57509,57511,57513,57516,57518,57521,57524,57526],{"class":38,"line":53},[36,57503,55701],{"class":42},[36,57505,55168],{"class":54857},[36,57507,57508],{"class":101}," data-id",[36,57510,47],{"class":42},[36,57512,7377],{"class":105},[36,57514,57515],{"class":101}," data-spm",[36,57517,47],{"class":42},[36,57519,57520],{"class":105},"\"我不知道\"",[36,57522,57523],{"class":42},">1\u003C\u002F",[36,57525,55168],{"class":54857},[36,57527,54864],{"class":42},[36,57529,57530,57532,57534,57536,57538,57540,57543,57545],{"class":38,"line":196},[36,57531,55701],{"class":42},[36,57533,55168],{"class":54857},[36,57535,57508],{"class":101},[36,57537,47],{"class":42},[36,57539,7400],{"class":105},[36,57541,57542],{"class":42},">2\u003C\u002F",[36,57544,55168],{"class":54857},[36,57546,54864],{"class":42},[36,57548,57549,57551,57553,57555,57557,57559,57562,57564],{"class":38,"line":642},[36,57550,55701],{"class":42},[36,57552,55168],{"class":54857},[36,57554,57508],{"class":101},[36,57556,47],{"class":42},[36,57558,7413],{"class":105},[36,57560,57561],{"class":42},">3\u003C\u002F",[36,57563,55168],{"class":54857},[36,57565,54864],{"class":42},[36,57567,57568,57570,57572,57574,57576,57578,57581,57583],{"class":38,"line":655},[36,57569,55701],{"class":42},[36,57571,55168],{"class":54857},[36,57573,57508],{"class":101},[36,57575,47],{"class":42},[36,57577,7426],{"class":105},[36,57579,57580],{"class":42},">4\u003C\u002F",[36,57582,55168],{"class":54857},[36,57584,54864],{"class":42},[36,57586,57587,57589,57591,57593,57595,57597,57600,57602],{"class":38,"line":662},[36,57588,55701],{"class":42},[36,57590,55168],{"class":54857},[36,57592,57508],{"class":101},[36,57594,47],{"class":42},[36,57596,7446],{"class":105},[36,57598,57599],{"class":42},">5\u003C\u002F",[36,57601,55168],{"class":54857},[36,57603,54864],{"class":42},[36,57605,57606,57608,57610],{"class":38,"line":667},[36,57607,55701],{"class":42},[36,57609,55370],{"class":54857},[36,57611,54864],{"class":42},[36,57613,57614],{"class":38,"line":679},[36,57615,57616],{"class":42},"    const one = document.querySelector('div')\n",[36,57618,57619],{"class":38,"line":685},[36,57620,57621],{"class":42},"    console.log(one.dataset)\n",[36,57623,57624],{"class":38,"line":691},[36,57625,57626],{"class":42},"    console.log(one.dataset.id)\n",[36,57628,57629],{"class":38,"line":696},[36,57630,57631],{"class":42},"    console.log(one.dataset.spm)\n",[36,57633,57634,57636,57638],{"class":38,"line":702},[36,57635,55974],{"class":42},[36,57637,55370],{"class":54857},[36,57639,54864],{"class":42},[36,57641,57642,57644,57646],{"class":38,"line":708},[36,57643,55342],{"class":42},[36,57645,55357],{"class":54857},[36,57647,54864],{"class":42},[19,57649,57650],{},[5198,57651],{"alt":31,"src":57652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,57654,57655],{},"document.querySelector选择的是第一个对象（元素）",[318,57657,57659],{"id":57658},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,57661,57662],{},[5198,57663],{"alt":31,"src":57664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,57666,57667],{},[5198,57668],{"alt":31,"src":57669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,57671,57672],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[55370,57674,57675],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,57677,57678],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[55370,57680,57681],{},"\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,57683,57684],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,57686,57687],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,57689,57690],{},"单位为毫秒！！！",[19,57692,57693],{},"可以搭配匿名函数来用！！！",[19,57695,57696],{},"setInterval(function () {",[19,57698,57699],{},"alert('两秒执行一次')",[19,57701,57702],{},"}, 2000)",[19,57704,57705],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,57707,57708],{},"function fn() {",[19,57710,57711],{},"document.write(1)",[19,57713,4815],{},[19,57715,57716],{},"setInterval(fn, 1000)",[19,57718,57719],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,57721,57722],{},"setInterval('fn()', 1000)",[19,57724,57725],{},[5198,57726],{"alt":31,"src":57727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[25619,57729,57731],{"id":57730},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[26,57733,57735],{"className":54190,"code":57734,"language":54192,"meta":31,"style":31},"\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",[33,57736,57737,57747,57761,57765,57773,57787,57807,57819,57827,57831,57839,57876,57881,57886,57891,57899,57907,57929,57937,57942,57964,57969,57974,57984,57989,58009,58017,58032,58047,58058,58063,58073,58083,58087,58096,58100,58108,58116,58120],{"__ignoreMap":31},[36,57738,57739,57741,57743,57745],{"class":38,"line":39},[36,57740,54854],{"class":42},[36,57742,54858],{"class":54857},[36,57744,54861],{"class":101},[36,57746,54864],{"class":42},[36,57748,57749,57751,57753,57755,57757,57759],{"class":38,"line":53},[36,57750,393],{"class":42},[36,57752,54192],{"class":54857},[36,57754,54873],{"class":101},[36,57756,47],{"class":42},[36,57758,54878],{"class":105},[36,57760,54864],{"class":42},[36,57762,57763],{"class":38,"line":196},[36,57764,659],{"emptyLinePlaceholder":658},[36,57766,57767,57769,57771],{"class":38,"line":642},[36,57768,393],{"class":42},[36,57770,54891],{"class":54857},[36,57772,54864],{"class":42},[36,57774,57775,57777,57779,57781,57783,57785],{"class":38,"line":655},[36,57776,55701],{"class":42},[36,57778,54901],{"class":54857},[36,57780,54904],{"class":101},[36,57782,47],{"class":42},[36,57784,54909],{"class":105},[36,57786,54864],{"class":42},[36,57788,57789,57791,57793,57795,57797,57799,57801,57803,57805],{"class":38,"line":662},[36,57790,55701],{"class":42},[36,57792,54901],{"class":54857},[36,57794,18576],{"class":101},[36,57796,47],{"class":42},[36,57798,54948],{"class":105},[36,57800,54928],{"class":101},[36,57802,47],{"class":42},[36,57804,54955],{"class":105},[36,57806,54864],{"class":42},[36,57808,57809,57811,57813,57815,57817],{"class":38,"line":667},[36,57810,55701],{"class":42},[36,57812,54964],{"class":54857},[36,57814,54967],{"class":42},[36,57816,54964],{"class":54857},[36,57818,54864],{"class":42},[36,57820,57821,57823,57825],{"class":38,"line":679},[36,57822,55342],{"class":42},[36,57824,54891],{"class":54857},[36,57826,54864],{"class":42},[36,57828,57829],{"class":38,"line":685},[36,57830,659],{"emptyLinePlaceholder":658},[36,57832,57833,57835,57837],{"class":38,"line":691},[36,57834,393],{"class":42},[36,57836,55357],{"class":54857},[36,57838,54864],{"class":42},[36,57840,57841,57843,57846,57848,57850,57852,57854,57856,57858,57861,57863,57866,57869,57871,57874],{"class":38,"line":696},[36,57842,55701],{"class":42},[36,57844,57845],{"class":54857},"textarea",[36,57847,18576],{"class":101},[36,57849,47],{"class":42},[36,57851,11343],{"class":105},[36,57853,18615],{"class":101},[36,57855,47],{"class":42},[36,57857,11343],{"class":105},[36,57859,57860],{"class":101}," cols",[36,57862,47],{"class":42},[36,57864,57865],{"class":105},"\"30\"",[36,57867,57868],{"class":101}," rows",[36,57870,47],{"class":42},[36,57872,57873],{"class":105},"\"10\"",[36,57875,54864],{"class":42},[36,57877,57878],{"class":38,"line":702},[36,57879,57880],{"class":42},"        用户注册协议\n",[36,57882,57883],{"class":38,"line":708},[36,57884,57885],{"class":42},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[36,57887,57888],{"class":38,"line":713},[36,57889,57890],{"class":42},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[36,57892,57893,57895,57897],{"class":38,"line":719},[36,57894,55333],{"class":42},[36,57896,57845],{"class":54857},[36,57898,54864],{"class":42},[36,57900,57901,57903,57905],{"class":38,"line":725},[36,57902,55701],{"class":42},[36,57904,57273],{"class":54857},[36,57906,54864],{"class":42},[36,57908,57909,57911,57913,57915,57917,57920,57922,57925,57927],{"class":38,"line":731},[36,57910,55701],{"class":42},[36,57912,57444],{"class":54857},[36,57914,57043],{"class":101},[36,57916,47],{"class":42},[36,57918,57919],{"class":105},"\"btn\"",[36,57921,57447],{"class":101},[36,57923,57924],{"class":42},">我已经阅读用户协议(5)\u003C\u002F",[36,57926,57444],{"class":54857},[36,57928,54864],{"class":42},[36,57930,57931,57933,57935],{"class":38,"line":736},[36,57932,55701],{"class":42},[36,57934,55370],{"class":54857},[36,57936,54864],{"class":42},[36,57938,57939],{"class":38,"line":742},[36,57940,57941],{"class":3943},"    \u002F\u002F 1. 获取元素\n",[36,57943,57944,57946,57949,57951,57954,57957,57959,57962],{"class":38,"line":748},[36,57945,14882],{"class":46},[36,57947,57948],{"class":112}," btn",[36,57950,673],{"class":46},[36,57952,57953],{"class":42}," document.",[36,57955,57956],{"class":101},"querySelector",[36,57958,495],{"class":42},[36,57960,57961],{"class":105},"'.btn'",[36,57963,922],{"class":42},[36,57965,57966],{"class":38,"line":754},[36,57967,57968],{"class":3943},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[36,57970,57971],{"class":38,"line":760},[36,57972,57973],{"class":3943},"    \u002F\u002F 2. 倒计时\n",[36,57975,57976,57978,57980,57982],{"class":38,"line":766},[36,57977,55776],{"class":46},[36,57979,13119],{"class":42},[36,57981,47],{"class":46},[36,57983,586],{"class":112},[36,57985,57986],{"class":38,"line":772},[36,57987,57988],{"class":3943},"    \u002F\u002F 2.1 开启定时器\n",[36,57990,57991,57993,57996,57998,58001,58003,58006],{"class":38,"line":778},[36,57992,55776],{"class":46},[36,57994,57995],{"class":42}," n ",[36,57997,47],{"class":46},[36,57999,58000],{"class":101}," setInterval",[36,58002,495],{"class":42},[36,58004,58005],{"class":46},"function",[36,58007,58008],{"class":42}," () {\n",[36,58010,58011,58014],{"class":38,"line":783},[36,58012,58013],{"class":42},"      i",[36,58015,58016],{"class":46},"--\n",[36,58018,58019,58022,58024,58027,58029],{"class":38,"line":789},[36,58020,58021],{"class":42},"      btn.innerHTML ",[36,58023,47],{"class":46},[36,58025,58026],{"class":105}," `我已经阅读用户协议(${",[36,58028,4316],{"class":42},[36,58030,58031],{"class":105},"})`\n",[36,58033,58034,58037,58040,58043,58045],{"class":38,"line":795},[36,58035,58036],{"class":46},"      if",[36,58038,58039],{"class":42}," (i ",[36,58041,58042],{"class":46},"===",[36,58044,1004],{"class":112},[36,58046,16102],{"class":42},[36,58048,58049,58052,58055],{"class":38,"line":801},[36,58050,58051],{"class":101},"        clearInterval",[36,58053,58054],{"class":42},"(n)  ",[36,58056,58057],{"class":3943},"\u002F\u002F 关闭定时器\n",[36,58059,58060],{"class":38,"line":807},[36,58061,58062],{"class":3943},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[36,58064,58065,58068,58070],{"class":38,"line":813},[36,58066,58067],{"class":42},"        btn.disabled ",[36,58069,47],{"class":46},[36,58071,58072],{"class":112}," false\n",[36,58074,58075,58078,58080],{"class":38,"line":819},[36,58076,58077],{"class":42},"        btn.innerHTML ",[36,58079,47],{"class":46},[36,58081,58082],{"class":105}," '同意'\n",[36,58084,58085],{"class":38,"line":824},[36,58086,55955],{"class":42},[36,58088,58089,58092,58094],{"class":38,"line":829},[36,58090,58091],{"class":42},"    }, ",[36,58093,3727],{"class":112},[36,58095,922],{"class":42},[36,58097,58098],{"class":38,"line":851},[36,58099,659],{"emptyLinePlaceholder":658},[36,58101,58102,58104,58106],{"class":38,"line":868},[36,58103,55974],{"class":42},[36,58105,55370],{"class":54857},[36,58107,54864],{"class":42},[36,58109,58110,58112,58114],{"class":38,"line":873},[36,58111,55342],{"class":42},[36,58113,55357],{"class":54857},[36,58115,54864],{"class":42},[36,58117,58118],{"class":38,"line":891},[36,58119,659],{"emptyLinePlaceholder":658},[36,58121,58122,58124,58126],{"class":38,"line":906},[36,58123,55342],{"class":42},[36,58125,54192],{"class":54857},[36,58127,54864],{"class":42},[19,58129,58130],{},"不要一直想着用死循环,避免死循环",[19,58132,58133,58136],{},[33,58134,58135],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[25619,58138,58140],{"id":58139},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[211,58142,58143],{},[214,58144,58145],{},"法1",[26,58147,58149],{"className":54190,"code":58148,"language":54192,"meta":31,"style":31},"\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",[33,58150,58151,58161,58175,58179,58187,58201,58221,58233,58241,58247,58258,58269,58273,58277,58284,58296,58300,58304,58311,58323,58337,58350,58364,58368,58372,58379,58390,58401,58412,58424,58436,58448,58452,58456,58464,58474,58487,58499,58512,58516,58520,58527,58537,58549,58561,58572,58583,58593,58605,58617,58621,58625,58634,58646,58658,58686,58699,58703,58707,58714,58725,58729,58737,58745,58749,58757,58771,58786,58810,58818,58833,58846,58854,58875,58887,58899,58911,58923,58935,58947,58959,58968,58976,58984,58992,59004,59027,59046,59065,59084,59103,59122,59141,59161,59165,59185,59204,59224,59245,59255,59272,59282,59292,59302,59307,59312,59317,59322,59347,59360,59364,59387,59391,59399,59407,59415,59419],{"__ignoreMap":31},[36,58152,58153,58155,58157,58159],{"class":38,"line":39},[36,58154,54854],{"class":42},[36,58156,54858],{"class":54857},[36,58158,54861],{"class":101},[36,58160,54864],{"class":42},[36,58162,58163,58165,58167,58169,58171,58173],{"class":38,"line":53},[36,58164,393],{"class":42},[36,58166,54192],{"class":54857},[36,58168,54873],{"class":101},[36,58170,47],{"class":42},[36,58172,54878],{"class":105},[36,58174,54864],{"class":42},[36,58176,58177],{"class":38,"line":196},[36,58178,659],{"emptyLinePlaceholder":658},[36,58180,58181,58183,58185],{"class":38,"line":642},[36,58182,393],{"class":42},[36,58184,54891],{"class":54857},[36,58186,54864],{"class":42},[36,58188,58189,58191,58193,58195,58197,58199],{"class":38,"line":655},[36,58190,55701],{"class":42},[36,58192,54901],{"class":54857},[36,58194,54904],{"class":101},[36,58196,47],{"class":42},[36,58198,54909],{"class":105},[36,58200,54864],{"class":42},[36,58202,58203,58205,58207,58209,58211,58213,58215,58217,58219],{"class":38,"line":662},[36,58204,55701],{"class":42},[36,58206,54901],{"class":54857},[36,58208,18576],{"class":101},[36,58210,47],{"class":42},[36,58212,54948],{"class":105},[36,58214,54928],{"class":101},[36,58216,47],{"class":42},[36,58218,54955],{"class":105},[36,58220,54864],{"class":42},[36,58222,58223,58225,58227,58229,58231],{"class":38,"line":667},[36,58224,55701],{"class":42},[36,58226,54964],{"class":54857},[36,58228,54967],{"class":42},[36,58230,54964],{"class":54857},[36,58232,54864],{"class":42},[36,58234,58235,58237,58239],{"class":38,"line":679},[36,58236,55701],{"class":42},[36,58238,3785],{"class":54857},[36,58240,54864],{"class":42},[36,58242,58243,58245],{"class":38,"line":685},[36,58244,10096],{"class":54857},[36,58246,19228],{"class":42},[36,58248,58249,58252,58254,58256],{"class":38,"line":691},[36,58250,58251],{"class":112},"      padding",[36,58253,54994],{"class":42},[36,58255,1859],{"class":112},[36,58257,5029],{"class":42},[36,58259,58260,58263,58265,58267],{"class":38,"line":696},[36,58261,58262],{"class":112},"      margin",[36,58264,54994],{"class":42},[36,58266,1859],{"class":112},[36,58268,5029],{"class":42},[36,58270,58271],{"class":38,"line":702},[36,58272,5899],{"class":42},[36,58274,58275],{"class":38,"line":708},[36,58276,659],{"emptyLinePlaceholder":658},[36,58278,58279,58282],{"class":38,"line":713},[36,58280,58281],{"class":54857},"    li",[36,58283,19228],{"class":42},[36,58285,58286,58289,58291,58294],{"class":38,"line":719},[36,58287,58288],{"class":112},"      list-style",[36,58290,54994],{"class":42},[36,58292,58293],{"class":112},"none",[36,58295,5029],{"class":42},[36,58297,58298],{"class":38,"line":725},[36,58299,5899],{"class":42},[36,58301,58302],{"class":38,"line":731},[36,58303,659],{"emptyLinePlaceholder":658},[36,58305,58306,58309],{"class":38,"line":736},[36,58307,58308],{"class":101},"    .box",[36,58310,19228],{"class":42},[36,58312,58313,58316,58318,58321],{"class":38,"line":742},[36,58314,58315],{"class":112},"      position",[36,58317,54994],{"class":42},[36,58319,58320],{"class":112},"relative",[36,58322,5029],{"class":42},[36,58324,58325,58328,58330,58333,58335],{"class":38,"line":748},[36,58326,58327],{"class":112},"      width",[36,58329,54994],{"class":42},[36,58331,58332],{"class":112},"976",[36,58334,55049],{"class":46},[36,58336,5029],{"class":42},[36,58338,58339,58342,58344,58346,58348],{"class":38,"line":754},[36,58340,58341],{"class":112},"      height",[36,58343,54994],{"class":42},[36,58345,5274],{"class":112},[36,58347,55049],{"class":46},[36,58349,5029],{"class":42},[36,58351,58352,58354,58356,58358,58360,58362],{"class":38,"line":760},[36,58353,58262],{"class":112},[36,58355,54994],{"class":42},[36,58357,4186],{"class":112},[36,58359,55049],{"class":46},[36,58361,55113],{"class":112},[36,58363,5029],{"class":42},[36,58365,58366],{"class":38,"line":766},[36,58367,5899],{"class":42},[36,58369,58370],{"class":38,"line":772},[36,58371,659],{"emptyLinePlaceholder":658},[36,58373,58374,58377],{"class":38,"line":778},[36,58375,58376],{"class":101},"    .slider-footer",[36,58378,19228],{"class":42},[36,58380,58381,58383,58385,58388],{"class":38,"line":783},[36,58382,58315],{"class":112},[36,58384,54994],{"class":42},[36,58386,58387],{"class":112},"absolute",[36,58389,5029],{"class":42},[36,58391,58392,58395,58397,58399],{"class":38,"line":789},[36,58393,58394],{"class":112},"      left",[36,58396,54994],{"class":42},[36,58398,1859],{"class":112},[36,58400,5029],{"class":42},[36,58402,58403,58406,58408,58410],{"class":38,"line":795},[36,58404,58405],{"class":112},"      bottom",[36,58407,54994],{"class":42},[36,58409,1859],{"class":112},[36,58411,5029],{"class":42},[36,58413,58414,58416,58418,58420,58422],{"class":38,"line":801},[36,58415,58327],{"class":112},[36,58417,54994],{"class":42},[36,58419,4186],{"class":112},[36,58421,4203],{"class":46},[36,58423,5029],{"class":42},[36,58425,58426,58428,58430,58432,58434],{"class":38,"line":807},[36,58427,58341],{"class":112},[36,58429,54994],{"class":42},[36,58431,4446],{"class":112},[36,58433,4203],{"class":46},[36,58435,5029],{"class":42},[36,58437,58438,58441,58443,58446],{"class":38,"line":813},[36,58439,58440],{"class":112},"      background-color",[36,58442,54994],{"class":42},[36,58444,58445],{"class":112},"skyblue",[36,58447,5029],{"class":42},[36,58449,58450],{"class":38,"line":819},[36,58451,5899],{"class":42},[36,58453,58454],{"class":38,"line":824},[36,58455,659],{"emptyLinePlaceholder":658},[36,58457,58458,58460,58462],{"class":38,"line":829},[36,58459,58376],{"class":101},[36,58461,10516],{"class":54857},[36,58463,19228],{"class":42},[36,58465,58466,58468,58470,58472],{"class":38,"line":851},[36,58467,58315],{"class":112},[36,58469,54994],{"class":42},[36,58471,58387],{"class":112},[36,58473,5029],{"class":42},[36,58475,58476,58479,58481,58483,58485],{"class":38,"line":868},[36,58477,58478],{"class":112},"      font-size",[36,58480,54994],{"class":42},[36,58482,4771],{"class":112},[36,58484,55049],{"class":46},[36,58486,5029],{"class":42},[36,58488,58489,58491,58493,58495,58497],{"class":38,"line":873},[36,58490,58394],{"class":112},[36,58492,54994],{"class":42},[36,58494,1921],{"class":112},[36,58496,55049],{"class":46},[36,58498,5029],{"class":42},[36,58500,58501,58504,58506,58508,58510],{"class":38,"line":891},[36,58502,58503],{"class":112},"      top",[36,58505,54994],{"class":42},[36,58507,4194],{"class":112},[36,58509,55049],{"class":46},[36,58511,5029],{"class":42},[36,58513,58514],{"class":38,"line":906},[36,58515,5899],{"class":42},[36,58517,58518],{"class":38,"line":925},[36,58519,659],{"emptyLinePlaceholder":658},[36,58521,58522,58525],{"class":38,"line":943},[36,58523,58524],{"class":54857},"    ul",[36,58526,19228],{"class":42},[36,58528,58529,58531,58533,58535],{"class":38,"line":948},[36,58530,58315],{"class":112},[36,58532,54994],{"class":42},[36,58534,58387],{"class":112},[36,58536,5029],{"class":42},[36,58538,58539,58541,58543,58545,58547],{"class":38,"line":971},[36,58540,58503],{"class":112},[36,58542,54994],{"class":42},[36,58544,4651],{"class":112},[36,58546,55049],{"class":46},[36,58548,5029],{"class":42},[36,58550,58551,58553,58555,58557,58559],{"class":38,"line":992},[36,58552,58394],{"class":112},[36,58554,54994],{"class":42},[36,58556,1921],{"class":112},[36,58558,55049],{"class":46},[36,58560,5029],{"class":42},[36,58562,58563,58566,58568,58570],{"class":38,"line":1020},[36,58564,58565],{"class":112},"      display",[36,58567,54994],{"class":42},[36,58569,55034],{"class":112},[36,58571,5029],{"class":42},[36,58573,58574,58577,58579,58581],{"class":38,"line":1036},[36,58575,58576],{"class":112},"      justify-content",[36,58578,54994],{"class":42},[36,58580,55225],{"class":112},[36,58582,5029],{"class":42},[36,58584,58585,58587,58589,58591],{"class":38,"line":1041},[36,58586,58315],{"class":112},[36,58588,54994],{"class":42},[36,58590,58387],{"class":112},[36,58592,5029],{"class":42},[36,58594,58595,58597,58599,58601,58603],{"class":38,"line":1052},[36,58596,58327],{"class":112},[36,58598,54994],{"class":42},[36,58600,7690],{"class":112},[36,58602,55049],{"class":46},[36,58604,5029],{"class":42},[36,58606,58607,58609,58611,58613,58615],{"class":38,"line":1065},[36,58608,58341],{"class":112},[36,58610,54994],{"class":42},[36,58612,1921],{"class":112},[36,58614,55049],{"class":46},[36,58616,5029],{"class":42},[36,58618,58619],{"class":38,"line":1077},[36,58620,5899],{"class":42},[36,58622,58623],{"class":38,"line":1082},[36,58624,659],{"emptyLinePlaceholder":658},[36,58626,58627,58629,58632],{"class":38,"line":1125},[36,58628,58524],{"class":54857},[36,58630,58631],{"class":54857}," li",[36,58633,19228],{"class":42},[36,58635,58636,58638,58640,58642,58644],{"class":38,"line":1164},[36,58637,58327],{"class":112},[36,58639,54994],{"class":42},[36,58641,1921],{"class":112},[36,58643,55049],{"class":46},[36,58645,5029],{"class":42},[36,58647,58648,58650,58652,58654,58656],{"class":38,"line":1169},[36,58649,58341],{"class":112},[36,58651,54994],{"class":42},[36,58653,1921],{"class":112},[36,58655,55049],{"class":46},[36,58657,5029],{"class":42},[36,58659,58660,58662,58664,58667,58669,58671,58673,58675,58677,58679,58681,58684],{"class":38,"line":1180},[36,58661,58440],{"class":112},[36,58663,54994],{"class":42},[36,58665,58666],{"class":112},"rgba",[36,58668,495],{"class":42},[36,58670,1859],{"class":112},[36,58672,478],{"class":42},[36,58674,1859],{"class":112},[36,58676,478],{"class":42},[36,58678,1859],{"class":112},[36,58680,478],{"class":42},[36,58682,58683],{"class":112},".4",[36,58685,6422],{"class":42},[36,58687,58688,58691,58693,58695,58697],{"class":38,"line":1198},[36,58689,58690],{"class":112},"      border-radius",[36,58692,54994],{"class":42},[36,58694,554],{"class":112},[36,58696,55049],{"class":46},[36,58698,5029],{"class":42},[36,58700,58701],{"class":38,"line":1215},[36,58702,5899],{"class":42},[36,58704,58705],{"class":38,"line":1236},[36,58706,659],{"emptyLinePlaceholder":658},[36,58708,58709,58712],{"class":38,"line":1245},[36,58710,58711],{"class":101},"    .activate",[36,58713,19228],{"class":42},[36,58715,58716,58718,58720,58723],{"class":38,"line":1250},[36,58717,58440],{"class":112},[36,58719,54994],{"class":42},[36,58721,58722],{"class":112},"#f7f7f7",[36,58724,5029],{"class":42},[36,58726,58727],{"class":38,"line":1265},[36,58728,5899],{"class":42},[36,58730,58731,58733,58735],{"class":38,"line":1281},[36,58732,55974],{"class":42},[36,58734,3785],{"class":54857},[36,58736,54864],{"class":42},[36,58738,58739,58741,58743],{"class":38,"line":1297},[36,58740,55342],{"class":42},[36,58742,54891],{"class":54857},[36,58744,54864],{"class":42},[36,58746,58747],{"class":38,"line":1314},[36,58748,659],{"emptyLinePlaceholder":658},[36,58750,58751,58753,58755],{"class":38,"line":1336},[36,58752,393],{"class":42},[36,58754,55357],{"class":54857},[36,58756,54864],{"class":42},[36,58758,58759,58761,58763,58765,58767,58769],{"class":38,"line":1356},[36,58760,55701],{"class":42},[36,58762,55168],{"class":54857},[36,58764,57043],{"class":101},[36,58766,47],{"class":42},[36,58768,57048],{"class":105},[36,58770,54864],{"class":42},[36,58772,58773,58775,58777,58779,58781,58784],{"class":38,"line":1361},[36,58774,54898],{"class":42},[36,58776,55168],{"class":54857},[36,58778,57043],{"class":101},[36,58780,47],{"class":42},[36,58782,58783],{"class":105},"\"slider-wrapper\"",[36,58785,54864],{"class":42},[36,58787,58788,58791,58793,58796,58798,58801,58804,58806,58808],{"class":38,"line":1407},[36,58789,58790],{"class":42},"      \u003C",[36,58792,5198],{"class":54857},[36,58794,58795],{"class":101}," src",[36,58797,47],{"class":42},[36,58799,58800],{"class":105},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,58802,58803],{"class":101}," alt",[36,58805,47],{"class":42},[36,58807,11343],{"class":105},[36,58809,54864],{"class":42},[36,58811,58812,58814,58816],{"class":38,"line":1423},[36,58813,55333],{"class":42},[36,58815,55168],{"class":54857},[36,58817,54864],{"class":42},[36,58819,58820,58822,58824,58826,58828,58831],{"class":38,"line":1439},[36,58821,54898],{"class":42},[36,58823,55168],{"class":54857},[36,58825,57043],{"class":101},[36,58827,47],{"class":42},[36,58829,58830],{"class":105},"\"slider-footer\"",[36,58832,54864],{"class":42},[36,58834,58835,58837,58839,58842,58844],{"class":38,"line":1444},[36,58836,58790],{"class":42},[36,58838,19],{"class":54857},[36,58840,58841],{"class":42},">对人类来说会不会太超前了?\u003C\u002F",[36,58843,19],{"class":54857},[36,58845,54864],{"class":42},[36,58847,58848,58850,58852],{"class":38,"line":1486},[36,58849,58790],{"class":42},[36,58851,4875],{"class":54857},[36,58853,54864],{"class":42},[36,58855,58856,58859,58861,58863,58865,58868,58871,58873],{"class":38,"line":1499},[36,58857,58858],{"class":42},"        \u003C",[36,58860,214],{"class":54857},[36,58862,57043],{"class":101},[36,58864,47],{"class":42},[36,58866,58867],{"class":105},"\"activate\"",[36,58869,58870],{"class":42},">\u003C\u002F",[36,58872,214],{"class":54857},[36,58874,54864],{"class":42},[36,58876,58877,58879,58881,58883,58885],{"class":38,"line":1513},[36,58878,58858],{"class":42},[36,58880,214],{"class":54857},[36,58882,58870],{"class":42},[36,58884,214],{"class":54857},[36,58886,54864],{"class":42},[36,58888,58889,58891,58893,58895,58897],{"class":38,"line":1518},[36,58890,58858],{"class":42},[36,58892,214],{"class":54857},[36,58894,58870],{"class":42},[36,58896,214],{"class":54857},[36,58898,54864],{"class":42},[36,58900,58901,58903,58905,58907,58909],{"class":38,"line":1529},[36,58902,58858],{"class":42},[36,58904,214],{"class":54857},[36,58906,58870],{"class":42},[36,58908,214],{"class":54857},[36,58910,54864],{"class":42},[36,58912,58913,58915,58917,58919,58921],{"class":38,"line":1539},[36,58914,58858],{"class":42},[36,58916,214],{"class":54857},[36,58918,58870],{"class":42},[36,58920,214],{"class":54857},[36,58922,54864],{"class":42},[36,58924,58925,58927,58929,58931,58933],{"class":38,"line":1544},[36,58926,58858],{"class":42},[36,58928,214],{"class":54857},[36,58930,58870],{"class":42},[36,58932,214],{"class":54857},[36,58934,54864],{"class":42},[36,58936,58937,58939,58941,58943,58945],{"class":38,"line":1555},[36,58938,58858],{"class":42},[36,58940,214],{"class":54857},[36,58942,58870],{"class":42},[36,58944,214],{"class":54857},[36,58946,54864],{"class":42},[36,58948,58949,58951,58953,58955,58957],{"class":38,"line":1572},[36,58950,58858],{"class":42},[36,58952,214],{"class":54857},[36,58954,58870],{"class":42},[36,58956,214],{"class":54857},[36,58958,54864],{"class":42},[36,58960,58961,58964,58966],{"class":38,"line":1592},[36,58962,58963],{"class":42},"      \u003C\u002F",[36,58965,4875],{"class":54857},[36,58967,54864],{"class":42},[36,58969,58970,58972,58974],{"class":38,"line":1597},[36,58971,55333],{"class":42},[36,58973,55168],{"class":54857},[36,58975,54864],{"class":42},[36,58977,58978,58980,58982],{"class":38,"line":1610},[36,58979,55974],{"class":42},[36,58981,55168],{"class":54857},[36,58983,54864],{"class":42},[36,58985,58986,58988,58990],{"class":38,"line":1632},[36,58987,55701],{"class":42},[36,58989,55370],{"class":54857},[36,58991,54864],{"class":42},[36,58993,58994,58996,58999,59001],{"class":38,"line":1646},[36,58995,14882],{"class":46},[36,58997,58998],{"class":112}," arrImage",[36,59000,673],{"class":46},[36,59002,59003],{"class":42}," [\n",[36,59005,59006,59009,59012,59015,59018,59021,59024],{"class":38,"line":1651},[36,59007,59008],{"class":42},"      { url: ",[36,59010,59011],{"class":105},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[36,59013,59014],{"class":42},", title: ",[36,59016,59017],{"class":105},"'对人类来说会不会太超前了?'",[36,59019,59020],{"class":42},", color: ",[36,59022,59023],{"class":105},"'rgba(100,67,68)'",[36,59025,59026],{"class":42}," },\n",[36,59028,59029,59031,59034,59036,59039,59041,59044],{"class":38,"line":1664},[36,59030,59008],{"class":42},[36,59032,59033],{"class":105},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[36,59035,59014],{"class":42},[36,59037,59038],{"class":105},"'开启剑与雪的黑暗传说!'",[36,59040,59020],{"class":42},[36,59042,59043],{"class":105},"'rgba(43,35,26)'",[36,59045,59026],{"class":42},[36,59047,59048,59050,59053,59055,59058,59060,59063],{"class":38,"line":1669},[36,59049,59008],{"class":42},[36,59051,59052],{"class":105},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[36,59054,59014],{"class":42},[36,59056,59057],{"class":105},"'真正的jo厨出现了!'",[36,59059,59020],{"class":42},[36,59061,59062],{"class":105},"'rgba(36,31,33)'",[36,59064,59026],{"class":42},[36,59066,59067,59069,59072,59074,59077,59079,59082],{"class":38,"line":1681},[36,59068,59008],{"class":42},[36,59070,59071],{"class":105},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[36,59073,59014],{"class":42},[36,59075,59076],{"class":105},"'李玉刚:让世界通过b站看到东方大国文化'",[36,59078,59020],{"class":42},[36,59080,59081],{"class":105},"'rgba(139,98,66)'",[36,59083,59026],{"class":42},[36,59085,59086,59088,59091,59093,59096,59098,59101],{"class":38,"line":1694},[36,59087,59008],{"class":42},[36,59089,59090],{"class":105},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[36,59092,59014],{"class":42},[36,59094,59095],{"class":105},"'快来分享你的寒假日常吧'",[36,59097,59020],{"class":42},[36,59099,59100],{"class":105},"'rgba(67,90,92)'",[36,59102,59026],{"class":42},[36,59104,59105,59107,59110,59112,59115,59117,59120],{"class":38,"line":1699},[36,59106,59008],{"class":42},[36,59108,59109],{"class":105},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[36,59111,59014],{"class":42},[36,59113,59114],{"class":105},"'哔哩哔哩小年YEAR'",[36,59116,59020],{"class":42},[36,59118,59119],{"class":105},"'rgba(166,131,143)'",[36,59121,59026],{"class":42},[36,59123,59124,59126,59129,59131,59134,59136,59139],{"class":38,"line":1714},[36,59125,59008],{"class":42},[36,59127,59128],{"class":105},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[36,59130,59014],{"class":42},[36,59132,59133],{"class":105},"'一站式解决你的电脑配置问题'",[36,59135,59020],{"class":42},[36,59137,59138],{"class":105},"'rgba(53,29,25)'",[36,59140,59026],{"class":42},[36,59142,59143,59145,59148,59150,59153,59155,59158],{"class":38,"line":1729},[36,59144,59008],{"class":42},[36,59146,59147],{"class":105},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[36,59149,59014],{"class":42},[36,59151,59152],{"class":105},"'谁不想和小猫咪贴贴呢?'",[36,59154,59020],{"class":42},[36,59156,59157],{"class":105},"'rgba(99,72,114)'",[36,59159,59160],{"class":42}," }\n",[36,59162,59163],{"class":38,"line":1746},[36,59164,56666],{"class":42},[36,59166,59167,59169,59172,59174,59176,59178,59180,59183],{"class":38,"line":1751},[36,59168,14882],{"class":46},[36,59170,59171],{"class":112}," img",[36,59173,673],{"class":46},[36,59175,57953],{"class":42},[36,59177,57956],{"class":101},[36,59179,495],{"class":42},[36,59181,59182],{"class":105},"'.slider-wrapper img'",[36,59184,922],{"class":42},[36,59186,59187,59189,59191,59193,59195,59197,59199,59202],{"class":38,"line":1765},[36,59188,14882],{"class":46},[36,59190,10516],{"class":112},[36,59192,673],{"class":46},[36,59194,57953],{"class":42},[36,59196,57956],{"class":101},[36,59198,495],{"class":42},[36,59200,59201],{"class":105},"'.slider-footer p'",[36,59203,922],{"class":42},[36,59205,59206,59208,59211,59213,59215,59217,59219,59222],{"class":38,"line":1783},[36,59207,14882],{"class":46},[36,59209,59210],{"class":112}," color",[36,59212,673],{"class":46},[36,59214,57953],{"class":42},[36,59216,57956],{"class":101},[36,59218,495],{"class":42},[36,59220,59221],{"class":105},"'.slider-footer'",[36,59223,922],{"class":42},[36,59225,59226,59228,59231,59233,59235,59238,59240,59243],{"class":38,"line":1799},[36,59227,14882],{"class":46},[36,59229,59230],{"class":112}," lis",[36,59232,673],{"class":46},[36,59234,57953],{"class":42},[36,59236,59237],{"class":101},"querySelectorAll",[36,59239,495],{"class":42},[36,59241,59242],{"class":105},"'.slider-footer ul li'",[36,59244,922],{"class":42},[36,59246,59247,59249,59251,59253],{"class":38,"line":1807},[36,59248,55776],{"class":46},[36,59250,13119],{"class":42},[36,59252,47],{"class":46},[36,59254,1661],{"class":112},[36,59256,59257,59259,59262,59264,59266,59268,59270],{"class":38,"line":1812},[36,59258,55776],{"class":46},[36,59260,59261],{"class":42}," timer ",[36,59263,47],{"class":46},[36,59265,58000],{"class":101},[36,59267,495],{"class":42},[36,59269,58005],{"class":46},[36,59271,58008],{"class":42},[36,59273,59274,59277,59279],{"class":38,"line":1817},[36,59275,59276],{"class":42},"      img.src ",[36,59278,47],{"class":46},[36,59280,59281],{"class":42}," arrImage[i].url\n",[36,59283,59284,59287,59289],{"class":38,"line":1833},[36,59285,59286],{"class":42},"      p.innerHTML ",[36,59288,47],{"class":46},[36,59290,59291],{"class":42}," arrImage[i].title\n",[36,59293,59294,59297,59299],{"class":38,"line":1844},[36,59295,59296],{"class":42},"      color.style.backgroundColor ",[36,59298,47],{"class":46},[36,59300,59301],{"class":42}," arrImage[i].color\n",[36,59303,59304],{"class":38,"line":1864},[36,59305,59306],{"class":3943},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[36,59308,59309],{"class":38,"line":1878},[36,59310,59311],{"class":3943},"      \u002F\u002F li.classList.add('activate')\n",[36,59313,59314],{"class":38,"line":1891},[36,59315,59316],{"class":3943},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[36,59318,59319],{"class":38,"line":1896},[36,59320,59321],{"class":3943},"      \u002F\u002F lis[i].classList.remove('activate')\n",[36,59323,59324,59327,59329,59331,59334,59337,59340,59342,59345],{"class":38,"line":1906},[36,59325,59326],{"class":42},"      document.",[36,59328,57956],{"class":101},[36,59330,495],{"class":42},[36,59332,59333],{"class":105},"'.activate'",[36,59335,59336],{"class":42},")?.classList.",[36,59338,59339],{"class":101},"toggle",[36,59341,495],{"class":42},[36,59343,59344],{"class":105},"'activate'",[36,59346,922],{"class":42},[36,59348,59349,59352,59354,59356,59358],{"class":38,"line":1926},[36,59350,59351],{"class":42},"      lis[i].classList.",[36,59353,9027],{"class":101},[36,59355,495],{"class":42},[36,59357,59344],{"class":105},[36,59359,922],{"class":42},[36,59361,59362],{"class":38,"line":1936},[36,59363,659],{"emptyLinePlaceholder":658},[36,59365,59366,59369,59371,59373,59375,59377,59379,59381,59384],{"class":38,"line":1946},[36,59367,59368],{"class":42},"      i ",[36,59370,47],{"class":46},[36,59372,58039],{"class":42},[36,59374,4354],{"class":46},[36,59376,28732],{"class":112},[36,59378,17373],{"class":42},[36,59380,4203],{"class":46},[36,59382,59383],{"class":42}," arrImage.",[36,59385,59386],{"class":112},"length\n",[36,59388,59389],{"class":38,"line":1957},[36,59390,659],{"emptyLinePlaceholder":658},[36,59392,59393,59395,59397],{"class":38,"line":2008},[36,59394,58091],{"class":42},[36,59396,3727],{"class":112},[36,59398,922],{"class":42},[36,59400,59401,59403,59405],{"class":38,"line":2022},[36,59402,55974],{"class":42},[36,59404,55370],{"class":54857},[36,59406,54864],{"class":42},[36,59408,59409,59411,59413],{"class":38,"line":2028},[36,59410,55342],{"class":42},[36,59412,55357],{"class":54857},[36,59414,54864],{"class":42},[36,59416,59417],{"class":38,"line":2033},[36,59418,659],{"emptyLinePlaceholder":658},[36,59420,59421,59423,59425],{"class":38,"line":2054},[36,59422,55342],{"class":42},[36,59424,54192],{"class":54857},[36,59426,54864],{"class":42},[19,59428,59429],{},[5198,59430],{"alt":31,"src":59431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,59433,59434],{},"?.就是短路保护,确保输出正常进行",[19,59436,59437],{},"不要忘记取余%,有时候可以用",[19,59439,59440],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[211,59442,59443],{"start":53},[214,59444,59445],{},"法2",[26,59447,59449],{"className":54190,"code":59448,"language":54192,"meta":31,"style":31},"\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",[33,59450,59451,59461,59475,59479,59487,59501,59521,59533,59541,59547,59557,59567,59571,59575,59581,59591,59595,59599,59605,59615,59627,59639,59653,59657,59661,59667,59677,59687,59697,59709,59721,59731,59735,59739,59747,59757,59769,59781,59793,59797,59801,59807,59817,59829,59841,59851,59861,59871,59883,59895,59899,59903,59911,59923,59935,59961,59973,59977,59981,59987,59997,60001,60009,60017,60021,60029,60043,60057,60077,60085,60099,60111,60119,60137,60149,60161,60173,60185,60197,60209,60221,60229,60237,60245,60253,60264,60280,60296,60312,60328,60344,60360,60376,60392,60396,60401,60419,60437,60447,60452,60457,60468,60474,60489,60498,60502,60507,60516,60521,60530,60535,60540,60545,60568,60598,60602,60610,60614,60622,60630,60634],{"__ignoreMap":31},[36,59452,59453,59455,59457,59459],{"class":38,"line":39},[36,59454,54854],{"class":42},[36,59456,54858],{"class":54857},[36,59458,54861],{"class":101},[36,59460,54864],{"class":42},[36,59462,59463,59465,59467,59469,59471,59473],{"class":38,"line":53},[36,59464,393],{"class":42},[36,59466,54192],{"class":54857},[36,59468,54873],{"class":101},[36,59470,47],{"class":42},[36,59472,54878],{"class":105},[36,59474,54864],{"class":42},[36,59476,59477],{"class":38,"line":196},[36,59478,659],{"emptyLinePlaceholder":658},[36,59480,59481,59483,59485],{"class":38,"line":642},[36,59482,393],{"class":42},[36,59484,54891],{"class":54857},[36,59486,54864],{"class":42},[36,59488,59489,59491,59493,59495,59497,59499],{"class":38,"line":655},[36,59490,55701],{"class":42},[36,59492,54901],{"class":54857},[36,59494,54904],{"class":101},[36,59496,47],{"class":42},[36,59498,54909],{"class":105},[36,59500,54864],{"class":42},[36,59502,59503,59505,59507,59509,59511,59513,59515,59517,59519],{"class":38,"line":662},[36,59504,55701],{"class":42},[36,59506,54901],{"class":54857},[36,59508,18576],{"class":101},[36,59510,47],{"class":42},[36,59512,54948],{"class":105},[36,59514,54928],{"class":101},[36,59516,47],{"class":42},[36,59518,54955],{"class":105},[36,59520,54864],{"class":42},[36,59522,59523,59525,59527,59529,59531],{"class":38,"line":667},[36,59524,55701],{"class":42},[36,59526,54964],{"class":54857},[36,59528,54967],{"class":42},[36,59530,54964],{"class":54857},[36,59532,54864],{"class":42},[36,59534,59535,59537,59539],{"class":38,"line":679},[36,59536,55701],{"class":42},[36,59538,3785],{"class":54857},[36,59540,54864],{"class":42},[36,59542,59543,59545],{"class":38,"line":685},[36,59544,10096],{"class":54857},[36,59546,19228],{"class":42},[36,59548,59549,59551,59553,59555],{"class":38,"line":691},[36,59550,58251],{"class":112},[36,59552,54994],{"class":42},[36,59554,1859],{"class":112},[36,59556,5029],{"class":42},[36,59558,59559,59561,59563,59565],{"class":38,"line":696},[36,59560,58262],{"class":112},[36,59562,54994],{"class":42},[36,59564,1859],{"class":112},[36,59566,5029],{"class":42},[36,59568,59569],{"class":38,"line":702},[36,59570,5899],{"class":42},[36,59572,59573],{"class":38,"line":708},[36,59574,659],{"emptyLinePlaceholder":658},[36,59576,59577,59579],{"class":38,"line":713},[36,59578,58281],{"class":54857},[36,59580,19228],{"class":42},[36,59582,59583,59585,59587,59589],{"class":38,"line":719},[36,59584,58288],{"class":112},[36,59586,54994],{"class":42},[36,59588,58293],{"class":112},[36,59590,5029],{"class":42},[36,59592,59593],{"class":38,"line":725},[36,59594,5899],{"class":42},[36,59596,59597],{"class":38,"line":731},[36,59598,659],{"emptyLinePlaceholder":658},[36,59600,59601,59603],{"class":38,"line":736},[36,59602,58308],{"class":101},[36,59604,19228],{"class":42},[36,59606,59607,59609,59611,59613],{"class":38,"line":742},[36,59608,58315],{"class":112},[36,59610,54994],{"class":42},[36,59612,58320],{"class":112},[36,59614,5029],{"class":42},[36,59616,59617,59619,59621,59623,59625],{"class":38,"line":748},[36,59618,58327],{"class":112},[36,59620,54994],{"class":42},[36,59622,58332],{"class":112},[36,59624,55049],{"class":46},[36,59626,5029],{"class":42},[36,59628,59629,59631,59633,59635,59637],{"class":38,"line":754},[36,59630,58341],{"class":112},[36,59632,54994],{"class":42},[36,59634,5274],{"class":112},[36,59636,55049],{"class":46},[36,59638,5029],{"class":42},[36,59640,59641,59643,59645,59647,59649,59651],{"class":38,"line":760},[36,59642,58262],{"class":112},[36,59644,54994],{"class":42},[36,59646,4186],{"class":112},[36,59648,55049],{"class":46},[36,59650,55113],{"class":112},[36,59652,5029],{"class":42},[36,59654,59655],{"class":38,"line":766},[36,59656,5899],{"class":42},[36,59658,59659],{"class":38,"line":772},[36,59660,659],{"emptyLinePlaceholder":658},[36,59662,59663,59665],{"class":38,"line":778},[36,59664,58376],{"class":101},[36,59666,19228],{"class":42},[36,59668,59669,59671,59673,59675],{"class":38,"line":783},[36,59670,58315],{"class":112},[36,59672,54994],{"class":42},[36,59674,58387],{"class":112},[36,59676,5029],{"class":42},[36,59678,59679,59681,59683,59685],{"class":38,"line":789},[36,59680,58394],{"class":112},[36,59682,54994],{"class":42},[36,59684,1859],{"class":112},[36,59686,5029],{"class":42},[36,59688,59689,59691,59693,59695],{"class":38,"line":795},[36,59690,58405],{"class":112},[36,59692,54994],{"class":42},[36,59694,1859],{"class":112},[36,59696,5029],{"class":42},[36,59698,59699,59701,59703,59705,59707],{"class":38,"line":801},[36,59700,58327],{"class":112},[36,59702,54994],{"class":42},[36,59704,4186],{"class":112},[36,59706,4203],{"class":46},[36,59708,5029],{"class":42},[36,59710,59711,59713,59715,59717,59719],{"class":38,"line":807},[36,59712,58341],{"class":112},[36,59714,54994],{"class":42},[36,59716,4446],{"class":112},[36,59718,4203],{"class":46},[36,59720,5029],{"class":42},[36,59722,59723,59725,59727,59729],{"class":38,"line":813},[36,59724,58440],{"class":112},[36,59726,54994],{"class":42},[36,59728,58445],{"class":112},[36,59730,5029],{"class":42},[36,59732,59733],{"class":38,"line":819},[36,59734,5899],{"class":42},[36,59736,59737],{"class":38,"line":824},[36,59738,659],{"emptyLinePlaceholder":658},[36,59740,59741,59743,59745],{"class":38,"line":829},[36,59742,58376],{"class":101},[36,59744,10516],{"class":54857},[36,59746,19228],{"class":42},[36,59748,59749,59751,59753,59755],{"class":38,"line":851},[36,59750,58315],{"class":112},[36,59752,54994],{"class":42},[36,59754,58387],{"class":112},[36,59756,5029],{"class":42},[36,59758,59759,59761,59763,59765,59767],{"class":38,"line":868},[36,59760,58478],{"class":112},[36,59762,54994],{"class":42},[36,59764,4771],{"class":112},[36,59766,55049],{"class":46},[36,59768,5029],{"class":42},[36,59770,59771,59773,59775,59777,59779],{"class":38,"line":873},[36,59772,58394],{"class":112},[36,59774,54994],{"class":42},[36,59776,1921],{"class":112},[36,59778,55049],{"class":46},[36,59780,5029],{"class":42},[36,59782,59783,59785,59787,59789,59791],{"class":38,"line":891},[36,59784,58503],{"class":112},[36,59786,54994],{"class":42},[36,59788,4194],{"class":112},[36,59790,55049],{"class":46},[36,59792,5029],{"class":42},[36,59794,59795],{"class":38,"line":906},[36,59796,5899],{"class":42},[36,59798,59799],{"class":38,"line":925},[36,59800,659],{"emptyLinePlaceholder":658},[36,59802,59803,59805],{"class":38,"line":943},[36,59804,58524],{"class":54857},[36,59806,19228],{"class":42},[36,59808,59809,59811,59813,59815],{"class":38,"line":948},[36,59810,58315],{"class":112},[36,59812,54994],{"class":42},[36,59814,58387],{"class":112},[36,59816,5029],{"class":42},[36,59818,59819,59821,59823,59825,59827],{"class":38,"line":971},[36,59820,58503],{"class":112},[36,59822,54994],{"class":42},[36,59824,4651],{"class":112},[36,59826,55049],{"class":46},[36,59828,5029],{"class":42},[36,59830,59831,59833,59835,59837,59839],{"class":38,"line":992},[36,59832,58394],{"class":112},[36,59834,54994],{"class":42},[36,59836,1921],{"class":112},[36,59838,55049],{"class":46},[36,59840,5029],{"class":42},[36,59842,59843,59845,59847,59849],{"class":38,"line":1020},[36,59844,58565],{"class":112},[36,59846,54994],{"class":42},[36,59848,55034],{"class":112},[36,59850,5029],{"class":42},[36,59852,59853,59855,59857,59859],{"class":38,"line":1036},[36,59854,58576],{"class":112},[36,59856,54994],{"class":42},[36,59858,55225],{"class":112},[36,59860,5029],{"class":42},[36,59862,59863,59865,59867,59869],{"class":38,"line":1041},[36,59864,58315],{"class":112},[36,59866,54994],{"class":42},[36,59868,58387],{"class":112},[36,59870,5029],{"class":42},[36,59872,59873,59875,59877,59879,59881],{"class":38,"line":1052},[36,59874,58327],{"class":112},[36,59876,54994],{"class":42},[36,59878,7690],{"class":112},[36,59880,55049],{"class":46},[36,59882,5029],{"class":42},[36,59884,59885,59887,59889,59891,59893],{"class":38,"line":1065},[36,59886,58341],{"class":112},[36,59888,54994],{"class":42},[36,59890,1921],{"class":112},[36,59892,55049],{"class":46},[36,59894,5029],{"class":42},[36,59896,59897],{"class":38,"line":1077},[36,59898,5899],{"class":42},[36,59900,59901],{"class":38,"line":1082},[36,59902,659],{"emptyLinePlaceholder":658},[36,59904,59905,59907,59909],{"class":38,"line":1125},[36,59906,58524],{"class":54857},[36,59908,58631],{"class":54857},[36,59910,19228],{"class":42},[36,59912,59913,59915,59917,59919,59921],{"class":38,"line":1164},[36,59914,58327],{"class":112},[36,59916,54994],{"class":42},[36,59918,1921],{"class":112},[36,59920,55049],{"class":46},[36,59922,5029],{"class":42},[36,59924,59925,59927,59929,59931,59933],{"class":38,"line":1169},[36,59926,58341],{"class":112},[36,59928,54994],{"class":42},[36,59930,1921],{"class":112},[36,59932,55049],{"class":46},[36,59934,5029],{"class":42},[36,59936,59937,59939,59941,59943,59945,59947,59949,59951,59953,59955,59957,59959],{"class":38,"line":1180},[36,59938,58440],{"class":112},[36,59940,54994],{"class":42},[36,59942,58666],{"class":112},[36,59944,495],{"class":42},[36,59946,1859],{"class":112},[36,59948,478],{"class":42},[36,59950,1859],{"class":112},[36,59952,478],{"class":42},[36,59954,1859],{"class":112},[36,59956,478],{"class":42},[36,59958,58683],{"class":112},[36,59960,6422],{"class":42},[36,59962,59963,59965,59967,59969,59971],{"class":38,"line":1198},[36,59964,58690],{"class":112},[36,59966,54994],{"class":42},[36,59968,554],{"class":112},[36,59970,55049],{"class":46},[36,59972,5029],{"class":42},[36,59974,59975],{"class":38,"line":1215},[36,59976,5899],{"class":42},[36,59978,59979],{"class":38,"line":1236},[36,59980,659],{"emptyLinePlaceholder":658},[36,59982,59983,59985],{"class":38,"line":1245},[36,59984,58711],{"class":101},[36,59986,19228],{"class":42},[36,59988,59989,59991,59993,59995],{"class":38,"line":1250},[36,59990,58440],{"class":112},[36,59992,54994],{"class":42},[36,59994,58722],{"class":112},[36,59996,5029],{"class":42},[36,59998,59999],{"class":38,"line":1265},[36,60000,5899],{"class":42},[36,60002,60003,60005,60007],{"class":38,"line":1281},[36,60004,55974],{"class":42},[36,60006,3785],{"class":54857},[36,60008,54864],{"class":42},[36,60010,60011,60013,60015],{"class":38,"line":1297},[36,60012,55342],{"class":42},[36,60014,54891],{"class":54857},[36,60016,54864],{"class":42},[36,60018,60019],{"class":38,"line":1314},[36,60020,659],{"emptyLinePlaceholder":658},[36,60022,60023,60025,60027],{"class":38,"line":1336},[36,60024,393],{"class":42},[36,60026,55357],{"class":54857},[36,60028,54864],{"class":42},[36,60030,60031,60033,60035,60037,60039,60041],{"class":38,"line":1356},[36,60032,55701],{"class":42},[36,60034,55168],{"class":54857},[36,60036,57043],{"class":101},[36,60038,47],{"class":42},[36,60040,57048],{"class":105},[36,60042,54864],{"class":42},[36,60044,60045,60047,60049,60051,60053,60055],{"class":38,"line":1361},[36,60046,54898],{"class":42},[36,60048,55168],{"class":54857},[36,60050,57043],{"class":101},[36,60052,47],{"class":42},[36,60054,58783],{"class":105},[36,60056,54864],{"class":42},[36,60058,60059,60061,60063,60065,60067,60069,60071,60073,60075],{"class":38,"line":1407},[36,60060,58790],{"class":42},[36,60062,5198],{"class":54857},[36,60064,58795],{"class":101},[36,60066,47],{"class":42},[36,60068,58800],{"class":105},[36,60070,58803],{"class":101},[36,60072,47],{"class":42},[36,60074,11343],{"class":105},[36,60076,54864],{"class":42},[36,60078,60079,60081,60083],{"class":38,"line":1423},[36,60080,55333],{"class":42},[36,60082,55168],{"class":54857},[36,60084,54864],{"class":42},[36,60086,60087,60089,60091,60093,60095,60097],{"class":38,"line":1439},[36,60088,54898],{"class":42},[36,60090,55168],{"class":54857},[36,60092,57043],{"class":101},[36,60094,47],{"class":42},[36,60096,58830],{"class":105},[36,60098,54864],{"class":42},[36,60100,60101,60103,60105,60107,60109],{"class":38,"line":1444},[36,60102,58790],{"class":42},[36,60104,19],{"class":54857},[36,60106,58841],{"class":42},[36,60108,19],{"class":54857},[36,60110,54864],{"class":42},[36,60112,60113,60115,60117],{"class":38,"line":1486},[36,60114,58790],{"class":42},[36,60116,4875],{"class":54857},[36,60118,54864],{"class":42},[36,60120,60121,60123,60125,60127,60129,60131,60133,60135],{"class":38,"line":1499},[36,60122,58858],{"class":42},[36,60124,214],{"class":54857},[36,60126,57043],{"class":101},[36,60128,47],{"class":42},[36,60130,58867],{"class":105},[36,60132,58870],{"class":42},[36,60134,214],{"class":54857},[36,60136,54864],{"class":42},[36,60138,60139,60141,60143,60145,60147],{"class":38,"line":1513},[36,60140,58858],{"class":42},[36,60142,214],{"class":54857},[36,60144,58870],{"class":42},[36,60146,214],{"class":54857},[36,60148,54864],{"class":42},[36,60150,60151,60153,60155,60157,60159],{"class":38,"line":1518},[36,60152,58858],{"class":42},[36,60154,214],{"class":54857},[36,60156,58870],{"class":42},[36,60158,214],{"class":54857},[36,60160,54864],{"class":42},[36,60162,60163,60165,60167,60169,60171],{"class":38,"line":1529},[36,60164,58858],{"class":42},[36,60166,214],{"class":54857},[36,60168,58870],{"class":42},[36,60170,214],{"class":54857},[36,60172,54864],{"class":42},[36,60174,60175,60177,60179,60181,60183],{"class":38,"line":1539},[36,60176,58858],{"class":42},[36,60178,214],{"class":54857},[36,60180,58870],{"class":42},[36,60182,214],{"class":54857},[36,60184,54864],{"class":42},[36,60186,60187,60189,60191,60193,60195],{"class":38,"line":1544},[36,60188,58858],{"class":42},[36,60190,214],{"class":54857},[36,60192,58870],{"class":42},[36,60194,214],{"class":54857},[36,60196,54864],{"class":42},[36,60198,60199,60201,60203,60205,60207],{"class":38,"line":1555},[36,60200,58858],{"class":42},[36,60202,214],{"class":54857},[36,60204,58870],{"class":42},[36,60206,214],{"class":54857},[36,60208,54864],{"class":42},[36,60210,60211,60213,60215,60217,60219],{"class":38,"line":1572},[36,60212,58858],{"class":42},[36,60214,214],{"class":54857},[36,60216,58870],{"class":42},[36,60218,214],{"class":54857},[36,60220,54864],{"class":42},[36,60222,60223,60225,60227],{"class":38,"line":1592},[36,60224,58963],{"class":42},[36,60226,4875],{"class":54857},[36,60228,54864],{"class":42},[36,60230,60231,60233,60235],{"class":38,"line":1597},[36,60232,55333],{"class":42},[36,60234,55168],{"class":54857},[36,60236,54864],{"class":42},[36,60238,60239,60241,60243],{"class":38,"line":1610},[36,60240,55974],{"class":42},[36,60242,55168],{"class":54857},[36,60244,54864],{"class":42},[36,60246,60247,60249,60251],{"class":38,"line":1632},[36,60248,55701],{"class":42},[36,60250,55370],{"class":54857},[36,60252,54864],{"class":42},[36,60254,60255,60257,60260,60262],{"class":38,"line":1646},[36,60256,14882],{"class":46},[36,60258,60259],{"class":112}," sliderData",[36,60261,673],{"class":46},[36,60263,59003],{"class":42},[36,60265,60266,60268,60270,60272,60274,60276,60278],{"class":38,"line":1651},[36,60267,59008],{"class":42},[36,60269,59011],{"class":105},[36,60271,59014],{"class":42},[36,60273,59017],{"class":105},[36,60275,59020],{"class":42},[36,60277,59023],{"class":105},[36,60279,59026],{"class":42},[36,60281,60282,60284,60286,60288,60290,60292,60294],{"class":38,"line":1664},[36,60283,59008],{"class":42},[36,60285,59033],{"class":105},[36,60287,59014],{"class":42},[36,60289,59038],{"class":105},[36,60291,59020],{"class":42},[36,60293,59043],{"class":105},[36,60295,59026],{"class":42},[36,60297,60298,60300,60302,60304,60306,60308,60310],{"class":38,"line":1669},[36,60299,59008],{"class":42},[36,60301,59052],{"class":105},[36,60303,59014],{"class":42},[36,60305,59057],{"class":105},[36,60307,59020],{"class":42},[36,60309,59062],{"class":105},[36,60311,59026],{"class":42},[36,60313,60314,60316,60318,60320,60322,60324,60326],{"class":38,"line":1681},[36,60315,59008],{"class":42},[36,60317,59071],{"class":105},[36,60319,59014],{"class":42},[36,60321,59076],{"class":105},[36,60323,59020],{"class":42},[36,60325,59081],{"class":105},[36,60327,59026],{"class":42},[36,60329,60330,60332,60334,60336,60338,60340,60342],{"class":38,"line":1694},[36,60331,59008],{"class":42},[36,60333,59090],{"class":105},[36,60335,59014],{"class":42},[36,60337,59095],{"class":105},[36,60339,59020],{"class":42},[36,60341,59100],{"class":105},[36,60343,59026],{"class":42},[36,60345,60346,60348,60350,60352,60354,60356,60358],{"class":38,"line":1699},[36,60347,59008],{"class":42},[36,60349,59109],{"class":105},[36,60351,59014],{"class":42},[36,60353,59114],{"class":105},[36,60355,59020],{"class":42},[36,60357,59119],{"class":105},[36,60359,59026],{"class":42},[36,60361,60362,60364,60366,60368,60370,60372,60374],{"class":38,"line":1714},[36,60363,59008],{"class":42},[36,60365,59128],{"class":105},[36,60367,59014],{"class":42},[36,60369,59133],{"class":105},[36,60371,59020],{"class":42},[36,60373,59138],{"class":105},[36,60375,59026],{"class":42},[36,60377,60378,60380,60382,60384,60386,60388,60390],{"class":38,"line":1729},[36,60379,59008],{"class":42},[36,60381,59147],{"class":105},[36,60383,59014],{"class":42},[36,60385,59152],{"class":105},[36,60387,59020],{"class":42},[36,60389,59157],{"class":105},[36,60391,59160],{"class":42},[36,60393,60394],{"class":38,"line":1746},[36,60395,56666],{"class":42},[36,60397,60398],{"class":38,"line":1751},[36,60399,60400],{"class":3943},"    \u002F\u002F 1.获取元素\n",[36,60402,60403,60405,60407,60409,60411,60413,60415,60417],{"class":38,"line":1765},[36,60404,14882],{"class":46},[36,60406,59171],{"class":112},[36,60408,673],{"class":46},[36,60410,57953],{"class":42},[36,60412,57956],{"class":101},[36,60414,495],{"class":42},[36,60416,59182],{"class":105},[36,60418,922],{"class":42},[36,60420,60421,60423,60425,60427,60429,60431,60433,60435],{"class":38,"line":1783},[36,60422,14882],{"class":46},[36,60424,10516],{"class":112},[36,60426,673],{"class":46},[36,60428,57953],{"class":42},[36,60430,57956],{"class":101},[36,60432,495],{"class":42},[36,60434,59201],{"class":105},[36,60436,922],{"class":42},[36,60438,60439,60441,60443,60445],{"class":38,"line":1799},[36,60440,55776],{"class":46},[36,60442,13119],{"class":42},[36,60444,47],{"class":46},[36,60446,1074],{"class":112},[36,60448,60449],{"class":38,"line":1807},[36,60450,60451],{"class":3943},"    \u002F\u002F 2.开启定时器\n",[36,60453,60454],{"class":38,"line":1812},[36,60455,60456],{"class":3943},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[36,60458,60459,60462,60464,60466],{"class":38,"line":1817},[36,60460,60461],{"class":101},"    setInterval",[36,60463,495],{"class":42},[36,60465,58005],{"class":46},[36,60467,58008],{"class":42},[36,60469,60470,60472],{"class":38,"line":1833},[36,60471,58013],{"class":42},[36,60473,6405],{"class":46},[36,60475,60476,60478,60480,60482,60485,60487],{"class":38,"line":1844},[36,60477,58036],{"class":46},[36,60479,58039],{"class":42},[36,60481,412],{"class":46},[36,60483,60484],{"class":42}," sliderData.",[36,60486,55525],{"class":112},[36,60488,16102],{"class":42},[36,60490,60491,60494,60496],{"class":38,"line":1864},[36,60492,60493],{"class":42},"        i ",[36,60495,47],{"class":46},[36,60497,1074],{"class":112},[36,60499,60500],{"class":38,"line":1878},[36,60501,55955],{"class":42},[36,60503,60504],{"class":38,"line":1891},[36,60505,60506],{"class":3943},"      \u002F\u002F 更换图片路径\n",[36,60508,60509,60511,60513],{"class":38,"line":1896},[36,60510,59276],{"class":42},[36,60512,47],{"class":46},[36,60514,60515],{"class":42}," sliderData[i].url\n",[36,60517,60518],{"class":38,"line":1906},[36,60519,60520],{"class":3943},"      \u002F\u002F 把文字写到p里面\n",[36,60522,60523,60525,60527],{"class":38,"line":1926},[36,60524,59286],{"class":42},[36,60526,47],{"class":46},[36,60528,60529],{"class":42}," sliderData[i].title\n",[36,60531,60532],{"class":38,"line":1936},[36,60533,60534],{"class":3943},"      \u002F\u002F 小圆点\n",[36,60536,60537],{"class":38,"line":1946},[36,60538,60539],{"class":3943},"      \u002F\u002F 先删除以前的active\n",[36,60541,60542],{"class":38,"line":1957},[36,60543,60544],{"class":3943},"      \u002F\u002F 只让当前li添加active\n",[36,60546,60547,60549,60551,60553,60556,60559,60562,60564,60566],{"class":38,"line":2008},[36,60548,59326],{"class":42},[36,60550,57956],{"class":101},[36,60552,495],{"class":42},[36,60554,60555],{"class":105},"'.slider-footer .activate'",[36,60557,60558],{"class":42},").classList.",[36,60560,60561],{"class":101},"remove",[36,60563,495],{"class":42},[36,60565,59344],{"class":105},[36,60567,922],{"class":42},[36,60569,60570,60572,60574,60576,60579,60581,60583,60585,60588,60590,60592,60594,60596],{"class":38,"line":2022},[36,60571,59326],{"class":42},[36,60573,57956],{"class":101},[36,60575,495],{"class":42},[36,60577,60578],{"class":105},"`.slider-footer ul li:nth-child(${",[36,60580,4316],{"class":42},[36,60582,49124],{"class":46},[36,60584,28732],{"class":112},[36,60586,60587],{"class":105},"})`",[36,60589,60558],{"class":42},[36,60591,9027],{"class":101},[36,60593,495],{"class":42},[36,60595,59344],{"class":105},[36,60597,922],{"class":42},[36,60599,60600],{"class":38,"line":2028},[36,60601,659],{"emptyLinePlaceholder":658},[36,60603,60604,60606,60608],{"class":38,"line":2033},[36,60605,58091],{"class":42},[36,60607,3727],{"class":112},[36,60609,922],{"class":42},[36,60611,60612],{"class":38,"line":2054},[36,60613,659],{"emptyLinePlaceholder":658},[36,60615,60616,60618,60620],{"class":38,"line":2059},[36,60617,55974],{"class":42},[36,60619,55370],{"class":54857},[36,60621,54864],{"class":42},[36,60623,60624,60626,60628],{"class":38,"line":2064},[36,60625,55342],{"class":42},[36,60627,55357],{"class":54857},[36,60629,54864],{"class":42},[36,60631,60632],{"class":38,"line":2081},[36,60633,659],{"emptyLinePlaceholder":658},[36,60635,60636,60638,60640],{"class":38,"line":36396},[36,60637,55342],{"class":42},[36,60639,54192],{"class":54857},[36,60641,54864],{"class":42},[318,60643,60645],{"id":60644},"_317-重要知识点","3.1.7 重要知识点",[19,60647,60648,60649],{},"浏览器在渲染文本时， ",[4027,60650,60651],{},"没有空格或换行符就没有“断行点”",[19,60653,60654],{},[5198,60655],{"alt":31,"src":60656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,60658,60659],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,60661,60662],{},[5198,60663],{"alt":31,"src":60664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,60666,60667],{},[5198,60668],{"alt":31,"src":60669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,60671,60673],{"id":60672},"_32-dom事件基础","3.2 DOM事件基础",[318,60675,60677],{"id":60676},"_321-事件监听","3.2.1 事件监听",[19,60679,60680],{},[5198,60681],{"alt":31,"src":60682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,60684,60685],{},"事件监听有响应的发生",[19,60687,60688],{},[5198,60689],{"alt":31,"src":60690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,60692,60693],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,60695,60696],{},"对于有名函数,要执行的函数名后边不要加()",[318,60698,60700],{"id":60699},"_322-随机点名案例","3.2.2 随机点名案例",[26,60702,60704],{"className":54190,"code":60703,"language":54192,"meta":31,"style":31},"\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",[33,60705,60706,60716,60730,60734,60742,60756,60776,60788,60796,60802,60812,60822,60826,60830,60837,60848,60852,60856,60862,60874,60888,60898,60910,60923,60927,60931,60938,60942,60955,60967,60979,60983,60987,60991,60998,61008,61012,61016,61025,61037,61049,61064,61068,61076,61084,61088,61096,61109,61123,61136,61156,61164,61179,61199,61219,61227,61231,61239,61244,61280,61300,61305,61324,61329,61340,61345,61356,61361,61380,61395,61400,61426,61436,61445,61450,61466,61471,61476,61481,61496,61500,61504,61509,61528,61545,61553,61558,61573,61577,61581,61589,61597,61601],{"__ignoreMap":31},[36,60707,60708,60710,60712,60714],{"class":38,"line":39},[36,60709,54854],{"class":42},[36,60711,54858],{"class":54857},[36,60713,54861],{"class":101},[36,60715,54864],{"class":42},[36,60717,60718,60720,60722,60724,60726,60728],{"class":38,"line":53},[36,60719,393],{"class":42},[36,60721,54192],{"class":54857},[36,60723,54873],{"class":101},[36,60725,47],{"class":42},[36,60727,54878],{"class":105},[36,60729,54864],{"class":42},[36,60731,60732],{"class":38,"line":196},[36,60733,659],{"emptyLinePlaceholder":658},[36,60735,60736,60738,60740],{"class":38,"line":642},[36,60737,393],{"class":42},[36,60739,54891],{"class":54857},[36,60741,54864],{"class":42},[36,60743,60744,60746,60748,60750,60752,60754],{"class":38,"line":655},[36,60745,55701],{"class":42},[36,60747,54901],{"class":54857},[36,60749,54904],{"class":101},[36,60751,47],{"class":42},[36,60753,54909],{"class":105},[36,60755,54864],{"class":42},[36,60757,60758,60760,60762,60764,60766,60768,60770,60772,60774],{"class":38,"line":662},[36,60759,55701],{"class":42},[36,60761,54901],{"class":54857},[36,60763,18576],{"class":101},[36,60765,47],{"class":42},[36,60767,54948],{"class":105},[36,60769,54928],{"class":101},[36,60771,47],{"class":42},[36,60773,54955],{"class":105},[36,60775,54864],{"class":42},[36,60777,60778,60780,60782,60784,60786],{"class":38,"line":667},[36,60779,55701],{"class":42},[36,60781,54964],{"class":54857},[36,60783,54967],{"class":42},[36,60785,54964],{"class":54857},[36,60787,54864],{"class":42},[36,60789,60790,60792,60794],{"class":38,"line":679},[36,60791,55701],{"class":42},[36,60793,3785],{"class":54857},[36,60795,54864],{"class":42},[36,60797,60798,60800],{"class":38,"line":685},[36,60799,10096],{"class":54857},[36,60801,19228],{"class":42},[36,60803,60804,60806,60808,60810],{"class":38,"line":691},[36,60805,58262],{"class":112},[36,60807,54994],{"class":42},[36,60809,1859],{"class":112},[36,60811,5029],{"class":42},[36,60813,60814,60816,60818,60820],{"class":38,"line":696},[36,60815,58251],{"class":112},[36,60817,54994],{"class":42},[36,60819,1859],{"class":112},[36,60821,5029],{"class":42},[36,60823,60824],{"class":38,"line":702},[36,60825,5899],{"class":42},[36,60827,60828],{"class":38,"line":708},[36,60829,659],{"emptyLinePlaceholder":658},[36,60831,60832,60835],{"class":38,"line":713},[36,60833,60834],{"class":54857},"    h2",[36,60836,19228],{"class":42},[36,60838,60839,60842,60844,60846],{"class":38,"line":719},[36,60840,60841],{"class":112},"      text-align",[36,60843,54994],{"class":42},[36,60845,55149],{"class":112},[36,60847,5029],{"class":42},[36,60849,60850],{"class":38,"line":725},[36,60851,5899],{"class":42},[36,60853,60854],{"class":38,"line":731},[36,60855,659],{"emptyLinePlaceholder":658},[36,60857,60858,60860],{"class":38,"line":736},[36,60859,58308],{"class":101},[36,60861,19228],{"class":42},[36,60863,60864,60866,60868,60870,60872],{"class":38,"line":742},[36,60865,58327],{"class":112},[36,60867,54994],{"class":42},[36,60869,5274],{"class":112},[36,60871,55049],{"class":46},[36,60873,5029],{"class":42},[36,60875,60876,60878,60880,60882,60884,60886],{"class":38,"line":748},[36,60877,58262],{"class":112},[36,60879,54994],{"class":42},[36,60881,4527],{"class":112},[36,60883,55049],{"class":46},[36,60885,55113],{"class":112},[36,60887,5029],{"class":42},[36,60889,60890,60892,60894,60896],{"class":38,"line":754},[36,60891,58565],{"class":112},[36,60893,54994],{"class":42},[36,60895,55034],{"class":112},[36,60897,5029],{"class":42},[36,60899,60900,60902,60904,60906,60908],{"class":38,"line":760},[36,60901,58478],{"class":112},[36,60903,54994],{"class":42},[36,60905,4695],{"class":112},[36,60907,55049],{"class":46},[36,60909,5029],{"class":42},[36,60911,60912,60915,60917,60919,60921],{"class":38,"line":766},[36,60913,60914],{"class":112},"      line-height",[36,60916,54994],{"class":42},[36,60918,4276],{"class":112},[36,60920,55049],{"class":46},[36,60922,5029],{"class":42},[36,60924,60925],{"class":38,"line":772},[36,60926,5899],{"class":42},[36,60928,60929],{"class":38,"line":778},[36,60930,659],{"emptyLinePlaceholder":658},[36,60932,60933,60936],{"class":38,"line":783},[36,60934,60935],{"class":101},"    .qs",[36,60937,19228],{"class":42},[36,60939,60940],{"class":38,"line":789},[36,60941,659],{"emptyLinePlaceholder":658},[36,60943,60944,60946,60948,60951,60953],{"class":38,"line":795},[36,60945,58327],{"class":112},[36,60947,54994],{"class":42},[36,60949,60950],{"class":112},"450",[36,60952,55049],{"class":46},[36,60954,5029],{"class":42},[36,60956,60957,60959,60961,60963,60965],{"class":38,"line":801},[36,60958,58341],{"class":112},[36,60960,54994],{"class":42},[36,60962,4276],{"class":112},[36,60964,55049],{"class":46},[36,60966,5029],{"class":42},[36,60968,60969,60972,60974,60977],{"class":38,"line":807},[36,60970,60971],{"class":112},"      color",[36,60973,54994],{"class":42},[36,60975,60976],{"class":112},"red",[36,60978,5029],{"class":42},[36,60980,60981],{"class":38,"line":813},[36,60982,659],{"emptyLinePlaceholder":658},[36,60984,60985],{"class":38,"line":819},[36,60986,5899],{"class":42},[36,60988,60989],{"class":38,"line":824},[36,60990,659],{"emptyLinePlaceholder":658},[36,60992,60993,60996],{"class":38,"line":829},[36,60994,60995],{"class":101},"    .btns",[36,60997,19228],{"class":42},[36,60999,61000,61002,61004,61006],{"class":38,"line":851},[36,61001,60841],{"class":112},[36,61003,54994],{"class":42},[36,61005,55149],{"class":112},[36,61007,5029],{"class":42},[36,61009,61010],{"class":38,"line":868},[36,61011,5899],{"class":42},[36,61013,61014],{"class":38,"line":873},[36,61015,659],{"emptyLinePlaceholder":658},[36,61017,61018,61020,61023],{"class":38,"line":891},[36,61019,60995],{"class":101},[36,61021,61022],{"class":54857}," button",[36,61024,19228],{"class":42},[36,61026,61027,61029,61031,61033,61035],{"class":38,"line":906},[36,61028,58327],{"class":112},[36,61030,54994],{"class":42},[36,61032,4687],{"class":112},[36,61034,55049],{"class":46},[36,61036,5029],{"class":42},[36,61038,61039,61041,61043,61045,61047],{"class":38,"line":925},[36,61040,58341],{"class":112},[36,61042,54994],{"class":42},[36,61044,4148],{"class":112},[36,61046,55049],{"class":46},[36,61048,5029],{"class":42},[36,61050,61051,61053,61055,61057,61060,61062],{"class":38,"line":943},[36,61052,58262],{"class":112},[36,61054,54994],{"class":42},[36,61056,1859],{"class":112},[36,61058,61059],{"class":112}," 50",[36,61061,55049],{"class":46},[36,61063,5029],{"class":42},[36,61065,61066],{"class":38,"line":948},[36,61067,5899],{"class":42},[36,61069,61070,61072,61074],{"class":38,"line":971},[36,61071,55974],{"class":42},[36,61073,3785],{"class":54857},[36,61075,54864],{"class":42},[36,61077,61078,61080,61082],{"class":38,"line":992},[36,61079,55342],{"class":42},[36,61081,54891],{"class":54857},[36,61083,54864],{"class":42},[36,61085,61086],{"class":38,"line":1020},[36,61087,659],{"emptyLinePlaceholder":658},[36,61089,61090,61092,61094],{"class":38,"line":1036},[36,61091,393],{"class":42},[36,61093,55357],{"class":54857},[36,61095,54864],{"class":42},[36,61097,61098,61100,61102,61105,61107],{"class":38,"line":1041},[36,61099,55701],{"class":42},[36,61101,14],{"class":54857},[36,61103,61104],{"class":42},">随机点名\u003C\u002F",[36,61106,14],{"class":54857},[36,61108,54864],{"class":42},[36,61110,61111,61113,61115,61117,61119,61121],{"class":38,"line":1052},[36,61112,55701],{"class":42},[36,61114,55168],{"class":54857},[36,61116,57043],{"class":101},[36,61118,47],{"class":42},[36,61120,57048],{"class":105},[36,61122,54864],{"class":42},[36,61124,61125,61127,61129,61132,61134],{"class":38,"line":1065},[36,61126,54898],{"class":42},[36,61128,36],{"class":54857},[36,61130,61131],{"class":42},">名字是：\u003C\u002F",[36,61133,36],{"class":54857},[36,61135,54864],{"class":42},[36,61137,61138,61140,61142,61144,61146,61149,61152,61154],{"class":38,"line":1077},[36,61139,54898],{"class":42},[36,61141,55168],{"class":54857},[36,61143,57043],{"class":101},[36,61145,47],{"class":42},[36,61147,61148],{"class":105},"\"qs\"",[36,61150,61151],{"class":42},">这里显示姓名\u003C\u002F",[36,61153,55168],{"class":54857},[36,61155,54864],{"class":42},[36,61157,61158,61160,61162],{"class":38,"line":1082},[36,61159,55974],{"class":42},[36,61161,55168],{"class":54857},[36,61163,54864],{"class":42},[36,61165,61166,61168,61170,61172,61174,61177],{"class":38,"line":1125},[36,61167,55701],{"class":42},[36,61169,55168],{"class":54857},[36,61171,57043],{"class":101},[36,61173,47],{"class":42},[36,61175,61176],{"class":105},"\"btns\"",[36,61178,54864],{"class":42},[36,61180,61181,61183,61185,61187,61189,61192,61195,61197],{"class":38,"line":1164},[36,61182,54898],{"class":42},[36,61184,57444],{"class":54857},[36,61186,57043],{"class":101},[36,61188,47],{"class":42},[36,61190,61191],{"class":105},"\"start\"",[36,61193,61194],{"class":42},">开始\u003C\u002F",[36,61196,57444],{"class":54857},[36,61198,54864],{"class":42},[36,61200,61201,61203,61205,61207,61209,61212,61215,61217],{"class":38,"line":1169},[36,61202,54898],{"class":42},[36,61204,57444],{"class":54857},[36,61206,57043],{"class":101},[36,61208,47],{"class":42},[36,61210,61211],{"class":105},"\"end\"",[36,61213,61214],{"class":42},">结束\u003C\u002F",[36,61216,57444],{"class":54857},[36,61218,54864],{"class":42},[36,61220,61221,61223,61225],{"class":38,"line":1180},[36,61222,55974],{"class":42},[36,61224,55168],{"class":54857},[36,61226,54864],{"class":42},[36,61228,61229],{"class":38,"line":1198},[36,61230,659],{"emptyLinePlaceholder":658},[36,61232,61233,61235,61237],{"class":38,"line":1215},[36,61234,55701],{"class":42},[36,61236,55370],{"class":54857},[36,61238,54864],{"class":42},[36,61240,61241],{"class":38,"line":1236},[36,61242,61243],{"class":3943},"    \u002F\u002F 数据数组\n",[36,61245,61246,61248,61251,61253,61255,61258,61260,61263,61265,61268,61270,61273,61275,61278],{"class":38,"line":1245},[36,61247,14882],{"class":46},[36,61249,61250],{"class":112}," arr",[36,61252,673],{"class":46},[36,61254,55783],{"class":42},[36,61256,61257],{"class":105},"'马超'",[36,61259,478],{"class":42},[36,61261,61262],{"class":105},"'黄忠'",[36,61264,478],{"class":42},[36,61266,61267],{"class":105},"'赵云'",[36,61269,478],{"class":42},[36,61271,61272],{"class":105},"'关羽'",[36,61274,478],{"class":42},[36,61276,61277],{"class":105},"'张飞'",[36,61279,36806],{"class":42},[36,61281,61282,61284,61287,61289,61291,61293,61295,61298],{"class":38,"line":1250},[36,61283,14882],{"class":46},[36,61285,61286],{"class":112}," qs",[36,61288,673],{"class":46},[36,61290,57953],{"class":42},[36,61292,57956],{"class":101},[36,61294,495],{"class":42},[36,61296,61297],{"class":105},"'.qs'",[36,61299,922],{"class":42},[36,61301,61302],{"class":38,"line":1265},[36,61303,61304],{"class":3943},"    \u002F\u002F 1.业务1.开始按钮模块\n",[36,61306,61307,61309,61311,61313,61315,61317,61319,61322],{"class":38,"line":1281},[36,61308,14882],{"class":46},[36,61310,7881],{"class":112},[36,61312,673],{"class":46},[36,61314,57953],{"class":42},[36,61316,57956],{"class":101},[36,61318,495],{"class":42},[36,61320,61321],{"class":105},"'.start'",[36,61323,922],{"class":42},[36,61325,61326],{"class":38,"line":1297},[36,61327,61328],{"class":3943},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[36,61330,61331,61333,61336,61338],{"class":38,"line":1314},[36,61332,55776],{"class":46},[36,61334,61335],{"class":42}," timerId ",[36,61337,47],{"class":46},[36,61339,1074],{"class":112},[36,61341,61342],{"class":38,"line":1336},[36,61343,61344],{"class":3943},"    \u002F\u002F 随机号要全局变量\n",[36,61346,61347,61349,61352,61354],{"class":38,"line":1356},[36,61348,55776],{"class":46},[36,61350,61351],{"class":42}," random ",[36,61353,47],{"class":46},[36,61355,1074],{"class":112},[36,61357,61358],{"class":38,"line":1361},[36,61359,61360],{"class":3943},"    \u002F\u002F 1.1 添加点击事件\n",[36,61362,61363,61366,61369,61371,61374,61376,61378],{"class":38,"line":1407},[36,61364,61365],{"class":42},"    start.",[36,61367,61368],{"class":101},"addEventListener",[36,61370,495],{"class":42},[36,61372,61373],{"class":105},"'click'",[36,61375,478],{"class":42},[36,61377,58005],{"class":46},[36,61379,58008],{"class":42},[36,61381,61382,61385,61387,61389,61391,61393],{"class":38,"line":1423},[36,61383,61384],{"class":42},"      timerId ",[36,61386,47],{"class":46},[36,61388,58000],{"class":101},[36,61390,495],{"class":42},[36,61392,58005],{"class":46},[36,61394,58008],{"class":42},[36,61396,61397],{"class":38,"line":1439},[36,61398,61399],{"class":3943},"        \u002F\u002F 随机数\n",[36,61401,61402,61405,61407,61410,61413,61416,61418,61420,61422,61424],{"class":38,"line":1444},[36,61403,61404],{"class":42},"        random ",[36,61406,47],{"class":46},[36,61408,61409],{"class":101}," parseInt",[36,61411,61412],{"class":42},"(Math.",[36,61414,61415],{"class":101},"random",[36,61417,16710],{"class":42},[36,61419,1372],{"class":46},[36,61421,55522],{"class":42},[36,61423,55525],{"class":112},[36,61425,922],{"class":42},[36,61427,61428,61431,61433],{"class":38,"line":1486},[36,61429,61430],{"class":42},"        qs.innerHTML ",[36,61432,47],{"class":46},[36,61434,61435],{"class":42}," arr[random]\n",[36,61437,61438,61441,61443],{"class":38,"line":1499},[36,61439,61440],{"class":42},"      }, ",[36,61442,4148],{"class":112},[36,61444,922],{"class":42},[36,61446,61447],{"class":38,"line":1513},[36,61448,61449],{"class":3943},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[36,61451,61452,61454,61457,61459,61462,61464],{"class":38,"line":1518},[36,61453,58036],{"class":46},[36,61455,61456],{"class":42}," (arr.",[36,61458,55525],{"class":112},[36,61460,61461],{"class":46}," ===",[36,61463,28732],{"class":112},[36,61465,16102],{"class":42},[36,61467,61468],{"class":38,"line":1529},[36,61469,61470],{"class":3943},"        \u002F\u002F start.disabled = true\n",[36,61472,61473],{"class":38,"line":1539},[36,61474,61475],{"class":3943},"        \u002F\u002F end.disabled = true\n",[36,61477,61478],{"class":38,"line":1544},[36,61479,61480],{"class":3943},"        \u002F\u002F 可以合起来写\n",[36,61482,61483,61486,61488,61491,61493],{"class":38,"line":1555},[36,61484,61485],{"class":42},"        start.disabled ",[36,61487,47],{"class":46},[36,61489,61490],{"class":42}," end.disabled ",[36,61492,47],{"class":46},[36,61494,61495],{"class":112}," true\n",[36,61497,61498],{"class":38,"line":1572},[36,61499,55955],{"class":42},[36,61501,61502],{"class":38,"line":1592},[36,61503,37021],{"class":42},[36,61505,61506],{"class":38,"line":1597},[36,61507,61508],{"class":3943},"    \u002F\u002F 1.2 关闭按钮模块\n",[36,61510,61511,61513,61515,61517,61519,61521,61523,61526],{"class":38,"line":1610},[36,61512,14882],{"class":46},[36,61514,7897],{"class":112},[36,61516,673],{"class":46},[36,61518,57953],{"class":42},[36,61520,57956],{"class":101},[36,61522,495],{"class":42},[36,61524,61525],{"class":105},"'.end'",[36,61527,922],{"class":42},[36,61529,61530,61533,61535,61537,61539,61541,61543],{"class":38,"line":1632},[36,61531,61532],{"class":42},"    end.",[36,61534,61368],{"class":101},[36,61536,495],{"class":42},[36,61538,61373],{"class":105},[36,61540,478],{"class":42},[36,61542,58005],{"class":46},[36,61544,58008],{"class":42},[36,61546,61547,61550],{"class":38,"line":1646},[36,61548,61549],{"class":101},"      clearInterval",[36,61551,61552],{"class":42},"(timerId)\n",[36,61554,61555],{"class":38,"line":1651},[36,61556,61557],{"class":3943},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[36,61559,61560,61563,61566,61569,61571],{"class":38,"line":1664},[36,61561,61562],{"class":42},"      arr.",[36,61564,61565],{"class":101},"splice",[36,61567,61568],{"class":42},"(random, ",[36,61570,4092],{"class":112},[36,61572,922],{"class":42},[36,61574,61575],{"class":38,"line":1669},[36,61576,37021],{"class":42},[36,61578,61579],{"class":38,"line":1681},[36,61580,659],{"emptyLinePlaceholder":658},[36,61582,61583,61585,61587],{"class":38,"line":1694},[36,61584,55974],{"class":42},[36,61586,55370],{"class":54857},[36,61588,54864],{"class":42},[36,61590,61591,61593,61595],{"class":38,"line":1699},[36,61592,55342],{"class":42},[36,61594,55357],{"class":54857},[36,61596,54864],{"class":42},[36,61598,61599],{"class":38,"line":1714},[36,61600,659],{"emptyLinePlaceholder":658},[36,61602,61603,61605,61607],{"class":38,"line":1729},[36,61604,55342],{"class":42},[36,61606,54192],{"class":54857},[36,61608,54864],{"class":42},[19,61610,61611],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[318,61613,61615],{"id":61614},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[26,61617,61619],{"className":54190,"code":61618,"language":54192,"meta":31,"style":31},"\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",[33,61620,61621,61631,61645,61649,61657,61671,61691,61703,61711,61715,61723,61735,61743,61762,61779,61795,61805,61809,61817,61825,61829],{"__ignoreMap":31},[36,61622,61623,61625,61627,61629],{"class":38,"line":39},[36,61624,54854],{"class":42},[36,61626,54858],{"class":54857},[36,61628,54861],{"class":101},[36,61630,54864],{"class":42},[36,61632,61633,61635,61637,61639,61641,61643],{"class":38,"line":53},[36,61634,393],{"class":42},[36,61636,54192],{"class":54857},[36,61638,54873],{"class":101},[36,61640,47],{"class":42},[36,61642,54878],{"class":105},[36,61644,54864],{"class":42},[36,61646,61647],{"class":38,"line":196},[36,61648,659],{"emptyLinePlaceholder":658},[36,61650,61651,61653,61655],{"class":38,"line":642},[36,61652,393],{"class":42},[36,61654,54891],{"class":54857},[36,61656,54864],{"class":42},[36,61658,61659,61661,61663,61665,61667,61669],{"class":38,"line":655},[36,61660,55701],{"class":42},[36,61662,54901],{"class":54857},[36,61664,54904],{"class":101},[36,61666,47],{"class":42},[36,61668,54909],{"class":105},[36,61670,54864],{"class":42},[36,61672,61673,61675,61677,61679,61681,61683,61685,61687,61689],{"class":38,"line":662},[36,61674,55701],{"class":42},[36,61676,54901],{"class":54857},[36,61678,18576],{"class":101},[36,61680,47],{"class":42},[36,61682,54948],{"class":105},[36,61684,54928],{"class":101},[36,61686,47],{"class":42},[36,61688,54955],{"class":105},[36,61690,54864],{"class":42},[36,61692,61693,61695,61697,61699,61701],{"class":38,"line":667},[36,61694,55701],{"class":42},[36,61696,54964],{"class":54857},[36,61698,54967],{"class":42},[36,61700,54964],{"class":54857},[36,61702,54864],{"class":42},[36,61704,61705,61707,61709],{"class":38,"line":679},[36,61706,55342],{"class":42},[36,61708,54891],{"class":54857},[36,61710,54864],{"class":42},[36,61712,61713],{"class":38,"line":685},[36,61714,659],{"emptyLinePlaceholder":658},[36,61716,61717,61719,61721],{"class":38,"line":691},[36,61718,393],{"class":42},[36,61720,55357],{"class":54857},[36,61722,54864],{"class":42},[36,61724,61725,61727,61729,61731,61733],{"class":38,"line":696},[36,61726,55701],{"class":42},[36,61728,57444],{"class":54857},[36,61730,57450],{"class":42},[36,61732,57444],{"class":54857},[36,61734,54864],{"class":42},[36,61736,61737,61739,61741],{"class":38,"line":702},[36,61738,55701],{"class":42},[36,61740,55370],{"class":54857},[36,61742,54864],{"class":42},[36,61744,61745,61747,61749,61751,61753,61755,61757,61760],{"class":38,"line":708},[36,61746,14882],{"class":46},[36,61748,57948],{"class":112},[36,61750,673],{"class":46},[36,61752,57953],{"class":42},[36,61754,57956],{"class":101},[36,61756,495],{"class":42},[36,61758,61759],{"class":105},"'button'",[36,61761,922],{"class":42},[36,61763,61764,61767,61769,61771,61773,61775,61777],{"class":38,"line":713},[36,61765,61766],{"class":42},"    btn.",[36,61768,61368],{"class":101},[36,61770,495],{"class":42},[36,61772,61373],{"class":105},[36,61774,478],{"class":42},[36,61776,58005],{"class":46},[36,61778,58008],{"class":42},[36,61780,61781,61784,61786,61788,61791,61793],{"class":38,"line":719},[36,61782,61783],{"class":46},"      const",[36,61785,5952],{"class":112},[36,61787,673],{"class":46},[36,61789,61790],{"class":42}," Math.",[36,61792,61415],{"class":101},[36,61794,903],{"class":42},[36,61796,61797,61800,61803],{"class":38,"line":725},[36,61798,61799],{"class":42},"      console.",[36,61801,61802],{"class":101},"log",[36,61804,3901],{"class":42},[36,61806,61807],{"class":38,"line":731},[36,61808,37021],{"class":42},[36,61810,61811,61813,61815],{"class":38,"line":736},[36,61812,55974],{"class":42},[36,61814,55370],{"class":54857},[36,61816,54864],{"class":42},[36,61818,61819,61821,61823],{"class":38,"line":742},[36,61820,55342],{"class":42},[36,61822,55357],{"class":54857},[36,61824,54864],{"class":42},[36,61826,61827],{"class":38,"line":748},[36,61828,659],{"emptyLinePlaceholder":658},[36,61830,61831,61833,61835],{"class":38,"line":754},[36,61832,55342],{"class":42},[36,61834,54192],{"class":54857},[36,61836,54864],{"class":42},[19,61838,61839],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,61841,61842],{},"常量不可以重新赋值",[19,61844,61845],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[26,61847,61849],{"className":54190,"code":61848,"language":54192,"meta":31,"style":31},"\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",[33,61850,61851,61861,61875,61879,61887,61901,61921,61933,61941,61945,61953,61965,61973,61984,62002,62018,62032,62040,62044,62052,62060,62064],{"__ignoreMap":31},[36,61852,61853,61855,61857,61859],{"class":38,"line":39},[36,61854,54854],{"class":42},[36,61856,54858],{"class":54857},[36,61858,54861],{"class":101},[36,61860,54864],{"class":42},[36,61862,61863,61865,61867,61869,61871,61873],{"class":38,"line":53},[36,61864,393],{"class":42},[36,61866,54192],{"class":54857},[36,61868,54873],{"class":101},[36,61870,47],{"class":42},[36,61872,54878],{"class":105},[36,61874,54864],{"class":42},[36,61876,61877],{"class":38,"line":196},[36,61878,659],{"emptyLinePlaceholder":658},[36,61880,61881,61883,61885],{"class":38,"line":642},[36,61882,393],{"class":42},[36,61884,54891],{"class":54857},[36,61886,54864],{"class":42},[36,61888,61889,61891,61893,61895,61897,61899],{"class":38,"line":655},[36,61890,55701],{"class":42},[36,61892,54901],{"class":54857},[36,61894,54904],{"class":101},[36,61896,47],{"class":42},[36,61898,54909],{"class":105},[36,61900,54864],{"class":42},[36,61902,61903,61905,61907,61909,61911,61913,61915,61917,61919],{"class":38,"line":662},[36,61904,55701],{"class":42},[36,61906,54901],{"class":54857},[36,61908,18576],{"class":101},[36,61910,47],{"class":42},[36,61912,54948],{"class":105},[36,61914,54928],{"class":101},[36,61916,47],{"class":42},[36,61918,54955],{"class":105},[36,61920,54864],{"class":42},[36,61922,61923,61925,61927,61929,61931],{"class":38,"line":667},[36,61924,55701],{"class":42},[36,61926,54964],{"class":54857},[36,61928,54967],{"class":42},[36,61930,54964],{"class":54857},[36,61932,54864],{"class":42},[36,61934,61935,61937,61939],{"class":38,"line":679},[36,61936,55342],{"class":42},[36,61938,54891],{"class":54857},[36,61940,54864],{"class":42},[36,61942,61943],{"class":38,"line":685},[36,61944,659],{"emptyLinePlaceholder":658},[36,61946,61947,61949,61951],{"class":38,"line":691},[36,61948,393],{"class":42},[36,61950,55357],{"class":54857},[36,61952,54864],{"class":42},[36,61954,61955,61957,61959,61961,61963],{"class":38,"line":696},[36,61956,55701],{"class":42},[36,61958,57444],{"class":54857},[36,61960,57450],{"class":42},[36,61962,57444],{"class":54857},[36,61964,54864],{"class":42},[36,61966,61967,61969,61971],{"class":38,"line":702},[36,61968,55701],{"class":42},[36,61970,55370],{"class":54857},[36,61972,54864],{"class":42},[36,61974,61975,61977,61979,61981],{"class":38,"line":708},[36,61976,14882],{"class":46},[36,61978,5952],{"class":112},[36,61980,673],{"class":46},[36,61982,61983],{"class":112}," 10\n",[36,61985,61986,61988,61990,61992,61994,61996,61998,62000],{"class":38,"line":713},[36,61987,14882],{"class":46},[36,61989,57948],{"class":112},[36,61991,673],{"class":46},[36,61993,57953],{"class":42},[36,61995,57956],{"class":101},[36,61997,495],{"class":42},[36,61999,61759],{"class":105},[36,62001,922],{"class":42},[36,62003,62004,62006,62008,62010,62012,62014,62016],{"class":38,"line":719},[36,62005,61766],{"class":42},[36,62007,61368],{"class":101},[36,62009,495],{"class":42},[36,62011,61373],{"class":105},[36,62013,478],{"class":42},[36,62015,58005],{"class":46},[36,62017,58008],{"class":42},[36,62019,62020,62022,62024,62026,62028,62030],{"class":38,"line":725},[36,62021,61783],{"class":46},[36,62023,5952],{"class":112},[36,62025,673],{"class":46},[36,62027,61790],{"class":42},[36,62029,61415],{"class":101},[36,62031,903],{"class":42},[36,62033,62034,62036,62038],{"class":38,"line":731},[36,62035,61799],{"class":42},[36,62037,61802],{"class":101},[36,62039,3901],{"class":42},[36,62041,62042],{"class":38,"line":736},[36,62043,37021],{"class":42},[36,62045,62046,62048,62050],{"class":38,"line":742},[36,62047,55974],{"class":42},[36,62049,55370],{"class":54857},[36,62051,54864],{"class":42},[36,62053,62054,62056,62058],{"class":38,"line":748},[36,62055,55342],{"class":42},[36,62057,55357],{"class":54857},[36,62059,54864],{"class":42},[36,62061,62062],{"class":38,"line":754},[36,62063,659],{"emptyLinePlaceholder":658},[36,62065,62066,62068,62070],{"class":38,"line":760},[36,62067,55342],{"class":42},[36,62069,54192],{"class":54857},[36,62071,54864],{"class":42},[19,62073,62074],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[26,62076,62078],{"className":54190,"code":62077,"language":54192,"meta":31,"style":31},"\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",[33,62079,62080,62090,62104,62108,62116,62130,62150,62162,62170,62174,62182,62194,62202,62212,62230,62246,62259,62267,62271,62279,62287,62291],{"__ignoreMap":31},[36,62081,62082,62084,62086,62088],{"class":38,"line":39},[36,62083,54854],{"class":42},[36,62085,54858],{"class":54857},[36,62087,54861],{"class":101},[36,62089,54864],{"class":42},[36,62091,62092,62094,62096,62098,62100,62102],{"class":38,"line":53},[36,62093,393],{"class":42},[36,62095,54192],{"class":54857},[36,62097,54873],{"class":101},[36,62099,47],{"class":42},[36,62101,54878],{"class":105},[36,62103,54864],{"class":42},[36,62105,62106],{"class":38,"line":196},[36,62107,659],{"emptyLinePlaceholder":658},[36,62109,62110,62112,62114],{"class":38,"line":642},[36,62111,393],{"class":42},[36,62113,54891],{"class":54857},[36,62115,54864],{"class":42},[36,62117,62118,62120,62122,62124,62126,62128],{"class":38,"line":655},[36,62119,55701],{"class":42},[36,62121,54901],{"class":54857},[36,62123,54904],{"class":101},[36,62125,47],{"class":42},[36,62127,54909],{"class":105},[36,62129,54864],{"class":42},[36,62131,62132,62134,62136,62138,62140,62142,62144,62146,62148],{"class":38,"line":662},[36,62133,55701],{"class":42},[36,62135,54901],{"class":54857},[36,62137,18576],{"class":101},[36,62139,47],{"class":42},[36,62141,54948],{"class":105},[36,62143,54928],{"class":101},[36,62145,47],{"class":42},[36,62147,54955],{"class":105},[36,62149,54864],{"class":42},[36,62151,62152,62154,62156,62158,62160],{"class":38,"line":667},[36,62153,55701],{"class":42},[36,62155,54964],{"class":54857},[36,62157,54967],{"class":42},[36,62159,54964],{"class":54857},[36,62161,54864],{"class":42},[36,62163,62164,62166,62168],{"class":38,"line":679},[36,62165,55342],{"class":42},[36,62167,54891],{"class":54857},[36,62169,54864],{"class":42},[36,62171,62172],{"class":38,"line":685},[36,62173,659],{"emptyLinePlaceholder":658},[36,62175,62176,62178,62180],{"class":38,"line":691},[36,62177,393],{"class":42},[36,62179,55357],{"class":54857},[36,62181,54864],{"class":42},[36,62183,62184,62186,62188,62190,62192],{"class":38,"line":696},[36,62185,55701],{"class":42},[36,62187,57444],{"class":54857},[36,62189,57450],{"class":42},[36,62191,57444],{"class":54857},[36,62193,54864],{"class":42},[36,62195,62196,62198,62200],{"class":38,"line":702},[36,62197,55701],{"class":42},[36,62199,55370],{"class":54857},[36,62201,54864],{"class":42},[36,62203,62204,62206,62208,62210],{"class":38,"line":708},[36,62205,14882],{"class":46},[36,62207,5952],{"class":112},[36,62209,673],{"class":46},[36,62211,61983],{"class":112},[36,62213,62214,62216,62218,62220,62222,62224,62226,62228],{"class":38,"line":713},[36,62215,14882],{"class":46},[36,62217,57948],{"class":112},[36,62219,673],{"class":46},[36,62221,57953],{"class":42},[36,62223,57956],{"class":101},[36,62225,495],{"class":42},[36,62227,61759],{"class":105},[36,62229,922],{"class":42},[36,62231,62232,62234,62236,62238,62240,62242,62244],{"class":38,"line":719},[36,62233,61766],{"class":42},[36,62235,61368],{"class":101},[36,62237,495],{"class":42},[36,62239,61373],{"class":105},[36,62241,478],{"class":42},[36,62243,58005],{"class":46},[36,62245,58008],{"class":42},[36,62247,62248,62251,62253,62255,62257],{"class":38,"line":725},[36,62249,62250],{"class":42},"      num ",[36,62252,47],{"class":46},[36,62254,61790],{"class":42},[36,62256,61415],{"class":101},[36,62258,903],{"class":42},[36,62260,62261,62263,62265],{"class":38,"line":731},[36,62262,61799],{"class":42},[36,62264,61802],{"class":101},[36,62266,3901],{"class":42},[36,62268,62269],{"class":38,"line":736},[36,62270,37021],{"class":42},[36,62272,62273,62275,62277],{"class":38,"line":742},[36,62274,55974],{"class":42},[36,62276,55370],{"class":54857},[36,62278,54864],{"class":42},[36,62280,62281,62283,62285],{"class":38,"line":748},[36,62282,55342],{"class":42},[36,62284,55357],{"class":54857},[36,62286,54864],{"class":42},[36,62288,62289],{"class":38,"line":754},[36,62290,659],{"emptyLinePlaceholder":658},[36,62292,62293,62295,62297],{"class":38,"line":760},[36,62294,55342],{"class":42},[36,62296,54192],{"class":54857},[36,62298,54864],{"class":42},[19,62300,62301],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[318,62303,62305],{"id":62304},"_324-事件监听版本","3.2.4 事件监听版本",[19,62307,62308],{},[5198,62309],{"alt":31,"src":62310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,62312,62313],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,62315,62316],{},"这种方式会覆盖前边的事件监听:",[26,62318,62320],{"className":54190,"code":62319,"language":54192,"meta":31,"style":31},"\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",[33,62321,62322,62332,62346,62350,62358,62372,62392,62404,62412,62416,62424,62436,62444,62462,62476,62487,62491,62503,62513,62517,62525,62533,62537],{"__ignoreMap":31},[36,62323,62324,62326,62328,62330],{"class":38,"line":39},[36,62325,54854],{"class":42},[36,62327,54858],{"class":54857},[36,62329,54861],{"class":101},[36,62331,54864],{"class":42},[36,62333,62334,62336,62338,62340,62342,62344],{"class":38,"line":53},[36,62335,393],{"class":42},[36,62337,54192],{"class":54857},[36,62339,54873],{"class":101},[36,62341,47],{"class":42},[36,62343,54878],{"class":105},[36,62345,54864],{"class":42},[36,62347,62348],{"class":38,"line":196},[36,62349,659],{"emptyLinePlaceholder":658},[36,62351,62352,62354,62356],{"class":38,"line":642},[36,62353,393],{"class":42},[36,62355,54891],{"class":54857},[36,62357,54864],{"class":42},[36,62359,62360,62362,62364,62366,62368,62370],{"class":38,"line":655},[36,62361,55701],{"class":42},[36,62363,54901],{"class":54857},[36,62365,54904],{"class":101},[36,62367,47],{"class":42},[36,62369,54909],{"class":105},[36,62371,54864],{"class":42},[36,62373,62374,62376,62378,62380,62382,62384,62386,62388,62390],{"class":38,"line":662},[36,62375,55701],{"class":42},[36,62377,54901],{"class":54857},[36,62379,18576],{"class":101},[36,62381,47],{"class":42},[36,62383,54948],{"class":105},[36,62385,54928],{"class":101},[36,62387,47],{"class":42},[36,62389,54955],{"class":105},[36,62391,54864],{"class":42},[36,62393,62394,62396,62398,62400,62402],{"class":38,"line":667},[36,62395,55701],{"class":42},[36,62397,54964],{"class":54857},[36,62399,54967],{"class":42},[36,62401,54964],{"class":54857},[36,62403,54864],{"class":42},[36,62405,62406,62408,62410],{"class":38,"line":679},[36,62407,55342],{"class":42},[36,62409,54891],{"class":54857},[36,62411,54864],{"class":42},[36,62413,62414],{"class":38,"line":685},[36,62415,659],{"emptyLinePlaceholder":658},[36,62417,62418,62420,62422],{"class":38,"line":691},[36,62419,393],{"class":42},[36,62421,55357],{"class":54857},[36,62423,54864],{"class":42},[36,62425,62426,62428,62430,62432,62434],{"class":38,"line":696},[36,62427,55701],{"class":42},[36,62429,57444],{"class":54857},[36,62431,57450],{"class":42},[36,62433,57444],{"class":54857},[36,62435,54864],{"class":42},[36,62437,62438,62440,62442],{"class":38,"line":702},[36,62439,55701],{"class":42},[36,62441,55370],{"class":54857},[36,62443,54864],{"class":42},[36,62445,62446,62448,62450,62452,62454,62456,62458,62460],{"class":38,"line":708},[36,62447,14882],{"class":46},[36,62449,57948],{"class":112},[36,62451,673],{"class":46},[36,62453,57953],{"class":42},[36,62455,57956],{"class":101},[36,62457,495],{"class":42},[36,62459,61759],{"class":105},[36,62461,922],{"class":42},[36,62463,62464,62466,62469,62471,62474],{"class":38,"line":713},[36,62465,61766],{"class":42},[36,62467,62468],{"class":101},"onclick",[36,62470,673],{"class":46},[36,62472,62473],{"class":46}," function",[36,62475,58008],{"class":42},[36,62477,62478,62481,62483,62485],{"class":38,"line":719},[36,62479,62480],{"class":101},"      alert",[36,62482,495],{"class":42},[36,62484,4345],{"class":112},[36,62486,922],{"class":42},[36,62488,62489],{"class":38,"line":725},[36,62490,5899],{"class":42},[36,62492,62493,62495,62497,62499,62501],{"class":38,"line":731},[36,62494,61766],{"class":42},[36,62496,62468],{"class":101},[36,62498,673],{"class":46},[36,62500,62473],{"class":46},[36,62502,58008],{"class":42},[36,62504,62505,62507,62509,62511],{"class":38,"line":736},[36,62506,62480],{"class":101},[36,62508,495],{"class":42},[36,62510,4620],{"class":112},[36,62512,922],{"class":42},[36,62514,62515],{"class":38,"line":742},[36,62516,5899],{"class":42},[36,62518,62519,62521,62523],{"class":38,"line":748},[36,62520,55974],{"class":42},[36,62522,55370],{"class":54857},[36,62524,54864],{"class":42},[36,62526,62527,62529,62531],{"class":38,"line":754},[36,62528,55342],{"class":42},[36,62530,55357],{"class":54857},[36,62532,54864],{"class":42},[36,62534,62535],{"class":38,"line":760},[36,62536,659],{"emptyLinePlaceholder":658},[36,62538,62539,62541,62543],{"class":38,"line":766},[36,62540,55342],{"class":42},[36,62542,54192],{"class":54857},[36,62544,54864],{"class":42},[19,62546,62547],{},"只要点击就输出结果为22,前边11被覆盖了",[26,62549,62551],{"className":54190,"code":62550,"language":54192,"meta":31,"style":31},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[33,62552,62553,62558,62563,62567,62572,62577],{"__ignoreMap":31},[36,62554,62555],{"class":38,"line":39},[36,62556,62557],{"class":42},"  btn.addEventListener('click', function () {\n",[36,62559,62560],{"class":38,"line":53},[36,62561,62562],{"class":42},"      alert(11)\n",[36,62564,62565],{"class":38,"line":196},[36,62566,37021],{"class":42},[36,62568,62569],{"class":38,"line":642},[36,62570,62571],{"class":42},"    btn.addEventListener('click', function () {\n",[36,62573,62574],{"class":38,"line":655},[36,62575,62576],{"class":42},"      alert(22)\n",[36,62578,62579],{"class":38,"line":662},[36,62580,37021],{"class":42},[19,62582,62583],{},"点击第一次输出11,第二次点击为22",[318,62585,62587],{"id":62586},"_325-事件类型","3.2.5 事件类型",[19,62589,62590],{},[5198,62591],{"alt":31,"src":62592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[25619,62594,62596],{"id":62595},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,62598,62599],{},"补充知识:",[19,62601,62602],{},"轮播图自动播放模块,可以使用",[19,62604,62605],{},"let timerId = setInterval(function () {",[19,62607,62608],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,62610,62611],{},"用js方法模拟进行点击事件,click必须加()",[19,62613,62614],{},"next.click()",[19,62616,62617],{},"}, 1000)",[19,62619,62620],{},[5198,62621],{"alt":31,"src":62622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[26,62624,62626],{"className":56624,"code":62625,"language":56626,"meta":31,"style":31},"\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",[33,62627,62628,62632,62642,62656,62660,62668,62683,62703,62723,62736,62744,62749,62754,62758,62762,62767,62772,62777,62782,62786,62790,62795,62800,62805,62809,62813,62818,62822,62827,62832,62836,62840,62845,62850,62855,62860,62865,62869,62873,62878,62883,62888,62893,62898,62902,62906,62911,62916,62921,62926,62931,62936,62941,62946,62951,62956,62960,62964,62969,62974,62978,62982,62987,62992,62996,63001,63006,63010,63014,63019,63023,63028,63033,63037,63042,63046,63050,63055,63060,63065,63070,63075,63080,63085,63089,63093,63097,63102,63107,63112,63117,63121,63129,63137,63141,63149,63164,63178,63199,63207,63221,63234,63249,63268,63280,63292,63304,63316,63328,63340,63352,63360,63375,63399,63423,63431,63439,63447,63455,63460,63465,63470,63475,63480,63485,63490,63495,63500,63505,63509,63514,63519,63524,63529,63534,63539,63544,63549,63554,63558,63563,63568,63573,63578,63583,63588,63593,63598,63603,63608,63613,63618,63622,63626,63631,63636,63641,63645,63650,63655,63660,63665,63670,63674,63679,63683,63687,63691,63695,63699,63703,63708,63713,63718,63723,63728,63733,63738,63743,63748,63752,63756,63761,63766,63771,63776,63781,63785,63790,63795,63800,63805,63810,63815,63819,63823,63828,63832,63837,63841,63846,63851,63856,63861,63866,63871,63875,63883,63891,63895],{"__ignoreMap":31},[36,62629,62630],{"class":38,"line":39},[36,62631,659],{"emptyLinePlaceholder":658},[36,62633,62634,62636,62638,62640],{"class":38,"line":53},[36,62635,54854],{"class":42},[36,62637,54858],{"class":46},[36,62639,54861],{"class":112},[36,62641,54864],{"class":42},[36,62643,62644,62646,62648,62650,62652,62654],{"class":38,"line":196},[36,62645,393],{"class":42},[36,62647,54192],{"class":54857},[36,62649,54873],{"class":101},[36,62651,47],{"class":42},[36,62653,54878],{"class":105},[36,62655,54864],{"class":42},[36,62657,62658],{"class":38,"line":642},[36,62659,659],{"emptyLinePlaceholder":658},[36,62661,62662,62664,62666],{"class":38,"line":655},[36,62663,393],{"class":42},[36,62665,54891],{"class":54857},[36,62667,54864],{"class":42},[36,62669,62670,62672,62674,62676,62678,62680],{"class":38,"line":662},[36,62671,55701],{"class":42},[36,62673,54901],{"class":54857},[36,62675,54904],{"class":101},[36,62677,47],{"class":42},[36,62679,54909],{"class":105},[36,62681,62682],{"class":42}," \u002F>\n",[36,62684,62685,62687,62689,62691,62693,62695,62697,62699,62701],{"class":38,"line":667},[36,62686,55701],{"class":42},[36,62688,54901],{"class":54857},[36,62690,54920],{"class":101},[36,62692,47],{"class":42},[36,62694,54925],{"class":105},[36,62696,54928],{"class":101},[36,62698,47],{"class":42},[36,62700,54933],{"class":105},[36,62702,62682],{"class":42},[36,62704,62705,62707,62709,62711,62713,62715,62717,62719,62721],{"class":38,"line":679},[36,62706,55701],{"class":42},[36,62708,54901],{"class":54857},[36,62710,18576],{"class":101},[36,62712,47],{"class":42},[36,62714,54948],{"class":105},[36,62716,54928],{"class":101},[36,62718,47],{"class":42},[36,62720,54955],{"class":105},[36,62722,62682],{"class":42},[36,62724,62725,62727,62729,62732,62734],{"class":38,"line":685},[36,62726,55701],{"class":42},[36,62728,54964],{"class":54857},[36,62730,62731],{"class":42},">轮播图点击切换\u003C\u002F",[36,62733,54964],{"class":54857},[36,62735,54864],{"class":42},[36,62737,62738,62740,62742],{"class":38,"line":691},[36,62739,55701],{"class":42},[36,62741,3785],{"class":54857},[36,62743,54864],{"class":42},[36,62745,62746],{"class":38,"line":696},[36,62747,62748],{"class":42},"    * {\n",[36,62750,62751],{"class":38,"line":702},[36,62752,62753],{"class":42},"      box-sizing: border-box;\n",[36,62755,62756],{"class":38,"line":708},[36,62757,5899],{"class":42},[36,62759,62760],{"class":38,"line":713},[36,62761,659],{"emptyLinePlaceholder":658},[36,62763,62764],{"class":38,"line":719},[36,62765,62766],{"class":42},"    .slider {\n",[36,62768,62769],{"class":38,"line":725},[36,62770,62771],{"class":42},"      width: 560px;\n",[36,62773,62774],{"class":38,"line":731},[36,62775,62776],{"class":42},"      height: 400px;\n",[36,62778,62779],{"class":38,"line":736},[36,62780,62781],{"class":42},"      overflow: hidden;\n",[36,62783,62784],{"class":38,"line":742},[36,62785,5899],{"class":42},[36,62787,62788],{"class":38,"line":748},[36,62789,659],{"emptyLinePlaceholder":658},[36,62791,62792],{"class":38,"line":754},[36,62793,62794],{"class":42},"    .slider-wrapper {\n",[36,62796,62797],{"class":38,"line":760},[36,62798,62799],{"class":42},"      width: 100%;\n",[36,62801,62802],{"class":38,"line":766},[36,62803,62804],{"class":42},"      height: 320px;\n",[36,62806,62807],{"class":38,"line":772},[36,62808,5899],{"class":42},[36,62810,62811],{"class":38,"line":778},[36,62812,659],{"emptyLinePlaceholder":658},[36,62814,62815],{"class":38,"line":783},[36,62816,62817],{"class":42},"    .slider-wrapper img {\n",[36,62819,62820],{"class":38,"line":789},[36,62821,62799],{"class":42},[36,62823,62824],{"class":38,"line":795},[36,62825,62826],{"class":42},"      height: 100%;\n",[36,62828,62829],{"class":38,"line":801},[36,62830,62831],{"class":42},"      display: block;\n",[36,62833,62834],{"class":38,"line":807},[36,62835,5899],{"class":42},[36,62837,62838],{"class":38,"line":813},[36,62839,659],{"emptyLinePlaceholder":658},[36,62841,62842],{"class":38,"line":819},[36,62843,62844],{"class":42},"    .slider-footer {\n",[36,62846,62847],{"class":38,"line":824},[36,62848,62849],{"class":42},"      height: 80px;\n",[36,62851,62852],{"class":38,"line":829},[36,62853,62854],{"class":42},"      background-color: rgb(100, 67, 68);\n",[36,62856,62857],{"class":38,"line":851},[36,62858,62859],{"class":42},"      padding: 12px 12px 0 12px;\n",[36,62861,62862],{"class":38,"line":868},[36,62863,62864],{"class":42},"      position: relative;\n",[36,62866,62867],{"class":38,"line":873},[36,62868,5899],{"class":42},[36,62870,62871],{"class":38,"line":891},[36,62872,659],{"emptyLinePlaceholder":658},[36,62874,62875],{"class":38,"line":906},[36,62876,62877],{"class":42},"    .slider-footer .toggle {\n",[36,62879,62880],{"class":38,"line":925},[36,62881,62882],{"class":42},"      position: absolute;\n",[36,62884,62885],{"class":38,"line":943},[36,62886,62887],{"class":42},"      right: 0;\n",[36,62889,62890],{"class":38,"line":948},[36,62891,62892],{"class":42},"      top: 12px;\n",[36,62894,62895],{"class":38,"line":971},[36,62896,62897],{"class":42},"      display: flex;\n",[36,62899,62900],{"class":38,"line":992},[36,62901,5899],{"class":42},[36,62903,62904],{"class":38,"line":1020},[36,62905,659],{"emptyLinePlaceholder":658},[36,62907,62908],{"class":38,"line":1036},[36,62909,62910],{"class":42},"    .slider-footer .toggle button {\n",[36,62912,62913],{"class":38,"line":1041},[36,62914,62915],{"class":42},"      margin-right: 12px;\n",[36,62917,62918],{"class":38,"line":1052},[36,62919,62920],{"class":42},"      width: 28px;\n",[36,62922,62923],{"class":38,"line":1065},[36,62924,62925],{"class":42},"      height: 28px;\n",[36,62927,62928],{"class":38,"line":1077},[36,62929,62930],{"class":42},"      appearance: none;\n",[36,62932,62933],{"class":38,"line":1082},[36,62934,62935],{"class":42},"      border: none;\n",[36,62937,62938],{"class":38,"line":1125},[36,62939,62940],{"class":42},"      background: rgba(255, 255, 255, 0.1);\n",[36,62942,62943],{"class":38,"line":1164},[36,62944,62945],{"class":42},"      color: #fff;\n",[36,62947,62948],{"class":38,"line":1169},[36,62949,62950],{"class":42},"      border-radius: 4px;\n",[36,62952,62953],{"class":38,"line":1180},[36,62954,62955],{"class":42},"      cursor: pointer;\n",[36,62957,62958],{"class":38,"line":1198},[36,62959,5899],{"class":42},[36,62961,62962],{"class":38,"line":1215},[36,62963,659],{"emptyLinePlaceholder":658},[36,62965,62966],{"class":38,"line":1236},[36,62967,62968],{"class":42},"    .slider-footer .toggle button:hover {\n",[36,62970,62971],{"class":38,"line":1245},[36,62972,62973],{"class":42},"      background: rgba(255, 255, 255, 0.2);\n",[36,62975,62976],{"class":38,"line":1250},[36,62977,5899],{"class":42},[36,62979,62980],{"class":38,"line":1265},[36,62981,659],{"emptyLinePlaceholder":658},[36,62983,62984],{"class":38,"line":1281},[36,62985,62986],{"class":42},"    .slider-footer p {\n",[36,62988,62989],{"class":38,"line":1297},[36,62990,62991],{"class":42},"      margin: 0;\n",[36,62993,62994],{"class":38,"line":1314},[36,62995,62945],{"class":42},[36,62997,62998],{"class":38,"line":1336},[36,62999,63000],{"class":42},"      font-size: 18px;\n",[36,63002,63003],{"class":38,"line":1356},[36,63004,63005],{"class":42},"      margin-bottom: 10px;\n",[36,63007,63008],{"class":38,"line":1361},[36,63009,5899],{"class":42},[36,63011,63012],{"class":38,"line":1407},[36,63013,659],{"emptyLinePlaceholder":658},[36,63015,63016],{"class":38,"line":1423},[36,63017,63018],{"class":42},"    .slider-indicator {\n",[36,63020,63021],{"class":38,"line":1439},[36,63022,62991],{"class":42},[36,63024,63025],{"class":38,"line":1444},[36,63026,63027],{"class":42},"      padding: 0;\n",[36,63029,63030],{"class":38,"line":1486},[36,63031,63032],{"class":42},"      list-style: none;\n",[36,63034,63035],{"class":38,"line":1499},[36,63036,62897],{"class":42},[36,63038,63039],{"class":38,"line":1513},[36,63040,63041],{"class":42},"      align-items: center;\n",[36,63043,63044],{"class":38,"line":1518},[36,63045,5899],{"class":42},[36,63047,63048],{"class":38,"line":1529},[36,63049,659],{"emptyLinePlaceholder":658},[36,63051,63052],{"class":38,"line":1539},[36,63053,63054],{"class":42},"    .slider-indicator li {\n",[36,63056,63057],{"class":38,"line":1544},[36,63058,63059],{"class":42},"      width: 8px;\n",[36,63061,63062],{"class":38,"line":1555},[36,63063,63064],{"class":42},"      height: 8px;\n",[36,63066,63067],{"class":38,"line":1572},[36,63068,63069],{"class":42},"      margin: 4px;\n",[36,63071,63072],{"class":38,"line":1592},[36,63073,63074],{"class":42},"      border-radius: 50%;\n",[36,63076,63077],{"class":38,"line":1597},[36,63078,63079],{"class":42},"      background: #fff;\n",[36,63081,63082],{"class":38,"line":1610},[36,63083,63084],{"class":42},"      opacity: 0.4;\n",[36,63086,63087],{"class":38,"line":1632},[36,63088,62955],{"class":42},[36,63090,63091],{"class":38,"line":1646},[36,63092,5899],{"class":42},[36,63094,63095],{"class":38,"line":1651},[36,63096,659],{"emptyLinePlaceholder":658},[36,63098,63099],{"class":38,"line":1664},[36,63100,63101],{"class":42},"    .slider-indicator li.active {\n",[36,63103,63104],{"class":38,"line":1669},[36,63105,63106],{"class":42},"      width: 12px;\n",[36,63108,63109],{"class":38,"line":1681},[36,63110,63111],{"class":42},"      height: 12px;\n",[36,63113,63114],{"class":38,"line":1694},[36,63115,63116],{"class":42},"      opacity: 1;\n",[36,63118,63119],{"class":38,"line":1699},[36,63120,5899],{"class":42},[36,63122,63123,63125,63127],{"class":38,"line":1714},[36,63124,55974],{"class":42},[36,63126,3785],{"class":54857},[36,63128,54864],{"class":42},[36,63130,63131,63133,63135],{"class":38,"line":1729},[36,63132,55342],{"class":42},[36,63134,54891],{"class":54857},[36,63136,54864],{"class":42},[36,63138,63139],{"class":38,"line":1746},[36,63140,659],{"emptyLinePlaceholder":658},[36,63142,63143,63145,63147],{"class":38,"line":1751},[36,63144,393],{"class":42},[36,63146,55357],{"class":54857},[36,63148,54864],{"class":42},[36,63150,63151,63153,63155,63157,63159,63162],{"class":38,"line":1765},[36,63152,55701],{"class":42},[36,63154,55168],{"class":54857},[36,63156,57043],{"class":101},[36,63158,47],{"class":42},[36,63160,63161],{"class":105},"\"slider\"",[36,63163,54864],{"class":42},[36,63165,63166,63168,63170,63172,63174,63176],{"class":38,"line":1783},[36,63167,54898],{"class":42},[36,63169,55168],{"class":54857},[36,63171,57043],{"class":101},[36,63173,47],{"class":42},[36,63175,58783],{"class":105},[36,63177,54864],{"class":42},[36,63179,63180,63182,63184,63186,63188,63191,63193,63195,63197],{"class":38,"line":1799},[36,63181,58790],{"class":42},[36,63183,5198],{"class":54857},[36,63185,58795],{"class":101},[36,63187,47],{"class":42},[36,63189,63190],{"class":105},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,63192,58803],{"class":101},[36,63194,47],{"class":42},[36,63196,11343],{"class":105},[36,63198,62682],{"class":42},[36,63200,63201,63203,63205],{"class":38,"line":1807},[36,63202,55333],{"class":42},[36,63204,55168],{"class":54857},[36,63206,54864],{"class":42},[36,63208,63209,63211,63213,63215,63217,63219],{"class":38,"line":1812},[36,63210,54898],{"class":42},[36,63212,55168],{"class":54857},[36,63214,57043],{"class":101},[36,63216,47],{"class":42},[36,63218,58830],{"class":105},[36,63220,54864],{"class":42},[36,63222,63223,63225,63227,63230,63232],{"class":38,"line":1817},[36,63224,58790],{"class":42},[36,63226,19],{"class":54857},[36,63228,63229],{"class":42},">对人类来说会不会太超前了？\u003C\u002F",[36,63231,19],{"class":54857},[36,63233,54864],{"class":42},[36,63235,63236,63238,63240,63242,63244,63247],{"class":38,"line":1833},[36,63237,58790],{"class":42},[36,63239,4875],{"class":54857},[36,63241,57043],{"class":101},[36,63243,47],{"class":42},[36,63245,63246],{"class":105},"\"slider-indicator\"",[36,63248,54864],{"class":42},[36,63250,63251,63253,63255,63257,63259,63262,63264,63266],{"class":38,"line":1844},[36,63252,58858],{"class":42},[36,63254,214],{"class":54857},[36,63256,57043],{"class":101},[36,63258,47],{"class":42},[36,63260,63261],{"class":105},"\"active\"",[36,63263,58870],{"class":42},[36,63265,214],{"class":54857},[36,63267,54864],{"class":42},[36,63269,63270,63272,63274,63276,63278],{"class":38,"line":1864},[36,63271,58858],{"class":42},[36,63273,214],{"class":54857},[36,63275,58870],{"class":42},[36,63277,214],{"class":54857},[36,63279,54864],{"class":42},[36,63281,63282,63284,63286,63288,63290],{"class":38,"line":1878},[36,63283,58858],{"class":42},[36,63285,214],{"class":54857},[36,63287,58870],{"class":42},[36,63289,214],{"class":54857},[36,63291,54864],{"class":42},[36,63293,63294,63296,63298,63300,63302],{"class":38,"line":1891},[36,63295,58858],{"class":42},[36,63297,214],{"class":54857},[36,63299,58870],{"class":42},[36,63301,214],{"class":54857},[36,63303,54864],{"class":42},[36,63305,63306,63308,63310,63312,63314],{"class":38,"line":1896},[36,63307,58858],{"class":42},[36,63309,214],{"class":54857},[36,63311,58870],{"class":42},[36,63313,214],{"class":54857},[36,63315,54864],{"class":42},[36,63317,63318,63320,63322,63324,63326],{"class":38,"line":1906},[36,63319,58858],{"class":42},[36,63321,214],{"class":54857},[36,63323,58870],{"class":42},[36,63325,214],{"class":54857},[36,63327,54864],{"class":42},[36,63329,63330,63332,63334,63336,63338],{"class":38,"line":1926},[36,63331,58858],{"class":42},[36,63333,214],{"class":54857},[36,63335,58870],{"class":42},[36,63337,214],{"class":54857},[36,63339,54864],{"class":42},[36,63341,63342,63344,63346,63348,63350],{"class":38,"line":1936},[36,63343,58858],{"class":42},[36,63345,214],{"class":54857},[36,63347,58870],{"class":42},[36,63349,214],{"class":54857},[36,63351,54864],{"class":42},[36,63353,63354,63356,63358],{"class":38,"line":1946},[36,63355,58963],{"class":42},[36,63357,4875],{"class":54857},[36,63359,54864],{"class":42},[36,63361,63362,63364,63366,63368,63370,63373],{"class":38,"line":1957},[36,63363,58790],{"class":42},[36,63365,55168],{"class":54857},[36,63367,57043],{"class":101},[36,63369,47],{"class":42},[36,63371,63372],{"class":105},"\"toggle\"",[36,63374,54864],{"class":42},[36,63376,63377,63379,63381,63383,63385,63388,63390,63393,63395,63397],{"class":38,"line":2008},[36,63378,58858],{"class":42},[36,63380,57444],{"class":54857},[36,63382,57043],{"class":101},[36,63384,47],{"class":42},[36,63386,63387],{"class":105},"\"prev\"",[36,63389,4829],{"class":42},[36,63391,63392],{"class":112},"&lt;",[36,63394,55342],{"class":42},[36,63396,57444],{"class":54857},[36,63398,54864],{"class":42},[36,63400,63401,63403,63405,63407,63409,63412,63414,63417,63419,63421],{"class":38,"line":2022},[36,63402,58858],{"class":42},[36,63404,57444],{"class":54857},[36,63406,57043],{"class":101},[36,63408,47],{"class":42},[36,63410,63411],{"class":105},"\"next\"",[36,63413,4829],{"class":42},[36,63415,63416],{"class":112},"&gt;",[36,63418,55342],{"class":42},[36,63420,57444],{"class":54857},[36,63422,54864],{"class":42},[36,63424,63425,63427,63429],{"class":38,"line":2028},[36,63426,58963],{"class":42},[36,63428,55168],{"class":54857},[36,63430,54864],{"class":42},[36,63432,63433,63435,63437],{"class":38,"line":2033},[36,63434,55333],{"class":42},[36,63436,55168],{"class":54857},[36,63438,54864],{"class":42},[36,63440,63441,63443,63445],{"class":38,"line":2054},[36,63442,55974],{"class":42},[36,63444,55168],{"class":54857},[36,63446,54864],{"class":42},[36,63448,63449,63451,63453],{"class":38,"line":2059},[36,63450,55701],{"class":42},[36,63452,55370],{"class":54857},[36,63454,54864],{"class":42},[36,63456,63457],{"class":38,"line":2064},[36,63458,63459],{"class":42},"    \u002F\u002F 1. 初始数据\n",[36,63461,63462],{"class":38,"line":2081},[36,63463,63464],{"class":42},"    const data = [\n",[36,63466,63467],{"class":38,"line":36396},[36,63468,63469],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[36,63471,63472],{"class":38,"line":36402},[36,63473,63474],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[36,63476,63477],{"class":38,"line":36411},[36,63478,63479],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[36,63481,63482],{"class":38,"line":36417},[36,63483,63484],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[36,63486,63487],{"class":38,"line":36426},[36,63488,63489],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[36,63491,63492],{"class":38,"line":36432},[36,63493,63494],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[36,63496,63497],{"class":38,"line":36438},[36,63498,63499],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[36,63501,63502],{"class":38,"line":36447},[36,63503,63504],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[36,63506,63507],{"class":38,"line":36453},[36,63508,56666],{"class":42},[36,63510,63511],{"class":38,"line":36464},[36,63512,63513],{"class":42},"    \u002F\u002F 获取元素\n",[36,63515,63516],{"class":38,"line":36470},[36,63517,63518],{"class":42},"    const img = document.querySelector('.slider-wrapper img')\n",[36,63520,63521],{"class":38,"line":36489},[36,63522,63523],{"class":42},"    const p = document.querySelector('.slider-footer p')\n",[36,63525,63526],{"class":38,"line":36495},[36,63527,63528],{"class":42},"    const footer = document.querySelector('.slider-footer')\n",[36,63530,63531],{"class":38,"line":36506},[36,63532,63533],{"class":42},"    \u002F\u002F 1. 右按钮业务\n",[36,63535,63536],{"class":38,"line":36512},[36,63537,63538],{"class":42},"    \u002F\u002F 1.1 获取右侧按钮 \n",[36,63540,63541],{"class":38,"line":36532},[36,63542,63543],{"class":42},"    const next = document.querySelector('.next')\n",[36,63545,63546],{"class":38,"line":36548},[36,63547,63548],{"class":42},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[36,63550,63551],{"class":38,"line":36554},[36,63552,63553],{"class":42},"    \u002F\u002F 1.2 注册点击事件\n",[36,63555,63556],{"class":38,"line":36568},[36,63557,659],{"emptyLinePlaceholder":658},[36,63559,63560],{"class":38,"line":36574},[36,63561,63562],{"class":42},"    next.addEventListener('click', function () {\n",[36,63564,63565],{"class":38,"line":36580},[36,63566,63567],{"class":42},"      \u002F\u002F console.log(11)\n",[36,63569,63570],{"class":38,"line":36591},[36,63571,63572],{"class":42},"      i++\n",[36,63574,63575],{"class":38,"line":36597},[36,63576,63577],{"class":42},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[36,63579,63580],{"class":38,"line":36603},[36,63581,63582],{"class":42},"      \u002F\u002F if (i >= 8) {\n",[36,63584,63585],{"class":38,"line":36613},[36,63586,63587],{"class":42},"      \u002F\u002F   i = 0\n",[36,63589,63590],{"class":38,"line":36619},[36,63591,63592],{"class":42},"      \u002F\u002F }\n",[36,63594,63595],{"class":38,"line":36630},[36,63596,63597],{"class":42},"      i = i >= data.length ? 0 : i\n",[36,63599,63600],{"class":38,"line":36636},[36,63601,63602],{"class":42},"      \u002F\u002F 1.3 得到对应的对象\n",[36,63604,63605],{"class":38,"line":36646},[36,63606,63607],{"class":42},"      \u002F\u002F console.log(data[i])\n",[36,63609,63610],{"class":38,"line":36651},[36,63611,63612],{"class":42},"      \u002F\u002F 调用函数\n",[36,63614,63615],{"class":38,"line":36657},[36,63616,63617],{"class":42},"      toggle()\n",[36,63619,63620],{"class":38,"line":36706},[36,63621,37021],{"class":42},[36,63623,63624],{"class":38,"line":36753},[36,63625,659],{"emptyLinePlaceholder":658},[36,63627,63628],{"class":38,"line":36758},[36,63629,63630],{"class":42},"    \u002F\u002F 2. 左侧按钮业务\n",[36,63632,63633],{"class":38,"line":36764},[36,63634,63635],{"class":42},"    \u002F\u002F 2.1 获取左侧按钮 \n",[36,63637,63638],{"class":38,"line":36783},[36,63639,63640],{"class":42},"    const prev = document.querySelector('.prev')\n",[36,63642,63643],{"class":38,"line":36789},[36,63644,63553],{"class":42},[36,63646,63647],{"class":38,"line":36809},[36,63648,63649],{"class":42},"    prev.addEventListener('click', function () {\n",[36,63651,63652],{"class":38,"line":36815},[36,63653,63654],{"class":42},"      i--\n",[36,63656,63657],{"class":38,"line":36821},[36,63658,63659],{"class":42},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[36,63661,63662],{"class":38,"line":36831},[36,63663,63664],{"class":42},"      \u002F\u002F if (i \u003C 0) {\n",[36,63666,63667],{"class":38,"line":36836},[36,63668,63669],{"class":42},"      \u002F\u002F   i = 7\n",[36,63671,63672],{"class":38,"line":36842},[36,63673,63592],{"class":42},[36,63675,63676],{"class":38,"line":36858},[36,63677,63678],{"class":42},"      i = i \u003C 0 ? data.length - 1 : i\n",[36,63680,63681],{"class":38,"line":36903},[36,63682,63602],{"class":42},[36,63684,63685],{"class":38,"line":36909},[36,63686,63607],{"class":42},[36,63688,63689],{"class":38,"line":36915},[36,63690,63612],{"class":42},[36,63692,63693],{"class":38,"line":36921},[36,63694,63617],{"class":42},[36,63696,63697],{"class":38,"line":36932},[36,63698,37021],{"class":42},[36,63700,63701],{"class":38,"line":36938},[36,63702,659],{"emptyLinePlaceholder":658},[36,63704,63705],{"class":38,"line":36944},[36,63706,63707],{"class":42},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[36,63709,63710],{"class":38,"line":36950},[36,63711,63712],{"class":42},"    function toggle() {\n",[36,63714,63715],{"class":38,"line":36968},[36,63716,63717],{"class":42},"      \u002F\u002F 1.4 渲染对应的数据\n",[36,63719,63720],{"class":38,"line":36982},[36,63721,63722],{"class":42},"      img.src = data[i].url\n",[36,63724,63725],{"class":38,"line":36991},[36,63726,63727],{"class":42},"      p.innerHTML = data[i].title\n",[36,63729,63730],{"class":38,"line":37000},[36,63731,63732],{"class":42},"      footer.style.backgroundColor = data[i].color\n",[36,63734,63735],{"class":38,"line":37009},[36,63736,63737],{"class":42},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[36,63739,63740],{"class":38,"line":37018},[36,63741,63742],{"class":42},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[36,63744,63745],{"class":38,"line":37024},[36,63746,63747],{"class":42},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[36,63749,63750],{"class":38,"line":37030},[36,63751,5899],{"class":42},[36,63753,63754],{"class":38,"line":37038},[36,63755,659],{"emptyLinePlaceholder":658},[36,63757,63758],{"class":38,"line":37043},[36,63759,63760],{"class":42},"    \u002F\u002F 3. 自动播放模块\n",[36,63762,63763],{"class":38,"line":37049},[36,63764,63765],{"class":42},"    let timerId = setInterval(function () {\n",[36,63767,63768],{"class":38,"line":37060},[36,63769,63770],{"class":42},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,63772,63773],{"class":38,"line":37066},[36,63774,63775],{"class":42},"      next.click()\n",[36,63777,63778],{"class":38,"line":37086},[36,63779,63780],{"class":42},"    }, 1000)\n",[36,63782,63783],{"class":38,"line":37092},[36,63784,659],{"emptyLinePlaceholder":658},[36,63786,63787],{"class":38,"line":37098},[36,63788,63789],{"class":42},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[36,63791,63792],{"class":38,"line":37104},[36,63793,63794],{"class":42},"    const slider = document.querySelector('.slider')\n",[36,63796,63797],{"class":38,"line":37121},[36,63798,63799],{"class":42},"    \u002F\u002F 注册事件\n",[36,63801,63802],{"class":38,"line":37127},[36,63803,63804],{"class":42},"    slider.addEventListener('mouseenter', function () {\n",[36,63806,63807],{"class":38,"line":37133},[36,63808,63809],{"class":42},"      \u002F\u002F 停止定时器\n",[36,63811,63812],{"class":38,"line":37139},[36,63813,63814],{"class":42},"      clearInterval(timerId)\n",[36,63816,63817],{"class":38,"line":37145},[36,63818,37021],{"class":42},[36,63820,63821],{"class":38,"line":37151},[36,63822,659],{"emptyLinePlaceholder":658},[36,63824,63825],{"class":38,"line":37178},[36,63826,63827],{"class":42},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[36,63829,63830],{"class":38,"line":37202},[36,63831,63799],{"class":42},[36,63833,63834],{"class":38,"line":37208},[36,63835,63836],{"class":42},"    slider.addEventListener('mouseleave', function () {\n",[36,63838,63839],{"class":38,"line":37214},[36,63840,63809],{"class":42},[36,63842,63843],{"class":38,"line":37220},[36,63844,63845],{"class":42},"      if (timerId) clearInterval(timerId)\n",[36,63847,63848],{"class":38,"line":37231},[36,63849,63850],{"class":42},"      \u002F\u002F 开启定时器\n",[36,63852,63853],{"class":38,"line":37242},[36,63854,63855],{"class":42},"      timerId = setInterval(function () {\n",[36,63857,63858],{"class":38,"line":37248},[36,63859,63860],{"class":42},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,63862,63863],{"class":38,"line":37265},[36,63864,63865],{"class":42},"        next.click()\n",[36,63867,63868],{"class":38,"line":37288},[36,63869,63870],{"class":42},"      }, 1000)\n",[36,63872,63873],{"class":38,"line":37311},[36,63874,37021],{"class":42},[36,63876,63877,63879,63881],{"class":38,"line":37317},[36,63878,55974],{"class":42},[36,63880,55370],{"class":54857},[36,63882,54864],{"class":42},[36,63884,63885,63887,63889],{"class":38,"line":37322},[36,63886,55342],{"class":42},[36,63888,55357],{"class":54857},[36,63890,54864],{"class":42},[36,63892,63893],{"class":38,"line":37331},[36,63894,659],{"emptyLinePlaceholder":658},[36,63896,63897,63899,63901],{"class":38,"line":37341},[36,63898,55342],{"class":42},[36,63900,54192],{"class":54857},[36,63902,54864],{"class":42},[25619,63904,63906],{"id":63905},"_3252-焦点事件","3.2.5.2 焦点事件",[19,63908,63909],{},"小米搜索框案例：",[26,63911,63913],{"className":54190,"code":63912,"language":54192,"meta":31,"style":31},"\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",[33,63914,63915,63925,63939,63943,63951,63965,63985,64005,64017,64025,64031,64041,64051,64063,64067,64071,64078,64082,64093,64097,64101,64108,64119,64132,64146,64150,64154,64163,64175,64187,64201,64214,64227,64245,64256,64260,64264,64273,64290,64294,64298,64305,64315,64325,64336,64349,64361,64377,64388,64400,64404,64408,64416,64427,64444,64456,64468,64479,64483,64487,64498,64509,64513,64521,64525,64533,64537,64545,64560,64583,64598,64629,64656,64683,64710,64737,64764,64791,64800,64808,64816,64821,64841,64861,64866,64871,64889,64894,64904,64909,64923,64928,64933,64950,64959,64971,64975,64983,64991,64995],{"__ignoreMap":31},[36,63916,63917,63919,63921,63923],{"class":38,"line":39},[36,63918,54854],{"class":42},[36,63920,54858],{"class":54857},[36,63922,54861],{"class":101},[36,63924,54864],{"class":42},[36,63926,63927,63929,63931,63933,63935,63937],{"class":38,"line":53},[36,63928,393],{"class":42},[36,63930,54192],{"class":54857},[36,63932,54873],{"class":101},[36,63934,47],{"class":42},[36,63936,54878],{"class":105},[36,63938,54864],{"class":42},[36,63940,63941],{"class":38,"line":196},[36,63942,659],{"emptyLinePlaceholder":658},[36,63944,63945,63947,63949],{"class":38,"line":642},[36,63946,393],{"class":42},[36,63948,54891],{"class":54857},[36,63950,54864],{"class":42},[36,63952,63953,63955,63957,63959,63961,63963],{"class":38,"line":655},[36,63954,54898],{"class":42},[36,63956,54901],{"class":54857},[36,63958,54904],{"class":101},[36,63960,47],{"class":42},[36,63962,54909],{"class":105},[36,63964,54864],{"class":42},[36,63966,63967,63969,63971,63973,63975,63977,63979,63981,63983],{"class":38,"line":662},[36,63968,54898],{"class":42},[36,63970,54901],{"class":54857},[36,63972,54920],{"class":101},[36,63974,47],{"class":42},[36,63976,54925],{"class":105},[36,63978,54928],{"class":101},[36,63980,47],{"class":42},[36,63982,54933],{"class":105},[36,63984,54864],{"class":42},[36,63986,63987,63989,63991,63993,63995,63997,63999,64001,64003],{"class":38,"line":667},[36,63988,54898],{"class":42},[36,63990,54901],{"class":54857},[36,63992,18576],{"class":101},[36,63994,47],{"class":42},[36,63996,54948],{"class":105},[36,63998,54928],{"class":101},[36,64000,47],{"class":42},[36,64002,54955],{"class":105},[36,64004,54864],{"class":42},[36,64006,64007,64009,64011,64013,64015],{"class":38,"line":679},[36,64008,54898],{"class":42},[36,64010,54964],{"class":54857},[36,64012,54967],{"class":42},[36,64014,54964],{"class":54857},[36,64016,54864],{"class":42},[36,64018,64019,64021,64023],{"class":38,"line":685},[36,64020,54898],{"class":42},[36,64022,3785],{"class":54857},[36,64024,54864],{"class":42},[36,64026,64027,64029],{"class":38,"line":691},[36,64028,54984],{"class":54857},[36,64030,19228],{"class":42},[36,64032,64033,64035,64037,64039],{"class":38,"line":696},[36,64034,54991],{"class":112},[36,64036,54994],{"class":42},[36,64038,1859],{"class":112},[36,64040,5029],{"class":42},[36,64042,64043,64045,64047,64049],{"class":38,"line":702},[36,64044,55003],{"class":112},[36,64046,54994],{"class":42},[36,64048,1859],{"class":112},[36,64050,5029],{"class":42},[36,64052,64053,64056,64058,64061],{"class":38,"line":708},[36,64054,64055],{"class":112},"            box-sizing",[36,64057,54994],{"class":42},[36,64059,64060],{"class":112},"border-box",[36,64062,5029],{"class":42},[36,64064,64065],{"class":38,"line":713},[36,64066,6239],{"class":42},[36,64068,64069],{"class":38,"line":719},[36,64070,659],{"emptyLinePlaceholder":658},[36,64072,64073,64076],{"class":38,"line":725},[36,64074,64075],{"class":54857},"        ul",[36,64077,19228],{"class":42},[36,64079,64080],{"class":38,"line":731},[36,64081,659],{"emptyLinePlaceholder":658},[36,64083,64084,64087,64089,64091],{"class":38,"line":736},[36,64085,64086],{"class":112},"            list-style",[36,64088,54994],{"class":42},[36,64090,58293],{"class":112},[36,64092,5029],{"class":42},[36,64094,64095],{"class":38,"line":742},[36,64096,6239],{"class":42},[36,64098,64099],{"class":38,"line":748},[36,64100,659],{"emptyLinePlaceholder":658},[36,64102,64103,64106],{"class":38,"line":754},[36,64104,64105],{"class":101},"        .mi",[36,64107,19228],{"class":42},[36,64109,64110,64113,64115,64117],{"class":38,"line":760},[36,64111,64112],{"class":112},"            position",[36,64114,54994],{"class":42},[36,64116,58320],{"class":112},[36,64118,5029],{"class":42},[36,64120,64121,64123,64125,64128,64130],{"class":38,"line":766},[36,64122,55041],{"class":112},[36,64124,54994],{"class":42},[36,64126,64127],{"class":112},"223",[36,64129,55049],{"class":46},[36,64131,5029],{"class":42},[36,64133,64134,64136,64138,64140,64142,64144],{"class":38,"line":772},[36,64135,54991],{"class":112},[36,64137,54994],{"class":42},[36,64139,4186],{"class":112},[36,64141,55049],{"class":46},[36,64143,55113],{"class":112},[36,64145,5029],{"class":42},[36,64147,64148],{"class":38,"line":778},[36,64149,6239],{"class":42},[36,64151,64152],{"class":38,"line":783},[36,64153,659],{"emptyLinePlaceholder":658},[36,64155,64156,64158,64161],{"class":38,"line":789},[36,64157,64105],{"class":101},[36,64159,64160],{"class":54857}," input",[36,64162,19228],{"class":42},[36,64164,64165,64167,64169,64171,64173],{"class":38,"line":795},[36,64166,55041],{"class":112},[36,64168,54994],{"class":42},[36,64170,64127],{"class":112},[36,64172,55049],{"class":46},[36,64174,5029],{"class":42},[36,64176,64177,64179,64181,64183,64185],{"class":38,"line":801},[36,64178,55056],{"class":112},[36,64180,54994],{"class":42},[36,64182,4478],{"class":112},[36,64184,55049],{"class":46},[36,64186,5029],{"class":42},[36,64188,64189,64191,64193,64195,64197,64199],{"class":38,"line":807},[36,64190,55003],{"class":112},[36,64192,54994],{"class":42},[36,64194,1859],{"class":112},[36,64196,5750],{"class":112},[36,64198,55049],{"class":46},[36,64200,5029],{"class":42},[36,64202,64203,64206,64208,64210,64212],{"class":38,"line":813},[36,64204,64205],{"class":112},"            font-size",[36,64207,54994],{"class":42},[36,64209,4421],{"class":112},[36,64211,55049],{"class":46},[36,64213,5029],{"class":42},[36,64215,64216,64219,64221,64223,64225],{"class":38,"line":819},[36,64217,64218],{"class":112},"            line-height",[36,64220,54994],{"class":42},[36,64222,4478],{"class":112},[36,64224,55049],{"class":46},[36,64226,5029],{"class":42},[36,64228,64229,64232,64234,64236,64238,64240,64243],{"class":38,"line":824},[36,64230,64231],{"class":112},"            border",[36,64233,54994],{"class":42},[36,64235,4092],{"class":112},[36,64237,55049],{"class":46},[36,64239,55078],{"class":112},[36,64241,64242],{"class":112}," #e0e0e0",[36,64244,5029],{"class":42},[36,64246,64247,64250,64252,64254],{"class":38,"line":829},[36,64248,64249],{"class":112},"            outline",[36,64251,54994],{"class":42},[36,64253,58293],{"class":112},[36,64255,5029],{"class":42},[36,64257,64258],{"class":38,"line":851},[36,64259,6239],{"class":42},[36,64261,64262],{"class":38,"line":868},[36,64263,659],{"emptyLinePlaceholder":658},[36,64265,64266,64268,64271],{"class":38,"line":873},[36,64267,64105],{"class":101},[36,64269,64270],{"class":101}," .search",[36,64272,19228],{"class":42},[36,64274,64275,64277,64279,64281,64283,64285,64288],{"class":38,"line":891},[36,64276,64231],{"class":112},[36,64278,54994],{"class":42},[36,64280,4092],{"class":112},[36,64282,55049],{"class":46},[36,64284,55078],{"class":112},[36,64286,64287],{"class":112}," #ff6700",[36,64289,5029],{"class":42},[36,64291,64292],{"class":38,"line":906},[36,64293,6239],{"class":42},[36,64295,64296],{"class":38,"line":925},[36,64297,659],{"emptyLinePlaceholder":658},[36,64299,64300,64303],{"class":38,"line":943},[36,64301,64302],{"class":101},"        .result-list",[36,64304,19228],{"class":42},[36,64306,64307,64309,64311,64313],{"class":38,"line":948},[36,64308,55029],{"class":112},[36,64310,54994],{"class":42},[36,64312,58293],{"class":112},[36,64314,5029],{"class":42},[36,64316,64317,64319,64321,64323],{"class":38,"line":971},[36,64318,64112],{"class":112},[36,64320,54994],{"class":42},[36,64322,58387],{"class":112},[36,64324,5029],{"class":42},[36,64326,64327,64330,64332,64334],{"class":38,"line":992},[36,64328,64329],{"class":112},"            left",[36,64331,54994],{"class":42},[36,64333,1859],{"class":112},[36,64335,5029],{"class":42},[36,64337,64338,64341,64343,64345,64347],{"class":38,"line":1020},[36,64339,64340],{"class":112},"            top",[36,64342,54994],{"class":42},[36,64344,4478],{"class":112},[36,64346,55049],{"class":46},[36,64348,5029],{"class":42},[36,64350,64351,64353,64355,64357,64359],{"class":38,"line":1036},[36,64352,55041],{"class":112},[36,64354,54994],{"class":42},[36,64356,64127],{"class":112},[36,64358,55049],{"class":46},[36,64360,5029],{"class":42},[36,64362,64363,64365,64367,64369,64371,64373,64375],{"class":38,"line":1041},[36,64364,64231],{"class":112},[36,64366,54994],{"class":42},[36,64368,4092],{"class":112},[36,64370,55049],{"class":46},[36,64372,55078],{"class":112},[36,64374,64287],{"class":112},[36,64376,5029],{"class":42},[36,64378,64379,64382,64384,64386],{"class":38,"line":1052},[36,64380,64381],{"class":112},"            border-top",[36,64383,54994],{"class":42},[36,64385,1859],{"class":112},[36,64387,5029],{"class":42},[36,64389,64390,64393,64395,64398],{"class":38,"line":1065},[36,64391,64392],{"class":112},"            background",[36,64394,54994],{"class":42},[36,64396,64397],{"class":112},"#fff",[36,64399,5029],{"class":42},[36,64401,64402],{"class":38,"line":1077},[36,64403,6239],{"class":42},[36,64405,64406],{"class":38,"line":1082},[36,64407,659],{"emptyLinePlaceholder":658},[36,64409,64410,64412,64414],{"class":38,"line":1125},[36,64411,64302],{"class":101},[36,64413,5134],{"class":54857},[36,64415,19228],{"class":42},[36,64417,64418,64420,64422,64425],{"class":38,"line":1164},[36,64419,55029],{"class":112},[36,64421,54994],{"class":42},[36,64423,64424],{"class":112},"block",[36,64426,5029],{"class":42},[36,64428,64429,64431,64433,64435,64437,64440,64442],{"class":38,"line":1169},[36,64430,55003],{"class":112},[36,64432,54994],{"class":42},[36,64434,4219],{"class":112},[36,64436,55049],{"class":46},[36,64438,64439],{"class":112}," 15",[36,64441,55049],{"class":46},[36,64443,5029],{"class":42},[36,64445,64446,64448,64450,64452,64454],{"class":38,"line":1180},[36,64447,64205],{"class":112},[36,64449,54994],{"class":42},[36,64451,4371],{"class":112},[36,64453,55049],{"class":46},[36,64455,5029],{"class":42},[36,64457,64458,64461,64463,64466],{"class":38,"line":1198},[36,64459,64460],{"class":112},"            color",[36,64462,54994],{"class":42},[36,64464,64465],{"class":112},"#424242",[36,64467,5029],{"class":42},[36,64469,64470,64473,64475,64477],{"class":38,"line":1215},[36,64471,64472],{"class":112},"            text-decoration",[36,64474,54994],{"class":42},[36,64476,58293],{"class":112},[36,64478,5029],{"class":42},[36,64480,64481],{"class":38,"line":1236},[36,64482,6239],{"class":42},[36,64484,64485],{"class":38,"line":1245},[36,64486,659],{"emptyLinePlaceholder":658},[36,64488,64489,64491,64493,64496],{"class":38,"line":1250},[36,64490,64302],{"class":101},[36,64492,5134],{"class":54857},[36,64494,64495],{"class":101},":hover",[36,64497,19228],{"class":42},[36,64499,64500,64502,64504,64507],{"class":38,"line":1265},[36,64501,55197],{"class":112},[36,64503,54994],{"class":42},[36,64505,64506],{"class":112},"#eee",[36,64508,5029],{"class":42},[36,64510,64511],{"class":38,"line":1281},[36,64512,6239],{"class":42},[36,64514,64515,64517,64519],{"class":38,"line":1297},[36,64516,55333],{"class":42},[36,64518,3785],{"class":54857},[36,64520,54864],{"class":42},[36,64522,64523],{"class":38,"line":1314},[36,64524,659],{"emptyLinePlaceholder":658},[36,64526,64527,64529,64531],{"class":38,"line":1336},[36,64528,55342],{"class":42},[36,64530,54891],{"class":54857},[36,64532,54864],{"class":42},[36,64534,64535],{"class":38,"line":1356},[36,64536,659],{"emptyLinePlaceholder":658},[36,64538,64539,64541,64543],{"class":38,"line":1361},[36,64540,393],{"class":42},[36,64542,55357],{"class":54857},[36,64544,54864],{"class":42},[36,64546,64547,64549,64551,64553,64555,64558],{"class":38,"line":1407},[36,64548,54898],{"class":42},[36,64550,55168],{"class":54857},[36,64552,57043],{"class":101},[36,64554,47],{"class":42},[36,64556,64557],{"class":105},"\"mi\"",[36,64559,54864],{"class":42},[36,64561,64562,64564,64566,64568,64570,64573,64576,64578,64581],{"class":38,"line":1423},[36,64563,58858],{"class":42},[36,64565,57378],{"class":54857},[36,64567,57381],{"class":101},[36,64569,47],{"class":42},[36,64571,64572],{"class":105},"\"search\"",[36,64574,64575],{"class":101}," placeholder",[36,64577,47],{"class":42},[36,64579,64580],{"class":105},"\"小米笔记本\"",[36,64582,54864],{"class":42},[36,64584,64585,64587,64589,64591,64593,64596],{"class":38,"line":1439},[36,64586,58858],{"class":42},[36,64588,4875],{"class":54857},[36,64590,57043],{"class":101},[36,64592,47],{"class":42},[36,64594,64595],{"class":105},"\"result-list\"",[36,64597,54864],{"class":42},[36,64599,64600,64603,64605,64608,64610,64613,64615,64618,64621,64623,64625,64627],{"class":38,"line":1444},[36,64601,64602],{"class":42},"            \u003C",[36,64604,214],{"class":54857},[36,64606,64607],{"class":42},">\u003C",[36,64609,4113],{"class":54857},[36,64611,64612],{"class":101}," href",[36,64614,47],{"class":42},[36,64616,64617],{"class":105},"\"#\"",[36,64619,64620],{"class":42},">全部商品\u003C\u002F",[36,64622,4113],{"class":54857},[36,64624,58870],{"class":42},[36,64626,214],{"class":54857},[36,64628,54864],{"class":42},[36,64630,64631,64633,64635,64637,64639,64641,64643,64645,64648,64650,64652,64654],{"class":38,"line":1486},[36,64632,64602],{"class":42},[36,64634,214],{"class":54857},[36,64636,64607],{"class":42},[36,64638,4113],{"class":54857},[36,64640,64612],{"class":101},[36,64642,47],{"class":42},[36,64644,64617],{"class":105},[36,64646,64647],{"class":42},">小米11\u003C\u002F",[36,64649,4113],{"class":54857},[36,64651,58870],{"class":42},[36,64653,214],{"class":54857},[36,64655,54864],{"class":42},[36,64657,64658,64660,64662,64664,64666,64668,64670,64672,64675,64677,64679,64681],{"class":38,"line":1499},[36,64659,64602],{"class":42},[36,64661,214],{"class":54857},[36,64663,64607],{"class":42},[36,64665,4113],{"class":54857},[36,64667,64612],{"class":101},[36,64669,47],{"class":42},[36,64671,64617],{"class":105},[36,64673,64674],{"class":42},">小米10S\u003C\u002F",[36,64676,4113],{"class":54857},[36,64678,58870],{"class":42},[36,64680,214],{"class":54857},[36,64682,54864],{"class":42},[36,64684,64685,64687,64689,64691,64693,64695,64697,64699,64702,64704,64706,64708],{"class":38,"line":1513},[36,64686,64602],{"class":42},[36,64688,214],{"class":54857},[36,64690,64607],{"class":42},[36,64692,4113],{"class":54857},[36,64694,64612],{"class":101},[36,64696,47],{"class":42},[36,64698,64617],{"class":105},[36,64700,64701],{"class":42},">小米笔记本\u003C\u002F",[36,64703,4113],{"class":54857},[36,64705,58870],{"class":42},[36,64707,214],{"class":54857},[36,64709,54864],{"class":42},[36,64711,64712,64714,64716,64718,64720,64722,64724,64726,64729,64731,64733,64735],{"class":38,"line":1518},[36,64713,64602],{"class":42},[36,64715,214],{"class":54857},[36,64717,64607],{"class":42},[36,64719,4113],{"class":54857},[36,64721,64612],{"class":101},[36,64723,47],{"class":42},[36,64725,64617],{"class":105},[36,64727,64728],{"class":42},">小米手机\u003C\u002F",[36,64730,4113],{"class":54857},[36,64732,58870],{"class":42},[36,64734,214],{"class":54857},[36,64736,54864],{"class":42},[36,64738,64739,64741,64743,64745,64747,64749,64751,64753,64756,64758,64760,64762],{"class":38,"line":1529},[36,64740,64602],{"class":42},[36,64742,214],{"class":54857},[36,64744,64607],{"class":42},[36,64746,4113],{"class":54857},[36,64748,64612],{"class":101},[36,64750,47],{"class":42},[36,64752,64617],{"class":105},[36,64754,64755],{"class":42},">黑鲨4\u003C\u002F",[36,64757,4113],{"class":54857},[36,64759,58870],{"class":42},[36,64761,214],{"class":54857},[36,64763,54864],{"class":42},[36,64765,64766,64768,64770,64772,64774,64776,64778,64780,64783,64785,64787,64789],{"class":38,"line":1539},[36,64767,64602],{"class":42},[36,64769,214],{"class":54857},[36,64771,64607],{"class":42},[36,64773,4113],{"class":54857},[36,64775,64612],{"class":101},[36,64777,47],{"class":42},[36,64779,64617],{"class":105},[36,64781,64782],{"class":42},">空调\u003C\u002F",[36,64784,4113],{"class":54857},[36,64786,58870],{"class":42},[36,64788,214],{"class":54857},[36,64790,54864],{"class":42},[36,64792,64793,64796,64798],{"class":38,"line":1544},[36,64794,64795],{"class":42},"        \u003C\u002F",[36,64797,4875],{"class":54857},[36,64799,54864],{"class":42},[36,64801,64802,64804,64806],{"class":38,"line":1555},[36,64803,55333],{"class":42},[36,64805,55168],{"class":54857},[36,64807,54864],{"class":42},[36,64809,64810,64812,64814],{"class":38,"line":1572},[36,64811,54898],{"class":42},[36,64813,55370],{"class":54857},[36,64815,54864],{"class":42},[36,64817,64818],{"class":38,"line":1592},[36,64819,64820],{"class":3943},"        \u002F\u002F 1. 获取元素\n",[36,64822,64823,64826,64828,64830,64832,64834,64836,64839],{"class":38,"line":1597},[36,64824,64825],{"class":46},"        const",[36,64827,64160],{"class":112},[36,64829,673],{"class":46},[36,64831,57953],{"class":42},[36,64833,57956],{"class":101},[36,64835,495],{"class":42},[36,64837,64838],{"class":105},"'[type=search]'",[36,64840,922],{"class":42},[36,64842,64843,64845,64848,64850,64852,64854,64856,64859],{"class":38,"line":1610},[36,64844,64825],{"class":46},[36,64846,64847],{"class":112}," ul",[36,64849,673],{"class":46},[36,64851,57953],{"class":42},[36,64853,57956],{"class":101},[36,64855,495],{"class":42},[36,64857,64858],{"class":105},"'.result-list'",[36,64860,922],{"class":42},[36,64862,64863],{"class":38,"line":1632},[36,64864,64865],{"class":3943},"        \u002F\u002F console.log(input)\n",[36,64867,64868],{"class":38,"line":1646},[36,64869,64870],{"class":3943},"        \u002F\u002F 2. 监听事件 获得焦点\n",[36,64872,64873,64876,64878,64880,64883,64885,64887],{"class":38,"line":1651},[36,64874,64875],{"class":42},"        input.",[36,64877,61368],{"class":101},[36,64879,495],{"class":42},[36,64881,64882],{"class":105},"'focus'",[36,64884,478],{"class":42},[36,64886,58005],{"class":46},[36,64888,58008],{"class":42},[36,64890,64891],{"class":38,"line":1664},[36,64892,64893],{"class":3943},"            \u002F\u002F ul显示\n",[36,64895,64896,64899,64901],{"class":38,"line":1669},[36,64897,64898],{"class":42},"            ul.style.display ",[36,64900,47],{"class":46},[36,64902,64903],{"class":105}," 'block'\n",[36,64905,64906],{"class":38,"line":1681},[36,64907,64908],{"class":3943},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[36,64910,64911,64914,64916,64918,64921],{"class":38,"line":1694},[36,64912,64913],{"class":42},"            input.classList.",[36,64915,9027],{"class":101},[36,64917,495],{"class":42},[36,64919,64920],{"class":105},"'search'",[36,64922,922],{"class":42},[36,64924,64925],{"class":38,"line":1699},[36,64926,64927],{"class":42},"        })\n",[36,64929,64930],{"class":38,"line":1714},[36,64931,64932],{"class":3943},"        \u002F\u002F 3. 监听事件 失去焦点\n",[36,64934,64935,64937,64939,64941,64944,64946,64948],{"class":38,"line":1729},[36,64936,64875],{"class":42},[36,64938,61368],{"class":101},[36,64940,495],{"class":42},[36,64942,64943],{"class":105},"'blur'",[36,64945,478],{"class":42},[36,64947,58005],{"class":46},[36,64949,58008],{"class":42},[36,64951,64952,64954,64956],{"class":38,"line":1746},[36,64953,64898],{"class":42},[36,64955,47],{"class":46},[36,64957,64958],{"class":105}," 'none'\n",[36,64960,64961,64963,64965,64967,64969],{"class":38,"line":1751},[36,64962,64913],{"class":42},[36,64964,60561],{"class":101},[36,64966,495],{"class":42},[36,64968,64920],{"class":105},[36,64970,922],{"class":42},[36,64972,64973],{"class":38,"line":1765},[36,64974,64927],{"class":42},[36,64976,64977,64979,64981],{"class":38,"line":1783},[36,64978,55333],{"class":42},[36,64980,55370],{"class":54857},[36,64982,54864],{"class":42},[36,64984,64985,64987,64989],{"class":38,"line":1799},[36,64986,55342],{"class":42},[36,64988,55357],{"class":54857},[36,64990,54864],{"class":42},[36,64992,64993],{"class":38,"line":1807},[36,64994,659],{"emptyLinePlaceholder":658},[36,64996,64997,64999,65001],{"class":38,"line":1812},[36,64998,55342],{"class":42},[36,65000,54192],{"class":54857},[36,65002,54864],{"class":42},[25619,65004,65006],{"id":65005},"_3253-键盘事件","3.2.5.3 键盘事件",[19,65008,65009],{},"评论字数统计案例",[19,65011,65012],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,65014,65015],{},"牢记focus伪类选择器",[54901,65017],{"charSet":65018},"UTF-8",[54901,65020],{"name":65021,"content":65022},"viewport","width=device-width, initial-scale=1.0",[54964,65024,65025],{},"Document",[3785,65027,65028],{},"\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",[57378,65030],{"type":80},[4875,65032,65033,65036],{},[214,65034,65035],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[214,65037,65038],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[26,65040,65042],{"className":54190,"code":65041,"language":54192,"meta":31,"style":31},"\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",[33,65043,65044,65054,65068,65072,65080,65094,65114,65134,65147,65155,65162,65175,65189,65199,65209,65213,65217,65224,65236,65248,65260,65272,65301,65314,65318,65322,65331,65342,65354,65365,65376,65388,65399,65411,65427,65439,65443,65447,65458,65469,65479,65491,65495,65499,65507,65518,65528,65539,65551,65564,65576,65588,65592,65596,65605,65617,65628,65641,65652,65666,65670,65674,65681,65693,65705,65715,65719,65723,65732,65744,65754,65758,65762,65773,65783,65802,65815,65819,65823,65833,65843,65847,65851,65862,65873,65885,65897,65901,65905,65916,65927,65941,65945,65949,65960,65970,65982,65986,65994,66002,66006,66014,66029,66048,66088,66101,66109,66123,66143,66151,66166,66189,66207,66222,66242,66262,66282,66290,66298,66306,66314,66334,66354,66359,66376,66385,66389,66394,66410,66418,66422,66427,66444,66449,66474,66478,66482,66487,66492,66500,66508,66512],{"__ignoreMap":31},[36,65045,65046,65048,65050,65052],{"class":38,"line":39},[36,65047,54854],{"class":42},[36,65049,54858],{"class":54857},[36,65051,54861],{"class":101},[36,65053,54864],{"class":42},[36,65055,65056,65058,65060,65062,65064,65066],{"class":38,"line":53},[36,65057,393],{"class":42},[36,65059,54192],{"class":54857},[36,65061,54873],{"class":101},[36,65063,47],{"class":42},[36,65065,54878],{"class":105},[36,65067,54864],{"class":42},[36,65069,65070],{"class":38,"line":196},[36,65071,659],{"emptyLinePlaceholder":658},[36,65073,65074,65076,65078],{"class":38,"line":642},[36,65075,393],{"class":42},[36,65077,54891],{"class":54857},[36,65079,54864],{"class":42},[36,65081,65082,65084,65086,65088,65090,65092],{"class":38,"line":655},[36,65083,55701],{"class":42},[36,65085,54901],{"class":54857},[36,65087,54904],{"class":101},[36,65089,47],{"class":42},[36,65091,54909],{"class":105},[36,65093,54864],{"class":42},[36,65095,65096,65098,65100,65102,65104,65106,65108,65110,65112],{"class":38,"line":662},[36,65097,55701],{"class":42},[36,65099,54901],{"class":54857},[36,65101,54920],{"class":101},[36,65103,47],{"class":42},[36,65105,54925],{"class":105},[36,65107,54928],{"class":101},[36,65109,47],{"class":42},[36,65111,54933],{"class":105},[36,65113,54864],{"class":42},[36,65115,65116,65118,65120,65122,65124,65126,65128,65130,65132],{"class":38,"line":667},[36,65117,55701],{"class":42},[36,65119,54901],{"class":54857},[36,65121,18576],{"class":101},[36,65123,47],{"class":42},[36,65125,54948],{"class":105},[36,65127,54928],{"class":101},[36,65129,47],{"class":42},[36,65131,54955],{"class":105},[36,65133,54864],{"class":42},[36,65135,65136,65138,65140,65143,65145],{"class":38,"line":679},[36,65137,55701],{"class":42},[36,65139,54964],{"class":54857},[36,65141,65142],{"class":42},">评论回车发布\u003C\u002F",[36,65144,54964],{"class":54857},[36,65146,54864],{"class":42},[36,65148,65149,65151,65153],{"class":38,"line":685},[36,65150,55701],{"class":42},[36,65152,3785],{"class":54857},[36,65154,54864],{"class":42},[36,65156,65157,65160],{"class":38,"line":691},[36,65158,65159],{"class":101},"    .wrapper",[36,65161,19228],{"class":42},[36,65163,65164,65167,65169,65171,65173],{"class":38,"line":696},[36,65165,65166],{"class":112},"      min-width",[36,65168,54994],{"class":42},[36,65170,7685],{"class":112},[36,65172,55049],{"class":46},[36,65174,5029],{"class":42},[36,65176,65177,65180,65182,65185,65187],{"class":38,"line":702},[36,65178,65179],{"class":112},"      max-width",[36,65181,54994],{"class":42},[36,65183,65184],{"class":112},"800",[36,65186,55049],{"class":46},[36,65188,5029],{"class":42},[36,65190,65191,65193,65195,65197],{"class":38,"line":708},[36,65192,58565],{"class":112},[36,65194,54994],{"class":42},[36,65196,55034],{"class":112},[36,65198,5029],{"class":42},[36,65200,65201,65203,65205,65207],{"class":38,"line":713},[36,65202,58576],{"class":112},[36,65204,54994],{"class":42},[36,65206,55137],{"class":112},[36,65208,5029],{"class":42},[36,65210,65211],{"class":38,"line":719},[36,65212,5899],{"class":42},[36,65214,65215],{"class":38,"line":725},[36,65216,659],{"emptyLinePlaceholder":658},[36,65218,65219,65222],{"class":38,"line":731},[36,65220,65221],{"class":101},"    .avatar",[36,65223,19228],{"class":42},[36,65225,65226,65228,65230,65232,65234],{"class":38,"line":736},[36,65227,58327],{"class":112},[36,65229,54994],{"class":42},[36,65231,4478],{"class":112},[36,65233,55049],{"class":46},[36,65235,5029],{"class":42},[36,65237,65238,65240,65242,65244,65246],{"class":38,"line":742},[36,65239,58341],{"class":112},[36,65241,54994],{"class":42},[36,65243,4478],{"class":112},[36,65245,55049],{"class":46},[36,65247,5029],{"class":42},[36,65249,65250,65252,65254,65256,65258],{"class":38,"line":748},[36,65251,58690],{"class":112},[36,65253,54994],{"class":42},[36,65255,4527],{"class":112},[36,65257,4203],{"class":46},[36,65259,5029],{"class":42},[36,65261,65262,65265,65267,65270],{"class":38,"line":754},[36,65263,65264],{"class":112},"      overflow",[36,65266,54994],{"class":42},[36,65268,65269],{"class":112},"hidden",[36,65271,5029],{"class":42},[36,65273,65274,65277,65279,65282,65284,65287,65289,65292,65294,65296,65299],{"class":38,"line":760},[36,65275,65276],{"class":112},"      background",[36,65278,54994],{"class":42},[36,65280,65281],{"class":112},"url",[36,65283,495],{"class":42},[36,65285,65286],{"class":468},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[36,65288,17373],{"class":42},[36,65290,65291],{"class":112},"no-repeat",[36,65293,20767],{"class":112},[36,65295,28594],{"class":42},[36,65297,65298],{"class":112},"cover",[36,65300,5029],{"class":42},[36,65302,65303,65306,65308,65310,65312],{"class":38,"line":766},[36,65304,65305],{"class":112},"      margin-right",[36,65307,54994],{"class":42},[36,65309,1921],{"class":112},[36,65311,55049],{"class":46},[36,65313,5029],{"class":42},[36,65315,65316],{"class":38,"line":772},[36,65317,5899],{"class":42},[36,65319,65320],{"class":38,"line":778},[36,65321,659],{"emptyLinePlaceholder":658},[36,65323,65324,65326,65329],{"class":38,"line":783},[36,65325,65159],{"class":101},[36,65327,65328],{"class":54857}," textarea",[36,65330,19228],{"class":42},[36,65332,65333,65336,65338,65340],{"class":38,"line":789},[36,65334,65335],{"class":112},"      outline",[36,65337,54994],{"class":42},[36,65339,58293],{"class":112},[36,65341,5029],{"class":42},[36,65343,65344,65347,65349,65352],{"class":38,"line":795},[36,65345,65346],{"class":112},"      border-color",[36,65348,54994],{"class":42},[36,65350,65351],{"class":112},"transparent",[36,65353,5029],{"class":42},[36,65355,65356,65359,65361,65363],{"class":38,"line":801},[36,65357,65358],{"class":112},"      resize",[36,65360,54994],{"class":42},[36,65362,58293],{"class":112},[36,65364,5029],{"class":42},[36,65366,65367,65369,65371,65374],{"class":38,"line":807},[36,65368,65276],{"class":112},[36,65370,54994],{"class":42},[36,65372,65373],{"class":112},"#f5f5f5",[36,65375,5029],{"class":42},[36,65377,65378,65380,65382,65384,65386],{"class":38,"line":813},[36,65379,58690],{"class":112},[36,65381,54994],{"class":42},[36,65383,4168],{"class":112},[36,65385,55049],{"class":46},[36,65387,5029],{"class":42},[36,65389,65390,65393,65395,65397],{"class":38,"line":819},[36,65391,65392],{"class":112},"      flex",[36,65394,54994],{"class":42},[36,65396,4092],{"class":112},[36,65398,5029],{"class":42},[36,65400,65401,65403,65405,65407,65409],{"class":38,"line":824},[36,65402,58251],{"class":112},[36,65404,54994],{"class":42},[36,65406,554],{"class":112},[36,65408,55049],{"class":46},[36,65410,5029],{"class":42},[36,65412,65413,65416,65418,65420,65423,65425],{"class":38,"line":829},[36,65414,65415],{"class":112},"      transition",[36,65417,54994],{"class":42},[36,65419,31732],{"class":112},[36,65421,65422],{"class":112}," 0.5",[36,65424,4566],{"class":46},[36,65426,5029],{"class":42},[36,65428,65429,65431,65433,65435,65437],{"class":38,"line":851},[36,65430,58341],{"class":112},[36,65432,54994],{"class":42},[36,65434,4820],{"class":112},[36,65436,55049],{"class":46},[36,65438,5029],{"class":42},[36,65440,65441],{"class":38,"line":868},[36,65442,5899],{"class":42},[36,65444,65445],{"class":38,"line":873},[36,65446,659],{"emptyLinePlaceholder":658},[36,65448,65449,65451,65453,65456],{"class":38,"line":891},[36,65450,65159],{"class":101},[36,65452,65328],{"class":54857},[36,65454,65455],{"class":101},":focus",[36,65457,19228],{"class":42},[36,65459,65460,65462,65464,65467],{"class":38,"line":906},[36,65461,65346],{"class":112},[36,65463,54994],{"class":42},[36,65465,65466],{"class":112},"#e4e4e4",[36,65468,5029],{"class":42},[36,65470,65471,65473,65475,65477],{"class":38,"line":925},[36,65472,65276],{"class":112},[36,65474,54994],{"class":42},[36,65476,64397],{"class":112},[36,65478,5029],{"class":42},[36,65480,65481,65483,65485,65487,65489],{"class":38,"line":943},[36,65482,58341],{"class":112},[36,65484,54994],{"class":42},[36,65486,4527],{"class":112},[36,65488,55049],{"class":46},[36,65490,5029],{"class":42},[36,65492,65493],{"class":38,"line":948},[36,65494,5899],{"class":42},[36,65496,65497],{"class":38,"line":971},[36,65498,659],{"emptyLinePlaceholder":658},[36,65500,65501,65503,65505],{"class":38,"line":992},[36,65502,65159],{"class":101},[36,65504,61022],{"class":54857},[36,65506,19228],{"class":42},[36,65508,65509,65511,65513,65516],{"class":38,"line":1020},[36,65510,65276],{"class":112},[36,65512,54994],{"class":42},[36,65514,65515],{"class":112},"#00aeec",[36,65517,5029],{"class":42},[36,65519,65520,65522,65524,65526],{"class":38,"line":1036},[36,65521,60971],{"class":112},[36,65523,54994],{"class":42},[36,65525,64397],{"class":112},[36,65527,5029],{"class":42},[36,65529,65530,65533,65535,65537],{"class":38,"line":1041},[36,65531,65532],{"class":112},"      border",[36,65534,54994],{"class":42},[36,65536,58293],{"class":112},[36,65538,5029],{"class":42},[36,65540,65541,65543,65545,65547,65549],{"class":38,"line":1052},[36,65542,58690],{"class":112},[36,65544,54994],{"class":42},[36,65546,4168],{"class":112},[36,65548,55049],{"class":46},[36,65550,5029],{"class":42},[36,65552,65553,65556,65558,65560,65562],{"class":38,"line":1065},[36,65554,65555],{"class":112},"      margin-left",[36,65557,54994],{"class":42},[36,65559,554],{"class":112},[36,65561,55049],{"class":46},[36,65563,5029],{"class":42},[36,65565,65566,65568,65570,65572,65574],{"class":38,"line":1077},[36,65567,58327],{"class":112},[36,65569,54994],{"class":42},[36,65571,4231],{"class":112},[36,65573,55049],{"class":46},[36,65575,5029],{"class":42},[36,65577,65578,65581,65583,65586],{"class":38,"line":1082},[36,65579,65580],{"class":112},"      cursor",[36,65582,54994],{"class":42},[36,65584,65585],{"class":112},"pointer",[36,65587,5029],{"class":42},[36,65589,65590],{"class":38,"line":1125},[36,65591,5899],{"class":42},[36,65593,65594],{"class":38,"line":1164},[36,65595,659],{"emptyLinePlaceholder":658},[36,65597,65598,65600,65603],{"class":38,"line":1169},[36,65599,65159],{"class":101},[36,65601,65602],{"class":101}," .total",[36,65604,19228],{"class":42},[36,65606,65607,65609,65611,65613,65615],{"class":38,"line":1180},[36,65608,65305],{"class":112},[36,65610,54994],{"class":42},[36,65612,4483],{"class":112},[36,65614,55049],{"class":46},[36,65616,5029],{"class":42},[36,65618,65619,65621,65623,65626],{"class":38,"line":1198},[36,65620,60971],{"class":112},[36,65622,54994],{"class":42},[36,65624,65625],{"class":112},"#999",[36,65627,5029],{"class":42},[36,65629,65630,65633,65635,65637,65639],{"class":38,"line":1215},[36,65631,65632],{"class":112},"      margin-top",[36,65634,54994],{"class":42},[36,65636,4194],{"class":112},[36,65638,55049],{"class":46},[36,65640,5029],{"class":42},[36,65642,65643,65646,65648,65650],{"class":38,"line":1236},[36,65644,65645],{"class":112},"      opacity",[36,65647,54994],{"class":42},[36,65649,1859],{"class":112},[36,65651,5029],{"class":42},[36,65653,65654,65656,65658,65660,65662,65664],{"class":38,"line":1245},[36,65655,65415],{"class":112},[36,65657,54994],{"class":42},[36,65659,31732],{"class":112},[36,65661,65422],{"class":112},[36,65663,4566],{"class":46},[36,65665,5029],{"class":42},[36,65667,65668],{"class":38,"line":1250},[36,65669,5899],{"class":42},[36,65671,65672],{"class":38,"line":1265},[36,65673,659],{"emptyLinePlaceholder":658},[36,65675,65676,65679],{"class":38,"line":1281},[36,65677,65678],{"class":101},"    .list",[36,65680,19228],{"class":42},[36,65682,65683,65685,65687,65689,65691],{"class":38,"line":1297},[36,65684,65166],{"class":112},[36,65686,54994],{"class":42},[36,65688,7685],{"class":112},[36,65690,55049],{"class":46},[36,65692,5029],{"class":42},[36,65694,65695,65697,65699,65701,65703],{"class":38,"line":1314},[36,65696,65179],{"class":112},[36,65698,54994],{"class":42},[36,65700,65184],{"class":112},[36,65702,55049],{"class":46},[36,65704,5029],{"class":42},[36,65706,65707,65709,65711,65713],{"class":38,"line":1336},[36,65708,58565],{"class":112},[36,65710,54994],{"class":42},[36,65712,55034],{"class":112},[36,65714,5029],{"class":42},[36,65716,65717],{"class":38,"line":1356},[36,65718,5899],{"class":42},[36,65720,65721],{"class":38,"line":1361},[36,65722,659],{"emptyLinePlaceholder":658},[36,65724,65725,65727,65730],{"class":38,"line":1407},[36,65726,65678],{"class":101},[36,65728,65729],{"class":101}," .item",[36,65731,19228],{"class":42},[36,65733,65734,65736,65738,65740,65742],{"class":38,"line":1423},[36,65735,58327],{"class":112},[36,65737,54994],{"class":42},[36,65739,4186],{"class":112},[36,65741,4203],{"class":46},[36,65743,5029],{"class":42},[36,65745,65746,65748,65750,65752],{"class":38,"line":1439},[36,65747,58565],{"class":112},[36,65749,54994],{"class":42},[36,65751,55034],{"class":112},[36,65753,5029],{"class":42},[36,65755,65756],{"class":38,"line":1444},[36,65757,5899],{"class":42},[36,65759,65760],{"class":38,"line":1486},[36,65761,659],{"emptyLinePlaceholder":658},[36,65763,65764,65766,65768,65771],{"class":38,"line":1499},[36,65765,65678],{"class":101},[36,65767,65729],{"class":101},[36,65769,65770],{"class":101}," .info",[36,65772,19228],{"class":42},[36,65774,65775,65777,65779,65781],{"class":38,"line":1513},[36,65776,65392],{"class":112},[36,65778,54994],{"class":42},[36,65780,4092],{"class":112},[36,65782,5029],{"class":42},[36,65784,65785,65788,65790,65792,65794,65797,65800],{"class":38,"line":1518},[36,65786,65787],{"class":112},"      border-bottom",[36,65789,54994],{"class":42},[36,65791,4092],{"class":112},[36,65793,55049],{"class":46},[36,65795,65796],{"class":112}," dashed",[36,65798,65799],{"class":112}," #e4e4e4",[36,65801,5029],{"class":42},[36,65803,65804,65807,65809,65811,65813],{"class":38,"line":1529},[36,65805,65806],{"class":112},"      padding-bottom",[36,65808,54994],{"class":42},[36,65810,554],{"class":112},[36,65812,55049],{"class":46},[36,65814,5029],{"class":42},[36,65816,65817],{"class":38,"line":1539},[36,65818,5899],{"class":42},[36,65820,65821],{"class":38,"line":1544},[36,65822,659],{"emptyLinePlaceholder":658},[36,65824,65825,65827,65829,65831],{"class":38,"line":1555},[36,65826,65678],{"class":101},[36,65828,65729],{"class":101},[36,65830,10516],{"class":54857},[36,65832,19228],{"class":42},[36,65834,65835,65837,65839,65841],{"class":38,"line":1572},[36,65836,58262],{"class":112},[36,65838,54994],{"class":42},[36,65840,1859],{"class":112},[36,65842,5029],{"class":42},[36,65844,65845],{"class":38,"line":1592},[36,65846,5899],{"class":42},[36,65848,65849],{"class":38,"line":1597},[36,65850,659],{"emptyLinePlaceholder":658},[36,65852,65853,65855,65857,65860],{"class":38,"line":1610},[36,65854,65678],{"class":101},[36,65856,65729],{"class":101},[36,65858,65859],{"class":101}," .name",[36,65861,19228],{"class":42},[36,65863,65864,65866,65868,65871],{"class":38,"line":1632},[36,65865,60971],{"class":112},[36,65867,54994],{"class":42},[36,65869,65870],{"class":112},"#FB7299",[36,65872,5029],{"class":42},[36,65874,65875,65877,65879,65881,65883],{"class":38,"line":1646},[36,65876,58478],{"class":112},[36,65878,54994],{"class":42},[36,65880,4421],{"class":112},[36,65882,55049],{"class":46},[36,65884,5029],{"class":42},[36,65886,65887,65890,65892,65895],{"class":38,"line":1651},[36,65888,65889],{"class":112},"      font-weight",[36,65891,54994],{"class":42},[36,65893,65894],{"class":112},"bold",[36,65896,5029],{"class":42},[36,65898,65899],{"class":38,"line":1664},[36,65900,5899],{"class":42},[36,65902,65903],{"class":38,"line":1669},[36,65904,659],{"emptyLinePlaceholder":658},[36,65906,65907,65909,65911,65914],{"class":38,"line":1681},[36,65908,65678],{"class":101},[36,65910,65729],{"class":101},[36,65912,65913],{"class":101}," .text",[36,65915,19228],{"class":42},[36,65917,65918,65920,65922,65925],{"class":38,"line":1694},[36,65919,60971],{"class":112},[36,65921,54994],{"class":42},[36,65923,65924],{"class":112},"#333",[36,65926,5029],{"class":42},[36,65928,65929,65931,65933,65935,65937,65939],{"class":38,"line":1699},[36,65930,58251],{"class":112},[36,65932,54994],{"class":42},[36,65934,554],{"class":112},[36,65936,55049],{"class":46},[36,65938,1004],{"class":112},[36,65940,5029],{"class":42},[36,65942,65943],{"class":38,"line":1714},[36,65944,5899],{"class":42},[36,65946,65947],{"class":38,"line":1729},[36,65948,659],{"emptyLinePlaceholder":658},[36,65950,65951,65953,65955,65958],{"class":38,"line":1746},[36,65952,65678],{"class":101},[36,65954,65729],{"class":101},[36,65956,65957],{"class":101}," .time",[36,65959,19228],{"class":42},[36,65961,65962,65964,65966,65968],{"class":38,"line":1751},[36,65963,60971],{"class":112},[36,65965,54994],{"class":42},[36,65967,65625],{"class":112},[36,65969,5029],{"class":42},[36,65971,65972,65974,65976,65978,65980],{"class":38,"line":1765},[36,65973,58478],{"class":112},[36,65975,54994],{"class":42},[36,65977,4371],{"class":112},[36,65979,55049],{"class":46},[36,65981,5029],{"class":42},[36,65983,65984],{"class":38,"line":1783},[36,65985,5899],{"class":42},[36,65987,65988,65990,65992],{"class":38,"line":1799},[36,65989,55974],{"class":42},[36,65991,3785],{"class":54857},[36,65993,54864],{"class":42},[36,65995,65996,65998,66000],{"class":38,"line":1807},[36,65997,55342],{"class":42},[36,65999,54891],{"class":54857},[36,66001,54864],{"class":42},[36,66003,66004],{"class":38,"line":1812},[36,66005,659],{"emptyLinePlaceholder":658},[36,66007,66008,66010,66012],{"class":38,"line":1817},[36,66009,393],{"class":42},[36,66011,55357],{"class":54857},[36,66013,54864],{"class":42},[36,66015,66016,66018,66020,66022,66024,66027],{"class":38,"line":1833},[36,66017,55701],{"class":42},[36,66019,55168],{"class":54857},[36,66021,57043],{"class":101},[36,66023,47],{"class":42},[36,66025,66026],{"class":105},"\"wrapper\"",[36,66028,54864],{"class":42},[36,66030,66031,66033,66035,66037,66039,66042,66044,66046],{"class":38,"line":1844},[36,66032,54898],{"class":42},[36,66034,4316],{"class":54857},[36,66036,57043],{"class":101},[36,66038,47],{"class":42},[36,66040,66041],{"class":105},"\"avatar\"",[36,66043,58870],{"class":42},[36,66045,4316],{"class":54857},[36,66047,54864],{"class":42},[36,66049,66050,66052,66054,66056,66058,66061,66063,66065,66068,66070,66072,66074,66077,66079,66082,66084,66086],{"class":38,"line":1864},[36,66051,54898],{"class":42},[36,66053,57845],{"class":54857},[36,66055,18615],{"class":101},[36,66057,47],{"class":42},[36,66059,66060],{"class":105},"\"tx\"",[36,66062,64575],{"class":101},[36,66064,47],{"class":42},[36,66066,66067],{"class":105},"\"发一条友善的评论\"",[36,66069,57868],{"class":101},[36,66071,47],{"class":42},[36,66073,7400],{"class":105},[36,66075,66076],{"class":101}," maxlength",[36,66078,47],{"class":42},[36,66080,66081],{"class":105},"\"200\"",[36,66083,58870],{"class":42},[36,66085,57845],{"class":54857},[36,66087,54864],{"class":42},[36,66089,66090,66092,66094,66097,66099],{"class":38,"line":1878},[36,66091,54898],{"class":42},[36,66093,57444],{"class":54857},[36,66095,66096],{"class":42},">发布\u003C\u002F",[36,66098,57444],{"class":54857},[36,66100,54864],{"class":42},[36,66102,66103,66105,66107],{"class":38,"line":1891},[36,66104,55974],{"class":42},[36,66106,55168],{"class":54857},[36,66108,54864],{"class":42},[36,66110,66111,66113,66115,66117,66119,66121],{"class":38,"line":1896},[36,66112,55701],{"class":42},[36,66114,55168],{"class":54857},[36,66116,57043],{"class":101},[36,66118,47],{"class":42},[36,66120,66026],{"class":105},[36,66122,54864],{"class":42},[36,66124,66125,66127,66129,66131,66133,66136,66139,66141],{"class":38,"line":1906},[36,66126,54898],{"class":42},[36,66128,36],{"class":54857},[36,66130,57043],{"class":101},[36,66132,47],{"class":42},[36,66134,66135],{"class":105},"\"total\"",[36,66137,66138],{"class":42},">0\u002F200字\u003C\u002F",[36,66140,36],{"class":54857},[36,66142,54864],{"class":42},[36,66144,66145,66147,66149],{"class":38,"line":1926},[36,66146,55974],{"class":42},[36,66148,55168],{"class":54857},[36,66150,54864],{"class":42},[36,66152,66153,66155,66157,66159,66161,66164],{"class":38,"line":1936},[36,66154,55701],{"class":42},[36,66156,55168],{"class":54857},[36,66158,57043],{"class":101},[36,66160,47],{"class":42},[36,66162,66163],{"class":105},"\"list\"",[36,66165,54864],{"class":42},[36,66167,66168,66170,66172,66174,66176,66179,66182,66184,66187],{"class":38,"line":1946},[36,66169,54898],{"class":42},[36,66171,55168],{"class":54857},[36,66173,57043],{"class":101},[36,66175,47],{"class":42},[36,66177,66178],{"class":105},"\"item\"",[36,66180,66181],{"class":101}," style",[36,66183,47],{"class":42},[36,66185,66186],{"class":105},"\"display: none;\"",[36,66188,54864],{"class":42},[36,66190,66191,66193,66195,66197,66199,66201,66203,66205],{"class":38,"line":1957},[36,66192,58790],{"class":42},[36,66194,4316],{"class":54857},[36,66196,57043],{"class":101},[36,66198,47],{"class":42},[36,66200,66041],{"class":105},[36,66202,58870],{"class":42},[36,66204,4316],{"class":54857},[36,66206,54864],{"class":42},[36,66208,66209,66211,66213,66215,66217,66220],{"class":38,"line":2008},[36,66210,58790],{"class":42},[36,66212,55168],{"class":54857},[36,66214,57043],{"class":101},[36,66216,47],{"class":42},[36,66218,66219],{"class":105},"\"info\"",[36,66221,54864],{"class":42},[36,66223,66224,66226,66228,66230,66232,66235,66238,66240],{"class":38,"line":2022},[36,66225,58858],{"class":42},[36,66227,19],{"class":54857},[36,66229,57043],{"class":101},[36,66231,47],{"class":42},[36,66233,66234],{"class":105},"\"name\"",[36,66236,66237],{"class":42},">清风徐来\u003C\u002F",[36,66239,19],{"class":54857},[36,66241,54864],{"class":42},[36,66243,66244,66246,66248,66250,66252,66255,66258,66260],{"class":38,"line":2028},[36,66245,58858],{"class":42},[36,66247,19],{"class":54857},[36,66249,57043],{"class":101},[36,66251,47],{"class":42},[36,66253,66254],{"class":105},"\"text\"",[36,66256,66257],{"class":42},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[36,66259,19],{"class":54857},[36,66261,54864],{"class":42},[36,66263,66264,66266,66268,66270,66272,66275,66278,66280],{"class":38,"line":2033},[36,66265,58858],{"class":42},[36,66267,19],{"class":54857},[36,66269,57043],{"class":101},[36,66271,47],{"class":42},[36,66273,66274],{"class":105},"\"time\"",[36,66276,66277],{"class":42},">2022-10-10 20:29:21\u003C\u002F",[36,66279,19],{"class":54857},[36,66281,54864],{"class":42},[36,66283,66284,66286,66288],{"class":38,"line":2054},[36,66285,58963],{"class":42},[36,66287,55168],{"class":54857},[36,66289,54864],{"class":42},[36,66291,66292,66294,66296],{"class":38,"line":2059},[36,66293,55333],{"class":42},[36,66295,55168],{"class":54857},[36,66297,54864],{"class":42},[36,66299,66300,66302,66304],{"class":38,"line":2064},[36,66301,55974],{"class":42},[36,66303,55168],{"class":54857},[36,66305,54864],{"class":42},[36,66307,66308,66310,66312],{"class":38,"line":2081},[36,66309,55701],{"class":42},[36,66311,55370],{"class":54857},[36,66313,54864],{"class":42},[36,66315,66316,66318,66321,66323,66325,66327,66329,66332],{"class":38,"line":36396},[36,66317,14882],{"class":46},[36,66319,66320],{"class":112}," tx",[36,66322,673],{"class":46},[36,66324,57953],{"class":42},[36,66326,57956],{"class":101},[36,66328,495],{"class":42},[36,66330,66331],{"class":105},"'#tx'",[36,66333,922],{"class":42},[36,66335,66336,66338,66341,66343,66345,66347,66349,66352],{"class":38,"line":36402},[36,66337,14882],{"class":46},[36,66339,66340],{"class":112}," total",[36,66342,673],{"class":46},[36,66344,57953],{"class":42},[36,66346,57956],{"class":101},[36,66348,495],{"class":42},[36,66350,66351],{"class":105},"'.total'",[36,66353,922],{"class":42},[36,66355,66356],{"class":38,"line":36411},[36,66357,66358],{"class":3943},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[36,66360,66361,66364,66366,66368,66370,66372,66374],{"class":38,"line":36417},[36,66362,66363],{"class":42},"    tx.",[36,66365,61368],{"class":101},[36,66367,495],{"class":42},[36,66369,64882],{"class":105},[36,66371,478],{"class":42},[36,66373,58005],{"class":46},[36,66375,58008],{"class":42},[36,66377,66378,66381,66383],{"class":38,"line":36426},[36,66379,66380],{"class":42},"      total.style.opacity ",[36,66382,47],{"class":46},[36,66384,1661],{"class":112},[36,66386,66387],{"class":38,"line":36432},[36,66388,37021],{"class":42},[36,66390,66391],{"class":38,"line":36438},[36,66392,66393],{"class":3943},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[36,66395,66396,66398,66400,66402,66404,66406,66408],{"class":38,"line":36447},[36,66397,66363],{"class":42},[36,66399,61368],{"class":101},[36,66401,495],{"class":42},[36,66403,64943],{"class":105},[36,66405,478],{"class":42},[36,66407,58005],{"class":46},[36,66409,58008],{"class":42},[36,66411,66412,66414,66416],{"class":38,"line":36453},[36,66413,66380],{"class":42},[36,66415,47],{"class":46},[36,66417,1074],{"class":112},[36,66419,66420],{"class":38,"line":36464},[36,66421,37021],{"class":42},[36,66423,66424],{"class":38,"line":36470},[36,66425,66426],{"class":3943},"    \u002F\u002F 3. 检测用户输入\n",[36,66428,66429,66431,66433,66435,66438,66440,66442],{"class":38,"line":36489},[36,66430,66363],{"class":42},[36,66432,61368],{"class":101},[36,66434,495],{"class":42},[36,66436,66437],{"class":105},"'input'",[36,66439,478],{"class":42},[36,66441,58005],{"class":46},[36,66443,58008],{"class":42},[36,66445,66446],{"class":38,"line":36495},[36,66447,66448],{"class":3943},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[36,66450,66451,66454,66456,66459,66462,66464,66467,66469,66471],{"class":38,"line":36506},[36,66452,66453],{"class":42},"      total.innerHTML ",[36,66455,47],{"class":46},[36,66457,66458],{"class":105}," `${",[36,66460,66461],{"class":42},"tx",[36,66463,842],{"class":105},[36,66465,66466],{"class":42},"value",[36,66468,842],{"class":105},[36,66470,55525],{"class":112},[36,66472,66473],{"class":105},"}\u002F200字`\n",[36,66475,66476],{"class":38,"line":36512},[36,66477,37021],{"class":42},[36,66479,66480],{"class":38,"line":36532},[36,66481,659],{"emptyLinePlaceholder":658},[36,66483,66484],{"class":38,"line":36548},[36,66485,66486],{"class":3943},"    \u002F\u002F const str = 'andy'\n",[36,66488,66489],{"class":38,"line":36554},[36,66490,66491],{"class":3943},"    \u002F\u002F console.log(str.length)\n",[36,66493,66494,66496,66498],{"class":38,"line":36568},[36,66495,55974],{"class":42},[36,66497,55370],{"class":54857},[36,66499,54864],{"class":42},[36,66501,66502,66504,66506],{"class":38,"line":36574},[36,66503,55342],{"class":42},[36,66505,55357],{"class":54857},[36,66507,54864],{"class":42},[36,66509,66510],{"class":38,"line":36580},[36,66511,659],{"emptyLinePlaceholder":658},[36,66513,66514,66516,66518],{"class":38,"line":36591},[36,66515,55342],{"class":42},[36,66517,54192],{"class":54857},[36,66519,54864],{"class":42},[25619,66521,66523],{"id":66522},"_3254-change事件","3.2.5.4 change事件",[19,66525,66526],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,66528,66529],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,66531,66532],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[26,66534,66536],{"className":54190,"code":66535,"language":54192,"meta":31,"style":31},"\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",[33,66537,66538,66548,66562,66566,66574,66588,66608,66620,66628,66632,66640,66654,66662,66680,66698,66710,66714,66722,66730,66734],{"__ignoreMap":31},[36,66539,66540,66542,66544,66546],{"class":38,"line":39},[36,66541,54854],{"class":42},[36,66543,54858],{"class":54857},[36,66545,54861],{"class":101},[36,66547,54864],{"class":42},[36,66549,66550,66552,66554,66556,66558,66560],{"class":38,"line":53},[36,66551,393],{"class":42},[36,66553,54192],{"class":54857},[36,66555,54873],{"class":101},[36,66557,47],{"class":42},[36,66559,54878],{"class":105},[36,66561,54864],{"class":42},[36,66563,66564],{"class":38,"line":196},[36,66565,659],{"emptyLinePlaceholder":658},[36,66567,66568,66570,66572],{"class":38,"line":642},[36,66569,393],{"class":42},[36,66571,54891],{"class":54857},[36,66573,54864],{"class":42},[36,66575,66576,66578,66580,66582,66584,66586],{"class":38,"line":655},[36,66577,55701],{"class":42},[36,66579,54901],{"class":54857},[36,66581,54904],{"class":101},[36,66583,47],{"class":42},[36,66585,54909],{"class":105},[36,66587,54864],{"class":42},[36,66589,66590,66592,66594,66596,66598,66600,66602,66604,66606],{"class":38,"line":662},[36,66591,55701],{"class":42},[36,66593,54901],{"class":54857},[36,66595,18576],{"class":101},[36,66597,47],{"class":42},[36,66599,54948],{"class":105},[36,66601,54928],{"class":101},[36,66603,47],{"class":42},[36,66605,54955],{"class":105},[36,66607,54864],{"class":42},[36,66609,66610,66612,66614,66616,66618],{"class":38,"line":667},[36,66611,55701],{"class":42},[36,66613,54964],{"class":54857},[36,66615,54967],{"class":42},[36,66617,54964],{"class":54857},[36,66619,54864],{"class":42},[36,66621,66622,66624,66626],{"class":38,"line":679},[36,66623,55342],{"class":42},[36,66625,54891],{"class":54857},[36,66627,54864],{"class":42},[36,66629,66630],{"class":38,"line":685},[36,66631,659],{"emptyLinePlaceholder":658},[36,66633,66634,66636,66638],{"class":38,"line":691},[36,66635,393],{"class":42},[36,66637,55357],{"class":54857},[36,66639,54864],{"class":42},[36,66641,66642,66644,66646,66648,66650,66652],{"class":38,"line":696},[36,66643,55701],{"class":42},[36,66645,57378],{"class":54857},[36,66647,57381],{"class":101},[36,66649,47],{"class":42},[36,66651,66254],{"class":105},[36,66653,54864],{"class":42},[36,66655,66656,66658,66660],{"class":38,"line":702},[36,66657,55701],{"class":42},[36,66659,55370],{"class":54857},[36,66661,54864],{"class":42},[36,66663,66664,66666,66668,66670,66672,66674,66676,66678],{"class":38,"line":708},[36,66665,14882],{"class":46},[36,66667,64160],{"class":112},[36,66669,673],{"class":46},[36,66671,57953],{"class":42},[36,66673,57956],{"class":101},[36,66675,495],{"class":42},[36,66677,66437],{"class":105},[36,66679,922],{"class":42},[36,66681,66682,66685,66687,66689,66692,66694,66696],{"class":38,"line":713},[36,66683,66684],{"class":42},"    input.",[36,66686,61368],{"class":101},[36,66688,495],{"class":42},[36,66690,66691],{"class":105},"'change'",[36,66693,478],{"class":42},[36,66695,58005],{"class":46},[36,66697,58008],{"class":42},[36,66699,66700,66702,66704,66706,66708],{"class":38,"line":719},[36,66701,61799],{"class":42},[36,66703,61802],{"class":101},[36,66705,495],{"class":42},[36,66707,4464],{"class":112},[36,66709,922],{"class":42},[36,66711,66712],{"class":38,"line":725},[36,66713,37021],{"class":42},[36,66715,66716,66718,66720],{"class":38,"line":731},[36,66717,55974],{"class":42},[36,66719,55370],{"class":54857},[36,66721,54864],{"class":42},[36,66723,66724,66726,66728],{"class":38,"line":736},[36,66725,55342],{"class":42},[36,66727,55357],{"class":54857},[36,66729,54864],{"class":42},[36,66731,66732],{"class":38,"line":742},[36,66733,659],{"emptyLinePlaceholder":658},[36,66735,66736,66738,66740],{"class":38,"line":748},[36,66737,55342],{"class":42},[36,66739,54192],{"class":54857},[36,66741,54864],{"class":42},[19,66743,66744],{},"总结：内容发生改变才回去触发",[318,66746,66748],{"id":66747},"_326-事件对象","3.2.6 事件对象",[25619,66750,66752],{"id":66751},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,66754,66755],{},[5198,66756],{"alt":31,"src":66757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,66759,66760],{},[5198,66761],{"alt":31,"src":66762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,66764,66765],{},"点击一次，就输出了事件对象，它是个对象",[19,66767,66768],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,66770,66771],{},[5198,66772],{"alt":31,"src":66773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[25619,66775,66777],{"id":66776},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,66779,66780],{},[5198,66781],{"alt":31,"src":66782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,66784,66785],{},"实现按特殊字符才是实现打印输出效果：",[26,66787,66789],{"className":56624,"code":66788,"language":56626,"meta":31,"style":31},"\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",[33,66790,66791,66799,66804,66818,66826,66831,66836,66841,66846,66851,66856,66861,66866,66871,66875,66879,66887],{"__ignoreMap":31},[36,66792,66793,66795,66797],{"class":38,"line":39},[36,66794,393],{"class":42},[36,66796,55357],{"class":54857},[36,66798,54864],{"class":42},[36,66800,66801],{"class":38,"line":53},[36,66802,66803],{"class":3943},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[36,66805,66806,66808,66810,66812,66814,66816],{"class":38,"line":196},[36,66807,55701],{"class":42},[36,66809,57378],{"class":54857},[36,66811,57381],{"class":101},[36,66813,47],{"class":42},[36,66815,66254],{"class":105},[36,66817,54864],{"class":42},[36,66819,66820,66822,66824],{"class":38,"line":642},[36,66821,55701],{"class":42},[36,66823,55370],{"class":54857},[36,66825,54864],{"class":42},[36,66827,66828],{"class":38,"line":655},[36,66829,66830],{"class":42},"    \u002F\u002F const btn = document.querySelector('button')\n",[36,66832,66833],{"class":38,"line":662},[36,66834,66835],{"class":42},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[36,66837,66838],{"class":38,"line":667},[36,66839,66840],{"class":42},"    \u002F\u002F   console.log(e);\n",[36,66842,66843],{"class":38,"line":679},[36,66844,66845],{"class":42},"    \u002F\u002F })\n",[36,66847,66848],{"class":38,"line":685},[36,66849,66850],{"class":42},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[36,66852,66853],{"class":38,"line":691},[36,66854,66855],{"class":42},"    const input = document.querySelector('input')\n",[36,66857,66858],{"class":38,"line":696},[36,66859,66860],{"class":42},"    input.addEventListener('keyup', function (e) {\n",[36,66862,66863],{"class":38,"line":702},[36,66864,66865],{"class":42},"      if (e.key === 'Enter') {\n",[36,66867,66868],{"class":38,"line":708},[36,66869,66870],{"class":42},"        console.log('我按下了回车键')\n",[36,66872,66873],{"class":38,"line":713},[36,66874,55955],{"class":42},[36,66876,66877],{"class":38,"line":719},[36,66878,37021],{"class":42},[36,66880,66881,66883,66885],{"class":38,"line":725},[36,66882,55974],{"class":42},[36,66884,55370],{"class":54857},[36,66886,54864],{"class":42},[36,66888,66889,66891,66893],{"class":38,"line":731},[36,66890,55342],{"class":42},[36,66892,55357],{"class":54857},[36,66894,54864],{"class":42},[25619,66896,66898],{"id":66897},"_3263-trim方法","3.2.6.3 trim方法",[19,66900,66901],{},[5198,66902],{"alt":31,"src":66903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,66905,66906],{},[5198,66907],{"alt":31,"src":66908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,66910,66911],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,66913,66914],{},"str.trim()",[318,66916,66918],{"id":66917},"_327-环境对象","3.2.7 环境对象",[19,66920,66921],{},[5198,66922],{"alt":31,"src":66923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,66925,66926],{},[5198,66927],{"alt":31,"src":66928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,66930,66931],{},[5198,66932],{"alt":31,"src":66933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,66935,66936],{},"实际函数调用是window.fn()",[19,66938,66939],{},"普通函数里面this指向的是window",[4875,66941,66942,66945,66948],{},[214,66943,66944],{},"在普通函数下，this指向的是window",[214,66946,66947],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[214,66949,66950],{},"箭头函数没有this",[19,66952,66953],{},"粗略记法就是：谁调用，this就指向谁",[19,66955,66956],{},[5198,66957],{"alt":31,"src":66958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,66960,66961],{},[5198,66962],{"alt":31,"src":66963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,66965,66966],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,66968,66969],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[26,66971,66973],{"className":56624,"code":66972,"language":56626,"meta":31,"style":31},"\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",[33,66974,66975,66983,66995,67003,67008,67013,67018,67023,67027,67035],{"__ignoreMap":31},[36,66976,66977,66979,66981],{"class":38,"line":39},[36,66978,393],{"class":42},[36,66980,55357],{"class":54857},[36,66982,54864],{"class":42},[36,66984,66985,66987,66989,66991,66993],{"class":38,"line":53},[36,66986,55701],{"class":42},[36,66988,57444],{"class":54857},[36,66990,57450],{"class":42},[36,66992,57444],{"class":54857},[36,66994,54864],{"class":42},[36,66996,66997,66999,67001],{"class":38,"line":196},[36,66998,55701],{"class":42},[36,67000,55370],{"class":54857},[36,67002,54864],{"class":42},[36,67004,67005],{"class":38,"line":642},[36,67006,67007],{"class":42},"    const button = document.querySelector('button')\n",[36,67009,67010],{"class":38,"line":655},[36,67011,67012],{"class":42},"    button.addEventListener('click', function () {\n",[36,67014,67015],{"class":38,"line":662},[36,67016,67017],{"class":42},"      \u002F\u002F console.log(this);\n",[36,67019,67020],{"class":38,"line":667},[36,67021,67022],{"class":42},"      this.style.color = 'pink'\n",[36,67024,67025],{"class":38,"line":679},[36,67026,37021],{"class":42},[36,67028,67029,67031,67033],{"class":38,"line":685},[36,67030,55974],{"class":42},[36,67032,55370],{"class":54857},[36,67034,54864],{"class":42},[36,67036,67037,67039,67041],{"class":38,"line":691},[36,67038,55342],{"class":42},[36,67040,55357],{"class":54857},[36,67042,54864],{"class":42},[318,67044,67046],{"id":67045},"_328-回调函数","3.2.8 回调函数",[19,67048,67049],{},[5198,67050],{"alt":31,"src":67051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,67053,67054],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,67056,14993],{},[4875,67058,67059,67062,67065],{},[214,67060,67061],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[214,67063,67064],{},"回调函数本质还是函数，只不过把它当成参数使用",[214,67066,67067],{},"使用匿名函数做为回调函数比较常见",[318,67069,67071],{"id":67070},"_329-tab栏切换","3.2.9 tab栏切换",[19,67073,67074],{},[5198,67075],{"alt":31,"src":67076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[26,67078,67080],{"className":54190,"code":67079,"language":54192,"meta":31,"style":31},"\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",[33,67081,67082,67092,67106,67110,67118,67132,67152,67172,67185,67193,67199,67209,67219,67223,67227,67234,67247,67260,67272,67288,67292,67296,67303,67315,67327,67339,67349,67359,67363,67367,67376,67388,67399,67411,67415,67419,67427,67437,67447,67457,67461,67465,67475,67489,67501,67505,67509,67521,67532,67549,67559,67563,67567,67582,67593,67603,67607,67611,67618,67633,67637,67641,67649,67659,67663,67667,67676,67686,67690,67698,67706,67710,67718,67733,67748,67761,67769,67803,67830,67857,67884,67911,67919,67927,67942,67979,68014,68049,68084,68119,68127,68135,68143,68148,68153,68173,68178,68207,68212,68217,68235,68240,68245,68250,68272,68277,68293,68297,68302,68307,68328,68333,68362,68366,68371,68375,68383,68391,68395],{"__ignoreMap":31},[36,67083,67084,67086,67088,67090],{"class":38,"line":39},[36,67085,54854],{"class":42},[36,67087,54858],{"class":54857},[36,67089,54861],{"class":101},[36,67091,54864],{"class":42},[36,67093,67094,67096,67098,67100,67102,67104],{"class":38,"line":53},[36,67095,393],{"class":42},[36,67097,54192],{"class":54857},[36,67099,54873],{"class":101},[36,67101,47],{"class":42},[36,67103,54878],{"class":105},[36,67105,54864],{"class":42},[36,67107,67108],{"class":38,"line":196},[36,67109,659],{"emptyLinePlaceholder":658},[36,67111,67112,67114,67116],{"class":38,"line":642},[36,67113,393],{"class":42},[36,67115,54891],{"class":54857},[36,67117,54864],{"class":42},[36,67119,67120,67122,67124,67126,67128,67130],{"class":38,"line":655},[36,67121,55701],{"class":42},[36,67123,54901],{"class":54857},[36,67125,54904],{"class":101},[36,67127,47],{"class":42},[36,67129,54909],{"class":105},[36,67131,62682],{"class":42},[36,67133,67134,67136,67138,67140,67142,67144,67146,67148,67150],{"class":38,"line":662},[36,67135,55701],{"class":42},[36,67137,54901],{"class":54857},[36,67139,54920],{"class":101},[36,67141,47],{"class":42},[36,67143,54925],{"class":105},[36,67145,54928],{"class":101},[36,67147,47],{"class":42},[36,67149,54933],{"class":105},[36,67151,62682],{"class":42},[36,67153,67154,67156,67158,67160,67162,67164,67166,67168,67170],{"class":38,"line":667},[36,67155,55701],{"class":42},[36,67157,54901],{"class":54857},[36,67159,18576],{"class":101},[36,67161,47],{"class":42},[36,67163,54948],{"class":105},[36,67165,54928],{"class":101},[36,67167,47],{"class":42},[36,67169,54955],{"class":105},[36,67171,62682],{"class":42},[36,67173,67174,67176,67178,67181,67183],{"class":38,"line":679},[36,67175,55701],{"class":42},[36,67177,54964],{"class":54857},[36,67179,67180],{"class":42},">tab栏切换\u003C\u002F",[36,67182,54964],{"class":54857},[36,67184,54864],{"class":42},[36,67186,67187,67189,67191],{"class":38,"line":685},[36,67188,55701],{"class":42},[36,67190,3785],{"class":54857},[36,67192,54864],{"class":42},[36,67194,67195,67197],{"class":38,"line":691},[36,67196,10096],{"class":54857},[36,67198,19228],{"class":42},[36,67200,67201,67203,67205,67207],{"class":38,"line":696},[36,67202,58262],{"class":112},[36,67204,54994],{"class":42},[36,67206,1859],{"class":112},[36,67208,5029],{"class":42},[36,67210,67211,67213,67215,67217],{"class":38,"line":702},[36,67212,58251],{"class":112},[36,67214,54994],{"class":42},[36,67216,1859],{"class":112},[36,67218,5029],{"class":42},[36,67220,67221],{"class":38,"line":708},[36,67222,5899],{"class":42},[36,67224,67225],{"class":38,"line":713},[36,67226,659],{"emptyLinePlaceholder":658},[36,67228,67229,67232],{"class":38,"line":719},[36,67230,67231],{"class":101},"    .tab",[36,67233,19228],{"class":42},[36,67235,67236,67238,67240,67243,67245],{"class":38,"line":725},[36,67237,58327],{"class":112},[36,67239,54994],{"class":42},[36,67241,67242],{"class":112},"590",[36,67244,55049],{"class":46},[36,67246,5029],{"class":42},[36,67248,67249,67251,67253,67256,67258],{"class":38,"line":731},[36,67250,58341],{"class":112},[36,67252,54994],{"class":42},[36,67254,67255],{"class":112},"340",[36,67257,55049],{"class":46},[36,67259,5029],{"class":42},[36,67261,67262,67264,67266,67268,67270],{"class":38,"line":736},[36,67263,58262],{"class":112},[36,67265,54994],{"class":42},[36,67267,1921],{"class":112},[36,67269,55049],{"class":46},[36,67271,5029],{"class":42},[36,67273,67274,67276,67278,67280,67282,67284,67286],{"class":38,"line":742},[36,67275,65532],{"class":112},[36,67277,54994],{"class":42},[36,67279,4092],{"class":112},[36,67281,55049],{"class":46},[36,67283,55078],{"class":112},[36,67285,65799],{"class":112},[36,67287,5029],{"class":42},[36,67289,67290],{"class":38,"line":748},[36,67291,5899],{"class":42},[36,67293,67294],{"class":38,"line":754},[36,67295,659],{"emptyLinePlaceholder":658},[36,67297,67298,67301],{"class":38,"line":760},[36,67299,67300],{"class":101},"    .tab-nav",[36,67302,19228],{"class":42},[36,67304,67305,67307,67309,67311,67313],{"class":38,"line":766},[36,67306,58327],{"class":112},[36,67308,54994],{"class":42},[36,67310,4186],{"class":112},[36,67312,4203],{"class":46},[36,67314,5029],{"class":42},[36,67316,67317,67319,67321,67323,67325],{"class":38,"line":772},[36,67318,58341],{"class":112},[36,67320,54994],{"class":42},[36,67322,4777],{"class":112},[36,67324,55049],{"class":46},[36,67326,5029],{"class":42},[36,67328,67329,67331,67333,67335,67337],{"class":38,"line":778},[36,67330,60914],{"class":112},[36,67332,54994],{"class":42},[36,67334,4777],{"class":112},[36,67336,55049],{"class":46},[36,67338,5029],{"class":42},[36,67340,67341,67343,67345,67347],{"class":38,"line":783},[36,67342,58565],{"class":112},[36,67344,54994],{"class":42},[36,67346,55034],{"class":112},[36,67348,5029],{"class":42},[36,67350,67351,67353,67355,67357],{"class":38,"line":789},[36,67352,58576],{"class":112},[36,67354,54994],{"class":42},[36,67356,55225],{"class":112},[36,67358,5029],{"class":42},[36,67360,67361],{"class":38,"line":795},[36,67362,5899],{"class":42},[36,67364,67365],{"class":38,"line":801},[36,67366,659],{"emptyLinePlaceholder":658},[36,67368,67369,67371,67374],{"class":38,"line":807},[36,67370,67300],{"class":101},[36,67372,67373],{"class":54857}," h3",[36,67375,19228],{"class":42},[36,67377,67378,67380,67382,67384,67386],{"class":38,"line":813},[36,67379,58478],{"class":112},[36,67381,54994],{"class":42},[36,67383,4670],{"class":112},[36,67385,55049],{"class":46},[36,67387,5029],{"class":42},[36,67389,67390,67392,67394,67397],{"class":38,"line":819},[36,67391,65889],{"class":112},[36,67393,54994],{"class":42},[36,67395,67396],{"class":112},"normal",[36,67398,5029],{"class":42},[36,67400,67401,67403,67405,67407,67409],{"class":38,"line":824},[36,67402,65555],{"class":112},[36,67404,54994],{"class":42},[36,67406,1921],{"class":112},[36,67408,55049],{"class":46},[36,67410,5029],{"class":42},[36,67412,67413],{"class":38,"line":829},[36,67414,5899],{"class":42},[36,67416,67417],{"class":38,"line":851},[36,67418,659],{"emptyLinePlaceholder":658},[36,67420,67421,67423,67425],{"class":38,"line":868},[36,67422,67300],{"class":101},[36,67424,64847],{"class":54857},[36,67426,19228],{"class":42},[36,67428,67429,67431,67433,67435],{"class":38,"line":873},[36,67430,58288],{"class":112},[36,67432,54994],{"class":42},[36,67434,58293],{"class":112},[36,67436,5029],{"class":42},[36,67438,67439,67441,67443,67445],{"class":38,"line":891},[36,67440,58565],{"class":112},[36,67442,54994],{"class":42},[36,67444,55034],{"class":112},[36,67446,5029],{"class":42},[36,67448,67449,67451,67453,67455],{"class":38,"line":906},[36,67450,58576],{"class":112},[36,67452,54994],{"class":42},[36,67454,55137],{"class":112},[36,67456,5029],{"class":42},[36,67458,67459],{"class":38,"line":925},[36,67460,5899],{"class":42},[36,67462,67463],{"class":38,"line":943},[36,67464,659],{"emptyLinePlaceholder":658},[36,67466,67467,67469,67471,67473],{"class":38,"line":948},[36,67468,67300],{"class":101},[36,67470,64847],{"class":54857},[36,67472,58631],{"class":54857},[36,67474,19228],{"class":42},[36,67476,67477,67479,67481,67483,67485,67487],{"class":38,"line":971},[36,67478,58262],{"class":112},[36,67480,54994],{"class":42},[36,67482,1859],{"class":112},[36,67484,12631],{"class":112},[36,67486,55049],{"class":46},[36,67488,5029],{"class":42},[36,67490,67491,67493,67495,67497,67499],{"class":38,"line":992},[36,67492,58478],{"class":112},[36,67494,54994],{"class":42},[36,67496,4421],{"class":112},[36,67498,55049],{"class":46},[36,67500,5029],{"class":42},[36,67502,67503],{"class":38,"line":1020},[36,67504,5899],{"class":42},[36,67506,67507],{"class":38,"line":1036},[36,67508,659],{"emptyLinePlaceholder":658},[36,67510,67511,67513,67515,67517,67519],{"class":38,"line":1041},[36,67512,67300],{"class":101},[36,67514,64847],{"class":54857},[36,67516,58631],{"class":54857},[36,67518,5134],{"class":54857},[36,67520,19228],{"class":42},[36,67522,67523,67526,67528,67530],{"class":38,"line":1052},[36,67524,67525],{"class":112},"      text-decoration",[36,67527,54994],{"class":42},[36,67529,58293],{"class":112},[36,67531,5029],{"class":42},[36,67533,67534,67536,67538,67540,67542,67544,67547],{"class":38,"line":1065},[36,67535,65787],{"class":112},[36,67537,54994],{"class":42},[36,67539,498],{"class":112},[36,67541,55049],{"class":46},[36,67543,55078],{"class":112},[36,67545,67546],{"class":112}," transparent",[36,67548,5029],{"class":42},[36,67550,67551,67553,67555,67557],{"class":38,"line":1077},[36,67552,60971],{"class":112},[36,67554,54994],{"class":42},[36,67556,65924],{"class":112},[36,67558,5029],{"class":42},[36,67560,67561],{"class":38,"line":1082},[36,67562,5899],{"class":42},[36,67564,67565],{"class":38,"line":1125},[36,67566,659],{"emptyLinePlaceholder":658},[36,67568,67569,67571,67573,67575,67577,67580],{"class":38,"line":1164},[36,67570,67300],{"class":101},[36,67572,64847],{"class":54857},[36,67574,58631],{"class":54857},[36,67576,5134],{"class":54857},[36,67578,67579],{"class":101},".active",[36,67581,19228],{"class":42},[36,67583,67584,67586,67588,67591],{"class":38,"line":1169},[36,67585,65346],{"class":112},[36,67587,54994],{"class":42},[36,67589,67590],{"class":112},"#e1251b",[36,67592,5029],{"class":42},[36,67594,67595,67597,67599,67601],{"class":38,"line":1180},[36,67596,60971],{"class":112},[36,67598,54994],{"class":42},[36,67600,67590],{"class":112},[36,67602,5029],{"class":42},[36,67604,67605],{"class":38,"line":1198},[36,67606,5899],{"class":42},[36,67608,67609],{"class":38,"line":1215},[36,67610,659],{"emptyLinePlaceholder":658},[36,67612,67613,67616],{"class":38,"line":1236},[36,67614,67615],{"class":101},"    .tab-content",[36,67617,19228],{"class":42},[36,67619,67620,67622,67624,67626,67629,67631],{"class":38,"line":1245},[36,67621,58251],{"class":112},[36,67623,54994],{"class":42},[36,67625,1859],{"class":112},[36,67627,67628],{"class":112}," 16",[36,67630,55049],{"class":46},[36,67632,5029],{"class":42},[36,67634,67635],{"class":38,"line":1250},[36,67636,5899],{"class":42},[36,67638,67639],{"class":38,"line":1265},[36,67640,659],{"emptyLinePlaceholder":658},[36,67642,67643,67645,67647],{"class":38,"line":1281},[36,67644,67615],{"class":101},[36,67646,65729],{"class":101},[36,67648,19228],{"class":42},[36,67650,67651,67653,67655,67657],{"class":38,"line":1297},[36,67652,58565],{"class":112},[36,67654,54994],{"class":42},[36,67656,58293],{"class":112},[36,67658,5029],{"class":42},[36,67660,67661],{"class":38,"line":1314},[36,67662,5899],{"class":42},[36,67664,67665],{"class":38,"line":1336},[36,67666,659],{"emptyLinePlaceholder":658},[36,67668,67669,67671,67674],{"class":38,"line":1356},[36,67670,67615],{"class":101},[36,67672,67673],{"class":101}," .item.active",[36,67675,19228],{"class":42},[36,67677,67678,67680,67682,67684],{"class":38,"line":1361},[36,67679,58565],{"class":112},[36,67681,54994],{"class":42},[36,67683,64424],{"class":112},[36,67685,5029],{"class":42},[36,67687,67688],{"class":38,"line":1407},[36,67689,5899],{"class":42},[36,67691,67692,67694,67696],{"class":38,"line":1423},[36,67693,55974],{"class":42},[36,67695,3785],{"class":54857},[36,67697,54864],{"class":42},[36,67699,67700,67702,67704],{"class":38,"line":1439},[36,67701,55342],{"class":42},[36,67703,54891],{"class":54857},[36,67705,54864],{"class":42},[36,67707,67708],{"class":38,"line":1444},[36,67709,659],{"emptyLinePlaceholder":658},[36,67711,67712,67714,67716],{"class":38,"line":1486},[36,67713,393],{"class":42},[36,67715,55357],{"class":54857},[36,67717,54864],{"class":42},[36,67719,67720,67722,67724,67726,67728,67731],{"class":38,"line":1499},[36,67721,55701],{"class":42},[36,67723,55168],{"class":54857},[36,67725,57043],{"class":101},[36,67727,47],{"class":42},[36,67729,67730],{"class":105},"\"tab\"",[36,67732,54864],{"class":42},[36,67734,67735,67737,67739,67741,67743,67746],{"class":38,"line":1513},[36,67736,54898],{"class":42},[36,67738,55168],{"class":54857},[36,67740,57043],{"class":101},[36,67742,47],{"class":42},[36,67744,67745],{"class":105},"\"tab-nav\"",[36,67747,54864],{"class":42},[36,67749,67750,67752,67754,67757,67759],{"class":38,"line":1518},[36,67751,58790],{"class":42},[36,67753,318],{"class":54857},[36,67755,67756],{"class":42},">每日特价\u003C\u002F",[36,67758,318],{"class":54857},[36,67760,54864],{"class":42},[36,67762,67763,67765,67767],{"class":38,"line":1529},[36,67764,58790],{"class":42},[36,67766,4875],{"class":54857},[36,67768,54864],{"class":42},[36,67770,67771,67773,67775,67777,67779,67781,67783,67785,67787,67789,67792,67795,67797,67799,67801],{"class":38,"line":1539},[36,67772,58858],{"class":42},[36,67774,214],{"class":54857},[36,67776,64607],{"class":42},[36,67778,4113],{"class":54857},[36,67780,57043],{"class":101},[36,67782,47],{"class":42},[36,67784,63261],{"class":105},[36,67786,64612],{"class":101},[36,67788,47],{"class":42},[36,67790,67791],{"class":105},"\"javascript:;\"",[36,67793,67794],{"class":42},">精选\u003C\u002F",[36,67796,4113],{"class":54857},[36,67798,58870],{"class":42},[36,67800,214],{"class":54857},[36,67802,54864],{"class":42},[36,67804,67805,67807,67809,67811,67813,67815,67817,67819,67822,67824,67826,67828],{"class":38,"line":1544},[36,67806,58858],{"class":42},[36,67808,214],{"class":54857},[36,67810,64607],{"class":42},[36,67812,4113],{"class":54857},[36,67814,64612],{"class":101},[36,67816,47],{"class":42},[36,67818,67791],{"class":105},[36,67820,67821],{"class":42},">美食\u003C\u002F",[36,67823,4113],{"class":54857},[36,67825,58870],{"class":42},[36,67827,214],{"class":54857},[36,67829,54864],{"class":42},[36,67831,67832,67834,67836,67838,67840,67842,67844,67846,67849,67851,67853,67855],{"class":38,"line":1555},[36,67833,58858],{"class":42},[36,67835,214],{"class":54857},[36,67837,64607],{"class":42},[36,67839,4113],{"class":54857},[36,67841,64612],{"class":101},[36,67843,47],{"class":42},[36,67845,67791],{"class":105},[36,67847,67848],{"class":42},">百货\u003C\u002F",[36,67850,4113],{"class":54857},[36,67852,58870],{"class":42},[36,67854,214],{"class":54857},[36,67856,54864],{"class":42},[36,67858,67859,67861,67863,67865,67867,67869,67871,67873,67876,67878,67880,67882],{"class":38,"line":1572},[36,67860,58858],{"class":42},[36,67862,214],{"class":54857},[36,67864,64607],{"class":42},[36,67866,4113],{"class":54857},[36,67868,64612],{"class":101},[36,67870,47],{"class":42},[36,67872,67791],{"class":105},[36,67874,67875],{"class":42},">个护\u003C\u002F",[36,67877,4113],{"class":54857},[36,67879,58870],{"class":42},[36,67881,214],{"class":54857},[36,67883,54864],{"class":42},[36,67885,67886,67888,67890,67892,67894,67896,67898,67900,67903,67905,67907,67909],{"class":38,"line":1592},[36,67887,58858],{"class":42},[36,67889,214],{"class":54857},[36,67891,64607],{"class":42},[36,67893,4113],{"class":54857},[36,67895,64612],{"class":101},[36,67897,47],{"class":42},[36,67899,67791],{"class":105},[36,67901,67902],{"class":42},">预告\u003C\u002F",[36,67904,4113],{"class":54857},[36,67906,58870],{"class":42},[36,67908,214],{"class":54857},[36,67910,54864],{"class":42},[36,67912,67913,67915,67917],{"class":38,"line":1597},[36,67914,58963],{"class":42},[36,67916,4875],{"class":54857},[36,67918,54864],{"class":42},[36,67920,67921,67923,67925],{"class":38,"line":1610},[36,67922,55333],{"class":42},[36,67924,55168],{"class":54857},[36,67926,54864],{"class":42},[36,67928,67929,67931,67933,67935,67937,67940],{"class":38,"line":1632},[36,67930,54898],{"class":42},[36,67932,55168],{"class":54857},[36,67934,57043],{"class":101},[36,67936,47],{"class":42},[36,67938,67939],{"class":105},"\"tab-content\"",[36,67941,54864],{"class":42},[36,67943,67944,67946,67948,67950,67952,67955,67957,67959,67961,67963,67966,67968,67970,67972,67975,67977],{"class":38,"line":1646},[36,67945,58790],{"class":42},[36,67947,55168],{"class":54857},[36,67949,57043],{"class":101},[36,67951,47],{"class":42},[36,67953,67954],{"class":105},"\"item active\"",[36,67956,64607],{"class":42},[36,67958,5198],{"class":54857},[36,67960,58795],{"class":101},[36,67962,47],{"class":42},[36,67964,67965],{"class":105},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[36,67967,58803],{"class":101},[36,67969,47],{"class":42},[36,67971,11343],{"class":105},[36,67973,67974],{"class":42}," \u002F>\u003C\u002F",[36,67976,55168],{"class":54857},[36,67978,54864],{"class":42},[36,67980,67981,67983,67985,67987,67989,67991,67993,67995,67997,67999,68002,68004,68006,68008,68010,68012],{"class":38,"line":1651},[36,67982,58790],{"class":42},[36,67984,55168],{"class":54857},[36,67986,57043],{"class":101},[36,67988,47],{"class":42},[36,67990,66178],{"class":105},[36,67992,64607],{"class":42},[36,67994,5198],{"class":54857},[36,67996,58795],{"class":101},[36,67998,47],{"class":42},[36,68000,68001],{"class":105},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[36,68003,58803],{"class":101},[36,68005,47],{"class":42},[36,68007,11343],{"class":105},[36,68009,67974],{"class":42},[36,68011,55168],{"class":54857},[36,68013,54864],{"class":42},[36,68015,68016,68018,68020,68022,68024,68026,68028,68030,68032,68034,68037,68039,68041,68043,68045,68047],{"class":38,"line":1664},[36,68017,58790],{"class":42},[36,68019,55168],{"class":54857},[36,68021,57043],{"class":101},[36,68023,47],{"class":42},[36,68025,66178],{"class":105},[36,68027,64607],{"class":42},[36,68029,5198],{"class":54857},[36,68031,58795],{"class":101},[36,68033,47],{"class":42},[36,68035,68036],{"class":105},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[36,68038,58803],{"class":101},[36,68040,47],{"class":42},[36,68042,11343],{"class":105},[36,68044,67974],{"class":42},[36,68046,55168],{"class":54857},[36,68048,54864],{"class":42},[36,68050,68051,68053,68055,68057,68059,68061,68063,68065,68067,68069,68072,68074,68076,68078,68080,68082],{"class":38,"line":1669},[36,68052,58790],{"class":42},[36,68054,55168],{"class":54857},[36,68056,57043],{"class":101},[36,68058,47],{"class":42},[36,68060,66178],{"class":105},[36,68062,64607],{"class":42},[36,68064,5198],{"class":54857},[36,68066,58795],{"class":101},[36,68068,47],{"class":42},[36,68070,68071],{"class":105},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[36,68073,58803],{"class":101},[36,68075,47],{"class":42},[36,68077,11343],{"class":105},[36,68079,67974],{"class":42},[36,68081,55168],{"class":54857},[36,68083,54864],{"class":42},[36,68085,68086,68088,68090,68092,68094,68096,68098,68100,68102,68104,68107,68109,68111,68113,68115,68117],{"class":38,"line":1681},[36,68087,58790],{"class":42},[36,68089,55168],{"class":54857},[36,68091,57043],{"class":101},[36,68093,47],{"class":42},[36,68095,66178],{"class":105},[36,68097,64607],{"class":42},[36,68099,5198],{"class":54857},[36,68101,58795],{"class":101},[36,68103,47],{"class":42},[36,68105,68106],{"class":105},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[36,68108,58803],{"class":101},[36,68110,47],{"class":42},[36,68112,11343],{"class":105},[36,68114,67974],{"class":42},[36,68116,55168],{"class":54857},[36,68118,54864],{"class":42},[36,68120,68121,68123,68125],{"class":38,"line":1694},[36,68122,55333],{"class":42},[36,68124,55168],{"class":54857},[36,68126,54864],{"class":42},[36,68128,68129,68131,68133],{"class":38,"line":1699},[36,68130,55974],{"class":42},[36,68132,55168],{"class":54857},[36,68134,54864],{"class":42},[36,68136,68137,68139,68141],{"class":38,"line":1714},[36,68138,55701],{"class":42},[36,68140,55370],{"class":54857},[36,68142,54864],{"class":42},[36,68144,68145],{"class":38,"line":1729},[36,68146,68147],{"class":3943},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[36,68149,68150],{"class":38,"line":1746},[36,68151,68152],{"class":3943},"    \u002F\u002F 1.1 获取 a 元素 \n",[36,68154,68155,68157,68160,68162,68164,68166,68168,68171],{"class":38,"line":1751},[36,68156,14882],{"class":46},[36,68158,68159],{"class":112}," as",[36,68161,673],{"class":46},[36,68163,57953],{"class":42},[36,68165,59237],{"class":101},[36,68167,495],{"class":42},[36,68169,68170],{"class":105},"'.tab-nav a'",[36,68172,922],{"class":42},[36,68174,68175],{"class":38,"line":1765},[36,68176,68177],{"class":3943},"    \u002F\u002F console.log(as) \n",[36,68179,68180,68182,68184,68186,68188,68190,68192,68194,68196,68199,68201,68203,68205],{"class":38,"line":1783},[36,68181,1909],{"class":46},[36,68183,5386],{"class":42},[36,68185,55404],{"class":46},[36,68187,13119],{"class":42},[36,68189,47],{"class":46},[36,68191,1004],{"class":112},[36,68193,13126],{"class":42},[36,68195,393],{"class":46},[36,68197,68198],{"class":42}," as.",[36,68200,55525],{"class":112},[36,68202,6914],{"class":42},[36,68204,6004],{"class":46},[36,68206,16102],{"class":42},[36,68208,68209],{"class":38,"line":1799},[36,68210,68211],{"class":3943},"      \u002F\u002F console.log(as[i])\n",[36,68213,68214],{"class":38,"line":1807},[36,68215,68216],{"class":3943},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[36,68218,68219,68222,68224,68226,68229,68231,68233],{"class":38,"line":1812},[36,68220,68221],{"class":42},"      as[i].",[36,68223,61368],{"class":101},[36,68225,495],{"class":42},[36,68227,68228],{"class":105},"'mouseenter'",[36,68230,478],{"class":42},[36,68232,58005],{"class":46},[36,68234,58008],{"class":42},[36,68236,68237],{"class":38,"line":1817},[36,68238,68239],{"class":3943},"        \u002F\u002F console.log('鼠标经过')\n",[36,68241,68242],{"class":38,"line":1833},[36,68243,68244],{"class":3943},"        \u002F\u002F 排他思想  \n",[36,68246,68247],{"class":38,"line":1844},[36,68248,68249],{"class":3943},"        \u002F\u002F 干掉别人 移除类active\n",[36,68251,68252,68254,68256,68258,68261,68263,68265,68267,68270],{"class":38,"line":1864},[36,68253,55482],{"class":42},[36,68255,57956],{"class":101},[36,68257,495],{"class":42},[36,68259,68260],{"class":105},"'.tab-nav .active'",[36,68262,60558],{"class":42},[36,68264,60561],{"class":101},[36,68266,495],{"class":42},[36,68268,68269],{"class":105},"'active'",[36,68271,922],{"class":42},[36,68273,68274],{"class":38,"line":1878},[36,68275,68276],{"class":3943},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[36,68278,68279,68282,68285,68287,68289,68291],{"class":38,"line":1891},[36,68280,68281],{"class":112},"        this",[36,68283,68284],{"class":42},".classList.",[36,68286,9027],{"class":101},[36,68288,495],{"class":42},[36,68290,68269],{"class":105},[36,68292,922],{"class":42},[36,68294,68295],{"class":38,"line":1896},[36,68296,659],{"emptyLinePlaceholder":658},[36,68298,68299],{"class":38,"line":1906},[36,68300,68301],{"class":3943},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[36,68303,68304],{"class":38,"line":1926},[36,68305,68306],{"class":3943},"        \u002F\u002F 干掉别人\n",[36,68308,68309,68311,68313,68315,68318,68320,68322,68324,68326],{"class":38,"line":1936},[36,68310,55482],{"class":42},[36,68312,57956],{"class":101},[36,68314,495],{"class":42},[36,68316,68317],{"class":105},"'.tab-content .active'",[36,68319,60558],{"class":42},[36,68321,60561],{"class":101},[36,68323,495],{"class":42},[36,68325,68269],{"class":105},[36,68327,922],{"class":42},[36,68329,68330],{"class":38,"line":1946},[36,68331,68332],{"class":3943},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[36,68334,68335,68337,68339,68341,68344,68346,68348,68350,68352,68354,68356,68358,68360],{"class":38,"line":1957},[36,68336,55482],{"class":42},[36,68338,57956],{"class":101},[36,68340,495],{"class":42},[36,68342,68343],{"class":105},"`.tab-content .item:nth-child(${",[36,68345,4316],{"class":42},[36,68347,49124],{"class":46},[36,68349,28732],{"class":112},[36,68351,60587],{"class":105},[36,68353,60558],{"class":42},[36,68355,9027],{"class":101},[36,68357,495],{"class":42},[36,68359,68269],{"class":105},[36,68361,922],{"class":42},[36,68363,68364],{"class":38,"line":2008},[36,68365,659],{"emptyLinePlaceholder":658},[36,68367,68368],{"class":38,"line":2022},[36,68369,68370],{"class":42},"      })\n",[36,68372,68373],{"class":38,"line":2028},[36,68374,5899],{"class":42},[36,68376,68377,68379,68381],{"class":38,"line":2033},[36,68378,55974],{"class":42},[36,68380,55370],{"class":54857},[36,68382,54864],{"class":42},[36,68384,68385,68387,68389],{"class":38,"line":2054},[36,68386,55342],{"class":42},[36,68388,55357],{"class":54857},[36,68390,54864],{"class":42},[36,68392,68393],{"class":38,"line":2059},[36,68394,659],{"emptyLinePlaceholder":658},[36,68396,68397,68399,68401],{"class":38,"line":2064},[36,68398,55342],{"class":42},[36,68400,54192],{"class":54857},[36,68402,54864],{"class":42},[19,68404,68405],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,68407,68408],{},"在监听事件中，this指向的就是他的调用者",[19,68410,68411],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,68413,57277],{},[19,68415,68416],{},"(function () {",[19,68418,68419],{},"const list = document.querySelector('.xtx-elevator-list')",[19,68421,68422],{},"list.addEventListener('click', function (e) {",[19,68424,68425],{},"if (e.target.tagName === 'A') {",[19,68427,68428],{},"\u002F\u002F 排他思想",[19,68430,68431],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,68433,68434],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,68436,68437],{},"\u002F\u002F console.log(old);",[19,68439,68440],{},"\u002F\u002F 判断",[19,68442,68443],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,68445,68446],{},"if (old) old.classList.remove('active')",[19,68448,68449],{},"e.target.classList.add('active')",[19,68451,4815],{},[19,68453,56021],{},[19,68455,68456],{},"})();",[318,68458,68460],{"id":68459},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[26,68462,68464],{"className":54190,"code":68463,"language":54192,"meta":31,"style":31},"\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",[33,68465,68466,68476,68480,68488,68492,68506,68520,68532,68540,68546,68556,68566,68570,68574,68581,68593,68604,68621,68634,68648,68658,68662,68666,68673,68684,68702,68712,68724,68728,68732,68739,68756,68767,68779,68783,68787,68794,68806,68810,68818,68826,68830,68838,68846,68854,68869,68913,68921,68934,68947,68960,68968,68976,68984,69012,69020,69032,69045,69058,69066,69074,69082,69108,69116,69129,69141,69154,69162,69170,69178,69204,69212,69225,69237,69250,69258,69266,69274,69279,69299,69304,69324,69329,69346,69351,69359,69364,69393,69406,69410,69414,69419,69423,69451,69456,69473,69478,69483,69488,69493,69519,69523,69527,69535,69543,69547],{"__ignoreMap":31},[36,68467,68468,68470,68472,68474],{"class":38,"line":39},[36,68469,54854],{"class":42},[36,68471,54858],{"class":54857},[36,68473,54861],{"class":101},[36,68475,54864],{"class":42},[36,68477,68478],{"class":38,"line":53},[36,68479,659],{"emptyLinePlaceholder":658},[36,68481,68482,68484,68486],{"class":38,"line":196},[36,68483,393],{"class":42},[36,68485,54192],{"class":54857},[36,68487,54864],{"class":42},[36,68489,68490],{"class":38,"line":642},[36,68491,659],{"emptyLinePlaceholder":658},[36,68493,68494,68496,68498,68500,68502,68504],{"class":38,"line":655},[36,68495,393],{"class":42},[36,68497,54891],{"class":54857},[36,68499,54873],{"class":101},[36,68501,47],{"class":42},[36,68503,54878],{"class":105},[36,68505,54864],{"class":42},[36,68507,68508,68510,68512,68514,68516,68518],{"class":38,"line":662},[36,68509,55701],{"class":42},[36,68511,54901],{"class":54857},[36,68513,54904],{"class":101},[36,68515,47],{"class":42},[36,68517,54909],{"class":105},[36,68519,54864],{"class":42},[36,68521,68522,68524,68526,68528,68530],{"class":38,"line":667},[36,68523,55701],{"class":42},[36,68525,54964],{"class":54857},[36,68527,58870],{"class":42},[36,68529,54964],{"class":54857},[36,68531,54864],{"class":42},[36,68533,68534,68536,68538],{"class":38,"line":679},[36,68535,55701],{"class":42},[36,68537,3785],{"class":54857},[36,68539,54864],{"class":42},[36,68541,68542,68544],{"class":38,"line":685},[36,68543,10096],{"class":54857},[36,68545,19228],{"class":42},[36,68547,68548,68550,68552,68554],{"class":38,"line":691},[36,68549,58262],{"class":112},[36,68551,54994],{"class":42},[36,68553,1859],{"class":112},[36,68555,5029],{"class":42},[36,68557,68558,68560,68562,68564],{"class":38,"line":696},[36,68559,58251],{"class":112},[36,68561,54994],{"class":42},[36,68563,1859],{"class":112},[36,68565,5029],{"class":42},[36,68567,68568],{"class":38,"line":702},[36,68569,5899],{"class":42},[36,68571,68572],{"class":38,"line":708},[36,68573,659],{"emptyLinePlaceholder":658},[36,68575,68576,68579],{"class":38,"line":713},[36,68577,68578],{"class":54857},"    table",[36,68580,19228],{"class":42},[36,68582,68583,68586,68588,68591],{"class":38,"line":719},[36,68584,68585],{"class":112},"      border-collapse",[36,68587,54994],{"class":42},[36,68589,68590],{"class":112},"collapse",[36,68592,5029],{"class":42},[36,68594,68595,68598,68600,68602],{"class":38,"line":725},[36,68596,68597],{"class":112},"      border-spacing",[36,68599,54994],{"class":42},[36,68601,1859],{"class":112},[36,68603,5029],{"class":42},[36,68605,68606,68608,68610,68612,68614,68616,68619],{"class":38,"line":731},[36,68607,65532],{"class":112},[36,68609,54994],{"class":42},[36,68611,4092],{"class":112},[36,68613,55049],{"class":46},[36,68615,55078],{"class":112},[36,68617,68618],{"class":112}," #c0c0c0",[36,68620,5029],{"class":42},[36,68622,68623,68625,68627,68630,68632],{"class":38,"line":736},[36,68624,58327],{"class":112},[36,68626,54994],{"class":42},[36,68628,68629],{"class":112},"500",[36,68631,55049],{"class":46},[36,68633,5029],{"class":42},[36,68635,68636,68638,68640,68642,68644,68646],{"class":38,"line":742},[36,68637,58262],{"class":112},[36,68639,54994],{"class":42},[36,68641,4186],{"class":112},[36,68643,55049],{"class":46},[36,68645,55113],{"class":112},[36,68647,5029],{"class":42},[36,68649,68650,68652,68654,68656],{"class":38,"line":748},[36,68651,60841],{"class":112},[36,68653,54994],{"class":42},[36,68655,55149],{"class":112},[36,68657,5029],{"class":42},[36,68659,68660],{"class":38,"line":754},[36,68661,5899],{"class":42},[36,68663,68664],{"class":38,"line":760},[36,68665,659],{"emptyLinePlaceholder":658},[36,68667,68668,68671],{"class":38,"line":766},[36,68669,68670],{"class":54857},"    th",[36,68672,19228],{"class":42},[36,68674,68675,68677,68679,68682],{"class":38,"line":772},[36,68676,58440],{"class":112},[36,68678,54994],{"class":42},[36,68680,68681],{"class":112},"#09c",[36,68683,5029],{"class":42},[36,68685,68686,68689,68691,68693,68695,68697,68700],{"class":38,"line":778},[36,68687,68688],{"class":112},"      font",[36,68690,54994],{"class":42},[36,68692,65894],{"class":112},[36,68694,67628],{"class":112},[36,68696,55049],{"class":46},[36,68698,68699],{"class":105}," \"微软雅黑\"",[36,68701,5029],{"class":42},[36,68703,68704,68706,68708,68710],{"class":38,"line":783},[36,68705,60971],{"class":112},[36,68707,54994],{"class":42},[36,68709,64397],{"class":112},[36,68711,5029],{"class":42},[36,68713,68714,68716,68718,68720,68722],{"class":38,"line":789},[36,68715,58341],{"class":112},[36,68717,54994],{"class":42},[36,68719,4670],{"class":112},[36,68721,55049],{"class":46},[36,68723,5029],{"class":42},[36,68725,68726],{"class":38,"line":795},[36,68727,5899],{"class":42},[36,68729,68730],{"class":38,"line":801},[36,68731,659],{"emptyLinePlaceholder":658},[36,68733,68734,68737],{"class":38,"line":807},[36,68735,68736],{"class":54857},"    td",[36,68738,19228],{"class":42},[36,68740,68741,68743,68745,68747,68749,68751,68754],{"class":38,"line":813},[36,68742,65532],{"class":112},[36,68744,54994],{"class":42},[36,68746,4092],{"class":112},[36,68748,55049],{"class":46},[36,68750,55078],{"class":112},[36,68752,68753],{"class":112}," #d0d0d0",[36,68755,5029],{"class":42},[36,68757,68758,68760,68762,68765],{"class":38,"line":819},[36,68759,60971],{"class":112},[36,68761,54994],{"class":42},[36,68763,68764],{"class":112},"#404060",[36,68766,5029],{"class":42},[36,68768,68769,68771,68773,68775,68777],{"class":38,"line":824},[36,68770,58251],{"class":112},[36,68772,54994],{"class":42},[36,68774,554],{"class":112},[36,68776,55049],{"class":46},[36,68778,5029],{"class":42},[36,68780,68781],{"class":38,"line":829},[36,68782,5899],{"class":42},[36,68784,68785],{"class":38,"line":851},[36,68786,659],{"emptyLinePlaceholder":658},[36,68788,68789,68792],{"class":38,"line":868},[36,68790,68791],{"class":101},"    .allCheck",[36,68793,19228],{"class":42},[36,68795,68796,68798,68800,68802,68804],{"class":38,"line":873},[36,68797,58327],{"class":112},[36,68799,54994],{"class":42},[36,68801,4483],{"class":112},[36,68803,55049],{"class":46},[36,68805,5029],{"class":42},[36,68807,68808],{"class":38,"line":891},[36,68809,5899],{"class":42},[36,68811,68812,68814,68816],{"class":38,"line":906},[36,68813,55974],{"class":42},[36,68815,3785],{"class":54857},[36,68817,54864],{"class":42},[36,68819,68820,68822,68824],{"class":38,"line":925},[36,68821,55342],{"class":42},[36,68823,54891],{"class":54857},[36,68825,54864],{"class":42},[36,68827,68828],{"class":38,"line":943},[36,68829,659],{"emptyLinePlaceholder":658},[36,68831,68832,68834,68836],{"class":38,"line":948},[36,68833,393],{"class":42},[36,68835,55357],{"class":54857},[36,68837,54864],{"class":42},[36,68839,68840,68842,68844],{"class":38,"line":971},[36,68841,55701],{"class":42},[36,68843,248],{"class":54857},[36,68845,54864],{"class":42},[36,68847,68848,68850,68852],{"class":38,"line":992},[36,68849,54898],{"class":42},[36,68851,254],{"class":54857},[36,68853,54864],{"class":42},[36,68855,68856,68858,68860,68862,68864,68867],{"class":38,"line":1020},[36,68857,58790],{"class":42},[36,68859,257],{"class":54857},[36,68861,57043],{"class":101},[36,68863,47],{"class":42},[36,68865,68866],{"class":105},"\"allCheck\"",[36,68868,54864],{"class":42},[36,68870,68871,68873,68875,68877,68879,68881,68883,68885,68887,68889,68891,68894,68897,68899,68901,68903,68906,68909,68911],{"class":38,"line":1036},[36,68872,58858],{"class":42},[36,68874,57378],{"class":54857},[36,68876,57381],{"class":101},[36,68878,47],{"class":42},[36,68880,57386],{"class":105},[36,68882,18576],{"class":101},[36,68884,47],{"class":42},[36,68886,11343],{"class":105},[36,68888,18615],{"class":101},[36,68890,47],{"class":42},[36,68892,68893],{"class":105},"\"checkAll\"",[36,68895,68896],{"class":42},"> \u003C",[36,68898,36],{"class":54857},[36,68900,57043],{"class":101},[36,68902,47],{"class":42},[36,68904,68905],{"class":105},"\"all\"",[36,68907,68908],{"class":42},">全选\u003C\u002F",[36,68910,36],{"class":54857},[36,68912,54864],{"class":42},[36,68914,68915,68917,68919],{"class":38,"line":1041},[36,68916,58963],{"class":42},[36,68918,257],{"class":54857},[36,68920,54864],{"class":42},[36,68922,68923,68925,68927,68930,68932],{"class":38,"line":1052},[36,68924,58790],{"class":42},[36,68926,257],{"class":54857},[36,68928,68929],{"class":42},">商品\u003C\u002F",[36,68931,257],{"class":54857},[36,68933,54864],{"class":42},[36,68935,68936,68938,68940,68943,68945],{"class":38,"line":1065},[36,68937,58790],{"class":42},[36,68939,257],{"class":54857},[36,68941,68942],{"class":42},">商家\u003C\u002F",[36,68944,257],{"class":54857},[36,68946,54864],{"class":42},[36,68948,68949,68951,68953,68956,68958],{"class":38,"line":1077},[36,68950,58790],{"class":42},[36,68952,257],{"class":54857},[36,68954,68955],{"class":42},">价格\u003C\u002F",[36,68957,257],{"class":54857},[36,68959,54864],{"class":42},[36,68961,68962,68964,68966],{"class":38,"line":1082},[36,68963,55333],{"class":42},[36,68965,254],{"class":54857},[36,68967,54864],{"class":42},[36,68969,68970,68972,68974],{"class":38,"line":1125},[36,68971,54898],{"class":42},[36,68973,254],{"class":54857},[36,68975,54864],{"class":42},[36,68977,68978,68980,68982],{"class":38,"line":1164},[36,68979,58790],{"class":42},[36,68981,270],{"class":54857},[36,68983,54864],{"class":42},[36,68985,68986,68988,68990,68992,68994,68996,68998,69000,69003,69005,69007,69010],{"class":38,"line":1169},[36,68987,58858],{"class":42},[36,68989,57378],{"class":54857},[36,68991,57381],{"class":101},[36,68993,47],{"class":42},[36,68995,57386],{"class":105},[36,68997,18576],{"class":101},[36,68999,47],{"class":42},[36,69001,69002],{"class":105},"\"check\"",[36,69004,57043],{"class":101},[36,69006,47],{"class":42},[36,69008,69009],{"class":105},"\"ck\"",[36,69011,54864],{"class":42},[36,69013,69014,69016,69018],{"class":38,"line":1180},[36,69015,58963],{"class":42},[36,69017,270],{"class":54857},[36,69019,54864],{"class":42},[36,69021,69022,69024,69026,69028,69030],{"class":38,"line":1198},[36,69023,58790],{"class":42},[36,69025,270],{"class":54857},[36,69027,64728],{"class":42},[36,69029,270],{"class":54857},[36,69031,54864],{"class":42},[36,69033,69034,69036,69038,69041,69043],{"class":38,"line":1215},[36,69035,58790],{"class":42},[36,69037,270],{"class":54857},[36,69039,69040],{"class":42},">小米\u003C\u002F",[36,69042,270],{"class":54857},[36,69044,54864],{"class":42},[36,69046,69047,69049,69051,69054,69056],{"class":38,"line":1236},[36,69048,58790],{"class":42},[36,69050,270],{"class":54857},[36,69052,69053],{"class":42},">￥1999\u003C\u002F",[36,69055,270],{"class":54857},[36,69057,54864],{"class":42},[36,69059,69060,69062,69064],{"class":38,"line":1245},[36,69061,55333],{"class":42},[36,69063,254],{"class":54857},[36,69065,54864],{"class":42},[36,69067,69068,69070,69072],{"class":38,"line":1250},[36,69069,54898],{"class":42},[36,69071,254],{"class":54857},[36,69073,54864],{"class":42},[36,69075,69076,69078,69080],{"class":38,"line":1265},[36,69077,58790],{"class":42},[36,69079,270],{"class":54857},[36,69081,54864],{"class":42},[36,69083,69084,69086,69088,69090,69092,69094,69096,69098,69100,69102,69104,69106],{"class":38,"line":1281},[36,69085,58858],{"class":42},[36,69087,57378],{"class":54857},[36,69089,57381],{"class":101},[36,69091,47],{"class":42},[36,69093,57386],{"class":105},[36,69095,18576],{"class":101},[36,69097,47],{"class":42},[36,69099,69002],{"class":105},[36,69101,57043],{"class":101},[36,69103,47],{"class":42},[36,69105,69009],{"class":105},[36,69107,54864],{"class":42},[36,69109,69110,69112,69114],{"class":38,"line":1297},[36,69111,58963],{"class":42},[36,69113,270],{"class":54857},[36,69115,54864],{"class":42},[36,69117,69118,69120,69122,69125,69127],{"class":38,"line":1314},[36,69119,58790],{"class":42},[36,69121,270],{"class":54857},[36,69123,69124],{"class":42},">小米净水器\u003C\u002F",[36,69126,270],{"class":54857},[36,69128,54864],{"class":42},[36,69130,69131,69133,69135,69137,69139],{"class":38,"line":1336},[36,69132,58790],{"class":42},[36,69134,270],{"class":54857},[36,69136,69040],{"class":42},[36,69138,270],{"class":54857},[36,69140,54864],{"class":42},[36,69142,69143,69145,69147,69150,69152],{"class":38,"line":1356},[36,69144,58790],{"class":42},[36,69146,270],{"class":54857},[36,69148,69149],{"class":42},">￥4999\u003C\u002F",[36,69151,270],{"class":54857},[36,69153,54864],{"class":42},[36,69155,69156,69158,69160],{"class":38,"line":1361},[36,69157,55333],{"class":42},[36,69159,254],{"class":54857},[36,69161,54864],{"class":42},[36,69163,69164,69166,69168],{"class":38,"line":1407},[36,69165,54898],{"class":42},[36,69167,254],{"class":54857},[36,69169,54864],{"class":42},[36,69171,69172,69174,69176],{"class":38,"line":1423},[36,69173,58790],{"class":42},[36,69175,270],{"class":54857},[36,69177,54864],{"class":42},[36,69179,69180,69182,69184,69186,69188,69190,69192,69194,69196,69198,69200,69202],{"class":38,"line":1439},[36,69181,58858],{"class":42},[36,69183,57378],{"class":54857},[36,69185,57381],{"class":101},[36,69187,47],{"class":42},[36,69189,57386],{"class":105},[36,69191,18576],{"class":101},[36,69193,47],{"class":42},[36,69195,69002],{"class":105},[36,69197,57043],{"class":101},[36,69199,47],{"class":42},[36,69201,69009],{"class":105},[36,69203,54864],{"class":42},[36,69205,69206,69208,69210],{"class":38,"line":1444},[36,69207,58963],{"class":42},[36,69209,270],{"class":54857},[36,69211,54864],{"class":42},[36,69213,69214,69216,69218,69221,69223],{"class":38,"line":1486},[36,69215,58790],{"class":42},[36,69217,270],{"class":54857},[36,69219,69220],{"class":42},">小米电视\u003C\u002F",[36,69222,270],{"class":54857},[36,69224,54864],{"class":42},[36,69226,69227,69229,69231,69233,69235],{"class":38,"line":1499},[36,69228,58790],{"class":42},[36,69230,270],{"class":54857},[36,69232,69040],{"class":42},[36,69234,270],{"class":54857},[36,69236,54864],{"class":42},[36,69238,69239,69241,69243,69246,69248],{"class":38,"line":1513},[36,69240,58790],{"class":42},[36,69242,270],{"class":54857},[36,69244,69245],{"class":42},">￥5999\u003C\u002F",[36,69247,270],{"class":54857},[36,69249,54864],{"class":42},[36,69251,69252,69254,69256],{"class":38,"line":1518},[36,69253,55333],{"class":42},[36,69255,254],{"class":54857},[36,69257,54864],{"class":42},[36,69259,69260,69262,69264],{"class":38,"line":1529},[36,69261,55974],{"class":42},[36,69263,248],{"class":54857},[36,69265,54864],{"class":42},[36,69267,69268,69270,69272],{"class":38,"line":1539},[36,69269,55701],{"class":42},[36,69271,55370],{"class":54857},[36,69273,54864],{"class":42},[36,69275,69276],{"class":38,"line":1544},[36,69277,69278],{"class":3943},"    \u002F\u002F 1. 获取大复选框\n",[36,69280,69281,69283,69286,69288,69290,69292,69294,69297],{"class":38,"line":1555},[36,69282,14882],{"class":46},[36,69284,69285],{"class":112}," checkAll",[36,69287,673],{"class":46},[36,69289,57953],{"class":42},[36,69291,57956],{"class":101},[36,69293,495],{"class":42},[36,69295,69296],{"class":105},"'#checkAll'",[36,69298,922],{"class":42},[36,69300,69301],{"class":38,"line":1572},[36,69302,69303],{"class":3943},"    \u002F\u002F 2. 获取所有的小复选框\n",[36,69305,69306,69308,69311,69313,69315,69317,69319,69322],{"class":38,"line":1592},[36,69307,14882],{"class":46},[36,69309,69310],{"class":112}," cks",[36,69312,673],{"class":46},[36,69314,57953],{"class":42},[36,69316,59237],{"class":101},[36,69318,495],{"class":42},[36,69320,69321],{"class":105},"'.ck'",[36,69323,922],{"class":42},[36,69325,69326],{"class":38,"line":1597},[36,69327,69328],{"class":3943},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[36,69330,69331,69334,69336,69338,69340,69342,69344],{"class":38,"line":1610},[36,69332,69333],{"class":42},"    checkAll.",[36,69335,61368],{"class":101},[36,69337,495],{"class":42},[36,69339,61373],{"class":105},[36,69341,478],{"class":42},[36,69343,58005],{"class":46},[36,69345,58008],{"class":42},[36,69347,69348],{"class":38,"line":1632},[36,69349,69350],{"class":3943},"      \u002F\u002F 得到当前大复选框的选中状态\n",[36,69352,69353,69356],{"class":38,"line":1646},[36,69354,69355],{"class":3943},"      \u002F\u002F console.log(checkAll.checked)",[36,69357,69358],{"class":3943},"  \u002F\u002F 得到 是 true 或者是 false\n",[36,69360,69361],{"class":38,"line":1651},[36,69362,69363],{"class":3943},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[36,69365,69366,69368,69370,69372,69374,69376,69378,69380,69382,69385,69387,69389,69391],{"class":38,"line":1664},[36,69367,55841],{"class":46},[36,69369,5386],{"class":42},[36,69371,55404],{"class":46},[36,69373,13119],{"class":42},[36,69375,47],{"class":46},[36,69377,1004],{"class":112},[36,69379,13126],{"class":42},[36,69381,393],{"class":46},[36,69383,69384],{"class":42}," cks.",[36,69386,55525],{"class":112},[36,69388,6914],{"class":42},[36,69390,6004],{"class":46},[36,69392,16102],{"class":42},[36,69394,69395,69398,69400,69403],{"class":38,"line":1669},[36,69396,69397],{"class":42},"        cks[i].checked ",[36,69399,47],{"class":46},[36,69401,69402],{"class":112}," this",[36,69404,69405],{"class":42},".checked\n",[36,69407,69408],{"class":38,"line":1681},[36,69409,55955],{"class":42},[36,69411,69412],{"class":38,"line":1694},[36,69413,37021],{"class":42},[36,69415,69416],{"class":38,"line":1699},[36,69417,69418],{"class":3943},"    \u002F\u002F 5. 小复选框控制大复选框\n",[36,69420,69421],{"class":38,"line":1714},[36,69422,659],{"emptyLinePlaceholder":658},[36,69424,69425,69427,69429,69431,69433,69435,69437,69439,69441,69443,69445,69447,69449],{"class":38,"line":1729},[36,69426,1909],{"class":46},[36,69428,5386],{"class":42},[36,69430,55404],{"class":46},[36,69432,13119],{"class":42},[36,69434,47],{"class":46},[36,69436,1004],{"class":112},[36,69438,13126],{"class":42},[36,69440,393],{"class":46},[36,69442,69384],{"class":42},[36,69444,55525],{"class":112},[36,69446,6914],{"class":42},[36,69448,6004],{"class":46},[36,69450,16102],{"class":42},[36,69452,69453],{"class":38,"line":1746},[36,69454,69455],{"class":3943},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[36,69457,69458,69461,69463,69465,69467,69469,69471],{"class":38,"line":1751},[36,69459,69460],{"class":42},"      cks[i].",[36,69462,61368],{"class":101},[36,69464,495],{"class":42},[36,69466,61373],{"class":105},[36,69468,478],{"class":42},[36,69470,58005],{"class":46},[36,69472,58008],{"class":42},[36,69474,69475],{"class":38,"line":1765},[36,69476,69477],{"class":3943},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[36,69479,69480],{"class":38,"line":1783},[36,69481,69482],{"class":3943},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[36,69484,69485],{"class":38,"line":1799},[36,69486,69487],{"class":3943},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[36,69489,69490],{"class":38,"line":1807},[36,69491,69492],{"class":3943},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[36,69494,69495,69498,69500,69502,69504,69506,69509,69511,69513,69515,69517],{"class":38,"line":1812},[36,69496,69497],{"class":42},"        checkAll.checked ",[36,69499,47],{"class":46},[36,69501,57953],{"class":42},[36,69503,59237],{"class":101},[36,69505,495],{"class":42},[36,69507,69508],{"class":105},"'.ck:checked'",[36,69510,34423],{"class":42},[36,69512,55525],{"class":112},[36,69514,61461],{"class":46},[36,69516,69384],{"class":42},[36,69518,59386],{"class":112},[36,69520,69521],{"class":38,"line":1817},[36,69522,68370],{"class":42},[36,69524,69525],{"class":38,"line":1833},[36,69526,5899],{"class":42},[36,69528,69529,69531,69533],{"class":38,"line":1844},[36,69530,55974],{"class":42},[36,69532,55370],{"class":54857},[36,69534,54864],{"class":42},[36,69536,69537,69539,69541],{"class":38,"line":1864},[36,69538,55342],{"class":42},[36,69540,55357],{"class":54857},[36,69542,54864],{"class":42},[36,69544,69545],{"class":38,"line":1878},[36,69546,659],{"emptyLinePlaceholder":658},[36,69548,69549,69551,69553],{"class":38,"line":1891},[36,69550,55342],{"class":42},[36,69552,54192],{"class":54857},[36,69554,54864],{"class":42},[19,69556,69557],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,69559,69560],{},"用好之间比较得到的布尔值！！！",[19,69562,69563,69564,69567,69568,5386,69571,4455,69573,69576],{},"在 JS 里访问的时候，",[33,69565,69566],{},"checkbox.checked"," 是一个 ",[4027,69569,69570],{},"布尔值",[33,69572,5098],{},[33,69574,69575],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,69578,69579,69580,69583,69584],{},"HTML 的 ",[33,69581,69582],{},"checked=\"checked\""," 只是 ",[4027,69585,69586,69587,69590],{},"初始值；JS 的 ",[33,69588,69589],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,69592,69593],{},"：checked是一个伪类选择器",[19,69595,69596],{},[5198,69597],{"alt":31,"src":69598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,69600,69601,69604],{},[69602,69603],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,69606,69607],{},[5198,69608],{"alt":31,"src":69609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,69611,69613],{"id":69612},"_33-dom事件进阶","3.3 DOM事件进阶",[318,69615,69617],{"id":69616},"_331-事件流","3.3.1 事件流",[19,69619,69620],{},[5198,69621],{"alt":31,"src":69622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[25619,69624,69626],{"id":69625},"_3311-事件捕获","3.3.1.1 事件捕获",[19,69628,69629],{},[5198,69630],{"alt":31,"src":69631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[26,69633,69635],{"className":54190,"code":69634,"language":54192,"meta":31,"style":31},"\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",[33,69636,69637,69647,69661,69665,69673,69687,69707,69719,69727,69734,69746,69758,69768,69772,69776,69783,69795,69807,69817,69821,69829,69837,69841,69849,69864,69883,69891,69899,69919,69939,69955,69966,69974,69991,70002,70010,70027,70038,70046,70054,70062,70066],{"__ignoreMap":31},[36,69638,69639,69641,69643,69645],{"class":38,"line":39},[36,69640,54854],{"class":42},[36,69642,54858],{"class":54857},[36,69644,54861],{"class":101},[36,69646,54864],{"class":42},[36,69648,69649,69651,69653,69655,69657,69659],{"class":38,"line":53},[36,69650,393],{"class":42},[36,69652,54192],{"class":54857},[36,69654,54873],{"class":101},[36,69656,47],{"class":42},[36,69658,54878],{"class":105},[36,69660,54864],{"class":42},[36,69662,69663],{"class":38,"line":196},[36,69664,659],{"emptyLinePlaceholder":658},[36,69666,69667,69669,69671],{"class":38,"line":642},[36,69668,393],{"class":42},[36,69670,54891],{"class":54857},[36,69672,54864],{"class":42},[36,69674,69675,69677,69679,69681,69683,69685],{"class":38,"line":655},[36,69676,55701],{"class":42},[36,69678,54901],{"class":54857},[36,69680,54904],{"class":101},[36,69682,47],{"class":42},[36,69684,54909],{"class":105},[36,69686,54864],{"class":42},[36,69688,69689,69691,69693,69695,69697,69699,69701,69703,69705],{"class":38,"line":662},[36,69690,55701],{"class":42},[36,69692,54901],{"class":54857},[36,69694,18576],{"class":101},[36,69696,47],{"class":42},[36,69698,54948],{"class":105},[36,69700,54928],{"class":101},[36,69702,47],{"class":42},[36,69704,54955],{"class":105},[36,69706,54864],{"class":42},[36,69708,69709,69711,69713,69715,69717],{"class":38,"line":667},[36,69710,55701],{"class":42},[36,69712,54964],{"class":54857},[36,69714,54967],{"class":42},[36,69716,54964],{"class":54857},[36,69718,54864],{"class":42},[36,69720,69721,69723,69725],{"class":38,"line":679},[36,69722,55701],{"class":42},[36,69724,3785],{"class":54857},[36,69726,54864],{"class":42},[36,69728,69729,69732],{"class":38,"line":685},[36,69730,69731],{"class":101},"    .father",[36,69733,19228],{"class":42},[36,69735,69736,69738,69740,69742,69744],{"class":38,"line":691},[36,69737,58327],{"class":112},[36,69739,54994],{"class":42},[36,69741,68629],{"class":112},[36,69743,55049],{"class":46},[36,69745,5029],{"class":42},[36,69747,69748,69750,69752,69754,69756],{"class":38,"line":696},[36,69749,58341],{"class":112},[36,69751,54994],{"class":42},[36,69753,68629],{"class":112},[36,69755,55049],{"class":46},[36,69757,5029],{"class":42},[36,69759,69760,69762,69764,69766],{"class":38,"line":702},[36,69761,58440],{"class":112},[36,69763,54994],{"class":42},[36,69765,55202],{"class":112},[36,69767,5029],{"class":42},[36,69769,69770],{"class":38,"line":708},[36,69771,5899],{"class":42},[36,69773,69774],{"class":38,"line":713},[36,69775,659],{"emptyLinePlaceholder":658},[36,69777,69778,69781],{"class":38,"line":719},[36,69779,69780],{"class":101},"    .son",[36,69782,19228],{"class":42},[36,69784,69785,69787,69789,69791,69793],{"class":38,"line":725},[36,69786,58327],{"class":112},[36,69788,54994],{"class":42},[36,69790,5445],{"class":112},[36,69792,55049],{"class":46},[36,69794,5029],{"class":42},[36,69796,69797,69799,69801,69803,69805],{"class":38,"line":731},[36,69798,58341],{"class":112},[36,69800,54994],{"class":42},[36,69802,5445],{"class":112},[36,69804,55049],{"class":46},[36,69806,5029],{"class":42},[36,69808,69809,69811,69813,69815],{"class":38,"line":736},[36,69810,58440],{"class":112},[36,69812,54994],{"class":42},[36,69814,58445],{"class":112},[36,69816,5029],{"class":42},[36,69818,69819],{"class":38,"line":742},[36,69820,5899],{"class":42},[36,69822,69823,69825,69827],{"class":38,"line":748},[36,69824,55974],{"class":42},[36,69826,3785],{"class":54857},[36,69828,54864],{"class":42},[36,69830,69831,69833,69835],{"class":38,"line":754},[36,69832,55342],{"class":42},[36,69834,54891],{"class":54857},[36,69836,54864],{"class":42},[36,69838,69839],{"class":38,"line":760},[36,69840,659],{"emptyLinePlaceholder":658},[36,69842,69843,69845,69847],{"class":38,"line":766},[36,69844,393],{"class":42},[36,69846,55357],{"class":54857},[36,69848,54864],{"class":42},[36,69850,69851,69853,69855,69857,69859,69862],{"class":38,"line":772},[36,69852,55701],{"class":42},[36,69854,55168],{"class":54857},[36,69856,57043],{"class":101},[36,69858,47],{"class":42},[36,69860,69861],{"class":105},"\"father\"",[36,69863,54864],{"class":42},[36,69865,69866,69868,69870,69872,69874,69877,69879,69881],{"class":38,"line":778},[36,69867,54898],{"class":42},[36,69869,55168],{"class":54857},[36,69871,57043],{"class":101},[36,69873,47],{"class":42},[36,69875,69876],{"class":105},"\"son\"",[36,69878,58870],{"class":42},[36,69880,55168],{"class":54857},[36,69882,54864],{"class":42},[36,69884,69885,69887,69889],{"class":38,"line":783},[36,69886,55974],{"class":42},[36,69888,55168],{"class":54857},[36,69890,54864],{"class":42},[36,69892,69893,69895,69897],{"class":38,"line":789},[36,69894,55701],{"class":42},[36,69896,55370],{"class":54857},[36,69898,54864],{"class":42},[36,69900,69901,69903,69906,69908,69910,69912,69914,69917],{"class":38,"line":795},[36,69902,14882],{"class":46},[36,69904,69905],{"class":112}," fa",[36,69907,673],{"class":46},[36,69909,57953],{"class":42},[36,69911,57956],{"class":101},[36,69913,495],{"class":42},[36,69915,69916],{"class":105},"'.father'",[36,69918,922],{"class":42},[36,69920,69921,69923,69926,69928,69930,69932,69934,69937],{"class":38,"line":801},[36,69922,14882],{"class":46},[36,69924,69925],{"class":112}," son",[36,69927,673],{"class":46},[36,69929,57953],{"class":42},[36,69931,57956],{"class":101},[36,69933,495],{"class":42},[36,69935,69936],{"class":105},"'.son'",[36,69938,922],{"class":42},[36,69940,69941,69943,69945,69947,69949,69951,69953],{"class":38,"line":807},[36,69942,55964],{"class":42},[36,69944,61368],{"class":101},[36,69946,495],{"class":42},[36,69948,61373],{"class":105},[36,69950,478],{"class":42},[36,69952,58005],{"class":46},[36,69954,58008],{"class":42},[36,69956,69957,69959,69961,69964],{"class":38,"line":813},[36,69958,62480],{"class":101},[36,69960,495],{"class":42},[36,69962,69963],{"class":105},"'woshiu1'",[36,69965,922],{"class":42},[36,69967,69968,69970,69972],{"class":38,"line":819},[36,69969,58091],{"class":42},[36,69971,5098],{"class":112},[36,69973,922],{"class":42},[36,69975,69976,69979,69981,69983,69985,69987,69989],{"class":38,"line":824},[36,69977,69978],{"class":42},"    fa.",[36,69980,61368],{"class":101},[36,69982,495],{"class":42},[36,69984,61373],{"class":105},[36,69986,478],{"class":42},[36,69988,58005],{"class":46},[36,69990,58008],{"class":42},[36,69992,69993,69995,69997,70000],{"class":38,"line":829},[36,69994,62480],{"class":101},[36,69996,495],{"class":42},[36,69998,69999],{"class":105},"'1'",[36,70001,922],{"class":42},[36,70003,70004,70006,70008],{"class":38,"line":851},[36,70005,58091],{"class":42},[36,70007,5098],{"class":112},[36,70009,922],{"class":42},[36,70011,70012,70015,70017,70019,70021,70023,70025],{"class":38,"line":868},[36,70013,70014],{"class":42},"    son.",[36,70016,61368],{"class":101},[36,70018,495],{"class":42},[36,70020,61373],{"class":105},[36,70022,478],{"class":42},[36,70024,58005],{"class":46},[36,70026,58008],{"class":42},[36,70028,70029,70031,70033,70036],{"class":38,"line":873},[36,70030,62480],{"class":101},[36,70032,495],{"class":42},[36,70034,70035],{"class":105},"'2'",[36,70037,922],{"class":42},[36,70039,70040,70042,70044],{"class":38,"line":891},[36,70041,58091],{"class":42},[36,70043,5098],{"class":112},[36,70045,922],{"class":42},[36,70047,70048,70050,70052],{"class":38,"line":906},[36,70049,55974],{"class":42},[36,70051,55370],{"class":54857},[36,70053,54864],{"class":42},[36,70055,70056,70058,70060],{"class":38,"line":925},[36,70057,55342],{"class":42},[36,70059,55357],{"class":54857},[36,70061,54864],{"class":42},[36,70063,70064],{"class":38,"line":943},[36,70065,659],{"emptyLinePlaceholder":658},[36,70067,70068,70070,70072],{"class":38,"line":948},[36,70069,55342],{"class":42},[36,70071,54192],{"class":54857},[36,70073,54864],{"class":42},[19,70075,70076],{},[5198,70077],{"alt":31,"src":70078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,70080,70081],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[25619,70083,70085],{"id":70084},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,70087,70088],{},[5198,70089],{"alt":31,"src":70090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,70092,70093],{},"反着来",[19,70095,70096],{},"注意是同名事件，比如都是‘click’",[25619,70098,70100],{"id":70099},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,70102,70103],{},[5198,70104],{"alt":31,"src":70105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[25619,70107,70109],{"id":70108},"_3314-解绑事件","3.3.1.4 解绑事件",[19,70111,70112],{},[5198,70113],{"alt":31,"src":70114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,70116,70117],{},[5198,70118],{"alt":31,"src":70119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[25619,70121,70123],{"id":70122},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[211,70125,70126],{},[214,70127,70128],{},"事件类型的区别",[19,70130,70131],{},[5198,70132],{"alt":31,"src":70133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,70135,70136],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[211,70138,70139],{"start":53},[214,70140,70141],{},"注册事件的区别",[19,70143,70144],{},[5198,70145],{"alt":31,"src":70146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[25619,70148,70150],{"id":70149},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,70152,70153],{},[5198,70154],{"alt":31,"src":70155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,70157,70158],{},[5198,70159],{"alt":31,"src":70160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[26,70162,70164],{"className":56624,"code":70163,"language":56626,"meta":31,"style":31},"\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",[33,70165,70166,70174,70191,70214,70222,70227,70232,70237,70241,70249,70257],{"__ignoreMap":31},[36,70167,70168,70170,70172],{"class":38,"line":39},[36,70169,393],{"class":42},[36,70171,55357],{"class":54857},[36,70173,54864],{"class":42},[36,70175,70176,70178,70181,70184,70186,70189],{"class":38,"line":53},[36,70177,55701],{"class":42},[36,70179,70180],{"class":54857},"form",[36,70182,70183],{"class":101}," action",[36,70185,47],{"class":42},[36,70187,70188],{"class":105},"\"http:\u002F\u002Fwww.itcast.cn\"",[36,70190,54864],{"class":42},[36,70192,70193,70195,70197,70199,70201,70204,70207,70209,70212],{"class":38,"line":196},[36,70194,54898],{"class":42},[36,70196,57378],{"class":54857},[36,70198,57381],{"class":101},[36,70200,47],{"class":42},[36,70202,70203],{"class":105},"\"submit\"",[36,70205,70206],{"class":101}," value",[36,70208,47],{"class":42},[36,70210,70211],{"class":105},"\"免费注册\"",[36,70213,54864],{"class":42},[36,70215,70216,70218,70220],{"class":38,"line":642},[36,70217,54898],{"class":42},[36,70219,55370],{"class":54857},[36,70221,54864],{"class":42},[36,70223,70224],{"class":38,"line":655},[36,70225,70226],{"class":42},"      const form = document.querySelector('form')\n",[36,70228,70229],{"class":38,"line":662},[36,70230,70231],{"class":42},"      form.addEventListener('submit', function (e) {\n",[36,70233,70234],{"class":38,"line":667},[36,70235,70236],{"class":42},"        e.preventDefault()\n",[36,70238,70239],{"class":38,"line":679},[36,70240,68370],{"class":42},[36,70242,70243,70245,70247],{"class":38,"line":685},[36,70244,55333],{"class":42},[36,70246,55370],{"class":54857},[36,70248,54864],{"class":42},[36,70250,70251,70253,70255],{"class":38,"line":691},[36,70252,55974],{"class":42},[36,70254,70180],{"class":54857},[36,70256,54864],{"class":42},[36,70258,70259,70261,70263],{"class":38,"line":696},[36,70260,55342],{"class":42},[36,70262,55357],{"class":54857},[36,70264,54864],{"class":42},[19,70266,70267],{},"点击不在跳转！！！",[318,70269,70271],{"id":70270},"_332-事件委托","3.3.2 事件委托",[19,70273,70274],{},[5198,70275],{"alt":31,"src":70276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[26,70278,70280],{"className":54190,"code":70279,"language":54192,"meta":31,"style":31},"\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",[33,70281,70282,70292,70306,70310,70318,70332,70352,70364,70372,70376,70384,70392,70404,70416,70428,70440,70452,70465,70473,70481,70486,70505,70526,70531,70536,70541,70546,70555,70559,70569,70573,70578,70583,70597,70607,70611,70615,70623,70631,70635],{"__ignoreMap":31},[36,70283,70284,70286,70288,70290],{"class":38,"line":39},[36,70285,54854],{"class":42},[36,70287,54858],{"class":54857},[36,70289,54861],{"class":101},[36,70291,54864],{"class":42},[36,70293,70294,70296,70298,70300,70302,70304],{"class":38,"line":53},[36,70295,393],{"class":42},[36,70297,54192],{"class":54857},[36,70299,54873],{"class":101},[36,70301,47],{"class":42},[36,70303,54878],{"class":105},[36,70305,54864],{"class":42},[36,70307,70308],{"class":38,"line":196},[36,70309,659],{"emptyLinePlaceholder":658},[36,70311,70312,70314,70316],{"class":38,"line":642},[36,70313,393],{"class":42},[36,70315,54891],{"class":54857},[36,70317,54864],{"class":42},[36,70319,70320,70322,70324,70326,70328,70330],{"class":38,"line":655},[36,70321,55701],{"class":42},[36,70323,54901],{"class":54857},[36,70325,54904],{"class":101},[36,70327,47],{"class":42},[36,70329,54909],{"class":105},[36,70331,54864],{"class":42},[36,70333,70334,70336,70338,70340,70342,70344,70346,70348,70350],{"class":38,"line":662},[36,70335,55701],{"class":42},[36,70337,54901],{"class":54857},[36,70339,18576],{"class":101},[36,70341,47],{"class":42},[36,70343,54948],{"class":105},[36,70345,54928],{"class":101},[36,70347,47],{"class":42},[36,70349,54955],{"class":105},[36,70351,54864],{"class":42},[36,70353,70354,70356,70358,70360,70362],{"class":38,"line":667},[36,70355,55701],{"class":42},[36,70357,54964],{"class":54857},[36,70359,54967],{"class":42},[36,70361,54964],{"class":54857},[36,70363,54864],{"class":42},[36,70365,70366,70368,70370],{"class":38,"line":679},[36,70367,55342],{"class":42},[36,70369,54891],{"class":54857},[36,70371,54864],{"class":42},[36,70373,70374],{"class":38,"line":685},[36,70375,659],{"emptyLinePlaceholder":658},[36,70377,70378,70380,70382],{"class":38,"line":691},[36,70379,393],{"class":42},[36,70381,55357],{"class":54857},[36,70383,54864],{"class":42},[36,70385,70386,70388,70390],{"class":38,"line":696},[36,70387,55701],{"class":42},[36,70389,4875],{"class":54857},[36,70391,54864],{"class":42},[36,70393,70394,70396,70398,70400,70402],{"class":38,"line":702},[36,70395,54898],{"class":42},[36,70397,214],{"class":54857},[36,70399,57523],{"class":42},[36,70401,214],{"class":54857},[36,70403,54864],{"class":42},[36,70405,70406,70408,70410,70412,70414],{"class":38,"line":708},[36,70407,54898],{"class":42},[36,70409,214],{"class":54857},[36,70411,57542],{"class":42},[36,70413,214],{"class":54857},[36,70415,54864],{"class":42},[36,70417,70418,70420,70422,70424,70426],{"class":38,"line":713},[36,70419,54898],{"class":42},[36,70421,214],{"class":54857},[36,70423,57561],{"class":42},[36,70425,214],{"class":54857},[36,70427,54864],{"class":42},[36,70429,70430,70432,70434,70436,70438],{"class":38,"line":719},[36,70431,54898],{"class":42},[36,70433,214],{"class":54857},[36,70435,57580],{"class":42},[36,70437,214],{"class":54857},[36,70439,54864],{"class":42},[36,70441,70442,70444,70446,70448,70450],{"class":38,"line":725},[36,70443,54898],{"class":42},[36,70445,214],{"class":54857},[36,70447,57599],{"class":42},[36,70449,214],{"class":54857},[36,70451,54864],{"class":42},[36,70453,70454,70456,70458,70461,70463],{"class":38,"line":731},[36,70455,54898],{"class":42},[36,70457,19],{"class":54857},[36,70459,70460],{"class":42},">我不需要变色\u003C\u002F",[36,70462,19],{"class":54857},[36,70464,54864],{"class":42},[36,70466,70467,70469,70471],{"class":38,"line":736},[36,70468,55974],{"class":42},[36,70470,4875],{"class":54857},[36,70472,54864],{"class":42},[36,70474,70475,70477,70479],{"class":38,"line":742},[36,70476,55701],{"class":42},[36,70478,55370],{"class":54857},[36,70480,54864],{"class":42},[36,70482,70483],{"class":38,"line":748},[36,70484,70485],{"class":3943},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[36,70487,70488,70490,70492,70494,70496,70498,70500,70503],{"class":38,"line":754},[36,70489,14882],{"class":46},[36,70491,64847],{"class":112},[36,70493,673],{"class":46},[36,70495,57953],{"class":42},[36,70497,57956],{"class":101},[36,70499,495],{"class":42},[36,70501,70502],{"class":105},"'ul'",[36,70504,922],{"class":42},[36,70506,70507,70510,70512,70514,70516,70518,70520,70522,70524],{"class":38,"line":760},[36,70508,70509],{"class":42},"    ul.",[36,70511,61368],{"class":101},[36,70513,495],{"class":42},[36,70515,61373],{"class":105},[36,70517,478],{"class":42},[36,70519,58005],{"class":46},[36,70521,5386],{"class":42},[36,70523,3958],{"class":468},[36,70525,16102],{"class":42},[36,70527,70528],{"class":38,"line":766},[36,70529,70530],{"class":3943},"      \u002F\u002F alert(1)\n",[36,70532,70533],{"class":38,"line":772},[36,70534,70535],{"class":3943},"      \u002F\u002F e.target就是我们点击的对象\n",[36,70537,70538],{"class":38,"line":778},[36,70539,70540],{"class":3943},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[36,70542,70543],{"class":38,"line":783},[36,70544,70545],{"class":3943},"      \u002F\u002F e.target.style.color = 'red'\n",[36,70547,70548,70550,70552],{"class":38,"line":789},[36,70549,61799],{"class":42},[36,70551,61802],{"class":101},[36,70553,70554],{"class":42},"(e)\n",[36,70556,70557],{"class":38,"line":795},[36,70558,659],{"emptyLinePlaceholder":658},[36,70560,70561,70563,70566],{"class":38,"line":801},[36,70562,61799],{"class":42},[36,70564,70565],{"class":101},"dir",[36,70567,70568],{"class":42},"(e.target)\n",[36,70570,70571],{"class":38,"line":807},[36,70572,659],{"emptyLinePlaceholder":658},[36,70574,70575],{"class":38,"line":813},[36,70576,70577],{"class":3943},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[36,70579,70580],{"class":38,"line":819},[36,70581,70582],{"class":3943},"      \u002F\u002F 通过tagName来进行判断\n",[36,70584,70585,70587,70590,70592,70595],{"class":38,"line":824},[36,70586,58036],{"class":46},[36,70588,70589],{"class":42}," (e.target.tagName ",[36,70591,58042],{"class":46},[36,70593,70594],{"class":105}," 'LI'",[36,70596,16102],{"class":42},[36,70598,70599,70602,70604],{"class":38,"line":829},[36,70600,70601],{"class":42},"        e.target.style.color ",[36,70603,47],{"class":46},[36,70605,70606],{"class":105}," 'red'\n",[36,70608,70609],{"class":38,"line":851},[36,70610,55955],{"class":42},[36,70612,70613],{"class":38,"line":868},[36,70614,37021],{"class":42},[36,70616,70617,70619,70621],{"class":38,"line":873},[36,70618,55974],{"class":42},[36,70620,55370],{"class":54857},[36,70622,54864],{"class":42},[36,70624,70625,70627,70629],{"class":38,"line":891},[36,70626,55342],{"class":42},[36,70628,55357],{"class":54857},[36,70630,54864],{"class":42},[36,70632,70633],{"class":38,"line":906},[36,70634,659],{"emptyLinePlaceholder":658},[36,70636,70637,70639,70641],{"class":38,"line":925},[36,70638,55342],{"class":42},[36,70640,54192],{"class":54857},[36,70642,54864],{"class":42},[19,70644,70645],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,70647,70648],{},"if(e.target.ragName==='P') {}",[19,70650,70651],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,70653,70654],{},"通过事件委托的方式实现tab栏切换改造：",[19,70656,70657],{},"一定要记住自定义属性！！！！！！",[19,70659,70660],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,70662,70663],{},"id是自定义的属性名",[19,70665,70666],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[26,70668,70670],{"className":54190,"code":70669,"language":54192,"meta":31,"style":31},"\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",[33,70671,70672,70682,70696,70700,70708,70722,70742,70762,70774,70782,70788,70798,70808,70812,70816,70822,70834,70846,70858,70874,70878,70882,70888,70900,70912,70924,70934,70944,70948,70952,70960,70972,70982,70994,70998,71002,71010,71020,71030,71040,71044,71048,71058,71072,71084,71088,71092,71104,71114,71130,71140,71144,71148,71162,71172,71182,71186,71190,71196,71210,71214,71218,71226,71236,71240,71244,71253,71263,71267,71275,71283,71287,71295,71309,71323,71335,71343,71382,71414,71446,71478,71510,71518,71526,71540,71574,71608,71642,71676,71710,71718,71726,71734,71739,71744,71763,71768,71788,71796,71801,71814,71835,71848,71852,71857,71862,71875,71895,71923,71927,71931,71935,71943,71951,71955],{"__ignoreMap":31},[36,70673,70674,70676,70678,70680],{"class":38,"line":39},[36,70675,54854],{"class":42},[36,70677,54858],{"class":54857},[36,70679,54861],{"class":101},[36,70681,54864],{"class":42},[36,70683,70684,70686,70688,70690,70692,70694],{"class":38,"line":53},[36,70685,393],{"class":42},[36,70687,54192],{"class":54857},[36,70689,54873],{"class":101},[36,70691,47],{"class":42},[36,70693,54878],{"class":105},[36,70695,54864],{"class":42},[36,70697,70698],{"class":38,"line":196},[36,70699,659],{"emptyLinePlaceholder":658},[36,70701,70702,70704,70706],{"class":38,"line":642},[36,70703,393],{"class":42},[36,70705,54891],{"class":54857},[36,70707,54864],{"class":42},[36,70709,70710,70712,70714,70716,70718,70720],{"class":38,"line":655},[36,70711,55701],{"class":42},[36,70713,54901],{"class":54857},[36,70715,54904],{"class":101},[36,70717,47],{"class":42},[36,70719,54909],{"class":105},[36,70721,62682],{"class":42},[36,70723,70724,70726,70728,70730,70732,70734,70736,70738,70740],{"class":38,"line":662},[36,70725,55701],{"class":42},[36,70727,54901],{"class":54857},[36,70729,54920],{"class":101},[36,70731,47],{"class":42},[36,70733,54925],{"class":105},[36,70735,54928],{"class":101},[36,70737,47],{"class":42},[36,70739,54933],{"class":105},[36,70741,62682],{"class":42},[36,70743,70744,70746,70748,70750,70752,70754,70756,70758,70760],{"class":38,"line":667},[36,70745,55701],{"class":42},[36,70747,54901],{"class":54857},[36,70749,18576],{"class":101},[36,70751,47],{"class":42},[36,70753,54948],{"class":105},[36,70755,54928],{"class":101},[36,70757,47],{"class":42},[36,70759,54955],{"class":105},[36,70761,62682],{"class":42},[36,70763,70764,70766,70768,70770,70772],{"class":38,"line":679},[36,70765,55701],{"class":42},[36,70767,54964],{"class":54857},[36,70769,67180],{"class":42},[36,70771,54964],{"class":54857},[36,70773,54864],{"class":42},[36,70775,70776,70778,70780],{"class":38,"line":685},[36,70777,55701],{"class":42},[36,70779,3785],{"class":54857},[36,70781,54864],{"class":42},[36,70783,70784,70786],{"class":38,"line":691},[36,70785,10096],{"class":54857},[36,70787,19228],{"class":42},[36,70789,70790,70792,70794,70796],{"class":38,"line":696},[36,70791,58262],{"class":112},[36,70793,54994],{"class":42},[36,70795,1859],{"class":112},[36,70797,5029],{"class":42},[36,70799,70800,70802,70804,70806],{"class":38,"line":702},[36,70801,58251],{"class":112},[36,70803,54994],{"class":42},[36,70805,1859],{"class":112},[36,70807,5029],{"class":42},[36,70809,70810],{"class":38,"line":708},[36,70811,5899],{"class":42},[36,70813,70814],{"class":38,"line":713},[36,70815,659],{"emptyLinePlaceholder":658},[36,70817,70818,70820],{"class":38,"line":719},[36,70819,67231],{"class":101},[36,70821,19228],{"class":42},[36,70823,70824,70826,70828,70830,70832],{"class":38,"line":725},[36,70825,58327],{"class":112},[36,70827,54994],{"class":42},[36,70829,67242],{"class":112},[36,70831,55049],{"class":46},[36,70833,5029],{"class":42},[36,70835,70836,70838,70840,70842,70844],{"class":38,"line":731},[36,70837,58341],{"class":112},[36,70839,54994],{"class":42},[36,70841,67255],{"class":112},[36,70843,55049],{"class":46},[36,70845,5029],{"class":42},[36,70847,70848,70850,70852,70854,70856],{"class":38,"line":736},[36,70849,58262],{"class":112},[36,70851,54994],{"class":42},[36,70853,1921],{"class":112},[36,70855,55049],{"class":46},[36,70857,5029],{"class":42},[36,70859,70860,70862,70864,70866,70868,70870,70872],{"class":38,"line":742},[36,70861,65532],{"class":112},[36,70863,54994],{"class":42},[36,70865,4092],{"class":112},[36,70867,55049],{"class":46},[36,70869,55078],{"class":112},[36,70871,65799],{"class":112},[36,70873,5029],{"class":42},[36,70875,70876],{"class":38,"line":748},[36,70877,5899],{"class":42},[36,70879,70880],{"class":38,"line":754},[36,70881,659],{"emptyLinePlaceholder":658},[36,70883,70884,70886],{"class":38,"line":760},[36,70885,67300],{"class":101},[36,70887,19228],{"class":42},[36,70889,70890,70892,70894,70896,70898],{"class":38,"line":766},[36,70891,58327],{"class":112},[36,70893,54994],{"class":42},[36,70895,4186],{"class":112},[36,70897,4203],{"class":46},[36,70899,5029],{"class":42},[36,70901,70902,70904,70906,70908,70910],{"class":38,"line":772},[36,70903,58341],{"class":112},[36,70905,54994],{"class":42},[36,70907,4777],{"class":112},[36,70909,55049],{"class":46},[36,70911,5029],{"class":42},[36,70913,70914,70916,70918,70920,70922],{"class":38,"line":778},[36,70915,60914],{"class":112},[36,70917,54994],{"class":42},[36,70919,4777],{"class":112},[36,70921,55049],{"class":46},[36,70923,5029],{"class":42},[36,70925,70926,70928,70930,70932],{"class":38,"line":783},[36,70927,58565],{"class":112},[36,70929,54994],{"class":42},[36,70931,55034],{"class":112},[36,70933,5029],{"class":42},[36,70935,70936,70938,70940,70942],{"class":38,"line":789},[36,70937,58576],{"class":112},[36,70939,54994],{"class":42},[36,70941,55225],{"class":112},[36,70943,5029],{"class":42},[36,70945,70946],{"class":38,"line":795},[36,70947,5899],{"class":42},[36,70949,70950],{"class":38,"line":801},[36,70951,659],{"emptyLinePlaceholder":658},[36,70953,70954,70956,70958],{"class":38,"line":807},[36,70955,67300],{"class":101},[36,70957,67373],{"class":54857},[36,70959,19228],{"class":42},[36,70961,70962,70964,70966,70968,70970],{"class":38,"line":813},[36,70963,58478],{"class":112},[36,70965,54994],{"class":42},[36,70967,4670],{"class":112},[36,70969,55049],{"class":46},[36,70971,5029],{"class":42},[36,70973,70974,70976,70978,70980],{"class":38,"line":819},[36,70975,65889],{"class":112},[36,70977,54994],{"class":42},[36,70979,67396],{"class":112},[36,70981,5029],{"class":42},[36,70983,70984,70986,70988,70990,70992],{"class":38,"line":824},[36,70985,65555],{"class":112},[36,70987,54994],{"class":42},[36,70989,1921],{"class":112},[36,70991,55049],{"class":46},[36,70993,5029],{"class":42},[36,70995,70996],{"class":38,"line":829},[36,70997,5899],{"class":42},[36,70999,71000],{"class":38,"line":851},[36,71001,659],{"emptyLinePlaceholder":658},[36,71003,71004,71006,71008],{"class":38,"line":868},[36,71005,67300],{"class":101},[36,71007,64847],{"class":54857},[36,71009,19228],{"class":42},[36,71011,71012,71014,71016,71018],{"class":38,"line":873},[36,71013,58288],{"class":112},[36,71015,54994],{"class":42},[36,71017,58293],{"class":112},[36,71019,5029],{"class":42},[36,71021,71022,71024,71026,71028],{"class":38,"line":891},[36,71023,58565],{"class":112},[36,71025,54994],{"class":42},[36,71027,55034],{"class":112},[36,71029,5029],{"class":42},[36,71031,71032,71034,71036,71038],{"class":38,"line":906},[36,71033,58576],{"class":112},[36,71035,54994],{"class":42},[36,71037,55137],{"class":112},[36,71039,5029],{"class":42},[36,71041,71042],{"class":38,"line":925},[36,71043,5899],{"class":42},[36,71045,71046],{"class":38,"line":943},[36,71047,659],{"emptyLinePlaceholder":658},[36,71049,71050,71052,71054,71056],{"class":38,"line":948},[36,71051,67300],{"class":101},[36,71053,64847],{"class":54857},[36,71055,58631],{"class":54857},[36,71057,19228],{"class":42},[36,71059,71060,71062,71064,71066,71068,71070],{"class":38,"line":971},[36,71061,58262],{"class":112},[36,71063,54994],{"class":42},[36,71065,1859],{"class":112},[36,71067,12631],{"class":112},[36,71069,55049],{"class":46},[36,71071,5029],{"class":42},[36,71073,71074,71076,71078,71080,71082],{"class":38,"line":992},[36,71075,58478],{"class":112},[36,71077,54994],{"class":42},[36,71079,4421],{"class":112},[36,71081,55049],{"class":46},[36,71083,5029],{"class":42},[36,71085,71086],{"class":38,"line":1020},[36,71087,5899],{"class":42},[36,71089,71090],{"class":38,"line":1036},[36,71091,659],{"emptyLinePlaceholder":658},[36,71093,71094,71096,71098,71100,71102],{"class":38,"line":1041},[36,71095,67300],{"class":101},[36,71097,64847],{"class":54857},[36,71099,58631],{"class":54857},[36,71101,5134],{"class":54857},[36,71103,19228],{"class":42},[36,71105,71106,71108,71110,71112],{"class":38,"line":1052},[36,71107,67525],{"class":112},[36,71109,54994],{"class":42},[36,71111,58293],{"class":112},[36,71113,5029],{"class":42},[36,71115,71116,71118,71120,71122,71124,71126,71128],{"class":38,"line":1065},[36,71117,65787],{"class":112},[36,71119,54994],{"class":42},[36,71121,498],{"class":112},[36,71123,55049],{"class":46},[36,71125,55078],{"class":112},[36,71127,67546],{"class":112},[36,71129,5029],{"class":42},[36,71131,71132,71134,71136,71138],{"class":38,"line":1077},[36,71133,60971],{"class":112},[36,71135,54994],{"class":42},[36,71137,65924],{"class":112},[36,71139,5029],{"class":42},[36,71141,71142],{"class":38,"line":1082},[36,71143,5899],{"class":42},[36,71145,71146],{"class":38,"line":1125},[36,71147,659],{"emptyLinePlaceholder":658},[36,71149,71150,71152,71154,71156,71158,71160],{"class":38,"line":1164},[36,71151,67300],{"class":101},[36,71153,64847],{"class":54857},[36,71155,58631],{"class":54857},[36,71157,5134],{"class":54857},[36,71159,67579],{"class":101},[36,71161,19228],{"class":42},[36,71163,71164,71166,71168,71170],{"class":38,"line":1169},[36,71165,65346],{"class":112},[36,71167,54994],{"class":42},[36,71169,67590],{"class":112},[36,71171,5029],{"class":42},[36,71173,71174,71176,71178,71180],{"class":38,"line":1180},[36,71175,60971],{"class":112},[36,71177,54994],{"class":42},[36,71179,67590],{"class":112},[36,71181,5029],{"class":42},[36,71183,71184],{"class":38,"line":1198},[36,71185,5899],{"class":42},[36,71187,71188],{"class":38,"line":1215},[36,71189,659],{"emptyLinePlaceholder":658},[36,71191,71192,71194],{"class":38,"line":1236},[36,71193,67615],{"class":101},[36,71195,19228],{"class":42},[36,71197,71198,71200,71202,71204,71206,71208],{"class":38,"line":1245},[36,71199,58251],{"class":112},[36,71201,54994],{"class":42},[36,71203,1859],{"class":112},[36,71205,67628],{"class":112},[36,71207,55049],{"class":46},[36,71209,5029],{"class":42},[36,71211,71212],{"class":38,"line":1250},[36,71213,5899],{"class":42},[36,71215,71216],{"class":38,"line":1265},[36,71217,659],{"emptyLinePlaceholder":658},[36,71219,71220,71222,71224],{"class":38,"line":1281},[36,71221,67615],{"class":101},[36,71223,65729],{"class":101},[36,71225,19228],{"class":42},[36,71227,71228,71230,71232,71234],{"class":38,"line":1297},[36,71229,58565],{"class":112},[36,71231,54994],{"class":42},[36,71233,58293],{"class":112},[36,71235,5029],{"class":42},[36,71237,71238],{"class":38,"line":1314},[36,71239,5899],{"class":42},[36,71241,71242],{"class":38,"line":1336},[36,71243,659],{"emptyLinePlaceholder":658},[36,71245,71246,71248,71251],{"class":38,"line":1356},[36,71247,67615],{"class":101},[36,71249,71250],{"class":101}," .active",[36,71252,19228],{"class":42},[36,71254,71255,71257,71259,71261],{"class":38,"line":1361},[36,71256,58565],{"class":112},[36,71258,54994],{"class":42},[36,71260,64424],{"class":112},[36,71262,5029],{"class":42},[36,71264,71265],{"class":38,"line":1407},[36,71266,5899],{"class":42},[36,71268,71269,71271,71273],{"class":38,"line":1423},[36,71270,55974],{"class":42},[36,71272,3785],{"class":54857},[36,71274,54864],{"class":42},[36,71276,71277,71279,71281],{"class":38,"line":1439},[36,71278,55342],{"class":42},[36,71280,54891],{"class":54857},[36,71282,54864],{"class":42},[36,71284,71285],{"class":38,"line":1444},[36,71286,659],{"emptyLinePlaceholder":658},[36,71288,71289,71291,71293],{"class":38,"line":1486},[36,71290,393],{"class":42},[36,71292,55357],{"class":54857},[36,71294,54864],{"class":42},[36,71296,71297,71299,71301,71303,71305,71307],{"class":38,"line":1499},[36,71298,55701],{"class":42},[36,71300,55168],{"class":54857},[36,71302,57043],{"class":101},[36,71304,47],{"class":42},[36,71306,67730],{"class":105},[36,71308,54864],{"class":42},[36,71310,71311,71313,71315,71317,71319,71321],{"class":38,"line":1513},[36,71312,54898],{"class":42},[36,71314,55168],{"class":54857},[36,71316,57043],{"class":101},[36,71318,47],{"class":42},[36,71320,67745],{"class":105},[36,71322,54864],{"class":42},[36,71324,71325,71327,71329,71331,71333],{"class":38,"line":1518},[36,71326,58790],{"class":42},[36,71328,318],{"class":54857},[36,71330,67756],{"class":42},[36,71332,318],{"class":54857},[36,71334,54864],{"class":42},[36,71336,71337,71339,71341],{"class":38,"line":1529},[36,71338,58790],{"class":42},[36,71340,4875],{"class":54857},[36,71342,54864],{"class":42},[36,71344,71345,71347,71349,71351,71353,71355,71357,71359,71361,71363,71365,71367,71369,71372,71374,71376,71378,71380],{"class":38,"line":1539},[36,71346,58858],{"class":42},[36,71348,214],{"class":54857},[36,71350,64607],{"class":42},[36,71352,4113],{"class":54857},[36,71354,57043],{"class":101},[36,71356,47],{"class":42},[36,71358,63261],{"class":105},[36,71360,64612],{"class":101},[36,71362,47],{"class":42},[36,71364,67791],{"class":105},[36,71366,57508],{"class":101},[36,71368,47],{"class":42},[36,71370,71371],{"class":105},"\"0\"",[36,71373,67794],{"class":42},[36,71375,4113],{"class":54857},[36,71377,58870],{"class":42},[36,71379,214],{"class":54857},[36,71381,54864],{"class":42},[36,71383,71384,71386,71388,71390,71392,71394,71396,71398,71400,71402,71404,71406,71408,71410,71412],{"class":38,"line":1544},[36,71385,58858],{"class":42},[36,71387,214],{"class":54857},[36,71389,64607],{"class":42},[36,71391,4113],{"class":54857},[36,71393,64612],{"class":101},[36,71395,47],{"class":42},[36,71397,67791],{"class":105},[36,71399,57508],{"class":101},[36,71401,47],{"class":42},[36,71403,7377],{"class":105},[36,71405,67821],{"class":42},[36,71407,4113],{"class":54857},[36,71409,58870],{"class":42},[36,71411,214],{"class":54857},[36,71413,54864],{"class":42},[36,71415,71416,71418,71420,71422,71424,71426,71428,71430,71432,71434,71436,71438,71440,71442,71444],{"class":38,"line":1555},[36,71417,58858],{"class":42},[36,71419,214],{"class":54857},[36,71421,64607],{"class":42},[36,71423,4113],{"class":54857},[36,71425,64612],{"class":101},[36,71427,47],{"class":42},[36,71429,67791],{"class":105},[36,71431,57508],{"class":101},[36,71433,47],{"class":42},[36,71435,7400],{"class":105},[36,71437,67848],{"class":42},[36,71439,4113],{"class":54857},[36,71441,58870],{"class":42},[36,71443,214],{"class":54857},[36,71445,54864],{"class":42},[36,71447,71448,71450,71452,71454,71456,71458,71460,71462,71464,71466,71468,71470,71472,71474,71476],{"class":38,"line":1572},[36,71449,58858],{"class":42},[36,71451,214],{"class":54857},[36,71453,64607],{"class":42},[36,71455,4113],{"class":54857},[36,71457,64612],{"class":101},[36,71459,47],{"class":42},[36,71461,67791],{"class":105},[36,71463,57508],{"class":101},[36,71465,47],{"class":42},[36,71467,7413],{"class":105},[36,71469,67875],{"class":42},[36,71471,4113],{"class":54857},[36,71473,58870],{"class":42},[36,71475,214],{"class":54857},[36,71477,54864],{"class":42},[36,71479,71480,71482,71484,71486,71488,71490,71492,71494,71496,71498,71500,71502,71504,71506,71508],{"class":38,"line":1592},[36,71481,58858],{"class":42},[36,71483,214],{"class":54857},[36,71485,64607],{"class":42},[36,71487,4113],{"class":54857},[36,71489,64612],{"class":101},[36,71491,47],{"class":42},[36,71493,67791],{"class":105},[36,71495,57508],{"class":101},[36,71497,47],{"class":42},[36,71499,7426],{"class":105},[36,71501,67902],{"class":42},[36,71503,4113],{"class":54857},[36,71505,58870],{"class":42},[36,71507,214],{"class":54857},[36,71509,54864],{"class":42},[36,71511,71512,71514,71516],{"class":38,"line":1597},[36,71513,58963],{"class":42},[36,71515,4875],{"class":54857},[36,71517,54864],{"class":42},[36,71519,71520,71522,71524],{"class":38,"line":1610},[36,71521,55333],{"class":42},[36,71523,55168],{"class":54857},[36,71525,54864],{"class":42},[36,71527,71528,71530,71532,71534,71536,71538],{"class":38,"line":1632},[36,71529,54898],{"class":42},[36,71531,55168],{"class":54857},[36,71533,57043],{"class":101},[36,71535,47],{"class":42},[36,71537,67939],{"class":105},[36,71539,54864],{"class":42},[36,71541,71542,71544,71546,71548,71550,71552,71554,71556,71558,71560,71562,71564,71566,71568,71570,71572],{"class":38,"line":1646},[36,71543,58790],{"class":42},[36,71545,55168],{"class":54857},[36,71547,57043],{"class":101},[36,71549,47],{"class":42},[36,71551,67954],{"class":105},[36,71553,64607],{"class":42},[36,71555,5198],{"class":54857},[36,71557,58795],{"class":101},[36,71559,47],{"class":42},[36,71561,67965],{"class":105},[36,71563,58803],{"class":101},[36,71565,47],{"class":42},[36,71567,11343],{"class":105},[36,71569,67974],{"class":42},[36,71571,55168],{"class":54857},[36,71573,54864],{"class":42},[36,71575,71576,71578,71580,71582,71584,71586,71588,71590,71592,71594,71596,71598,71600,71602,71604,71606],{"class":38,"line":1651},[36,71577,58790],{"class":42},[36,71579,55168],{"class":54857},[36,71581,57043],{"class":101},[36,71583,47],{"class":42},[36,71585,66178],{"class":105},[36,71587,64607],{"class":42},[36,71589,5198],{"class":54857},[36,71591,58795],{"class":101},[36,71593,47],{"class":42},[36,71595,68001],{"class":105},[36,71597,58803],{"class":101},[36,71599,47],{"class":42},[36,71601,11343],{"class":105},[36,71603,67974],{"class":42},[36,71605,55168],{"class":54857},[36,71607,54864],{"class":42},[36,71609,71610,71612,71614,71616,71618,71620,71622,71624,71626,71628,71630,71632,71634,71636,71638,71640],{"class":38,"line":1664},[36,71611,58790],{"class":42},[36,71613,55168],{"class":54857},[36,71615,57043],{"class":101},[36,71617,47],{"class":42},[36,71619,66178],{"class":105},[36,71621,64607],{"class":42},[36,71623,5198],{"class":54857},[36,71625,58795],{"class":101},[36,71627,47],{"class":42},[36,71629,68036],{"class":105},[36,71631,58803],{"class":101},[36,71633,47],{"class":42},[36,71635,11343],{"class":105},[36,71637,67974],{"class":42},[36,71639,55168],{"class":54857},[36,71641,54864],{"class":42},[36,71643,71644,71646,71648,71650,71652,71654,71656,71658,71660,71662,71664,71666,71668,71670,71672,71674],{"class":38,"line":1669},[36,71645,58790],{"class":42},[36,71647,55168],{"class":54857},[36,71649,57043],{"class":101},[36,71651,47],{"class":42},[36,71653,66178],{"class":105},[36,71655,64607],{"class":42},[36,71657,5198],{"class":54857},[36,71659,58795],{"class":101},[36,71661,47],{"class":42},[36,71663,68071],{"class":105},[36,71665,58803],{"class":101},[36,71667,47],{"class":42},[36,71669,11343],{"class":105},[36,71671,67974],{"class":42},[36,71673,55168],{"class":54857},[36,71675,54864],{"class":42},[36,71677,71678,71680,71682,71684,71686,71688,71690,71692,71694,71696,71698,71700,71702,71704,71706,71708],{"class":38,"line":1681},[36,71679,58790],{"class":42},[36,71681,55168],{"class":54857},[36,71683,57043],{"class":101},[36,71685,47],{"class":42},[36,71687,66178],{"class":105},[36,71689,64607],{"class":42},[36,71691,5198],{"class":54857},[36,71693,58795],{"class":101},[36,71695,47],{"class":42},[36,71697,68106],{"class":105},[36,71699,58803],{"class":101},[36,71701,47],{"class":42},[36,71703,11343],{"class":105},[36,71705,67974],{"class":42},[36,71707,55168],{"class":54857},[36,71709,54864],{"class":42},[36,71711,71712,71714,71716],{"class":38,"line":1694},[36,71713,55333],{"class":42},[36,71715,55168],{"class":54857},[36,71717,54864],{"class":42},[36,71719,71720,71722,71724],{"class":38,"line":1699},[36,71721,55974],{"class":42},[36,71723,55168],{"class":54857},[36,71725,54864],{"class":42},[36,71727,71728,71730,71732],{"class":38,"line":1714},[36,71729,55701],{"class":42},[36,71731,55370],{"class":54857},[36,71733,54864],{"class":42},[36,71735,71736],{"class":38,"line":1729},[36,71737,71738],{"class":3943},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[36,71740,71741],{"class":38,"line":1746},[36,71742,71743],{"class":3943},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[36,71745,71746,71748,71750,71752,71754,71756,71758,71761],{"class":38,"line":1751},[36,71747,14882],{"class":46},[36,71749,64847],{"class":112},[36,71751,673],{"class":46},[36,71753,57953],{"class":42},[36,71755,57956],{"class":101},[36,71757,495],{"class":42},[36,71759,71760],{"class":105},"'.tab-nav ul'",[36,71762,922],{"class":42},[36,71764,71765],{"class":38,"line":1765},[36,71766,71767],{"class":3943},"    \u002F\u002F 2.添加事件\n",[36,71769,71770,71772,71774,71776,71778,71780,71782,71784,71786],{"class":38,"line":1783},[36,71771,70509],{"class":42},[36,71773,61368],{"class":101},[36,71775,495],{"class":42},[36,71777,61373],{"class":105},[36,71779,478],{"class":42},[36,71781,58005],{"class":46},[36,71783,5386],{"class":42},[36,71785,3958],{"class":468},[36,71787,16102],{"class":42},[36,71789,71790,71792,71794],{"class":38,"line":1799},[36,71791,61799],{"class":42},[36,71793,70565],{"class":101},[36,71795,70568],{"class":42},[36,71797,71798],{"class":38,"line":1807},[36,71799,71800],{"class":3943},"      \u002F\u002Fe.targer是我们点击的对象\n",[36,71802,71803,71805,71807,71809,71812],{"class":38,"line":1812},[36,71804,58036],{"class":46},[36,71806,70589],{"class":42},[36,71808,58042],{"class":46},[36,71810,71811],{"class":105}," 'A'",[36,71813,16102],{"class":42},[36,71815,71816,71818,71820,71822,71825,71827,71829,71831,71833],{"class":38,"line":1817},[36,71817,55482],{"class":42},[36,71819,57956],{"class":101},[36,71821,495],{"class":42},[36,71823,71824],{"class":105},"'.active'",[36,71826,60558],{"class":42},[36,71828,60561],{"class":101},[36,71830,495],{"class":42},[36,71832,68269],{"class":105},[36,71834,922],{"class":42},[36,71836,71837,71840,71842,71844,71846],{"class":38,"line":1833},[36,71838,71839],{"class":42},"        e.target.classList.",[36,71841,9027],{"class":101},[36,71843,495],{"class":42},[36,71845,68269],{"class":105},[36,71847,922],{"class":42},[36,71849,71850],{"class":38,"line":1844},[36,71851,659],{"emptyLinePlaceholder":658},[36,71853,71854],{"class":38,"line":1864},[36,71855,71856],{"class":3943},"        \u002F\u002F 下面大盒子模块\n",[36,71858,71859],{"class":38,"line":1878},[36,71860,71861],{"class":3943},"        \u002F\u002F console.log(e.target.dataset.id)\n",[36,71863,71864,71866,71868,71870,71872],{"class":38,"line":1891},[36,71865,64825],{"class":46},[36,71867,6734],{"class":112},[36,71869,673],{"class":46},[36,71871,49124],{"class":46},[36,71873,71874],{"class":42},"e.target.dataset.id\n",[36,71876,71877,71879,71881,71883,71885,71887,71889,71891,71893],{"class":38,"line":1896},[36,71878,55482],{"class":42},[36,71880,57956],{"class":101},[36,71882,495],{"class":42},[36,71884,68317],{"class":105},[36,71886,60558],{"class":42},[36,71888,60561],{"class":101},[36,71890,495],{"class":42},[36,71892,68269],{"class":105},[36,71894,922],{"class":42},[36,71896,71897,71899,71901,71903,71905,71907,71909,71911,71913,71915,71917,71919,71921],{"class":38,"line":1906},[36,71898,55482],{"class":42},[36,71900,57956],{"class":101},[36,71902,495],{"class":42},[36,71904,68343],{"class":105},[36,71906,4316],{"class":42},[36,71908,49124],{"class":46},[36,71910,28732],{"class":112},[36,71912,60587],{"class":105},[36,71914,60558],{"class":42},[36,71916,9027],{"class":101},[36,71918,495],{"class":42},[36,71920,68269],{"class":105},[36,71922,922],{"class":42},[36,71924,71925],{"class":38,"line":1926},[36,71926,659],{"emptyLinePlaceholder":658},[36,71928,71929],{"class":38,"line":1936},[36,71930,55955],{"class":42},[36,71932,71933],{"class":38,"line":1946},[36,71934,37021],{"class":42},[36,71936,71937,71939,71941],{"class":38,"line":1957},[36,71938,55974],{"class":42},[36,71940,55370],{"class":54857},[36,71942,54864],{"class":42},[36,71944,71945,71947,71949],{"class":38,"line":2008},[36,71946,55342],{"class":42},[36,71948,55357],{"class":54857},[36,71950,54864],{"class":42},[36,71952,71953],{"class":38,"line":2022},[36,71954,659],{"emptyLinePlaceholder":658},[36,71956,71957,71959,71961],{"class":38,"line":2028},[36,71958,55342],{"class":42},[36,71960,54192],{"class":54857},[36,71962,54864],{"class":42},[318,71964,71966],{"id":71965},"_333-页面加载事件","3.3.3 页面加载事件",[211,71968,71969],{},[214,71970,71971],{},"load",[19,71973,71974],{},[5198,71975],{"alt":31,"src":71976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,71978,71979],{},"window代表整个窗口，比document还要大",[19,71981,71982],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,71984,71985],{},"img.addEventListener('load', function () {",[19,71987,71988],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,71990,56021],{},[211,71992,71993],{"start":53},[214,71994,71995],{},"DOMContentLoaded",[19,71997,71998],{},[5198,71999],{"alt":31,"src":72000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,72002,72003],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[318,72005,72007],{"id":72006},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,72009,72010],{},[5198,72011],{"alt":31,"src":72012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,72014,72015],{},[5198,72016],{"alt":31,"src":72017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,72019,72020],{},[5198,72021],{"alt":31,"src":72022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,72024,72025],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,72027,72028],{},"获得的是数字型数据，不带单位",[19,72030,72031],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,72033,72034],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,72036,72037],{},"它是通过document.documentElement来获取",[19,72039,72040],{},[5198,72041],{"alt":31,"src":72042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,72044,72045],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[318,72047,72049],{"id":72048},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,72051,72052],{},[5198,72053],{"alt":31,"src":72054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,72056,72057],{},[5198,72058],{"alt":31,"src":72059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[318,72061,72063],{"id":72062},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,72065,72066],{},[5198,72067],{"alt":31,"src":72068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,72070,72071],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,72073,72074],{},[5198,72075],{"alt":31,"src":72076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,72078,72079],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,72081,72082],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,72084,72085],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,72087,72088],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,72090,72091],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,72093,72094],{},[5198,72095],{"alt":31,"src":72096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,72098,72099],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,72101,72102],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,72104,72105],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,72107,72108],{},"e.pageX-box.getBoundingClientRect()",[318,72110,72112],{"id":72111},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,72114,72115],{},[5198,72116],{"alt":31,"src":72117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,72119,72120],{},"这个是相对于视口来说的，它是个方法，不是属性值",[318,72122,72124],{"id":72123},"_338-总结","3.3.8 总结",[19,72126,72127],{},[5198,72128],{"alt":31,"src":72129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,72131,72132],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,72134,72135],{},"修改盒子的宽高只能通过width和height来实现",[318,72137,72139],{"id":72138},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[26,72141,72143],{"className":54190,"code":72142,"language":54192,"meta":31,"style":31},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[33,72144,72145,72150,72155,72160,72165],{"__ignoreMap":31},[36,72146,72147],{"class":38,"line":39},[36,72148,72149],{"class":42},"\u002F* 页面滑动 *\u002F\n",[36,72151,72152],{"class":38,"line":53},[36,72153,72154],{"class":42},"html {\n",[36,72156,72157],{"class":38,"line":196},[36,72158,72159],{"class":42},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[36,72161,72162],{"class":38,"line":642},[36,72163,72164],{"class":42},"  scroll-behavior: smooth;\n",[36,72166,72167],{"class":38,"line":655},[36,72168,5300],{"class":42},[19,72170,72171],{},"默认是auto",[318,72173,72175],{"id":72174},"_3310-日期对象","3.3.10 日期对象",[25619,72177,72179],{"id":72178},"_33101-实例化","3.3.10.1 实例化",[19,72181,72182],{},[5198,72183],{"alt":31,"src":72184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[25619,72186,72188],{"id":72187},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,72190,72191],{},[5198,72192],{"alt":31,"src":72193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,72195,72196],{},"月份+1",[19,72198,72199],{},"老外认为第一天为0，星期天",[19,72201,72202],{},"方法使用的时候必须要跟括号",[19,72204,72205],{},"快速获得日期",[19,72207,72208],{},"\u002F\u002F 得到年月日",[19,72210,72211],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,72213,72214],{},"\u002F\u002F 得到当地日期",[19,72216,72217],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,72219,72220],{},"\u002F\u002F 得到当地时间",[19,72222,72223],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,72225,72226],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,72228,72229],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[55370,72231,72232],{},"\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,72234,72235],{},"学会去封装函数！",[25619,72237,72239],{"id":72238},"_33103-时间戳","3.3.10.3 时间戳",[19,72241,72242],{},[5198,72243],{"alt":31,"src":72244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,72246,72247],{},[5198,72248],{"alt":31,"src":72249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,72251,72252],{},"三种方法记住一个就可以",[318,72254,72256],{"id":72255},"_3311-节点操作","3.3.11 节点操作",[25619,72258,72260],{"id":72259},"_33111-dom节点","3.3.11.1 DOM节点",[19,72262,72263],{},[5198,72264],{"alt":31,"src":72265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,72267,72268],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[25619,72270,72272],{"id":72271},"_33112-查找节点","3.3.11.2 查找节点",[19,72274,72275],{},"前边的document.querySelector()是获取的元素",[19,72277,72278],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,72280,72281],{},[5198,72282],{"alt":31,"src":72283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[211,72285,72286],{},[214,72287,72288],{},"父节点",[19,72290,72291],{},[5198,72292],{"alt":31,"src":72293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[211,72295,72296],{"start":53},[214,72297,72298],{},"子节点",[19,72300,72301],{},[5198,72302],{"alt":31,"src":72303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,72305,72306],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,72308,72309],{},"children获得的是伪数组，是亲儿子",[211,72311,72312],{"start":196},[214,72313,72314],{},"兄弟节点",[19,72316,72317],{},[5198,72318],{"alt":31,"src":72319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[25619,72321,72323],{"id":72322},"_33113-增加节点","3.3.11.3 增加节点",[19,72325,72326],{},[5198,72327],{"alt":31,"src":72328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,72330,72331],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,72333,72334],{},[5198,72335],{"alt":31,"src":72336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,72338,72339],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,72341,72342],{},"下面是写法的部分展示，就按照下边的格式来写",[19,72344,72345],{},"例：",[55370,72347,72348],{},"\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,72350,72351],{},[5198,72352],{"alt":31,"src":72353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,72355,72356],{},"false只克隆标签，里边的内容不会克隆过来",[26,72358,72360],{"className":54190,"code":72359,"language":54192,"meta":31,"style":31},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[33,72361,72362],{"__ignoreMap":31},[36,72363,72364],{"class":38,"line":39},[36,72365,72359],{"class":42},[25619,72367,72369],{"id":72368},"_33114-删除节点","3.3.11.4 删除节点",[19,72371,72372],{},[5198,72373],{"alt":31,"src":72374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,72376,72377],{},"父亲删儿子",[19,72379,72380],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[318,72382,72384],{"id":72383},"_3312-m端事件","3.3.12 M端事件",[19,72386,72387],{},"M端就是移动端",[19,72389,72390],{},[5198,72391],{"alt":31,"src":72392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[318,72394,72396],{"id":72395},"_3313-插件","3.3.13 插件",[19,72398,72399],{},"要熟悉官网！！！",[19,72401,72402],{},[4113,72403,72404],{"href":72404,"rel":72405},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[27481],[19,72407,72408],{},[4113,72409,72410],{"href":72410,"rel":72411},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[27481],[318,72413,72415],{"id":72414},"_3314-学生信息表","3.3.14 学生信息表",[211,72417,72418,72421,72424,72427,72430,72433,72436,72439],{},[214,72419,72420],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[214,72422,72423],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[214,72425,72426],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[214,72428,72429],{},"用好表单元素自带的属性，value,name等",[214,72431,72432],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[214,72434,72435],{},"不要忘记事件对象",[214,72437,72438],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[214,72440,72441],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,72443,72444],{},"结构：",[26,72446,72448],{"className":54190,"code":72447,"language":54192,"meta":31,"style":31},"\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",[33,72449,72450,72460,72474,72478,72486,72500,72520,72541,72554,72578,72586,72590,72598,72611,72632,72660,72688,72693,72715,72735,72754,72762,72790,72812,72832,72852,72872,72892,72912,72920,72940,72948,72952,72965,72973,72981,72989,73002,73015,73028,73041,73054,73067,73080,73088,73096,73104,73109,73114,73119,73124,73129,73134,73139,73144,73149,73154,73159,73164,73169,73177,73185,73193,73197,73217,73236,73256,73276,73296,73316,73320,73325,73345,73350,73360,73365,73370,73390,73412,73417,73427,73431,73435,73440,73445,73474,73488,73503,73507,73511,73515,73520,73531,73544,73549,73554,73559,73564,73569,73573,73578,73583,73592,73597,73602,73613,73618,73625,73629,73634,73644,73649,73659,73664,73692,73713,73723,73743,73761,73778,73795,73812,73829,73833,73843,73848,73853,73858,73869,73873,73877,73881,73886,73891,73912,73924,73929,73934,73939,73953,73958,73965,73969,73973,73981,73985,73993,73997],{"__ignoreMap":31},[36,72451,72452,72454,72456,72458],{"class":38,"line":39},[36,72453,54854],{"class":42},[36,72455,54858],{"class":54857},[36,72457,54861],{"class":101},[36,72459,54864],{"class":42},[36,72461,72462,72464,72466,72468,72470,72472],{"class":38,"line":53},[36,72463,393],{"class":42},[36,72465,54192],{"class":54857},[36,72467,54873],{"class":101},[36,72469,47],{"class":42},[36,72471,54878],{"class":105},[36,72473,54864],{"class":42},[36,72475,72476],{"class":38,"line":196},[36,72477,659],{"emptyLinePlaceholder":658},[36,72479,72480,72482,72484],{"class":38,"line":642},[36,72481,393],{"class":42},[36,72483,54891],{"class":54857},[36,72485,54864],{"class":42},[36,72487,72488,72490,72492,72494,72496,72498],{"class":38,"line":655},[36,72489,55701],{"class":42},[36,72491,54901],{"class":54857},[36,72493,54904],{"class":101},[36,72495,47],{"class":42},[36,72497,54909],{"class":105},[36,72499,62682],{"class":42},[36,72501,72502,72504,72506,72508,72510,72512,72514,72516,72518],{"class":38,"line":662},[36,72503,55701],{"class":42},[36,72505,54901],{"class":54857},[36,72507,18576],{"class":101},[36,72509,47],{"class":42},[36,72511,54948],{"class":105},[36,72513,54928],{"class":101},[36,72515,47],{"class":42},[36,72517,54955],{"class":105},[36,72519,62682],{"class":42},[36,72521,72522,72524,72526,72528,72530,72532,72534,72536,72539],{"class":38,"line":667},[36,72523,55701],{"class":42},[36,72525,54901],{"class":54857},[36,72527,54920],{"class":101},[36,72529,47],{"class":42},[36,72531,54925],{"class":105},[36,72533,54928],{"class":101},[36,72535,47],{"class":42},[36,72537,72538],{"class":105},"\"ie=edge\"",[36,72540,62682],{"class":42},[36,72542,72543,72545,72547,72550,72552],{"class":38,"line":679},[36,72544,55701],{"class":42},[36,72546,54964],{"class":54857},[36,72548,72549],{"class":42},">学生信息管理\u003C\u002F",[36,72551,54964],{"class":54857},[36,72553,54864],{"class":42},[36,72555,72556,72558,72561,72564,72566,72569,72571,72573,72576],{"class":38,"line":685},[36,72557,55701],{"class":42},[36,72559,72560],{"class":54857},"link",[36,72562,72563],{"class":101}," rel",[36,72565,47],{"class":42},[36,72567,72568],{"class":105},"\"stylesheet\"",[36,72570,64612],{"class":101},[36,72572,47],{"class":42},[36,72574,72575],{"class":105},"\"css\u002Findex.css\"",[36,72577,62682],{"class":42},[36,72579,72580,72582,72584],{"class":38,"line":691},[36,72581,55342],{"class":42},[36,72583,54891],{"class":54857},[36,72585,54864],{"class":42},[36,72587,72588],{"class":38,"line":696},[36,72589,659],{"emptyLinePlaceholder":658},[36,72591,72592,72594,72596],{"class":38,"line":702},[36,72593,393],{"class":42},[36,72595,55357],{"class":54857},[36,72597,54864],{"class":42},[36,72599,72600,72602,72604,72607,72609],{"class":38,"line":708},[36,72601,55701],{"class":42},[36,72603,10],{"class":54857},[36,72605,72606],{"class":42},">新增学员\u003C\u002F",[36,72608,10],{"class":54857},[36,72610,54864],{"class":42},[36,72612,72613,72615,72617,72619,72621,72623,72626,72628,72630],{"class":38,"line":713},[36,72614,55701],{"class":42},[36,72616,70180],{"class":54857},[36,72618,57043],{"class":101},[36,72620,47],{"class":42},[36,72622,66219],{"class":105},[36,72624,72625],{"class":101}," autocomplete",[36,72627,47],{"class":42},[36,72629,35364],{"class":105},[36,72631,54864],{"class":42},[36,72633,72634,72637,72639,72641,72643,72645,72647,72649,72652,72654,72656,72658],{"class":38,"line":719},[36,72635,72636],{"class":42},"    姓名：\u003C",[36,72638,57378],{"class":54857},[36,72640,57381],{"class":101},[36,72642,47],{"class":42},[36,72644,66254],{"class":105},[36,72646,57043],{"class":101},[36,72648,47],{"class":42},[36,72650,72651],{"class":105},"\"uname\"",[36,72653,18576],{"class":101},[36,72655,47],{"class":42},[36,72657,72651],{"class":105},[36,72659,62682],{"class":42},[36,72661,72662,72665,72667,72669,72671,72673,72675,72677,72680,72682,72684,72686],{"class":38,"line":725},[36,72663,72664],{"class":42},"    年龄：\u003C",[36,72666,57378],{"class":54857},[36,72668,57381],{"class":101},[36,72670,47],{"class":42},[36,72672,66254],{"class":105},[36,72674,57043],{"class":101},[36,72676,47],{"class":42},[36,72678,72679],{"class":105},"\"age\"",[36,72681,18576],{"class":101},[36,72683,47],{"class":42},[36,72685,72679],{"class":105},[36,72687,62682],{"class":42},[36,72689,72690],{"class":38,"line":731},[36,72691,72692],{"class":42},"    性别:\n",[36,72694,72695,72697,72700,72702,72704,72707,72709,72711,72713],{"class":38,"line":736},[36,72696,54898],{"class":42},[36,72698,72699],{"class":54857},"select",[36,72701,18576],{"class":101},[36,72703,47],{"class":42},[36,72705,72706],{"class":105},"\"gender\"",[36,72708,57043],{"class":101},[36,72710,47],{"class":42},[36,72712,72706],{"class":105},[36,72714,54864],{"class":42},[36,72716,72717,72719,72722,72724,72726,72728,72731,72733],{"class":38,"line":742},[36,72718,58790],{"class":42},[36,72720,72721],{"class":54857},"option",[36,72723,70206],{"class":101},[36,72725,47],{"class":42},[36,72727,13622],{"class":105},[36,72729,72730],{"class":42},">男\u003C\u002F",[36,72732,72721],{"class":54857},[36,72734,54864],{"class":42},[36,72736,72737,72739,72741,72743,72745,72747,72750,72752],{"class":38,"line":748},[36,72738,58790],{"class":42},[36,72740,72721],{"class":54857},[36,72742,70206],{"class":101},[36,72744,47],{"class":42},[36,72746,13691],{"class":105},[36,72748,72749],{"class":42},">女\u003C\u002F",[36,72751,72721],{"class":54857},[36,72753,54864],{"class":42},[36,72755,72756,72758,72760],{"class":38,"line":754},[36,72757,55333],{"class":42},[36,72759,72699],{"class":54857},[36,72761,54864],{"class":42},[36,72763,72764,72767,72769,72771,72773,72775,72777,72779,72782,72784,72786,72788],{"class":38,"line":760},[36,72765,72766],{"class":42},"    薪资：\u003C",[36,72768,57378],{"class":54857},[36,72770,57381],{"class":101},[36,72772,47],{"class":42},[36,72774,66254],{"class":105},[36,72776,57043],{"class":101},[36,72778,47],{"class":42},[36,72780,72781],{"class":105},"\"salary\"",[36,72783,18576],{"class":101},[36,72785,47],{"class":42},[36,72787,72781],{"class":105},[36,72789,62682],{"class":42},[36,72791,72792,72795,72797,72799,72801,72804,72806,72808,72810],{"class":38,"line":766},[36,72793,72794],{"class":42},"    就业城市：\u003C",[36,72796,72699],{"class":54857},[36,72798,18576],{"class":101},[36,72800,47],{"class":42},[36,72802,72803],{"class":105},"\"city\"",[36,72805,57043],{"class":101},[36,72807,47],{"class":42},[36,72809,72803],{"class":105},[36,72811,54864],{"class":42},[36,72813,72814,72816,72818,72820,72822,72825,72828,72830],{"class":38,"line":772},[36,72815,58790],{"class":42},[36,72817,72721],{"class":54857},[36,72819,70206],{"class":101},[36,72821,47],{"class":42},[36,72823,72824],{"class":105},"\"北京\"",[36,72826,72827],{"class":42},">北京\u003C\u002F",[36,72829,72721],{"class":54857},[36,72831,54864],{"class":42},[36,72833,72834,72836,72838,72840,72842,72845,72848,72850],{"class":38,"line":778},[36,72835,58790],{"class":42},[36,72837,72721],{"class":54857},[36,72839,70206],{"class":101},[36,72841,47],{"class":42},[36,72843,72844],{"class":105},"\"上海\"",[36,72846,72847],{"class":42},">上海\u003C\u002F",[36,72849,72721],{"class":54857},[36,72851,54864],{"class":42},[36,72853,72854,72856,72858,72860,72862,72865,72868,72870],{"class":38,"line":783},[36,72855,58790],{"class":42},[36,72857,72721],{"class":54857},[36,72859,70206],{"class":101},[36,72861,47],{"class":42},[36,72863,72864],{"class":105},"\"广州\"",[36,72866,72867],{"class":42},">广州\u003C\u002F",[36,72869,72721],{"class":54857},[36,72871,54864],{"class":42},[36,72873,72874,72876,72878,72880,72882,72885,72888,72890],{"class":38,"line":789},[36,72875,58790],{"class":42},[36,72877,72721],{"class":54857},[36,72879,70206],{"class":101},[36,72881,47],{"class":42},[36,72883,72884],{"class":105},"\"深圳\"",[36,72886,72887],{"class":42},">深圳\u003C\u002F",[36,72889,72721],{"class":54857},[36,72891,54864],{"class":42},[36,72893,72894,72896,72898,72900,72902,72905,72908,72910],{"class":38,"line":795},[36,72895,58790],{"class":42},[36,72897,72721],{"class":54857},[36,72899,70206],{"class":101},[36,72901,47],{"class":42},[36,72903,72904],{"class":105},"\"曹县\"",[36,72906,72907],{"class":42},">曹县\u003C\u002F",[36,72909,72721],{"class":54857},[36,72911,54864],{"class":42},[36,72913,72914,72916,72918],{"class":38,"line":801},[36,72915,55333],{"class":42},[36,72917,72699],{"class":54857},[36,72919,54864],{"class":42},[36,72921,72922,72924,72926,72928,72930,72933,72936,72938],{"class":38,"line":807},[36,72923,54898],{"class":42},[36,72925,57444],{"class":54857},[36,72927,57043],{"class":101},[36,72929,47],{"class":42},[36,72931,72932],{"class":105},"\"add\"",[36,72934,72935],{"class":42},">录入\u003C\u002F",[36,72937,57444],{"class":54857},[36,72939,54864],{"class":42},[36,72941,72942,72944,72946],{"class":38,"line":813},[36,72943,55974],{"class":42},[36,72945,70180],{"class":54857},[36,72947,54864],{"class":42},[36,72949,72950],{"class":38,"line":819},[36,72951,659],{"emptyLinePlaceholder":658},[36,72953,72954,72956,72958,72961,72963],{"class":38,"line":824},[36,72955,55701],{"class":42},[36,72957,10],{"class":54857},[36,72959,72960],{"class":42},">就业榜\u003C\u002F",[36,72962,10],{"class":54857},[36,72964,54864],{"class":42},[36,72966,72967,72969,72971],{"class":38,"line":829},[36,72968,55701],{"class":42},[36,72970,248],{"class":54857},[36,72972,54864],{"class":42},[36,72974,72975,72977,72979],{"class":38,"line":851},[36,72976,54898],{"class":42},[36,72978,251],{"class":54857},[36,72980,54864],{"class":42},[36,72982,72983,72985,72987],{"class":38,"line":868},[36,72984,58790],{"class":42},[36,72986,254],{"class":54857},[36,72988,54864],{"class":42},[36,72990,72991,72993,72995,72998,73000],{"class":38,"line":873},[36,72992,58858],{"class":42},[36,72994,257],{"class":54857},[36,72996,72997],{"class":42},">序号\u003C\u002F",[36,72999,257],{"class":54857},[36,73001,54864],{"class":42},[36,73003,73004,73006,73008,73011,73013],{"class":38,"line":891},[36,73005,58858],{"class":42},[36,73007,257],{"class":54857},[36,73009,73010],{"class":42},">姓名\u003C\u002F",[36,73012,257],{"class":54857},[36,73014,54864],{"class":42},[36,73016,73017,73019,73021,73024,73026],{"class":38,"line":906},[36,73018,58858],{"class":42},[36,73020,257],{"class":54857},[36,73022,73023],{"class":42},">年龄\u003C\u002F",[36,73025,257],{"class":54857},[36,73027,54864],{"class":42},[36,73029,73030,73032,73034,73037,73039],{"class":38,"line":925},[36,73031,58858],{"class":42},[36,73033,257],{"class":54857},[36,73035,73036],{"class":42},">性别\u003C\u002F",[36,73038,257],{"class":54857},[36,73040,54864],{"class":42},[36,73042,73043,73045,73047,73050,73052],{"class":38,"line":943},[36,73044,58858],{"class":42},[36,73046,257],{"class":54857},[36,73048,73049],{"class":42},">薪资\u003C\u002F",[36,73051,257],{"class":54857},[36,73053,54864],{"class":42},[36,73055,73056,73058,73060,73063,73065],{"class":38,"line":948},[36,73057,58858],{"class":42},[36,73059,257],{"class":54857},[36,73061,73062],{"class":42},">就业城市\u003C\u002F",[36,73064,257],{"class":54857},[36,73066,54864],{"class":42},[36,73068,73069,73071,73073,73076,73078],{"class":38,"line":971},[36,73070,58858],{"class":42},[36,73072,257],{"class":54857},[36,73074,73075],{"class":42},">操作\u003C\u002F",[36,73077,257],{"class":54857},[36,73079,54864],{"class":42},[36,73081,73082,73084,73086],{"class":38,"line":992},[36,73083,58963],{"class":42},[36,73085,254],{"class":54857},[36,73087,54864],{"class":42},[36,73089,73090,73092,73094],{"class":38,"line":1020},[36,73091,55333],{"class":42},[36,73093,251],{"class":54857},[36,73095,54864],{"class":42},[36,73097,73098,73100,73102],{"class":38,"line":1036},[36,73099,54898],{"class":42},[36,73101,265],{"class":54857},[36,73103,54864],{"class":42},[36,73105,73106],{"class":38,"line":1041},[36,73107,73108],{"class":3943},"      \u003C!-- \n",[36,73110,73111],{"class":38,"line":1052},[36,73112,73113],{"class":3943},"        \u003Ctr>\n",[36,73115,73116],{"class":38,"line":1065},[36,73117,73118],{"class":3943},"          \u003Ctd>1001\u003C\u002Ftd>\n",[36,73120,73121],{"class":38,"line":1077},[36,73122,73123],{"class":3943},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[36,73125,73126],{"class":38,"line":1082},[36,73127,73128],{"class":3943},"          \u003Ctd>19\u003C\u002Ftd>\n",[36,73130,73131],{"class":38,"line":1125},[36,73132,73133],{"class":3943},"          \u003Ctd>男\u003C\u002Ftd>\n",[36,73135,73136],{"class":38,"line":1164},[36,73137,73138],{"class":3943},"          \u003Ctd>15000\u003C\u002Ftd>\n",[36,73140,73141],{"class":38,"line":1169},[36,73142,73143],{"class":3943},"          \u003Ctd>上海\u003C\u002Ftd>\n",[36,73145,73146],{"class":38,"line":1180},[36,73147,73148],{"class":3943},"          \u003Ctd>\n",[36,73150,73151],{"class":38,"line":1198},[36,73152,73153],{"class":3943},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[36,73155,73156],{"class":38,"line":1215},[36,73157,73158],{"class":3943},"          \u003C\u002Ftd>\n",[36,73160,73161],{"class":38,"line":1236},[36,73162,73163],{"class":3943},"        \u003C\u002Ftr> \n",[36,73165,73166],{"class":38,"line":1245},[36,73167,73168],{"class":3943},"        -->\n",[36,73170,73171,73173,73175],{"class":38,"line":1250},[36,73172,55333],{"class":42},[36,73174,265],{"class":54857},[36,73176,54864],{"class":42},[36,73178,73179,73181,73183],{"class":38,"line":1265},[36,73180,55974],{"class":42},[36,73182,248],{"class":54857},[36,73184,54864],{"class":42},[36,73186,73187,73189,73191],{"class":38,"line":1281},[36,73188,55701],{"class":42},[36,73190,55370],{"class":54857},[36,73192,54864],{"class":42},[36,73194,73195],{"class":38,"line":1297},[36,73196,63513],{"class":3943},[36,73198,73199,73201,73204,73206,73208,73210,73212,73215],{"class":38,"line":1314},[36,73200,14882],{"class":46},[36,73202,73203],{"class":112}," uname",[36,73205,673],{"class":46},[36,73207,57953],{"class":42},[36,73209,57956],{"class":101},[36,73211,495],{"class":42},[36,73213,73214],{"class":105},"'.uname'",[36,73216,922],{"class":42},[36,73218,73219,73221,73223,73225,73227,73229,73231,73234],{"class":38,"line":1336},[36,73220,14882],{"class":46},[36,73222,19345],{"class":112},[36,73224,673],{"class":46},[36,73226,57953],{"class":42},[36,73228,57956],{"class":101},[36,73230,495],{"class":42},[36,73232,73233],{"class":105},"'.age'",[36,73235,922],{"class":42},[36,73237,73238,73240,73243,73245,73247,73249,73251,73254],{"class":38,"line":1356},[36,73239,14882],{"class":46},[36,73241,73242],{"class":112}," gender",[36,73244,673],{"class":46},[36,73246,57953],{"class":42},[36,73248,57956],{"class":101},[36,73250,495],{"class":42},[36,73252,73253],{"class":105},"'.gender'",[36,73255,922],{"class":42},[36,73257,73258,73260,73263,73265,73267,73269,73271,73274],{"class":38,"line":1361},[36,73259,14882],{"class":46},[36,73261,73262],{"class":112}," salary",[36,73264,673],{"class":46},[36,73266,57953],{"class":42},[36,73268,57956],{"class":101},[36,73270,495],{"class":42},[36,73272,73273],{"class":105},"'.salary'",[36,73275,922],{"class":42},[36,73277,73278,73280,73283,73285,73287,73289,73291,73294],{"class":38,"line":1407},[36,73279,14882],{"class":46},[36,73281,73282],{"class":112}," city",[36,73284,673],{"class":46},[36,73286,57953],{"class":42},[36,73288,57956],{"class":101},[36,73290,495],{"class":42},[36,73292,73293],{"class":105},"'.city'",[36,73295,922],{"class":42},[36,73297,73298,73300,73303,73305,73307,73309,73311,73314],{"class":38,"line":1423},[36,73299,14882],{"class":46},[36,73301,73302],{"class":112}," tbody",[36,73304,673],{"class":46},[36,73306,57953],{"class":42},[36,73308,57956],{"class":101},[36,73310,495],{"class":42},[36,73312,73313],{"class":105},"'tbody'",[36,73315,922],{"class":42},[36,73317,73318],{"class":38,"line":1439},[36,73319,659],{"emptyLinePlaceholder":658},[36,73321,73322],{"class":38,"line":1444},[36,73323,73324],{"class":3943},"    \u002F\u002F 获取所有带有name属性的元素\n",[36,73326,73327,73329,73332,73334,73336,73338,73340,73343],{"class":38,"line":1486},[36,73328,14882],{"class":46},[36,73330,73331],{"class":112}," items",[36,73333,673],{"class":46},[36,73335,57953],{"class":42},[36,73337,59237],{"class":101},[36,73339,495],{"class":42},[36,73341,73342],{"class":105},"'[name]'",[36,73344,922],{"class":42},[36,73346,73347],{"class":38,"line":1499},[36,73348,73349],{"class":3943},"    \u002F\u002F 声明一个空的数组\n",[36,73351,73352,73354,73356,73358],{"class":38,"line":1513},[36,73353,14882],{"class":46},[36,73355,61250],{"class":112},[36,73357,673],{"class":46},[36,73359,55395],{"class":42},[36,73361,73362],{"class":38,"line":1518},[36,73363,73364],{"class":3943},"    \u002F\u002F 1.录入模块\n",[36,73366,73367],{"class":38,"line":1529},[36,73368,73369],{"class":3943},"    \u002F\u002F 1.1这是一个表单提交事件\n",[36,73371,73372,73374,73377,73379,73381,73383,73385,73388],{"class":38,"line":1539},[36,73373,14882],{"class":46},[36,73375,73376],{"class":112}," info",[36,73378,673],{"class":46},[36,73380,57953],{"class":42},[36,73382,57956],{"class":101},[36,73384,495],{"class":42},[36,73386,73387],{"class":105},"'.info'",[36,73389,922],{"class":42},[36,73391,73392,73395,73397,73399,73402,73404,73406,73408,73410],{"class":38,"line":1544},[36,73393,73394],{"class":42},"    info.",[36,73396,61368],{"class":101},[36,73398,495],{"class":42},[36,73400,73401],{"class":105},"'submit'",[36,73403,478],{"class":42},[36,73405,58005],{"class":46},[36,73407,5386],{"class":42},[36,73409,3958],{"class":468},[36,73411,16102],{"class":42},[36,73413,73414],{"class":38,"line":1555},[36,73415,73416],{"class":3943},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[36,73418,73419,73422,73425],{"class":38,"line":1572},[36,73420,73421],{"class":42},"      e.",[36,73423,73424],{"class":101},"preventDefault",[36,73426,903],{"class":42},[36,73428,73429],{"class":38,"line":1592},[36,73430,63567],{"class":3943},[36,73432,73433],{"class":38,"line":1597},[36,73434,659],{"emptyLinePlaceholder":658},[36,73436,73437],{"class":38,"line":1610},[36,73438,73439],{"class":3943},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[36,73441,73442],{"class":38,"line":1632},[36,73443,73444],{"class":3943},"      \u002F\u002F 先遍历循环\n",[36,73446,73447,73449,73451,73453,73455,73457,73459,73461,73463,73466,73468,73470,73472],{"class":38,"line":1646},[36,73448,55841],{"class":46},[36,73450,5386],{"class":42},[36,73452,55404],{"class":46},[36,73454,13119],{"class":42},[36,73456,47],{"class":46},[36,73458,1004],{"class":112},[36,73460,13126],{"class":42},[36,73462,393],{"class":46},[36,73464,73465],{"class":42}," items.",[36,73467,55525],{"class":112},[36,73469,6914],{"class":42},[36,73471,6004],{"class":46},[36,73473,16102],{"class":42},[36,73475,73476,73478,73481,73483,73486],{"class":38,"line":1651},[36,73477,995],{"class":46},[36,73479,73480],{"class":42}," (items[i].value ",[36,73482,58042],{"class":46},[36,73484,73485],{"class":105}," ''",[36,73487,16102],{"class":42},[36,73489,73490,73493,73496,73498,73501],{"class":38,"line":1664},[36,73491,73492],{"class":46},"          return",[36,73494,73495],{"class":101}," alert",[36,73497,495],{"class":42},[36,73499,73500],{"class":105},"'输入内容不能为空'",[36,73502,922],{"class":42},[36,73504,73505],{"class":38,"line":1669},[36,73506,6239],{"class":42},[36,73508,73509],{"class":38,"line":1681},[36,73510,55955],{"class":42},[36,73512,73513],{"class":38,"line":1694},[36,73514,659],{"emptyLinePlaceholder":658},[36,73516,73517],{"class":38,"line":1699},[36,73518,73519],{"class":3943},"      \u002F\u002F 创建新的对象\n",[36,73521,73522,73524,73527,73529],{"class":38,"line":1714},[36,73523,61783],{"class":46},[36,73525,73526],{"class":112}," obj",[36,73528,673],{"class":46},[36,73530,19228],{"class":42},[36,73532,73533,73536,73538,73540,73542],{"class":38,"line":1729},[36,73534,73535],{"class":42},"        stuID: arr.",[36,73537,55525],{"class":112},[36,73539,49124],{"class":46},[36,73541,28732],{"class":112},[36,73543,35056],{"class":42},[36,73545,73546],{"class":38,"line":1746},[36,73547,73548],{"class":42},"        uname: uname.value,\n",[36,73550,73551],{"class":38,"line":1751},[36,73552,73553],{"class":42},"        age: age.value,\n",[36,73555,73556],{"class":38,"line":1765},[36,73557,73558],{"class":42},"        gender: gender.value,\n",[36,73560,73561],{"class":38,"line":1783},[36,73562,73563],{"class":42},"        salary: salary.value,\n",[36,73565,73566],{"class":38,"line":1799},[36,73567,73568],{"class":42},"        city: city.value\n",[36,73570,73571],{"class":38,"line":1807},[36,73572,55955],{"class":42},[36,73574,73575],{"class":38,"line":1812},[36,73576,73577],{"class":3943},"      \u002F\u002F console.log(obj);\n",[36,73579,73580],{"class":38,"line":1817},[36,73581,73582],{"class":3943},"      \u002F\u002F 追加到数组里面\n",[36,73584,73585,73587,73589],{"class":38,"line":1833},[36,73586,61562],{"class":42},[36,73588,55441],{"class":101},[36,73590,73591],{"class":42},"(obj)\n",[36,73593,73594],{"class":38,"line":1844},[36,73595,73596],{"class":3943},"      \u002F\u002F console.log(arr);\n",[36,73598,73599],{"class":38,"line":1864},[36,73600,73601],{"class":3943},"      \u002F\u002F 清空表单  reset重置表单\n",[36,73603,73604,73607,73609,73611],{"class":38,"line":1878},[36,73605,73606],{"class":112},"      this",[36,73608,842],{"class":42},[36,73610,2275],{"class":101},[36,73612,903],{"class":42},[36,73614,73615],{"class":38,"line":1891},[36,73616,73617],{"class":3943},"      \u002F\u002F 调用渲染函数\n",[36,73619,73620,73623],{"class":38,"line":1896},[36,73621,73622],{"class":101},"      render",[36,73624,903],{"class":42},[36,73626,73627],{"class":38,"line":1906},[36,73628,37021],{"class":42},[36,73630,73631],{"class":38,"line":1926},[36,73632,73633],{"class":3943},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[36,73635,73636,73639,73642],{"class":38,"line":1936},[36,73637,73638],{"class":46},"    function",[36,73640,73641],{"class":101}," render",[36,73643,14514],{"class":42},[36,73645,73646],{"class":38,"line":1946},[36,73647,73648],{"class":3943},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[36,73650,73651,73654,73656],{"class":38,"line":1957},[36,73652,73653],{"class":42},"      tbody.innerHTML ",[36,73655,47],{"class":46},[36,73657,73658],{"class":105}," ''\n",[36,73660,73661],{"class":38,"line":2008},[36,73662,73663],{"class":3943},"      \u002F\u002F 遍历数组\n",[36,73665,73666,73668,73670,73672,73674,73676,73678,73680,73682,73684,73686,73688,73690],{"class":38,"line":2022},[36,73667,55841],{"class":46},[36,73669,5386],{"class":42},[36,73671,55404],{"class":46},[36,73673,13119],{"class":42},[36,73675,47],{"class":46},[36,73677,1004],{"class":112},[36,73679,13126],{"class":42},[36,73681,393],{"class":46},[36,73683,55522],{"class":42},[36,73685,55525],{"class":112},[36,73687,6914],{"class":42},[36,73689,6004],{"class":46},[36,73691,16102],{"class":42},[36,73693,73694,73696,73699,73701,73703,73706,73708,73711],{"class":38,"line":2028},[36,73695,64825],{"class":46},[36,73697,73698],{"class":112}," tr",[36,73700,673],{"class":46},[36,73702,57953],{"class":42},[36,73704,73705],{"class":101},"createElement",[36,73707,495],{"class":42},[36,73709,73710],{"class":105},"'tr'",[36,73712,922],{"class":42},[36,73714,73715,73718,73720],{"class":38,"line":2033},[36,73716,73717],{"class":42},"        tr.innerHTML ",[36,73719,47],{"class":46},[36,73721,73722],{"class":105}," `\n",[36,73724,73725,73728,73730,73732,73734,73737,73740],{"class":38,"line":2054},[36,73726,73727],{"class":105},"        \u003Ctd>${",[36,73729,7578],{"class":42},[36,73731,4760],{"class":105},[36,73733,4316],{"class":42},[36,73735,73736],{"class":105},"].",[36,73738,73739],{"class":42},"stuID",[36,73741,73742],{"class":105},"}\u003C\u002Ftd>\n",[36,73744,73745,73748,73750,73752,73754,73756,73759],{"class":38,"line":2059},[36,73746,73747],{"class":105},"          \u003Ctd>${",[36,73749,7578],{"class":42},[36,73751,4760],{"class":105},[36,73753,4316],{"class":42},[36,73755,73736],{"class":105},[36,73757,73758],{"class":42},"uname",[36,73760,73742],{"class":105},[36,73762,73763,73765,73767,73769,73771,73773,73776],{"class":38,"line":2064},[36,73764,73747],{"class":105},[36,73766,7578],{"class":42},[36,73768,4760],{"class":105},[36,73770,4316],{"class":42},[36,73772,73736],{"class":105},[36,73774,73775],{"class":42},"age",[36,73777,73742],{"class":105},[36,73779,73780,73782,73784,73786,73788,73790,73793],{"class":38,"line":2081},[36,73781,73747],{"class":105},[36,73783,7578],{"class":42},[36,73785,4760],{"class":105},[36,73787,4316],{"class":42},[36,73789,73736],{"class":105},[36,73791,73792],{"class":42},"gender",[36,73794,73742],{"class":105},[36,73796,73797,73799,73801,73803,73805,73807,73810],{"class":38,"line":36396},[36,73798,73747],{"class":105},[36,73800,7578],{"class":42},[36,73802,4760],{"class":105},[36,73804,4316],{"class":42},[36,73806,73736],{"class":105},[36,73808,73809],{"class":42},"salary",[36,73811,73742],{"class":105},[36,73813,73814,73816,73818,73820,73822,73824,73827],{"class":38,"line":36402},[36,73815,73747],{"class":105},[36,73817,7578],{"class":42},[36,73819,4760],{"class":105},[36,73821,4316],{"class":42},[36,73823,73736],{"class":105},[36,73825,73826],{"class":42},"city",[36,73828,73742],{"class":105},[36,73830,73831],{"class":38,"line":36411},[36,73832,73148],{"class":105},[36,73834,73835,73838,73840],{"class":38,"line":36417},[36,73836,73837],{"class":105},"            \u003Ca href=\"javascript:\" data-id=${",[36,73839,4316],{"class":42},[36,73841,73842],{"class":105},"}>删除\u003C\u002Fa>\n",[36,73844,73845],{"class":38,"line":36426},[36,73846,73847],{"class":105},"          \u003C\u002Ftd> \n",[36,73849,73850],{"class":38,"line":36432},[36,73851,73852],{"class":105},"          `\n",[36,73854,73855],{"class":38,"line":36438},[36,73856,73857],{"class":3943},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[36,73859,73860,73863,73866],{"class":38,"line":36447},[36,73861,73862],{"class":42},"        tbody.",[36,73864,73865],{"class":101},"appendChild",[36,73867,73868],{"class":42},"(tr)\n",[36,73870,73871],{"class":38,"line":36453},[36,73872,55955],{"class":42},[36,73874,73875],{"class":38,"line":36464},[36,73876,5899],{"class":42},[36,73878,73879],{"class":38,"line":36470},[36,73880,659],{"emptyLinePlaceholder":658},[36,73882,73883],{"class":38,"line":36489},[36,73884,73885],{"class":3943},"    \u002F\u002F 3.删除委托\n",[36,73887,73888],{"class":38,"line":36495},[36,73889,73890],{"class":3943},"    \u002F\u002F 3.1 事件委托 tbody\n",[36,73892,73893,73896,73898,73900,73902,73904,73906,73908,73910],{"class":38,"line":36506},[36,73894,73895],{"class":42},"    tbody.",[36,73897,61368],{"class":101},[36,73899,495],{"class":42},[36,73901,61373],{"class":105},[36,73903,478],{"class":42},[36,73905,58005],{"class":46},[36,73907,5386],{"class":42},[36,73909,3958],{"class":468},[36,73911,16102],{"class":42},[36,73913,73914,73916,73918,73920,73922],{"class":38,"line":36512},[36,73915,58036],{"class":46},[36,73917,70589],{"class":42},[36,73919,58042],{"class":46},[36,73921,71811],{"class":105},[36,73923,16102],{"class":42},[36,73925,73926],{"class":38,"line":36532},[36,73927,73928],{"class":3943},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[36,73930,73931],{"class":38,"line":36548},[36,73932,73933],{"class":3943},"        \u002F\u002F console.log(e.target.dataset.id);\n",[36,73935,73936],{"class":38,"line":36554},[36,73937,73938],{"class":3943},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[36,73940,73941,73944,73946,73949,73951],{"class":38,"line":36568},[36,73942,73943],{"class":42},"        arr.",[36,73945,61565],{"class":101},[36,73947,73948],{"class":42},"(e.target.dataset.id, ",[36,73950,4092],{"class":112},[36,73952,922],{"class":42},[36,73954,73955],{"class":38,"line":36574},[36,73956,73957],{"class":3943},"        \u002F\u002F 重新渲染一次\n",[36,73959,73960,73963],{"class":38,"line":36580},[36,73961,73962],{"class":101},"        render",[36,73964,903],{"class":42},[36,73966,73967],{"class":38,"line":36591},[36,73968,55955],{"class":42},[36,73970,73971],{"class":38,"line":36597},[36,73972,37021],{"class":42},[36,73974,73975,73977,73979],{"class":38,"line":36603},[36,73976,55974],{"class":42},[36,73978,55370],{"class":54857},[36,73980,54864],{"class":42},[36,73982,73983],{"class":38,"line":36613},[36,73984,659],{"emptyLinePlaceholder":658},[36,73986,73987,73989,73991],{"class":38,"line":36619},[36,73988,55342],{"class":42},[36,73990,55357],{"class":54857},[36,73992,54864],{"class":42},[36,73994,73995],{"class":38,"line":36630},[36,73996,659],{"emptyLinePlaceholder":658},[36,73998,73999,74001,74003],{"class":38,"line":36636},[36,74000,55342],{"class":42},[36,74002,54192],{"class":54857},[36,74004,54864],{"class":42},[19,74006,74007],{},"样式：",[26,74009,74013],{"className":74010,"code":74011,"language":74012,"meta":31,"style":31},"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",[33,74014,74015,74020,74030,74039,74043,74047,74052,74062,74067,74071,74076,74086,74091,74100,74104,74108,74113,74118,74128,74138,74143,74147,74152,74161,74171,74176,74186,74196,74200,74205,74213,74217,74222,74227,74232,74240,74249,74253,74258,74267,74271,74276,74285,74289,74294,74303,74312,74320,74324,74329,74338,74348,74357,74367,74373,74382,74392,74402,74406,74411,74420,74428,74438,74446,74455,74464,74474,74482,74486,74491,74500],{"__ignoreMap":31},[36,74016,74017],{"class":38,"line":39},[36,74018,74019],{"class":42},"* {\n",[36,74021,74022,74025,74027],{"class":38,"line":53},[36,74023,74024],{"class":54857},"  margin",[36,74026,54994],{"class":42},[36,74028,74029],{"class":105},"0;\n",[36,74031,74032,74035,74037],{"class":38,"line":196},[36,74033,74034],{"class":105},"  padding",[36,74036,54994],{"class":42},[36,74038,74029],{"class":105},[36,74040,74041],{"class":38,"line":642},[36,74042,5300],{"class":42},[36,74044,74045],{"class":38,"line":655},[36,74046,659],{"emptyLinePlaceholder":658},[36,74048,74049],{"class":38,"line":662},[36,74050,74051],{"class":105},"a {\n",[36,74053,74054,74057,74059],{"class":38,"line":667},[36,74055,74056],{"class":54857},"  text-decoration",[36,74058,54994],{"class":42},[36,74060,74061],{"class":105},"none;\n",[36,74063,74064],{"class":38,"line":679},[36,74065,74066],{"class":105},"  color:#721c24;\n",[36,74068,74069],{"class":38,"line":685},[36,74070,5300],{"class":42},[36,74072,74073],{"class":38,"line":691},[36,74074,74075],{"class":105},"h1 {\n",[36,74077,74078,74081,74083],{"class":38,"line":696},[36,74079,74080],{"class":54857},"  text-align",[36,74082,54994],{"class":42},[36,74084,74085],{"class":105},"center;\n",[36,74087,74088],{"class":38,"line":702},[36,74089,74090],{"class":105},"  color:#333;\n",[36,74092,74093,74095,74097],{"class":38,"line":708},[36,74094,74024],{"class":54857},[36,74096,54994],{"class":42},[36,74098,74099],{"class":105},"20px 0;\n",[36,74101,74102],{"class":38,"line":713},[36,74103,6377],{"class":42},[36,74105,74106],{"class":38,"line":719},[36,74107,5300],{"class":42},[36,74109,74110],{"class":38,"line":725},[36,74111,74112],{"class":105},"table {\n",[36,74114,74115],{"class":38,"line":731},[36,74116,74117],{"class":105},"  margin:0 auto;\n",[36,74119,74120,74123,74125],{"class":38,"line":736},[36,74121,74122],{"class":54857},"  width",[36,74124,54994],{"class":42},[36,74126,74127],{"class":105},"800px;\n",[36,74129,74130,74133,74135],{"class":38,"line":742},[36,74131,74132],{"class":54857},"  border-collapse",[36,74134,54994],{"class":42},[36,74136,74137],{"class":105},"collapse;\n",[36,74139,74140],{"class":38,"line":748},[36,74141,74142],{"class":105},"  color:#004085;\n",[36,74144,74145],{"class":38,"line":754},[36,74146,5300],{"class":42},[36,74148,74149],{"class":38,"line":760},[36,74150,74151],{"class":105},"th {\n",[36,74153,74154,74156,74158],{"class":38,"line":766},[36,74155,74034],{"class":54857},[36,74157,54994],{"class":42},[36,74159,74160],{"class":105},"10px;\n",[36,74162,74163,74166,74168],{"class":38,"line":772},[36,74164,74165],{"class":54857},"  background",[36,74167,54994],{"class":42},[36,74169,74170],{"class":3943},"#cfe5ff;\n",[36,74172,74173],{"class":38,"line":778},[36,74174,74175],{"class":42},"  \n",[36,74177,74178,74181,74183],{"class":38,"line":783},[36,74179,74180],{"class":54857},"  font-size",[36,74182,54994],{"class":42},[36,74184,74185],{"class":105},"20px;\n",[36,74187,74188,74191,74193],{"class":38,"line":789},[36,74189,74190],{"class":54857},"  font-weight",[36,74192,54994],{"class":42},[36,74194,74195],{"class":105},"400;\n",[36,74197,74198],{"class":38,"line":795},[36,74199,5300],{"class":42},[36,74201,74202],{"class":38,"line":801},[36,74203,74204],{"class":105},"td,th {\n",[36,74206,74207,74210],{"class":38,"line":807},[36,74208,74209],{"class":105},"  border:1px solid",[36,74211,74212],{"class":3943}," #b8daff;\n",[36,74214,74215],{"class":38,"line":813},[36,74216,5300],{"class":42},[36,74218,74219],{"class":38,"line":819},[36,74220,74221],{"class":105},"td {\n",[36,74223,74224],{"class":38,"line":824},[36,74225,74226],{"class":105},"  padding:10px;\n",[36,74228,74229],{"class":38,"line":829},[36,74230,74231],{"class":105},"  color:#666;\n",[36,74233,74234,74236,74238],{"class":38,"line":851},[36,74235,74080],{"class":54857},[36,74237,54994],{"class":42},[36,74239,74085],{"class":105},[36,74241,74242,74244,74246],{"class":38,"line":868},[36,74243,74180],{"class":54857},[36,74245,54994],{"class":42},[36,74247,74248],{"class":105},"16px;\n",[36,74250,74251],{"class":38,"line":873},[36,74252,5300],{"class":42},[36,74254,74255],{"class":38,"line":891},[36,74256,74257],{"class":105},"tbody tr {\n",[36,74259,74260,74262,74264],{"class":38,"line":906},[36,74261,74165],{"class":54857},[36,74263,54994],{"class":42},[36,74265,74266],{"class":3943},"#fff;\n",[36,74268,74269],{"class":38,"line":925},[36,74270,5300],{"class":42},[36,74272,74273],{"class":38,"line":943},[36,74274,74275],{"class":105},"tbody tr:hover {\n",[36,74277,74278,74280,74282],{"class":38,"line":948},[36,74279,74165],{"class":54857},[36,74281,54994],{"class":42},[36,74283,74284],{"class":3943},"#e1ecf8;\n",[36,74286,74287],{"class":38,"line":971},[36,74288,5300],{"class":42},[36,74290,74291],{"class":38,"line":992},[36,74292,74293],{"class":105},".info {\n",[36,74295,74296,74298,74300],{"class":38,"line":1020},[36,74297,74122],{"class":54857},[36,74299,54994],{"class":42},[36,74301,74302],{"class":105},"900px;\n",[36,74304,74305,74307,74309],{"class":38,"line":1036},[36,74306,74024],{"class":54857},[36,74308,54994],{"class":42},[36,74310,74311],{"class":105},"50px auto;\n",[36,74313,74314,74316,74318],{"class":38,"line":1041},[36,74315,74080],{"class":54857},[36,74317,54994],{"class":42},[36,74319,74085],{"class":105},[36,74321,74322],{"class":38,"line":1052},[36,74323,5300],{"class":42},[36,74325,74326],{"class":38,"line":1065},[36,74327,74328],{"class":105},".info  input, .info select {\n",[36,74330,74331,74333,74335],{"class":38,"line":1077},[36,74332,74122],{"class":54857},[36,74334,54994],{"class":42},[36,74336,74337],{"class":105},"80px;\n",[36,74339,74340,74343,74345],{"class":38,"line":1082},[36,74341,74342],{"class":54857},"  height",[36,74344,54994],{"class":42},[36,74346,74347],{"class":105},"27px;\n",[36,74349,74350,74353,74355],{"class":38,"line":1125},[36,74351,74352],{"class":54857},"  outline",[36,74354,54994],{"class":42},[36,74356,74061],{"class":105},[36,74358,74359,74362,74364],{"class":38,"line":1164},[36,74360,74361],{"class":54857},"  border-radius",[36,74363,54994],{"class":42},[36,74365,74366],{"class":105},"5px;\n",[36,74368,74369,74371],{"class":38,"line":1169},[36,74370,74209],{"class":105},[36,74372,74212],{"class":3943},[36,74374,74375,74378,74380],{"class":38,"line":1180},[36,74376,74377],{"class":54857},"  padding-left",[36,74379,54994],{"class":42},[36,74381,74366],{"class":105},[36,74383,74384,74387,74389],{"class":38,"line":1198},[36,74385,74386],{"class":54857},"  box-sizing",[36,74388,54994],{"class":42},[36,74390,74391],{"class":105},"border-box;\n",[36,74393,74394,74397,74399],{"class":38,"line":1215},[36,74395,74396],{"class":54857},"  margin-right",[36,74398,54994],{"class":42},[36,74400,74401],{"class":105},"15px;\n",[36,74403,74404],{"class":38,"line":1236},[36,74405,5300],{"class":42},[36,74407,74408],{"class":38,"line":1245},[36,74409,74410],{"class":105},".info button {\n",[36,74412,74413,74415,74417],{"class":38,"line":1250},[36,74414,74122],{"class":54857},[36,74416,54994],{"class":42},[36,74418,74419],{"class":105},"60px;\n",[36,74421,74422,74424,74426],{"class":38,"line":1265},[36,74423,74342],{"class":54857},[36,74425,54994],{"class":42},[36,74427,74347],{"class":105},[36,74429,74430,74433,74435],{"class":38,"line":1281},[36,74431,74432],{"class":54857},"  background-color",[36,74434,54994],{"class":42},[36,74436,74437],{"class":3943},"#004085;\n",[36,74439,74440,74442,74444],{"class":38,"line":1297},[36,74441,74352],{"class":54857},[36,74443,54994],{"class":42},[36,74445,74061],{"class":105},[36,74447,74448,74451,74453],{"class":38,"line":1314},[36,74449,74450],{"class":54857},"  border",[36,74452,54994],{"class":42},[36,74454,74029],{"class":105},[36,74456,74457,74460,74462],{"class":38,"line":1336},[36,74458,74459],{"class":54857},"  color",[36,74461,54994],{"class":42},[36,74463,74266],{"class":3943},[36,74465,74466,74469,74471],{"class":38,"line":1356},[36,74467,74468],{"class":54857},"  cursor",[36,74470,54994],{"class":42},[36,74472,74473],{"class":105},"pointer;\n",[36,74475,74476,74478,74480],{"class":38,"line":1361},[36,74477,74361],{"class":54857},[36,74479,54994],{"class":42},[36,74481,74366],{"class":105},[36,74483,74484],{"class":38,"line":1407},[36,74485,5300],{"class":42},[36,74487,74488],{"class":38,"line":1423},[36,74489,74490],{"class":105},".info .age {\n",[36,74492,74493,74495,74497],{"class":38,"line":1439},[36,74494,74122],{"class":54857},[36,74496,54994],{"class":42},[36,74498,74499],{"class":105},"50px;\n",[36,74501,74502],{"class":38,"line":1444},[36,74503,5300],{"class":42},[19,74505,74506],{},"思路：",[19,74508,74509],{},[5198,74510],{"alt":31,"src":74511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,74513,74514],{},[5198,74515],{"alt":31,"src":74516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,74518,74519],{},[5198,74520],{"alt":31,"src":74521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[318,74523,74525],{"id":74524},"_3315-重绘回流","3.3.15 重绘回流",[19,74527,74528],{},[5198,74529],{"alt":31,"src":74530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,74532,74533],{},[5198,74534],{"alt":31,"src":74535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,74537,74538],{},[5198,74539],{"alt":31,"src":74540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,74542,74544],{"id":74543},"_34-bom","3.4 BOM",[19,74546,74547],{},[5198,74548],{"alt":31,"src":74549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,74551,74552],{},"平时写的document省略了window而已，实际上是window.document",[19,74554,74555],{},"函数也是这样，调用的时候实际为window.fn()",[19,74557,74558],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,74560,74561],{},"window大部分情况下可以省略",[318,74563,74565],{"id":74564},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,74567,74568],{},"只执行一次",[19,74570,74571],{},[5198,74572],{"alt":31,"src":74573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,74575,74576],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,74578,74579],{},[5198,74580],{"alt":31,"src":74581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[318,74583,74585],{"id":74584},"_342-js执行机制","3.4.2 JS执行机制",[19,74587,74588],{},[5198,74589],{"alt":31,"src":74590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,74592,74593],{},"两个的结果都是1111 3333 2222",[19,74595,74596],{},[5198,74597],{"alt":31,"src":74598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,74600,74601],{},[5198,74602],{"alt":31,"src":74603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,74605,74606],{},[5198,74607],{"alt":31,"src":74608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,74610,74611],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,74613,74614],{},"工作流程：",[19,74616,74617],{},[5198,74618],{"alt":31,"src":74619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,74621,74622],{},[5198,74623],{"alt":31,"src":74624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,74626,74627],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,74629,74630],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[318,74632,74634],{"id":74633},"_343-location对象","3.4.3 location对象",[19,74636,74637],{},"location对象属于window这个全局对象下的，可以 省略window",[19,74639,74640],{},[5198,74641],{"alt":31,"src":74642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,74644,74645],{},"href可以跳转页面",[211,74647,74648],{},[214,74649,74650],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,74652,74653],{},"search得到提交信息之后网站后边的地址",[19,74655,74656],{},[5198,74657],{"alt":31,"src":74658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,74660,74661],{},[5198,74662],{"alt":31,"src":74663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[211,74665,74666],{"start":53},[214,74667,74668],{},"hash:这个获取单页面应用#后边的地址",[19,74670,74671],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,74673,74674],{},[5198,74675],{"alt":31,"src":74676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[26,74678,74680],{"className":56624,"code":74679,"language":56626,"meta":31,"style":31},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[33,74681,74682,74702,74722],{"__ignoreMap":31},[36,74683,74684,74686,74688,74690,74692,74695,74698,74700],{"class":38,"line":39},[36,74685,55701],{"class":42},[36,74687,4113],{"class":54857},[36,74689,64612],{"class":101},[36,74691,47],{"class":42},[36,74693,74694],{"class":105},"\"#\u002Fmy\"",[36,74696,74697],{"class":42},">我的\u003C\u002F",[36,74699,4113],{"class":54857},[36,74701,54864],{"class":42},[36,74703,74704,74706,74708,74710,74712,74715,74718,74720],{"class":38,"line":53},[36,74705,55701],{"class":42},[36,74707,4113],{"class":54857},[36,74709,64612],{"class":101},[36,74711,47],{"class":42},[36,74713,74714],{"class":105},"\"#\u002Ffriend\"",[36,74716,74717],{"class":42},">关注\u003C\u002F",[36,74719,4113],{"class":54857},[36,74721,54864],{"class":42},[36,74723,74724,74726,74728,74730,74732,74735,74738,74740],{"class":38,"line":196},[36,74725,55701],{"class":42},[36,74727,4113],{"class":54857},[36,74729,64612],{"class":101},[36,74731,47],{"class":42},[36,74733,74734],{"class":105},"\"#\u002Fdownload\"",[36,74736,74737],{"class":42},">下载\u003C\u002F",[36,74739,4113],{"class":54857},[36,74741,54864],{"class":42},[19,74743,74744],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[211,74746,74747],{"start":196},[214,74748,74749,74750,74752,74753,74755],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[57273,74751],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[57273,74754],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[318,74757,74759],{"id":74758},"_345-navigator对象","3.4.5 navigator对象",[19,74761,74762],{},[5198,74763],{"alt":31,"src":74764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[26,74766,74770],{"className":74767,"code":74768,"language":74769,"meta":31,"style":31},"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",[33,74771,74772,74777,74788,74800,74805,74856,74897,74902,74915,74927,74932],{"__ignoreMap":31},[36,74773,74774],{"class":38,"line":39},[36,74775,74776],{"class":3943},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[36,74778,74779,74781,74783,74785],{"class":38,"line":53},[36,74780,4101],{"class":46},[36,74782,495],{"class":42},[36,74784,58005],{"class":46},[36,74786,74787],{"class":42}," () { \n",[36,74789,74790,74792,74795,74797],{"class":38,"line":196},[36,74791,10483],{"class":46},[36,74793,74794],{"class":112}," userAgent",[36,74796,673],{"class":46},[36,74798,74799],{"class":42}," navigator.userAgent \n",[36,74801,74802],{"class":38,"line":642},[36,74803,74804],{"class":3943},"\u002F\u002F 验证是否为Android或iPhone \n",[36,74806,74807,74809,74812,74814,74817,74820,74822,74824,74827,74829,74832,74836,74838,74840,74842,74845,74847,74849,74851,74853],{"class":38,"line":655},[36,74808,10483],{"class":46},[36,74810,74811],{"class":112}," android",[36,74813,673],{"class":46},[36,74815,74816],{"class":42}," userAgent.",[36,74818,74819],{"class":101},"match",[36,74821,495],{"class":42},[36,74823,4455],{"class":105},[36,74825,74826],{"class":51534},"(Android);",[36,74828,4855],{"class":46},[36,74830,74831],{"class":112},"[\\s",[36,74833,74835],{"class":74834},"snhLl","\\\u002F",[36,74837,4809],{"class":112},[36,74839,4354],{"class":46},[36,74841,495],{"class":51534},[36,74843,74844],{"class":112},"[\\d.]",[36,74846,4354],{"class":46},[36,74848,4304],{"class":51534},[36,74850,4855],{"class":46},[36,74852,4455],{"class":105},[36,74854,74855],{"class":42},") \n",[36,74857,74858,74860,74863,74865,74867,74869,74871,74873,74876,74879,74882,74884,74886,74889,74891,74893,74895],{"class":38,"line":662},[36,74859,10483],{"class":46},[36,74861,74862],{"class":112}," iphone",[36,74864,673],{"class":46},[36,74866,74816],{"class":42},[36,74868,74819],{"class":101},[36,74870,495],{"class":42},[36,74872,4455],{"class":105},[36,74874,74875],{"class":51534},"(iPhone",[36,74877,74878],{"class":112},"\\s",[36,74880,74881],{"class":51534},"OS)",[36,74883,74878],{"class":112},[36,74885,495],{"class":51534},[36,74887,74888],{"class":112},"[\\d_]",[36,74890,4354],{"class":46},[36,74892,4304],{"class":51534},[36,74894,4455],{"class":105},[36,74896,74855],{"class":42},[36,74898,74899],{"class":38,"line":667},[36,74900,74901],{"class":3943},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[36,74903,74904,74906,74909,74912],{"class":38,"line":679},[36,74905,2067],{"class":46},[36,74907,74908],{"class":42}," (android ",[36,74910,74911],{"class":46},"||",[36,74913,74914],{"class":42}," iphone) { \n",[36,74916,74917,74920,74922,74925],{"class":38,"line":685},[36,74918,74919],{"class":42},"location.href ",[36,74921,47],{"class":46},[36,74923,74924],{"class":105}," 'http:\u002F\u002Fm.itcast.cn'",[36,74926,6377],{"class":42},[36,74928,74929],{"class":38,"line":691},[36,74930,74931],{"class":42},"} \n",[36,74933,74934],{"class":38,"line":696},[36,74935,74936],{"class":42},"})()\n",[318,74938,74940],{"id":74939},"_346-histroy对象","3.4.6 histroy对象",[19,74942,74943],{},[5198,74944],{"alt":31,"src":74945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,74947,74948],{},"浏览器地址的前进与后退!!!",[19,74950,74951],{},"history.back() 等效于 history.go(-1)",[19,74953,74954],{},"history.forward() 等效于 history.go(1)",[14,74956,74958],{"id":74957},"_35-本地存储","3.5 本地存储",[211,74960,74961,74964,74967],{},[214,74962,74963],{},"数据存储在用户浏览器中",[214,74965,74966],{},"设置、读取方便、甚至页面刷新不丢失数据",[214,74968,74969],{},"容量较大，sessionStorage和localStorage约 5M 左右",[318,74971,74973],{"id":74972},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,74975,74976],{},"只能存储字符串",[19,74978,74979],{},[5198,74980],{"alt":31,"src":74981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,74983,74984],{},[5198,74985],{"alt":31,"src":74986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,74988,74989],{},"键值对要加引号,不然就会当变量来看了",[19,74991,74992],{},"localStorage.setItem('uname', 'pink')",[19,74994,74995],{},"刷新之后信息不再丢失",[19,74997,74998],{},"操作key,value会跟着变",[19,75000,75001],{},"删除只删除键就可以,即名字",[19,75003,74992],{},[19,75005,75006],{},"改:",[19,75008,75009],{},"localStorage.setItem('uname','red')",[19,75011,75012],{},"有这个键就是改,没有这个键就是改",[19,75014,75015],{},[5198,75016],{"alt":31,"src":75017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,75019,75020],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,75022,75023],{},[5198,75024],{"alt":31,"src":75025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,75027,75028],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[318,75030,75032],{"id":75031},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,75034,75035],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,75037,75038],{},"特性:",[211,75040,75041,75044,75047,75050],{},[214,75042,75043],{},"生命周期为关闭浏览器窗口",[214,75045,75046],{},"在同一个窗口(页面)下数据可以共享",[214,75048,75049],{},"以键值对的形式存储使用",[214,75051,75052],{},"用法跟localStorage 基本相同",[318,75054,75056],{"id":75055},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,75058,75059],{},"本地只能存储字符串,无法直接存储复杂数据类型",[26,75061,75063],{"className":56624,"code":75062,"language":56626,"meta":31,"style":31},"\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",[33,75064,75065,75073,75078,75083,75088,75093,75097,75102,75107],{"__ignoreMap":31},[36,75066,75067,75069,75071],{"class":38,"line":39},[36,75068,393],{"class":42},[36,75070,55370],{"class":54857},[36,75072,54864],{"class":42},[36,75074,75075],{"class":38,"line":53},[36,75076,75077],{"class":42},"    const obj = {\n",[36,75079,75080],{"class":38,"line":196},[36,75081,75082],{"class":42},"      uname: 'pink老师',\n",[36,75084,75085],{"class":38,"line":642},[36,75086,75087],{"class":42},"      age: 18,\n",[36,75089,75090],{"class":38,"line":655},[36,75091,75092],{"class":42},"      gender: '女'\n",[36,75094,75095],{"class":38,"line":662},[36,75096,5899],{"class":42},[36,75098,75099],{"class":38,"line":667},[36,75100,75101],{"class":42},"    \u002F\u002F 存储复杂数据类型\n",[36,75103,75104],{"class":38,"line":679},[36,75105,75106],{"class":42},"    localStorage.setItem('obj', obj)\n",[36,75108,75109,75111,75113],{"class":38,"line":685},[36,75110,55974],{"class":42},[36,75112,55370],{"class":54857},[36,75114,54864],{"class":42},[19,75116,75117],{},[5198,75118],{"alt":31,"src":75119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,75121,75122],{},"如果获取一下数据:",[19,75124,75125],{},"log(localStorage.getItem('obj'))",[19,75127,75128],{},[5198,75129],{"alt":31,"src":75130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,75132,75133],{},"发现直接存对象是使用不了的!!!",[25619,75135,75137],{"id":75136},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,75139,75140],{},[5198,75141],{"alt":31,"src":75142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[26,75144,75146],{"className":54190,"code":75145,"language":54192,"meta":31,"style":31},"\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",[33,75147,75148,75156,75166,75176,75185,75193,75197,75201,75227,75246,75254,75258,75263,75268],{"__ignoreMap":31},[36,75149,75150,75152,75154],{"class":38,"line":39},[36,75151,393],{"class":42},[36,75153,55370],{"class":54857},[36,75155,54864],{"class":42},[36,75157,75158,75160,75162,75164],{"class":38,"line":53},[36,75159,14882],{"class":46},[36,75161,73526],{"class":112},[36,75163,673],{"class":46},[36,75165,19228],{"class":42},[36,75167,75168,75171,75174],{"class":38,"line":196},[36,75169,75170],{"class":42},"      uname: ",[36,75172,75173],{"class":105},"'pink老师'",[36,75175,35056],{"class":42},[36,75177,75178,75181,75183],{"class":38,"line":642},[36,75179,75180],{"class":42},"      age: ",[36,75182,4521],{"class":112},[36,75184,35056],{"class":42},[36,75186,75187,75190],{"class":38,"line":655},[36,75188,75189],{"class":42},"      gender: ",[36,75191,75192],{"class":105},"'女'\n",[36,75194,75195],{"class":38,"line":662},[36,75196,5899],{"class":42},[36,75198,75199],{"class":38,"line":667},[36,75200,75101],{"class":3943},[36,75202,75203,75206,75209,75211,75214,75216,75219,75221,75224],{"class":38,"line":679},[36,75204,75205],{"class":42},"  localStorage.",[36,75207,75208],{"class":101},"setItem",[36,75210,495],{"class":42},[36,75212,75213],{"class":105},"'obj'",[36,75215,478],{"class":42},[36,75217,75218],{"class":112},"JSON",[36,75220,842],{"class":42},[36,75222,75223],{"class":101},"stringify",[36,75225,75226],{"class":42},"(obj))\n",[36,75228,75229,75232,75234,75237,75240,75242,75244],{"class":38,"line":685},[36,75230,75231],{"class":42},"  console.",[36,75233,61802],{"class":101},[36,75235,75236],{"class":42},"(localStorage.",[36,75238,75239],{"class":101},"getItem",[36,75241,495],{"class":42},[36,75243,75213],{"class":105},[36,75245,2005],{"class":42},[36,75247,75248,75250,75252],{"class":38,"line":691},[36,75249,55974],{"class":42},[36,75251,55370],{"class":54857},[36,75253,54864],{"class":42},[36,75255,75256],{"class":38,"line":696},[36,75257,74175],{"class":42},[36,75259,75260],{"class":38,"line":702},[36,75261,75262],{"class":42},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[36,75264,75265],{"class":38,"line":708},[36,75266,75267],{"class":42},"  类型是字符串的\n",[36,75269,75270],{"class":38,"line":713},[36,75271,75272],{"class":42},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[25619,75274,75276],{"id":75275},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,75278,75279],{},[5198,75280],{"alt":31,"src":75281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,75283,75284],{},[5198,75285],{"alt":31,"src":75286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[26,75288,75290],{"className":56624,"code":75289,"language":56626,"meta":31,"style":31},"  \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",[33,75291,75292,75300,75304,75308,75312,75316,75320,75325,75330,75335,75340,75345,75350,75355,75360],{"__ignoreMap":31},[36,75293,75294,75296,75298],{"class":38,"line":39},[36,75295,55701],{"class":42},[36,75297,55370],{"class":54857},[36,75299,54864],{"class":42},[36,75301,75302],{"class":38,"line":53},[36,75303,75077],{"class":42},[36,75305,75306],{"class":38,"line":196},[36,75307,75082],{"class":42},[36,75309,75310],{"class":38,"line":642},[36,75311,75087],{"class":42},[36,75313,75314],{"class":38,"line":655},[36,75315,75092],{"class":42},[36,75317,75318],{"class":38,"line":662},[36,75319,5899],{"class":42},[36,75321,75322],{"class":38,"line":667},[36,75323,75324],{"class":42},"    \u002F\u002F 1.存储复杂数据类型\n",[36,75326,75327],{"class":38,"line":679},[36,75328,75329],{"class":42},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[36,75331,75332],{"class":38,"line":685},[36,75333,75334],{"class":42},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[36,75336,75337],{"class":38,"line":691},[36,75338,75339],{"class":42},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[36,75341,75342],{"class":38,"line":696},[36,75343,75344],{"class":42},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[36,75346,75347],{"class":38,"line":702},[36,75348,75349],{"class":42},"    \u002F\u002F 取\n",[36,75351,75352],{"class":38,"line":708},[36,75353,75354],{"class":42},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[36,75356,75357],{"class":38,"line":713},[36,75358,75359],{"class":42},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[36,75361,75362,75364,75366],{"class":38,"line":719},[36,75363,55974],{"class":42},[36,75365,55370],{"class":54857},[36,75367,54864],{"class":42},[19,75369,75370],{},[5198,75371],{"alt":31,"src":75372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[318,75374,75376],{"id":75375},"_356-数组map方法","3.5.6 数组map方法",[19,75378,75379],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,75381,75382],{},[5198,75383],{"alt":31,"src":75384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,75386,75387],{},[5198,75388],{"alt":31,"src":75389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,75391,75392,75395],{},[4027,75393,75394],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,75397,75398],{},"map有返回值，但是forEach没有返回值",[19,75400,75401],{},"map是个方法。用的时候要加 ()",[19,75403,75404],{},"map返回的是一个数组",[318,75406,75408],{"id":75407},"_357-数组中join方法","3.5.7 数组中join方法",[19,75410,75411],{},[5198,75412],{"alt":31,"src":75413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,75415,75416],{},"类似于python中拼接字符串一样！",[211,75418,75419,75422,75425],{},[214,75420,75421],{},"小括号为空则逗号分开",[214,75423,75424],{},"小括号为空字符串 ''，则元素之间没有分隔符",[214,75426,75427],{},"小括号用啥符号就用进行分割",[318,75429,75431],{"id":75430},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[211,75433,75434,75437,75440,75443,75446],{},[214,75435,75436],{},"记住本地时间获取快速方式：new Date().toDateString()",[214,75438,75439],{},"尽量减少DOM操作，用好map+join的渲染方式",[214,75441,75442],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[214,75444,75445],{},"return可以实现函数的结束",[214,75447,75448],{},"禁止跳转是 preventDefault() 不要忘记",[26,75450,75452],{"className":54190,"code":75451,"language":54192,"meta":31,"style":31},"\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",[33,75453,75454,75464,75478,75482,75490,75504,75524,75536,75544,75550,75560,75570,75574,75578,75584,75594,75606,75610,75614,75621,75633,75647,75657,75661,75665,75672,75679,75686,75698,75710,75720,75732,75736,75740,75747,75754,75766,75778,75788,75800,75830,75834,75838,75845,75857,75869,75893,75903,75913,75917,75921,75929,75940,75952,75964,75976,75993,76005,76017,76021,76025,76032,76044,76056,76068,76079,76097,76110,76122,76146,76157,76161,76165,76173,76183,76187,76191,76197,76209,76220,76230,76234,76238,76244,76266,76270,76274,76280,76286,76298,76308,76320,76350,76363,76380,76384,76388,76399,76421,76431,76435,76439,76452,76462,76474,76486,76498,76510,76520,76530,76540,76551,76564,76568,76576,76584,76588,76596,76609,76629,76662,76695,76728,76754,76772,76790,76798,76824,76842,76860,76878,76896,76914,76922,76930,76948,76956,76985,76993,77001,77009,77022,77034,77046,77058,77070,77082,77095,77107,77115,77123,77131,77136,77141,77145,77149,77153,77157,77161,77165,77170,77175,77180,77185,77193,77201,77209,77214,77219,77224,77229,77234,77239,77244,77249,77254,77259,77264,77269,77274,77279,77283,77288,77293,77303,77312,77316,77321,77330,77346,77388,77428,77467,77532,77540,77544,77549,77567,77575,77580,77585,77615,77621,77626,77639,77651,77663,77675,77687,77699,77711,77715,77725,77729,77734,77739,77743,77752,77756,77761,77766,77785,77790,77810,77814,77819,77823,77828,77846,77864,77882,77901,77920,77939,77944,77950,77971,77977,77986,77992,77998,78004,78031,78044,78049,78059,78065,78071,78077,78083,78088,78094,78100,78106,78112,78145,78150,78155,78160,78165,78171,78177,78183,78194,78199,78205,78212,78226,78232,78256,78261,78266,78272,78278,78299,78305,78318,78324,78330,78336,78342,78347,78353,78359,78365,78383,78397,78403,78411,78417,78439,78444,78449,78454,78459,78464,78473,78482,78487],{"__ignoreMap":31},[36,75455,75456,75458,75460,75462],{"class":38,"line":39},[36,75457,54854],{"class":42},[36,75459,54858],{"class":54857},[36,75461,54861],{"class":101},[36,75463,54864],{"class":42},[36,75465,75466,75468,75470,75472,75474,75476],{"class":38,"line":53},[36,75467,393],{"class":42},[36,75469,54192],{"class":54857},[36,75471,54873],{"class":101},[36,75473,47],{"class":42},[36,75475,54878],{"class":105},[36,75477,54864],{"class":42},[36,75479,75480],{"class":38,"line":196},[36,75481,659],{"emptyLinePlaceholder":658},[36,75483,75484,75486,75488],{"class":38,"line":642},[36,75485,393],{"class":42},[36,75487,54891],{"class":54857},[36,75489,54864],{"class":42},[36,75491,75492,75494,75496,75498,75500,75502],{"class":38,"line":655},[36,75493,55701],{"class":42},[36,75495,54901],{"class":54857},[36,75497,54904],{"class":101},[36,75499,47],{"class":42},[36,75501,54909],{"class":105},[36,75503,54864],{"class":42},[36,75505,75506,75508,75510,75512,75514,75516,75518,75520,75522],{"class":38,"line":662},[36,75507,55701],{"class":42},[36,75509,54901],{"class":54857},[36,75511,18576],{"class":101},[36,75513,47],{"class":42},[36,75515,54948],{"class":105},[36,75517,54928],{"class":101},[36,75519,47],{"class":42},[36,75521,54955],{"class":105},[36,75523,54864],{"class":42},[36,75525,75526,75528,75530,75532,75534],{"class":38,"line":667},[36,75527,55701],{"class":42},[36,75529,54964],{"class":54857},[36,75531,54967],{"class":42},[36,75533,54964],{"class":54857},[36,75535,54864],{"class":42},[36,75537,75538,75540,75542],{"class":38,"line":679},[36,75539,55701],{"class":42},[36,75541,3785],{"class":54857},[36,75543,54864],{"class":42},[36,75545,75546,75548],{"class":38,"line":685},[36,75547,10096],{"class":54857},[36,75549,19228],{"class":42},[36,75551,75552,75554,75556,75558],{"class":38,"line":691},[36,75553,58251],{"class":112},[36,75555,54994],{"class":42},[36,75557,1859],{"class":112},[36,75559,5029],{"class":42},[36,75561,75562,75564,75566,75568],{"class":38,"line":696},[36,75563,58262],{"class":112},[36,75565,54994],{"class":42},[36,75567,1859],{"class":112},[36,75569,5029],{"class":42},[36,75571,75572],{"class":38,"line":702},[36,75573,5899],{"class":42},[36,75575,75576],{"class":38,"line":708},[36,75577,659],{"emptyLinePlaceholder":658},[36,75579,75580,75582],{"class":38,"line":713},[36,75581,60834],{"class":54857},[36,75583,19228],{"class":42},[36,75585,75586,75588,75590,75592],{"class":38,"line":719},[36,75587,60841],{"class":112},[36,75589,54994],{"class":42},[36,75591,55149],{"class":112},[36,75593,5029],{"class":42},[36,75595,75596,75598,75600,75602,75604],{"class":38,"line":725},[36,75597,65632],{"class":112},[36,75599,54994],{"class":42},[36,75601,1921],{"class":112},[36,75603,55049],{"class":46},[36,75605,5029],{"class":42},[36,75607,75608],{"class":38,"line":731},[36,75609,5899],{"class":42},[36,75611,75612],{"class":38,"line":736},[36,75613,659],{"emptyLinePlaceholder":658},[36,75615,75616,75619],{"class":38,"line":742},[36,75617,75618],{"class":101},"    .info",[36,75620,19228],{"class":42},[36,75622,75623,75625,75627,75629,75631],{"class":38,"line":748},[36,75624,58327],{"class":112},[36,75626,54994],{"class":42},[36,75628,55046],{"class":112},[36,75630,55049],{"class":46},[36,75632,5029],{"class":42},[36,75634,75635,75637,75639,75641,75643,75645],{"class":38,"line":754},[36,75636,58262],{"class":112},[36,75638,54994],{"class":42},[36,75640,554],{"class":112},[36,75642,55049],{"class":46},[36,75644,55113],{"class":112},[36,75646,5029],{"class":42},[36,75648,75649,75651,75653,75655],{"class":38,"line":760},[36,75650,60841],{"class":112},[36,75652,54994],{"class":42},[36,75654,55149],{"class":112},[36,75656,5029],{"class":42},[36,75658,75659],{"class":38,"line":766},[36,75660,5899],{"class":42},[36,75662,75663],{"class":38,"line":772},[36,75664,659],{"emptyLinePlaceholder":658},[36,75666,75667,75670],{"class":38,"line":778},[36,75668,75669],{"class":101},"    .uname",[36,75671,35056],{"class":42},[36,75673,75674,75677],{"class":38,"line":783},[36,75675,75676],{"class":101},"    .age",[36,75678,35056],{"class":42},[36,75680,75681,75684],{"class":38,"line":789},[36,75682,75683],{"class":101},"    .salary",[36,75685,19228],{"class":42},[36,75687,75688,75690,75692,75694,75696],{"class":38,"line":795},[36,75689,58327],{"class":112},[36,75691,54994],{"class":42},[36,75693,4186],{"class":112},[36,75695,55049],{"class":46},[36,75697,5029],{"class":42},[36,75699,75700,75702,75704,75706,75708],{"class":38,"line":801},[36,75701,58341],{"class":112},[36,75703,54994],{"class":42},[36,75705,1921],{"class":112},[36,75707,55049],{"class":46},[36,75709,5029],{"class":42},[36,75711,75712,75714,75716,75718],{"class":38,"line":807},[36,75713,65335],{"class":112},[36,75715,54994],{"class":42},[36,75717,58293],{"class":112},[36,75719,5029],{"class":42},[36,75721,75722,75724,75726,75728,75730],{"class":38,"line":813},[36,75723,65305],{"class":112},[36,75725,54994],{"class":42},[36,75727,4446],{"class":112},[36,75729,55049],{"class":46},[36,75731,5029],{"class":42},[36,75733,75734],{"class":38,"line":819},[36,75735,5899],{"class":42},[36,75737,75738],{"class":38,"line":824},[36,75739,659],{"emptyLinePlaceholder":658},[36,75741,75742,75745],{"class":38,"line":829},[36,75743,75744],{"class":101},"    .gender",[36,75746,35056],{"class":42},[36,75748,75749,75752],{"class":38,"line":851},[36,75750,75751],{"class":101},"    .city",[36,75753,19228],{"class":42},[36,75755,75756,75758,75760,75762,75764],{"class":38,"line":868},[36,75757,58327],{"class":112},[36,75759,54994],{"class":42},[36,75761,4186],{"class":112},[36,75763,55049],{"class":46},[36,75765,5029],{"class":42},[36,75767,75768,75770,75772,75774,75776],{"class":38,"line":873},[36,75769,58341],{"class":112},[36,75771,54994],{"class":42},[36,75773,4695],{"class":112},[36,75775,55049],{"class":46},[36,75777,5029],{"class":42},[36,75779,75780,75782,75784,75786],{"class":38,"line":891},[36,75781,65335],{"class":112},[36,75783,54994],{"class":42},[36,75785,58293],{"class":112},[36,75787,5029],{"class":42},[36,75789,75790,75792,75794,75796,75798],{"class":38,"line":906},[36,75791,65305],{"class":112},[36,75793,54994],{"class":42},[36,75795,4446],{"class":112},[36,75797,55049],{"class":46},[36,75799,5029],{"class":42},[36,75801,75802,75804,75806,75808,75810,75812,75815,75817,75819,75821,75824,75826,75828],{"class":38,"line":925},[36,75803,65532],{"class":112},[36,75805,54994],{"class":42},[36,75807,4092],{"class":112},[36,75809,55049],{"class":46},[36,75811,55078],{"class":112},[36,75813,75814],{"class":112}," rgb",[36,75816,495],{"class":42},[36,75818,5445],{"class":112},[36,75820,478],{"class":42},[36,75822,75823],{"class":112},"197",[36,75825,478],{"class":42},[36,75827,75823],{"class":112},[36,75829,6422],{"class":42},[36,75831,75832],{"class":38,"line":943},[36,75833,5899],{"class":42},[36,75835,75836],{"class":38,"line":948},[36,75837,659],{"emptyLinePlaceholder":658},[36,75839,75840,75843],{"class":38,"line":971},[36,75841,75842],{"class":54857},"    button",[36,75844,19228],{"class":42},[36,75846,75847,75849,75851,75853,75855],{"class":38,"line":992},[36,75848,58341],{"class":112},[36,75850,54994],{"class":42},[36,75852,4695],{"class":112},[36,75854,55049],{"class":46},[36,75856,5029],{"class":42},[36,75858,75859,75861,75863,75865,75867],{"class":38,"line":1020},[36,75860,58327],{"class":112},[36,75862,54994],{"class":42},[36,75864,4357],{"class":112},[36,75866,55049],{"class":46},[36,75868,5029],{"class":42},[36,75870,75871,75873,75875,75878,75880,75882,75884,75887,75889,75891],{"class":38,"line":1036},[36,75872,58440],{"class":112},[36,75874,54994],{"class":42},[36,75876,75877],{"class":112},"rgb",[36,75879,495],{"class":42},[36,75881,4838],{"class":112},[36,75883,478],{"class":42},[36,75885,75886],{"class":112},"187",[36,75888,478],{"class":42},[36,75890,4174],{"class":112},[36,75892,6422],{"class":42},[36,75894,75895,75897,75899,75901],{"class":38,"line":1041},[36,75896,60971],{"class":112},[36,75898,54994],{"class":42},[36,75900,64397],{"class":112},[36,75902,5029],{"class":42},[36,75904,75905,75907,75909,75911],{"class":38,"line":1052},[36,75906,65532],{"class":112},[36,75908,54994],{"class":42},[36,75910,1859],{"class":112},[36,75912,5029],{"class":42},[36,75914,75915],{"class":38,"line":1065},[36,75916,5899],{"class":42},[36,75918,75919],{"class":38,"line":1077},[36,75920,659],{"emptyLinePlaceholder":658},[36,75922,75923,75925,75927],{"class":38,"line":1082},[36,75924,75842],{"class":54857},[36,75926,55245],{"class":54857},[36,75928,19228],{"class":42},[36,75930,75931,75933,75935,75938],{"class":38,"line":1125},[36,75932,58565],{"class":112},[36,75934,54994],{"class":42},[36,75936,75937],{"class":112},"inline-block",[36,75939,5029],{"class":42},[36,75941,75942,75944,75946,75948,75950],{"class":38,"line":1164},[36,75943,58327],{"class":112},[36,75945,54994],{"class":42},[36,75947,554],{"class":112},[36,75949,55049],{"class":46},[36,75951,5029],{"class":42},[36,75953,75954,75956,75958,75960,75962],{"class":38,"line":1169},[36,75955,58341],{"class":112},[36,75957,54994],{"class":42},[36,75959,554],{"class":112},[36,75961,55049],{"class":46},[36,75963,5029],{"class":42},[36,75965,75966,75968,75970,75972,75974],{"class":38,"line":1180},[36,75967,60914],{"class":112},[36,75969,54994],{"class":42},[36,75971,4345],{"class":112},[36,75973,55049],{"class":46},[36,75975,5029],{"class":42},[36,75977,75978,75980,75982,75984,75986,75988,75991],{"class":38,"line":1198},[36,75979,65532],{"class":112},[36,75981,54994],{"class":42},[36,75983,4092],{"class":112},[36,75985,55049],{"class":46},[36,75987,55078],{"class":112},[36,75989,75990],{"class":112}," #fff",[36,75992,5029],{"class":42},[36,75994,75995,75997,75999,76001,76003],{"class":38,"line":1215},[36,75996,58690],{"class":112},[36,75998,54994],{"class":42},[36,76000,4194],{"class":112},[36,76002,55049],{"class":46},[36,76004,5029],{"class":42},[36,76006,76007,76009,76011,76013,76015],{"class":38,"line":1236},[36,76008,65305],{"class":112},[36,76010,54994],{"class":42},[36,76012,4092],{"class":112},[36,76014,55049],{"class":46},[36,76016,5029],{"class":42},[36,76018,76019],{"class":38,"line":1245},[36,76020,5899],{"class":42},[36,76022,76023],{"class":38,"line":1250},[36,76024,659],{"emptyLinePlaceholder":658},[36,76026,76027,76030],{"class":38,"line":1265},[36,76028,76029],{"class":101},"    .total",[36,76031,19228],{"class":42},[36,76033,76034,76036,76038,76040,76042],{"class":38,"line":1281},[36,76035,58327],{"class":112},[36,76037,54994],{"class":42},[36,76039,65184],{"class":112},[36,76041,55049],{"class":46},[36,76043,5029],{"class":42},[36,76045,76046,76048,76050,76052,76054],{"class":38,"line":1297},[36,76047,58341],{"class":112},[36,76049,54994],{"class":42},[36,76051,4276],{"class":112},[36,76053,55049],{"class":46},[36,76055,5029],{"class":42},[36,76057,76058,76060,76062,76064,76066],{"class":38,"line":1314},[36,76059,60914],{"class":112},[36,76061,54994],{"class":42},[36,76063,4276],{"class":112},[36,76065,55049],{"class":46},[36,76067,5029],{"class":42},[36,76069,76070,76072,76074,76077],{"class":38,"line":1336},[36,76071,60841],{"class":112},[36,76073,54994],{"class":42},[36,76075,76076],{"class":112},"right",[36,76078,5029],{"class":42},[36,76080,76081,76083,76085,76087,76089,76091,76093,76095],{"class":38,"line":1356},[36,76082,58262],{"class":112},[36,76084,54994],{"class":42},[36,76086,4276],{"class":112},[36,76088,55049],{"class":46},[36,76090,55113],{"class":112},[36,76092,5750],{"class":112},[36,76094,55049],{"class":46},[36,76096,5029],{"class":42},[36,76098,76099,76102,76104,76106,76108],{"class":38,"line":1361},[36,76100,76101],{"class":112},"      padding-right",[36,76103,54994],{"class":42},[36,76105,554],{"class":112},[36,76107,55049],{"class":46},[36,76109,5029],{"class":42},[36,76111,76112,76114,76116,76118,76120],{"class":38,"line":1407},[36,76113,58478],{"class":112},[36,76115,54994],{"class":42},[36,76117,4396],{"class":112},[36,76119,55049],{"class":46},[36,76121,5029],{"class":42},[36,76123,76124,76126,76128,76130,76132,76135,76137,76140,76142,76144],{"class":38,"line":1423},[36,76125,58440],{"class":112},[36,76127,54994],{"class":42},[36,76129,75877],{"class":112},[36,76131,495],{"class":42},[36,76133,76134],{"class":112},"237",[36,76136,478],{"class":42},[36,76138,76139],{"class":112},"235",[36,76141,478],{"class":42},[36,76143,76139],{"class":112},[36,76145,6422],{"class":42},[36,76147,76148,76151,76153,76155],{"class":38,"line":1439},[36,76149,76150],{"class":112},"      box-sizing",[36,76152,54994],{"class":42},[36,76154,64060],{"class":112},[36,76156,5029],{"class":42},[36,76158,76159],{"class":38,"line":1444},[36,76160,5899],{"class":42},[36,76162,76163],{"class":38,"line":1486},[36,76164,659],{"emptyLinePlaceholder":658},[36,76166,76167,76169,76171],{"class":38,"line":1499},[36,76168,76029],{"class":101},[36,76170,55245],{"class":54857},[36,76172,19228],{"class":42},[36,76174,76175,76177,76179,76181],{"class":38,"line":1513},[36,76176,60971],{"class":112},[36,76178,54994],{"class":42},[36,76180,60976],{"class":112},[36,76182,5029],{"class":42},[36,76184,76185],{"class":38,"line":1518},[36,76186,5899],{"class":42},[36,76188,76189],{"class":38,"line":1529},[36,76190,659],{"emptyLinePlaceholder":658},[36,76192,76193,76195],{"class":38,"line":1539},[36,76194,68578],{"class":54857},[36,76196,19228],{"class":42},[36,76198,76199,76201,76203,76205,76207],{"class":38,"line":1544},[36,76200,58327],{"class":112},[36,76202,54994],{"class":42},[36,76204,65184],{"class":112},[36,76206,55049],{"class":46},[36,76208,5029],{"class":42},[36,76210,76211,76213,76215,76218],{"class":38,"line":1555},[36,76212,58262],{"class":112},[36,76214,54994],{"class":42},[36,76216,76217],{"class":112},"auto",[36,76219,5029],{"class":42},[36,76221,76222,76224,76226,76228],{"class":38,"line":1572},[36,76223,68585],{"class":112},[36,76225,54994],{"class":42},[36,76227,68590],{"class":112},[36,76229,5029],{"class":42},[36,76231,76232],{"class":38,"line":1592},[36,76233,5899],{"class":42},[36,76235,76236],{"class":38,"line":1597},[36,76237,659],{"emptyLinePlaceholder":658},[36,76239,76240,76242],{"class":38,"line":1610},[36,76241,68670],{"class":54857},[36,76243,19228],{"class":42},[36,76245,76246,76248,76250,76252,76254,76256,76258,76260,76262,76264],{"class":38,"line":1632},[36,76247,58440],{"class":112},[36,76249,54994],{"class":42},[36,76251,75877],{"class":112},[36,76253,495],{"class":42},[36,76255,76134],{"class":112},[36,76257,478],{"class":42},[36,76259,76139],{"class":112},[36,76261,478],{"class":42},[36,76263,76139],{"class":112},[36,76265,6422],{"class":42},[36,76267,76268],{"class":38,"line":1646},[36,76269,5899],{"class":42},[36,76271,76272],{"class":38,"line":1651},[36,76273,659],{"emptyLinePlaceholder":658},[36,76275,76276,76278],{"class":38,"line":1664},[36,76277,68670],{"class":54857},[36,76279,35056],{"class":42},[36,76281,76282,76284],{"class":38,"line":1669},[36,76283,68736],{"class":54857},[36,76285,19228],{"class":42},[36,76287,76288,76290,76292,76294,76296],{"class":38,"line":1681},[36,76289,58341],{"class":112},[36,76291,54994],{"class":42},[36,76293,4148],{"class":112},[36,76295,55049],{"class":46},[36,76297,5029],{"class":42},[36,76299,76300,76302,76304,76306],{"class":38,"line":1694},[36,76301,60841],{"class":112},[36,76303,54994],{"class":42},[36,76305,259],{"class":112},[36,76307,5029],{"class":42},[36,76309,76310,76312,76314,76316,76318],{"class":38,"line":1699},[36,76311,58478],{"class":112},[36,76313,54994],{"class":42},[36,76315,4421],{"class":112},[36,76317,55049],{"class":46},[36,76319,5029],{"class":42},[36,76321,76322,76324,76326,76328,76330,76332,76334,76336,76339,76341,76344,76346,76348],{"class":38,"line":1714},[36,76323,65532],{"class":112},[36,76325,54994],{"class":42},[36,76327,4092],{"class":112},[36,76329,55049],{"class":46},[36,76331,55078],{"class":112},[36,76333,75814],{"class":112},[36,76335,495],{"class":42},[36,76337,76338],{"class":112},"228",[36,76340,478],{"class":42},[36,76342,76343],{"class":112},"225",[36,76345,478],{"class":42},[36,76347,76343],{"class":112},[36,76349,6422],{"class":42},[36,76351,76352,76355,76357,76359,76361],{"class":38,"line":1729},[36,76353,76354],{"class":112},"      padding-left",[36,76356,54994],{"class":42},[36,76358,4194],{"class":112},[36,76360,55049],{"class":46},[36,76362,5029],{"class":42},[36,76364,76365,76367,76369,76371,76374,76376,76378],{"class":38,"line":1746},[36,76366,65415],{"class":112},[36,76368,54994],{"class":42},[36,76370,31732],{"class":112},[36,76372,76373],{"class":112}," linear",[36,76375,65422],{"class":112},[36,76377,4566],{"class":46},[36,76379,5029],{"class":42},[36,76381,76382],{"class":38,"line":1751},[36,76383,5899],{"class":42},[36,76385,76386],{"class":38,"line":1765},[36,76387,659],{"emptyLinePlaceholder":658},[36,76389,76390,76393,76395,76397],{"class":38,"line":1783},[36,76391,76392],{"class":54857},"    tbody",[36,76394,73698],{"class":54857},[36,76396,64495],{"class":101},[36,76398,19228],{"class":42},[36,76400,76401,76403,76405,76407,76409,76411,76413,76415,76417,76419],{"class":38,"line":1799},[36,76402,58440],{"class":112},[36,76404,54994],{"class":42},[36,76406,75877],{"class":112},[36,76408,495],{"class":42},[36,76410,76134],{"class":112},[36,76412,478],{"class":42},[36,76414,76139],{"class":112},[36,76416,478],{"class":42},[36,76418,76139],{"class":112},[36,76420,6422],{"class":42},[36,76422,76423,76425,76427,76429],{"class":38,"line":1807},[36,76424,65580],{"class":112},[36,76426,54994],{"class":42},[36,76428,65585],{"class":112},[36,76430,5029],{"class":42},[36,76432,76433],{"class":38,"line":1812},[36,76434,5899],{"class":42},[36,76436,76437],{"class":38,"line":1817},[36,76438,659],{"emptyLinePlaceholder":658},[36,76440,76441,76443,76445,76448,76450],{"class":38,"line":1833},[36,76442,76392],{"class":54857},[36,76444,73698],{"class":54857},[36,76446,76447],{"class":54857}," td",[36,76449,5134],{"class":54857},[36,76451,19228],{"class":42},[36,76453,76454,76456,76458,76460],{"class":38,"line":1844},[36,76455,58565],{"class":112},[36,76457,54994],{"class":42},[36,76459,64424],{"class":112},[36,76461,5029],{"class":42},[36,76463,76464,76466,76468,76470,76472],{"class":38,"line":1864},[36,76465,58327],{"class":112},[36,76467,54994],{"class":42},[36,76469,4777],{"class":112},[36,76471,55049],{"class":46},[36,76473,5029],{"class":42},[36,76475,76476,76478,76480,76482,76484],{"class":38,"line":1878},[36,76477,58341],{"class":112},[36,76479,54994],{"class":42},[36,76481,4695],{"class":112},[36,76483,55049],{"class":46},[36,76485,5029],{"class":42},[36,76487,76488,76490,76492,76494,76496],{"class":38,"line":1891},[36,76489,60914],{"class":112},[36,76491,54994],{"class":42},[36,76493,4695],{"class":112},[36,76495,55049],{"class":46},[36,76497,5029],{"class":42},[36,76499,76500,76502,76504,76506,76508],{"class":38,"line":1896},[36,76501,65632],{"class":112},[36,76503,54994],{"class":42},[36,76505,498],{"class":112},[36,76507,55049],{"class":46},[36,76509,5029],{"class":42},[36,76511,76512,76514,76516,76518],{"class":38,"line":1906},[36,76513,60971],{"class":112},[36,76515,54994],{"class":42},[36,76517,64397],{"class":112},[36,76519,5029],{"class":42},[36,76521,76522,76524,76526,76528],{"class":38,"line":1926},[36,76523,60841],{"class":112},[36,76525,54994],{"class":42},[36,76527,55149],{"class":112},[36,76529,5029],{"class":42},[36,76531,76532,76534,76536,76538],{"class":38,"line":1936},[36,76533,67525],{"class":112},[36,76535,54994],{"class":42},[36,76537,58293],{"class":112},[36,76539,5029],{"class":42},[36,76541,76542,76544,76546,76549],{"class":38,"line":1946},[36,76543,58440],{"class":112},[36,76545,54994],{"class":42},[36,76547,76548],{"class":112},"orange",[36,76550,5029],{"class":42},[36,76552,76553,76555,76557,76560,76562],{"class":38,"line":1957},[36,76554,58690],{"class":112},[36,76556,54994],{"class":42},[36,76558,76559],{"class":112},"12.5",[36,76561,55049],{"class":46},[36,76563,5029],{"class":42},[36,76565,76566],{"class":38,"line":2008},[36,76567,5899],{"class":42},[36,76569,76570,76572,76574],{"class":38,"line":2022},[36,76571,55974],{"class":42},[36,76573,3785],{"class":54857},[36,76575,54864],{"class":42},[36,76577,76578,76580,76582],{"class":38,"line":2028},[36,76579,55342],{"class":42},[36,76581,54891],{"class":54857},[36,76583,54864],{"class":42},[36,76585,76586],{"class":38,"line":2033},[36,76587,659],{"emptyLinePlaceholder":658},[36,76589,76590,76592,76594],{"class":38,"line":2054},[36,76591,393],{"class":42},[36,76593,55357],{"class":54857},[36,76595,54864],{"class":42},[36,76597,76598,76600,76602,76605,76607],{"class":38,"line":2059},[36,76599,55701],{"class":42},[36,76601,14],{"class":54857},[36,76603,76604],{"class":42},">学生就业统计表\u003C\u002F",[36,76606,14],{"class":54857},[36,76608,54864],{"class":42},[36,76610,76611,76613,76615,76617,76619,76621,76623,76625,76627],{"class":38,"line":2064},[36,76612,55701],{"class":42},[36,76614,70180],{"class":54857},[36,76616,57043],{"class":101},[36,76618,47],{"class":42},[36,76620,66219],{"class":105},[36,76622,72625],{"class":101},[36,76624,47],{"class":42},[36,76626,35364],{"class":105},[36,76628,54864],{"class":42},[36,76630,76631,76633,76635,76637,76639,76641,76643,76645,76647,76649,76651,76654,76656,76658,76660],{"class":38,"line":2081},[36,76632,54898],{"class":42},[36,76634,57378],{"class":54857},[36,76636,57381],{"class":101},[36,76638,47],{"class":42},[36,76640,66254],{"class":105},[36,76642,18576],{"class":101},[36,76644,47],{"class":42},[36,76646,72651],{"class":105},[36,76648,64575],{"class":101},[36,76650,47],{"class":42},[36,76652,76653],{"class":105},"\"姓名\"",[36,76655,57043],{"class":101},[36,76657,47],{"class":42},[36,76659,72651],{"class":105},[36,76661,54864],{"class":42},[36,76663,76664,76666,76668,76670,76672,76674,76676,76678,76680,76682,76684,76687,76689,76691,76693],{"class":38,"line":36396},[36,76665,54898],{"class":42},[36,76667,57378],{"class":54857},[36,76669,57381],{"class":101},[36,76671,47],{"class":42},[36,76673,66254],{"class":105},[36,76675,18576],{"class":101},[36,76677,47],{"class":42},[36,76679,72679],{"class":105},[36,76681,64575],{"class":101},[36,76683,47],{"class":42},[36,76685,76686],{"class":105},"\"年龄\"",[36,76688,57043],{"class":101},[36,76690,47],{"class":42},[36,76692,72679],{"class":105},[36,76694,54864],{"class":42},[36,76696,76697,76699,76701,76703,76705,76707,76709,76711,76713,76715,76717,76720,76722,76724,76726],{"class":38,"line":36402},[36,76698,54898],{"class":42},[36,76700,57378],{"class":54857},[36,76702,57381],{"class":101},[36,76704,47],{"class":42},[36,76706,66254],{"class":105},[36,76708,18576],{"class":101},[36,76710,47],{"class":42},[36,76712,72781],{"class":105},[36,76714,64575],{"class":101},[36,76716,47],{"class":42},[36,76718,76719],{"class":105},"\"薪资\"",[36,76721,57043],{"class":101},[36,76723,47],{"class":42},[36,76725,72781],{"class":105},[36,76727,54864],{"class":42},[36,76729,76730,76732,76734,76736,76738,76740,76742,76744,76746,76748,76750,76752],{"class":38,"line":36411},[36,76731,54898],{"class":42},[36,76733,72699],{"class":54857},[36,76735,18576],{"class":101},[36,76737,47],{"class":42},[36,76739,72706],{"class":105},[36,76741,18615],{"class":101},[36,76743,47],{"class":42},[36,76745,11343],{"class":105},[36,76747,57043],{"class":101},[36,76749,47],{"class":42},[36,76751,72706],{"class":105},[36,76753,54864],{"class":42},[36,76755,76756,76758,76760,76762,76764,76766,76768,76770],{"class":38,"line":36417},[36,76757,58790],{"class":42},[36,76759,72721],{"class":54857},[36,76761,70206],{"class":101},[36,76763,47],{"class":42},[36,76765,13622],{"class":105},[36,76767,72730],{"class":42},[36,76769,72721],{"class":54857},[36,76771,54864],{"class":42},[36,76773,76774,76776,76778,76780,76782,76784,76786,76788],{"class":38,"line":36426},[36,76775,58790],{"class":42},[36,76777,72721],{"class":54857},[36,76779,70206],{"class":101},[36,76781,47],{"class":42},[36,76783,13691],{"class":105},[36,76785,72749],{"class":42},[36,76787,72721],{"class":54857},[36,76789,54864],{"class":42},[36,76791,76792,76794,76796],{"class":38,"line":36432},[36,76793,55333],{"class":42},[36,76795,72699],{"class":54857},[36,76797,54864],{"class":42},[36,76799,76800,76802,76804,76806,76808,76810,76812,76814,76816,76818,76820,76822],{"class":38,"line":36438},[36,76801,54898],{"class":42},[36,76803,72699],{"class":54857},[36,76805,18576],{"class":101},[36,76807,47],{"class":42},[36,76809,72803],{"class":105},[36,76811,18615],{"class":101},[36,76813,47],{"class":42},[36,76815,11343],{"class":105},[36,76817,57043],{"class":101},[36,76819,47],{"class":42},[36,76821,72803],{"class":105},[36,76823,54864],{"class":42},[36,76825,76826,76828,76830,76832,76834,76836,76838,76840],{"class":38,"line":36447},[36,76827,58790],{"class":42},[36,76829,72721],{"class":54857},[36,76831,70206],{"class":101},[36,76833,47],{"class":42},[36,76835,72824],{"class":105},[36,76837,72827],{"class":42},[36,76839,72721],{"class":54857},[36,76841,54864],{"class":42},[36,76843,76844,76846,76848,76850,76852,76854,76856,76858],{"class":38,"line":36453},[36,76845,58790],{"class":42},[36,76847,72721],{"class":54857},[36,76849,70206],{"class":101},[36,76851,47],{"class":42},[36,76853,72844],{"class":105},[36,76855,72847],{"class":42},[36,76857,72721],{"class":54857},[36,76859,54864],{"class":42},[36,76861,76862,76864,76866,76868,76870,76872,76874,76876],{"class":38,"line":36464},[36,76863,58790],{"class":42},[36,76865,72721],{"class":54857},[36,76867,70206],{"class":101},[36,76869,47],{"class":42},[36,76871,72864],{"class":105},[36,76873,72867],{"class":42},[36,76875,72721],{"class":54857},[36,76877,54864],{"class":42},[36,76879,76880,76882,76884,76886,76888,76890,76892,76894],{"class":38,"line":36470},[36,76881,58790],{"class":42},[36,76883,72721],{"class":54857},[36,76885,70206],{"class":101},[36,76887,47],{"class":42},[36,76889,72884],{"class":105},[36,76891,72887],{"class":42},[36,76893,72721],{"class":54857},[36,76895,54864],{"class":42},[36,76897,76898,76900,76902,76904,76906,76908,76910,76912],{"class":38,"line":36489},[36,76899,58790],{"class":42},[36,76901,72721],{"class":54857},[36,76903,70206],{"class":101},[36,76905,47],{"class":42},[36,76907,72904],{"class":105},[36,76909,72907],{"class":42},[36,76911,72721],{"class":54857},[36,76913,54864],{"class":42},[36,76915,76916,76918,76920],{"class":38,"line":36495},[36,76917,55333],{"class":42},[36,76919,72699],{"class":54857},[36,76921,54864],{"class":42},[36,76923,76924,76926,76928],{"class":38,"line":36506},[36,76925,54898],{"class":42},[36,76927,57444],{"class":54857},[36,76929,54864],{"class":42},[36,76931,76932,76934,76936,76939,76941,76944,76946],{"class":38,"line":36512},[36,76933,58790],{"class":42},[36,76935,36],{"class":54857},[36,76937,76938],{"class":42},">+\u003C\u002F",[36,76940,36],{"class":54857},[36,76942,76943],{"class":42},">添加\u003C\u002F",[36,76945,57444],{"class":54857},[36,76947,54864],{"class":42},[36,76949,76950,76952,76954],{"class":38,"line":36532},[36,76951,55974],{"class":42},[36,76953,70180],{"class":54857},[36,76955,54864],{"class":42},[36,76957,76958,76960,76962,76964,76966,76968,76971,76973,76976,76978,76981,76983],{"class":38,"line":36548},[36,76959,55701],{"class":42},[36,76961,55168],{"class":54857},[36,76963,57043],{"class":101},[36,76965,47],{"class":42},[36,76967,66135],{"class":105},[36,76969,76970],{"class":42},">共有数据 \u003C",[36,76972,36],{"class":54857},[36,76974,76975],{"class":42},">0\u003C\u002F",[36,76977,36],{"class":54857},[36,76979,76980],{"class":42},"> 条\u003C\u002F",[36,76982,55168],{"class":54857},[36,76984,54864],{"class":42},[36,76986,76987,76989,76991],{"class":38,"line":36554},[36,76988,55701],{"class":42},[36,76990,248],{"class":54857},[36,76992,54864],{"class":42},[36,76994,76995,76997,76999],{"class":38,"line":36568},[36,76996,54898],{"class":42},[36,76998,251],{"class":54857},[36,77000,54864],{"class":42},[36,77002,77003,77005,77007],{"class":38,"line":36574},[36,77004,58790],{"class":42},[36,77006,254],{"class":54857},[36,77008,54864],{"class":42},[36,77010,77011,77013,77015,77018,77020],{"class":38,"line":36580},[36,77012,58858],{"class":42},[36,77014,257],{"class":54857},[36,77016,77017],{"class":42},">ID\u003C\u002F",[36,77019,257],{"class":54857},[36,77021,54864],{"class":42},[36,77023,77024,77026,77028,77030,77032],{"class":38,"line":36591},[36,77025,58858],{"class":42},[36,77027,257],{"class":54857},[36,77029,73010],{"class":42},[36,77031,257],{"class":54857},[36,77033,54864],{"class":42},[36,77035,77036,77038,77040,77042,77044],{"class":38,"line":36597},[36,77037,58858],{"class":42},[36,77039,257],{"class":54857},[36,77041,73023],{"class":42},[36,77043,257],{"class":54857},[36,77045,54864],{"class":42},[36,77047,77048,77050,77052,77054,77056],{"class":38,"line":36603},[36,77049,58858],{"class":42},[36,77051,257],{"class":54857},[36,77053,73036],{"class":42},[36,77055,257],{"class":54857},[36,77057,54864],{"class":42},[36,77059,77060,77062,77064,77066,77068],{"class":38,"line":36613},[36,77061,58858],{"class":42},[36,77063,257],{"class":54857},[36,77065,73049],{"class":42},[36,77067,257],{"class":54857},[36,77069,54864],{"class":42},[36,77071,77072,77074,77076,77078,77080],{"class":38,"line":36619},[36,77073,58858],{"class":42},[36,77075,257],{"class":54857},[36,77077,73062],{"class":42},[36,77079,257],{"class":54857},[36,77081,54864],{"class":42},[36,77083,77084,77086,77088,77091,77093],{"class":38,"line":36630},[36,77085,58858],{"class":42},[36,77087,257],{"class":54857},[36,77089,77090],{"class":42},">录入时间\u003C\u002F",[36,77092,257],{"class":54857},[36,77094,54864],{"class":42},[36,77096,77097,77099,77101,77103,77105],{"class":38,"line":36636},[36,77098,58858],{"class":42},[36,77100,257],{"class":54857},[36,77102,73075],{"class":42},[36,77104,257],{"class":54857},[36,77106,54864],{"class":42},[36,77108,77109,77111,77113],{"class":38,"line":36646},[36,77110,58963],{"class":42},[36,77112,254],{"class":54857},[36,77114,54864],{"class":42},[36,77116,77117,77119,77121],{"class":38,"line":36651},[36,77118,55333],{"class":42},[36,77120,251],{"class":54857},[36,77122,54864],{"class":42},[36,77124,77125,77127,77129],{"class":38,"line":36657},[36,77126,54898],{"class":42},[36,77128,265],{"class":54857},[36,77130,54864],{"class":42},[36,77132,77133],{"class":38,"line":36706},[36,77134,77135],{"class":3943},"      \u003C!-- \u003Ctr>\n",[36,77137,77138],{"class":38,"line":36753},[36,77139,77140],{"class":3943},"        \u003Ctd>1\u003C\u002Ftd>\n",[36,77142,77143],{"class":38,"line":36758},[36,77144,77140],{"class":3943},[36,77146,77147],{"class":38,"line":36764},[36,77148,77140],{"class":3943},[36,77150,77151],{"class":38,"line":36783},[36,77152,77140],{"class":3943},[36,77154,77155],{"class":38,"line":36789},[36,77156,77140],{"class":3943},[36,77158,77159],{"class":38,"line":36809},[36,77160,77140],{"class":3943},[36,77162,77163],{"class":38,"line":36815},[36,77164,77140],{"class":3943},[36,77166,77167],{"class":38,"line":36821},[36,77168,77169],{"class":3943},"        \u003Ctd>\n",[36,77171,77172],{"class":38,"line":36831},[36,77173,77174],{"class":3943},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[36,77176,77177],{"class":38,"line":36836},[36,77178,77179],{"class":3943},"        \u003C\u002Ftd>\n",[36,77181,77182],{"class":38,"line":36842},[36,77183,77184],{"class":3943},"      \u003C\u002Ftr> -->\n",[36,77186,77187,77189,77191],{"class":38,"line":36858},[36,77188,55333],{"class":42},[36,77190,265],{"class":54857},[36,77192,54864],{"class":42},[36,77194,77195,77197,77199],{"class":38,"line":36903},[36,77196,55974],{"class":42},[36,77198,248],{"class":54857},[36,77200,54864],{"class":42},[36,77202,77203,77205,77207],{"class":38,"line":36909},[36,77204,55701],{"class":42},[36,77206,55370],{"class":54857},[36,77208,54864],{"class":42},[36,77210,77211],{"class":38,"line":36915},[36,77212,77213],{"class":3943},"    \u002F\u002F const initData = [{\n",[36,77215,77216],{"class":38,"line":36921},[36,77217,77218],{"class":3943},"    \u002F\u002F   unameId: 1,\n",[36,77220,77221],{"class":38,"line":36932},[36,77222,77223],{"class":3943},"    \u002F\u002F   uname: '华晨宇',\n",[36,77225,77226],{"class":38,"line":36938},[36,77227,77228],{"class":3943},"    \u002F\u002F   age: 22,\n",[36,77230,77231],{"class":38,"line":36944},[36,77232,77233],{"class":3943},"    \u002F\u002F   salary: 12000,\n",[36,77235,77236],{"class":38,"line":36950},[36,77237,77238],{"class":3943},"    \u002F\u002F   gender: '男',\n",[36,77240,77241],{"class":38,"line":36968},[36,77242,77243],{"class":3943},"    \u002F\u002F   city: '北京',\n",[36,77245,77246],{"class":38,"line":36982},[36,77247,77248],{"class":3943},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[36,77250,77251],{"class":38,"line":36991},[36,77252,77253],{"class":3943},"    \u002F\u002F }]\n",[36,77255,77256],{"class":38,"line":37000},[36,77257,77258],{"class":3943},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[36,77260,77261],{"class":38,"line":37009},[36,77262,77263],{"class":3943},"    \u002F\u002F 1.渲染业务\n",[36,77265,77266],{"class":38,"line":37018},[36,77267,77268],{"class":3943},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[36,77270,77271],{"class":38,"line":37024},[36,77272,77273],{"class":3943},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[36,77275,77276],{"class":38,"line":37030},[36,77277,77278],{"class":3943},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[36,77280,77281],{"class":38,"line":37038},[36,77282,659],{"emptyLinePlaceholder":658},[36,77284,77285],{"class":38,"line":37043},[36,77286,77287],{"class":3943},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[36,77289,77290],{"class":38,"line":37049},[36,77291,77292],{"class":3943},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[36,77294,77295,77297,77299,77301],{"class":38,"line":37060},[36,77296,14882],{"class":46},[36,77298,61250],{"class":112},[36,77300,673],{"class":46},[36,77302,55395],{"class":42},[36,77304,77305,77308,77310],{"class":38,"line":37066},[36,77306,77307],{"class":42},"    console.",[36,77309,61802],{"class":101},[36,77311,55969],{"class":42},[36,77313,77314],{"class":38,"line":37086},[36,77315,659],{"emptyLinePlaceholder":658},[36,77317,77318],{"class":38,"line":37092},[36,77319,77320],{"class":3943},"    \u002F\u002F 时间函数\n",[36,77322,77323,77325,77328],{"class":38,"line":37098},[36,77324,73638],{"class":46},[36,77326,77327],{"class":101}," getTime",[36,77329,14514],{"class":42},[36,77331,77332,77334,77337,77339,77341,77344],{"class":38,"line":37104},[36,77333,61783],{"class":46},[36,77335,77336],{"class":112}," date",[36,77338,673],{"class":46},[36,77340,15239],{"class":46},[36,77342,77343],{"class":101}," Date",[36,77345,903],{"class":42},[36,77347,77348,77350,77352,77354,77357,77360,77362,77364,77366,77369,77372,77374,77376,77378,77380,77382,77384,77386],{"class":38,"line":37121},[36,77349,61783],{"class":46},[36,77351,19747],{"class":112},[36,77353,673],{"class":46},[36,77355,77356],{"class":42}," date.",[36,77358,77359],{"class":101},"getHours",[36,77361,16710],{"class":42},[36,77363,393],{"class":46},[36,77365,5750],{"class":112},[36,77367,77368],{"class":46}," ?",[36,77370,77371],{"class":105}," '0'",[36,77373,49124],{"class":46},[36,77375,77356],{"class":42},[36,77377,77359],{"class":101},[36,77379,16710],{"class":42},[36,77381,4729],{"class":46},[36,77383,77356],{"class":42},[36,77385,77359],{"class":101},[36,77387,903],{"class":42},[36,77389,77390,77392,77395,77397,77399,77402,77404,77406,77408,77410,77412,77414,77416,77418,77420,77422,77424,77426],{"class":38,"line":37127},[36,77391,61783],{"class":46},[36,77393,77394],{"class":112}," m",[36,77396,673],{"class":46},[36,77398,77356],{"class":42},[36,77400,77401],{"class":101},"getMinutes",[36,77403,16710],{"class":42},[36,77405,393],{"class":46},[36,77407,5750],{"class":112},[36,77409,77368],{"class":46},[36,77411,77371],{"class":105},[36,77413,49124],{"class":46},[36,77415,77356],{"class":42},[36,77417,77401],{"class":101},[36,77419,16710],{"class":42},[36,77421,4729],{"class":46},[36,77423,77356],{"class":42},[36,77425,77401],{"class":101},[36,77427,903],{"class":42},[36,77429,77430,77432,77434,77436,77438,77441,77443,77445,77447,77449,77451,77453,77455,77457,77459,77461,77463,77465],{"class":38,"line":37133},[36,77431,61783],{"class":46},[36,77433,12109],{"class":112},[36,77435,673],{"class":46},[36,77437,77356],{"class":42},[36,77439,77440],{"class":101},"getSeconds",[36,77442,16710],{"class":42},[36,77444,393],{"class":46},[36,77446,5750],{"class":112},[36,77448,77368],{"class":46},[36,77450,77371],{"class":105},[36,77452,49124],{"class":46},[36,77454,77356],{"class":42},[36,77456,77440],{"class":101},[36,77458,16710],{"class":42},[36,77460,4729],{"class":46},[36,77462,77356],{"class":42},[36,77464,77440],{"class":101},[36,77466,903],{"class":42},[36,77468,77469,77471,77474,77476,77478,77481,77483,77486,77488,77491,77493,77495,77498,77500,77502,77504,77506,77508,77510,77513,77515,77518,77520,77523,77525,77527,77529],{"class":38,"line":37139},[36,77470,61783],{"class":46},[36,77472,77473],{"class":112}," str",[36,77475,673],{"class":46},[36,77477,66458],{"class":105},[36,77479,77480],{"class":42},"date",[36,77482,842],{"class":105},[36,77484,77485],{"class":101},"getFullYear",[36,77487,6138],{"class":105},[36,77489,77490],{"class":105},"}\u002F${",[36,77492,77480],{"class":42},[36,77494,842],{"class":105},[36,77496,77497],{"class":101},"getMonth",[36,77499,16710],{"class":105},[36,77501,4354],{"class":46},[36,77503,28732],{"class":112},[36,77505,77490],{"class":105},[36,77507,77480],{"class":42},[36,77509,842],{"class":105},[36,77511,77512],{"class":101},"getDate",[36,77514,6138],{"class":105},[36,77516,77517],{"class":105},"} ${",[36,77519,4290],{"class":42},[36,77521,77522],{"class":105},"}:${",[36,77524,4416],{"class":42},[36,77526,77522],{"class":105},[36,77528,4566],{"class":42},[36,77530,77531],{"class":105},"}`\n",[36,77533,77534,77537],{"class":38,"line":37145},[36,77535,77536],{"class":46},"      return",[36,77538,77539],{"class":42}," str\n",[36,77541,77542],{"class":38,"line":37151},[36,77543,5899],{"class":42},[36,77545,77546],{"class":38,"line":37178},[36,77547,77548],{"class":3943},"    \u002F\u002F 渲染函数\n",[36,77550,77551,77553,77555,77557,77559,77561,77563,77565],{"class":38,"line":37202},[36,77552,14882],{"class":46},[36,77554,73302],{"class":112},[36,77556,673],{"class":46},[36,77558,57953],{"class":42},[36,77560,57956],{"class":101},[36,77562,495],{"class":42},[36,77564,73313],{"class":105},[36,77566,922],{"class":42},[36,77568,77569,77571,77573],{"class":38,"line":37208},[36,77570,73638],{"class":46},[36,77572,73641],{"class":101},[36,77574,14514],{"class":42},[36,77576,77577],{"class":38,"line":37214},[36,77578,77579],{"class":3943},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[36,77581,77582],{"class":38,"line":37220},[36,77583,77584],{"class":3943},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[36,77586,77587,77589,77592,77594,77596,77599,77601,77603,77605,77608,77610,77613],{"class":38,"line":37231},[36,77588,61783],{"class":46},[36,77590,77591],{"class":112}," trArr",[36,77593,673],{"class":46},[36,77595,55522],{"class":42},[36,77597,77598],{"class":101},"map",[36,77600,495],{"class":42},[36,77602,58005],{"class":46},[36,77604,5386],{"class":42},[36,77606,77607],{"class":468},"ele",[36,77609,478],{"class":42},[36,77611,77612],{"class":468},"index",[36,77614,16102],{"class":42},[36,77616,77617,77619],{"class":38,"line":37242},[36,77618,1239],{"class":46},[36,77620,73722],{"class":105},[36,77622,77623],{"class":38,"line":37248},[36,77624,77625],{"class":105},"      \u003Ctr>\n",[36,77627,77628,77630,77632,77634,77637],{"class":38,"line":37265},[36,77629,73727],{"class":105},[36,77631,77607],{"class":42},[36,77633,842],{"class":105},[36,77635,77636],{"class":42},"unameId",[36,77638,73742],{"class":105},[36,77640,77641,77643,77645,77647,77649],{"class":38,"line":37288},[36,77642,73727],{"class":105},[36,77644,77607],{"class":42},[36,77646,842],{"class":105},[36,77648,73758],{"class":42},[36,77650,73742],{"class":105},[36,77652,77653,77655,77657,77659,77661],{"class":38,"line":37311},[36,77654,73727],{"class":105},[36,77656,77607],{"class":42},[36,77658,842],{"class":105},[36,77660,73775],{"class":42},[36,77662,73742],{"class":105},[36,77664,77665,77667,77669,77671,77673],{"class":38,"line":37317},[36,77666,73727],{"class":105},[36,77668,77607],{"class":42},[36,77670,842],{"class":105},[36,77672,73792],{"class":42},[36,77674,73742],{"class":105},[36,77676,77677,77679,77681,77683,77685],{"class":38,"line":37322},[36,77678,73727],{"class":105},[36,77680,77607],{"class":42},[36,77682,842],{"class":105},[36,77684,73809],{"class":42},[36,77686,73742],{"class":105},[36,77688,77689,77691,77693,77695,77697],{"class":38,"line":37331},[36,77690,73727],{"class":105},[36,77692,77607],{"class":42},[36,77694,842],{"class":105},[36,77696,73826],{"class":42},[36,77698,73742],{"class":105},[36,77700,77701,77703,77705,77707,77709],{"class":38,"line":37341},[36,77702,73727],{"class":105},[36,77704,77607],{"class":42},[36,77706,842],{"class":105},[36,77708,6099],{"class":42},[36,77710,73742],{"class":105},[36,77712,77713],{"class":38,"line":37347},[36,77714,77169],{"class":105},[36,77716,77717,77720,77722],{"class":38,"line":37352},[36,77718,77719],{"class":105},"          \u003Ca href=\"#\" data-id=\"${",[36,77721,77612],{"class":42},[36,77723,77724],{"class":105},"}\">删除\u003C\u002Fa>\n",[36,77726,77727],{"class":38,"line":37358},[36,77728,77179],{"class":105},[36,77730,77731],{"class":38,"line":37371},[36,77732,77733],{"class":105},"      \u003C\u002Ftr>\n",[36,77735,77736],{"class":38,"line":37377},[36,77737,77738],{"class":105},"  `\n",[36,77740,77741],{"class":38,"line":37388},[36,77742,68370],{"class":42},[36,77744,77745,77747,77749],{"class":38,"line":37399},[36,77746,61799],{"class":42},[36,77748,61802],{"class":101},[36,77750,77751],{"class":42},"(trArr)\n",[36,77753,77754],{"class":38,"line":37418},[36,77755,659],{"emptyLinePlaceholder":658},[36,77757,77758],{"class":38,"line":53075},[36,77759,77760],{"class":3943},"      \u002F\u002F (2) 把数组转换为字符串join\n",[36,77762,77763],{"class":38,"line":53080},[36,77764,77765],{"class":3943},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[36,77767,77768,77770,77772,77775,77778,77780,77783],{"class":38,"line":53089},[36,77769,73653],{"class":42},[36,77771,47],{"class":46},[36,77773,77774],{"class":42}," trArr.",[36,77776,77777],{"class":101},"join",[36,77779,495],{"class":42},[36,77781,77782],{"class":105},"''",[36,77784,922],{"class":42},[36,77786,77787],{"class":38,"line":53098},[36,77788,77789],{"class":3943},"      \u002F\u002F 显示共有几条\n",[36,77791,77792,77794,77796,77798,77801,77804,77806,77808],{"class":38,"line":53103},[36,77793,59326],{"class":42},[36,77795,57956],{"class":101},[36,77797,495],{"class":42},[36,77799,77800],{"class":105},"'.total span'",[36,77802,77803],{"class":42},").innerHTML ",[36,77805,47],{"class":46},[36,77807,55522],{"class":42},[36,77809,59386],{"class":112},[36,77811,77812],{"class":38,"line":53108},[36,77813,5899],{"class":42},[36,77815,77816],{"class":38,"line":53113},[36,77817,77818],{"class":3943},"    \u002F\u002F render()\n",[36,77820,77821],{"class":38,"line":53126},[36,77822,659],{"emptyLinePlaceholder":658},[36,77824,77825],{"class":38,"line":53131},[36,77826,77827],{"class":3943},"    \u002F\u002F 获取DOM对象\n",[36,77829,77830,77832,77834,77836,77838,77840,77842,77844],{"class":38,"line":53140},[36,77831,14882],{"class":46},[36,77833,73376],{"class":112},[36,77835,673],{"class":46},[36,77837,57953],{"class":42},[36,77839,57956],{"class":101},[36,77841,495],{"class":42},[36,77843,73387],{"class":105},[36,77845,922],{"class":42},[36,77847,77848,77850,77852,77854,77856,77858,77860,77862],{"class":38,"line":53149},[36,77849,14882],{"class":46},[36,77851,73203],{"class":112},[36,77853,673],{"class":46},[36,77855,57953],{"class":42},[36,77857,57956],{"class":101},[36,77859,495],{"class":42},[36,77861,73214],{"class":105},[36,77863,922],{"class":42},[36,77865,77866,77868,77870,77872,77874,77876,77878,77880],{"class":38,"line":53166},[36,77867,14882],{"class":46},[36,77869,19345],{"class":112},[36,77871,673],{"class":46},[36,77873,57953],{"class":42},[36,77875,57956],{"class":101},[36,77877,495],{"class":42},[36,77879,73233],{"class":105},[36,77881,922],{"class":42},[36,77883,77885,77887,77889,77891,77893,77895,77897,77899],{"class":38,"line":77884},231,[36,77886,14882],{"class":46},[36,77888,73262],{"class":112},[36,77890,673],{"class":46},[36,77892,57953],{"class":42},[36,77894,57956],{"class":101},[36,77896,495],{"class":42},[36,77898,73273],{"class":105},[36,77900,922],{"class":42},[36,77902,77904,77906,77908,77910,77912,77914,77916,77918],{"class":38,"line":77903},232,[36,77905,14882],{"class":46},[36,77907,73242],{"class":112},[36,77909,673],{"class":46},[36,77911,57953],{"class":42},[36,77913,57956],{"class":101},[36,77915,495],{"class":42},[36,77917,73253],{"class":105},[36,77919,922],{"class":42},[36,77921,77923,77925,77927,77929,77931,77933,77935,77937],{"class":38,"line":77922},233,[36,77924,14882],{"class":46},[36,77926,73282],{"class":112},[36,77928,673],{"class":46},[36,77930,57953],{"class":42},[36,77932,57956],{"class":101},[36,77934,495],{"class":42},[36,77936,73293],{"class":105},[36,77938,922],{"class":42},[36,77940,77942],{"class":38,"line":77941},234,[36,77943,659],{"emptyLinePlaceholder":658},[36,77945,77947],{"class":38,"line":77946},235,[36,77948,77949],{"class":3943},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[36,77951,77953,77955,77957,77959,77961,77963,77965,77967,77969],{"class":38,"line":77952},236,[36,77954,73394],{"class":42},[36,77956,61368],{"class":101},[36,77958,495],{"class":42},[36,77960,73401],{"class":105},[36,77962,478],{"class":42},[36,77964,58005],{"class":46},[36,77966,5386],{"class":42},[36,77968,3958],{"class":468},[36,77970,16102],{"class":42},[36,77972,77974],{"class":38,"line":77973},237,[36,77975,77976],{"class":3943},"      \u002F\u002F 禁止浏览器跳转\n",[36,77978,77980,77982,77984],{"class":38,"line":77979},238,[36,77981,73421],{"class":42},[36,77983,73424],{"class":101},[36,77985,903],{"class":42},[36,77987,77989],{"class":38,"line":77988},239,[36,77990,77991],{"class":3943},"      \u002F\u002F 非空判断\n",[36,77993,77995],{"class":38,"line":77994},240,[36,77996,77997],{"class":3943},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[36,77999,78001],{"class":38,"line":78000},241,[36,78002,78003],{"class":3943},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[36,78005,78007,78009,78011,78013,78016,78018,78021,78024,78026,78028],{"class":38,"line":78006},242,[36,78008,58036],{"class":46},[36,78010,5386],{"class":42},[36,78012,4101],{"class":46},[36,78014,78015],{"class":42},"uname.value ",[36,78017,74911],{"class":46},[36,78019,78020],{"class":46}," !",[36,78022,78023],{"class":42},"age.value ",[36,78025,74911],{"class":46},[36,78027,78020],{"class":46},[36,78029,78030],{"class":42},"salary.value) {\n",[36,78032,78034,78036,78038,78040,78042],{"class":38,"line":78033},243,[36,78035,1239],{"class":46},[36,78037,73495],{"class":101},[36,78039,495],{"class":42},[36,78041,73500],{"class":105},[36,78043,922],{"class":42},[36,78045,78047],{"class":38,"line":78046},244,[36,78048,55955],{"class":42},[36,78050,78052,78054,78056],{"class":38,"line":78051},245,[36,78053,61562],{"class":42},[36,78055,55441],{"class":101},[36,78057,78058],{"class":42},"({\n",[36,78060,78062],{"class":38,"line":78061},246,[36,78063,78064],{"class":3943},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[36,78066,78068],{"class":38,"line":78067},247,[36,78069,78070],{"class":3943},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[36,78072,78074],{"class":38,"line":78073},248,[36,78075,78076],{"class":3943},"        \u002F\u002F 对象的序号应为数组长度+1\n",[36,78078,78080],{"class":38,"line":78079},249,[36,78081,78082],{"class":3943},"        \u002F\u002F unameId: arr.length + 1,\n",[36,78084,78086],{"class":38,"line":78085},250,[36,78087,659],{"emptyLinePlaceholder":658},[36,78089,78091],{"class":38,"line":78090},251,[36,78092,78093],{"class":3943},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[36,78095,78097],{"class":38,"line":78096},252,[36,78098,78099],{"class":3943},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[36,78101,78103],{"class":38,"line":78102},253,[36,78104,78105],{"class":3943},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[36,78107,78109],{"class":38,"line":78108},254,[36,78110,78111],{"class":3943},"        \u002F\u002F 0当假看\n",[36,78113,78115,78118,78120,78122,78125,78127,78129,78131,78134,78136,78138,78141,78143],{"class":38,"line":78114},255,[36,78116,78117],{"class":42},"        unameId: arr.",[36,78119,55525],{"class":112},[36,78121,77368],{"class":46},[36,78123,78124],{"class":42}," arr[arr.",[36,78126,55525],{"class":112},[36,78128,55828],{"class":46},[36,78130,28732],{"class":112},[36,78132,78133],{"class":42},"].unameId ",[36,78135,4354],{"class":46},[36,78137,28732],{"class":112},[36,78139,78140],{"class":46}," :",[36,78142,28732],{"class":112},[36,78144,35056],{"class":42},[36,78146,78148],{"class":38,"line":78147},256,[36,78149,73548],{"class":42},[36,78151,78153],{"class":38,"line":78152},257,[36,78154,73553],{"class":42},[36,78156,78158],{"class":38,"line":78157},258,[36,78159,73563],{"class":42},[36,78161,78163],{"class":38,"line":78162},259,[36,78164,73558],{"class":42},[36,78166,78168],{"class":38,"line":78167},260,[36,78169,78170],{"class":42},"        city: city.value,\n",[36,78172,78174],{"class":38,"line":78173},261,[36,78175,78176],{"class":3943},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[36,78178,78180],{"class":38,"line":78179},262,[36,78181,78182],{"class":3943},"        \u002F\u002F time: new Date().toDateString()\n",[36,78184,78186,78189,78192],{"class":38,"line":78185},263,[36,78187,78188],{"class":42},"        time: ",[36,78190,78191],{"class":101},"getTime",[36,78193,903],{"class":42},[36,78195,78197],{"class":38,"line":78196},264,[36,78198,68370],{"class":42},[36,78200,78202],{"class":38,"line":78201},265,[36,78203,78204],{"class":3943},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[36,78206,78208,78210],{"class":38,"line":78207},266,[36,78209,73622],{"class":101},[36,78211,903],{"class":42},[36,78213,78215,78217,78219,78221,78223],{"class":38,"line":78214},267,[36,78216,73606],{"class":112},[36,78218,842],{"class":42},[36,78220,2275],{"class":101},[36,78222,16710],{"class":42},[36,78224,78225],{"class":3943},"\u002F\u002F重置表单\n",[36,78227,78229],{"class":38,"line":78228},268,[36,78230,78231],{"class":3943},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[36,78233,78235,78238,78240,78242,78245,78247,78249,78251,78253],{"class":38,"line":78234},269,[36,78236,78237],{"class":42},"      localStorage.",[36,78239,75208],{"class":101},[36,78241,495],{"class":42},[36,78243,78244],{"class":105},"'data'",[36,78246,478],{"class":42},[36,78248,75218],{"class":112},[36,78250,842],{"class":42},[36,78252,75223],{"class":101},[36,78254,78255],{"class":42},"(arr))\n",[36,78257,78259],{"class":38,"line":78258},270,[36,78260,37021],{"class":42},[36,78262,78264],{"class":38,"line":78263},271,[36,78265,659],{"emptyLinePlaceholder":658},[36,78267,78269],{"class":38,"line":78268},272,[36,78270,78271],{"class":3943},"    \u002F\u002F 3.删除业务\n",[36,78273,78275],{"class":38,"line":78274},273,[36,78276,78277],{"class":3943},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[36,78279,78281,78283,78285,78287,78289,78291,78293,78295,78297],{"class":38,"line":78280},274,[36,78282,73895],{"class":42},[36,78284,61368],{"class":101},[36,78286,495],{"class":42},[36,78288,61373],{"class":105},[36,78290,478],{"class":42},[36,78292,58005],{"class":46},[36,78294,5386],{"class":42},[36,78296,3958],{"class":468},[36,78298,16102],{"class":42},[36,78300,78302],{"class":38,"line":78301},275,[36,78303,78304],{"class":3943},"      \u002F\u002F 判断是否点击的是删除按钮\n",[36,78306,78308,78310,78312,78314,78316],{"class":38,"line":78307},276,[36,78309,58036],{"class":46},[36,78311,70589],{"class":42},[36,78313,58042],{"class":46},[36,78315,71811],{"class":105},[36,78317,16102],{"class":42},[36,78319,78321],{"class":38,"line":78320},277,[36,78322,78323],{"class":3943},"        \u002F\u002F alert(1)\n",[36,78325,78327],{"class":38,"line":78326},278,[36,78328,78329],{"class":3943},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[36,78331,78333],{"class":38,"line":78332},279,[36,78334,78335],{"class":3943},"        \u002F\u002F console.log(e.target)\n",[36,78337,78339],{"class":38,"line":78338},280,[36,78340,78341],{"class":3943},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[36,78343,78345],{"class":38,"line":78344},281,[36,78346,659],{"emptyLinePlaceholder":658},[36,78348,78350],{"class":38,"line":78349},282,[36,78351,78352],{"class":3943},"        \u002F\u002F 确认框，确然是否真的要删除\n",[36,78354,78356],{"class":38,"line":78355},283,[36,78357,78358],{"class":3943},"        \u002F\u002F confirm()为确认框\n",[36,78360,78362],{"class":38,"line":78361},284,[36,78363,78364],{"class":3943},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[36,78366,78368,78370,78372,78375,78377,78380],{"class":38,"line":78367},285,[36,78369,995],{"class":46},[36,78371,5386],{"class":42},[36,78373,78374],{"class":101},"confirm",[36,78376,495],{"class":42},[36,78378,78379],{"class":105},"'您确定要删除这条数据吗？'",[36,78381,78382],{"class":42},")) {\n",[36,78384,78386,78389,78391,78393,78395],{"class":38,"line":78385},286,[36,78387,78388],{"class":42},"          arr.",[36,78390,61565],{"class":101},[36,78392,73948],{"class":42},[36,78394,4092],{"class":112},[36,78396,922],{"class":42},[36,78398,78400],{"class":38,"line":78399},287,[36,78401,78402],{"class":3943},"          \u002F\u002F 3.4 重新渲染页面\n",[36,78404,78406,78409],{"class":38,"line":78405},288,[36,78407,78408],{"class":101},"          render",[36,78410,903],{"class":42},[36,78412,78414],{"class":38,"line":78413},289,[36,78415,78416],{"class":3943},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[36,78418,78420,78423,78425,78427,78429,78431,78433,78435,78437],{"class":38,"line":78419},290,[36,78421,78422],{"class":42},"          localStorage.",[36,78424,75208],{"class":101},[36,78426,495],{"class":42},[36,78428,78244],{"class":105},[36,78430,478],{"class":42},[36,78432,75218],{"class":112},[36,78434,842],{"class":42},[36,78436,75223],{"class":101},[36,78438,78255],{"class":42},[36,78440,78442],{"class":38,"line":78441},291,[36,78443,6239],{"class":42},[36,78445,78447],{"class":38,"line":78446},292,[36,78448,55955],{"class":42},[36,78450,78452],{"class":38,"line":78451},293,[36,78453,659],{"emptyLinePlaceholder":658},[36,78455,78457],{"class":38,"line":78456},294,[36,78458,37021],{"class":42},[36,78460,78462],{"class":38,"line":78461},295,[36,78463,659],{"emptyLinePlaceholder":658},[36,78465,78467,78469,78471],{"class":38,"line":78466},296,[36,78468,55974],{"class":42},[36,78470,55370],{"class":54857},[36,78472,54864],{"class":42},[36,78474,78476,78478,78480],{"class":38,"line":78475},297,[36,78477,55342],{"class":42},[36,78479,55357],{"class":54857},[36,78481,54864],{"class":42},[36,78483,78485],{"class":38,"line":78484},298,[36,78486,659],{"emptyLinePlaceholder":658},[36,78488,78490,78492,78494],{"class":38,"line":78489},299,[36,78491,55342],{"class":42},[36,78493,54192],{"class":54857},[36,78495,54864],{"class":42},[14,78497,78499],{"id":78498},"_36-正则表达式","3.6 正则表达式",[19,78501,78502],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,78504,78505],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,78507,78508],{},"正则表达式的作用：",[4875,78510,78511,78518,78524],{},[214,78512,78513,78514,78517],{},"表单验证（ ",[4027,78515,78516],{},"匹配"," ）",[214,78519,78520,78521,78517],{},"过滤敏感词（ ",[4027,78522,78523],{},"替换",[214,78525,78526,78527,78517],{},"字符串中提取我们想要的部分（ ",[4027,78528,78529],{},"提取",[318,78531,78533],{"id":78532},"_361-语法","3.6.1 语法",[19,78535,78536],{},"正则表达式使用步骤：",[211,78538,78539,78542],{},[214,78540,78541],{},"定义规则",[214,78543,78544],{},"查找是否匹配",[19,78546,78547],{},"正则表达式里边不需要写引号",[19,78549,78550],{},[5198,78551],{"alt":31,"src":78552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,78554,78555],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,78557,78558],{},"reg.test(str)",[19,78560,78561],{},[5198,78562],{"alt":31,"src":78563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,78565,78566],{},[5198,78567],{"alt":31,"src":78568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[318,78570,78572],{"id":78571},"_362-元字符","3.6.2 元字符",[211,78574,78575,78578,78581,78584,78591],{},[214,78576,78577],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[214,78579,78580],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[214,78582,78583],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[214,78585,78586,78587],{},"正则验证工具：",[4113,78588,78589],{"href":78589,"rel":78590},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[27481],[214,78592,78593],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[25619,78595,78597],{"id":78596},"_3621-边界符","3.6.2.1 边界符",[19,78599,78600],{},[5198,78601],{"alt":31,"src":78602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,78604,78605],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,78607,78608],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,78610,78611],{},"只匹配一次",[19,78613,78614],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[25619,78616,78618],{"id":78617},"_3622-量词","3.6.2.2 量词",[19,78620,78621],{},[5198,78622],{"alt":31,"src":78623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,78625,78626],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[25619,78628,78630],{"id":78629},"_3623-元字符","3.6.2.3 元字符",[19,78632,78633],{},[5198,78634],{"alt":31,"src":78635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,78637,78638],{},"匹配的是a或b或c []只选一个",[19,78640,78641],{},[5198,78642],{"alt":31,"src":78643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,78645,78646],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,78648,78649],{},[5198,78650],{"alt":31,"src":78651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,78653,78654],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,78656,78657],{},[5198,78658],{"alt":31,"src":78659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[26,78661,78663],{"className":54190,"code":78662,"language":54192,"meta":31,"style":31},"\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",[33,78664,78665,78675,78689,78693,78701,78715,78735,78747,78755,78759,78767,78775,78780,78811,78838,78866,78870,78875,78903,78934,78939,78944,78975,79007,79039,79043,79048,79079,79109,79139,79143,79148,79179,79210,79240,79270,79274,79279,79312,79316,79321,79352,79383,79387,79392,79423,79453,79484,79488,79493,79525,79556,79587,79614,79645,79677,79710,79741,79772,79804,79835,79843,79851,79855],{"__ignoreMap":31},[36,78666,78667,78669,78671,78673],{"class":38,"line":39},[36,78668,54854],{"class":42},[36,78670,54858],{"class":54857},[36,78672,54861],{"class":101},[36,78674,54864],{"class":42},[36,78676,78677,78679,78681,78683,78685,78687],{"class":38,"line":53},[36,78678,393],{"class":42},[36,78680,54192],{"class":54857},[36,78682,54873],{"class":101},[36,78684,47],{"class":42},[36,78686,54878],{"class":105},[36,78688,54864],{"class":42},[36,78690,78691],{"class":38,"line":196},[36,78692,659],{"emptyLinePlaceholder":658},[36,78694,78695,78697,78699],{"class":38,"line":642},[36,78696,393],{"class":42},[36,78698,54891],{"class":54857},[36,78700,54864],{"class":42},[36,78702,78703,78705,78707,78709,78711,78713],{"class":38,"line":655},[36,78704,55701],{"class":42},[36,78706,54901],{"class":54857},[36,78708,54904],{"class":101},[36,78710,47],{"class":42},[36,78712,54909],{"class":105},[36,78714,54864],{"class":42},[36,78716,78717,78719,78721,78723,78725,78727,78729,78731,78733],{"class":38,"line":662},[36,78718,55701],{"class":42},[36,78720,54901],{"class":54857},[36,78722,18576],{"class":101},[36,78724,47],{"class":42},[36,78726,54948],{"class":105},[36,78728,54928],{"class":101},[36,78730,47],{"class":42},[36,78732,54955],{"class":105},[36,78734,54864],{"class":42},[36,78736,78737,78739,78741,78743,78745],{"class":38,"line":667},[36,78738,55701],{"class":42},[36,78740,54964],{"class":54857},[36,78742,54967],{"class":42},[36,78744,54964],{"class":54857},[36,78746,54864],{"class":42},[36,78748,78749,78751,78753],{"class":38,"line":679},[36,78750,55342],{"class":42},[36,78752,54891],{"class":54857},[36,78754,54864],{"class":42},[36,78756,78757],{"class":38,"line":685},[36,78758,659],{"emptyLinePlaceholder":658},[36,78760,78761,78763,78765],{"class":38,"line":691},[36,78762,393],{"class":42},[36,78764,55357],{"class":54857},[36,78766,54864],{"class":42},[36,78768,78769,78771,78773],{"class":38,"line":696},[36,78770,55701],{"class":42},[36,78772,55370],{"class":54857},[36,78774,54864],{"class":42},[36,78776,78777],{"class":38,"line":702},[36,78778,78779],{"class":3943},"    \u002F\u002F 元字符中\n",[36,78781,78782,78784,78786,78788,78790,78793,78795,78797,78800,78802,78805,78808],{"class":38,"line":708},[36,78783,77307],{"class":42},[36,78785,61802],{"class":101},[36,78787,495],{"class":42},[36,78789,4455],{"class":105},[36,78791,78792],{"class":51534},"哈",[36,78794,4455],{"class":105},[36,78796,842],{"class":42},[36,78798,78799],{"class":101},"test",[36,78801,495],{"class":42},[36,78803,78804],{"class":105},"'哈'",[36,78806,78807],{"class":42},"))  ",[36,78809,78810],{"class":3943},"\u002F\u002Ftrue\n",[36,78812,78813,78815,78817,78819,78821,78823,78825,78827,78829,78831,78834,78836],{"class":38,"line":713},[36,78814,77307],{"class":42},[36,78816,61802],{"class":101},[36,78818,495],{"class":42},[36,78820,4455],{"class":105},[36,78822,78792],{"class":51534},[36,78824,4455],{"class":105},[36,78826,842],{"class":42},[36,78828,78799],{"class":101},[36,78830,495],{"class":42},[36,78832,78833],{"class":105},"'哈哈'",[36,78835,78807],{"class":42},[36,78837,78810],{"class":3943},[36,78839,78840,78842,78844,78846,78848,78850,78852,78854,78856,78858,78861,78864],{"class":38,"line":719},[36,78841,77307],{"class":42},[36,78843,61802],{"class":101},[36,78845,495],{"class":42},[36,78847,4455],{"class":105},[36,78849,78792],{"class":51534},[36,78851,4455],{"class":105},[36,78853,842],{"class":42},[36,78855,78799],{"class":101},[36,78857,495],{"class":42},[36,78859,78860],{"class":105},"'二哈'",[36,78862,78863],{"class":42},"))   ",[36,78865,78810],{"class":3943},[36,78867,78868],{"class":38,"line":725},[36,78869,659],{"emptyLinePlaceholder":658},[36,78871,78872],{"class":38,"line":731},[36,78873,78874],{"class":3943},"    \u002F\u002F 1.边界符\n",[36,78876,78877,78879,78881,78883,78885,78887,78889,78891,78893,78895,78897,78899,78901],{"class":38,"line":736},[36,78878,77307],{"class":42},[36,78880,61802],{"class":101},[36,78882,495],{"class":42},[36,78884,4455],{"class":105},[36,78886,4835],{"class":46},[36,78888,78792],{"class":51534},[36,78890,4455],{"class":105},[36,78892,842],{"class":42},[36,78894,78799],{"class":101},[36,78896,495],{"class":42},[36,78898,78804],{"class":105},[36,78900,78807],{"class":42},[36,78902,78810],{"class":3943},[36,78904,78905,78907,78909,78911,78913,78915,78917,78919,78921,78923,78925,78927,78929,78931],{"class":38,"line":742},[36,78906,77307],{"class":42},[36,78908,61802],{"class":101},[36,78910,495],{"class":42},[36,78912,4455],{"class":105},[36,78914,4835],{"class":46},[36,78916,78792],{"class":51534},[36,78918,4177],{"class":46},[36,78920,4455],{"class":105},[36,78922,842],{"class":42},[36,78924,78799],{"class":101},[36,78926,495],{"class":42},[36,78928,78833],{"class":105},[36,78930,78807],{"class":42},[36,78932,78933],{"class":3943},"\u002F\u002Ffalse\n",[36,78935,78936],{"class":38,"line":748},[36,78937,78938],{"class":3943},"    \u002F\u002F 2.量词\n",[36,78940,78941],{"class":38,"line":754},[36,78942,78943],{"class":3943},"    \u002F\u002F 量词 * 类似于 >= 0\n",[36,78945,78946,78948,78950,78952,78954,78956,78958,78961,78963,78965,78967,78969,78971,78973],{"class":38,"line":760},[36,78947,77307],{"class":42},[36,78949,61802],{"class":101},[36,78951,495],{"class":42},[36,78953,4455],{"class":105},[36,78955,4835],{"class":46},[36,78957,78792],{"class":51534},[36,78959,78960],{"class":46},"*$",[36,78962,4455],{"class":105},[36,78964,842],{"class":42},[36,78966,78799],{"class":101},[36,78968,495],{"class":42},[36,78970,78833],{"class":105},[36,78972,78807],{"class":42},[36,78974,78810],{"class":3943},[36,78976,78977,78979,78981,78983,78985,78987,78989,78991,78993,78995,78997,78999,79002,79004],{"class":38,"line":766},[36,78978,77307],{"class":42},[36,78980,61802],{"class":101},[36,78982,495],{"class":42},[36,78984,4455],{"class":105},[36,78986,4835],{"class":46},[36,78988,78792],{"class":51534},[36,78990,78960],{"class":46},[36,78992,4455],{"class":105},[36,78994,842],{"class":42},[36,78996,78799],{"class":101},[36,78998,495],{"class":42},[36,79000,79001],{"class":105},"'二哈好傻'",[36,79003,78807],{"class":42},[36,79005,79006],{"class":3943},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[36,79008,79009,79011,79013,79015,79017,79019,79021,79023,79025,79027,79029,79031,79034,79036],{"class":38,"line":772},[36,79010,77307],{"class":42},[36,79012,61802],{"class":101},[36,79014,495],{"class":42},[36,79016,4455],{"class":105},[36,79018,4835],{"class":46},[36,79020,78792],{"class":51534},[36,79022,78960],{"class":46},[36,79024,4455],{"class":105},[36,79026,842],{"class":42},[36,79028,78799],{"class":101},[36,79030,495],{"class":42},[36,79032,79033],{"class":105},"'哈好哈'",[36,79035,78863],{"class":42},[36,79037,79038],{"class":3943},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[36,79040,79041],{"class":38,"line":778},[36,79042,659],{"emptyLinePlaceholder":658},[36,79044,79045],{"class":38,"line":783},[36,79046,79047],{"class":3943},"    \u002F\u002F +类似于>=1\n",[36,79049,79050,79052,79054,79056,79058,79060,79062,79065,79067,79069,79071,79073,79075,79077],{"class":38,"line":789},[36,79051,77307],{"class":42},[36,79053,61802],{"class":101},[36,79055,495],{"class":42},[36,79057,4455],{"class":105},[36,79059,4835],{"class":46},[36,79061,78792],{"class":51534},[36,79063,79064],{"class":46},"+$",[36,79066,4455],{"class":105},[36,79068,842],{"class":42},[36,79070,78799],{"class":101},[36,79072,495],{"class":42},[36,79074,78833],{"class":105},[36,79076,78807],{"class":42},[36,79078,78810],{"class":3943},[36,79080,79081,79083,79085,79087,79089,79091,79093,79095,79097,79099,79101,79103,79105,79107],{"class":38,"line":795},[36,79082,77307],{"class":42},[36,79084,61802],{"class":101},[36,79086,495],{"class":42},[36,79088,4455],{"class":105},[36,79090,4835],{"class":46},[36,79092,78792],{"class":51534},[36,79094,79064],{"class":46},[36,79096,4455],{"class":105},[36,79098,842],{"class":42},[36,79100,78799],{"class":101},[36,79102,495],{"class":42},[36,79104,79001],{"class":105},[36,79106,78807],{"class":42},[36,79108,79006],{"class":3943},[36,79110,79111,79113,79115,79117,79119,79121,79123,79125,79127,79129,79131,79133,79135,79137],{"class":38,"line":801},[36,79112,77307],{"class":42},[36,79114,61802],{"class":101},[36,79116,495],{"class":42},[36,79118,4455],{"class":105},[36,79120,4835],{"class":46},[36,79122,78792],{"class":51534},[36,79124,79064],{"class":46},[36,79126,4455],{"class":105},[36,79128,842],{"class":42},[36,79130,78799],{"class":101},[36,79132,495],{"class":42},[36,79134,79033],{"class":105},[36,79136,78863],{"class":42},[36,79138,78933],{"class":3943},[36,79140,79141],{"class":38,"line":807},[36,79142,659],{"emptyLinePlaceholder":658},[36,79144,79145],{"class":38,"line":813},[36,79146,79147],{"class":3943},"    \u002F\u002F ?类似于0次或一次\n",[36,79149,79150,79152,79154,79156,79158,79160,79163,79165,79167,79169,79171,79173,79175,79177],{"class":38,"line":819},[36,79151,77307],{"class":42},[36,79153,61802],{"class":101},[36,79155,495],{"class":42},[36,79157,4455],{"class":105},[36,79159,4835],{"class":46},[36,79161,79162],{"class":51534},"哈？",[36,79164,4177],{"class":46},[36,79166,4455],{"class":105},[36,79168,842],{"class":42},[36,79170,78799],{"class":101},[36,79172,495],{"class":42},[36,79174,77782],{"class":105},[36,79176,78863],{"class":42},[36,79178,78810],{"class":3943},[36,79180,79181,79183,79185,79187,79189,79191,79193,79196,79198,79200,79202,79204,79206,79208],{"class":38,"line":824},[36,79182,77307],{"class":42},[36,79184,61802],{"class":101},[36,79186,495],{"class":42},[36,79188,4455],{"class":105},[36,79190,4835],{"class":46},[36,79192,78792],{"class":51534},[36,79194,79195],{"class":46},"?$",[36,79197,4455],{"class":105},[36,79199,842],{"class":42},[36,79201,78799],{"class":101},[36,79203,495],{"class":42},[36,79205,78833],{"class":105},[36,79207,78807],{"class":42},[36,79209,78933],{"class":3943},[36,79211,79212,79214,79216,79218,79220,79222,79224,79226,79228,79230,79232,79234,79236,79238],{"class":38,"line":829},[36,79213,77307],{"class":42},[36,79215,61802],{"class":101},[36,79217,495],{"class":42},[36,79219,4455],{"class":105},[36,79221,4835],{"class":46},[36,79223,78792],{"class":51534},[36,79225,79195],{"class":46},[36,79227,4455],{"class":105},[36,79229,842],{"class":42},[36,79231,78799],{"class":101},[36,79233,495],{"class":42},[36,79235,79001],{"class":105},[36,79237,78807],{"class":42},[36,79239,79006],{"class":3943},[36,79241,79242,79244,79246,79248,79250,79252,79254,79256,79258,79260,79262,79264,79266,79268],{"class":38,"line":851},[36,79243,77307],{"class":42},[36,79245,61802],{"class":101},[36,79247,495],{"class":42},[36,79249,4455],{"class":105},[36,79251,4835],{"class":46},[36,79253,78792],{"class":51534},[36,79255,79195],{"class":46},[36,79257,4455],{"class":105},[36,79259,842],{"class":42},[36,79261,78799],{"class":101},[36,79263,495],{"class":42},[36,79265,79033],{"class":105},[36,79267,78807],{"class":42},[36,79269,78933],{"class":3943},[36,79271,79272],{"class":38,"line":868},[36,79273,659],{"emptyLinePlaceholder":658},[36,79275,79276],{"class":38,"line":873},[36,79277,79278],{"class":3943},"    \u002F\u002F {n}写几，就必须出现几次\n",[36,79280,79281,79283,79285,79287,79289,79291,79293,79296,79298,79300,79302,79304,79307,79310],{"class":38,"line":891},[36,79282,77307],{"class":42},[36,79284,61802],{"class":101},[36,79286,495],{"class":42},[36,79288,4455],{"class":105},[36,79290,4835],{"class":46},[36,79292,78792],{"class":51534},[36,79294,79295],{"class":46},"{4}$",[36,79297,4455],{"class":105},[36,79299,842],{"class":42},[36,79301,78799],{"class":101},[36,79303,495],{"class":42},[36,79305,79306],{"class":105},"'哈哈哈哈'",[36,79308,79309],{"class":42},")) ",[36,79311,78810],{"class":3943},[36,79313,79314],{"class":38,"line":906},[36,79315,659],{"emptyLinePlaceholder":658},[36,79317,79318],{"class":38,"line":925},[36,79319,79320],{"class":3943},"    \u002F\u002F {n,}大于等于n次\n",[36,79322,79323,79325,79327,79329,79331,79333,79335,79338,79340,79342,79344,79346,79348,79350],{"class":38,"line":943},[36,79324,77307],{"class":42},[36,79326,61802],{"class":101},[36,79328,495],{"class":42},[36,79330,4455],{"class":105},[36,79332,4835],{"class":46},[36,79334,78792],{"class":51534},[36,79336,79337],{"class":46},"{4,}$",[36,79339,4455],{"class":105},[36,79341,842],{"class":42},[36,79343,78799],{"class":101},[36,79345,495],{"class":42},[36,79347,79306],{"class":105},[36,79349,79309],{"class":42},[36,79351,78810],{"class":3943},[36,79353,79354,79356,79358,79360,79362,79364,79366,79368,79370,79372,79374,79376,79379,79381],{"class":38,"line":948},[36,79355,77307],{"class":42},[36,79357,61802],{"class":101},[36,79359,495],{"class":42},[36,79361,4455],{"class":105},[36,79363,4835],{"class":46},[36,79365,78792],{"class":51534},[36,79367,79337],{"class":46},[36,79369,4455],{"class":105},[36,79371,842],{"class":42},[36,79373,78799],{"class":101},[36,79375,495],{"class":42},[36,79377,79378],{"class":105},"'哈哈哈哈哈'",[36,79380,79309],{"class":42},[36,79382,78810],{"class":3943},[36,79384,79385],{"class":38,"line":971},[36,79386,659],{"emptyLinePlaceholder":658},[36,79388,79389],{"class":38,"line":992},[36,79390,79391],{"class":3943},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[36,79393,79394,79396,79398,79400,79402,79404,79406,79409,79411,79413,79415,79417,79419,79421],{"class":38,"line":1020},[36,79395,77307],{"class":42},[36,79397,61802],{"class":101},[36,79399,495],{"class":42},[36,79401,4455],{"class":105},[36,79403,4835],{"class":46},[36,79405,78792],{"class":51534},[36,79407,79408],{"class":46},"{4,6}$",[36,79410,4455],{"class":105},[36,79412,842],{"class":42},[36,79414,78799],{"class":101},[36,79416,495],{"class":42},[36,79418,79306],{"class":105},[36,79420,79309],{"class":42},[36,79422,78810],{"class":3943},[36,79424,79425,79427,79429,79431,79433,79435,79437,79439,79441,79443,79445,79447,79449,79451],{"class":38,"line":1036},[36,79426,77307],{"class":42},[36,79428,61802],{"class":101},[36,79430,495],{"class":42},[36,79432,4455],{"class":105},[36,79434,4835],{"class":46},[36,79436,78792],{"class":51534},[36,79438,79408],{"class":46},[36,79440,4455],{"class":105},[36,79442,842],{"class":42},[36,79444,78799],{"class":101},[36,79446,495],{"class":42},[36,79448,79378],{"class":105},[36,79450,79309],{"class":42},[36,79452,78810],{"class":3943},[36,79454,79455,79457,79459,79461,79463,79465,79467,79469,79471,79473,79475,79477,79480,79482],{"class":38,"line":1041},[36,79456,77307],{"class":42},[36,79458,61802],{"class":101},[36,79460,495],{"class":42},[36,79462,4455],{"class":105},[36,79464,4835],{"class":46},[36,79466,78792],{"class":51534},[36,79468,79408],{"class":46},[36,79470,4455],{"class":105},[36,79472,842],{"class":42},[36,79474,78799],{"class":101},[36,79476,495],{"class":42},[36,79478,79479],{"class":105},"'哈哈哈哈哈哈哈'",[36,79481,79309],{"class":42},[36,79483,78933],{"class":3943},[36,79485,79486],{"class":38,"line":1052},[36,79487,659],{"emptyLinePlaceholder":658},[36,79489,79490],{"class":38,"line":1065},[36,79491,79492],{"class":3943},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[36,79494,79495,79497,79499,79501,79503,79505,79508,79510,79512,79514,79516,79518,79521,79523],{"class":38,"line":1077},[36,79496,77307],{"class":42},[36,79498,61802],{"class":101},[36,79500,495],{"class":42},[36,79502,4455],{"class":105},[36,79504,4835],{"class":46},[36,79506,79507],{"class":112},"[abc]",[36,79509,4177],{"class":46},[36,79511,4455],{"class":105},[36,79513,842],{"class":42},[36,79515,78799],{"class":101},[36,79517,495],{"class":42},[36,79519,79520],{"class":105},"'a'",[36,79522,78807],{"class":42},[36,79524,78810],{"class":3943},[36,79526,79527,79529,79531,79533,79535,79537,79539,79541,79543,79545,79547,79549,79552,79554],{"class":38,"line":1082},[36,79528,77307],{"class":42},[36,79530,61802],{"class":101},[36,79532,495],{"class":42},[36,79534,4455],{"class":105},[36,79536,4835],{"class":46},[36,79538,79507],{"class":112},[36,79540,4177],{"class":46},[36,79542,4455],{"class":105},[36,79544,842],{"class":42},[36,79546,78799],{"class":101},[36,79548,495],{"class":42},[36,79550,79551],{"class":105},"'b'",[36,79553,78807],{"class":42},[36,79555,78810],{"class":3943},[36,79557,79558,79560,79562,79564,79566,79568,79570,79572,79574,79576,79578,79580,79583,79585],{"class":38,"line":1125},[36,79559,77307],{"class":42},[36,79561,61802],{"class":101},[36,79563,495],{"class":42},[36,79565,4455],{"class":105},[36,79567,4835],{"class":46},[36,79569,79507],{"class":112},[36,79571,4177],{"class":46},[36,79573,4455],{"class":105},[36,79575,842],{"class":42},[36,79577,78799],{"class":101},[36,79579,495],{"class":42},[36,79581,79582],{"class":105},"'c'",[36,79584,78807],{"class":42},[36,79586,78810],{"class":3943},[36,79588,79589,79591,79593,79595,79597,79599,79601,79603,79605,79607,79610,79612],{"class":38,"line":1164},[36,79590,77307],{"class":42},[36,79592,61802],{"class":101},[36,79594,495],{"class":42},[36,79596,4455],{"class":105},[36,79598,79507],{"class":112},[36,79600,4455],{"class":105},[36,79602,842],{"class":42},[36,79604,78799],{"class":101},[36,79606,495],{"class":42},[36,79608,79609],{"class":105},"'ab'",[36,79611,78807],{"class":42},[36,79613,78810],{"class":3943},[36,79615,79616,79618,79620,79622,79624,79626,79628,79630,79632,79634,79636,79638,79640,79642],{"class":38,"line":1169},[36,79617,77307],{"class":42},[36,79619,61802],{"class":101},[36,79621,495],{"class":42},[36,79623,4455],{"class":105},[36,79625,4835],{"class":46},[36,79627,79507],{"class":112},[36,79629,4177],{"class":46},[36,79631,4455],{"class":105},[36,79633,842],{"class":42},[36,79635,78799],{"class":101},[36,79637,495],{"class":42},[36,79639,79609],{"class":105},[36,79641,78807],{"class":42},[36,79643,79644],{"class":3943},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[36,79646,79647,79649,79651,79653,79655,79657,79659,79662,79664,79666,79668,79670,79672,79674],{"class":38,"line":1180},[36,79648,77307],{"class":42},[36,79650,61802],{"class":101},[36,79652,495],{"class":42},[36,79654,4455],{"class":105},[36,79656,4835],{"class":46},[36,79658,79507],{"class":112},[36,79660,79661],{"class":46},"{2}$",[36,79663,4455],{"class":105},[36,79665,842],{"class":42},[36,79667,78799],{"class":101},[36,79669,495],{"class":42},[36,79671,79609],{"class":105},[36,79673,78807],{"class":42},[36,79675,79676],{"class":3943},"\u002F\u002Ftrue   可以选两个\n",[36,79678,79679,79681,79683,79685,79687,79689,79692,79694,79696,79698,79700,79702,79705,79707],{"class":38,"line":1198},[36,79680,77307],{"class":42},[36,79682,61802],{"class":101},[36,79684,495],{"class":42},[36,79686,4455],{"class":105},[36,79688,4835],{"class":46},[36,79690,79691],{"class":112},"[a-z]",[36,79693,4177],{"class":46},[36,79695,4455],{"class":105},[36,79697,842],{"class":42},[36,79699,78799],{"class":101},[36,79701,495],{"class":42},[36,79703,79704],{"class":105},"'p'",[36,79706,78863],{"class":42},[36,79708,79709],{"class":3943},"\u002F\u002Ftrue   依然只能选一个\n",[36,79711,79712,79714,79716,79718,79720,79722,79725,79727,79729,79731,79733,79735,79737,79739],{"class":38,"line":1215},[36,79713,77307],{"class":42},[36,79715,61802],{"class":101},[36,79717,495],{"class":42},[36,79719,4455],{"class":105},[36,79721,4835],{"class":46},[36,79723,79724],{"class":112},"[A-Z]",[36,79726,4177],{"class":46},[36,79728,4455],{"class":105},[36,79730,842],{"class":42},[36,79732,78799],{"class":101},[36,79734,495],{"class":42},[36,79736,79704],{"class":105},[36,79738,78863],{"class":42},[36,79740,78933],{"class":3943},[36,79742,79743,79745,79747,79749,79751,79753,79755,79757,79759,79761,79763,79765,79768,79770],{"class":38,"line":1236},[36,79744,77307],{"class":42},[36,79746,61802],{"class":101},[36,79748,495],{"class":42},[36,79750,4455],{"class":105},[36,79752,4835],{"class":46},[36,79754,79724],{"class":112},[36,79756,4177],{"class":46},[36,79758,4455],{"class":105},[36,79760,842],{"class":42},[36,79762,78799],{"class":101},[36,79764,495],{"class":42},[36,79766,79767],{"class":105},"'P'",[36,79769,78863],{"class":42},[36,79771,78810],{"class":3943},[36,79773,79774,79776,79778,79780,79782,79784,79787,79789,79791,79793,79795,79797,79800,79802],{"class":38,"line":1245},[36,79775,77307],{"class":42},[36,79777,61802],{"class":101},[36,79779,495],{"class":42},[36,79781,4455],{"class":105},[36,79783,4835],{"class":46},[36,79785,79786],{"class":112},"[0-9]",[36,79788,4177],{"class":46},[36,79790,4455],{"class":105},[36,79792,842],{"class":42},[36,79794,78799],{"class":101},[36,79796,495],{"class":42},[36,79798,79799],{"class":105},"'0'",[36,79801,78863],{"class":42},[36,79803,78810],{"class":3943},[36,79805,79806,79808,79810,79812,79814,79816,79819,79821,79823,79825,79827,79829,79831,79833],{"class":38,"line":1250},[36,79807,77307],{"class":42},[36,79809,61802],{"class":101},[36,79811,495],{"class":42},[36,79813,4455],{"class":105},[36,79815,4835],{"class":46},[36,79817,79818],{"class":112},"[a-zA-Z0-9]",[36,79820,4177],{"class":46},[36,79822,4455],{"class":105},[36,79824,842],{"class":42},[36,79826,78799],{"class":101},[36,79828,495],{"class":42},[36,79830,79704],{"class":105},[36,79832,78807],{"class":42},[36,79834,78810],{"class":3943},[36,79836,79837,79839,79841],{"class":38,"line":1265},[36,79838,55974],{"class":42},[36,79840,55370],{"class":54857},[36,79842,54864],{"class":42},[36,79844,79845,79847,79849],{"class":38,"line":1281},[36,79846,55342],{"class":42},[36,79848,55357],{"class":54857},[36,79850,54864],{"class":42},[36,79852,79853],{"class":38,"line":1297},[36,79854,659],{"emptyLinePlaceholder":658},[36,79856,79857,79859,79861],{"class":38,"line":1314},[36,79858,55342],{"class":42},[36,79860,54192],{"class":54857},[36,79862,54864],{"class":42},[25619,79864,79866],{"id":79865},"_3624-修饰符","3.6.2.4 修饰符",[19,79868,79869],{},[5198,79870],{"alt":31,"src":79871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,79873,79874],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,79876,79877],{},[5198,79878],{"alt":31,"src":79879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[26,79881,79883],{"className":54190,"code":79882,"language":54192,"meta":31,"style":31},"\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",[33,79884,79885,79895,79909,79917,79931,79951,79963,79971,79979,79987,80019,80050,80055,80087,80098,80131,80140,80148,80156],{"__ignoreMap":31},[36,79886,79887,79889,79891,79893],{"class":38,"line":39},[36,79888,54854],{"class":42},[36,79890,54858],{"class":54857},[36,79892,54861],{"class":101},[36,79894,54864],{"class":42},[36,79896,79897,79899,79901,79903,79905,79907],{"class":38,"line":53},[36,79898,393],{"class":42},[36,79900,54192],{"class":54857},[36,79902,54873],{"class":101},[36,79904,47],{"class":42},[36,79906,54878],{"class":105},[36,79908,54864],{"class":42},[36,79910,79911,79913,79915],{"class":38,"line":196},[36,79912,393],{"class":42},[36,79914,54891],{"class":54857},[36,79916,54864],{"class":42},[36,79918,79919,79921,79923,79925,79927,79929],{"class":38,"line":642},[36,79920,55701],{"class":42},[36,79922,54901],{"class":54857},[36,79924,54904],{"class":101},[36,79926,47],{"class":42},[36,79928,54909],{"class":105},[36,79930,54864],{"class":42},[36,79932,79933,79935,79937,79939,79941,79943,79945,79947,79949],{"class":38,"line":655},[36,79934,55701],{"class":42},[36,79936,54901],{"class":54857},[36,79938,18576],{"class":101},[36,79940,47],{"class":42},[36,79942,54948],{"class":105},[36,79944,54928],{"class":101},[36,79946,47],{"class":42},[36,79948,54955],{"class":105},[36,79950,54864],{"class":42},[36,79952,79953,79955,79957,79959,79961],{"class":38,"line":662},[36,79954,55701],{"class":42},[36,79956,54964],{"class":54857},[36,79958,54967],{"class":42},[36,79960,54964],{"class":54857},[36,79962,54864],{"class":42},[36,79964,79965,79967,79969],{"class":38,"line":667},[36,79966,55342],{"class":42},[36,79968,54891],{"class":54857},[36,79970,54864],{"class":42},[36,79972,79973,79975,79977],{"class":38,"line":679},[36,79974,393],{"class":42},[36,79976,55357],{"class":54857},[36,79978,54864],{"class":42},[36,79980,79981,79983,79985],{"class":38,"line":685},[36,79982,55701],{"class":42},[36,79984,55370],{"class":54857},[36,79986,54864],{"class":42},[36,79988,79989,79991,79993,79995,79997,79999,80002,80004,80006,80008,80010,80012,80015,80017],{"class":38,"line":691},[36,79990,77307],{"class":42},[36,79992,61802],{"class":101},[36,79994,495],{"class":42},[36,79996,4455],{"class":105},[36,79998,4835],{"class":46},[36,80000,80001],{"class":51534},"java",[36,80003,4177],{"class":46},[36,80005,4455],{"class":105},[36,80007,842],{"class":42},[36,80009,78799],{"class":101},[36,80011,495],{"class":42},[36,80013,80014],{"class":105},"'java'",[36,80016,79309],{"class":42},[36,80018,78810],{"class":3943},[36,80020,80021,80023,80025,80027,80029,80031,80033,80035,80037,80039,80041,80043,80046,80048],{"class":38,"line":696},[36,80022,77307],{"class":42},[36,80024,61802],{"class":101},[36,80026,495],{"class":42},[36,80028,4455],{"class":105},[36,80030,4835],{"class":46},[36,80032,80001],{"class":51534},[36,80034,4177],{"class":46},[36,80036,4455],{"class":105},[36,80038,842],{"class":42},[36,80040,78799],{"class":101},[36,80042,495],{"class":42},[36,80044,80045],{"class":105},"'Java'",[36,80047,79309],{"class":42},[36,80049,78933],{"class":3943},[36,80051,80052],{"class":38,"line":702},[36,80053,80054],{"class":3943},"    \u002F\u002F 不区分大小写、\n",[36,80056,80057,80059,80061,80063,80065,80067,80069,80071,80073,80075,80077,80079,80081,80083,80085],{"class":38,"line":708},[36,80058,77307],{"class":42},[36,80060,61802],{"class":101},[36,80062,495],{"class":42},[36,80064,4455],{"class":105},[36,80066,4835],{"class":46},[36,80068,80001],{"class":51534},[36,80070,4177],{"class":46},[36,80072,4455],{"class":105},[36,80074,4316],{"class":46},[36,80076,842],{"class":42},[36,80078,78799],{"class":101},[36,80080,495],{"class":42},[36,80082,80045],{"class":105},[36,80084,79309],{"class":42},[36,80086,78810],{"class":3943},[36,80088,80089,80091,80093,80095],{"class":38,"line":713},[36,80090,14882],{"class":46},[36,80092,77473],{"class":112},[36,80094,673],{"class":46},[36,80096,80097],{"class":105}," 'java是一门编程语言，学完java工资很高'\n",[36,80099,80100,80102,80105,80107,80110,80113,80115,80117,80119,80121,80124,80126,80129],{"class":38,"line":719},[36,80101,14882],{"class":46},[36,80103,80104],{"class":112}," result",[36,80106,673],{"class":46},[36,80108,80109],{"class":42}," str.",[36,80111,80112],{"class":101},"replace",[36,80114,495],{"class":42},[36,80116,4455],{"class":105},[36,80118,80001],{"class":51534},[36,80120,4455],{"class":105},[36,80122,80123],{"class":46},"ig",[36,80125,478],{"class":42},[36,80127,80128],{"class":105},"'前端'",[36,80130,922],{"class":42},[36,80132,80133,80135,80137],{"class":38,"line":725},[36,80134,77307],{"class":42},[36,80136,61802],{"class":101},[36,80138,80139],{"class":42},"(result)\n",[36,80141,80142,80144,80146],{"class":38,"line":731},[36,80143,55974],{"class":42},[36,80145,55370],{"class":54857},[36,80147,54864],{"class":42},[36,80149,80150,80152,80154],{"class":38,"line":736},[36,80151,55342],{"class":42},[36,80153,55357],{"class":54857},[36,80155,54864],{"class":42},[36,80157,80158,80160,80162],{"class":38,"line":742},[36,80159,55342],{"class":42},[36,80161,54192],{"class":54857},[36,80163,54864],{"class":42},[3785,80165,80166],{},"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":31,"searchDepth":53,"depth":53,"links":80168},[80169,80179,80191,80208,80215,80223],{"id":56917,"depth":53,"text":56918,"children":80170},[80171,80172,80173,80174,80175,80176,80177,80178],{"id":56921,"depth":196,"text":56922},{"id":56954,"depth":196,"text":56955},{"id":56993,"depth":196,"text":56994},{"id":57151,"depth":196,"text":57152},{"id":57199,"depth":196,"text":57200},{"id":57336,"depth":196,"text":57337},{"id":57658,"depth":196,"text":57659},{"id":60644,"depth":196,"text":60645},{"id":60672,"depth":53,"text":60673,"children":80180},[80181,80182,80183,80184,80185,80186,80187,80188,80189,80190],{"id":60676,"depth":196,"text":60677},{"id":60699,"depth":196,"text":60700},{"id":61614,"depth":196,"text":61615},{"id":62304,"depth":196,"text":62305},{"id":62586,"depth":196,"text":62587},{"id":66747,"depth":196,"text":66748},{"id":66917,"depth":196,"text":66918},{"id":67045,"depth":196,"text":67046},{"id":67070,"depth":196,"text":67071},{"id":68459,"depth":196,"text":68460},{"id":69612,"depth":53,"text":69613,"children":80192},[80193,80194,80195,80196,80197,80198,80199,80200,80201,80202,80203,80204,80205,80206,80207],{"id":69616,"depth":196,"text":69617},{"id":70270,"depth":196,"text":70271},{"id":71965,"depth":196,"text":71966},{"id":72006,"depth":196,"text":72007},{"id":72048,"depth":196,"text":72049},{"id":72062,"depth":196,"text":72063},{"id":72111,"depth":196,"text":72112},{"id":72123,"depth":196,"text":72124},{"id":72138,"depth":196,"text":72139},{"id":72174,"depth":196,"text":72175},{"id":72255,"depth":196,"text":72256},{"id":72383,"depth":196,"text":72384},{"id":72395,"depth":196,"text":72396},{"id":72414,"depth":196,"text":72415},{"id":74524,"depth":196,"text":74525},{"id":74543,"depth":53,"text":74544,"children":80209},[80210,80211,80212,80213,80214],{"id":74564,"depth":196,"text":74565},{"id":74584,"depth":196,"text":74585},{"id":74633,"depth":196,"text":74634},{"id":74758,"depth":196,"text":74759},{"id":74939,"depth":196,"text":74940},{"id":74957,"depth":53,"text":74958,"children":80216},[80217,80218,80219,80220,80221,80222],{"id":74972,"depth":196,"text":74973},{"id":75031,"depth":196,"text":75032},{"id":75055,"depth":196,"text":75056},{"id":75375,"depth":196,"text":75376},{"id":75407,"depth":196,"text":75408},{"id":75430,"depth":196,"text":75431},{"id":78498,"depth":53,"text":78499,"children":80224},[80225,80226],{"id":78532,"depth":196,"text":78533},{"id":78571,"depth":196,"text":78572},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":56889,"description":26998},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":80233,"title":80234,"body":80235,"description":26998,"extension":3817,"meta":96370,"navigation":658,"path":96371,"seo":96372,"stem":96373,"__hash__":96374},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":80236,"toc":96306},[80237,80240,80243,80247,80251,80256,80261,80272,80276,80281,80284,80288,80291,80296,80300,80304,80307,80312,80315,80319,80322,80330,80333,80337,80342,80347,80350,80354,80359,80364,80367,80371,80376,80379,80384,80387,80392,80395,80400,80405,80408,80411,80415,80420,80425,80428,80432,80436,80439,80442,80445,80449,80453,80458,80463,80466,80470,80475,80480,80483,80486,80489,80492,80495,80498,80501,80504,80507,80512,80516,80521,80526,80529,80532,80535,80538,80541,80544,80547,80550,80554,80558,80561,80564,80567,80572,80574,80577,80580,80583,80586,80589,80592,80595,80598,80601,80604,80607,80610,80613,80618,80623,80628,80631,80635,80638,80643,80647,80649,80660,80665,80766,80769,80772,80775,80778,80781,80784,80787,80790,80792,80795,80798,80801,80804,80807,80809,80812,80815,80818,80821,80824,80827,80829,80832,80834,80836,80839,80843,80847,80850,80853,80856,80859,80862,80865,80868,80871,80874,80879,80999,81002,81005,81010,81013,81016,81019,81022,81027,81030,81033,81036,81039,81044,81047,81147,81212,81286,81290,81293,81296,81300,81303,81317,81346,81349,81352,81355,81358,81361,81364,81367,81369,81372,81375,81378,81381,81385,81390,81394,81399,81474,81477,81660,81663,81666,81669,81672,81675,81677,81680,81683,81686,81689,81692,81695,81697,81701,81704,81709,81712,81715,81718,81721,81723,81728,81731,81734,81737,81740,81742,81747,81750,81753,81755,81757,81760,81764,81767,81770,81775,81778,81781,81784,81834,81839,81843,81848,81851,81920,81923,81932,81936,81941,81944,81947,81955,81958,81975,83777,83781,83785,83790,83793,83797,83803,83809,83961,83966,83971,83974,83977,83980,83983,83986,83989,83992,83995,83998,84001,84004,84007,84012,84016,84019,84030,84034,84039,84042,84045,84048,84051,84054,84056,84059,84062,84065,84068,84070,84087,84090,84094,84097,84102,84107,84110,84113,84117,84120,84123,84132,84135,84139,84142,84147,84152,84219,84223,84226,84229,84234,84239,84325,84330,84334,84337,84340,84355,84358,84363,84367,84372,84481,84484,84495,84645,84649,84654,84763,84767,84772,84777,84782,84785,84792,84812,84848,85012,85017,85020,85025,85032,85035,85038,85041,85100,85156,85212,85216,85221,85536,85539,85543,85546,85551,85660,85665,85669,85674,85678,85749,85753,85755,85758,85761,85799,86075,86079,86096,86162,86196,86200,86203,86208,86237,86244,86253,86258,86273,86278,86287,86290,86427,86431,86493,86497,86502,86747,86751,86756,86759,86762,86765,86768,86772,86777,88358,88362,88366,88372,88375,88380,88384,88387,88392,88395,88406,88410,88415,88419,88424,88429,88432,88437,88441,88445,88448,88453,88458,88461,88464,88467,88589,88594,88696,88699,88702,88706,88711,88883,88888,88892,88895,88900,88966,88971,88974,89105,89108,89113,89116,89119,89210,89215,89218,89221,89224,89227,89232,89237,89240,89245,89250,89255,89259,89262,89265,89270,89275,89280,89285,89339,89342,89345,89350,89353,89356,89361,89366,89371,89375,89380,89394,89399,89402,89407,89411,89416,89421,89426,89431,89436,89441,89446,89451,89454,89458,89463,89466,89469,89472,89477,89482,89485,89488,89492,89495,89498,89503,89508,89513,89518,89521,89526,89531,89592,89597,89600,89605,90845,90850,90854,90858,90863,90866,90871,90876,90879,90884,90886,90891,90895,90898,90901,90912,90916,90921,90926,90981,90986,90991,90996,91207,91212,91216,91221,91224,91226,91229,91232,91679,91684,91691,91697,91700,91703,91967,91972,91976,92241,92246,92250,92255,92260,92265,92270,92601,92604,92609,92614,92617,92621,92625,92630,92635,92640,92645,92650,92655,92659,92662,92667,92672,92675,92749,92754,92759,92764,92766,92769,93138,93143,93148,93153,93156,93159,93261,93266,93271,93374,93378,93383,93387,93391,93396,93401,93404,93409,93412,93415,93808,93813,93816,93819,93822,93825,94345,94349,94354,94359,94364,94367,94372,94375,94378,94760,94765,94767,94769,94772,94775,95287,95291,95352,95355,95358,95361,95365,95368,95373,95378,96303],[10,80238,80234],{"id":80239},"_4js进阶",[19,80241,80242],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,80244,80246],{"id":80245},"_41-作用域","4.1 作用域",[318,80248,80250],{"id":80249},"_411-局部作用域","4.1.1 局部作用域",[19,80252,80253],{},[5198,80254],{"alt":31,"src":80255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,80257,80258],{},[5198,80259],{"alt":31,"src":80260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[4875,80262,80263,80266,80269],{},[214,80264,80265],{},"函数作用域在函数内部",[214,80267,80268],{},"块级作用域在{}",[214,80270,80271],{},"对象的那个{}不是作用域，不是块作用域",[318,80273,80275],{"id":80274},"_412-全局作用域","4.1.2 全局作用域",[19,80277,80278],{},[5198,80279],{"alt":31,"src":80280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,80282,80283],{},"window.a=10不要这样写",[318,80285,80287],{"id":80286},"_413-作用域链","4.1.3 作用域链",[19,80289,80290],{},"变量查找机制",[19,80292,80293],{},[5198,80294],{"alt":31,"src":80295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,80297,80299],{"id":80298},"_42-垃圾回收机制","4.2 垃圾回收机制",[318,80301,80303],{"id":80302},"_421-大体介绍","4.2.1 大体介绍",[19,80305,80306],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,80308,80309],{},[5198,80310],{"alt":31,"src":80311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,80313,80314],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[318,80316,80318],{"id":80317},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,80320,80321],{},"堆栈空间分配区别：",[211,80323,80324,80327],{},[214,80325,80326],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[214,80328,80329],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,80331,80332],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[25619,80334,80336],{"id":80335},"_4221-引用计数","4.2.2.1 引用计数",[19,80338,80339],{},[5198,80340],{"alt":31,"src":80341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,80343,80344],{},[5198,80345],{"alt":31,"src":80346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,80348,80349],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[25619,80351,80353],{"id":80352},"_4222-标记清除法","4.2.2.2 标记清除法",[19,80355,80356],{},[5198,80357],{"alt":31,"src":80358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,80360,80361],{},[5198,80362],{"alt":31,"src":80363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,80365,80366],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,80368,80370],{"id":80369},"_43-闭包","4.3 闭包",[19,80372,80373],{},[5198,80374],{"alt":31,"src":80375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,80377,80378],{},"闭包：内层函数+外层函数的变量",[19,80380,80381],{},[5198,80382],{"alt":31,"src":80383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,80385,80386],{},"closure就是闭包",[19,80388,80389],{},[5198,80390],{"alt":31,"src":80391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,80393,80394],{},"内层函数必须包含外层函数的变量才是闭包",[19,80396,80397],{},[5198,80398],{"alt":31,"src":80399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,80401,80402],{},[5198,80403],{"alt":31,"src":80404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,80406,80407],{},"闭包可能会引起内存泄漏",[19,80409,80410],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,80412,80414],{"id":80413},"_44-变量提升","4.4 变量提升",[19,80416,80417],{},[5198,80418],{"alt":31,"src":80419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,80421,80422],{},[5198,80423],{"alt":31,"src":80424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,80426,80427],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,80429,80431],{"id":80430},"_45-函数进阶","4.5 函数进阶",[318,80433,80435],{"id":80434},"_451-函数提升","4.5.1 函数提升",[19,80437,80438],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,80440,80441],{},"只提升函数声明，不提升函数调用",[55370,80443,80444],{},"\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",[318,80446,80448],{"id":80447},"_452-函数参数","4.5.2 函数参数",[25619,80450,80452],{"id":80451},"_4521-动态参数","4.5.2.1 动态参数",[19,80454,80455],{},[5198,80456],{"alt":31,"src":80457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,80459,80460],{},[5198,80461],{"alt":31,"src":80462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,80464,80465],{},"箭头函数里边没有arguments",[25619,80467,80469],{"id":80468},"_4522-剩余参数","4.5.2.2 剩余参数",[19,80471,80472],{},[5198,80473],{"alt":31,"src":80474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,80476,80477],{},[5198,80478],{"alt":31,"src":80479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,80481,80482],{},"剩余参数使用的时候不需要写...",[19,80484,80485],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,80487,80488],{},"  function getSum(a,b,...arr) {",[19,80490,80491],{},"  console.log(11)",[19,80493,80494],{},"  }",[19,80496,80497],{},"  getSum(1,2,3,4)",[19,80499,80500],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,80502,80503],{},"  getSum(1,2)",[19,80505,80506],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,80508,80509],{},[5198,80510],{"alt":31,"src":80511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[25619,80513,80515],{"id":80514},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,80517,80518],{},[5198,80519],{"alt":31,"src":80520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,80522,80523],{},[5198,80524],{"alt":31,"src":80525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,80527,80528],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,80530,80531],{},"展开运算符可以用于数组之间的合并：",[19,80533,80534],{},"const arr1 = [1, 2, 3]",[19,80536,80537],{},"const arr2 = [3, 4, 5]",[19,80539,80540],{},"const arr = [...arr1, ...arr2]",[19,80542,80543],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,80545,80546],{},"剩余参数：函数参数使用，得到真数组",[19,80548,80549],{},"展开运算符：数组中使用，数组展开",[318,80551,80553],{"id":80552},"_453-箭头函数","4.5.3 箭头函数",[25619,80555,80557],{"id":80556},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,80559,80560],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,80562,80563],{},"它不是万能的！！！",[19,80565,80566],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,80568,80569],{},[5198,80570],{"alt":31,"src":80571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,80573,3917],{},[19,80575,80576],{},"① 只有一个形参的时候，可以省略小括号：",[19,80578,80579],{},"const fn=x=>{console.log(x)}",[19,80581,80582],{},"② 只有一行代码时可以省略大括号：",[19,80584,80585],{},"const fn=x=>console.log(11)",[19,80587,80588],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,80590,80591],{},"const fn=x=>x+x",[19,80593,80594],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,80596,80597],{},"⑤ 阻止表单默认提交：",[19,80599,80600],{},"const form = document.querySelector('form')",[19,80602,80603],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,80605,80606],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,80608,80609],{},"const fn=uname=>({uname:uname})",[19,80611,80612],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,80614,80615],{},[5198,80616],{"alt":31,"src":80617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,80619,80620],{},[5198,80621],{"alt":31,"src":80622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,80624,80625],{},[5198,80626],{"alt":31,"src":80627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,80629,80630],{},"一定不要忘记用()，有()就理解为自带return",[25619,80632,80634],{"id":80633},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,80636,80637],{},"箭头函数是没有动态参数的arguments",[19,80639,80640],{},[5198,80641],{"alt":31,"src":80642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[25619,80644,80646],{"id":80645},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,80648,14993],{},[211,80650,80651,80654,80657],{},[214,80652,80653],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[214,80655,80656],{},"事件回调函数使用箭头函数时，this 为全局的 window",[214,80658,80659],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,80661,80662],{},[5198,80663],{"alt":31,"src":80664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[26,80666,80668],{"className":56624,"code":80667,"language":56626,"meta":31,"style":31},"  \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",[33,80669,80670,80678,80683,80688,80693,80698,80703,80707,80712,80716,80720,80725,80730,80735,80739,80743,80748,80753,80758],{"__ignoreMap":31},[36,80671,80672,80674,80676],{"class":38,"line":39},[36,80673,55701],{"class":42},[36,80675,55370],{"class":54857},[36,80677,54864],{"class":42},[36,80679,80680],{"class":38,"line":53},[36,80681,80682],{"class":42},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[36,80684,80685],{"class":38,"line":196},[36,80686,80687],{"class":42},"    console.log(this) \u002F\u002F指向window\n",[36,80689,80690],{"class":38,"line":642},[36,80691,80692],{"class":42},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[36,80694,80695],{"class":38,"line":655},[36,80696,80697],{"class":42},"    function fn() {\n",[36,80699,80700],{"class":38,"line":662},[36,80701,80702],{"class":42},"      console.log(this)  \u002F\u002F指向window\n",[36,80704,80705],{"class":38,"line":667},[36,80706,5899],{"class":42},[36,80708,80709],{"class":38,"line":679},[36,80710,80711],{"class":42},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[36,80713,80714],{"class":38,"line":685},[36,80715,659],{"emptyLinePlaceholder":658},[36,80717,80718],{"class":38,"line":691},[36,80719,75077],{"class":42},[36,80721,80722],{"class":38,"line":696},[36,80723,80724],{"class":42},"      name: 'andy',\n",[36,80726,80727],{"class":38,"line":702},[36,80728,80729],{"class":42},"      sayHai: function () {\n",[36,80731,80732],{"class":38,"line":708},[36,80733,80734],{"class":42},"        console.log(this)\n",[36,80736,80737],{"class":38,"line":713},[36,80738,55955],{"class":42},[36,80740,80741],{"class":38,"line":719},[36,80742,5899],{"class":42},[36,80744,80745],{"class":38,"line":725},[36,80746,80747],{"class":42},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[36,80749,80750],{"class":38,"line":731},[36,80751,80752],{"class":42},"    \u002F\u002F 2.箭头函数的this\n",[36,80754,80755],{"class":38,"line":736},[36,80756,80757],{"class":42},"    const fn = () => console.log(this)\n",[36,80759,80760,80762,80764],{"class":38,"line":742},[36,80761,55974],{"class":42},[36,80763,55370],{"class":54857},[36,80765,54864],{"class":42},[19,80767,80768],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,80770,80771],{},"const fn = () => console.log(this)",[19,80773,80774],{},"fn() \u002F\u002F指向window",[19,80776,80777],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,80779,80780],{},"①",[19,80782,80783],{},"const obj = {",[19,80785,80786],{},"uname: 'pink老师',",[19,80788,80789],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,80791,4815],{},[19,80793,80794],{},"调用对象里边的函数",[19,80796,80797],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,80799,80800],{},"obj.sayHai()",[19,80802,80803],{},"②",[19,80805,80806],{},"const obj1 = {",[19,80808,80786],{},[19,80810,80811],{},"sayHai: function () {",[19,80813,80814],{},"let i = 10",[19,80816,80817],{},"const count = () => {",[19,80819,80820],{},"console.log(this)",[19,80822,80823],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,80825,80826],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,80828,4815],{},[19,80830,80831],{},"count()",[19,80833,4815],{},[19,80835,4815],{},[19,80837,80838],{},"obj1.sayHai()",[14,80840,80842],{"id":80841},"_46-解构赋值","4.6 解构赋值",[318,80844,80846],{"id":80845},"_461-数组解构","4.6.1 数组解构",[19,80848,80849],{},"以前要是使用数组中的值的话：",[19,80851,80852],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,80854,80855],{},"const arr=[100,60,80]",[19,80857,80858],{},"const max=arr[0]",[19,80860,80861],{},"const min=arr[1]",[19,80863,80864],{},"const avg=arr[2]",[19,80866,80867],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,80869,80870],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,80872,80873],{},"这个写法就类似于上边的那种用很多const的方法",[19,80875,80876],{},[5198,80877],{"alt":31,"src":80878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[26,80880,80882],{"className":54190,"code":80881,"language":54192,"meta":31,"style":31},"①变量之间交换值:\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",[33,80883,80884,80889,80894,80899,80904,80909,80913,80917,80922,80926,80931,80936,80940,80945,80950,80961,80971,80976,80981,80986,80990,80994],{"__ignoreMap":31},[36,80885,80886],{"class":38,"line":39},[36,80887,80888],{"class":42},"①变量之间交换值:\n",[36,80890,80891],{"class":38,"line":53},[36,80892,80893],{"class":42},"let a=1\n",[36,80895,80896],{"class":38,"line":196},[36,80897,80898],{"class":42},"let b=2;\n",[36,80900,80901],{"class":38,"line":642},[36,80902,80903],{"class":42},"必须加这行代码，不然就会报错\n",[36,80905,80906],{"class":38,"line":655},[36,80907,80908],{"class":42},"[b,a]=[a,b]\n",[36,80910,80911],{"class":38,"line":662},[36,80912,659],{"emptyLinePlaceholder":658},[36,80914,80915],{"class":38,"line":667},[36,80916,659],{"emptyLinePlaceholder":658},[36,80918,80919],{"class":38,"line":679},[36,80920,80921],{"class":42},"可以写成下面的方式：\n",[36,80923,80924],{"class":38,"line":685},[36,80925,80893],{"class":42},[36,80927,80928],{"class":38,"line":691},[36,80929,80930],{"class":42},"let b=2\n",[36,80932,80933],{"class":38,"line":696},[36,80934,80935],{"class":42},";[b,a]=[a,b]\n",[36,80937,80938],{"class":38,"line":702},[36,80939,659],{"emptyLinePlaceholder":658},[36,80941,80942],{"class":38,"line":708},[36,80943,80944],{"class":42},"②排序\n",[36,80946,80947],{"class":38,"line":713},[36,80948,80949],{"class":42},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[36,80951,80952,80955,80958],{"class":38,"line":719},[36,80953,80954],{"class":42},"for (let i = 0; i ",[36,80956,393],{"class":80957},"s7hpK",[36,80959,80960],{"class":42}," arr1.length; i++) {\n",[36,80962,80963,80966,80968],{"class":38,"line":725},[36,80964,80965],{"class":42},"   for (let j = 0; j ",[36,80967,393],{"class":80957},[36,80969,80970],{"class":42}," arr1.length - 1; j++) {\n",[36,80972,80973],{"class":38,"line":731},[36,80974,80975],{"class":42},"      if (arr1[j] > arr1[j + 1]) {\n",[36,80977,80978],{"class":38,"line":736},[36,80979,80980],{"class":42},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[36,80982,80983],{"class":38,"line":742},[36,80984,80985],{"class":42},"       }\n",[36,80987,80988],{"class":38,"line":748},[36,80989,8006],{"class":42},[36,80991,80992],{"class":38,"line":754},[36,80993,5300],{"class":42},[36,80995,80996],{"class":38,"line":760},[36,80997,80998],{"class":42},"console.log(arr1)\n",[19,81000,81001],{},"数组解构的细节：",[19,81003,81004],{},"①变量多，单元值少",[19,81006,81007],{},[5198,81008],{"alt":31,"src":81009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,81011,81012],{},"防止出现undefined的方法：",[19,81014,81015],{},"const [a=0,b=0] =[1]",[19,81017,81018],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,81020,81021],{},"②变量少，单元值多",[19,81023,81024],{},[5198,81025],{"alt":31,"src":81026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,81028,81029],{},"此时可以使用剩余参数来接收多余的值",[19,81031,81032],{},"const [a,b,...c]=[1,2,3,4]",[19,81034,81035],{},"console.log(c) 输出[3,4]",[19,81037,81038],{},"③可以按需导入，忽略某些返回值",[19,81040,81041],{},[5198,81042],{"alt":31,"src":81043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,81045,81046],{},"④支持多维数组的结构",[26,81048,81052],{"className":81049,"code":81050,"language":81051,"meta":31,"style":31},"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",[33,81053,81054,81082,81098,81113,81128],{"__ignoreMap":31},[36,81055,81056,81058,81060,81062,81064,81066,81068,81070,81073,81075,81077,81079],{"class":38,"line":39},[36,81057,10483],{"class":46},[36,81059,55390],{"class":42},[36,81061,47],{"class":46},[36,81063,55783],{"class":42},[36,81065,4092],{"class":112},[36,81067,478],{"class":42},[36,81069,498],{"class":112},[36,81071,81072],{"class":42},", [",[36,81074,1982],{"class":112},[36,81076,478],{"class":42},[36,81078,4168],{"class":112},[36,81080,81081],{"class":42},"]]\n",[36,81083,81084,81087,81089,81091,81093,81095],{"class":38,"line":53},[36,81085,81086],{"class":42},"console.",[36,81088,61802],{"class":101},[36,81090,7549],{"class":42},[36,81092,1859],{"class":112},[36,81094,7913],{"class":42},[36,81096,81097],{"class":3943},"  \u002F\u002F1\n",[36,81099,81100,81102,81104,81106,81108,81110],{"class":38,"line":196},[36,81101,81086],{"class":42},[36,81103,61802],{"class":101},[36,81105,7549],{"class":42},[36,81107,4092],{"class":112},[36,81109,7913],{"class":42},[36,81111,81112],{"class":3943},"  \u002F\u002F2\n",[36,81114,81115,81117,81119,81121,81123,81125],{"class":38,"line":642},[36,81116,81086],{"class":42},[36,81118,61802],{"class":101},[36,81120,7549],{"class":42},[36,81122,498],{"class":112},[36,81124,7913],{"class":42},[36,81126,81127],{"class":3943},"  \u002F\u002F[3,4]\n",[36,81129,81130,81132,81134,81136,81138,81140,81142,81144],{"class":38,"line":655},[36,81131,81086],{"class":42},[36,81133,61802],{"class":101},[36,81135,7549],{"class":42},[36,81137,498],{"class":112},[36,81139,8597],{"class":42},[36,81141,1859],{"class":112},[36,81143,7913],{"class":42},[36,81145,81146],{"class":3943},"  \u002F\u002F3\n",[26,81148,81150],{"className":81049,"code":81149,"language":81051,"meta":31,"style":31},"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",[33,81151,81152,81179,81190,81201],{"__ignoreMap":31},[36,81153,81154,81156,81159,81161,81163,81165,81167,81169,81171,81173,81175,81177],{"class":38,"line":39},[36,81155,10483],{"class":46},[36,81157,81158],{"class":42}," [a, b, c] ",[36,81160,47],{"class":46},[36,81162,55783],{"class":42},[36,81164,4092],{"class":112},[36,81166,478],{"class":42},[36,81168,498],{"class":112},[36,81170,81072],{"class":42},[36,81172,1982],{"class":112},[36,81174,478],{"class":42},[36,81176,4168],{"class":112},[36,81178,81081],{"class":42},[36,81180,81181,81183,81185,81188],{"class":38,"line":53},[36,81182,81086],{"class":42},[36,81184,61802],{"class":101},[36,81186,81187],{"class":42},"(a)",[36,81189,81097],{"class":3943},[36,81191,81192,81194,81196,81199],{"class":38,"line":196},[36,81193,81086],{"class":42},[36,81195,61802],{"class":101},[36,81197,81198],{"class":42},"(b)",[36,81200,81112],{"class":3943},[36,81202,81203,81205,81207,81210],{"class":38,"line":642},[36,81204,81086],{"class":42},[36,81206,61802],{"class":101},[36,81208,81209],{"class":42},"(c)",[36,81211,81127],{"class":3943},[26,81213,81215],{"className":81049,"code":81214,"language":81051,"meta":31,"style":31},"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",[33,81216,81217,81244,81254,81264,81274],{"__ignoreMap":31},[36,81218,81219,81221,81224,81226,81228,81230,81232,81234,81236,81238,81240,81242],{"class":38,"line":39},[36,81220,10483],{"class":46},[36,81222,81223],{"class":42}," [a, b, [c, d]] ",[36,81225,47],{"class":46},[36,81227,55783],{"class":42},[36,81229,4092],{"class":112},[36,81231,478],{"class":42},[36,81233,498],{"class":112},[36,81235,81072],{"class":42},[36,81237,1982],{"class":112},[36,81239,478],{"class":42},[36,81241,4168],{"class":112},[36,81243,81081],{"class":42},[36,81245,81246,81248,81250,81252],{"class":38,"line":53},[36,81247,81086],{"class":42},[36,81249,61802],{"class":101},[36,81251,81187],{"class":42},[36,81253,81097],{"class":3943},[36,81255,81256,81258,81260,81262],{"class":38,"line":196},[36,81257,81086],{"class":42},[36,81259,61802],{"class":101},[36,81261,81198],{"class":42},[36,81263,81112],{"class":3943},[36,81265,81266,81268,81270,81272],{"class":38,"line":642},[36,81267,81086],{"class":42},[36,81269,61802],{"class":101},[36,81271,81209],{"class":42},[36,81273,81146],{"class":3943},[36,81275,81276,81278,81280,81283],{"class":38,"line":655},[36,81277,81086],{"class":42},[36,81279,61802],{"class":101},[36,81281,81282],{"class":42},"(d)",[36,81284,81285],{"class":3943},"  \u002F\u002F4\n",[318,81287,81289],{"id":81288},"_462-对象解构","4.6.2 对象解构",[19,81291,81292],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,81294,81295],{},"用的非常非常多！！！！！！",[25619,81297,81299],{"id":81298},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,81301,81302],{},"基本语法：",[211,81304,81305,81308,81311,81314],{},[214,81306,81307],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[214,81309,81310],{},"对象属性的值将被赋值给与属性名相同的变量",[214,81312,81313],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[214,81315,81316],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[26,81318,81320],{"className":54190,"code":81319,"language":54192,"meta":31,"style":31},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[33,81321,81322,81327,81332,81337,81341],{"__ignoreMap":31},[36,81323,81324],{"class":38,"line":39},[36,81325,81326],{"class":42},"const obj = {\n",[36,81328,81329],{"class":38,"line":53},[36,81330,81331],{"class":42},"   uname: 'pink老师',\n",[36,81333,81334],{"class":38,"line":196},[36,81335,81336],{"class":42},"   age: 18,\n",[36,81338,81339],{"class":38,"line":642},[36,81340,5300],{"class":42},[36,81342,81343],{"class":38,"line":655},[36,81344,81345],{"class":42},"const { uname, age } = obj\n",[19,81347,81348],{},"上方代码这样写等价于：",[19,81350,81351],{},"const uname等价于obj.uname",[19,81353,81354],{},"变量名可以重新改名：",[19,81356,81357],{},"const uname='red老师'",[19,81359,81360],{},"const user={",[19,81362,81363],{},"  uname:'pink老师',",[19,81365,81366],{},"  age:18",[19,81368,4815],{},[19,81370,81371],{},"const {uname,age}=user",[19,81373,81374],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,81376,81377],{},"const {旧变量名：新变量名}=对象",[19,81379,81380],{},"const {uname:username,age}=user",[25619,81382,81384],{"id":81383},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,81386,81387],{},[5198,81388],{"alt":31,"src":81389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[25619,81391,81393],{"id":81392},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,81395,81396],{},[5198,81397],{"alt":31,"src":81398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[26,81400,81402],{"className":56624,"code":81401,"language":56626,"meta":31,"style":31},"  \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",[33,81403,81404,81412,81417,81422,81427,81432,81437,81442,81447,81452,81456,81461,81466],{"__ignoreMap":31},[36,81405,81406,81408,81410],{"class":38,"line":39},[36,81407,55701],{"class":42},[36,81409,55370],{"class":54857},[36,81411,54864],{"class":42},[36,81413,81414],{"class":38,"line":53},[36,81415,81416],{"class":42},"    const pig = {\n",[36,81418,81419],{"class":38,"line":196},[36,81420,81421],{"class":42},"      name: '佩奇',\n",[36,81423,81424],{"class":38,"line":642},[36,81425,81426],{"class":42},"      family: {\n",[36,81428,81429],{"class":38,"line":655},[36,81430,81431],{"class":42},"        mother: '猪妈妈',\n",[36,81433,81434],{"class":38,"line":662},[36,81435,81436],{"class":42},"        father: '猪爸爸',\n",[36,81438,81439],{"class":38,"line":667},[36,81440,81441],{"class":42},"        sister: '乔治'\n",[36,81443,81444],{"class":38,"line":679},[36,81445,81446],{"class":42},"      },\n",[36,81448,81449],{"class":38,"line":685},[36,81450,81451],{"class":42},"      age: 6\n",[36,81453,81454],{"class":38,"line":691},[36,81455,5899],{"class":42},[36,81457,81458],{"class":38,"line":696},[36,81459,81460],{"class":42},"    \u002F\u002F 多级对象解构\n",[36,81462,81463],{"class":38,"line":702},[36,81464,81465],{"class":42},"    const { name, family: { mother, father, sister }, age } = pig\n",[36,81467,81468,81470,81472],{"class":38,"line":708},[36,81469,55974],{"class":42},[36,81471,55370],{"class":54857},[36,81473,54864],{"class":42},[19,81475,81476],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[26,81478,81481],{"className":81479,"code":81480,"language":80001,"meta":31,"style":31},"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",[33,81482,81483,81488,81499,81511,81523,81532,81536,81547,81559,81569,81574,81578,81588,81599,81608,81612,81616,81627,81638,81647,81651,81656],{"__ignoreMap":31},[36,81484,81485],{"class":38,"line":39},[36,81486,81487],{"class":3943},"    \u002F\u002F 这是后台传递过来的数据\n",[36,81489,81490,81492,81495,81497],{"class":38,"line":53},[36,81491,14882],{"class":46},[36,81493,81494],{"class":42}," msg ",[36,81496,47],{"class":46},[36,81498,19228],{"class":42},[36,81500,81501,81504,81506,81509],{"class":38,"line":196},[36,81502,81503],{"class":105},"      \"code\"",[36,81505,4729],{"class":46},[36,81507,81508],{"class":112}," 200",[36,81510,35056],{"class":42},[36,81512,81513,81516,81518,81521],{"class":38,"line":642},[36,81514,81515],{"class":105},"      \"msg\"",[36,81517,4729],{"class":46},[36,81519,81520],{"class":105}," \"获取新闻列表成功\"",[36,81522,35056],{"class":42},[36,81524,81525,81528,81530],{"class":38,"line":655},[36,81526,81527],{"class":105},"      \"data\"",[36,81529,4729],{"class":46},[36,81531,59003],{"class":42},[36,81533,81534],{"class":38,"line":662},[36,81535,6220],{"class":42},[36,81537,81538,81541,81543,81545],{"class":38,"line":667},[36,81539,81540],{"class":105},"          \"id\"",[36,81542,4729],{"class":46},[36,81544,28732],{"class":112},[36,81546,35056],{"class":42},[36,81548,81549,81552,81554,81557],{"class":38,"line":679},[36,81550,81551],{"class":105},"          \"title\"",[36,81553,4729],{"class":46},[36,81555,81556],{"class":105}," \"5G商用自己，三大运用商收入下降\"",[36,81558,35056],{"class":42},[36,81560,81561,81564,81566],{"class":38,"line":685},[36,81562,81563],{"class":105},"          \"count\"",[36,81565,4729],{"class":46},[36,81567,81568],{"class":112}," 58\n",[36,81570,81571],{"class":38,"line":691},[36,81572,81573],{"class":42},"        },\n",[36,81575,81576],{"class":38,"line":696},[36,81577,6220],{"class":42},[36,81579,81580,81582,81584,81586],{"class":38,"line":702},[36,81581,81540],{"class":105},[36,81583,4729],{"class":46},[36,81585,18411],{"class":112},[36,81587,35056],{"class":42},[36,81589,81590,81592,81594,81597],{"class":38,"line":708},[36,81591,81551],{"class":105},[36,81593,4729],{"class":46},[36,81595,81596],{"class":105}," \"国际媒体头条速览\"",[36,81598,35056],{"class":42},[36,81600,81601,81603,81605],{"class":38,"line":713},[36,81602,81563],{"class":105},[36,81604,4729],{"class":46},[36,81606,81607],{"class":112}," 56\n",[36,81609,81610],{"class":38,"line":719},[36,81611,81573],{"class":42},[36,81613,81614],{"class":38,"line":725},[36,81615,6220],{"class":42},[36,81617,81618,81620,81622,81625],{"class":38,"line":731},[36,81619,81540],{"class":105},[36,81621,4729],{"class":46},[36,81623,81624],{"class":112}," 3",[36,81626,35056],{"class":42},[36,81628,81629,81631,81633,81636],{"class":38,"line":736},[36,81630,81551],{"class":105},[36,81632,4729],{"class":46},[36,81634,81635],{"class":105}," \"乌克兰和俄罗斯持续冲突\"",[36,81637,35056],{"class":42},[36,81639,81640,81642,81644],{"class":38,"line":742},[36,81641,81563],{"class":105},[36,81643,4729],{"class":46},[36,81645,81646],{"class":112}," 1669\n",[36,81648,81649],{"class":38,"line":748},[36,81650,81573],{"class":42},[36,81652,81653],{"class":38,"line":754},[36,81654,81655],{"class":42},"      ]\n",[36,81657,81658],{"class":38,"line":760},[36,81659,5899],{"class":42},[19,81661,81662],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,81664,81665],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,81667,81668],{},"\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,81670,81671],{},"function({data}) {",[19,81673,81674],{},"console.log(data)",[19,81676,4815],{},[19,81678,81679],{},"render(msg)",[19,81681,81682],{},"实参传递给形参的时候解构了",[19,81684,81685],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,81687,81688],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,81690,81691],{},"function render({data:mydata}) {",[19,81693,81694],{},"  console.log(data)",[19,81696,4815],{},[318,81698,81700],{"id":81699},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,81702,81703],{},"有两种情况：一个是数组结构，一个是立即执行函数",[211,81705,81706],{},[214,81707,81708],{},"如果对一个数组进行遍历，有两种方式：",[19,81710,81711],{},"①法1",[19,81713,81714],{},"const arr=[1,2,3]",[19,81716,81717],{},"arr.map(function(item,index) {",[19,81719,81720],{},"  console.log(item)",[19,81722,56021],{},[19,81724,81725],{},[5198,81726],{"alt":31,"src":81727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,81729,81730],{},"②法2",[19,81732,81733],{},"const str='pink'",[19,81735,81736],{},"[1,2,3].map(function(item,index) {",[19,81738,81739],{},"console.log(item)",[19,81741,56021],{},[19,81743,81744],{},[5198,81745],{"alt":31,"src":81746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,81748,81749],{},"此时会报错",[19,81751,81752],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,81754,81739],{},[19,81756,56021],{},[19,81758,81759],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,81761,81763],{"id":81762},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,81765,81766],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,81768,81769],{},"可以理解为加强版的for循环",[19,81771,81772],{},[5198,81773],{"alt":31,"src":81774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,81776,81777],{},"里边不写return，不返回数组，只遍历不返回",[19,81779,81780],{},"map是返回数组",[19,81782,81783],{},"forEach主要用于遍历数组对象",[26,81785,81787],{"className":56624,"code":81786,"language":56626,"meta":31,"style":31},"  \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",[33,81788,81789,81797,81802,81807,81812,81817,81821,81826],{"__ignoreMap":31},[36,81790,81791,81793,81795],{"class":38,"line":39},[36,81792,55701],{"class":42},[36,81794,55370],{"class":54857},[36,81796,54864],{"class":42},[36,81798,81799],{"class":38,"line":53},[36,81800,81801],{"class":42},"    const arr = ['red', 'green', 'pink']\n",[36,81803,81804],{"class":38,"line":196},[36,81805,81806],{"class":42},"    const result = arr.forEach(function (item, index) {\n",[36,81808,81809],{"class":38,"line":642},[36,81810,81811],{"class":42},"      console.log(item)\n",[36,81813,81814],{"class":38,"line":655},[36,81815,81816],{"class":42},"      console.log(index)\n",[36,81818,81819],{"class":38,"line":662},[36,81820,37021],{"class":42},[36,81822,81823],{"class":38,"line":667},[36,81824,81825],{"class":42},"    console.log(result)\n",[36,81827,81828,81830,81832],{"class":38,"line":679},[36,81829,55974],{"class":42},[36,81831,55370],{"class":54857},[36,81833,54864],{"class":42},[19,81835,81836],{},[5198,81837],{"alt":31,"src":81838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,81840,81842],{"id":81841},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,81844,81845],{},[5198,81846],{"alt":31,"src":81847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,81849,81850],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[26,81852,81854],{"className":56624,"code":81853,"language":56626,"meta":31,"style":31},"\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",[33,81855,81856,81864,81872,81877,81882,81886,81890,81895,81899,81904,81912],{"__ignoreMap":31},[36,81857,81858,81860,81862],{"class":38,"line":39},[36,81859,393],{"class":42},[36,81861,55357],{"class":54857},[36,81863,54864],{"class":42},[36,81865,81866,81868,81870],{"class":38,"line":53},[36,81867,55701],{"class":42},[36,81869,55370],{"class":54857},[36,81871,54864],{"class":42},[36,81873,81874],{"class":38,"line":196},[36,81875,81876],{"class":42},"    const arr = [10, 20, 30]\n",[36,81878,81879],{"class":38,"line":642},[36,81880,81881],{"class":42},"    const newArr = arr.filter(function (item, index) {\n",[36,81883,81884],{"class":38,"line":655},[36,81885,81811],{"class":42},[36,81887,81888],{"class":38,"line":662},[36,81889,81816],{"class":42},[36,81891,81892],{"class":38,"line":667},[36,81893,81894],{"class":42},"      return item >= 20\n",[36,81896,81897],{"class":38,"line":679},[36,81898,37021],{"class":42},[36,81900,81901],{"class":38,"line":685},[36,81902,81903],{"class":42},"    console.log(newArr)\n",[36,81905,81906,81908,81910],{"class":38,"line":691},[36,81907,55974],{"class":42},[36,81909,55370],{"class":54857},[36,81911,54864],{"class":42},[36,81913,81914,81916,81918],{"class":38,"line":696},[36,81915,55342],{"class":42},[36,81917,55357],{"class":54857},[36,81919,54864],{"class":42},[19,81921,81922],{},"这个也可以写成箭头函数：",[26,81924,81926],{"className":54190,"code":81925,"language":54192,"meta":31,"style":31},"const newArr = arr.filter(item => item >= 20)\n",[33,81927,81928],{"__ignoreMap":31},[36,81929,81930],{"class":38,"line":39},[36,81931,81925],{"class":42},[14,81933,81935],{"id":81934},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,81937,81938],{},[5198,81939],{"alt":31,"src":81940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,81942,81943],{},"步骤：",[19,81945,81946],{},"①：渲染页面模块",[4875,81948,81949,81952],{},[214,81950,81951],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[214,81953,81954],{},"用forEach+字符串的形式",[19,81956,81957],{},"②：点击不同需求，显示不同页面内容",[4875,81959,81960,81963,81966,81969,81972],{},[214,81961,81962],{},"点击采取事件委托方式 .filter",[214,81964,81965],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[214,81967,81968],{},"筛选条件是根据点击的 data-index 来判断",[214,81970,81971],{},"可以使用对象解构，把事件对象解构",[214,81973,81974],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[26,81976,81978],{"className":54190,"code":81977,"language":54192,"meta":31,"style":31},"\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",[33,81979,81980,81990,82004,82008,82016,82030,82050,82062,82070,82076,82086,82096,82106,82110,82114,82120,82133,82145,82155,82167,82171,82175,82182,82195,82207,82224,82242,82255,82259,82263,82275,82285,82289,82293,82300,82341,82368,82378,82382,82386,82394,82406,82410,82414,82422,82434,82446,82457,82461,82465,82474,82486,82497,82501,82505,82514,82526,82538,82542,82546,82553,82563,82575,82587,82602,82606,82610,82618,82634,82644,82654,82664,82676,82680,82684,82694,82705,82715,82719,82727,82735,82739,82747,82762,82788,82813,82838,82857,82865,82879,82884,82889,82894,82899,82904,82912,82920,82925,82936,82941,82951,82961,82971,82981,82985,82989,82998,83007,83016,83025,83029,83033,83042,83051,83060,83069,83073,83077,83086,83095,83104,83113,83117,83121,83130,83139,83148,83157,83161,83165,83174,83183,83192,83201,83205,83209,83218,83227,83236,83245,83249,83253,83262,83271,83279,83288,83292,83296,83300,83305,83317,83322,83334,83338,83355,83383,83392,83397,83407,83417,83426,83431,83436,83440,83445,83462,83466,83471,83479,83484,83511,83516,83536,83541,83553,83558,83563,83568,83579,83593,83630,83648,83681,83698,83722,83726,83731,83737,83741,83745,83749,83757,83765,83769],{"__ignoreMap":31},[36,81981,81982,81984,81986,81988],{"class":38,"line":39},[36,81983,54854],{"class":42},[36,81985,54858],{"class":54857},[36,81987,54861],{"class":101},[36,81989,54864],{"class":42},[36,81991,81992,81994,81996,81998,82000,82002],{"class":38,"line":53},[36,81993,393],{"class":42},[36,81995,54192],{"class":54857},[36,81997,54873],{"class":101},[36,81999,47],{"class":42},[36,82001,54878],{"class":105},[36,82003,54864],{"class":42},[36,82005,82006],{"class":38,"line":196},[36,82007,659],{"emptyLinePlaceholder":658},[36,82009,82010,82012,82014],{"class":38,"line":642},[36,82011,393],{"class":42},[36,82013,54891],{"class":54857},[36,82015,54864],{"class":42},[36,82017,82018,82020,82022,82024,82026,82028],{"class":38,"line":655},[36,82019,55701],{"class":42},[36,82021,54901],{"class":54857},[36,82023,54904],{"class":101},[36,82025,47],{"class":42},[36,82027,54909],{"class":105},[36,82029,54864],{"class":42},[36,82031,82032,82034,82036,82038,82040,82042,82044,82046,82048],{"class":38,"line":662},[36,82033,55701],{"class":42},[36,82035,54901],{"class":54857},[36,82037,18576],{"class":101},[36,82039,47],{"class":42},[36,82041,54948],{"class":105},[36,82043,54928],{"class":101},[36,82045,47],{"class":42},[36,82047,54955],{"class":105},[36,82049,54864],{"class":42},[36,82051,82052,82054,82056,82058,82060],{"class":38,"line":667},[36,82053,55701],{"class":42},[36,82055,54964],{"class":54857},[36,82057,54967],{"class":42},[36,82059,54964],{"class":54857},[36,82061,54864],{"class":42},[36,82063,82064,82066,82068],{"class":38,"line":679},[36,82065,55701],{"class":42},[36,82067,3785],{"class":54857},[36,82069,54864],{"class":42},[36,82071,82072,82074],{"class":38,"line":685},[36,82073,10096],{"class":54857},[36,82075,19228],{"class":42},[36,82077,82078,82080,82082,82084],{"class":38,"line":691},[36,82079,58251],{"class":112},[36,82081,54994],{"class":42},[36,82083,1859],{"class":112},[36,82085,5029],{"class":42},[36,82087,82088,82090,82092,82094],{"class":38,"line":696},[36,82089,58262],{"class":112},[36,82091,54994],{"class":42},[36,82093,1859],{"class":112},[36,82095,5029],{"class":42},[36,82097,82098,82100,82102,82104],{"class":38,"line":702},[36,82099,76150],{"class":112},[36,82101,54994],{"class":42},[36,82103,64060],{"class":112},[36,82105,5029],{"class":42},[36,82107,82108],{"class":38,"line":708},[36,82109,5899],{"class":42},[36,82111,82112],{"class":38,"line":713},[36,82113,659],{"emptyLinePlaceholder":658},[36,82115,82116,82118],{"class":38,"line":719},[36,82117,65678],{"class":101},[36,82119,19228],{"class":42},[36,82121,82122,82124,82126,82129,82131],{"class":38,"line":725},[36,82123,58327],{"class":112},[36,82125,54994],{"class":42},[36,82127,82128],{"class":112},"990",[36,82130,55049],{"class":46},[36,82132,5029],{"class":42},[36,82134,82135,82137,82139,82141,82143],{"class":38,"line":731},[36,82136,58262],{"class":112},[36,82138,54994],{"class":42},[36,82140,1859],{"class":112},[36,82142,55113],{"class":112},[36,82144,5029],{"class":42},[36,82146,82147,82149,82151,82153],{"class":38,"line":736},[36,82148,58565],{"class":112},[36,82150,54994],{"class":42},[36,82152,55034],{"class":112},[36,82154,5029],{"class":42},[36,82156,82157,82160,82162,82165],{"class":38,"line":742},[36,82158,82159],{"class":112},"      flex-wrap",[36,82161,54994],{"class":42},[36,82163,82164],{"class":112},"wrap",[36,82166,5029],{"class":42},[36,82168,82169],{"class":38,"line":748},[36,82170,5899],{"class":42},[36,82172,82173],{"class":38,"line":754},[36,82174,659],{"emptyLinePlaceholder":658},[36,82176,82177,82180],{"class":38,"line":760},[36,82178,82179],{"class":101},"    .item",[36,82181,19228],{"class":42},[36,82183,82184,82186,82188,82191,82193],{"class":38,"line":766},[36,82185,58327],{"class":112},[36,82187,54994],{"class":42},[36,82189,82190],{"class":112},"240",[36,82192,55049],{"class":46},[36,82194,5029],{"class":42},[36,82196,82197,82199,82201,82203,82205],{"class":38,"line":772},[36,82198,65555],{"class":112},[36,82200,54994],{"class":42},[36,82202,554],{"class":112},[36,82204,55049],{"class":46},[36,82206,5029],{"class":42},[36,82208,82209,82211,82213,82215,82217,82220,82222],{"class":38,"line":778},[36,82210,58251],{"class":112},[36,82212,54994],{"class":42},[36,82214,1921],{"class":112},[36,82216,55049],{"class":46},[36,82218,82219],{"class":112}," 30",[36,82221,55049],{"class":46},[36,82223,5029],{"class":42},[36,82225,82226,82228,82230,82232,82235,82238,82240],{"class":38,"line":783},[36,82227,65415],{"class":112},[36,82229,54994],{"class":42},[36,82231,31732],{"class":112},[36,82233,82234],{"class":112}," ease",[36,82236,82237],{"class":112}," .5",[36,82239,4566],{"class":46},[36,82241,5029],{"class":42},[36,82243,82244,82247,82249,82251,82253],{"class":38,"line":789},[36,82245,82246],{"class":112},"      margin-bottom",[36,82248,54994],{"class":42},[36,82250,1921],{"class":112},[36,82252,55049],{"class":46},[36,82254,5029],{"class":42},[36,82256,82257],{"class":38,"line":795},[36,82258,5899],{"class":42},[36,82260,82261],{"class":38,"line":801},[36,82262,659],{"emptyLinePlaceholder":658},[36,82264,82265,82268,82270,82273],{"class":38,"line":807},[36,82266,82267],{"class":101},"    .item:nth-child",[36,82269,495],{"class":42},[36,82271,82272],{"class":112},"4n",[36,82274,16102],{"class":42},[36,82276,82277,82279,82281,82283],{"class":38,"line":813},[36,82278,65555],{"class":112},[36,82280,54994],{"class":42},[36,82282,1859],{"class":112},[36,82284,5029],{"class":42},[36,82286,82287],{"class":38,"line":819},[36,82288,5899],{"class":42},[36,82290,82291],{"class":38,"line":824},[36,82292,659],{"emptyLinePlaceholder":658},[36,82294,82295,82298],{"class":38,"line":829},[36,82296,82297],{"class":101},"    .item:hover",[36,82299,19228],{"class":42},[36,82301,82302,82305,82307,82309,82311,82313,82315,82317,82319,82322,82324,82326,82328,82330,82332,82334,82336,82339],{"class":38,"line":851},[36,82303,82304],{"class":112},"      box-shadow",[36,82306,54994],{"class":42},[36,82308,1859],{"class":112},[36,82310,55049],{"class":46},[36,82312,1004],{"class":112},[36,82314,55049],{"class":46},[36,82316,5860],{"class":112},[36,82318,55049],{"class":46},[36,82320,82321],{"class":112}," rgba",[36,82323,495],{"class":42},[36,82325,1859],{"class":112},[36,82327,478],{"class":42},[36,82329,1859],{"class":112},[36,82331,478],{"class":42},[36,82333,1859],{"class":112},[36,82335,478],{"class":42},[36,82337,82338],{"class":112},".2",[36,82340,6422],{"class":42},[36,82342,82343,82346,82348,82351,82353,82355,82357,82360,82362,82364,82366],{"class":38,"line":868},[36,82344,82345],{"class":112},"      transform",[36,82347,54994],{"class":42},[36,82349,82350],{"class":112},"translate3d",[36,82352,495],{"class":42},[36,82354,1859],{"class":112},[36,82356,478],{"class":42},[36,82358,82359],{"class":112},"-4",[36,82361,55049],{"class":46},[36,82363,478],{"class":42},[36,82365,1859],{"class":112},[36,82367,6422],{"class":42},[36,82369,82370,82372,82374,82376],{"class":38,"line":873},[36,82371,65580],{"class":112},[36,82373,54994],{"class":42},[36,82375,65585],{"class":112},[36,82377,5029],{"class":42},[36,82379,82380],{"class":38,"line":891},[36,82381,5899],{"class":42},[36,82383,82384],{"class":38,"line":906},[36,82385,659],{"emptyLinePlaceholder":658},[36,82387,82388,82390,82392],{"class":38,"line":925},[36,82389,82179],{"class":101},[36,82391,59171],{"class":54857},[36,82393,19228],{"class":42},[36,82395,82396,82398,82400,82402,82404],{"class":38,"line":943},[36,82397,58327],{"class":112},[36,82399,54994],{"class":42},[36,82401,4186],{"class":112},[36,82403,4203],{"class":46},[36,82405,5029],{"class":42},[36,82407,82408],{"class":38,"line":948},[36,82409,5899],{"class":42},[36,82411,82412],{"class":38,"line":971},[36,82413,659],{"emptyLinePlaceholder":658},[36,82415,82416,82418,82420],{"class":38,"line":992},[36,82417,82179],{"class":101},[36,82419,65859],{"class":101},[36,82421,19228],{"class":42},[36,82423,82424,82426,82428,82430,82432],{"class":38,"line":1020},[36,82425,58478],{"class":112},[36,82427,54994],{"class":42},[36,82429,4521],{"class":112},[36,82431,55049],{"class":46},[36,82433,5029],{"class":42},[36,82435,82436,82438,82440,82442,82444],{"class":38,"line":1036},[36,82437,82246],{"class":112},[36,82439,54994],{"class":42},[36,82441,554],{"class":112},[36,82443,55049],{"class":46},[36,82445,5029],{"class":42},[36,82447,82448,82450,82452,82455],{"class":38,"line":1041},[36,82449,60971],{"class":112},[36,82451,54994],{"class":42},[36,82453,82454],{"class":112},"#666",[36,82456,5029],{"class":42},[36,82458,82459],{"class":38,"line":1052},[36,82460,5899],{"class":42},[36,82462,82463],{"class":38,"line":1065},[36,82464,659],{"emptyLinePlaceholder":658},[36,82466,82467,82469,82472],{"class":38,"line":1077},[36,82468,82179],{"class":101},[36,82470,82471],{"class":101}," .price",[36,82473,19228],{"class":42},[36,82475,82476,82478,82480,82482,82484],{"class":38,"line":1082},[36,82477,58478],{"class":112},[36,82479,54994],{"class":42},[36,82481,4620],{"class":112},[36,82483,55049],{"class":46},[36,82485,5029],{"class":42},[36,82487,82488,82490,82492,82495],{"class":38,"line":1125},[36,82489,60971],{"class":112},[36,82491,54994],{"class":42},[36,82493,82494],{"class":112},"firebrick",[36,82496,5029],{"class":42},[36,82498,82499],{"class":38,"line":1164},[36,82500,5899],{"class":42},[36,82502,82503],{"class":38,"line":1169},[36,82504,659],{"emptyLinePlaceholder":658},[36,82506,82507,82509,82512],{"class":38,"line":1180},[36,82508,82179],{"class":101},[36,82510,82511],{"class":101}," .price::before",[36,82513,19228],{"class":42},[36,82515,82516,82519,82521,82524],{"class":38,"line":1198},[36,82517,82518],{"class":112},"      content",[36,82520,54994],{"class":42},[36,82522,82523],{"class":105},"'￥'",[36,82525,5029],{"class":42},[36,82527,82528,82530,82532,82534,82536],{"class":38,"line":1215},[36,82529,58478],{"class":112},[36,82531,54994],{"class":42},[36,82533,4421],{"class":112},[36,82535,55049],{"class":46},[36,82537,5029],{"class":42},[36,82539,82540],{"class":38,"line":1236},[36,82541,5899],{"class":42},[36,82543,82544],{"class":38,"line":1245},[36,82545,659],{"emptyLinePlaceholder":658},[36,82547,82548,82551],{"class":38,"line":1250},[36,82549,82550],{"class":101},"    .filter",[36,82552,19228],{"class":42},[36,82554,82555,82557,82559,82561],{"class":38,"line":1265},[36,82556,58565],{"class":112},[36,82558,54994],{"class":42},[36,82560,55034],{"class":112},[36,82562,5029],{"class":42},[36,82564,82565,82567,82569,82571,82573],{"class":38,"line":1281},[36,82566,58327],{"class":112},[36,82568,54994],{"class":42},[36,82570,82128],{"class":112},[36,82572,55049],{"class":46},[36,82574,5029],{"class":42},[36,82576,82577,82579,82581,82583,82585],{"class":38,"line":1297},[36,82578,58262],{"class":112},[36,82580,54994],{"class":42},[36,82582,1859],{"class":112},[36,82584,55113],{"class":112},[36,82586,5029],{"class":42},[36,82588,82589,82591,82593,82595,82597,82599],{"class":38,"line":1314},[36,82590,58251],{"class":112},[36,82592,54994],{"class":42},[36,82594,4527],{"class":112},[36,82596,55049],{"class":46},[36,82598,82219],{"class":112},[36,82600,82601],{"class":46},"px\n",[36,82603,82604],{"class":38,"line":1336},[36,82605,5899],{"class":42},[36,82607,82608],{"class":38,"line":1356},[36,82609,659],{"emptyLinePlaceholder":658},[36,82611,82612,82614,82616],{"class":38,"line":1361},[36,82613,82550],{"class":101},[36,82615,5134],{"class":54857},[36,82617,19228],{"class":42},[36,82619,82620,82622,82624,82626,82628,82630,82632],{"class":38,"line":1407},[36,82621,58251],{"class":112},[36,82623,54994],{"class":42},[36,82625,554],{"class":112},[36,82627,55049],{"class":46},[36,82629,12631],{"class":112},[36,82631,55049],{"class":46},[36,82633,5029],{"class":42},[36,82635,82636,82638,82640,82642],{"class":38,"line":1423},[36,82637,65276],{"class":112},[36,82639,54994],{"class":42},[36,82641,65373],{"class":112},[36,82643,5029],{"class":42},[36,82645,82646,82648,82650,82652],{"class":38,"line":1439},[36,82647,60971],{"class":112},[36,82649,54994],{"class":42},[36,82651,82454],{"class":112},[36,82653,5029],{"class":42},[36,82655,82656,82658,82660,82662],{"class":38,"line":1444},[36,82657,67525],{"class":112},[36,82659,54994],{"class":42},[36,82661,58293],{"class":112},[36,82663,5029],{"class":42},[36,82665,82666,82668,82670,82672,82674],{"class":38,"line":1486},[36,82667,65305],{"class":112},[36,82669,54994],{"class":42},[36,82671,1921],{"class":112},[36,82673,55049],{"class":46},[36,82675,5029],{"class":42},[36,82677,82678],{"class":38,"line":1499},[36,82679,5899],{"class":42},[36,82681,82682],{"class":38,"line":1513},[36,82683,659],{"emptyLinePlaceholder":658},[36,82685,82686,82688,82690,82692],{"class":38,"line":1518},[36,82687,82550],{"class":101},[36,82689,5134],{"class":54857},[36,82691,65455],{"class":101},[36,82693,19228],{"class":42},[36,82695,82696,82698,82700,82703],{"class":38,"line":1529},[36,82697,58440],{"class":112},[36,82699,54994],{"class":42},[36,82701,82702],{"class":112},"#05943c",[36,82704,5029],{"class":42},[36,82706,82707,82709,82711,82713],{"class":38,"line":1539},[36,82708,60971],{"class":112},[36,82710,54994],{"class":42},[36,82712,64397],{"class":112},[36,82714,5029],{"class":42},[36,82716,82717],{"class":38,"line":1544},[36,82718,5899],{"class":42},[36,82720,82721,82723,82725],{"class":38,"line":1555},[36,82722,55974],{"class":42},[36,82724,3785],{"class":54857},[36,82726,54864],{"class":42},[36,82728,82729,82731,82733],{"class":38,"line":1572},[36,82730,55342],{"class":42},[36,82732,54891],{"class":54857},[36,82734,54864],{"class":42},[36,82736,82737],{"class":38,"line":1592},[36,82738,659],{"emptyLinePlaceholder":658},[36,82740,82741,82743,82745],{"class":38,"line":1597},[36,82742,393],{"class":42},[36,82744,55357],{"class":54857},[36,82746,54864],{"class":42},[36,82748,82749,82751,82753,82755,82757,82760],{"class":38,"line":1610},[36,82750,55701],{"class":42},[36,82752,55168],{"class":54857},[36,82754,57043],{"class":101},[36,82756,47],{"class":42},[36,82758,82759],{"class":105},"\"filter\"",[36,82761,54864],{"class":42},[36,82763,82764,82766,82768,82770,82772,82774,82777,82779,82781,82784,82786],{"class":38,"line":1632},[36,82765,54898],{"class":42},[36,82767,4113],{"class":54857},[36,82769,64612],{"class":101},[36,82771,47],{"class":42},[36,82773,64617],{"class":105},[36,82775,82776],{"class":101}," data-index",[36,82778,47],{"class":42},[36,82780,7377],{"class":105},[36,82782,82783],{"class":42},">0-100元\u003C\u002F",[36,82785,4113],{"class":54857},[36,82787,54864],{"class":42},[36,82789,82790,82792,82794,82796,82798,82800,82802,82804,82806,82809,82811],{"class":38,"line":1646},[36,82791,54898],{"class":42},[36,82793,4113],{"class":54857},[36,82795,64612],{"class":101},[36,82797,47],{"class":42},[36,82799,64617],{"class":105},[36,82801,82776],{"class":101},[36,82803,47],{"class":42},[36,82805,7400],{"class":105},[36,82807,82808],{"class":42},">100-300元\u003C\u002F",[36,82810,4113],{"class":54857},[36,82812,54864],{"class":42},[36,82814,82815,82817,82819,82821,82823,82825,82827,82829,82831,82834,82836],{"class":38,"line":1651},[36,82816,54898],{"class":42},[36,82818,4113],{"class":54857},[36,82820,64612],{"class":101},[36,82822,47],{"class":42},[36,82824,64617],{"class":105},[36,82826,82776],{"class":101},[36,82828,47],{"class":42},[36,82830,7413],{"class":105},[36,82832,82833],{"class":42},">300元以上\u003C\u002F",[36,82835,4113],{"class":54857},[36,82837,54864],{"class":42},[36,82839,82840,82842,82844,82846,82848,82850,82853,82855],{"class":38,"line":1664},[36,82841,54898],{"class":42},[36,82843,4113],{"class":54857},[36,82845,64612],{"class":101},[36,82847,47],{"class":42},[36,82849,64617],{"class":105},[36,82851,82852],{"class":42},">全部区间\u003C\u002F",[36,82854,4113],{"class":54857},[36,82856,54864],{"class":42},[36,82858,82859,82861,82863],{"class":38,"line":1669},[36,82860,55974],{"class":42},[36,82862,55168],{"class":54857},[36,82864,54864],{"class":42},[36,82866,82867,82869,82871,82873,82875,82877],{"class":38,"line":1681},[36,82868,55701],{"class":42},[36,82870,55168],{"class":54857},[36,82872,57043],{"class":101},[36,82874,47],{"class":42},[36,82876,66163],{"class":105},[36,82878,54864],{"class":42},[36,82880,82881],{"class":38,"line":1694},[36,82882,82883],{"class":3943},"    \u003C!-- \u003Cdiv class=\"item\">\n",[36,82885,82886],{"class":38,"line":1699},[36,82887,82888],{"class":3943},"      \u003Cimg src=\"\" alt=\"\">\n",[36,82890,82891],{"class":38,"line":1714},[36,82892,82893],{"class":3943},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[36,82895,82896],{"class":38,"line":1729},[36,82897,82898],{"class":3943},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[36,82900,82901],{"class":38,"line":1746},[36,82902,82903],{"class":3943},"    \u003C\u002Fdiv> -->\n",[36,82905,82906,82908,82910],{"class":38,"line":1751},[36,82907,55974],{"class":42},[36,82909,55168],{"class":54857},[36,82911,54864],{"class":42},[36,82913,82914,82916,82918],{"class":38,"line":1765},[36,82915,55701],{"class":42},[36,82917,55370],{"class":54857},[36,82919,54864],{"class":42},[36,82921,82922],{"class":38,"line":1783},[36,82923,82924],{"class":3943},"    \u002F\u002F 2. 初始化数据\n",[36,82926,82927,82929,82932,82934],{"class":38,"line":1799},[36,82928,14882],{"class":46},[36,82930,82931],{"class":112}," goodsList",[36,82933,673],{"class":46},[36,82935,59003],{"class":42},[36,82937,82938],{"class":38,"line":1807},[36,82939,82940],{"class":42},"      {\n",[36,82942,82943,82946,82949],{"class":38,"line":1812},[36,82944,82945],{"class":42},"        id: ",[36,82947,82948],{"class":105},"'4001172'",[36,82950,35056],{"class":42},[36,82952,82953,82956,82959],{"class":38,"line":1817},[36,82954,82955],{"class":42},"        name: ",[36,82957,82958],{"class":105},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[36,82960,35056],{"class":42},[36,82962,82963,82966,82969],{"class":38,"line":1833},[36,82964,82965],{"class":42},"        price: ",[36,82967,82968],{"class":105},"'289.00'",[36,82970,35056],{"class":42},[36,82972,82973,82976,82979],{"class":38,"line":1844},[36,82974,82975],{"class":42},"        picture: ",[36,82977,82978],{"class":105},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[36,82980,35056],{"class":42},[36,82982,82983],{"class":38,"line":1864},[36,82984,81446],{"class":42},[36,82986,82987],{"class":38,"line":1878},[36,82988,82940],{"class":42},[36,82990,82991,82993,82996],{"class":38,"line":1891},[36,82992,82945],{"class":42},[36,82994,82995],{"class":105},"'4001594'",[36,82997,35056],{"class":42},[36,82999,83000,83002,83005],{"class":38,"line":1896},[36,83001,82955],{"class":42},[36,83003,83004],{"class":105},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[36,83006,35056],{"class":42},[36,83008,83009,83011,83014],{"class":38,"line":1906},[36,83010,82965],{"class":42},[36,83012,83013],{"class":105},"'288.00'",[36,83015,35056],{"class":42},[36,83017,83018,83020,83023],{"class":38,"line":1926},[36,83019,82975],{"class":42},[36,83021,83022],{"class":105},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[36,83024,35056],{"class":42},[36,83026,83027],{"class":38,"line":1936},[36,83028,81446],{"class":42},[36,83030,83031],{"class":38,"line":1946},[36,83032,82940],{"class":42},[36,83034,83035,83037,83040],{"class":38,"line":1957},[36,83036,82945],{"class":42},[36,83038,83039],{"class":105},"'4001009'",[36,83041,35056],{"class":42},[36,83043,83044,83046,83049],{"class":38,"line":2008},[36,83045,82955],{"class":42},[36,83047,83048],{"class":105},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[36,83050,35056],{"class":42},[36,83052,83053,83055,83058],{"class":38,"line":2022},[36,83054,82965],{"class":42},[36,83056,83057],{"class":105},"'109.00'",[36,83059,35056],{"class":42},[36,83061,83062,83064,83067],{"class":38,"line":2028},[36,83063,82975],{"class":42},[36,83065,83066],{"class":105},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[36,83068,35056],{"class":42},[36,83070,83071],{"class":38,"line":2033},[36,83072,81446],{"class":42},[36,83074,83075],{"class":38,"line":2054},[36,83076,82940],{"class":42},[36,83078,83079,83081,83084],{"class":38,"line":2059},[36,83080,82945],{"class":42},[36,83082,83083],{"class":105},"'4001874'",[36,83085,35056],{"class":42},[36,83087,83088,83090,83093],{"class":38,"line":2064},[36,83089,82955],{"class":42},[36,83091,83092],{"class":105},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[36,83094,35056],{"class":42},[36,83096,83097,83099,83102],{"class":38,"line":2081},[36,83098,82965],{"class":42},[36,83100,83101],{"class":105},"'488.00'",[36,83103,35056],{"class":42},[36,83105,83106,83108,83111],{"class":38,"line":36396},[36,83107,82975],{"class":42},[36,83109,83110],{"class":105},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[36,83112,35056],{"class":42},[36,83114,83115],{"class":38,"line":36402},[36,83116,81446],{"class":42},[36,83118,83119],{"class":38,"line":36411},[36,83120,82940],{"class":42},[36,83122,83123,83125,83128],{"class":38,"line":36417},[36,83124,82945],{"class":42},[36,83126,83127],{"class":105},"'4001649'",[36,83129,35056],{"class":42},[36,83131,83132,83134,83137],{"class":38,"line":36426},[36,83133,82955],{"class":42},[36,83135,83136],{"class":105},"'大师监制龙泉青瓷茶叶罐'",[36,83138,35056],{"class":42},[36,83140,83141,83143,83146],{"class":38,"line":36432},[36,83142,82965],{"class":42},[36,83144,83145],{"class":105},"'139.00'",[36,83147,35056],{"class":42},[36,83149,83150,83152,83155],{"class":38,"line":36438},[36,83151,82975],{"class":42},[36,83153,83154],{"class":105},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[36,83156,35056],{"class":42},[36,83158,83159],{"class":38,"line":36447},[36,83160,81446],{"class":42},[36,83162,83163],{"class":38,"line":36453},[36,83164,82940],{"class":42},[36,83166,83167,83169,83172],{"class":38,"line":36464},[36,83168,82945],{"class":42},[36,83170,83171],{"class":105},"'3997185'",[36,83173,35056],{"class":42},[36,83175,83176,83178,83181],{"class":38,"line":36470},[36,83177,82955],{"class":42},[36,83179,83180],{"class":105},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[36,83182,35056],{"class":42},[36,83184,83185,83187,83190],{"class":38,"line":36489},[36,83186,82965],{"class":42},[36,83188,83189],{"class":105},"'108.00'",[36,83191,35056],{"class":42},[36,83193,83194,83196,83199],{"class":38,"line":36495},[36,83195,82975],{"class":42},[36,83197,83198],{"class":105},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[36,83200,35056],{"class":42},[36,83202,83203],{"class":38,"line":36506},[36,83204,81446],{"class":42},[36,83206,83207],{"class":38,"line":36512},[36,83208,82940],{"class":42},[36,83210,83211,83213,83216],{"class":38,"line":36532},[36,83212,82945],{"class":42},[36,83214,83215],{"class":105},"'3997403'",[36,83217,35056],{"class":42},[36,83219,83220,83222,83225],{"class":38,"line":36548},[36,83221,82955],{"class":42},[36,83223,83224],{"class":105},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[36,83226,35056],{"class":42},[36,83228,83229,83231,83234],{"class":38,"line":36554},[36,83230,82965],{"class":42},[36,83232,83233],{"class":105},"'100.00'",[36,83235,35056],{"class":42},[36,83237,83238,83240,83243],{"class":38,"line":36568},[36,83239,82975],{"class":42},[36,83241,83242],{"class":105},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[36,83244,35056],{"class":42},[36,83246,83247],{"class":38,"line":36574},[36,83248,81446],{"class":42},[36,83250,83251],{"class":38,"line":36580},[36,83252,82940],{"class":42},[36,83254,83255,83257,83260],{"class":38,"line":36591},[36,83256,82945],{"class":42},[36,83258,83259],{"class":105},"'3998274'",[36,83261,35056],{"class":42},[36,83263,83264,83266,83269],{"class":38,"line":36597},[36,83265,82955],{"class":42},[36,83267,83268],{"class":105},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[36,83270,35056],{"class":42},[36,83272,83273,83275,83277],{"class":38,"line":36603},[36,83274,82965],{"class":42},[36,83276,83145],{"class":105},[36,83278,35056],{"class":42},[36,83280,83281,83283,83286],{"class":38,"line":36613},[36,83282,82975],{"class":42},[36,83284,83285],{"class":105},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[36,83287,35056],{"class":42},[36,83289,83290],{"class":38,"line":36619},[36,83291,81446],{"class":42},[36,83293,83294],{"class":38,"line":36630},[36,83295,56666],{"class":42},[36,83297,83298],{"class":38,"line":36636},[36,83299,659],{"emptyLinePlaceholder":658},[36,83301,83302],{"class":38,"line":36646},[36,83303,83304],{"class":3943},"    \u002F\u002F 1.渲染函数\n",[36,83306,83307,83309,83311,83313,83315],{"class":38,"line":36651},[36,83308,73638],{"class":46},[36,83310,73641],{"class":101},[36,83312,495],{"class":42},[36,83314,7578],{"class":468},[36,83316,16102],{"class":42},[36,83318,83319],{"class":38,"line":36657},[36,83320,83321],{"class":3943},"      \u002F\u002F 声明空字符串\n",[36,83323,83324,83327,83330,83332],{"class":38,"line":36706},[36,83325,83326],{"class":46},"      let",[36,83328,83329],{"class":42}," str ",[36,83331,47],{"class":46},[36,83333,73658],{"class":105},[36,83335,83336],{"class":38,"line":36753},[36,83337,73663],{"class":3943},[36,83339,83340,83342,83345,83347,83350,83353],{"class":38,"line":36758},[36,83341,61562],{"class":42},[36,83343,83344],{"class":101},"forEach",[36,83346,495],{"class":42},[36,83348,83349],{"class":468},"item",[36,83351,83352],{"class":46}," =>",[36,83354,19228],{"class":42},[36,83356,83357,83359,83362,83365,83367,83370,83372,83375,83378,83380],{"class":38,"line":36764},[36,83358,64825],{"class":46},[36,83360,83361],{"class":42}," { ",[36,83363,83364],{"class":112},"name",[36,83366,478],{"class":42},[36,83368,83369],{"class":112},"price",[36,83371,478],{"class":42},[36,83373,83374],{"class":112},"picture",[36,83376,83377],{"class":42}," } ",[36,83379,47],{"class":46},[36,83381,83382],{"class":42}," item\n",[36,83384,83385,83388,83390],{"class":38,"line":36783},[36,83386,83387],{"class":42},"        str ",[36,83389,1658],{"class":46},[36,83391,73722],{"class":105},[36,83393,83394],{"class":38,"line":36789},[36,83395,83396],{"class":105},"          \u003Cdiv class=\"item\">\n",[36,83398,83399,83402,83404],{"class":38,"line":36809},[36,83400,83401],{"class":105},"            \u003Cimg src=\"${",[36,83403,83374],{"class":42},[36,83405,83406],{"class":105},"}\" alt=\"\">\n",[36,83408,83409,83412,83414],{"class":38,"line":36815},[36,83410,83411],{"class":105},"            \u003Cp class=\"name\">${",[36,83413,83364],{"class":42},[36,83415,83416],{"class":105},"}\u003C\u002Fp>\n",[36,83418,83419,83422,83424],{"class":38,"line":36821},[36,83420,83421],{"class":105},"            \u003Cp class=\"price\">${",[36,83423,83369],{"class":42},[36,83425,83416],{"class":105},[36,83427,83428],{"class":38,"line":36831},[36,83429,83430],{"class":105},"          \u003C\u002Fdiv>\n",[36,83432,83433],{"class":38,"line":36836},[36,83434,83435],{"class":105},"        `\n",[36,83437,83438],{"class":38,"line":36842},[36,83439,68370],{"class":42},[36,83441,83442],{"class":38,"line":36858},[36,83443,83444],{"class":3943},"      \u002F\u002F 追加给List\n",[36,83446,83447,83449,83451,83453,83456,83458,83460],{"class":38,"line":36903},[36,83448,59326],{"class":42},[36,83450,57956],{"class":101},[36,83452,495],{"class":42},[36,83454,83455],{"class":105},"'.list'",[36,83457,77803],{"class":42},[36,83459,47],{"class":46},[36,83461,77539],{"class":42},[36,83463,83464],{"class":38,"line":36909},[36,83465,5899],{"class":42},[36,83467,83468],{"class":38,"line":36915},[36,83469,83470],{"class":3943},"    \u002F\u002F 页面一打开就需要渲染\n",[36,83472,83473,83476],{"class":38,"line":36921},[36,83474,83475],{"class":101},"    render",[36,83477,83478],{"class":42},"(goodsList)\n",[36,83480,83481],{"class":38,"line":36932},[36,83482,83483],{"class":3943},"    \u002F\u002F 2.过滤筛选\n",[36,83485,83486,83488,83490,83492,83495,83497,83499,83501,83503,83505,83507,83509],{"class":38,"line":36938},[36,83487,55964],{"class":42},[36,83489,57956],{"class":101},[36,83491,495],{"class":42},[36,83493,83494],{"class":105},"'.filter'",[36,83496,34423],{"class":42},[36,83498,61368],{"class":101},[36,83500,495],{"class":42},[36,83502,61373],{"class":105},[36,83504,478],{"class":42},[36,83506,3958],{"class":468},[36,83508,83352],{"class":46},[36,83510,19228],{"class":42},[36,83512,83513],{"class":38,"line":36944},[36,83514,83515],{"class":3943},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[36,83517,83518,83520,83522,83525,83527,83529,83531,83533],{"class":38,"line":36950},[36,83519,61783],{"class":46},[36,83521,83361],{"class":42},[36,83523,83524],{"class":112},"tagName",[36,83526,478],{"class":42},[36,83528,35126],{"class":112},[36,83530,83377],{"class":42},[36,83532,47],{"class":46},[36,83534,83535],{"class":42}," e.target\n",[36,83537,83538],{"class":38,"line":36968},[36,83539,83540],{"class":3943},"      \u002F\u002F 判断\n",[36,83542,83543,83545,83547,83549,83551],{"class":38,"line":36982},[36,83544,58036],{"class":46},[36,83546,70589],{"class":42},[36,83548,58042],{"class":46},[36,83550,71811],{"class":105},[36,83552,16102],{"class":42},[36,83554,83555],{"class":38,"line":36991},[36,83556,83557],{"class":3943},"        \u002F\u002F console.log(11)\n",[36,83559,83560],{"class":38,"line":37000},[36,83561,83562],{"class":3943},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[36,83564,83565],{"class":38,"line":37009},[36,83566,83567],{"class":3943},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[36,83569,83570,83572,83574,83576],{"class":38,"line":37018},[36,83571,55387],{"class":46},[36,83573,55390],{"class":42},[36,83575,47],{"class":46},[36,83577,83578],{"class":42}," goodsList\n",[36,83580,83581,83583,83586,83588,83591],{"class":38,"line":37024},[36,83582,995],{"class":46},[36,83584,83585],{"class":42}," (dataset.index ",[36,83587,58042],{"class":46},[36,83589,83590],{"class":105}," '1'",[36,83592,16102],{"class":42},[36,83594,83595,83598,83600,83603,83606,83608,83610,83612,83615,83617,83619,83622,83624,83626,83628],{"class":38,"line":37030},[36,83596,83597],{"class":42},"          arr ",[36,83599,47],{"class":46},[36,83601,83602],{"class":42}," goodsList.",[36,83604,83605],{"class":101},"filter",[36,83607,495],{"class":42},[36,83609,83349],{"class":468},[36,83611,83352],{"class":46},[36,83613,83614],{"class":42}," item.price ",[36,83616,412],{"class":46},[36,83618,1004],{"class":112},[36,83620,83621],{"class":46}," &&",[36,83623,83614],{"class":42},[36,83625,5323],{"class":46},[36,83627,9447],{"class":112},[36,83629,922],{"class":42},[36,83631,83632,83635,83637,83639,83641,83643,83646],{"class":38,"line":37038},[36,83633,83634],{"class":42},"        } ",[36,83636,5425],{"class":46},[36,83638,5428],{"class":46},[36,83640,83585],{"class":42},[36,83642,58042],{"class":46},[36,83644,83645],{"class":105}," '2'",[36,83647,16102],{"class":42},[36,83649,83650,83652,83654,83656,83658,83660,83662,83664,83666,83668,83670,83672,83674,83676,83679],{"class":38,"line":37043},[36,83651,83597],{"class":42},[36,83653,47],{"class":46},[36,83655,83602],{"class":42},[36,83657,83605],{"class":101},[36,83659,495],{"class":42},[36,83661,83349],{"class":468},[36,83663,83352],{"class":46},[36,83665,83614],{"class":42},[36,83667,412],{"class":46},[36,83669,9447],{"class":112},[36,83671,83621],{"class":46},[36,83673,83614],{"class":42},[36,83675,5323],{"class":46},[36,83677,83678],{"class":112}," 300",[36,83680,922],{"class":42},[36,83682,83683,83685,83687,83689,83691,83693,83696],{"class":38,"line":37049},[36,83684,83634],{"class":42},[36,83686,5425],{"class":46},[36,83688,5428],{"class":46},[36,83690,83585],{"class":42},[36,83692,58042],{"class":46},[36,83694,83695],{"class":105}," '3'",[36,83697,16102],{"class":42},[36,83699,83700,83702,83704,83706,83708,83710,83712,83714,83716,83718,83720],{"class":38,"line":37060},[36,83701,83597],{"class":42},[36,83703,47],{"class":46},[36,83705,83602],{"class":42},[36,83707,83605],{"class":101},[36,83709,495],{"class":42},[36,83711,83349],{"class":468},[36,83713,83352],{"class":46},[36,83715,83614],{"class":42},[36,83717,412],{"class":46},[36,83719,83678],{"class":112},[36,83721,922],{"class":42},[36,83723,83724],{"class":38,"line":37066},[36,83725,6239],{"class":42},[36,83727,83728],{"class":38,"line":37086},[36,83729,83730],{"class":3943},"        \u002F\u002F 渲染函数\n",[36,83732,83733,83735],{"class":38,"line":37092},[36,83734,73962],{"class":101},[36,83736,55969],{"class":42},[36,83738,83739],{"class":38,"line":37098},[36,83740,55955],{"class":42},[36,83742,83743],{"class":38,"line":37104},[36,83744,659],{"emptyLinePlaceholder":658},[36,83746,83747],{"class":38,"line":37121},[36,83748,37021],{"class":42},[36,83750,83751,83753,83755],{"class":38,"line":37127},[36,83752,55974],{"class":42},[36,83754,55370],{"class":54857},[36,83756,54864],{"class":42},[36,83758,83759,83761,83763],{"class":38,"line":37133},[36,83760,55342],{"class":42},[36,83762,55357],{"class":54857},[36,83764,54864],{"class":42},[36,83766,83767],{"class":38,"line":37139},[36,83768,659],{"emptyLinePlaceholder":658},[36,83770,83771,83773,83775],{"class":38,"line":37145},[36,83772,55342],{"class":42},[36,83774,54192],{"class":54857},[36,83776,54864],{"class":42},[14,83778,83780],{"id":83779},"_410-深入了解对象","4.10 深入了解对象",[318,83782,83784],{"id":83783},"_4101-创建对象","4.10.1 创建对象",[19,83786,83787],{},[5198,83788],{"alt":31,"src":83789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,83791,83792],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[318,83794,83796],{"id":83795},"_4102-构造函数","4.10.2 构造函数",[19,83798,83799,83802],{},[4027,83800,83801],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,83804,83805,83808],{},[4027,83806,83807],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[26,83810,83812],{"className":54190,"code":83811,"language":54192,"meta":31,"style":31},"\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",[33,83813,83814,83822,83827,83848,83861,83873,83885,83889,83894,83921,83926,83953],{"__ignoreMap":31},[36,83815,83816,83818,83820],{"class":38,"line":39},[36,83817,393],{"class":42},[36,83819,55370],{"class":54857},[36,83821,54864],{"class":42},[36,83823,83824],{"class":38,"line":53},[36,83825,83826],{"class":3943},"\u002F\u002F例：\n",[36,83828,83829,83831,83834,83836,83838,83840,83842,83844,83846],{"class":38,"line":196},[36,83830,58005],{"class":46},[36,83832,83833],{"class":101}," Pig",[36,83835,495],{"class":42},[36,83837,83364],{"class":468},[36,83839,4253],{"class":42},[36,83841,73775],{"class":468},[36,83843,4253],{"class":42},[36,83845,73792],{"class":468},[36,83847,16102],{"class":42},[36,83849,83850,83853,83856,83858],{"class":38,"line":642},[36,83851,83852],{"class":112},"    this",[36,83854,83855],{"class":42},".name",[36,83857,47],{"class":46},[36,83859,83860],{"class":42},"name\n",[36,83862,83863,83865,83868,83870],{"class":38,"line":655},[36,83864,83852],{"class":112},[36,83866,83867],{"class":42},".age",[36,83869,47],{"class":46},[36,83871,83872],{"class":42},"age\n",[36,83874,83875,83877,83880,83882],{"class":38,"line":662},[36,83876,83852],{"class":112},[36,83878,83879],{"class":42},".gender",[36,83881,47],{"class":46},[36,83883,83884],{"class":42},"gender    \n",[36,83886,83887],{"class":38,"line":667},[36,83888,5300],{"class":42},[36,83890,83891],{"class":38,"line":679},[36,83892,83893],{"class":3943},"\u002F\u002F创建佩奇对象\n",[36,83895,83896,83898,83901,83903,83905,83907,83910,83912,83914,83916,83919],{"class":38,"line":685},[36,83897,10483],{"class":46},[36,83899,83900],{"class":112}," Peppa",[36,83902,15378],{"class":46},[36,83904,83833],{"class":101},[36,83906,495],{"class":42},[36,83908,83909],{"class":105},"'佩奇'",[36,83911,4253],{"class":42},[36,83913,4219],{"class":112},[36,83915,4253],{"class":42},[36,83917,83918],{"class":105},"'女'",[36,83920,922],{"class":42},[36,83922,83923],{"class":38,"line":691},[36,83924,83925],{"class":3943},"\u002F\u002F创建乔治对象\n",[36,83927,83928,83930,83933,83935,83937,83939,83942,83944,83946,83948,83951],{"class":38,"line":696},[36,83929,10483],{"class":46},[36,83931,83932],{"class":112}," George",[36,83934,15378],{"class":46},[36,83936,83833],{"class":101},[36,83938,495],{"class":42},[36,83940,83941],{"class":105},"'乔治'",[36,83943,4253],{"class":42},[36,83945,1982],{"class":112},[36,83947,4253],{"class":42},[36,83949,83950],{"class":105},"'男'",[36,83952,922],{"class":42},[36,83954,83955,83957,83959],{"class":38,"line":702},[36,83956,55342],{"class":42},[36,83958,55370],{"class":54857},[36,83960,54864],{"class":42},[19,83962,83963],{},[5198,83964],{"alt":31,"src":83965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,83967,83968],{},[5198,83969],{"alt":31,"src":83970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,83972,83973],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,83975,83976],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,83978,83979],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,83981,83982],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,83984,83985],{},"这里用等号是因为：对象.属性=值",[19,83987,83988],{},"①利用对象字面量创建对象",[19,83990,83991],{},"const o={",[19,83993,83994],{},"name:'pink'",[19,83996,83997],{},"} ②利用new Object创建对象",[19,83999,84000],{},"const o=new Object({name:'pink'})",[19,84002,84003],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,84005,84006],{},"构造函数创建对象的执行过程：",[19,84008,84009],{},[5198,84010],{"alt":31,"src":84011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[318,84013,84015],{"id":84014},"_4103-实例成员","4.10.3 实例成员",[19,84017,84018],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[211,84020,84021,84024,84027],{},[214,84022,84023],{},"实例对象的属性和方法即为实例成员",[214,84025,84026],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[214,84028,84029],{},"构造函数创建的实例对象彼此独立互不影响",[318,84031,84033],{"id":84032},"_4104-静态成员","4.10.4 静态成员",[19,84035,84036],{},[5198,84037],{"alt":31,"src":84038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,84040,84041],{},"静态成员有Date.now() Math.PI Math.random()",[19,84043,84044],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,84046,84047],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,84049,84050],{},"function Pig(name) n {",[19,84052,84053],{},"this.name=name",[19,84055,4815],{},[19,84057,84058],{},"Pig.eyes=2",[19,84060,84061],{},"Pig.sayHai=function () { console.log(this) }",[19,84063,84064],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,84066,84067],{},"console.log(Pig.eyes) \u002F\u002F2",[19,84069,14993],{},[211,84071,84072,84075,84078,84081,84084],{},[214,84073,84074],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[214,84076,84077],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[214,84079,84080],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[214,84082,84083],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[214,84085,84086],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,84088,84089],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[318,84091,84093],{"id":84092},"_4105-内置构造函数","4.10.5 内置构造函数",[19,84095,84096],{},"内置构造函数包含：",[19,84098,84099],{},[5198,84100],{"alt":31,"src":84101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,84103,84104],{},[5198,84105],{"alt":31,"src":84106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,84108,84109],{},"这些基本数据类型，js对他们进行了包装",[55370,84111,84112],{},"\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",[25619,84114,84116],{"id":84115},"_41051-object","4.10.5.1 Object",[19,84118,84119],{},"Object 是内置的构造函数，用于创建普通对象",[19,84121,84122],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[26,84124,84126],{"className":54190,"code":84125,"language":54192,"meta":31,"style":31},"const user=new Object({name:'小明',age:15})\n",[33,84127,84128],{"__ignoreMap":31},[36,84129,84130],{"class":38,"line":39},[36,84131,84125],{"class":42},[19,84133,84134],{},"三个常用的静态方法：",[26531,84136,84138],{"id":84137},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,84140,84141],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,84143,84144],{},[5198,84145],{"alt":31,"src":84146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,84148,84149],{},[5198,84150],{"alt":31,"src":84151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[26,84153,84155],{"className":56624,"code":84154,"language":56626,"meta":31,"style":31},"\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",[33,84156,84157,84165,84173,84178,84183,84188,84193,84198,84203,84211],{"__ignoreMap":31},[36,84158,84159,84161,84163],{"class":38,"line":39},[36,84160,393],{"class":42},[36,84162,55357],{"class":54857},[36,84164,54864],{"class":42},[36,84166,84167,84169,84171],{"class":38,"line":53},[36,84168,55701],{"class":42},[36,84170,55370],{"class":54857},[36,84172,54864],{"class":42},[36,84174,84175],{"class":38,"line":196},[36,84176,84177],{"class":42},"    const o = { name: 'pink', age: 6 }\n",[36,84179,84180],{"class":38,"line":642},[36,84181,84182],{"class":42},"    \u002F\u002F 获得所有属性名\n",[36,84184,84185],{"class":38,"line":655},[36,84186,84187],{"class":42},"    const arr = Object.keys(o)\n",[36,84189,84190],{"class":38,"line":662},[36,84191,84192],{"class":42},"    console.log(arr)\n",[36,84194,84195],{"class":38,"line":667},[36,84196,84197],{"class":42},"    \u002F\u002F 获得所有属性值\n",[36,84199,84200],{"class":38,"line":679},[36,84201,84202],{"class":42},"    console.log(Object.values(o))\n",[36,84204,84205,84207,84209],{"class":38,"line":685},[36,84206,55974],{"class":42},[36,84208,55370],{"class":54857},[36,84210,54864],{"class":42},[36,84212,84213,84215,84217],{"class":38,"line":691},[36,84214,55342],{"class":42},[36,84216,55357],{"class":54857},[36,84218,54864],{"class":42},[26531,84220,84222],{"id":84221},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,84224,84225],{},"Object.assign(oo,o)",[19,84227,84228],{},"后的东西添加给前 是追加",[19,84230,84231],{},[5198,84232],{"alt":31,"src":84233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,84235,84236],{},[5198,84237],{"alt":31,"src":84238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[26,84240,84242],{"className":56624,"code":84241,"language":56626,"meta":31,"style":31},"\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",[33,84243,84244,84252,84260,84264,84268,84272,84276,84280,84284,84289,84294,84299,84304,84309,84317],{"__ignoreMap":31},[36,84245,84246,84248,84250],{"class":38,"line":39},[36,84247,393],{"class":42},[36,84249,55357],{"class":54857},[36,84251,54864],{"class":42},[36,84253,84254,84256,84258],{"class":38,"line":53},[36,84255,55701],{"class":42},[36,84257,55370],{"class":54857},[36,84259,54864],{"class":42},[36,84261,84262],{"class":38,"line":196},[36,84263,84177],{"class":42},[36,84265,84266],{"class":38,"line":642},[36,84267,84182],{"class":42},[36,84269,84270],{"class":38,"line":655},[36,84271,84187],{"class":42},[36,84273,84274],{"class":38,"line":662},[36,84275,84192],{"class":42},[36,84277,84278],{"class":38,"line":667},[36,84279,84197],{"class":42},[36,84281,84282],{"class":38,"line":679},[36,84283,84202],{"class":42},[36,84285,84286],{"class":38,"line":685},[36,84287,84288],{"class":42},"    const oo = {}\n",[36,84290,84291],{"class":38,"line":691},[36,84292,84293],{"class":42},"    Object.assign(oo, o)\n",[36,84295,84296],{"class":38,"line":696},[36,84297,84298],{"class":42},"    console.log(oo)\n",[36,84300,84301],{"class":38,"line":702},[36,84302,84303],{"class":42},"    Object.assign(o, { gender: '女' })\n",[36,84305,84306],{"class":38,"line":708},[36,84307,84308],{"class":42},"    console.log(o)\n",[36,84310,84311,84313,84315],{"class":38,"line":713},[36,84312,55974],{"class":42},[36,84314,55370],{"class":54857},[36,84316,54864],{"class":42},[36,84318,84319,84321,84323],{"class":38,"line":719},[36,84320,55342],{"class":42},[36,84322,55357],{"class":54857},[36,84324,54864],{"class":42},[19,84326,84327],{},[5198,84328],{"alt":31,"src":84329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[25619,84331,84333],{"id":84332},"_41052-array","4.10.5.2 Array",[19,84335,84336],{},"Array 是内置的构造函数，用于创建数组",[19,84338,84339],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[26,84341,84343],{"className":54190,"code":84342,"language":54192,"meta":31,"style":31},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[33,84344,84345,84350],{"__ignoreMap":31},[36,84346,84347],{"class":38,"line":39},[36,84348,84349],{"class":42},"const arr=new Array(3,5)\n",[36,84351,84352],{"class":38,"line":53},[36,84353,84354],{"class":42},"console.log(arr)  \u002F\u002F[3,5]\n",[19,84356,84357],{},"Array的实例方法，这个方法是实例成员",[19,84359,84360],{},[5198,84361],{"alt":31,"src":84362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[26531,84364,84366],{"id":84365},"_410521-reduce","4.10.5.2.1 reduce",[19,84368,84369],{},[5198,84370],{"alt":31,"src":84371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[26,84373,84375],{"className":56624,"code":84374,"language":56626,"meta":31,"style":31},"\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",[33,84376,84377,84385,84393,84398,84403,84408,84413,84417,84422,84427,84432,84436,84441,84446,84450,84455,84460,84465,84473],{"__ignoreMap":31},[36,84378,84379,84381,84383],{"class":38,"line":39},[36,84380,393],{"class":42},[36,84382,55357],{"class":54857},[36,84384,54864],{"class":42},[36,84386,84387,84389,84391],{"class":38,"line":53},[36,84388,55701],{"class":42},[36,84390,55370],{"class":54857},[36,84392,54864],{"class":42},[36,84394,84395],{"class":38,"line":196},[36,84396,84397],{"class":42},"    const arr = [1, 5, 8]\n",[36,84399,84400],{"class":38,"line":642},[36,84401,84402],{"class":42},"    \u002F\u002F 1.没有初始值\n",[36,84404,84405],{"class":38,"line":655},[36,84406,84407],{"class":42},"    const total = arr.reduce(function (prev, current) {\n",[36,84409,84410],{"class":38,"line":662},[36,84411,84412],{"class":42},"      return prev + current\n",[36,84414,84415],{"class":38,"line":667},[36,84416,37021],{"class":42},[36,84418,84419],{"class":38,"line":679},[36,84420,84421],{"class":42},"    console.log(total)   \u002F\u002F14\n",[36,84423,84424],{"class":38,"line":685},[36,84425,84426],{"class":42},"    \u002F\u002F 2.有初始值\n",[36,84428,84429],{"class":38,"line":691},[36,84430,84431],{"class":42},"    const total1 = arr.reduce(function (prev, current) {\n",[36,84433,84434],{"class":38,"line":696},[36,84435,84412],{"class":42},[36,84437,84438],{"class":38,"line":702},[36,84439,84440],{"class":42},"    }, 10)\n",[36,84442,84443],{"class":38,"line":708},[36,84444,84445],{"class":42},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[36,84447,84448],{"class":38,"line":713},[36,84449,659],{"emptyLinePlaceholder":658},[36,84451,84452],{"class":38,"line":719},[36,84453,84454],{"class":42},"    \u002F\u002F 3.箭头函数写法\n",[36,84456,84457],{"class":38,"line":725},[36,84458,84459],{"class":42},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[36,84461,84462],{"class":38,"line":731},[36,84463,84464],{"class":42},"    console.log(total2)   \u002F\u002F24\n",[36,84466,84467,84469,84471],{"class":38,"line":736},[36,84468,55974],{"class":42},[36,84470,55370],{"class":54857},[36,84472,54864],{"class":42},[36,84474,84475,84477,84479],{"class":38,"line":742},[36,84476,55342],{"class":42},[36,84478,55357],{"class":54857},[36,84480,54864],{"class":42},[19,84482,84483],{},"执行过程：",[211,84485,84486,84489,84492],{},[214,84487,84488],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[214,84490,84491],{},"每一次循环，把返回值给作为下一次循环的上一次值",[214,84493,84494],{},"如果有起始值，则起始值作为上一次值",[26,84496,84498],{"className":56624,"code":84497,"language":56626,"meta":31,"style":31},"\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",[33,84499,84500,84508,84516,84520,84524,84528,84532,84536,84540,84545,84550,84555,84560,84565,84569,84573,84577,84581,84585,84589,84594,84598,84603,84607,84612,84617,84621,84625,84629,84637],{"__ignoreMap":31},[36,84501,84502,84504,84506],{"class":38,"line":39},[36,84503,393],{"class":42},[36,84505,55357],{"class":54857},[36,84507,54864],{"class":42},[36,84509,84510,84512,84514],{"class":38,"line":53},[36,84511,55701],{"class":42},[36,84513,55370],{"class":54857},[36,84515,54864],{"class":42},[36,84517,84518],{"class":38,"line":196},[36,84519,84397],{"class":42},[36,84521,84522],{"class":38,"line":642},[36,84523,84402],{"class":42},[36,84525,84526],{"class":38,"line":655},[36,84527,84407],{"class":42},[36,84529,84530],{"class":38,"line":662},[36,84531,84412],{"class":42},[36,84533,84534],{"class":38,"line":667},[36,84535,37021],{"class":42},[36,84537,84538],{"class":38,"line":679},[36,84539,84421],{"class":42},[36,84541,84542],{"class":38,"line":685},[36,84543,84544],{"class":42},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[36,84546,84547],{"class":38,"line":691},[36,84548,84549],{"class":42},"    \u002F\u002F     1              5                    6\n",[36,84551,84552],{"class":38,"line":696},[36,84553,84554],{"class":42},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[36,84556,84557],{"class":38,"line":702},[36,84558,84559],{"class":42},"    \u002F\u002F     6              8                    14\n",[36,84561,84562],{"class":38,"line":708},[36,84563,84564],{"class":42},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[36,84566,84567],{"class":38,"line":713},[36,84568,84426],{"class":42},[36,84570,84571],{"class":38,"line":719},[36,84572,84431],{"class":42},[36,84574,84575],{"class":38,"line":725},[36,84576,84412],{"class":42},[36,84578,84579],{"class":38,"line":731},[36,84580,84440],{"class":42},[36,84582,84583],{"class":38,"line":736},[36,84584,84445],{"class":42},[36,84586,84587],{"class":38,"line":742},[36,84588,84544],{"class":42},[36,84590,84591],{"class":38,"line":748},[36,84592,84593],{"class":42},"    \u002F\u002F     10             1                     11\n",[36,84595,84596],{"class":38,"line":754},[36,84597,84554],{"class":42},[36,84599,84600],{"class":38,"line":760},[36,84601,84602],{"class":42},"    \u002F\u002F     11             5                    16\n",[36,84604,84605],{"class":38,"line":766},[36,84606,84554],{"class":42},[36,84608,84609],{"class":38,"line":772},[36,84610,84611],{"class":42},"    \u002F\u002F     16             8                    24\n",[36,84613,84614],{"class":38,"line":778},[36,84615,84616],{"class":42},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[36,84618,84619],{"class":38,"line":783},[36,84620,84454],{"class":42},[36,84622,84623],{"class":38,"line":789},[36,84624,84459],{"class":42},[36,84626,84627],{"class":38,"line":795},[36,84628,84464],{"class":42},[36,84630,84631,84633,84635],{"class":38,"line":801},[36,84632,55974],{"class":42},[36,84634,55370],{"class":54857},[36,84636,54864],{"class":42},[36,84638,84639,84641,84643],{"class":38,"line":807},[36,84640,55342],{"class":42},[36,84642,55357],{"class":54857},[36,84644,54864],{"class":42},[26531,84646,84648],{"id":84647},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,84650,84651],{},[5198,84652],{"alt":31,"src":84653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[26,84655,84657],{"className":56624,"code":84656,"language":56626,"meta":31,"style":31},"\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",[33,84658,84659,84667,84675,84680,84685,84690,84695,84699,84704,84709,84714,84719,84724,84729,84733,84738,84742,84747,84755],{"__ignoreMap":31},[36,84660,84661,84663,84665],{"class":38,"line":39},[36,84662,393],{"class":42},[36,84664,55357],{"class":54857},[36,84666,54864],{"class":42},[36,84668,84669,84671,84673],{"class":38,"line":53},[36,84670,55701],{"class":42},[36,84672,55370],{"class":54857},[36,84674,54864],{"class":42},[36,84676,84677],{"class":38,"line":196},[36,84678,84679],{"class":42},"    const arr = [\n",[36,84681,84682],{"class":38,"line":642},[36,84683,84684],{"class":42},"      { name: '张三', salary: 10000 },\n",[36,84686,84687],{"class":38,"line":655},[36,84688,84689],{"class":42},"      { name: '李四', salary: 10000 },\n",[36,84691,84692],{"class":38,"line":662},[36,84693,84694],{"class":42},"      { name: '王五', salary: 10000 }\n",[36,84696,84697],{"class":38,"line":667},[36,84698,56666],{"class":42},[36,84700,84701],{"class":38,"line":679},[36,84702,84703],{"class":42},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[36,84705,84706],{"class":38,"line":685},[36,84707,84708],{"class":42},"    \u002F\u002F prev是累计值\n",[36,84710,84711],{"class":38,"line":691},[36,84712,84713],{"class":42},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[36,84715,84716],{"class":38,"line":696},[36,84717,84718],{"class":42},"    console.log(total)\n",[36,84720,84721],{"class":38,"line":702},[36,84722,84723],{"class":42},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[36,84725,84726],{"class":38,"line":708},[36,84727,84728],{"class":42},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[36,84730,84731],{"class":38,"line":713},[36,84732,84723],{"class":42},[36,84734,84735],{"class":38,"line":719},[36,84736,84737],{"class":42},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[36,84739,84740],{"class":38,"line":725},[36,84741,84723],{"class":42},[36,84743,84744],{"class":38,"line":731},[36,84745,84746],{"class":42},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[36,84748,84749,84751,84753],{"class":38,"line":736},[36,84750,55974],{"class":42},[36,84752,55370],{"class":54857},[36,84754,54864],{"class":42},[36,84756,84757,84759,84761],{"class":38,"line":742},[36,84758,55342],{"class":42},[36,84760,55357],{"class":54857},[36,84762,54864],{"class":42},[26531,84764,84766],{"id":84765},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,84768,84769],{},[5198,84770],{"alt":31,"src":84771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,84773,84774],{},[5198,84775],{"alt":31,"src":84776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[211,84778,84779],{},[214,84780,84781],{},"find()",[19,84783,84784],{},"循环查找，找到第一个就ok",[19,84786,84787],{},[4113,84788,84791],{"href":84789,"rel":84790},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[27481],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[26,84793,84795],{"className":54190,"code":84794,"language":54192,"meta":31,"style":31},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[33,84796,84797,84802,84807],{"__ignoreMap":31},[36,84798,84799],{"class":38,"line":39},[36,84800,84801],{"class":42},"const array1 = [5, 12, 8, 130, 44]\n",[36,84803,84804],{"class":38,"line":53},[36,84805,84806],{"class":42},"const found = array1.find((element) => element > 10)\n",[36,84808,84809],{"class":38,"line":196},[36,84810,84811],{"class":42},"console.log(found)  \u002F\u002F12\n",[19,84813,84814,84816,84817,84822,84823,84826,84827,84829,84830,84835,84836,84838,84839,84841,84842,84844,84845],{},[33,84815,84781],{}," 方法是一个",[4113,84818,84821],{"href":84819,"rel":84820},"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",[27481],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[33,84824,84825],{},"callbackFn"," 函数，直到 ",[33,84828,84825],{}," 返回一个",[4113,84831,84834],{"href":84832,"rel":84833},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[27481],"真值","。然后 ",[33,84837,84781],{}," 返回该元素并停止迭代数组。如果 ",[33,84840,84825],{}," 从未返回真值，则 ",[33,84843,84781],{}," 返回 ",[33,84846,84847],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[26,84849,84851],{"className":56624,"code":84850,"language":56626,"meta":31,"style":31},"\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",[33,84852,84853,84861,84869,84874,84879,84884,84888,84893,84898,84902,84907,84912,84916,84920,84925,84930,84934,84938,84943,84948,84953,84958,84963,84967,84972,84977,84982,84987,84991,84996,85004],{"__ignoreMap":31},[36,84854,84855,84857,84859],{"class":38,"line":39},[36,84856,393],{"class":42},[36,84858,55357],{"class":54857},[36,84860,54864],{"class":42},[36,84862,84863,84865,84867],{"class":38,"line":53},[36,84864,55701],{"class":42},[36,84866,55370],{"class":54857},[36,84868,54864],{"class":42},[36,84870,84871],{"class":38,"line":196},[36,84872,84873],{"class":42},"    const arr = ['red', 'blue', 'green']\n",[36,84875,84876],{"class":38,"line":642},[36,84877,84878],{"class":42},"    const found = arr.find(item => item === 'pink')\n",[36,84880,84881],{"class":38,"line":655},[36,84882,84883],{"class":42},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[36,84885,84886],{"class":38,"line":662},[36,84887,659],{"emptyLinePlaceholder":658},[36,84889,84890],{"class":38,"line":667},[36,84891,84892],{"class":42},"    \u002F\u002F 使用场景，用于查找数据\n",[36,84894,84895],{"class":38,"line":679},[36,84896,84897],{"class":42},"    const arr1 = [\n",[36,84899,84900],{"class":38,"line":685},[36,84901,82940],{"class":42},[36,84903,84904],{"class":38,"line":691},[36,84905,84906],{"class":42},"        name: '小米',\n",[36,84908,84909],{"class":38,"line":696},[36,84910,84911],{"class":42},"        price: 1999\n",[36,84913,84914],{"class":38,"line":702},[36,84915,81446],{"class":42},[36,84917,84918],{"class":38,"line":708},[36,84919,82940],{"class":42},[36,84921,84922],{"class":38,"line":713},[36,84923,84924],{"class":42},"        name: '华为',\n",[36,84926,84927],{"class":38,"line":719},[36,84928,84929],{"class":42},"        price: 3999\n",[36,84931,84932],{"class":38,"line":725},[36,84933,55955],{"class":42},[36,84935,84936],{"class":38,"line":731},[36,84937,56666],{"class":42},[36,84939,84940],{"class":38,"line":736},[36,84941,84942],{"class":42},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[36,84944,84945],{"class":38,"line":742},[36,84946,84947],{"class":42},"    \u002F\u002F const found1 = arr1.find(item => {\n",[36,84949,84950],{"class":38,"line":748},[36,84951,84952],{"class":42},"    \u002F\u002F   if (item.name === '小米') {\n",[36,84954,84955],{"class":38,"line":754},[36,84956,84957],{"class":42},"    \u002F\u002F     return item\n",[36,84959,84960],{"class":38,"line":760},[36,84961,84962],{"class":42},"    \u002F\u002F   }\n",[36,84964,84965],{"class":38,"line":766},[36,84966,66845],{"class":42},[36,84968,84969],{"class":38,"line":772},[36,84970,84971],{"class":42},"    \u002F\u002F 另一种写法\n",[36,84973,84974],{"class":38,"line":778},[36,84975,84976],{"class":42},"    const found1 = arr1.find(item => {\n",[36,84978,84979],{"class":38,"line":783},[36,84980,84981],{"class":42},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[36,84983,84984],{"class":38,"line":789},[36,84985,84986],{"class":42},"      return item.name = '小米'\n",[36,84988,84989],{"class":38,"line":795},[36,84990,37021],{"class":42},[36,84992,84993],{"class":38,"line":801},[36,84994,84995],{"class":42},"    console.log(found1)\n",[36,84997,84998,85000,85002],{"class":38,"line":807},[36,84999,55974],{"class":42},[36,85001,55370],{"class":54857},[36,85003,54864],{"class":42},[36,85005,85006,85008,85010],{"class":38,"line":813},[36,85007,55342],{"class":42},[36,85009,55357],{"class":54857},[36,85011,54864],{"class":42},[19,85013,85014],{},[5198,85015],{"alt":31,"src":85016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,85018,85019],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[211,85021,85022],{"start":53},[214,85023,85024],{},"every()返回的是布尔值",[19,85026,85027],{},[4113,85028,85031],{"href":85029,"rel":85030},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[27481],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,85033,85034],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,85036,85037],{},"some是只有有一个就没问题",[19,85039,85040],{},"every是必须全是才行",[26,85042,85046],{"className":85043,"code":85044,"language":85045,"meta":31,"style":31},"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",[33,85047,85048,85064,85078,85082,85091],{"__ignoreMap":31},[36,85049,85050,85052,85055,85057,85059,85062],{"class":38,"line":39},[36,85051,58005],{"class":46},[36,85053,85054],{"class":42}," isBigEnough(element, ",[36,85056,77612],{"class":46},[36,85058,478],{"class":42},[36,85060,85061],{"class":46},"array",[36,85063,16102],{"class":42},[36,85065,85066,85069,85072,85074,85076],{"class":38,"line":53},[36,85067,85068],{"class":46},"  return",[36,85070,85071],{"class":42}," element ",[36,85073,412],{"class":46},[36,85075,5750],{"class":112},[36,85077,5029],{"class":42},[36,85079,85080],{"class":38,"line":196},[36,85081,5300],{"class":42},[36,85083,85084,85087,85089],{"class":38,"line":642},[36,85085,85086],{"class":42},"[12, 5, 8, 130, 44].every(isBigEnough); ",[36,85088,36889],{"class":46},[36,85090,58072],{"class":42},[36,85092,85093,85096,85098],{"class":38,"line":655},[36,85094,85095],{"class":42},"[12, 54, 18, 130, 44].every(isBigEnough); ",[36,85097,36889],{"class":46},[36,85099,61495],{"class":42},[26,85101,85103],{"className":56624,"code":85102,"language":56626,"meta":31,"style":31},"\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",[33,85104,85105,85113,85121,85126,85130,85135,85140,85148],{"__ignoreMap":31},[36,85106,85107,85109,85111],{"class":38,"line":39},[36,85108,393],{"class":42},[36,85110,55357],{"class":54857},[36,85112,54864],{"class":42},[36,85114,85115,85117,85119],{"class":38,"line":53},[36,85116,55701],{"class":42},[36,85118,55370],{"class":54857},[36,85120,54864],{"class":42},[36,85122,85123],{"class":38,"line":196},[36,85124,85125],{"class":42},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[36,85127,85128],{"class":38,"line":642},[36,85129,81876],{"class":42},[36,85131,85132],{"class":38,"line":655},[36,85133,85134],{"class":42},"    const flag = arr.every(item => item >= 10)\n",[36,85136,85137],{"class":38,"line":662},[36,85138,85139],{"class":42},"    console.log(flag)    \u002F\u002Ftrue\n",[36,85141,85142,85144,85146],{"class":38,"line":667},[36,85143,55974],{"class":42},[36,85145,55370],{"class":54857},[36,85147,54864],{"class":42},[36,85149,85150,85152,85154],{"class":38,"line":679},[36,85151,55342],{"class":42},[36,85153,55357],{"class":54857},[36,85155,54864],{"class":42},[26,85157,85159],{"className":56624,"code":85158,"language":56626,"meta":31,"style":31},"\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",[33,85160,85161,85169,85177,85181,85186,85191,85196,85204],{"__ignoreMap":31},[36,85162,85163,85165,85167],{"class":38,"line":39},[36,85164,393],{"class":42},[36,85166,55357],{"class":54857},[36,85168,54864],{"class":42},[36,85170,85171,85173,85175],{"class":38,"line":53},[36,85172,55701],{"class":42},[36,85174,55370],{"class":54857},[36,85176,54864],{"class":42},[36,85178,85179],{"class":38,"line":196},[36,85180,85125],{"class":42},[36,85182,85183],{"class":38,"line":642},[36,85184,85185],{"class":42},"    const arr = [10, 0, 5]\n",[36,85187,85188],{"class":38,"line":655},[36,85189,85190],{"class":42},"    const flag = arr.some(item => item >= 10)\n",[36,85192,85193],{"class":38,"line":662},[36,85194,85195],{"class":42},"    console.log(flag)   \u002F\u002Ftrue\n",[36,85197,85198,85200,85202],{"class":38,"line":667},[36,85199,55974],{"class":42},[36,85201,55370],{"class":54857},[36,85203,54864],{"class":42},[36,85205,85206,85208,85210],{"class":38,"line":679},[36,85207,55342],{"class":42},[36,85209,55357],{"class":54857},[36,85211,54864],{"class":42},[26531,85213,85215],{"id":85214},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,85217,85218],{},[5198,85219],{"alt":31,"src":85220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[26,85222,85224],{"className":54190,"code":85223,"language":54192,"meta":31,"style":31},"\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",[33,85225,85226,85236,85250,85254,85262,85276,85296,85308,85316,85323,85335,85347,85359,85371,85381,85391,85395,85403,85411,85415,85423,85435,85443,85465,85470,85475,85508,85516,85524,85528],{"__ignoreMap":31},[36,85227,85228,85230,85232,85234],{"class":38,"line":39},[36,85229,54854],{"class":42},[36,85231,54858],{"class":54857},[36,85233,54861],{"class":101},[36,85235,54864],{"class":42},[36,85237,85238,85240,85242,85244,85246,85248],{"class":38,"line":53},[36,85239,393],{"class":42},[36,85241,54192],{"class":54857},[36,85243,54873],{"class":101},[36,85245,47],{"class":42},[36,85247,54878],{"class":105},[36,85249,54864],{"class":42},[36,85251,85252],{"class":38,"line":196},[36,85253,659],{"emptyLinePlaceholder":658},[36,85255,85256,85258,85260],{"class":38,"line":642},[36,85257,393],{"class":42},[36,85259,54891],{"class":54857},[36,85261,54864],{"class":42},[36,85263,85264,85266,85268,85270,85272,85274],{"class":38,"line":655},[36,85265,55701],{"class":42},[36,85267,54901],{"class":54857},[36,85269,54904],{"class":101},[36,85271,47],{"class":42},[36,85273,54909],{"class":105},[36,85275,54864],{"class":42},[36,85277,85278,85280,85282,85284,85286,85288,85290,85292,85294],{"class":38,"line":662},[36,85279,55701],{"class":42},[36,85281,54901],{"class":54857},[36,85283,18576],{"class":101},[36,85285,47],{"class":42},[36,85287,54948],{"class":105},[36,85289,54928],{"class":101},[36,85291,47],{"class":42},[36,85293,54955],{"class":105},[36,85295,54864],{"class":42},[36,85297,85298,85300,85302,85304,85306],{"class":38,"line":667},[36,85299,55701],{"class":42},[36,85301,54964],{"class":54857},[36,85303,54967],{"class":42},[36,85305,54964],{"class":54857},[36,85307,54864],{"class":42},[36,85309,85310,85312,85314],{"class":38,"line":679},[36,85311,55701],{"class":42},[36,85313,3785],{"class":54857},[36,85315,54864],{"class":42},[36,85317,85318,85321],{"class":38,"line":685},[36,85319,85320],{"class":54857},"    div",[36,85322,19228],{"class":42},[36,85324,85325,85327,85329,85331,85333],{"class":38,"line":691},[36,85326,58327],{"class":112},[36,85328,54994],{"class":42},[36,85330,5445],{"class":112},[36,85332,55049],{"class":46},[36,85334,5029],{"class":42},[36,85336,85337,85339,85341,85343,85345],{"class":38,"line":696},[36,85338,58341],{"class":112},[36,85340,54994],{"class":42},[36,85342,4276],{"class":112},[36,85344,55049],{"class":46},[36,85346,5029],{"class":42},[36,85348,85349,85351,85353,85355,85357],{"class":38,"line":702},[36,85350,60914],{"class":112},[36,85352,54994],{"class":42},[36,85354,4276],{"class":112},[36,85356,55049],{"class":46},[36,85358,5029],{"class":42},[36,85360,85361,85363,85365,85367,85369],{"class":38,"line":708},[36,85362,68688],{"class":112},[36,85364,54994],{"class":42},[36,85366,4371],{"class":112},[36,85368,55049],{"class":46},[36,85370,5029],{"class":42},[36,85372,85373,85375,85377,85379],{"class":38,"line":713},[36,85374,60841],{"class":112},[36,85376,54994],{"class":42},[36,85378,55149],{"class":112},[36,85380,5029],{"class":42},[36,85382,85383,85385,85387,85389],{"class":38,"line":719},[36,85384,58440],{"class":112},[36,85386,54994],{"class":42},[36,85388,55202],{"class":112},[36,85390,5029],{"class":42},[36,85392,85393],{"class":38,"line":725},[36,85394,5899],{"class":42},[36,85396,85397,85399,85401],{"class":38,"line":731},[36,85398,55974],{"class":42},[36,85400,3785],{"class":54857},[36,85402,54864],{"class":42},[36,85404,85405,85407,85409],{"class":38,"line":736},[36,85406,55342],{"class":42},[36,85408,54891],{"class":54857},[36,85410,54864],{"class":42},[36,85412,85413],{"class":38,"line":742},[36,85414,659],{"emptyLinePlaceholder":658},[36,85416,85417,85419,85421],{"class":38,"line":748},[36,85418,393],{"class":42},[36,85420,55357],{"class":54857},[36,85422,54864],{"class":42},[36,85424,85425,85427,85429,85431,85433],{"class":38,"line":754},[36,85426,55701],{"class":42},[36,85428,55168],{"class":54857},[36,85430,58870],{"class":42},[36,85432,55168],{"class":54857},[36,85434,54864],{"class":42},[36,85436,85437,85439,85441],{"class":38,"line":760},[36,85438,55701],{"class":42},[36,85440,55370],{"class":54857},[36,85442,54864],{"class":42},[36,85444,85445,85447,85450,85452,85455,85458,85460,85463],{"class":38,"line":766},[36,85446,14882],{"class":46},[36,85448,85449],{"class":112}," spec",[36,85451,673],{"class":46},[36,85453,85454],{"class":42}," { size: ",[36,85456,85457],{"class":105},"'40cm*40cm'",[36,85459,59020],{"class":42},[36,85461,85462],{"class":105},"'黑色'",[36,85464,59160],{"class":42},[36,85466,85467],{"class":38,"line":772},[36,85468,85469],{"class":3943},"    \u002F\u002F const arr = Object.values(spec)\n",[36,85471,85472],{"class":38,"line":778},[36,85473,85474],{"class":3943},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[36,85476,85477,85479,85481,85483,85486,85488,85490,85493,85496,85499,85501,85503,85506],{"class":38,"line":783},[36,85478,55964],{"class":42},[36,85480,57956],{"class":101},[36,85482,495],{"class":42},[36,85484,85485],{"class":105},"'div'",[36,85487,77803],{"class":42},[36,85489,47],{"class":46},[36,85491,85492],{"class":42}," Object.",[36,85494,85495],{"class":101},"values",[36,85497,85498],{"class":42},"(spec).",[36,85500,77777],{"class":101},[36,85502,495],{"class":42},[36,85504,85505],{"class":105},"'\u002F'",[36,85507,922],{"class":42},[36,85509,85510,85512,85514],{"class":38,"line":789},[36,85511,55974],{"class":42},[36,85513,55370],{"class":54857},[36,85515,54864],{"class":42},[36,85517,85518,85520,85522],{"class":38,"line":795},[36,85519,55342],{"class":42},[36,85521,55357],{"class":54857},[36,85523,54864],{"class":42},[36,85525,85526],{"class":38,"line":801},[36,85527,659],{"emptyLinePlaceholder":658},[36,85529,85530,85532,85534],{"class":38,"line":807},[36,85531,55342],{"class":42},[36,85533,54192],{"class":54857},[36,85535,54864],{"class":42},[19,85537,85538],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[26531,85540,85542],{"id":85541},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,85544,85545],{},"静态方法，将伪数组转换为真数组",[19,85547,85548],{},[5198,85549],{"alt":31,"src":85550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[26,85552,85554],{"className":56624,"code":85553,"language":56626,"meta":31,"style":31},"\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",[33,85555,85556,85564,85572,85584,85596,85608,85616,85624,85629,85634,85639,85644,85652],{"__ignoreMap":31},[36,85557,85558,85560,85562],{"class":38,"line":39},[36,85559,393],{"class":42},[36,85561,55357],{"class":54857},[36,85563,54864],{"class":42},[36,85565,85566,85568,85570],{"class":38,"line":53},[36,85567,55701],{"class":42},[36,85569,4875],{"class":54857},[36,85571,54864],{"class":42},[36,85573,85574,85576,85578,85580,85582],{"class":38,"line":196},[36,85575,54898],{"class":42},[36,85577,214],{"class":54857},[36,85579,58870],{"class":42},[36,85581,214],{"class":54857},[36,85583,54864],{"class":42},[36,85585,85586,85588,85590,85592,85594],{"class":38,"line":642},[36,85587,54898],{"class":42},[36,85589,214],{"class":54857},[36,85591,58870],{"class":42},[36,85593,214],{"class":54857},[36,85595,54864],{"class":42},[36,85597,85598,85600,85602,85604,85606],{"class":38,"line":655},[36,85599,54898],{"class":42},[36,85601,214],{"class":54857},[36,85603,58870],{"class":42},[36,85605,214],{"class":54857},[36,85607,54864],{"class":42},[36,85609,85610,85612,85614],{"class":38,"line":662},[36,85611,55974],{"class":42},[36,85613,4875],{"class":54857},[36,85615,54864],{"class":42},[36,85617,85618,85620,85622],{"class":38,"line":667},[36,85619,55701],{"class":42},[36,85621,55370],{"class":54857},[36,85623,54864],{"class":42},[36,85625,85626],{"class":38,"line":679},[36,85627,85628],{"class":42},"    const lis = document.querySelectorAll('li')\n",[36,85630,85631],{"class":38,"line":685},[36,85632,85633],{"class":42},"    const liss = Array.from(lis)\n",[36,85635,85636],{"class":38,"line":691},[36,85637,85638],{"class":42},"    liss.pop()\n",[36,85640,85641],{"class":38,"line":696},[36,85642,85643],{"class":42},"    console.log(liss)\n",[36,85645,85646,85648,85650],{"class":38,"line":702},[36,85647,55974],{"class":42},[36,85649,55370],{"class":54857},[36,85651,54864],{"class":42},[36,85653,85654,85656,85658],{"class":38,"line":708},[36,85655,55342],{"class":42},[36,85657,55357],{"class":54857},[36,85659,54864],{"class":42},[19,85661,85662],{},[5198,85663],{"alt":31,"src":85664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[25619,85666,85668],{"id":85667},"_41053-string","4.10.5.3 String",[19,85670,85671],{},[5198,85672],{"alt":31,"src":85673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[26531,85675,85677],{"id":85676},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[26,85679,85681],{"className":56624,"code":85680,"language":56626,"meta":31,"style":31},"\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",[33,85682,85683,85691,85699,85704,85709,85714,85718,85723,85728,85733,85741],{"__ignoreMap":31},[36,85684,85685,85687,85689],{"class":38,"line":39},[36,85686,393],{"class":42},[36,85688,55357],{"class":54857},[36,85690,54864],{"class":42},[36,85692,85693,85695,85697],{"class":38,"line":53},[36,85694,55701],{"class":42},[36,85696,55370],{"class":54857},[36,85698,54864],{"class":42},[36,85700,85701],{"class":38,"line":196},[36,85702,85703],{"class":42},"    \u002F\u002F 把字符串转化为数组\n",[36,85705,85706],{"class":38,"line":642},[36,85707,85708],{"class":42},"    const str = 'pink,red'\n",[36,85710,85711],{"class":38,"line":655},[36,85712,85713],{"class":42},"    const arr = str.split(',')\n",[36,85715,85716],{"class":38,"line":662},[36,85717,84192],{"class":42},[36,85719,85720],{"class":38,"line":667},[36,85721,85722],{"class":42},"    const str1 = '2025-8-25'\n",[36,85724,85725],{"class":38,"line":679},[36,85726,85727],{"class":42},"    const arr1 = str1.split('-')\n",[36,85729,85730],{"class":38,"line":685},[36,85731,85732],{"class":42},"    console.log(arr1)\n",[36,85734,85735,85737,85739],{"class":38,"line":691},[36,85736,55974],{"class":42},[36,85738,55370],{"class":54857},[36,85740,54864],{"class":42},[36,85742,85743,85745,85747],{"class":38,"line":696},[36,85744,55342],{"class":42},[36,85746,55357],{"class":54857},[36,85748,54864],{"class":42},[26531,85750,85752],{"id":85751},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,85754,8877],{},[19,85756,85757],{},"substring(indexStart)",[19,85759,85760],{},"substring(indexStart, indexEnd)",[4875,85762,85763,85774,85786,85796],{},[214,85764,85765,85766,85769,85770,85773],{},"如果省略了 ",[33,85767,85768],{},"indexEnd","，则 ",[33,85771,85772],{},"substring()"," 提取字符直到字符串的末尾",[214,85775,85776,85777,85780,85781,85769,85783,85785],{},"如果 ",[33,85778,85779],{},"indexStart"," 等于 ",[33,85782,85768],{},[33,85784,85772],{}," 返回一个空字符串",[214,85787,85776,85788,85790,85791,85769,85793,85795],{},[33,85789,85779],{}," 大于 ",[33,85792,85768],{},[33,85794,85772],{}," 的效果就像交换了这两个参数一样",[214,85797,85798],{},"结束的索引号不包含想要截取的部分",[26,85800,85802],{"className":85043,"code":85801,"language":85045,"meta":31,"style":31},"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",[33,85803,85804,85816,85820,85854,85884,85888,85919,85923,85950,85980,86010,86014,86045],{"__ignoreMap":31},[36,85805,85806,85809,85811,85814],{"class":38,"line":39},[36,85807,85808],{"class":42},"const anyString ",[36,85810,47],{"class":46},[36,85812,85813],{"class":105}," \"Mozilla\"",[36,85815,5029],{"class":42},[36,85817,85818],{"class":38,"line":53},[36,85819,659],{"emptyLinePlaceholder":658},[36,85821,85822,85825,85827,85829,85831,85834,85836,85839,85841,85843,85845,85847,85849,85851],{"class":38,"line":196},[36,85823,85824],{"class":112},"console",[36,85826,842],{"class":42},[36,85828,61802],{"class":112},[36,85830,495],{"class":42},[36,85832,85833],{"class":112},"anyString",[36,85835,842],{"class":42},[36,85837,85838],{"class":112},"substring",[36,85840,495],{"class":42},[36,85842,1859],{"class":112},[36,85844,478],{"class":42},[36,85846,4092],{"class":112},[36,85848,78807],{"class":42},[36,85850,36889],{"class":46},[36,85852,85853],{"class":105}," 'M'\n",[36,85855,85856,85858,85860,85862,85864,85866,85868,85870,85872,85874,85876,85878,85880,85882],{"class":38,"line":642},[36,85857,85824],{"class":112},[36,85859,842],{"class":42},[36,85861,61802],{"class":112},[36,85863,495],{"class":42},[36,85865,85833],{"class":112},[36,85867,842],{"class":42},[36,85869,85838],{"class":112},[36,85871,495],{"class":42},[36,85873,4092],{"class":112},[36,85875,478],{"class":42},[36,85877,1859],{"class":112},[36,85879,78807],{"class":42},[36,85881,36889],{"class":46},[36,85883,85853],{"class":105},[36,85885,85886],{"class":38,"line":655},[36,85887,659],{"emptyLinePlaceholder":658},[36,85889,85890,85892,85894,85896,85898,85900,85902,85904,85906,85908,85910,85912,85914,85916],{"class":38,"line":662},[36,85891,85824],{"class":112},[36,85893,842],{"class":42},[36,85895,61802],{"class":112},[36,85897,495],{"class":42},[36,85899,85833],{"class":112},[36,85901,842],{"class":42},[36,85903,85838],{"class":112},[36,85905,495],{"class":42},[36,85907,1859],{"class":112},[36,85909,478],{"class":42},[36,85911,4219],{"class":112},[36,85913,78807],{"class":42},[36,85915,36889],{"class":46},[36,85917,85918],{"class":105}," 'Mozill'\n",[36,85920,85921],{"class":38,"line":667},[36,85922,659],{"emptyLinePlaceholder":658},[36,85924,85925,85927,85929,85931,85933,85935,85937,85939,85941,85943,85945,85947],{"class":38,"line":679},[36,85926,85824],{"class":112},[36,85928,842],{"class":42},[36,85930,61802],{"class":112},[36,85932,495],{"class":42},[36,85934,85833],{"class":112},[36,85936,842],{"class":42},[36,85938,85838],{"class":112},[36,85940,495],{"class":42},[36,85942,4168],{"class":112},[36,85944,78807],{"class":42},[36,85946,36889],{"class":46},[36,85948,85949],{"class":105}," 'lla'\n",[36,85951,85952,85954,85956,85958,85960,85962,85964,85966,85968,85970,85972,85974,85976,85978],{"class":38,"line":685},[36,85953,85824],{"class":112},[36,85955,842],{"class":42},[36,85957,61802],{"class":112},[36,85959,495],{"class":42},[36,85961,85833],{"class":112},[36,85963,842],{"class":42},[36,85965,85838],{"class":112},[36,85967,495],{"class":42},[36,85969,4168],{"class":112},[36,85971,478],{"class":42},[36,85973,4244],{"class":112},[36,85975,78863],{"class":42},[36,85977,36889],{"class":46},[36,85979,85949],{"class":105},[36,85981,85982,85984,85986,85988,85990,85992,85994,85996,85998,86000,86002,86004,86006,86008],{"class":38,"line":691},[36,85983,85824],{"class":112},[36,85985,842],{"class":42},[36,85987,61802],{"class":112},[36,85989,495],{"class":42},[36,85991,85833],{"class":112},[36,85993,842],{"class":42},[36,85995,85838],{"class":112},[36,85997,495],{"class":42},[36,85999,4244],{"class":112},[36,86001,478],{"class":42},[36,86003,4168],{"class":112},[36,86005,78807],{"class":42},[36,86007,36889],{"class":46},[36,86009,85949],{"class":105},[36,86011,86012],{"class":38,"line":696},[36,86013,659],{"emptyLinePlaceholder":658},[36,86015,86016,86018,86020,86022,86024,86026,86028,86030,86032,86034,86036,86038,86040,86042],{"class":38,"line":702},[36,86017,85824],{"class":112},[36,86019,842],{"class":42},[36,86021,61802],{"class":112},[36,86023,495],{"class":42},[36,86025,85833],{"class":112},[36,86027,842],{"class":42},[36,86029,85838],{"class":112},[36,86031,495],{"class":42},[36,86033,1859],{"class":112},[36,86035,478],{"class":42},[36,86037,4244],{"class":112},[36,86039,78807],{"class":42},[36,86041,36889],{"class":46},[36,86043,86044],{"class":105}," 'Mozilla'\n",[36,86046,86047,86049,86051,86053,86055,86057,86059,86061,86063,86065,86067,86069,86071,86073],{"class":38,"line":708},[36,86048,85824],{"class":112},[36,86050,842],{"class":42},[36,86052,61802],{"class":112},[36,86054,495],{"class":42},[36,86056,85833],{"class":112},[36,86058,842],{"class":42},[36,86060,85838],{"class":112},[36,86062,495],{"class":42},[36,86064,1859],{"class":112},[36,86066,478],{"class":42},[36,86068,554],{"class":112},[36,86070,78807],{"class":42},[36,86072,36889],{"class":46},[36,86074,86044],{"class":105},[26531,86076,86078],{"id":86077},"_410533-startswith","4.10.5.3.3 startsWith",[19,86080,86081,86084,86085,86090,86091,86093,86094],{},[33,86082,86083],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[4027,86086,86087],{},[33,86088,86089],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[33,86092,5098],{}," 或 ",[33,86095,69575],{},[26,86097,86099],{"className":81049,"code":86098,"language":81051,"meta":31,"style":31},"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",[33,86100,86101,86113,86132,86137,86157],{"__ignoreMap":31},[36,86102,86103,86105,86108,86110],{"class":38,"line":39},[36,86104,10483],{"class":46},[36,86106,86107],{"class":42}," str1 ",[36,86109,47],{"class":46},[36,86111,86112],{"class":105}," \"Saturday night plans\"\n",[36,86114,86115,86117,86119,86122,86125,86127,86130],{"class":38,"line":53},[36,86116,81086],{"class":42},[36,86118,61802],{"class":101},[36,86120,86121],{"class":42},"(str1.",[36,86123,86124],{"class":101},"startsWith",[36,86126,495],{"class":42},[36,86128,86129],{"class":105},"\"Sat\"",[36,86131,2005],{"class":42},[36,86133,86134],{"class":38,"line":196},[36,86135,86136],{"class":3943},"\u002F\u002F Expected output: true\n",[36,86138,86139,86141,86143,86145,86147,86149,86151,86153,86155],{"class":38,"line":642},[36,86140,81086],{"class":42},[36,86142,61802],{"class":101},[36,86144,86121],{"class":42},[36,86146,86124],{"class":101},[36,86148,495],{"class":42},[36,86150,86129],{"class":105},[36,86152,478],{"class":42},[36,86154,1982],{"class":112},[36,86156,2005],{"class":42},[36,86158,86159],{"class":38,"line":655},[36,86160,86161],{"class":3943},"\u002F\u002F Expected output: false\n",[26,86163,86165],{"className":54190,"code":86164,"language":54192,"meta":31,"style":31},"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",[33,86166,86167,86172,86177,86181,86186,86191],{"__ignoreMap":31},[36,86168,86169],{"class":38,"line":39},[36,86170,86171],{"class":42},"startsWith(searchString)\n",[36,86173,86174],{"class":38,"line":53},[36,86175,86176],{"class":42},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[36,86178,86179],{"class":38,"line":196},[36,86180,659],{"emptyLinePlaceholder":658},[36,86182,86183],{"class":38,"line":642},[36,86184,86185],{"class":42},"const str3 = 'pink老师上课中'\n",[36,86187,86188],{"class":38,"line":655},[36,86189,86190],{"class":42},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[36,86192,86193],{"class":38,"line":662},[36,86194,86195],{"class":42},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[26531,86197,86199],{"id":86198},"_410534-includes","4.10.5.3.4 includes",[19,86201,86202],{},"includes(searchString) includes(searchString, position)",[211,86204,86205],{},[214,86206,86207],{},"searchString:",[19,86209,86210,86211,86213,86214,86219,86220,86225,86226,25121,86229,86232,86233,86236],{},"一个要在 ",[33,86212,5038],{}," 中查找的字符串。",[4113,86215,86218],{"href":86216,"rel":86217},"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",[27481],"不能是正则表达式","。所有非正则表达式的值都会被",[4113,86221,86224],{"href":86222,"rel":86223},"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",[27481],"强制转换为字符串","，因此如果该参数被省略或传入 ",[33,86227,86228],{},"undefined",[33,86230,86231],{},"includes()"," 方法会在字符串中搜索 ",[33,86234,86235],{},"\"undefined\"","，这通常不是你想要的",[211,86238,86239],{"start":53},[214,86240,86241,4729],{},[33,86242,86243],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,86245,86246,86247,86250,86251],{},"在字符串中开始搜索 ",[33,86248,86249],{},"searchString"," 的位置。默认值为 ",[33,86252,1859],{},[211,86254,86255],{"start":196},[214,86256,86257],{},"返回值：",[19,86259,86260,86261,86263,86264,86268,86269],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[33,86262,86249],{}," 为空字符串的情况），则返回 ",[4027,86265,86266],{},[33,86267,5098],{}," ，否则返回 ",[4027,86270,86271],{},[33,86272,69575],{},[211,86274,86275],{"start":642},[214,86276,86277],{},"异常：",[19,86279,85776,86280,17454,86282,86286],{},[33,86281,86249],{},[4113,86283,86285],{"href":86216,"rel":86284},[27481],"是一个正则表达式","，则会抛出",[19,86288,86289],{},"只要是有就是true，不需要非得以谁开头结尾",[26,86291,86293],{"className":81049,"code":86292,"language":81051,"meta":31,"style":31},"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",[33,86294,86295,86306,86329,86348,86368,86390,86409],{"__ignoreMap":31},[36,86296,86297,86299,86301,86303],{"class":38,"line":39},[36,86298,10483],{"class":46},[36,86300,83329],{"class":42},[36,86302,47],{"class":46},[36,86304,86305],{"class":105}," \"To be, or not to be, that is the question.\"\n",[36,86307,86308,86310,86312,86315,86318,86320,86323,86326],{"class":38,"line":53},[36,86309,81086],{"class":42},[36,86311,61802],{"class":101},[36,86313,86314],{"class":42},"(str.",[36,86316,86317],{"class":101},"includes",[36,86319,495],{"class":42},[36,86321,86322],{"class":105},"\"To be\"",[36,86324,86325],{"class":42},"))",[36,86327,86328],{"class":3943},"  \u002F\u002F true\n",[36,86330,86331,86333,86335,86337,86339,86341,86344,86346],{"class":38,"line":196},[36,86332,81086],{"class":42},[36,86334,61802],{"class":101},[36,86336,86314],{"class":42},[36,86338,86317],{"class":101},[36,86340,495],{"class":42},[36,86342,86343],{"class":105},"\"question\"",[36,86345,86325],{"class":42},[36,86347,86328],{"class":3943},[36,86349,86350,86352,86354,86356,86358,86360,86363,86365],{"class":38,"line":642},[36,86351,81086],{"class":42},[36,86353,61802],{"class":101},[36,86355,86314],{"class":42},[36,86357,86317],{"class":101},[36,86359,495],{"class":42},[36,86361,86362],{"class":105},"\"nonexistent\"",[36,86364,86325],{"class":42},[36,86366,86367],{"class":3943},"  \u002F\u002F false\n",[36,86369,86370,86372,86374,86376,86378,86380,86382,86384,86386,86388],{"class":38,"line":655},[36,86371,81086],{"class":42},[36,86373,61802],{"class":101},[36,86375,86314],{"class":42},[36,86377,86317],{"class":101},[36,86379,495],{"class":42},[36,86381,86322],{"class":105},[36,86383,478],{"class":42},[36,86385,4092],{"class":112},[36,86387,86325],{"class":42},[36,86389,86367],{"class":3943},[36,86391,86392,86394,86396,86398,86400,86402,86405,86407],{"class":38,"line":662},[36,86393,81086],{"class":42},[36,86395,61802],{"class":101},[36,86397,86314],{"class":42},[36,86399,86317],{"class":101},[36,86401,495],{"class":42},[36,86403,86404],{"class":105},"\"TO BE\"",[36,86406,86325],{"class":42},[36,86408,86367],{"class":3943},[36,86410,86411,86413,86415,86417,86419,86421,86423,86425],{"class":38,"line":667},[36,86412,81086],{"class":42},[36,86414,61802],{"class":101},[36,86416,86314],{"class":42},[36,86418,86317],{"class":101},[36,86420,495],{"class":42},[36,86422,11343],{"class":105},[36,86424,86325],{"class":42},[36,86426,86328],{"class":3943},[26531,86428,86430],{"id":86429},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[26,86432,86434],{"className":56624,"code":86433,"language":56626,"meta":31,"style":31},"\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",[33,86435,86436,86444,86452,86457,86462,86467,86472,86477,86485],{"__ignoreMap":31},[36,86437,86438,86440,86442],{"class":38,"line":39},[36,86439,393],{"class":42},[36,86441,55357],{"class":54857},[36,86443,54864],{"class":42},[36,86445,86446,86448,86450],{"class":38,"line":53},[36,86447,55701],{"class":42},[36,86449,55370],{"class":54857},[36,86451,54864],{"class":42},[36,86453,86454],{"class":38,"line":196},[36,86455,86456],{"class":42},"    const num = 10\n",[36,86458,86459],{"class":38,"line":642},[36,86460,86461],{"class":42},"    \u002F\u002F 强制转换\n",[36,86463,86464],{"class":38,"line":655},[36,86465,86466],{"class":42},"    console.log(String(num))\n",[36,86468,86469],{"class":38,"line":662},[36,86470,86471],{"class":42},"    \u002F\u002F toString()方法转换\n",[36,86473,86474],{"class":38,"line":667},[36,86475,86476],{"class":42},"    console.log(num.toString())\n",[36,86478,86479,86481,86483],{"class":38,"line":679},[36,86480,55974],{"class":42},[36,86482,55370],{"class":54857},[36,86484,54864],{"class":42},[36,86486,86487,86489,86491],{"class":38,"line":685},[36,86488,55342],{"class":42},[36,86490,55357],{"class":54857},[36,86492,54864],{"class":42},[26531,86494,86496],{"id":86495},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,86498,86499],{},[5198,86500],{"alt":31,"src":86501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[26,86503,86505],{"className":54190,"code":86504,"language":54192,"meta":31,"style":31},"\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",[33,86506,86507,86517,86531,86535,86543,86557,86577,86589,86597,86601,86609,86621,86629,86641,86646,86651,86656,86703,86719,86727,86735,86739],{"__ignoreMap":31},[36,86508,86509,86511,86513,86515],{"class":38,"line":39},[36,86510,54854],{"class":42},[36,86512,54858],{"class":54857},[36,86514,54861],{"class":101},[36,86516,54864],{"class":42},[36,86518,86519,86521,86523,86525,86527,86529],{"class":38,"line":53},[36,86520,393],{"class":42},[36,86522,54192],{"class":54857},[36,86524,54873],{"class":101},[36,86526,47],{"class":42},[36,86528,54878],{"class":105},[36,86530,54864],{"class":42},[36,86532,86533],{"class":38,"line":196},[36,86534,659],{"emptyLinePlaceholder":658},[36,86536,86537,86539,86541],{"class":38,"line":642},[36,86538,393],{"class":42},[36,86540,54891],{"class":54857},[36,86542,54864],{"class":42},[36,86544,86545,86547,86549,86551,86553,86555],{"class":38,"line":655},[36,86546,55701],{"class":42},[36,86548,54901],{"class":54857},[36,86550,54904],{"class":101},[36,86552,47],{"class":42},[36,86554,54909],{"class":105},[36,86556,54864],{"class":42},[36,86558,86559,86561,86563,86565,86567,86569,86571,86573,86575],{"class":38,"line":662},[36,86560,55701],{"class":42},[36,86562,54901],{"class":54857},[36,86564,18576],{"class":101},[36,86566,47],{"class":42},[36,86568,54948],{"class":105},[36,86570,54928],{"class":101},[36,86572,47],{"class":42},[36,86574,54955],{"class":105},[36,86576,54864],{"class":42},[36,86578,86579,86581,86583,86585,86587],{"class":38,"line":667},[36,86580,55701],{"class":42},[36,86582,54964],{"class":54857},[36,86584,54967],{"class":42},[36,86586,54964],{"class":54857},[36,86588,54864],{"class":42},[36,86590,86591,86593,86595],{"class":38,"line":679},[36,86592,55342],{"class":42},[36,86594,54891],{"class":54857},[36,86596,54864],{"class":42},[36,86598,86599],{"class":38,"line":685},[36,86600,659],{"emptyLinePlaceholder":658},[36,86602,86603,86605,86607],{"class":38,"line":691},[36,86604,393],{"class":42},[36,86606,55357],{"class":54857},[36,86608,54864],{"class":42},[36,86610,86611,86613,86615,86617,86619],{"class":38,"line":696},[36,86612,55701],{"class":42},[36,86614,55168],{"class":54857},[36,86616,58870],{"class":42},[36,86618,55168],{"class":54857},[36,86620,54864],{"class":42},[36,86622,86623,86625,86627],{"class":38,"line":702},[36,86624,55701],{"class":42},[36,86626,55370],{"class":54857},[36,86628,54864],{"class":42},[36,86630,86631,86633,86636,86638],{"class":38,"line":708},[36,86632,14882],{"class":46},[36,86634,86635],{"class":112}," gift",[36,86637,673],{"class":46},[36,86639,86640],{"class":105}," '50g的茶叶，清洗球'\n",[36,86642,86643],{"class":38,"line":713},[36,86644,86645],{"class":3943},"    \u002F\u002F 1.把字符串拆分为数组\n",[36,86647,86648],{"class":38,"line":719},[36,86649,86650],{"class":3943},"    \u002F\u002F console.log(gift.split(','))\n",[36,86652,86653],{"class":38,"line":725},[36,86654,86655],{"class":3943},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[36,86657,86658,86660,86662,86664,86667,86670,86672,86675,86677,86679,86681,86683,86685,86688,86690,86693,86695,86697,86699,86701],{"class":38,"line":731},[36,86659,14882],{"class":46},[36,86661,77473],{"class":112},[36,86663,673],{"class":46},[36,86665,86666],{"class":42}," gift.",[36,86668,86669],{"class":101},"split",[36,86671,495],{"class":42},[36,86673,86674],{"class":105},"'，'",[36,86676,34423],{"class":42},[36,86678,77598],{"class":101},[36,86680,495],{"class":42},[36,86682,83349],{"class":468},[36,86684,83352],{"class":46},[36,86686,86687],{"class":105}," `\u003Cspan>【赠品】${",[36,86689,83349],{"class":42},[36,86691,86692],{"class":105},"}\u003C\u002Fspan>\u003Cbr>`",[36,86694,34423],{"class":42},[36,86696,77777],{"class":101},[36,86698,495],{"class":42},[36,86700,77782],{"class":105},[36,86702,922],{"class":42},[36,86704,86705,86707,86709,86711,86713,86715,86717],{"class":38,"line":736},[36,86706,55964],{"class":42},[36,86708,57956],{"class":101},[36,86710,495],{"class":42},[36,86712,85485],{"class":105},[36,86714,77803],{"class":42},[36,86716,47],{"class":46},[36,86718,77539],{"class":42},[36,86720,86721,86723,86725],{"class":38,"line":742},[36,86722,55974],{"class":42},[36,86724,55370],{"class":54857},[36,86726,54864],{"class":42},[36,86728,86729,86731,86733],{"class":38,"line":748},[36,86730,55342],{"class":42},[36,86732,55357],{"class":54857},[36,86734,54864],{"class":42},[36,86736,86737],{"class":38,"line":754},[36,86738,659],{"emptyLinePlaceholder":658},[36,86740,86741,86743,86745],{"class":38,"line":760},[36,86742,55342],{"class":42},[36,86744,54192],{"class":54857},[36,86746,54864],{"class":42},[25619,86748,86750],{"id":86749},"_41054-number","4.10.5.4 Number",[19,86752,86753],{},[5198,86754],{"alt":31,"src":86755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,86757,86758],{},"整数也可以进行toFixed来保留小数",[19,86760,86761],{},"比如：",[19,86763,86764],{},"const price=10",[19,86766,86767],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[25619,86769,86771],{"id":86770},"_41055-购物车展示","4.10.5.5 购物车展示",[19,86773,86774],{},[5198,86775],{"alt":31,"src":86776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[26,86778,86780],{"className":54190,"code":86779,"language":54192,"meta":31,"style":31},"\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",[33,86781,86782,86792,86806,86810,86818,86832,86852,86864,86872,86878,86888,86898,86908,86912,86916,86922,86934,86948,86952,86956,86962,86974,86990,87000,87016,87020,87024,87030,87040,87050,87054,87058,87066,87078,87090,87102,87106,87110,87118,87130,87134,87138,87149,87159,87171,87183,87193,87197,87201,87209,87218,87230,87240,87250,87254,87258,87266,87275,87282,87292,87304,87308,87312,87321,87331,87342,87354,87366,87370,87374,87383,87393,87404,87408,87412,87418,87430,87442,87452,87462,87480,87492,87496,87500,87509,87521,87531,87541,87553,87557,87565,87573,87577,87585,87599,87607,87621,87649,87657,87665,87675,87679,87687,87695,87704,87712,87721,87731,87735,87739,87747,87755,87764,87772,87780,87793,87797,87801,87809,87817,87826,87834,87842,87857,87861,87865,87873,87881,87890,87898,87906,87920,87928,87932,87936,87941,87967,87972,88009,88014,88037,88042,88096,88101,88137,88141,88147,88152,88161,88175,88184,88203,88212,88222,88227,88232,88245,88250,88304,88330,88338,88346,88350],{"__ignoreMap":31},[36,86783,86784,86786,86788,86790],{"class":38,"line":39},[36,86785,54854],{"class":42},[36,86787,54858],{"class":54857},[36,86789,54861],{"class":101},[36,86791,54864],{"class":42},[36,86793,86794,86796,86798,86800,86802,86804],{"class":38,"line":53},[36,86795,393],{"class":42},[36,86797,54192],{"class":54857},[36,86799,54873],{"class":101},[36,86801,47],{"class":42},[36,86803,54878],{"class":105},[36,86805,54864],{"class":42},[36,86807,86808],{"class":38,"line":196},[36,86809,659],{"emptyLinePlaceholder":658},[36,86811,86812,86814,86816],{"class":38,"line":642},[36,86813,393],{"class":42},[36,86815,54891],{"class":54857},[36,86817,54864],{"class":42},[36,86819,86820,86822,86824,86826,86828,86830],{"class":38,"line":655},[36,86821,55701],{"class":42},[36,86823,54901],{"class":54857},[36,86825,54904],{"class":101},[36,86827,47],{"class":42},[36,86829,54909],{"class":105},[36,86831,54864],{"class":42},[36,86833,86834,86836,86838,86840,86842,86844,86846,86848,86850],{"class":38,"line":662},[36,86835,55701],{"class":42},[36,86837,54901],{"class":54857},[36,86839,18576],{"class":101},[36,86841,47],{"class":42},[36,86843,54948],{"class":105},[36,86845,54928],{"class":101},[36,86847,47],{"class":42},[36,86849,54955],{"class":105},[36,86851,54864],{"class":42},[36,86853,86854,86856,86858,86860,86862],{"class":38,"line":667},[36,86855,55701],{"class":42},[36,86857,54964],{"class":54857},[36,86859,54967],{"class":42},[36,86861,54964],{"class":54857},[36,86863,54864],{"class":42},[36,86865,86866,86868,86870],{"class":38,"line":679},[36,86867,55701],{"class":42},[36,86869,3785],{"class":54857},[36,86871,54864],{"class":42},[36,86873,86874,86876],{"class":38,"line":685},[36,86875,10096],{"class":54857},[36,86877,19228],{"class":42},[36,86879,86880,86882,86884,86886],{"class":38,"line":691},[36,86881,58251],{"class":112},[36,86883,54994],{"class":42},[36,86885,1859],{"class":112},[36,86887,5029],{"class":42},[36,86889,86890,86892,86894,86896],{"class":38,"line":696},[36,86891,58262],{"class":112},[36,86893,54994],{"class":42},[36,86895,1859],{"class":112},[36,86897,5029],{"class":42},[36,86899,86900,86902,86904,86906],{"class":38,"line":702},[36,86901,76150],{"class":112},[36,86903,54994],{"class":42},[36,86905,64060],{"class":112},[36,86907,5029],{"class":42},[36,86909,86910],{"class":38,"line":708},[36,86911,5899],{"class":42},[36,86913,86914],{"class":38,"line":713},[36,86915,659],{"emptyLinePlaceholder":658},[36,86917,86918,86920],{"class":38,"line":719},[36,86919,65678],{"class":101},[36,86921,19228],{"class":42},[36,86923,86924,86926,86928,86930,86932],{"class":38,"line":725},[36,86925,58327],{"class":112},[36,86927,54994],{"class":42},[36,86929,82128],{"class":112},[36,86931,55049],{"class":46},[36,86933,5029],{"class":42},[36,86935,86936,86938,86940,86942,86944,86946],{"class":38,"line":731},[36,86937,58262],{"class":112},[36,86939,54994],{"class":42},[36,86941,4186],{"class":112},[36,86943,55049],{"class":46},[36,86945,55113],{"class":112},[36,86947,5029],{"class":42},[36,86949,86950],{"class":38,"line":736},[36,86951,5899],{"class":42},[36,86953,86954],{"class":38,"line":742},[36,86955,659],{"emptyLinePlaceholder":658},[36,86957,86958,86960],{"class":38,"line":748},[36,86959,82179],{"class":101},[36,86961,19228],{"class":42},[36,86963,86964,86966,86968,86970,86972],{"class":38,"line":754},[36,86965,58251],{"class":112},[36,86967,54994],{"class":42},[36,86969,4446],{"class":112},[36,86971,55049],{"class":46},[36,86973,5029],{"class":42},[36,86975,86976,86978,86980,86982,86984,86986,86988],{"class":38,"line":760},[36,86977,65415],{"class":112},[36,86979,54994],{"class":42},[36,86981,31732],{"class":112},[36,86983,82234],{"class":112},[36,86985,82237],{"class":112},[36,86987,4566],{"class":46},[36,86989,5029],{"class":42},[36,86991,86992,86994,86996,86998],{"class":38,"line":766},[36,86993,58565],{"class":112},[36,86995,54994],{"class":42},[36,86997,55034],{"class":112},[36,86999,5029],{"class":42},[36,87001,87002,87004,87006,87008,87010,87012,87014],{"class":38,"line":772},[36,87003,65532],{"class":112},[36,87005,54994],{"class":42},[36,87007,4092],{"class":112},[36,87009,55049],{"class":46},[36,87011,55078],{"class":112},[36,87013,65799],{"class":112},[36,87015,5029],{"class":42},[36,87017,87018],{"class":38,"line":778},[36,87019,5899],{"class":42},[36,87021,87022],{"class":38,"line":783},[36,87023,659],{"emptyLinePlaceholder":658},[36,87025,87026,87028],{"class":38,"line":789},[36,87027,82297],{"class":101},[36,87029,19228],{"class":42},[36,87031,87032,87034,87036,87038],{"class":38,"line":795},[36,87033,65580],{"class":112},[36,87035,54994],{"class":42},[36,87037,65585],{"class":112},[36,87039,5029],{"class":42},[36,87041,87042,87044,87046,87048],{"class":38,"line":801},[36,87043,58440],{"class":112},[36,87045,54994],{"class":42},[36,87047,65373],{"class":112},[36,87049,5029],{"class":42},[36,87051,87052],{"class":38,"line":807},[36,87053,5899],{"class":42},[36,87055,87056],{"class":38,"line":813},[36,87057,659],{"emptyLinePlaceholder":658},[36,87059,87060,87062,87064],{"class":38,"line":819},[36,87061,82179],{"class":101},[36,87063,59171],{"class":54857},[36,87065,19228],{"class":42},[36,87067,87068,87070,87072,87074,87076],{"class":38,"line":824},[36,87069,58327],{"class":112},[36,87071,54994],{"class":42},[36,87073,4483],{"class":112},[36,87075,55049],{"class":46},[36,87077,5029],{"class":42},[36,87079,87080,87082,87084,87086,87088],{"class":38,"line":829},[36,87081,58341],{"class":112},[36,87083,54994],{"class":42},[36,87085,4483],{"class":112},[36,87087,55049],{"class":46},[36,87089,5029],{"class":42},[36,87091,87092,87094,87096,87098,87100],{"class":38,"line":851},[36,87093,65305],{"class":112},[36,87095,54994],{"class":42},[36,87097,4194],{"class":112},[36,87099,55049],{"class":46},[36,87101,5029],{"class":42},[36,87103,87104],{"class":38,"line":868},[36,87105,5899],{"class":42},[36,87107,87108],{"class":38,"line":873},[36,87109,659],{"emptyLinePlaceholder":658},[36,87111,87112,87114,87116],{"class":38,"line":891},[36,87113,82179],{"class":101},[36,87115,65859],{"class":101},[36,87117,19228],{"class":42},[36,87119,87120,87122,87124,87126,87128],{"class":38,"line":906},[36,87121,58327],{"class":112},[36,87123,54994],{"class":42},[36,87125,5445],{"class":112},[36,87127,55049],{"class":46},[36,87129,5029],{"class":42},[36,87131,87132],{"class":38,"line":925},[36,87133,5899],{"class":42},[36,87135,87136],{"class":38,"line":943},[36,87137,659],{"emptyLinePlaceholder":658},[36,87139,87140,87142,87144,87147],{"class":38,"line":948},[36,87141,82179],{"class":101},[36,87143,65859],{"class":101},[36,87145,87146],{"class":101}," .tag",[36,87148,19228],{"class":42},[36,87150,87151,87153,87155,87157],{"class":38,"line":971},[36,87152,58565],{"class":112},[36,87154,54994],{"class":42},[36,87156,64424],{"class":112},[36,87158,5029],{"class":42},[36,87160,87161,87163,87165,87167,87169],{"class":38,"line":992},[36,87162,58251],{"class":112},[36,87164,54994],{"class":42},[36,87166,498],{"class":112},[36,87168,55049],{"class":46},[36,87170,5029],{"class":42},[36,87172,87173,87175,87177,87179,87181],{"class":38,"line":1020},[36,87174,58478],{"class":112},[36,87176,54994],{"class":42},[36,87178,4371],{"class":112},[36,87180,55049],{"class":46},[36,87182,5029],{"class":42},[36,87184,87185,87187,87189,87191],{"class":38,"line":1036},[36,87186,60971],{"class":112},[36,87188,54994],{"class":42},[36,87190,65625],{"class":112},[36,87192,5029],{"class":42},[36,87194,87195],{"class":38,"line":1041},[36,87196,5899],{"class":42},[36,87198,87199],{"class":38,"line":1052},[36,87200,659],{"emptyLinePlaceholder":658},[36,87202,87203,87205,87207],{"class":38,"line":1065},[36,87204,82179],{"class":101},[36,87206,82471],{"class":101},[36,87208,35056],{"class":42},[36,87210,87211,87213,87216],{"class":38,"line":1077},[36,87212,82179],{"class":101},[36,87214,87215],{"class":101}," .sub-total",[36,87217,19228],{"class":42},[36,87219,87220,87222,87224,87226,87228],{"class":38,"line":1082},[36,87221,58478],{"class":112},[36,87223,54994],{"class":42},[36,87225,4521],{"class":112},[36,87227,55049],{"class":46},[36,87229,5029],{"class":42},[36,87231,87232,87234,87236,87238],{"class":38,"line":1125},[36,87233,60971],{"class":112},[36,87235,54994],{"class":42},[36,87237,82494],{"class":112},[36,87239,5029],{"class":42},[36,87241,87242,87244,87246,87248],{"class":38,"line":1164},[36,87243,65392],{"class":112},[36,87245,54994],{"class":42},[36,87247,4092],{"class":112},[36,87249,5029],{"class":42},[36,87251,87252],{"class":38,"line":1169},[36,87253,5899],{"class":42},[36,87255,87256],{"class":38,"line":1180},[36,87257,659],{"emptyLinePlaceholder":658},[36,87259,87260,87262,87264],{"class":38,"line":1198},[36,87261,82179],{"class":101},[36,87263,82511],{"class":101},[36,87265,35056],{"class":42},[36,87267,87268,87270,87273],{"class":38,"line":1215},[36,87269,82179],{"class":101},[36,87271,87272],{"class":101}," .sub-total::before",[36,87274,35056],{"class":42},[36,87276,87277,87280],{"class":38,"line":1236},[36,87278,87279],{"class":101},"    .amount::before",[36,87281,19228],{"class":42},[36,87283,87284,87286,87288,87290],{"class":38,"line":1245},[36,87285,82518],{"class":112},[36,87287,54994],{"class":42},[36,87289,82523],{"class":105},[36,87291,5029],{"class":42},[36,87293,87294,87296,87298,87300,87302],{"class":38,"line":1250},[36,87295,58478],{"class":112},[36,87297,54994],{"class":42},[36,87299,4371],{"class":112},[36,87301,55049],{"class":46},[36,87303,5029],{"class":42},[36,87305,87306],{"class":38,"line":1265},[36,87307,5899],{"class":42},[36,87309,87310],{"class":38,"line":1281},[36,87311,659],{"emptyLinePlaceholder":658},[36,87313,87314,87316,87319],{"class":38,"line":1297},[36,87315,82179],{"class":101},[36,87317,87318],{"class":101}," .spec",[36,87320,19228],{"class":42},[36,87322,87323,87325,87327,87329],{"class":38,"line":1314},[36,87324,65392],{"class":112},[36,87326,54994],{"class":42},[36,87328,498],{"class":112},[36,87330,5029],{"class":42},[36,87332,87333,87335,87337,87340],{"class":38,"line":1336},[36,87334,60971],{"class":112},[36,87336,54994],{"class":42},[36,87338,87339],{"class":112},"#888",[36,87341,5029],{"class":42},[36,87343,87344,87346,87348,87350,87352],{"class":38,"line":1356},[36,87345,58478],{"class":112},[36,87347,54994],{"class":42},[36,87349,4421],{"class":112},[36,87351,55049],{"class":46},[36,87353,5029],{"class":42},[36,87355,87356,87358,87360,87362,87364],{"class":38,"line":1361},[36,87357,65555],{"class":112},[36,87359,54994],{"class":42},[36,87361,1921],{"class":112},[36,87363,55049],{"class":46},[36,87365,5029],{"class":42},[36,87367,87368],{"class":38,"line":1407},[36,87369,5899],{"class":42},[36,87371,87372],{"class":38,"line":1423},[36,87373,659],{"emptyLinePlaceholder":658},[36,87375,87376,87378,87381],{"class":38,"line":1439},[36,87377,82179],{"class":101},[36,87379,87380],{"class":101}," .count",[36,87382,19228],{"class":42},[36,87384,87385,87387,87389,87391],{"class":38,"line":1444},[36,87386,65392],{"class":112},[36,87388,54994],{"class":42},[36,87390,4092],{"class":112},[36,87392,5029],{"class":42},[36,87394,87395,87397,87399,87402],{"class":38,"line":1486},[36,87396,60971],{"class":112},[36,87398,54994],{"class":42},[36,87400,87401],{"class":112},"#aaa",[36,87403,5029],{"class":42},[36,87405,87406],{"class":38,"line":1499},[36,87407,5899],{"class":42},[36,87409,87410],{"class":38,"line":1513},[36,87411,659],{"emptyLinePlaceholder":658},[36,87413,87414,87416],{"class":38,"line":1518},[36,87415,76029],{"class":101},[36,87417,19228],{"class":42},[36,87419,87420,87422,87424,87426,87428],{"class":38,"line":1529},[36,87421,58327],{"class":112},[36,87423,54994],{"class":42},[36,87425,82128],{"class":112},[36,87427,55049],{"class":46},[36,87429,5029],{"class":42},[36,87431,87432,87434,87436,87438,87440],{"class":38,"line":1539},[36,87433,58262],{"class":112},[36,87435,54994],{"class":42},[36,87437,1859],{"class":112},[36,87439,55113],{"class":112},[36,87441,5029],{"class":42},[36,87443,87444,87446,87448,87450],{"class":38,"line":1544},[36,87445,58565],{"class":112},[36,87447,54994],{"class":42},[36,87449,55034],{"class":112},[36,87451,5029],{"class":42},[36,87453,87454,87456,87458,87460],{"class":38,"line":1555},[36,87455,58576],{"class":112},[36,87457,54994],{"class":42},[36,87459,55137],{"class":112},[36,87461,5029],{"class":42},[36,87463,87464,87467,87469,87471,87473,87475,87478],{"class":38,"line":1572},[36,87465,87466],{"class":112},"      border-top",[36,87468,54994],{"class":42},[36,87470,4092],{"class":112},[36,87472,55049],{"class":46},[36,87474,55078],{"class":112},[36,87476,87477],{"class":112}," #4e4e4e",[36,87479,5029],{"class":42},[36,87481,87482,87484,87486,87488,87490],{"class":38,"line":1592},[36,87483,58251],{"class":112},[36,87485,54994],{"class":42},[36,87487,1921],{"class":112},[36,87489,55049],{"class":46},[36,87491,5029],{"class":42},[36,87493,87494],{"class":38,"line":1597},[36,87495,5899],{"class":42},[36,87497,87498],{"class":38,"line":1610},[36,87499,659],{"emptyLinePlaceholder":658},[36,87501,87502,87504,87507],{"class":38,"line":1632},[36,87503,76029],{"class":101},[36,87505,87506],{"class":101}," .amount",[36,87508,19228],{"class":42},[36,87510,87511,87513,87515,87517,87519],{"class":38,"line":1646},[36,87512,58478],{"class":112},[36,87514,54994],{"class":42},[36,87516,4521],{"class":112},[36,87518,55049],{"class":46},[36,87520,5029],{"class":42},[36,87522,87523,87525,87527,87529],{"class":38,"line":1651},[36,87524,60971],{"class":112},[36,87526,54994],{"class":42},[36,87528,82494],{"class":112},[36,87530,5029],{"class":42},[36,87532,87533,87535,87537,87539],{"class":38,"line":1664},[36,87534,65889],{"class":112},[36,87536,54994],{"class":42},[36,87538,55046],{"class":112},[36,87540,5029],{"class":42},[36,87542,87543,87545,87547,87549,87551],{"class":38,"line":1669},[36,87544,65305],{"class":112},[36,87546,54994],{"class":42},[36,87548,4527],{"class":112},[36,87550,55049],{"class":46},[36,87552,5029],{"class":42},[36,87554,87555],{"class":38,"line":1681},[36,87556,5899],{"class":42},[36,87558,87559,87561,87563],{"class":38,"line":1694},[36,87560,55974],{"class":42},[36,87562,3785],{"class":54857},[36,87564,54864],{"class":42},[36,87566,87567,87569,87571],{"class":38,"line":1699},[36,87568,55342],{"class":42},[36,87570,54891],{"class":54857},[36,87572,54864],{"class":42},[36,87574,87575],{"class":38,"line":1714},[36,87576,659],{"emptyLinePlaceholder":658},[36,87578,87579,87581,87583],{"class":38,"line":1729},[36,87580,393],{"class":42},[36,87582,55357],{"class":54857},[36,87584,54864],{"class":42},[36,87586,87587,87589,87591,87593,87595,87597],{"class":38,"line":1746},[36,87588,55701],{"class":42},[36,87590,55168],{"class":54857},[36,87592,57043],{"class":101},[36,87594,47],{"class":42},[36,87596,66163],{"class":105},[36,87598,54864],{"class":42},[36,87600,87601,87603,87605],{"class":38,"line":1751},[36,87602,55974],{"class":42},[36,87604,55168],{"class":54857},[36,87606,54864],{"class":42},[36,87608,87609,87611,87613,87615,87617,87619],{"class":38,"line":1765},[36,87610,55701],{"class":42},[36,87612,55168],{"class":54857},[36,87614,57043],{"class":101},[36,87616,47],{"class":42},[36,87618,66135],{"class":105},[36,87620,54864],{"class":42},[36,87622,87623,87625,87627,87630,87632,87634,87636,87639,87641,87643,87645,87647],{"class":38,"line":1783},[36,87624,54898],{"class":42},[36,87626,55168],{"class":54857},[36,87628,87629],{"class":42},">合计：\u003C",[36,87631,36],{"class":54857},[36,87633,57043],{"class":101},[36,87635,47],{"class":42},[36,87637,87638],{"class":105},"\"amount\"",[36,87640,58870],{"class":42},[36,87642,36],{"class":54857},[36,87644,58870],{"class":42},[36,87646,55168],{"class":54857},[36,87648,54864],{"class":42},[36,87650,87651,87653,87655],{"class":38,"line":1799},[36,87652,55974],{"class":42},[36,87654,55168],{"class":54857},[36,87656,54864],{"class":42},[36,87658,87659,87661,87663],{"class":38,"line":1807},[36,87660,55701],{"class":42},[36,87662,55370],{"class":54857},[36,87664,54864],{"class":42},[36,87666,87667,87669,87671,87673],{"class":38,"line":1812},[36,87668,14882],{"class":46},[36,87670,82931],{"class":112},[36,87672,673],{"class":46},[36,87674,59003],{"class":42},[36,87676,87677],{"class":38,"line":1817},[36,87678,82940],{"class":42},[36,87680,87681,87683,87685],{"class":38,"line":1833},[36,87682,82945],{"class":42},[36,87684,82948],{"class":105},[36,87686,35056],{"class":42},[36,87688,87689,87691,87693],{"class":38,"line":1844},[36,87690,82955],{"class":42},[36,87692,82958],{"class":105},[36,87694,35056],{"class":42},[36,87696,87697,87699,87702],{"class":38,"line":1864},[36,87698,82965],{"class":42},[36,87700,87701],{"class":112},"289.9",[36,87703,35056],{"class":42},[36,87705,87706,87708,87710],{"class":38,"line":1878},[36,87707,82975],{"class":42},[36,87709,82978],{"class":105},[36,87711,35056],{"class":42},[36,87713,87714,87717,87719],{"class":38,"line":1891},[36,87715,87716],{"class":42},"        count: ",[36,87718,498],{"class":112},[36,87720,35056],{"class":42},[36,87722,87723,87726,87729],{"class":38,"line":1896},[36,87724,87725],{"class":42},"        spec: { color: ",[36,87727,87728],{"class":105},"'白色'",[36,87730,59160],{"class":42},[36,87732,87733],{"class":38,"line":1906},[36,87734,81446],{"class":42},[36,87736,87737],{"class":38,"line":1926},[36,87738,82940],{"class":42},[36,87740,87741,87743,87745],{"class":38,"line":1936},[36,87742,82945],{"class":42},[36,87744,83039],{"class":105},[36,87746,35056],{"class":42},[36,87748,87749,87751,87753],{"class":38,"line":1946},[36,87750,82955],{"class":42},[36,87752,83048],{"class":105},[36,87754,35056],{"class":42},[36,87756,87757,87759,87762],{"class":38,"line":1957},[36,87758,82965],{"class":42},[36,87760,87761],{"class":112},"109.8",[36,87763,35056],{"class":42},[36,87765,87766,87768,87770],{"class":38,"line":2008},[36,87767,82975],{"class":42},[36,87769,83066],{"class":105},[36,87771,35056],{"class":42},[36,87773,87774,87776,87778],{"class":38,"line":2022},[36,87775,87716],{"class":42},[36,87777,1982],{"class":112},[36,87779,35056],{"class":42},[36,87781,87782,87785,87787,87789,87791],{"class":38,"line":2028},[36,87783,87784],{"class":42},"        spec: { size: ",[36,87786,85457],{"class":105},[36,87788,59020],{"class":42},[36,87790,85462],{"class":105},[36,87792,59160],{"class":42},[36,87794,87795],{"class":38,"line":2033},[36,87796,81446],{"class":42},[36,87798,87799],{"class":38,"line":2054},[36,87800,82940],{"class":42},[36,87802,87803,87805,87807],{"class":38,"line":2059},[36,87804,82945],{"class":42},[36,87806,83083],{"class":105},[36,87808,35056],{"class":42},[36,87810,87811,87813,87815],{"class":38,"line":2064},[36,87812,82955],{"class":42},[36,87814,83092],{"class":105},[36,87816,35056],{"class":42},[36,87818,87819,87821,87824],{"class":38,"line":2081},[36,87820,82965],{"class":42},[36,87822,87823],{"class":112},"488",[36,87825,35056],{"class":42},[36,87827,87828,87830,87832],{"class":38,"line":36396},[36,87829,82975],{"class":42},[36,87831,83110],{"class":105},[36,87833,35056],{"class":42},[36,87835,87836,87838,87840],{"class":38,"line":36402},[36,87837,87716],{"class":42},[36,87839,4092],{"class":112},[36,87841,35056],{"class":42},[36,87843,87844,87846,87849,87852,87855],{"class":38,"line":36411},[36,87845,87725],{"class":42},[36,87847,87848],{"class":105},"'青色'",[36,87850,87851],{"class":42},", sum: ",[36,87853,87854],{"class":105},"'一大四小'",[36,87856,59160],{"class":42},[36,87858,87859],{"class":38,"line":36417},[36,87860,81446],{"class":42},[36,87862,87863],{"class":38,"line":36426},[36,87864,82940],{"class":42},[36,87866,87867,87869,87871],{"class":38,"line":36432},[36,87868,82945],{"class":42},[36,87870,83127],{"class":105},[36,87872,35056],{"class":42},[36,87874,87875,87877,87879],{"class":38,"line":36438},[36,87876,82955],{"class":42},[36,87878,83136],{"class":105},[36,87880,35056],{"class":42},[36,87882,87883,87885,87888],{"class":38,"line":36447},[36,87884,82965],{"class":42},[36,87886,87887],{"class":112},"139",[36,87889,35056],{"class":42},[36,87891,87892,87894,87896],{"class":38,"line":36453},[36,87893,82975],{"class":42},[36,87895,83154],{"class":105},[36,87897,35056],{"class":42},[36,87899,87900,87902,87904],{"class":38,"line":36464},[36,87901,87716],{"class":42},[36,87903,4092],{"class":112},[36,87905,35056],{"class":42},[36,87907,87908,87910,87913,87915,87918],{"class":38,"line":36470},[36,87909,87784],{"class":42},[36,87911,87912],{"class":105},"'小号'",[36,87914,59020],{"class":42},[36,87916,87917],{"class":105},"'紫色'",[36,87919,59026],{"class":42},[36,87921,87922,87925],{"class":38,"line":36489},[36,87923,87924],{"class":42},"        gift: ",[36,87926,87927],{"class":105},"'50g茶叶,清洗球'\n",[36,87929,87930],{"class":38,"line":36495},[36,87931,55955],{"class":42},[36,87933,87934],{"class":38,"line":36506},[36,87935,56666],{"class":42},[36,87937,87938],{"class":38,"line":36512},[36,87939,87940],{"class":3943},"    \u002F\u002F  1.根据数据渲染页面\n",[36,87942,87943,87945,87947,87949,87951,87953,87955,87957,87959,87961,87963,87965],{"class":38,"line":36532},[36,87944,55964],{"class":42},[36,87946,57956],{"class":101},[36,87948,495],{"class":42},[36,87950,83455],{"class":105},[36,87952,77803],{"class":42},[36,87954,47],{"class":46},[36,87956,83602],{"class":42},[36,87958,77598],{"class":101},[36,87960,495],{"class":42},[36,87962,83349],{"class":468},[36,87964,83352],{"class":46},[36,87966,19228],{"class":42},[36,87968,87969],{"class":38,"line":36548},[36,87970,87971],{"class":3943},"      \u002F\u002F 对象解构\n",[36,87973,87974,87976,87978,87980,87982,87984,87986,87989,87991,87993,87995,87998,88000,88003,88005,88007],{"class":38,"line":36554},[36,87975,61783],{"class":46},[36,87977,83361],{"class":42},[36,87979,83374],{"class":112},[36,87981,478],{"class":42},[36,87983,83364],{"class":112},[36,87985,478],{"class":42},[36,87987,87988],{"class":112},"count",[36,87990,478],{"class":42},[36,87992,83369],{"class":112},[36,87994,478],{"class":42},[36,87996,87997],{"class":112},"spec",[36,87999,478],{"class":42},[36,88001,88002],{"class":112},"gift",[36,88004,83377],{"class":42},[36,88006,47],{"class":46},[36,88008,83382],{"class":42},[36,88010,88011],{"class":38,"line":36568},[36,88012,88013],{"class":3943},"      \u002F\u002F 规格文字模块处理\n",[36,88015,88016,88018,88021,88023,88025,88027,88029,88031,88033,88035],{"class":38,"line":36574},[36,88017,61783],{"class":46},[36,88019,88020],{"class":112}," text",[36,88022,673],{"class":46},[36,88024,85492],{"class":42},[36,88026,85495],{"class":101},[36,88028,85498],{"class":42},[36,88030,77777],{"class":101},[36,88032,495],{"class":42},[36,88034,85505],{"class":105},[36,88036,922],{"class":42},[36,88038,88039],{"class":38,"line":36580},[36,88040,88041],{"class":3943},"      \u002F\u002F 处理赠品模块\n",[36,88043,88044,88046,88048,88050,88053,88055,88057,88059,88061,88064,88066,88068,88070,88072,88074,88077,88079,88082,88084,88086,88088,88090,88092,88094],{"class":38,"line":36591},[36,88045,61783],{"class":46},[36,88047,77473],{"class":112},[36,88049,673],{"class":46},[36,88051,88052],{"class":42}," gift ",[36,88054,4855],{"class":46},[36,88056,86666],{"class":42},[36,88058,86669],{"class":101},[36,88060,495],{"class":42},[36,88062,88063],{"class":105},"','",[36,88065,34423],{"class":42},[36,88067,77598],{"class":101},[36,88069,495],{"class":42},[36,88071,83349],{"class":468},[36,88073,83352],{"class":46},[36,88075,88076],{"class":105}," `\u003Cspan class=\"tag\">【赠品】${",[36,88078,83349],{"class":42},[36,88080,88081],{"class":105},"}\u003C\u002Fspan>`",[36,88083,34423],{"class":42},[36,88085,77777],{"class":101},[36,88087,495],{"class":42},[36,88089,77782],{"class":105},[36,88091,17373],{"class":42},[36,88093,4729],{"class":46},[36,88095,73658],{"class":105},[36,88097,88098],{"class":38,"line":36597},[36,88099,88100],{"class":3943},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[36,88102,88103,88105,88108,88110,88113,88115,88117,88119,88122,88124,88126,88128,88131,88133,88135],{"class":38,"line":36603},[36,88104,61783],{"class":46},[36,88106,88107],{"class":112}," subtotal",[36,88109,673],{"class":46},[36,88111,88112],{"class":42}," ((price ",[36,88114,1372],{"class":46},[36,88116,9447],{"class":112},[36,88118,1325],{"class":46},[36,88120,88121],{"class":42}," count) ",[36,88123,4455],{"class":46},[36,88125,9447],{"class":112},[36,88127,34423],{"class":42},[36,88129,88130],{"class":101},"toFixed",[36,88132,495],{"class":42},[36,88134,498],{"class":112},[36,88136,922],{"class":42},[36,88138,88139],{"class":38,"line":36613},[36,88140,659],{"emptyLinePlaceholder":658},[36,88142,88143,88145],{"class":38,"line":36619},[36,88144,77536],{"class":46},[36,88146,73722],{"class":105},[36,88148,88149],{"class":38,"line":36630},[36,88150,88151],{"class":105},"        \u003Cdiv class=\"item\">\n",[36,88153,88154,88157,88159],{"class":38,"line":36636},[36,88155,88156],{"class":105},"          \u003Cimg src=\"${",[36,88158,83374],{"class":42},[36,88160,83406],{"class":105},[36,88162,88163,88166,88168,88171,88173],{"class":38,"line":36646},[36,88164,88165],{"class":105},"          \u003Cp class=\"name\">${",[36,88167,83364],{"class":42},[36,88169,88170],{"class":105},"}${",[36,88172,5038],{"class":42},[36,88174,83416],{"class":105},[36,88176,88177,88180,88182],{"class":38,"line":36651},[36,88178,88179],{"class":105},"          \u003Cp class=\"spec\">${",[36,88181,80],{"class":42},[36,88183,83416],{"class":105},[36,88185,88186,88189,88191,88193,88195,88197,88199,88201],{"class":38,"line":36657},[36,88187,88188],{"class":105},"          \u003Cp class=\"price\">${",[36,88190,83369],{"class":42},[36,88192,842],{"class":105},[36,88194,88130],{"class":101},[36,88196,495],{"class":105},[36,88198,498],{"class":112},[36,88200,4304],{"class":105},[36,88202,83416],{"class":105},[36,88204,88205,88208,88210],{"class":38,"line":36706},[36,88206,88207],{"class":105},"          \u003Cp class=\"count\">x${",[36,88209,87988],{"class":42},[36,88211,83416],{"class":105},[36,88213,88214,88217,88220],{"class":38,"line":36753},[36,88215,88216],{"class":105},"          \u003Cp class=\"sub-total\">${",[36,88218,88219],{"class":42},"subtotal",[36,88221,83416],{"class":105},[36,88223,88224],{"class":38,"line":36758},[36,88225,88226],{"class":105},"        \u003C\u002Fdiv> \n",[36,88228,88229],{"class":38,"line":36764},[36,88230,88231],{"class":105},"             `\n",[36,88233,88234,88237,88239,88241,88243],{"class":38,"line":36783},[36,88235,88236],{"class":42},"    }).",[36,88238,77777],{"class":101},[36,88240,495],{"class":42},[36,88242,77782],{"class":105},[36,88244,922],{"class":42},[36,88246,88247],{"class":38,"line":36789},[36,88248,88249],{"class":3943},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[36,88251,88252,88254,88256,88258,88260,88263,88265,88268,88270,88272,88274,88277,88280,88282,88285,88287,88289,88291,88294,88296,88298,88300,88302],{"class":38,"line":36809},[36,88253,14882],{"class":46},[36,88255,66340],{"class":112},[36,88257,673],{"class":46},[36,88259,83602],{"class":42},[36,88261,88262],{"class":101},"reduce",[36,88264,6088],{"class":42},[36,88266,88267],{"class":468},"prev",[36,88269,478],{"class":42},[36,88271,83349],{"class":468},[36,88273,17373],{"class":42},[36,88275,88276],{"class":46},"=>",[36,88278,88279],{"class":42}," prev ",[36,88281,4354],{"class":46},[36,88283,88284],{"class":42}," (item.price ",[36,88286,1372],{"class":46},[36,88288,9447],{"class":112},[36,88290,1325],{"class":46},[36,88292,88293],{"class":42}," item.count) ",[36,88295,4455],{"class":46},[36,88297,9447],{"class":112},[36,88299,478],{"class":42},[36,88301,1859],{"class":112},[36,88303,922],{"class":42},[36,88305,88306,88308,88310,88312,88315,88317,88319,88322,88324,88326,88328],{"class":38,"line":36815},[36,88307,55964],{"class":42},[36,88309,57956],{"class":101},[36,88311,495],{"class":42},[36,88313,88314],{"class":105},"'.amount'",[36,88316,77803],{"class":42},[36,88318,47],{"class":46},[36,88320,88321],{"class":42}," total.",[36,88323,88130],{"class":101},[36,88325,495],{"class":42},[36,88327,498],{"class":112},[36,88329,922],{"class":42},[36,88331,88332,88334,88336],{"class":38,"line":36821},[36,88333,55974],{"class":42},[36,88335,55370],{"class":54857},[36,88337,54864],{"class":42},[36,88339,88340,88342,88344],{"class":38,"line":36831},[36,88341,55342],{"class":42},[36,88343,55357],{"class":54857},[36,88345,54864],{"class":42},[36,88347,88348],{"class":38,"line":36836},[36,88349,659],{"emptyLinePlaceholder":658},[36,88351,88352,88354,88356],{"class":38,"line":36842},[36,88353,55342],{"class":42},[36,88355,54192],{"class":54857},[36,88357,54864],{"class":42},[14,88359,88361],{"id":88360},"_411-编程思想","4.11 编程思想",[318,88363,88365],{"id":88364},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,88367,88368,88371],{},[4027,88369,88370],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,88373,88374],{},"调用就可以了",[19,88376,88377],{},[5198,88378],{"alt":31,"src":88379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[318,88381,88383],{"id":88382},"_4112-面向对象","4.11.2 面向对象",[19,88385,88386],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,88388,88389],{},[5198,88390],{"alt":31,"src":88391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,88393,88394],{},"面向对象的特性：",[4875,88396,88397,88400,88403],{},[214,88398,88399],{},"封装性",[214,88401,88402],{},"继承性",[214,88404,88405],{},"多态性",[318,88407,88409],{"id":88408},"_4113-两者比较","4.11.3 两者比较",[19,88411,88412],{},[5198,88413],{"alt":31,"src":88414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,88416,88418],{"id":88417},"_412-构造函数回顾","4.12 构造函数回顾",[19,88420,88421],{},[5198,88422],{"alt":31,"src":88423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,88425,88426],{},[5198,88427],{"alt":31,"src":88428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,88430,88431],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,88433,88434],{},[5198,88435],{"alt":31,"src":88436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,88438,88440],{"id":88439},"_413-原型","4.13 原型",[318,88442,88444],{"id":88443},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,88446,88447],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,88449,88450],{},[5198,88451],{"alt":31,"src":88452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,88454,88455],{},[5198,88456],{"alt":31,"src":88457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,88459,88460],{},"原型是构造函数的属性，它也是一个对象",[19,88462,88463],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,88465,88466],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[26,88468,88470],{"className":56624,"code":88469,"language":56626,"meta":31,"style":31},"\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",[33,88471,88472,88480,88485,88493,88498,88503,88508,88513,88518,88522,88526,88530,88535,88540,88544,88549,88554,88559,88564,88569,88573,88581],{"__ignoreMap":31},[36,88473,88474,88476,88478],{"class":38,"line":39},[36,88475,393],{"class":42},[36,88477,55357],{"class":54857},[36,88479,54864],{"class":42},[36,88481,88482],{"class":38,"line":53},[36,88483,88484],{"class":3943},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[36,88486,88487,88489,88491],{"class":38,"line":196},[36,88488,55701],{"class":42},[36,88490,55370],{"class":54857},[36,88492,54864],{"class":42},[36,88494,88495],{"class":38,"line":642},[36,88496,88497],{"class":42},"    function Star(uname, age) {\n",[36,88499,88500],{"class":38,"line":655},[36,88501,88502],{"class":42},"      this.uname = uname,\n",[36,88504,88505],{"class":38,"line":662},[36,88506,88507],{"class":42},"        this.age = age\n",[36,88509,88510],{"class":38,"line":667},[36,88511,88512],{"class":42},"      \u002F\u002F this.sing = function () {\n",[36,88514,88515],{"class":38,"line":679},[36,88516,88517],{"class":42},"      \u002F\u002F   console.log('唱歌')\n",[36,88519,88520],{"class":38,"line":685},[36,88521,659],{"emptyLinePlaceholder":658},[36,88523,88524],{"class":38,"line":691},[36,88525,63592],{"class":42},[36,88527,88528],{"class":38,"line":696},[36,88529,5899],{"class":42},[36,88531,88532],{"class":38,"line":702},[36,88533,88534],{"class":42},"    Star.prototype.sing = function () {\n",[36,88536,88537],{"class":38,"line":708},[36,88538,88539],{"class":42},"      console.log('唱歌')\n",[36,88541,88542],{"class":38,"line":713},[36,88543,5899],{"class":42},[36,88545,88546],{"class":38,"line":719},[36,88547,88548],{"class":42},"    \u002F\u002F console.dir(Star.prototype)\n",[36,88550,88551],{"class":38,"line":725},[36,88552,88553],{"class":42},"    const pink = new Star('pink', 18)\n",[36,88555,88556],{"class":38,"line":731},[36,88557,88558],{"class":42},"    const red = new Star('red', 20)\n",[36,88560,88561],{"class":38,"line":736},[36,88562,88563],{"class":42},"    pink.sing()\n",[36,88565,88566],{"class":38,"line":742},[36,88567,88568],{"class":42},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[36,88570,88571],{"class":38,"line":748},[36,88572,659],{"emptyLinePlaceholder":658},[36,88574,88575,88577,88579],{"class":38,"line":754},[36,88576,55974],{"class":42},[36,88578,55370],{"class":54857},[36,88580,54864],{"class":42},[36,88582,88583,88585,88587],{"class":38,"line":760},[36,88584,55342],{"class":42},[36,88586,55357],{"class":54857},[36,88588,54864],{"class":42},[19,88590,88591],{},[5198,88592],{"alt":31,"src":88593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[26,88595,88597],{"className":56624,"code":88596,"language":56626,"meta":31,"style":31},"\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",[33,88598,88599,88607,88615,88620,88625,88630,88635,88639,88644,88649,88654,88658,88663,88667,88671,88676,88680,88688],{"__ignoreMap":31},[36,88600,88601,88603,88605],{"class":38,"line":39},[36,88602,393],{"class":42},[36,88604,55357],{"class":54857},[36,88606,54864],{"class":42},[36,88608,88609,88611,88613],{"class":38,"line":53},[36,88610,55701],{"class":42},[36,88612,55370],{"class":54857},[36,88614,54864],{"class":42},[36,88616,88617],{"class":38,"line":196},[36,88618,88619],{"class":42},"    let that\n",[36,88621,88622],{"class":38,"line":642},[36,88623,88624],{"class":42},"    function Star(uname) {\n",[36,88626,88627],{"class":38,"line":655},[36,88628,88629],{"class":42},"      this.uname = uname\n",[36,88631,88632],{"class":38,"line":662},[36,88633,88634],{"class":42},"      that = this\n",[36,88636,88637],{"class":38,"line":667},[36,88638,5899],{"class":42},[36,88640,88641],{"class":38,"line":679},[36,88642,88643],{"class":42},"    \u002F\u002F 实例对象是 ldh\n",[36,88645,88646],{"class":38,"line":685},[36,88647,88648],{"class":42},"    const ldh = new Star('刘德华')\n",[36,88650,88651],{"class":38,"line":691},[36,88652,88653],{"class":42},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[36,88655,88656],{"class":38,"line":696},[36,88657,659],{"emptyLinePlaceholder":658},[36,88659,88660],{"class":38,"line":702},[36,88661,88662],{"class":42},"    Star.sing = function () {\n",[36,88664,88665],{"class":38,"line":708},[36,88666,88539],{"class":42},[36,88668,88669],{"class":38,"line":713},[36,88670,5899],{"class":42},[36,88672,88673],{"class":38,"line":719},[36,88674,88675],{"class":42},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[36,88677,88678],{"class":38,"line":725},[36,88679,659],{"emptyLinePlaceholder":658},[36,88681,88682,88684,88686],{"class":38,"line":731},[36,88683,55974],{"class":42},[36,88685,55370],{"class":54857},[36,88687,54864],{"class":42},[36,88689,88690,88692,88694],{"class":38,"line":736},[36,88691,55342],{"class":42},[36,88693,55357],{"class":54857},[36,88695,54864],{"class":42},[19,88697,88698],{},"构造函数的this指向的是实例对象；",[19,88700,88701],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[318,88703,88705],{"id":88704},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,88707,88708],{},[5198,88709],{"alt":31,"src":88710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[26,88712,88714],{"className":56624,"code":88713,"language":56626,"meta":31,"style":31},"\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",[33,88715,88716,88724,88732,88737,88742,88747,88752,88757,88762,88767,88772,88777,88782,88786,88791,88796,88801,88806,88810,88815,88820,88825,88830,88834,88839,88844,88849,88854,88858,88863,88867,88875],{"__ignoreMap":31},[36,88717,88718,88720,88722],{"class":38,"line":39},[36,88719,393],{"class":42},[36,88721,55357],{"class":54857},[36,88723,54864],{"class":42},[36,88725,88726,88728,88730],{"class":38,"line":53},[36,88727,55701],{"class":42},[36,88729,55370],{"class":54857},[36,88731,54864],{"class":42},[36,88733,88734],{"class":38,"line":196},[36,88735,88736],{"class":42},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[36,88738,88739],{"class":38,"line":642},[36,88740,88741],{"class":42},"    const arr = [1, 2, 3]\n",[36,88743,88744],{"class":38,"line":655},[36,88745,88746],{"class":42},"    \u002F\u002F 自己定义数组的扩展方法\n",[36,88748,88749],{"class":38,"line":662},[36,88750,88751],{"class":42},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[36,88753,88754],{"class":38,"line":667},[36,88755,88756],{"class":42},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[36,88758,88759],{"class":38,"line":679},[36,88760,88761],{"class":42},"    \u002F\u002F ①.最大值\n",[36,88763,88764],{"class":38,"line":685},[36,88765,88766],{"class":42},"    Array.prototype.max = function () {\n",[36,88768,88769],{"class":38,"line":691},[36,88770,88771],{"class":42},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[36,88773,88774],{"class":38,"line":696},[36,88775,88776],{"class":42},"      return Math.max(...this)\n",[36,88778,88779],{"class":38,"line":702},[36,88780,88781],{"class":42},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[36,88783,88784],{"class":38,"line":708},[36,88785,5899],{"class":42},[36,88787,88788],{"class":38,"line":713},[36,88789,88790],{"class":42},"    console.log(arr.max())\n",[36,88792,88793],{"class":38,"line":719},[36,88794,88795],{"class":42},"    \u002F\u002F ②最小值\n",[36,88797,88798],{"class":38,"line":725},[36,88799,88800],{"class":42},"    Array.prototype.min = function () {\n",[36,88802,88803],{"class":38,"line":731},[36,88804,88805],{"class":42},"      return Math.min(...this)\n",[36,88807,88808],{"class":38,"line":736},[36,88809,5899],{"class":42},[36,88811,88812],{"class":38,"line":742},[36,88813,88814],{"class":42},"    console.log(arr.min())\n",[36,88816,88817],{"class":38,"line":748},[36,88818,88819],{"class":42},"    \u002F\u002F③求和\n",[36,88821,88822],{"class":38,"line":754},[36,88823,88824],{"class":42},"    Array.prototype.sum = function () {\n",[36,88826,88827],{"class":38,"line":760},[36,88828,88829],{"class":42},"      return this.reduce((prev, current) => prev + current, 0)\n",[36,88831,88832],{"class":38,"line":766},[36,88833,5899],{"class":42},[36,88835,88836],{"class":38,"line":772},[36,88837,88838],{"class":42},"    console.log(arr.sum())\n",[36,88840,88841],{"class":38,"line":778},[36,88842,88843],{"class":42},"    \u002F\u002F ③排序\n",[36,88845,88846],{"class":38,"line":783},[36,88847,88848],{"class":42},"    Array.prototype.rever = function () {\n",[36,88850,88851],{"class":38,"line":789},[36,88852,88853],{"class":42},"      return this.reverse()\n",[36,88855,88856],{"class":38,"line":795},[36,88857,5899],{"class":42},[36,88859,88860],{"class":38,"line":801},[36,88861,88862],{"class":42},"    console.log(arr.rever())\n",[36,88864,88865],{"class":38,"line":807},[36,88866,659],{"emptyLinePlaceholder":658},[36,88868,88869,88871,88873],{"class":38,"line":813},[36,88870,55974],{"class":42},[36,88872,55370],{"class":54857},[36,88874,54864],{"class":42},[36,88876,88877,88879,88881],{"class":38,"line":819},[36,88878,55342],{"class":42},[36,88880,55357],{"class":54857},[36,88882,54864],{"class":42},[19,88884,88885],{},[5198,88886],{"alt":31,"src":88887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[318,88889,88891],{"id":88890},"_4133-constructor-属性","4.13.3 constructor 属性",[19,88893,88894],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,88896,88897],{},[5198,88898],{"alt":31,"src":88899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[26,88901,88903],{"className":56624,"code":88902,"language":56626,"meta":31,"style":31},"\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",[33,88904,88905,88913,88921,88926,88931,88935,88940,88945,88950,88958],{"__ignoreMap":31},[36,88906,88907,88909,88911],{"class":38,"line":39},[36,88908,393],{"class":42},[36,88910,55357],{"class":54857},[36,88912,54864],{"class":42},[36,88914,88915,88917,88919],{"class":38,"line":53},[36,88916,55701],{"class":42},[36,88918,55370],{"class":54857},[36,88920,54864],{"class":42},[36,88922,88923],{"class":38,"line":196},[36,88924,88925],{"class":42},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[36,88927,88928],{"class":38,"line":642},[36,88929,88930],{"class":42},"    function Star() {\n",[36,88932,88933],{"class":38,"line":655},[36,88934,5899],{"class":42},[36,88936,88937],{"class":38,"line":662},[36,88938,88939],{"class":42},"    const ldh = new Star()\n",[36,88941,88942],{"class":38,"line":667},[36,88943,88944],{"class":42},"    console.log(Star.prototype)\n",[36,88946,88947],{"class":38,"line":679},[36,88948,88949],{"class":42},"    console.log(Star.prototype.constructor === Star)\n",[36,88951,88952,88954,88956],{"class":38,"line":685},[36,88953,55974],{"class":42},[36,88955,55370],{"class":54857},[36,88957,54864],{"class":42},[36,88959,88960,88962,88964],{"class":38,"line":691},[36,88961,55342],{"class":42},[36,88963,55357],{"class":54857},[36,88965,54864],{"class":42},[19,88967,88968],{},[5198,88969],{"alt":31,"src":88970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,88972,88973],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[26,88975,88977],{"className":56624,"code":88976,"language":56626,"meta":31,"style":31},"  \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",[33,88978,88979,88987,88991,88995,88999,89004,89009,89014,89018,89023,89028,89033,89038,89043,89048,89052,89056,89061,89066,89071,89075,89080,89085,89089,89093,89097],{"__ignoreMap":31},[36,88980,88981,88983,88985],{"class":38,"line":39},[36,88982,55701],{"class":42},[36,88984,55370],{"class":54857},[36,88986,54864],{"class":42},[36,88988,88989],{"class":38,"line":53},[36,88990,88925],{"class":42},[36,88992,88993],{"class":38,"line":196},[36,88994,88930],{"class":42},[36,88996,88997],{"class":38,"line":642},[36,88998,5899],{"class":42},[36,89000,89001],{"class":38,"line":655},[36,89002,89003],{"class":42},"    \u002F\u002F const ldh = new Star()\n",[36,89005,89006],{"class":38,"line":662},[36,89007,89008],{"class":42},"    \u002F\u002F console.log(Star.prototype)\n",[36,89010,89011],{"class":38,"line":667},[36,89012,89013],{"class":42},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[36,89015,89016],{"class":38,"line":679},[36,89017,659],{"emptyLinePlaceholder":658},[36,89019,89020],{"class":38,"line":685},[36,89021,89022],{"class":42},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[36,89024,89025],{"class":38,"line":691},[36,89026,89027],{"class":42},"    \u002F\u002F Star.prototype.sing = function () {\n",[36,89029,89030],{"class":38,"line":696},[36,89031,89032],{"class":42},"    \u002F\u002F   console.log('唱歌')\n",[36,89034,89035],{"class":38,"line":702},[36,89036,89037],{"class":42},"    \u002F\u002F }\n",[36,89039,89040],{"class":38,"line":708},[36,89041,89042],{"class":42},"    \u002F\u002F Star.prototype.dance = function () {\n",[36,89044,89045],{"class":38,"line":713},[36,89046,89047],{"class":42},"    \u002F\u002F   console.log('跳舞')\n",[36,89049,89050],{"class":38,"line":719},[36,89051,89037],{"class":42},[36,89053,89054],{"class":38,"line":725},[36,89055,88944],{"class":42},[36,89057,89058],{"class":38,"line":731},[36,89059,89060],{"class":42},"    Star.prototype = {\n",[36,89062,89063],{"class":38,"line":736},[36,89064,89065],{"class":42},"      sing: function () {\n",[36,89067,89068],{"class":38,"line":742},[36,89069,89070],{"class":42},"        console.log('唱歌')\n",[36,89072,89073],{"class":38,"line":748},[36,89074,81446],{"class":42},[36,89076,89077],{"class":38,"line":754},[36,89078,89079],{"class":42},"      dance: function () {\n",[36,89081,89082],{"class":38,"line":760},[36,89083,89084],{"class":42},"        console.log('跳舞')\n",[36,89086,89087],{"class":38,"line":766},[36,89088,55955],{"class":42},[36,89090,89091],{"class":38,"line":772},[36,89092,5899],{"class":42},[36,89094,89095],{"class":38,"line":778},[36,89096,88944],{"class":42},[36,89098,89099,89101,89103],{"class":38,"line":783},[36,89100,55974],{"class":42},[36,89102,55370],{"class":54857},[36,89104,54864],{"class":42},[19,89106,89107],{},"进行输出结果后会发现：",[19,89109,89110],{},[5198,89111],{"alt":31,"src":89112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,89114,89115],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,89117,89118],{},"所以，要重新指回创造这个原型对象的构造函数",[26,89120,89122],{"className":74767,"code":89121,"language":74769,"meta":31,"style":31},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[33,89123,89124,89138,89143,89148,89159,89172,89177,89188,89202,89206],{"__ignoreMap":31},[36,89125,89126,89129,89131,89134,89136],{"class":38,"line":39},[36,89127,89128],{"class":112},"Star",[36,89130,842],{"class":42},[36,89132,89133],{"class":112},"prototype",[36,89135,673],{"class":46},[36,89137,19228],{"class":42},[36,89139,89140],{"class":38,"line":53},[36,89141,89142],{"class":3943},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[36,89144,89145],{"class":38,"line":196},[36,89146,89147],{"class":42},"  constructor: Star,\n",[36,89149,89150,89153,89155,89157],{"class":38,"line":642},[36,89151,89152],{"class":101},"  sing",[36,89154,54994],{"class":42},[36,89156,58005],{"class":46},[36,89158,58008],{"class":42},[36,89160,89161,89163,89165,89167,89170],{"class":38,"line":655},[36,89162,77307],{"class":42},[36,89164,61802],{"class":101},[36,89166,495],{"class":42},[36,89168,89169],{"class":105},"'唱歌'",[36,89171,922],{"class":42},[36,89173,89174],{"class":38,"line":662},[36,89175,89176],{"class":42},"   },\n",[36,89178,89179,89182,89184,89186],{"class":38,"line":667},[36,89180,89181],{"class":101},"   dance",[36,89183,54994],{"class":42},[36,89185,58005],{"class":46},[36,89187,58008],{"class":42},[36,89189,89190,89193,89195,89197,89200],{"class":38,"line":679},[36,89191,89192],{"class":42},"     console.",[36,89194,61802],{"class":101},[36,89196,495],{"class":42},[36,89198,89199],{"class":105},"'跳舞'",[36,89201,922],{"class":42},[36,89203,89204],{"class":38,"line":685},[36,89205,8006],{"class":42},[36,89207,89208],{"class":38,"line":691},[36,89209,5300],{"class":42},[19,89211,89212],{},[5198,89213],{"alt":31,"src":89214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,89216,89217],{},"总结1：",[19,89219,89220],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,89222,89223],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,89225,89226],{},"constructor指的是他的来源",[19,89228,89229],{},[5198,89230],{"alt":31,"src":89231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,89233,89234],{},[5198,89235],{"alt":31,"src":89236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,89238,89239],{},"总结2：",[19,89241,89242],{},[5198,89243],{"alt":31,"src":89244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,89246,89247],{},[5198,89248],{"alt":31,"src":89249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,89251,89252],{},[5198,89253],{"alt":31,"src":89254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[318,89256,89258],{"id":89257},"_4134-对象原型","4.13.4 对象原型",[19,89260,89261],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,89263,89264],{},"对象原型就是__proto__这个属性",[19,89266,89267],{},[5198,89268],{"alt":31,"src":89269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,89271,89272],{},[5198,89273],{"alt":31,"src":89274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,89276,89277],{},[5198,89278],{"alt":31,"src":89279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,89281,89282],{},[5198,89283],{"alt":31,"src":89284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[26,89286,89288],{"className":56624,"code":89287,"language":56626,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,89289,89290,89298,89306,89310,89314,89318,89323,89331],{"__ignoreMap":31},[36,89291,89292,89294,89296],{"class":38,"line":39},[36,89293,393],{"class":42},[36,89295,55357],{"class":54857},[36,89297,54864],{"class":42},[36,89299,89300,89302,89304],{"class":38,"line":53},[36,89301,55701],{"class":42},[36,89303,55370],{"class":54857},[36,89305,54864],{"class":42},[36,89307,89308],{"class":38,"line":196},[36,89309,88930],{"class":42},[36,89311,89312],{"class":38,"line":642},[36,89313,5899],{"class":42},[36,89315,89316],{"class":38,"line":655},[36,89317,88939],{"class":42},[36,89319,89320],{"class":38,"line":662},[36,89321,89322],{"class":42},"    console.log(ldh)\n",[36,89324,89325,89327,89329],{"class":38,"line":667},[36,89326,55974],{"class":42},[36,89328,55370],{"class":54857},[36,89330,54864],{"class":42},[36,89332,89333,89335,89337],{"class":38,"line":679},[36,89334,55342],{"class":42},[36,89336,55357],{"class":54857},[36,89338,54864],{"class":42},[19,89340,89341],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,89343,89344],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,89346,89347],{},[5198,89348],{"alt":31,"src":89349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,89351,89352],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,89354,89355],{},"对象原型指向原型对象",[19,89357,89358],{},[5198,89359],{"alt":31,"src":89360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,89362,89363],{},[5198,89364],{"alt":31,"src":89365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,89367,89368],{},[5198,89369],{"alt":31,"src":89370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[318,89372,89374],{"id":89373},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,89376,89377],{},[5198,89378],{"alt":31,"src":89379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[211,89381,89382,89385,89388,89391],{},[214,89383,89384],{},"构造函数通过new的形式实例化得到实例对象",[214,89386,89387],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[214,89389,89390],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[214,89392,89393],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,89395,89396],{},[5198,89397],{"alt":31,"src":89398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,89400,89401],{},"题目梳理：",[19,89403,89404],{},[5198,89405],{"alt":31,"src":89406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[318,89408,89410],{"id":89409},"_4136-原型继承","4.13.6 原型继承",[19,89412,89413],{},[5198,89414],{"alt":31,"src":89415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,89417,89418],{},[5198,89419],{"alt":31,"src":89420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,89422,89423],{},[5198,89424],{"alt":31,"src":89425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,89427,89428],{},[5198,89429],{"alt":31,"src":89430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,89432,89433],{},[5198,89434],{"alt":31,"src":89435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,89437,89438],{},[5198,89439],{"alt":31,"src":89440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,89442,89443],{},[5198,89444],{"alt":31,"src":89445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,89447,89448],{},[5198,89449],{"alt":31,"src":89450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,89452,89453],{},"回顾：构造函数每次new得到对象都是不同的",[318,89455,89457],{"id":89456},"_4137-原型链","4.13.7 原型链",[19,89459,89460],{},[5198,89461],{"alt":31,"src":89462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,89464,89465],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,89467,89468],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,89470,89471],{},"大哥是Object",[19,89473,89474],{},[5198,89475],{"alt":31,"src":89476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,89478,89479],{},[5198,89480],{"alt":31,"src":89481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,89483,89484],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,89486,89487],{},"万物皆对象",[318,89489,89491],{"id":89490},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,89493,89494],{},"模态框",[19,89496,89497],{},"以后遇见这个效果直接使用这个就行",[19,89499,89500],{},[5198,89501],{"alt":31,"src":89502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,89504,89505],{},[5198,89506],{"alt":31,"src":89507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,89509,89510],{},[5198,89511],{"alt":31,"src":89512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,89514,89515],{},[5198,89516],{"alt":31,"src":89517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,89519,89520],{},"补充知识点：",[211,89522,89523],{},[214,89524,89525],{},"append()",[19,89527,89528],{},[5198,89529],{"alt":31,"src":89530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[26,89532,89534],{"className":54190,"code":89533,"language":54192,"meta":31,"style":31},"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",[33,89535,89536,89541,89546,89551,89555,89559,89563,89568,89573,89578,89582],{"__ignoreMap":31},[36,89537,89538],{"class":38,"line":39},[36,89539,89540],{"class":42},"append(param1)\n",[36,89542,89543],{"class":38,"line":53},[36,89544,89545],{"class":42},"append(param1, param2)\n",[36,89547,89548],{"class":38,"line":196},[36,89549,89550],{"class":42},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[36,89552,89553],{"class":38,"line":642},[36,89554,659],{"emptyLinePlaceholder":658},[36,89556,89557],{"class":38,"line":655},[36,89558,659],{"emptyLinePlaceholder":658},[36,89560,89561],{"class":38,"line":662},[36,89562,659],{"emptyLinePlaceholder":658},[36,89564,89565],{"class":38,"line":667},[36,89566,89567],{"class":42},"let div = document.createElement(\"div\");\n",[36,89569,89570],{"class":38,"line":679},[36,89571,89572],{"class":42},"let p = document.createElement(\"p\");\n",[36,89574,89575],{"class":38,"line":685},[36,89576,89577],{"class":42},"div.append(p);\n",[36,89579,89580],{"class":38,"line":691},[36,89581,659],{"emptyLinePlaceholder":658},[36,89583,89584,89587,89589],{"class":38,"line":696},[36,89585,89586],{"class":42},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[36,89588,19],{"class":54857},[36,89590,89591],{"class":42},"> ]\n",[211,89593,89594],{"start":53},[214,89595,89596],{},"remove()",[19,89598,89599],{},"自己删自己",[19,89601,89602],{},[5198,89603],{"alt":31,"src":89604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[26,89606,89608],{"className":54190,"code":89607,"language":54192,"meta":31,"style":31},"\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",[33,89609,89610,89620,89634,89638,89646,89660,89680,89692,89700,89707,89719,89732,89766,89778,89789,89801,89813,89825,89852,89862,89866,89870,89879,89891,89905,89915,89927,89931,89935,89945,89956,89966,89976,89989,90002,90012,90016,90020,90029,90039,90051,90055,90059,90068,90078,90088,90100,90104,90108,90118,90134,90145,90155,90165,90177,90189,90201,90205,90209,90222,90233,90237,90245,90253,90257,90265,90285,90305,90313,90318,90344,90349,90354,90373,90378,90390,90395,90406,90416,90426,90431,90436,90440,90445,90450,90455,90475,90480,90500,90505,90519,90524,90529,90534,90550,90554,90559,90588,90593,90598,90603,90614,90618,90622,90626,90631,90656,90661,90686,90691,90700,90704,90709,90734,90738,90763,90767,90776,90780,90785,90803,90813,90817,90825,90833,90837],{"__ignoreMap":31},[36,89611,89612,89614,89616,89618],{"class":38,"line":39},[36,89613,54854],{"class":42},[36,89615,54858],{"class":54857},[36,89617,54861],{"class":101},[36,89619,54864],{"class":42},[36,89621,89622,89624,89626,89628,89630,89632],{"class":38,"line":53},[36,89623,393],{"class":42},[36,89625,54192],{"class":54857},[36,89627,54873],{"class":101},[36,89629,47],{"class":42},[36,89631,54878],{"class":105},[36,89633,54864],{"class":42},[36,89635,89636],{"class":38,"line":196},[36,89637,659],{"emptyLinePlaceholder":658},[36,89639,89640,89642,89644],{"class":38,"line":642},[36,89641,393],{"class":42},[36,89643,54891],{"class":54857},[36,89645,54864],{"class":42},[36,89647,89648,89650,89652,89654,89656,89658],{"class":38,"line":655},[36,89649,55701],{"class":42},[36,89651,54901],{"class":54857},[36,89653,54904],{"class":101},[36,89655,47],{"class":42},[36,89657,54909],{"class":105},[36,89659,54864],{"class":42},[36,89661,89662,89664,89666,89668,89670,89672,89674,89676,89678],{"class":38,"line":662},[36,89663,55701],{"class":42},[36,89665,54901],{"class":54857},[36,89667,18576],{"class":101},[36,89669,47],{"class":42},[36,89671,54948],{"class":105},[36,89673,54928],{"class":101},[36,89675,47],{"class":42},[36,89677,54955],{"class":105},[36,89679,54864],{"class":42},[36,89681,89682,89684,89686,89688,89690],{"class":38,"line":667},[36,89683,55701],{"class":42},[36,89685,54964],{"class":54857},[36,89687,54967],{"class":42},[36,89689,54964],{"class":54857},[36,89691,54864],{"class":42},[36,89693,89694,89696,89698],{"class":38,"line":679},[36,89695,55701],{"class":42},[36,89697,3785],{"class":54857},[36,89699,54864],{"class":42},[36,89701,89702,89705],{"class":38,"line":685},[36,89703,89704],{"class":101},"    .modal",[36,89706,19228],{"class":42},[36,89708,89709,89711,89713,89715,89717],{"class":38,"line":691},[36,89710,58327],{"class":112},[36,89712,54994],{"class":42},[36,89714,7671],{"class":112},[36,89716,55049],{"class":46},[36,89718,5029],{"class":42},[36,89720,89721,89724,89726,89728,89730],{"class":38,"line":696},[36,89722,89723],{"class":112},"      min-height",[36,89725,54994],{"class":42},[36,89727,4186],{"class":112},[36,89729,55049],{"class":46},[36,89731,5029],{"class":42},[36,89733,89734,89736,89738,89740,89742,89744,89746,89748,89750,89752,89754,89756,89758,89760,89762,89764],{"class":38,"line":702},[36,89735,82304],{"class":112},[36,89737,54994],{"class":42},[36,89739,1859],{"class":112},[36,89741,1004],{"class":112},[36,89743,5750],{"class":112},[36,89745,55049],{"class":46},[36,89747,82321],{"class":112},[36,89749,495],{"class":42},[36,89751,1859],{"class":112},[36,89753,478],{"class":42},[36,89755,1859],{"class":112},[36,89757,478],{"class":42},[36,89759,1859],{"class":112},[36,89761,478],{"class":42},[36,89763,1463],{"class":112},[36,89765,6422],{"class":42},[36,89767,89768,89770,89772,89774,89776],{"class":38,"line":708},[36,89769,58690],{"class":112},[36,89771,54994],{"class":42},[36,89773,4168],{"class":112},[36,89775,55049],{"class":46},[36,89777,5029],{"class":42},[36,89779,89780,89782,89784,89787],{"class":38,"line":713},[36,89781,58315],{"class":112},[36,89783,54994],{"class":42},[36,89785,89786],{"class":112},"fixed",[36,89788,5029],{"class":42},[36,89790,89791,89794,89796,89799],{"class":38,"line":719},[36,89792,89793],{"class":112},"      z-index",[36,89795,54994],{"class":42},[36,89797,89798],{"class":112},"999",[36,89800,5029],{"class":42},[36,89802,89803,89805,89807,89809,89811],{"class":38,"line":725},[36,89804,58394],{"class":112},[36,89806,54994],{"class":42},[36,89808,4527],{"class":112},[36,89810,4203],{"class":46},[36,89812,5029],{"class":42},[36,89814,89815,89817,89819,89821,89823],{"class":38,"line":731},[36,89816,58503],{"class":112},[36,89818,54994],{"class":42},[36,89820,4527],{"class":112},[36,89822,4203],{"class":46},[36,89824,5029],{"class":42},[36,89826,89827,89829,89831,89833,89835,89838,89840,89842,89844,89846,89848,89850],{"class":38,"line":736},[36,89828,82345],{"class":112},[36,89830,54994],{"class":42},[36,89832,82350],{"class":112},[36,89834,495],{"class":42},[36,89836,89837],{"class":112},"-50",[36,89839,4203],{"class":46},[36,89841,478],{"class":42},[36,89843,89837],{"class":112},[36,89845,4203],{"class":46},[36,89847,478],{"class":42},[36,89849,1859],{"class":112},[36,89851,6422],{"class":42},[36,89853,89854,89856,89858,89860],{"class":38,"line":742},[36,89855,58440],{"class":112},[36,89857,54994],{"class":42},[36,89859,64397],{"class":112},[36,89861,5029],{"class":42},[36,89863,89864],{"class":38,"line":748},[36,89865,5899],{"class":42},[36,89867,89868],{"class":38,"line":754},[36,89869,659],{"emptyLinePlaceholder":658},[36,89871,89872,89874,89877],{"class":38,"line":760},[36,89873,89704],{"class":101},[36,89875,89876],{"class":101}," .header",[36,89878,19228],{"class":42},[36,89880,89881,89883,89885,89887,89889],{"class":38,"line":766},[36,89882,60914],{"class":112},[36,89884,54994],{"class":42},[36,89886,4276],{"class":112},[36,89888,55049],{"class":46},[36,89890,5029],{"class":42},[36,89892,89893,89895,89897,89899,89901,89903],{"class":38,"line":772},[36,89894,58251],{"class":112},[36,89896,54994],{"class":42},[36,89898,1859],{"class":112},[36,89900,5750],{"class":112},[36,89902,55049],{"class":46},[36,89904,5029],{"class":42},[36,89906,89907,89909,89911,89913],{"class":38,"line":778},[36,89908,58315],{"class":112},[36,89910,54994],{"class":42},[36,89912,58320],{"class":112},[36,89914,5029],{"class":42},[36,89916,89917,89919,89921,89923,89925],{"class":38,"line":783},[36,89918,58478],{"class":112},[36,89920,54994],{"class":42},[36,89922,1921],{"class":112},[36,89924,55049],{"class":46},[36,89926,5029],{"class":42},[36,89928,89929],{"class":38,"line":789},[36,89930,5899],{"class":42},[36,89932,89933],{"class":38,"line":795},[36,89934,659],{"emptyLinePlaceholder":658},[36,89936,89937,89939,89941,89943],{"class":38,"line":801},[36,89938,89704],{"class":101},[36,89940,89876],{"class":101},[36,89942,6734],{"class":54857},[36,89944,19228],{"class":42},[36,89946,89947,89950,89952,89954],{"class":38,"line":807},[36,89948,89949],{"class":112},"      font-style",[36,89951,54994],{"class":42},[36,89953,67396],{"class":112},[36,89955,5029],{"class":42},[36,89957,89958,89960,89962,89964],{"class":38,"line":813},[36,89959,60971],{"class":112},[36,89961,54994],{"class":42},[36,89963,65625],{"class":112},[36,89965,5029],{"class":42},[36,89967,89968,89970,89972,89974],{"class":38,"line":819},[36,89969,58315],{"class":112},[36,89971,54994],{"class":42},[36,89973,58387],{"class":112},[36,89975,5029],{"class":42},[36,89977,89978,89981,89983,89985,89987],{"class":38,"line":824},[36,89979,89980],{"class":112},"      right",[36,89982,54994],{"class":42},[36,89984,4446],{"class":112},[36,89986,55049],{"class":46},[36,89988,5029],{"class":42},[36,89990,89991,89993,89995,89998,90000],{"class":38,"line":829},[36,89992,58503],{"class":112},[36,89994,54994],{"class":42},[36,89996,89997],{"class":112},"-2",[36,89999,55049],{"class":46},[36,90001,5029],{"class":42},[36,90003,90004,90006,90008,90010],{"class":38,"line":851},[36,90005,65580],{"class":112},[36,90007,54994],{"class":42},[36,90009,65585],{"class":112},[36,90011,5029],{"class":42},[36,90013,90014],{"class":38,"line":868},[36,90015,5899],{"class":42},[36,90017,90018],{"class":38,"line":873},[36,90019,659],{"emptyLinePlaceholder":658},[36,90021,90022,90024,90027],{"class":38,"line":891},[36,90023,89704],{"class":101},[36,90025,90026],{"class":101}," .body",[36,90028,19228],{"class":42},[36,90030,90031,90033,90035,90037],{"class":38,"line":906},[36,90032,60841],{"class":112},[36,90034,54994],{"class":42},[36,90036,55149],{"class":112},[36,90038,5029],{"class":42},[36,90040,90041,90043,90045,90047,90049],{"class":38,"line":925},[36,90042,58251],{"class":112},[36,90044,54994],{"class":42},[36,90046,554],{"class":112},[36,90048,55049],{"class":46},[36,90050,5029],{"class":42},[36,90052,90053],{"class":38,"line":943},[36,90054,5899],{"class":42},[36,90056,90057],{"class":38,"line":948},[36,90058,659],{"emptyLinePlaceholder":658},[36,90060,90061,90063,90066],{"class":38,"line":971},[36,90062,89704],{"class":101},[36,90064,90065],{"class":101}," .footer",[36,90067,19228],{"class":42},[36,90069,90070,90072,90074,90076],{"class":38,"line":992},[36,90071,58565],{"class":112},[36,90073,54994],{"class":42},[36,90075,55034],{"class":112},[36,90077,5029],{"class":42},[36,90079,90080,90082,90084,90086],{"class":38,"line":1020},[36,90081,58576],{"class":112},[36,90083,54994],{"class":42},[36,90085,55137],{"class":112},[36,90087,5029],{"class":42},[36,90089,90090,90092,90094,90096,90098],{"class":38,"line":1036},[36,90091,58251],{"class":112},[36,90093,54994],{"class":42},[36,90095,554],{"class":112},[36,90097,55049],{"class":46},[36,90099,5029],{"class":42},[36,90101,90102],{"class":38,"line":1041},[36,90103,5899],{"class":42},[36,90105,90106],{"class":38,"line":1052},[36,90107,659],{"emptyLinePlaceholder":658},[36,90109,90110,90112,90114,90116],{"class":38,"line":1065},[36,90111,89704],{"class":101},[36,90113,90065],{"class":101},[36,90115,5134],{"class":54857},[36,90117,19228],{"class":42},[36,90119,90120,90122,90124,90126,90128,90130,90132],{"class":38,"line":1077},[36,90121,58251],{"class":112},[36,90123,54994],{"class":42},[36,90125,1982],{"class":112},[36,90127,55049],{"class":46},[36,90129,5795],{"class":112},[36,90131,55049],{"class":46},[36,90133,5029],{"class":42},[36,90135,90136,90138,90140,90143],{"class":38,"line":1082},[36,90137,65276],{"class":112},[36,90139,54994],{"class":42},[36,90141,90142],{"class":112},"#ccc",[36,90144,5029],{"class":42},[36,90146,90147,90149,90151,90153],{"class":38,"line":1125},[36,90148,67525],{"class":112},[36,90150,54994],{"class":42},[36,90152,58293],{"class":112},[36,90154,5029],{"class":42},[36,90156,90157,90159,90161,90163],{"class":38,"line":1164},[36,90158,60971],{"class":112},[36,90160,54994],{"class":42},[36,90162,64397],{"class":112},[36,90164,5029],{"class":42},[36,90166,90167,90169,90171,90173,90175],{"class":38,"line":1169},[36,90168,58690],{"class":112},[36,90170,54994],{"class":42},[36,90172,498],{"class":112},[36,90174,55049],{"class":46},[36,90176,5029],{"class":42},[36,90178,90179,90181,90183,90185,90187],{"class":38,"line":1180},[36,90180,65305],{"class":112},[36,90182,54994],{"class":42},[36,90184,554],{"class":112},[36,90186,55049],{"class":46},[36,90188,5029],{"class":42},[36,90190,90191,90193,90195,90197,90199],{"class":38,"line":1198},[36,90192,58478],{"class":112},[36,90194,54994],{"class":42},[36,90196,4421],{"class":112},[36,90198,55049],{"class":46},[36,90200,5029],{"class":42},[36,90202,90203],{"class":38,"line":1215},[36,90204,5899],{"class":42},[36,90206,90207],{"class":38,"line":1236},[36,90208,659],{"emptyLinePlaceholder":658},[36,90210,90211,90213,90215,90217,90220],{"class":38,"line":1245},[36,90212,89704],{"class":101},[36,90214,90065],{"class":101},[36,90216,5134],{"class":54857},[36,90218,90219],{"class":101},".submit",[36,90221,19228],{"class":42},[36,90223,90224,90226,90228,90231],{"class":38,"line":1250},[36,90225,58440],{"class":112},[36,90227,54994],{"class":42},[36,90229,90230],{"class":112},"#369",[36,90232,5029],{"class":42},[36,90234,90235],{"class":38,"line":1265},[36,90236,5899],{"class":42},[36,90238,90239,90241,90243],{"class":38,"line":1281},[36,90240,55974],{"class":42},[36,90242,3785],{"class":54857},[36,90244,54864],{"class":42},[36,90246,90247,90249,90251],{"class":38,"line":1297},[36,90248,55342],{"class":42},[36,90250,54891],{"class":54857},[36,90252,54864],{"class":42},[36,90254,90255],{"class":38,"line":1314},[36,90256,659],{"emptyLinePlaceholder":658},[36,90258,90259,90261,90263],{"class":38,"line":1336},[36,90260,393],{"class":42},[36,90262,55357],{"class":54857},[36,90264,54864],{"class":42},[36,90266,90267,90269,90271,90273,90275,90278,90281,90283],{"class":38,"line":1356},[36,90268,55701],{"class":42},[36,90270,57444],{"class":54857},[36,90272,18615],{"class":101},[36,90274,47],{"class":42},[36,90276,90277],{"class":105},"\"delete\"",[36,90279,90280],{"class":42},">删除\u003C\u002F",[36,90282,57444],{"class":54857},[36,90284,54864],{"class":42},[36,90286,90287,90289,90291,90293,90295,90298,90301,90303],{"class":38,"line":1361},[36,90288,55701],{"class":42},[36,90290,57444],{"class":54857},[36,90292,18615],{"class":101},[36,90294,47],{"class":42},[36,90296,90297],{"class":105},"\"login\"",[36,90299,90300],{"class":42},">登录\u003C\u002F",[36,90302,57444],{"class":54857},[36,90304,54864],{"class":42},[36,90306,90307,90309,90311],{"class":38,"line":1407},[36,90308,55701],{"class":42},[36,90310,55370],{"class":54857},[36,90312,54864],{"class":42},[36,90314,90315],{"class":38,"line":1423},[36,90316,90317],{"class":3943},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[36,90319,90320,90322,90325,90327,90329,90331,90333,90335,90338,90340,90342],{"class":38,"line":1439},[36,90321,73638],{"class":46},[36,90323,90324],{"class":101}," Modal",[36,90326,495],{"class":42},[36,90328,54964],{"class":468},[36,90330,673],{"class":46},[36,90332,73485],{"class":105},[36,90334,478],{"class":42},[36,90336,90337],{"class":468},"message",[36,90339,673],{"class":46},[36,90341,73485],{"class":105},[36,90343,16102],{"class":42},[36,90345,90346],{"class":38,"line":1444},[36,90347,90348],{"class":3943},"      \u002F\u002F 创建Model 模态框盒子\n",[36,90350,90351],{"class":38,"line":1486},[36,90352,90353],{"class":3943},"      \u002F\u002F 1.1 创建div标签\n",[36,90355,90356,90358,90361,90363,90365,90367,90369,90371],{"class":38,"line":1499},[36,90357,73606],{"class":112},[36,90359,90360],{"class":42},".modalBox ",[36,90362,47],{"class":46},[36,90364,57953],{"class":42},[36,90366,73705],{"class":101},[36,90368,495],{"class":42},[36,90370,85485],{"class":105},[36,90372,922],{"class":42},[36,90374,90375],{"class":38,"line":1513},[36,90376,90377],{"class":3943},"      \u002F\u002F 1.2 给div 添加类名为model\n",[36,90379,90380,90382,90385,90387],{"class":38,"line":1518},[36,90381,73606],{"class":112},[36,90383,90384],{"class":42},".modalBox.className ",[36,90386,47],{"class":46},[36,90388,90389],{"class":105}," 'modal'\n",[36,90391,90392],{"class":38,"line":1529},[36,90393,90394],{"class":3943},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[36,90396,90397,90399,90402,90404],{"class":38,"line":1539},[36,90398,73606],{"class":112},[36,90400,90401],{"class":42},".modalBox.innerHTML ",[36,90403,47],{"class":46},[36,90405,73722],{"class":105},[36,90407,90408,90411,90413],{"class":38,"line":1544},[36,90409,90410],{"class":105},"        \u003Cdiv class=\"header\">${",[36,90412,54964],{"class":42},[36,90414,90415],{"class":105},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[36,90417,90418,90421,90423],{"class":38,"line":1555},[36,90419,90420],{"class":105},"        \u003Cdiv class=\"body\">${",[36,90422,90337],{"class":42},[36,90424,90425],{"class":105},"}\u003C\u002Fdiv>\n",[36,90427,90428],{"class":38,"line":1572},[36,90429,90430],{"class":105},"      `\n",[36,90432,90433],{"class":38,"line":1592},[36,90434,90435],{"class":3943},"      \u002F\u002F console.log(this.modalBox)\n",[36,90437,90438],{"class":38,"line":1597},[36,90439,5899],{"class":42},[36,90441,90442],{"class":38,"line":1610},[36,90443,90444],{"class":3943},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[36,90446,90447],{"class":38,"line":1632},[36,90448,90449],{"class":3943},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[36,90451,90452],{"class":38,"line":1646},[36,90453,90454],{"class":3943},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[36,90456,90457,90460,90462,90464,90466,90469,90471,90473],{"class":38,"line":1651},[36,90458,90459],{"class":112},"    Modal",[36,90461,842],{"class":42},[36,90463,89133],{"class":112},[36,90465,842],{"class":42},[36,90467,90468],{"class":101},"open",[36,90470,673],{"class":46},[36,90472,62473],{"class":46},[36,90474,58008],{"class":42},[36,90476,90477],{"class":38,"line":1664},[36,90478,90479],{"class":3943},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[36,90481,90482,90484,90487,90489,90491,90493,90495,90498],{"class":38,"line":1669},[36,90483,61783],{"class":46},[36,90485,90486],{"class":112}," box",[36,90488,673],{"class":46},[36,90490,57953],{"class":42},[36,90492,57956],{"class":101},[36,90494,495],{"class":42},[36,90496,90497],{"class":105},"'.modal'",[36,90499,922],{"class":42},[36,90501,90502],{"class":38,"line":1681},[36,90503,90504],{"class":3943},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[36,90506,90507,90510,90512,90515,90517],{"class":38,"line":1694},[36,90508,90509],{"class":42},"      box ",[36,90511,5438],{"class":46},[36,90513,90514],{"class":42}," box.",[36,90516,60561],{"class":101},[36,90518,903],{"class":42},[36,90520,90521],{"class":38,"line":1699},[36,90522,90523],{"class":3943},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[36,90525,90526],{"class":38,"line":1714},[36,90527,90528],{"class":3943},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[36,90530,90531],{"class":38,"line":1729},[36,90532,90533],{"class":3943},"      \u002F\u002F append可以增加对象\n",[36,90535,90536,90539,90542,90544,90547],{"class":38,"line":1746},[36,90537,90538],{"class":42},"      document.body.",[36,90540,90541],{"class":101},"append",[36,90543,495],{"class":42},[36,90545,90546],{"class":112},"this",[36,90548,90549],{"class":42},".modalBox)\n",[36,90551,90552],{"class":38,"line":1751},[36,90553,659],{"emptyLinePlaceholder":658},[36,90555,90556],{"class":38,"line":1765},[36,90557,90558],{"class":3943},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[36,90560,90561,90563,90566,90568,90570,90573,90575,90577,90579,90581,90584,90586],{"class":38,"line":1783},[36,90562,73606],{"class":112},[36,90564,90565],{"class":42},".modalBox.",[36,90567,57956],{"class":101},[36,90569,495],{"class":42},[36,90571,90572],{"class":105},"'i'",[36,90574,34423],{"class":42},[36,90576,61368],{"class":101},[36,90578,495],{"class":42},[36,90580,61373],{"class":105},[36,90582,90583],{"class":42},", () ",[36,90585,88276],{"class":46},[36,90587,19228],{"class":42},[36,90589,90590],{"class":38,"line":1799},[36,90591,90592],{"class":3943},"        \u002F\u002F 这个地方需要用到箭头函数\n",[36,90594,90595],{"class":38,"line":1807},[36,90596,90597],{"class":3943},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[36,90599,90600],{"class":38,"line":1812},[36,90601,90602],{"class":3943},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[36,90604,90605,90607,90609,90612],{"class":38,"line":1817},[36,90606,68281],{"class":112},[36,90608,842],{"class":42},[36,90610,90611],{"class":101},"close",[36,90613,903],{"class":42},[36,90615,90616],{"class":38,"line":1833},[36,90617,68370],{"class":42},[36,90619,90620],{"class":38,"line":1844},[36,90621,5899],{"class":42},[36,90623,90624],{"class":38,"line":1864},[36,90625,659],{"emptyLinePlaceholder":658},[36,90627,90628],{"class":38,"line":1878},[36,90629,90630],{"class":3943},"    \u002F\u002F 测试一下 点击 删除按钮\n",[36,90632,90633,90635,90637,90639,90642,90644,90646,90648,90650,90652,90654],{"class":38,"line":1891},[36,90634,55964],{"class":42},[36,90636,57956],{"class":101},[36,90638,495],{"class":42},[36,90640,90641],{"class":105},"'#delete'",[36,90643,34423],{"class":42},[36,90645,61368],{"class":101},[36,90647,495],{"class":42},[36,90649,61373],{"class":105},[36,90651,90583],{"class":42},[36,90653,88276],{"class":46},[36,90655,19228],{"class":42},[36,90657,90658],{"class":38,"line":1896},[36,90659,90660],{"class":3943},"      \u002F\u002F 先调用Model构造函数\n",[36,90662,90663,90665,90668,90670,90672,90674,90676,90679,90681,90684],{"class":38,"line":1906},[36,90664,61783],{"class":46},[36,90666,90667],{"class":112}," del",[36,90669,673],{"class":46},[36,90671,15239],{"class":46},[36,90673,90324],{"class":101},[36,90675,495],{"class":42},[36,90677,90678],{"class":105},"'温馨的提示'",[36,90680,478],{"class":42},[36,90682,90683],{"class":105},"'您没有删除权限操作'",[36,90685,922],{"class":42},[36,90687,90688],{"class":38,"line":1926},[36,90689,90690],{"class":3943},"      \u002F\u002F 实例对象调用open方法\n",[36,90692,90693,90696,90698],{"class":38,"line":1936},[36,90694,90695],{"class":42},"      del.",[36,90697,90468],{"class":101},[36,90699,903],{"class":42},[36,90701,90702],{"class":38,"line":1946},[36,90703,37021],{"class":42},[36,90705,90706],{"class":38,"line":1957},[36,90707,90708],{"class":3943},"    \u002F\u002F 测试一下 点击 登录按钮\n",[36,90710,90711,90713,90715,90717,90720,90722,90724,90726,90728,90730,90732],{"class":38,"line":2008},[36,90712,55964],{"class":42},[36,90714,57956],{"class":101},[36,90716,495],{"class":42},[36,90718,90719],{"class":105},"'#login'",[36,90721,34423],{"class":42},[36,90723,61368],{"class":101},[36,90725,495],{"class":42},[36,90727,61373],{"class":105},[36,90729,90583],{"class":42},[36,90731,88276],{"class":46},[36,90733,19228],{"class":42},[36,90735,90736],{"class":38,"line":2022},[36,90737,90660],{"class":3943},[36,90739,90740,90742,90745,90747,90749,90751,90753,90756,90758,90761],{"class":38,"line":2028},[36,90741,61783],{"class":46},[36,90743,90744],{"class":112}," log",[36,90746,673],{"class":46},[36,90748,15239],{"class":46},[36,90750,90324],{"class":101},[36,90752,495],{"class":42},[36,90754,90755],{"class":105},"'友情提示'",[36,90757,478],{"class":42},[36,90759,90760],{"class":105},"'您还没有登录呢'",[36,90762,922],{"class":42},[36,90764,90765],{"class":38,"line":2033},[36,90766,90690],{"class":3943},[36,90768,90769,90772,90774],{"class":38,"line":2054},[36,90770,90771],{"class":42},"      log.",[36,90773,90468],{"class":101},[36,90775,903],{"class":42},[36,90777,90778],{"class":38,"line":2059},[36,90779,37021],{"class":42},[36,90781,90782],{"class":38,"line":2064},[36,90783,90784],{"class":3943},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[36,90786,90787,90789,90791,90793,90795,90797,90799,90801],{"class":38,"line":2081},[36,90788,90459],{"class":112},[36,90790,842],{"class":42},[36,90792,89133],{"class":112},[36,90794,842],{"class":42},[36,90796,90611],{"class":101},[36,90798,673],{"class":46},[36,90800,62473],{"class":46},[36,90802,58008],{"class":42},[36,90804,90805,90807,90809,90811],{"class":38,"line":36396},[36,90806,73606],{"class":112},[36,90808,90565],{"class":42},[36,90810,60561],{"class":101},[36,90812,903],{"class":42},[36,90814,90815],{"class":38,"line":36402},[36,90816,5899],{"class":42},[36,90818,90819,90821,90823],{"class":38,"line":36411},[36,90820,55974],{"class":42},[36,90822,55370],{"class":54857},[36,90824,54864],{"class":42},[36,90826,90827,90829,90831],{"class":38,"line":36417},[36,90828,55342],{"class":42},[36,90830,55357],{"class":54857},[36,90832,54864],{"class":42},[36,90834,90835],{"class":38,"line":36426},[36,90836,659],{"emptyLinePlaceholder":658},[36,90838,90839,90841,90843],{"class":38,"line":36432},[36,90840,55342],{"class":42},[36,90842,54192],{"class":54857},[36,90844,54864],{"class":42},[19,90846,90847],{},[5198,90848],{"alt":31,"src":90849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,90851,90853],{"id":90852},"_414-深浅拷贝","4.14 深浅拷贝",[318,90855,90857],{"id":90856},"_4141-浅拷贝","4.14.1 浅拷贝",[19,90859,90860],{},[5198,90861],{"alt":31,"src":90862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,90864,90865],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,90867,90868],{},[5198,90869],{"alt":31,"src":90870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,90872,90873],{},[5198,90874],{"alt":31,"src":90875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,90877,90878],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,90880,90881],{},[5198,90882],{"alt":31,"src":90883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,90885,14993],{},[19,90887,90888],{},[5198,90889],{"alt":31,"src":90890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[318,90892,90894],{"id":90893},"_4142-深拷贝","4.14.2 深拷贝",[19,90896,90897],{},"深拷贝：拷贝的是对象，不是地址",[19,90899,90900],{},"常用的三种方法：",[211,90902,90903,90906,90909],{},[214,90904,90905],{},"通过递归实现深拷贝",[214,90907,90908],{},"lodash\u002FcloneDeep",[214,90910,90911],{},"通过JSON.stringify()实现",[25619,90913,90915],{"id":90914},"_41421-递归函数","4.14.2.1 递归函数",[19,90917,90918],{},[5198,90919],{"alt":31,"src":90920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[211,90922,90923],{},[214,90924,90925],{},"死递归占溢出：",[26,90927,90929],{"className":56624,"code":90928,"language":56626,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,90930,90931,90939,90947,90951,90956,90960,90965,90973],{"__ignoreMap":31},[36,90932,90933,90935,90937],{"class":38,"line":39},[36,90934,393],{"class":42},[36,90936,55357],{"class":54857},[36,90938,54864],{"class":42},[36,90940,90941,90943,90945],{"class":38,"line":53},[36,90942,55701],{"class":42},[36,90944,55370],{"class":54857},[36,90946,54864],{"class":42},[36,90948,90949],{"class":38,"line":196},[36,90950,80697],{"class":42},[36,90952,90953],{"class":38,"line":642},[36,90954,90955],{"class":42},"      fn()\n",[36,90957,90958],{"class":38,"line":655},[36,90959,5899],{"class":42},[36,90961,90962],{"class":38,"line":662},[36,90963,90964],{"class":42},"    fn()\n",[36,90966,90967,90969,90971],{"class":38,"line":667},[36,90968,55974],{"class":42},[36,90970,55370],{"class":54857},[36,90972,54864],{"class":42},[36,90974,90975,90977,90979],{"class":38,"line":679},[36,90976,55342],{"class":42},[36,90978,55357],{"class":54857},[36,90980,54864],{"class":42},[211,90982,90983],{"start":53},[214,90984,90985],{},"递归函数要加判断条件：",[19,90987,90988],{},[5198,90989],{"alt":31,"src":90990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[211,90992,90993],{"start":196},[214,90994,90995],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[26,90997,90999],{"className":54190,"code":90998,"language":54192,"meta":31,"style":31},"\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",[33,91000,91001,91011,91025,91029,91037,91051,91071,91083,91091,91095,91103,91115,91123,91131,91156,91168,91172,91179,91187,91195,91199],{"__ignoreMap":31},[36,91002,91003,91005,91007,91009],{"class":38,"line":39},[36,91004,54854],{"class":42},[36,91006,54858],{"class":54857},[36,91008,54861],{"class":101},[36,91010,54864],{"class":42},[36,91012,91013,91015,91017,91019,91021,91023],{"class":38,"line":53},[36,91014,393],{"class":42},[36,91016,54192],{"class":54857},[36,91018,54873],{"class":101},[36,91020,47],{"class":42},[36,91022,54878],{"class":105},[36,91024,54864],{"class":42},[36,91026,91027],{"class":38,"line":196},[36,91028,659],{"emptyLinePlaceholder":658},[36,91030,91031,91033,91035],{"class":38,"line":642},[36,91032,393],{"class":42},[36,91034,54891],{"class":54857},[36,91036,54864],{"class":42},[36,91038,91039,91041,91043,91045,91047,91049],{"class":38,"line":655},[36,91040,55701],{"class":42},[36,91042,54901],{"class":54857},[36,91044,54904],{"class":101},[36,91046,47],{"class":42},[36,91048,54909],{"class":105},[36,91050,54864],{"class":42},[36,91052,91053,91055,91057,91059,91061,91063,91065,91067,91069],{"class":38,"line":662},[36,91054,55701],{"class":42},[36,91056,54901],{"class":54857},[36,91058,18576],{"class":101},[36,91060,47],{"class":42},[36,91062,54948],{"class":105},[36,91064,54928],{"class":101},[36,91066,47],{"class":42},[36,91068,54955],{"class":105},[36,91070,54864],{"class":42},[36,91072,91073,91075,91077,91079,91081],{"class":38,"line":667},[36,91074,55701],{"class":42},[36,91076,54964],{"class":54857},[36,91078,54967],{"class":42},[36,91080,54964],{"class":54857},[36,91082,54864],{"class":42},[36,91084,91085,91087,91089],{"class":38,"line":679},[36,91086,55342],{"class":42},[36,91088,54891],{"class":54857},[36,91090,54864],{"class":42},[36,91092,91093],{"class":38,"line":685},[36,91094,659],{"emptyLinePlaceholder":658},[36,91096,91097,91099,91101],{"class":38,"line":691},[36,91098,393],{"class":42},[36,91100,55357],{"class":54857},[36,91102,54864],{"class":42},[36,91104,91105,91107,91109,91111,91113],{"class":38,"line":696},[36,91106,55701],{"class":42},[36,91108,55168],{"class":54857},[36,91110,58870],{"class":42},[36,91112,55168],{"class":54857},[36,91114,54864],{"class":42},[36,91116,91117,91119,91121],{"class":38,"line":702},[36,91118,55701],{"class":42},[36,91120,55370],{"class":54857},[36,91122,54864],{"class":42},[36,91124,91125,91127,91129],{"class":38,"line":708},[36,91126,73638],{"class":46},[36,91128,77327],{"class":101},[36,91130,14514],{"class":42},[36,91132,91133,91135,91137,91139,91141,91143,91145,91147,91149,91151,91154],{"class":38,"line":713},[36,91134,59326],{"class":42},[36,91136,57956],{"class":101},[36,91138,495],{"class":42},[36,91140,85485],{"class":105},[36,91142,77803],{"class":42},[36,91144,47],{"class":46},[36,91146,15239],{"class":46},[36,91148,77343],{"class":101},[36,91150,897],{"class":42},[36,91152,91153],{"class":101},"toLocaleString",[36,91155,903],{"class":42},[36,91157,91158,91161,91164,91166],{"class":38,"line":719},[36,91159,91160],{"class":101},"      setTimeout",[36,91162,91163],{"class":42},"(getTime, ",[36,91165,3727],{"class":112},[36,91167,922],{"class":42},[36,91169,91170],{"class":38,"line":725},[36,91171,5899],{"class":42},[36,91173,91174,91177],{"class":38,"line":731},[36,91175,91176],{"class":101},"    getTime",[36,91178,903],{"class":42},[36,91180,91181,91183,91185],{"class":38,"line":736},[36,91182,55974],{"class":42},[36,91184,55370],{"class":54857},[36,91186,54864],{"class":42},[36,91188,91189,91191,91193],{"class":38,"line":742},[36,91190,55342],{"class":42},[36,91192,55357],{"class":54857},[36,91194,54864],{"class":42},[36,91196,91197],{"class":38,"line":748},[36,91198,659],{"emptyLinePlaceholder":658},[36,91200,91201,91203,91205],{"class":38,"line":754},[36,91202,55342],{"class":42},[36,91204,54192],{"class":54857},[36,91206,54864],{"class":42},[19,91208,91209],{},[5198,91210],{"alt":31,"src":91211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[211,91213,91214],{"start":642},[214,91215,90905],{},[19,91217,91218],{},[5198,91219],{"alt":31,"src":91220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,91222,91223],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,91225,42747],{},[19,91227,91228],{},"这个是简易版的递归函数深拷贝",[19,91230,91231],{},"一定要注意先数组再对象，因为万物皆可对象",[26,91233,91235],{"className":54190,"code":91234,"language":54192,"meta":31,"style":31},"\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",[33,91236,91237,91247,91261,91265,91273,91287,91307,91319,91327,91331,91339,91347,91357,91366,91374,91390,91394,91402,91406,91410,91422,91427,91446,91462,91467,91472,91477,91492,91497,91502,91511,91519,91536,91544,91550,91558,91563,91568,91577,91581,91585,91589,91600,91609,91619,91633,91643,91651,91659,91667,91671],{"__ignoreMap":31},[36,91238,91239,91241,91243,91245],{"class":38,"line":39},[36,91240,54854],{"class":42},[36,91242,54858],{"class":54857},[36,91244,54861],{"class":101},[36,91246,54864],{"class":42},[36,91248,91249,91251,91253,91255,91257,91259],{"class":38,"line":53},[36,91250,393],{"class":42},[36,91252,54192],{"class":54857},[36,91254,54873],{"class":101},[36,91256,47],{"class":42},[36,91258,54878],{"class":105},[36,91260,54864],{"class":42},[36,91262,91263],{"class":38,"line":196},[36,91264,659],{"emptyLinePlaceholder":658},[36,91266,91267,91269,91271],{"class":38,"line":642},[36,91268,393],{"class":42},[36,91270,54891],{"class":54857},[36,91272,54864],{"class":42},[36,91274,91275,91277,91279,91281,91283,91285],{"class":38,"line":655},[36,91276,55701],{"class":42},[36,91278,54901],{"class":54857},[36,91280,54904],{"class":101},[36,91282,47],{"class":42},[36,91284,54909],{"class":105},[36,91286,54864],{"class":42},[36,91288,91289,91291,91293,91295,91297,91299,91301,91303,91305],{"class":38,"line":662},[36,91290,55701],{"class":42},[36,91292,54901],{"class":54857},[36,91294,18576],{"class":101},[36,91296,47],{"class":42},[36,91298,54948],{"class":105},[36,91300,54928],{"class":101},[36,91302,47],{"class":42},[36,91304,54955],{"class":105},[36,91306,54864],{"class":42},[36,91308,91309,91311,91313,91315,91317],{"class":38,"line":667},[36,91310,55701],{"class":42},[36,91312,54964],{"class":54857},[36,91314,54967],{"class":42},[36,91316,54964],{"class":54857},[36,91318,54864],{"class":42},[36,91320,91321,91323,91325],{"class":38,"line":679},[36,91322,55342],{"class":42},[36,91324,54891],{"class":54857},[36,91326,54864],{"class":42},[36,91328,91329],{"class":38,"line":685},[36,91330,659],{"emptyLinePlaceholder":658},[36,91332,91333,91335,91337],{"class":38,"line":691},[36,91334,393],{"class":42},[36,91336,55357],{"class":54857},[36,91338,54864],{"class":42},[36,91340,91341,91343,91345],{"class":38,"line":696},[36,91342,55701],{"class":42},[36,91344,55370],{"class":54857},[36,91346,54864],{"class":42},[36,91348,91349,91351,91353,91355],{"class":38,"line":702},[36,91350,14882],{"class":46},[36,91352,73526],{"class":112},[36,91354,673],{"class":46},[36,91356,19228],{"class":42},[36,91358,91359,91361,91364],{"class":38,"line":708},[36,91360,75170],{"class":42},[36,91362,91363],{"class":105},"'pink'",[36,91365,35056],{"class":42},[36,91367,91368,91370,91372],{"class":38,"line":713},[36,91369,75180],{"class":42},[36,91371,4521],{"class":112},[36,91373,35056],{"class":42},[36,91375,91376,91379,91382,91384,91387],{"class":38,"line":719},[36,91377,91378],{"class":42},"      hobby: [",[36,91380,91381],{"class":105},"'乒乓球'",[36,91383,478],{"class":42},[36,91385,91386],{"class":105},"'足球'",[36,91388,91389],{"class":42},"],\n",[36,91391,91392],{"class":38,"line":725},[36,91393,81426],{"class":42},[36,91395,91396,91399],{"class":38,"line":731},[36,91397,91398],{"class":42},"        baby: ",[36,91400,91401],{"class":105},"'小pink'\n",[36,91403,91404],{"class":38,"line":736},[36,91405,55955],{"class":42},[36,91407,91408],{"class":38,"line":742},[36,91409,5899],{"class":42},[36,91411,91412,91414,91417,91419],{"class":38,"line":748},[36,91413,14882],{"class":46},[36,91415,91416],{"class":112}," o",[36,91418,673],{"class":46},[36,91420,91421],{"class":42}," {}\n",[36,91423,91424],{"class":38,"line":754},[36,91425,91426],{"class":3943},"    \u002F\u002F 拷贝函数\n",[36,91428,91429,91431,91434,91436,91439,91441,91444],{"class":38,"line":760},[36,91430,73638],{"class":46},[36,91432,91433],{"class":101}," deepCopy",[36,91435,495],{"class":42},[36,91437,91438],{"class":468},"newObj",[36,91440,478],{"class":42},[36,91442,91443],{"class":468},"oldObj",[36,91445,16102],{"class":42},[36,91447,91448,91450,91452,91454,91457,91459],{"class":38,"line":766},[36,91449,55841],{"class":46},[36,91451,5386],{"class":42},[36,91453,55404],{"class":46},[36,91455,91456],{"class":42}," k ",[36,91458,1619],{"class":46},[36,91460,91461],{"class":42}," oldObj) {\n",[36,91463,91464],{"class":38,"line":772},[36,91465,91466],{"class":3943},"        \u002F\u002F 处理数组的问题\n",[36,91468,91469],{"class":38,"line":778},[36,91470,91471],{"class":3943},"        \u002F\u002F 判断是否属于数组\n",[36,91473,91474],{"class":38,"line":783},[36,91475,91476],{"class":3943},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[36,91478,91479,91481,91484,91487,91490],{"class":38,"line":789},[36,91480,995],{"class":46},[36,91482,91483],{"class":42}," (oldObj[k] ",[36,91485,91486],{"class":46},"instanceof",[36,91488,91489],{"class":101}," Array",[36,91491,16102],{"class":42},[36,91493,91494],{"class":38,"line":795},[36,91495,91496],{"class":3943},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[36,91498,91499],{"class":38,"line":801},[36,91500,91501],{"class":3943},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[36,91503,91504,91507,91509],{"class":38,"line":807},[36,91505,91506],{"class":42},"          newObj[k] ",[36,91508,47],{"class":46},[36,91510,55395],{"class":42},[36,91512,91513,91516],{"class":38,"line":813},[36,91514,91515],{"class":101},"          deepCopy",[36,91517,91518],{"class":42},"(newObj[k], oldObj[k])\n",[36,91520,91521,91523,91525,91527,91529,91531,91534],{"class":38,"line":819},[36,91522,83634],{"class":42},[36,91524,5425],{"class":46},[36,91526,5428],{"class":46},[36,91528,91483],{"class":42},[36,91530,91486],{"class":46},[36,91532,91533],{"class":101}," Object",[36,91535,16102],{"class":42},[36,91537,91538,91540,91542],{"class":38,"line":824},[36,91539,91506],{"class":42},[36,91541,47],{"class":46},[36,91543,91421],{"class":42},[36,91545,91546,91548],{"class":38,"line":829},[36,91547,91515],{"class":101},[36,91549,91518],{"class":42},[36,91551,91552,91554,91556],{"class":38,"line":851},[36,91553,83634],{"class":42},[36,91555,5425],{"class":46},[36,91557,19228],{"class":42},[36,91559,91560],{"class":38,"line":868},[36,91561,91562],{"class":3943},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[36,91564,91565],{"class":38,"line":873},[36,91566,91567],{"class":3943},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[36,91569,91570,91572,91574],{"class":38,"line":891},[36,91571,91506],{"class":42},[36,91573,47],{"class":46},[36,91575,91576],{"class":42}," oldObj[k]\n",[36,91578,91579],{"class":38,"line":906},[36,91580,6239],{"class":42},[36,91582,91583],{"class":38,"line":925},[36,91584,55955],{"class":42},[36,91586,91587],{"class":38,"line":943},[36,91588,5899],{"class":42},[36,91590,91591,91594,91597],{"class":38,"line":948},[36,91592,91593],{"class":101},"    deepCopy",[36,91595,91596],{"class":42},"(o, obj) ",[36,91598,91599],{"class":3943},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[36,91601,91602,91604,91606],{"class":38,"line":971},[36,91603,77307],{"class":42},[36,91605,61802],{"class":101},[36,91607,91608],{"class":42},"(o)\n",[36,91610,91611,91614,91616],{"class":38,"line":992},[36,91612,91613],{"class":42},"    o.age ",[36,91615,47],{"class":46},[36,91617,91618],{"class":112}," 20\n",[36,91620,91621,91624,91626,91628,91630],{"class":38,"line":1020},[36,91622,91623],{"class":42},"    o.hobby[",[36,91625,1859],{"class":112},[36,91627,8140],{"class":42},[36,91629,47],{"class":46},[36,91631,91632],{"class":105}," '篮球'\n",[36,91634,91635,91638,91640],{"class":38,"line":1036},[36,91636,91637],{"class":42},"    o.family ",[36,91639,47],{"class":46},[36,91641,91642],{"class":105}," '老pink'\n",[36,91644,91645,91647,91649],{"class":38,"line":1041},[36,91646,77307],{"class":42},[36,91648,61802],{"class":101},[36,91650,73591],{"class":42},[36,91652,91653,91655,91657],{"class":38,"line":1052},[36,91654,55974],{"class":42},[36,91656,55370],{"class":54857},[36,91658,54864],{"class":42},[36,91660,91661,91663,91665],{"class":38,"line":1065},[36,91662,55342],{"class":42},[36,91664,55357],{"class":54857},[36,91666,54864],{"class":42},[36,91668,91669],{"class":38,"line":1077},[36,91670,659],{"emptyLinePlaceholder":658},[36,91672,91673,91675,91677],{"class":38,"line":1082},[36,91674,55342],{"class":42},[36,91676,54192],{"class":54857},[36,91678,54864],{"class":42},[19,91680,91681],{},[5198,91682],{"alt":31,"src":91683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[25619,91685,91687,91688],{"id":91686},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[4027,91689,91690],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,91692,91693],{},[4113,91694,91695],{"href":91695,"rel":91696},"https:\u002F\u002Fwww.lodashjs.com\u002F",[27481],[19,91698,91699],{},"lodash里边的方法都要加上一个下划线_",[19,91701,91702],{},"_.cloneDeep()",[26,91704,91706],{"className":54190,"code":91705,"language":54192,"meta":31,"style":31},"\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",[33,91707,91708,91718,91732,91736,91744,91758,91778,91790,91798,91802,91810,91815,91834,91842,91852,91860,91868,91880,91884,91890,91894,91898,91914,91922,91931,91939,91947,91955,91959],{"__ignoreMap":31},[36,91709,91710,91712,91714,91716],{"class":38,"line":39},[36,91711,54854],{"class":42},[36,91713,54858],{"class":54857},[36,91715,54861],{"class":101},[36,91717,54864],{"class":42},[36,91719,91720,91722,91724,91726,91728,91730],{"class":38,"line":53},[36,91721,393],{"class":42},[36,91723,54192],{"class":54857},[36,91725,54873],{"class":101},[36,91727,47],{"class":42},[36,91729,54878],{"class":105},[36,91731,54864],{"class":42},[36,91733,91734],{"class":38,"line":196},[36,91735,659],{"emptyLinePlaceholder":658},[36,91737,91738,91740,91742],{"class":38,"line":642},[36,91739,393],{"class":42},[36,91741,54891],{"class":54857},[36,91743,54864],{"class":42},[36,91745,91746,91748,91750,91752,91754,91756],{"class":38,"line":655},[36,91747,55701],{"class":42},[36,91749,54901],{"class":54857},[36,91751,54904],{"class":101},[36,91753,47],{"class":42},[36,91755,54909],{"class":105},[36,91757,54864],{"class":42},[36,91759,91760,91762,91764,91766,91768,91770,91772,91774,91776],{"class":38,"line":662},[36,91761,55701],{"class":42},[36,91763,54901],{"class":54857},[36,91765,18576],{"class":101},[36,91767,47],{"class":42},[36,91769,54948],{"class":105},[36,91771,54928],{"class":101},[36,91773,47],{"class":42},[36,91775,54955],{"class":105},[36,91777,54864],{"class":42},[36,91779,91780,91782,91784,91786,91788],{"class":38,"line":667},[36,91781,55701],{"class":42},[36,91783,54964],{"class":54857},[36,91785,54967],{"class":42},[36,91787,54964],{"class":54857},[36,91789,54864],{"class":42},[36,91791,91792,91794,91796],{"class":38,"line":679},[36,91793,55342],{"class":42},[36,91795,54891],{"class":54857},[36,91797,54864],{"class":42},[36,91799,91800],{"class":38,"line":685},[36,91801,659],{"emptyLinePlaceholder":658},[36,91803,91804,91806,91808],{"class":38,"line":691},[36,91805,393],{"class":42},[36,91807,55357],{"class":54857},[36,91809,54864],{"class":42},[36,91811,91812],{"class":38,"line":696},[36,91813,91814],{"class":3943},"  \u003C!-- 先引用这个库 -->\n",[36,91816,91817,91819,91821,91823,91825,91828,91830,91832],{"class":38,"line":702},[36,91818,55701],{"class":42},[36,91820,55370],{"class":54857},[36,91822,58795],{"class":101},[36,91824,47],{"class":42},[36,91826,91827],{"class":105},"\"lodash.min.js\"",[36,91829,58870],{"class":42},[36,91831,55370],{"class":54857},[36,91833,54864],{"class":42},[36,91835,91836,91838,91840],{"class":38,"line":708},[36,91837,55701],{"class":42},[36,91839,55370],{"class":54857},[36,91841,54864],{"class":42},[36,91843,91844,91846,91848,91850],{"class":38,"line":713},[36,91845,14882],{"class":46},[36,91847,73526],{"class":112},[36,91849,673],{"class":46},[36,91851,19228],{"class":42},[36,91853,91854,91856,91858],{"class":38,"line":719},[36,91855,75170],{"class":42},[36,91857,91363],{"class":105},[36,91859,35056],{"class":42},[36,91861,91862,91864,91866],{"class":38,"line":725},[36,91863,75180],{"class":42},[36,91865,4521],{"class":112},[36,91867,35056],{"class":42},[36,91869,91870,91872,91874,91876,91878],{"class":38,"line":731},[36,91871,91378],{"class":42},[36,91873,91381],{"class":105},[36,91875,478],{"class":42},[36,91877,91386],{"class":105},[36,91879,91389],{"class":42},[36,91881,91882],{"class":38,"line":736},[36,91883,81426],{"class":42},[36,91885,91886,91888],{"class":38,"line":742},[36,91887,91398],{"class":42},[36,91889,91401],{"class":105},[36,91891,91892],{"class":38,"line":748},[36,91893,55955],{"class":42},[36,91895,91896],{"class":38,"line":754},[36,91897,5899],{"class":42},[36,91899,91900,91902,91904,91906,91909,91912],{"class":38,"line":760},[36,91901,14882],{"class":46},[36,91903,91416],{"class":112},[36,91905,673],{"class":46},[36,91907,91908],{"class":42}," _.",[36,91910,91911],{"class":101},"cloneDeep",[36,91913,73591],{"class":42},[36,91915,91916,91918,91920],{"class":38,"line":766},[36,91917,77307],{"class":42},[36,91919,61802],{"class":101},[36,91921,91608],{"class":42},[36,91923,91924,91927,91929],{"class":38,"line":772},[36,91925,91926],{"class":42},"    o.family.baby ",[36,91928,47],{"class":46},[36,91930,91642],{"class":105},[36,91932,91933,91935,91937],{"class":38,"line":778},[36,91934,77307],{"class":42},[36,91936,61802],{"class":101},[36,91938,73591],{"class":42},[36,91940,91941,91943,91945],{"class":38,"line":783},[36,91942,55974],{"class":42},[36,91944,55370],{"class":54857},[36,91946,54864],{"class":42},[36,91948,91949,91951,91953],{"class":38,"line":789},[36,91950,55342],{"class":42},[36,91952,55357],{"class":54857},[36,91954,54864],{"class":42},[36,91956,91957],{"class":38,"line":795},[36,91958,659],{"emptyLinePlaceholder":658},[36,91960,91961,91963,91965],{"class":38,"line":801},[36,91962,55342],{"class":42},[36,91964,54192],{"class":54857},[36,91966,54864],{"class":42},[19,91968,91969],{},[5198,91970],{"alt":31,"src":91971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[25619,91973,91975],{"id":91974},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[26,91977,91979],{"className":54190,"code":91978,"language":54192,"meta":31,"style":31},"\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",[33,91980,91981,91991,92005,92009,92017,92031,92051,92063,92071,92075,92083,92091,92101,92109,92117,92129,92133,92139,92143,92147,92152,92157,92162,92188,92196,92205,92213,92221,92229,92233],{"__ignoreMap":31},[36,91982,91983,91985,91987,91989],{"class":38,"line":39},[36,91984,54854],{"class":42},[36,91986,54858],{"class":54857},[36,91988,54861],{"class":101},[36,91990,54864],{"class":42},[36,91992,91993,91995,91997,91999,92001,92003],{"class":38,"line":53},[36,91994,393],{"class":42},[36,91996,54192],{"class":54857},[36,91998,54873],{"class":101},[36,92000,47],{"class":42},[36,92002,54878],{"class":105},[36,92004,54864],{"class":42},[36,92006,92007],{"class":38,"line":196},[36,92008,659],{"emptyLinePlaceholder":658},[36,92010,92011,92013,92015],{"class":38,"line":642},[36,92012,393],{"class":42},[36,92014,54891],{"class":54857},[36,92016,54864],{"class":42},[36,92018,92019,92021,92023,92025,92027,92029],{"class":38,"line":655},[36,92020,55701],{"class":42},[36,92022,54901],{"class":54857},[36,92024,54904],{"class":101},[36,92026,47],{"class":42},[36,92028,54909],{"class":105},[36,92030,54864],{"class":42},[36,92032,92033,92035,92037,92039,92041,92043,92045,92047,92049],{"class":38,"line":662},[36,92034,55701],{"class":42},[36,92036,54901],{"class":54857},[36,92038,18576],{"class":101},[36,92040,47],{"class":42},[36,92042,54948],{"class":105},[36,92044,54928],{"class":101},[36,92046,47],{"class":42},[36,92048,54955],{"class":105},[36,92050,54864],{"class":42},[36,92052,92053,92055,92057,92059,92061],{"class":38,"line":667},[36,92054,55701],{"class":42},[36,92056,54964],{"class":54857},[36,92058,54967],{"class":42},[36,92060,54964],{"class":54857},[36,92062,54864],{"class":42},[36,92064,92065,92067,92069],{"class":38,"line":679},[36,92066,55342],{"class":42},[36,92068,54891],{"class":54857},[36,92070,54864],{"class":42},[36,92072,92073],{"class":38,"line":685},[36,92074,659],{"emptyLinePlaceholder":658},[36,92076,92077,92079,92081],{"class":38,"line":691},[36,92078,393],{"class":42},[36,92080,55357],{"class":54857},[36,92082,54864],{"class":42},[36,92084,92085,92087,92089],{"class":38,"line":696},[36,92086,55701],{"class":42},[36,92088,55370],{"class":54857},[36,92090,54864],{"class":42},[36,92092,92093,92095,92097,92099],{"class":38,"line":702},[36,92094,14882],{"class":46},[36,92096,73526],{"class":112},[36,92098,673],{"class":46},[36,92100,19228],{"class":42},[36,92102,92103,92105,92107],{"class":38,"line":708},[36,92104,75170],{"class":42},[36,92106,91363],{"class":105},[36,92108,35056],{"class":42},[36,92110,92111,92113,92115],{"class":38,"line":713},[36,92112,75180],{"class":42},[36,92114,4521],{"class":112},[36,92116,35056],{"class":42},[36,92118,92119,92121,92123,92125,92127],{"class":38,"line":719},[36,92120,91378],{"class":42},[36,92122,91381],{"class":105},[36,92124,478],{"class":42},[36,92126,91386],{"class":105},[36,92128,91389],{"class":42},[36,92130,92131],{"class":38,"line":725},[36,92132,81426],{"class":42},[36,92134,92135,92137],{"class":38,"line":731},[36,92136,91398],{"class":42},[36,92138,91401],{"class":105},[36,92140,92141],{"class":38,"line":736},[36,92142,55955],{"class":42},[36,92144,92145],{"class":38,"line":742},[36,92146,5899],{"class":42},[36,92148,92149],{"class":38,"line":748},[36,92150,92151],{"class":3943},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[36,92153,92154],{"class":38,"line":754},[36,92155,92156],{"class":3943},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[36,92158,92159],{"class":38,"line":760},[36,92160,92161],{"class":3943},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[36,92163,92164,92166,92168,92170,92173,92175,92178,92180,92182,92184,92186],{"class":38,"line":766},[36,92165,14882],{"class":46},[36,92167,91416],{"class":112},[36,92169,673],{"class":46},[36,92171,92172],{"class":112}," JSON",[36,92174,842],{"class":42},[36,92176,92177],{"class":101},"parse",[36,92179,495],{"class":42},[36,92181,75218],{"class":112},[36,92183,842],{"class":42},[36,92185,75223],{"class":101},[36,92187,75226],{"class":42},[36,92189,92190,92192,92194],{"class":38,"line":772},[36,92191,77307],{"class":42},[36,92193,61802],{"class":101},[36,92195,91608],{"class":42},[36,92197,92198,92200,92202],{"class":38,"line":778},[36,92199,91926],{"class":42},[36,92201,47],{"class":46},[36,92203,92204],{"class":105}," '123'\n",[36,92206,92207,92209,92211],{"class":38,"line":783},[36,92208,77307],{"class":42},[36,92210,61802],{"class":101},[36,92212,73591],{"class":42},[36,92214,92215,92217,92219],{"class":38,"line":789},[36,92216,55974],{"class":42},[36,92218,55370],{"class":54857},[36,92220,54864],{"class":42},[36,92222,92223,92225,92227],{"class":38,"line":795},[36,92224,55342],{"class":42},[36,92226,55357],{"class":54857},[36,92228,54864],{"class":42},[36,92230,92231],{"class":38,"line":801},[36,92232,659],{"emptyLinePlaceholder":658},[36,92234,92235,92237,92239],{"class":38,"line":807},[36,92236,55342],{"class":42},[36,92238,54192],{"class":54857},[36,92240,54864],{"class":42},[19,92242,92243],{},[5198,92244],{"alt":31,"src":92245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,92247,92249],{"id":92248},"_415-异常处理","4.15 异常处理",[211,92251,92252],{},[214,92253,92254],{},"throw抛异常",[19,92256,92257],{},[5198,92258],{"alt":31,"src":92259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[211,92261,92262],{"start":53},[214,92263,92264],{},"try\u002Fcatch 捕获错误信息",[19,92266,92267],{},[5198,92268],{"alt":31,"src":92269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[26,92271,92273],{"className":54190,"code":92272,"language":54192,"meta":31,"style":31},"\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",[33,92274,92275,92285,92299,92303,92311,92325,92345,92357,92365,92369,92377,92389,92397,92406,92413,92418,92437,92446,92457,92462,92472,92477,92482,92487,92504,92508,92513,92520,92532,92536,92548,92552,92556,92561,92566,92573,92581,92589,92593],{"__ignoreMap":31},[36,92276,92277,92279,92281,92283],{"class":38,"line":39},[36,92278,54854],{"class":42},[36,92280,54858],{"class":54857},[36,92282,54861],{"class":101},[36,92284,54864],{"class":42},[36,92286,92287,92289,92291,92293,92295,92297],{"class":38,"line":53},[36,92288,393],{"class":42},[36,92290,54192],{"class":54857},[36,92292,54873],{"class":101},[36,92294,47],{"class":42},[36,92296,54878],{"class":105},[36,92298,54864],{"class":42},[36,92300,92301],{"class":38,"line":196},[36,92302,659],{"emptyLinePlaceholder":658},[36,92304,92305,92307,92309],{"class":38,"line":642},[36,92306,393],{"class":42},[36,92308,54891],{"class":54857},[36,92310,54864],{"class":42},[36,92312,92313,92315,92317,92319,92321,92323],{"class":38,"line":655},[36,92314,55701],{"class":42},[36,92316,54901],{"class":54857},[36,92318,54904],{"class":101},[36,92320,47],{"class":42},[36,92322,54909],{"class":105},[36,92324,54864],{"class":42},[36,92326,92327,92329,92331,92333,92335,92337,92339,92341,92343],{"class":38,"line":662},[36,92328,55701],{"class":42},[36,92330,54901],{"class":54857},[36,92332,18576],{"class":101},[36,92334,47],{"class":42},[36,92336,54948],{"class":105},[36,92338,54928],{"class":101},[36,92340,47],{"class":42},[36,92342,54955],{"class":105},[36,92344,54864],{"class":42},[36,92346,92347,92349,92351,92353,92355],{"class":38,"line":667},[36,92348,55701],{"class":42},[36,92350,54964],{"class":54857},[36,92352,54967],{"class":42},[36,92354,54964],{"class":54857},[36,92356,54864],{"class":42},[36,92358,92359,92361,92363],{"class":38,"line":679},[36,92360,55342],{"class":42},[36,92362,54891],{"class":54857},[36,92364,54864],{"class":42},[36,92366,92367],{"class":38,"line":685},[36,92368,659],{"emptyLinePlaceholder":658},[36,92370,92371,92373,92375],{"class":38,"line":691},[36,92372,393],{"class":42},[36,92374,55357],{"class":54857},[36,92376,54864],{"class":42},[36,92378,92379,92381,92383,92385,92387],{"class":38,"line":696},[36,92380,55701],{"class":42},[36,92382,19],{"class":54857},[36,92384,57051],{"class":42},[36,92386,19],{"class":54857},[36,92388,54864],{"class":42},[36,92390,92391,92393,92395],{"class":38,"line":702},[36,92392,55701],{"class":42},[36,92394,55370],{"class":54857},[36,92396,54864],{"class":42},[36,92398,92399,92401,92404],{"class":38,"line":708},[36,92400,73638],{"class":46},[36,92402,92403],{"class":101}," fn",[36,92405,14514],{"class":42},[36,92407,92408,92411],{"class":38,"line":713},[36,92409,92410],{"class":46},"      try",[36,92412,19228],{"class":42},[36,92414,92415],{"class":38,"line":719},[36,92416,92417],{"class":3943},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[36,92419,92420,92422,92424,92426,92428,92430,92432,92435],{"class":38,"line":725},[36,92421,64825],{"class":46},[36,92423,10516],{"class":112},[36,92425,673],{"class":46},[36,92427,57953],{"class":42},[36,92429,57956],{"class":101},[36,92431,495],{"class":42},[36,92433,92434],{"class":105},"'.p'",[36,92436,922],{"class":42},[36,92438,92439,92442,92444],{"class":38,"line":731},[36,92440,92441],{"class":42},"        p.style.color ",[36,92443,47],{"class":46},[36,92445,70606],{"class":105},[36,92447,92448,92451,92454],{"class":38,"line":736},[36,92449,92450],{"class":42},"      } ",[36,92452,92453],{"class":46},"catch",[36,92455,92456],{"class":42}," (err) {\n",[36,92458,92459],{"class":38,"line":742},[36,92460,92461],{"class":3943},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[36,92463,92464,92467,92469],{"class":38,"line":748},[36,92465,92466],{"class":42},"        console.",[36,92468,61802],{"class":101},[36,92470,92471],{"class":42},"(err.message)\n",[36,92473,92474],{"class":38,"line":754},[36,92475,92476],{"class":3943},"        \u002F\u002F 想要中断程序，需要加return\n",[36,92478,92479],{"class":38,"line":760},[36,92480,92481],{"class":3943},"        \u002F\u002F return\n",[36,92483,92484],{"class":38,"line":766},[36,92485,92486],{"class":3943},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[36,92488,92489,92492,92494,92497,92499,92502],{"class":38,"line":772},[36,92490,92491],{"class":46},"        throw",[36,92493,15239],{"class":46},[36,92495,92496],{"class":101}," Error",[36,92498,495],{"class":42},[36,92500,92501],{"class":105},"'你看看，选择器错误了吧'",[36,92503,922],{"class":42},[36,92505,92506],{"class":38,"line":778},[36,92507,55955],{"class":42},[36,92509,92510],{"class":38,"line":783},[36,92511,92512],{"class":3943},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[36,92514,92515,92518],{"class":38,"line":789},[36,92516,92517],{"class":46},"      finally",[36,92519,19228],{"class":42},[36,92521,92522,92525,92527,92530],{"class":38,"line":795},[36,92523,92524],{"class":101},"        alert",[36,92526,495],{"class":42},[36,92528,92529],{"class":105},"'弹出对话框'",[36,92531,922],{"class":42},[36,92533,92534],{"class":38,"line":801},[36,92535,55955],{"class":42},[36,92537,92538,92540,92542,92544,92546],{"class":38,"line":807},[36,92539,61799],{"class":42},[36,92541,61802],{"class":101},[36,92543,495],{"class":42},[36,92545,4345],{"class":112},[36,92547,922],{"class":42},[36,92549,92550],{"class":38,"line":813},[36,92551,659],{"emptyLinePlaceholder":658},[36,92553,92554],{"class":38,"line":819},[36,92555,5899],{"class":42},[36,92557,92558],{"class":38,"line":824},[36,92559,92560],{"class":3943},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[36,92562,92563],{"class":38,"line":829},[36,92564,92565],{"class":3943},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[36,92567,92568,92571],{"class":38,"line":851},[36,92569,92570],{"class":101},"    fn",[36,92572,903],{"class":42},[36,92574,92575,92577,92579],{"class":38,"line":868},[36,92576,55974],{"class":42},[36,92578,55370],{"class":54857},[36,92580,54864],{"class":42},[36,92582,92583,92585,92587],{"class":38,"line":873},[36,92584,55342],{"class":42},[36,92586,55357],{"class":54857},[36,92588,54864],{"class":42},[36,92590,92591],{"class":38,"line":891},[36,92592,659],{"emptyLinePlaceholder":658},[36,92594,92595,92597,92599],{"class":38,"line":906},[36,92596,55342],{"class":42},[36,92598,54192],{"class":54857},[36,92600,54864],{"class":42},[19,92602,92603],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[211,92605,92606],{"start":196},[214,92607,92608],{},"debugger",[19,92610,92611],{},[5198,92612],{"alt":31,"src":92613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,92615,92616],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,92618,92620],{"id":92619},"_416-处理this","4.16 处理this",[318,92622,92624],{"id":92623},"_4161-this的指向","4.16.1 this的指向",[211,92626,92627],{},[214,92628,92629],{},"普通函数的this",[19,92631,92632],{},[5198,92633],{"alt":31,"src":92634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[211,92636,92637],{"start":53},[214,92638,92639],{},"箭头函数的this",[19,92641,92642],{},[5198,92643],{"alt":31,"src":92644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,92646,92647],{},[5198,92648],{"alt":31,"src":92649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,92651,92652],{},[5198,92653],{"alt":31,"src":92654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[318,92656,92658],{"id":92657},"_4162-this的改变","4.16.2 this的改变",[19,92660,92661],{},"call() apply() bind()",[211,92663,92664],{},[214,92665,92666],{},"call()",[19,92668,92669],{},[5198,92670],{"alt":31,"src":92671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,92673,92674],{},"两个作用：①调用函数；②改变this指向",[26,92676,92678],{"className":56624,"code":92677,"language":56626,"meta":31,"style":31},"\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",[33,92679,92680,92688,92696,92700,92705,92709,92714,92719,92724,92728,92733,92741],{"__ignoreMap":31},[36,92681,92682,92684,92686],{"class":38,"line":39},[36,92683,393],{"class":42},[36,92685,55357],{"class":54857},[36,92687,54864],{"class":42},[36,92689,92690,92692,92694],{"class":38,"line":53},[36,92691,55701],{"class":42},[36,92693,55370],{"class":54857},[36,92695,54864],{"class":42},[36,92697,92698],{"class":38,"line":196},[36,92699,75077],{"class":42},[36,92701,92702],{"class":38,"line":642},[36,92703,92704],{"class":42},"      uname: 'pink'\n",[36,92706,92707],{"class":38,"line":655},[36,92708,5899],{"class":42},[36,92710,92711],{"class":38,"line":662},[36,92712,92713],{"class":42},"    function fn(x, y) {\n",[36,92715,92716],{"class":38,"line":667},[36,92717,92718],{"class":42},"      console.log(this)  \u002F\u002Fwindow\n",[36,92720,92721],{"class":38,"line":679},[36,92722,92723],{"class":42},"      console.log(x + y)\n",[36,92725,92726],{"class":38,"line":685},[36,92727,5899],{"class":42},[36,92729,92730],{"class":38,"line":691},[36,92731,92732],{"class":42},"    fn.call(obj, 1, 2)\n",[36,92734,92735,92737,92739],{"class":38,"line":696},[36,92736,55974],{"class":42},[36,92738,55370],{"class":54857},[36,92740,54864],{"class":42},[36,92742,92743,92745,92747],{"class":38,"line":702},[36,92744,55342],{"class":42},[36,92746,55357],{"class":54857},[36,92748,54864],{"class":42},[19,92750,92751],{},[5198,92752],{"alt":31,"src":92753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[211,92755,92756],{"start":53},[214,92757,92758],{},"apply()",[19,92760,92761],{},[5198,92762],{"alt":31,"src":92763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,92765,92674],{},[19,92767,92768],{},"call传递的是普通参数，而apply必须传递的是数组",[26,92770,92772],{"className":54190,"code":92771,"language":54192,"meta":31,"style":31},"\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",[33,92773,92774,92784,92798,92802,92810,92824,92844,92856,92864,92868,92876,92884,92894,92901,92905,92910,92926,92938,92952,92956,92961,92980,92985,92989,92994,92999,93007,93012,93034,93039,93055,93071,93083,93087,93092,93110,93118,93126,93130],{"__ignoreMap":31},[36,92775,92776,92778,92780,92782],{"class":38,"line":39},[36,92777,54854],{"class":42},[36,92779,54858],{"class":54857},[36,92781,54861],{"class":101},[36,92783,54864],{"class":42},[36,92785,92786,92788,92790,92792,92794,92796],{"class":38,"line":53},[36,92787,393],{"class":42},[36,92789,54192],{"class":54857},[36,92791,54873],{"class":101},[36,92793,47],{"class":42},[36,92795,54878],{"class":105},[36,92797,54864],{"class":42},[36,92799,92800],{"class":38,"line":196},[36,92801,659],{"emptyLinePlaceholder":658},[36,92803,92804,92806,92808],{"class":38,"line":642},[36,92805,393],{"class":42},[36,92807,54891],{"class":54857},[36,92809,54864],{"class":42},[36,92811,92812,92814,92816,92818,92820,92822],{"class":38,"line":655},[36,92813,55701],{"class":42},[36,92815,54901],{"class":54857},[36,92817,54904],{"class":101},[36,92819,47],{"class":42},[36,92821,54909],{"class":105},[36,92823,54864],{"class":42},[36,92825,92826,92828,92830,92832,92834,92836,92838,92840,92842],{"class":38,"line":662},[36,92827,55701],{"class":42},[36,92829,54901],{"class":54857},[36,92831,18576],{"class":101},[36,92833,47],{"class":42},[36,92835,54948],{"class":105},[36,92837,54928],{"class":101},[36,92839,47],{"class":42},[36,92841,54955],{"class":105},[36,92843,54864],{"class":42},[36,92845,92846,92848,92850,92852,92854],{"class":38,"line":667},[36,92847,55701],{"class":42},[36,92849,54964],{"class":54857},[36,92851,54967],{"class":42},[36,92853,54964],{"class":54857},[36,92855,54864],{"class":42},[36,92857,92858,92860,92862],{"class":38,"line":679},[36,92859,55342],{"class":42},[36,92861,54891],{"class":54857},[36,92863,54864],{"class":42},[36,92865,92866],{"class":38,"line":685},[36,92867,659],{"emptyLinePlaceholder":658},[36,92869,92870,92872,92874],{"class":38,"line":691},[36,92871,393],{"class":42},[36,92873,55357],{"class":54857},[36,92875,54864],{"class":42},[36,92877,92878,92880,92882],{"class":38,"line":696},[36,92879,55701],{"class":42},[36,92881,55370],{"class":54857},[36,92883,54864],{"class":42},[36,92885,92886,92888,92890,92892],{"class":38,"line":702},[36,92887,14882],{"class":46},[36,92889,73526],{"class":112},[36,92891,673],{"class":46},[36,92893,19228],{"class":42},[36,92895,92896,92898],{"class":38,"line":708},[36,92897,75180],{"class":42},[36,92899,92900],{"class":112},"18\n",[36,92902,92903],{"class":38,"line":713},[36,92904,5899],{"class":42},[36,92906,92907],{"class":38,"line":719},[36,92908,92909],{"class":3943},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[36,92911,92912,92914,92916,92918,92920,92922,92924],{"class":38,"line":725},[36,92913,73638],{"class":46},[36,92915,92403],{"class":101},[36,92917,495],{"class":42},[36,92919,4690],{"class":468},[36,92921,478],{"class":42},[36,92923,4715],{"class":468},[36,92925,16102],{"class":42},[36,92927,92928,92930,92932,92934,92936],{"class":38,"line":731},[36,92929,61799],{"class":42},[36,92931,61802],{"class":101},[36,92933,495],{"class":42},[36,92935,90546],{"class":112},[36,92937,922],{"class":42},[36,92939,92940,92942,92944,92947,92949],{"class":38,"line":736},[36,92941,61799],{"class":42},[36,92943,61802],{"class":101},[36,92945,92946],{"class":42},"(x ",[36,92948,4354],{"class":46},[36,92950,92951],{"class":42}," y)\n",[36,92953,92954],{"class":38,"line":742},[36,92955,5899],{"class":42},[36,92957,92958],{"class":38,"line":748},[36,92959,92960],{"class":3943},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[36,92962,92963,92966,92969,92972,92974,92976,92978],{"class":38,"line":754},[36,92964,92965],{"class":42},"    fn.",[36,92967,92968],{"class":101},"apply",[36,92970,92971],{"class":42},"(obj, [",[36,92973,4092],{"class":112},[36,92975,478],{"class":42},[36,92977,498],{"class":112},[36,92979,8353],{"class":42},[36,92981,92982],{"class":38,"line":760},[36,92983,92984],{"class":3943},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[36,92986,92987],{"class":38,"line":766},[36,92988,659],{"emptyLinePlaceholder":658},[36,92990,92991],{"class":38,"line":772},[36,92992,92993],{"class":3943},"    \u002F\u002F 使用场景：求数组最大值\n",[36,92995,92996],{"class":38,"line":778},[36,92997,92998],{"class":3943},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[36,93000,93001,93004],{"class":38,"line":783},[36,93002,93003],{"class":3943},"    \u002F\u002F console.log(max)",[36,93005,93006],{"class":3943},"   \u002F\u002F3\n",[36,93008,93009],{"class":38,"line":789},[36,93010,93011],{"class":3943},"    \u002F\u002F 指向空或者Math都是可以的\n",[36,93013,93014,93016,93018,93020,93022,93024,93026,93028,93030,93032],{"class":38,"line":795},[36,93015,14882],{"class":46},[36,93017,61250],{"class":112},[36,93019,673],{"class":46},[36,93021,55783],{"class":42},[36,93023,4186],{"class":112},[36,93025,478],{"class":42},[36,93027,4377],{"class":112},[36,93029,478],{"class":42},[36,93031,4407],{"class":112},[36,93033,36806],{"class":42},[36,93035,93036],{"class":38,"line":801},[36,93037,93038],{"class":3943},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[36,93040,93041,93043,93045,93047,93050,93052],{"class":38,"line":807},[36,93042,14882],{"class":46},[36,93044,9644],{"class":112},[36,93046,673],{"class":46},[36,93048,93049],{"class":42}," Math.max.",[36,93051,92968],{"class":101},[36,93053,93054],{"class":42},"(Math, arr)\n",[36,93056,93057,93059,93062,93064,93067,93069],{"class":38,"line":813},[36,93058,14882],{"class":46},[36,93060,93061],{"class":112}," min",[36,93063,673],{"class":46},[36,93065,93066],{"class":42}," Math.min.",[36,93068,92968],{"class":101},[36,93070,93054],{"class":42},[36,93072,93073,93075,93077,93080],{"class":38,"line":819},[36,93074,77307],{"class":42},[36,93076,61802],{"class":101},[36,93078,93079],{"class":42},"(max, min)     ",[36,93081,93082],{"class":3943},"\u002F\u002F100,4\n",[36,93084,93085],{"class":38,"line":824},[36,93086,659],{"emptyLinePlaceholder":658},[36,93088,93089],{"class":38,"line":829},[36,93090,93091],{"class":3943},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[36,93093,93094,93096,93098,93101,93103,93105,93107],{"class":38,"line":851},[36,93095,77307],{"class":42},[36,93097,61802],{"class":101},[36,93099,93100],{"class":42},"(Max.",[36,93102,9708],{"class":101},[36,93104,495],{"class":42},[36,93106,2207],{"class":46},[36,93108,93109],{"class":42},"arr))\n",[36,93111,93112,93114,93116],{"class":38,"line":868},[36,93113,55974],{"class":42},[36,93115,55370],{"class":54857},[36,93117,54864],{"class":42},[36,93119,93120,93122,93124],{"class":38,"line":873},[36,93121,55342],{"class":42},[36,93123,55357],{"class":54857},[36,93125,54864],{"class":42},[36,93127,93128],{"class":38,"line":891},[36,93129,659],{"emptyLinePlaceholder":658},[36,93131,93132,93134,93136],{"class":38,"line":906},[36,93133,55342],{"class":42},[36,93135,54192],{"class":54857},[36,93137,54864],{"class":42},[19,93139,93140],{},[5198,93141],{"alt":31,"src":93142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[211,93144,93145],{"start":196},[214,93146,93147],{},"bind()",[19,93149,93150],{},[5198,93151],{"alt":31,"src":93152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,93154,93155],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,93157,93158],{},"bind的语法跟call很相似",[26,93160,93162],{"className":56624,"code":93161,"language":56626,"meta":31,"style":31},"\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",[33,93163,93164,93172,93180,93184,93189,93193,93197,93202,93206,93211,93216,93221,93226,93231,93236,93241,93245,93253],{"__ignoreMap":31},[36,93165,93166,93168,93170],{"class":38,"line":39},[36,93167,393],{"class":42},[36,93169,55357],{"class":54857},[36,93171,54864],{"class":42},[36,93173,93174,93176,93178],{"class":38,"line":53},[36,93175,55701],{"class":42},[36,93177,55370],{"class":54857},[36,93179,54864],{"class":42},[36,93181,93182],{"class":38,"line":196},[36,93183,75077],{"class":42},[36,93185,93186],{"class":38,"line":642},[36,93187,93188],{"class":42},"      age: 18\n",[36,93190,93191],{"class":38,"line":655},[36,93192,5899],{"class":42},[36,93194,93195],{"class":38,"line":662},[36,93196,80697],{"class":42},[36,93198,93199],{"class":38,"line":667},[36,93200,93201],{"class":42},"      console.log(this)\n",[36,93203,93204],{"class":38,"line":679},[36,93205,5899],{"class":42},[36,93207,93208],{"class":38,"line":685},[36,93209,93210],{"class":42},"    \u002F\u002F 1.bind 不会调用函数\n",[36,93212,93213],{"class":38,"line":691},[36,93214,93215],{"class":42},"    \u002F\u002F 2.bind能改变this的指向\n",[36,93217,93218],{"class":38,"line":696},[36,93219,93220],{"class":42},"    fn.bind()\n",[36,93222,93223],{"class":38,"line":702},[36,93224,93225],{"class":42},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[36,93227,93228],{"class":38,"line":708},[36,93229,93230],{"class":42},"    const fun = fn.bind(obj)\n",[36,93232,93233],{"class":38,"line":713},[36,93234,93235],{"class":42},"    \u002F\u002F console.log(fun)\n",[36,93237,93238],{"class":38,"line":719},[36,93239,93240],{"class":42},"    \u002F\u002F 调用,查看this的指向\n",[36,93242,93243],{"class":38,"line":725},[36,93244,56208],{"class":42},[36,93246,93247,93249,93251],{"class":38,"line":731},[36,93248,55974],{"class":42},[36,93250,55370],{"class":54857},[36,93252,54864],{"class":42},[36,93254,93255,93257,93259],{"class":38,"line":736},[36,93256,55342],{"class":42},[36,93258,55357],{"class":54857},[36,93260,54864],{"class":42},[19,93262,93263],{},[5198,93264],{"alt":31,"src":93265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[211,93267,93268],{"start":642},[214,93269,93270],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[26,93272,93274],{"className":56624,"code":93273,"language":56626,"meta":31,"style":31},"\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",[33,93275,93276,93284,93297,93305,93310,93314,93319,93324,93329,93334,93339,93344,93349,93354,93358,93366],{"__ignoreMap":31},[36,93277,93278,93280,93282],{"class":38,"line":39},[36,93279,393],{"class":42},[36,93281,55357],{"class":54857},[36,93283,54864],{"class":42},[36,93285,93286,93288,93290,93293,93295],{"class":38,"line":53},[36,93287,55701],{"class":42},[36,93289,57444],{"class":54857},[36,93291,93292],{"class":42},">禁用\u003C\u002F",[36,93294,57444],{"class":54857},[36,93296,54864],{"class":42},[36,93298,93299,93301,93303],{"class":38,"line":196},[36,93300,55701],{"class":42},[36,93302,55370],{"class":54857},[36,93304,54864],{"class":42},[36,93306,93307],{"class":38,"line":642},[36,93308,93309],{"class":42},"    const btn = document.querySelector('button')\n",[36,93311,93312],{"class":38,"line":655},[36,93313,62571],{"class":42},[36,93315,93316],{"class":38,"line":662},[36,93317,93318],{"class":42},"      this.disabled = true\n",[36,93320,93321],{"class":38,"line":667},[36,93322,93323],{"class":42},"      \u002F\u002F 定时器是window进行调用的\n",[36,93325,93326],{"class":38,"line":679},[36,93327,93328],{"class":42},"      setTimeout(function () {\n",[36,93330,93331],{"class":38,"line":685},[36,93332,93333],{"class":42},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[36,93335,93336],{"class":38,"line":691},[36,93337,93338],{"class":42},"        this.disabled = false\n",[36,93340,93341],{"class":38,"line":696},[36,93342,93343],{"class":42},"      }.bind(this), 2000)\n",[36,93345,93346],{"class":38,"line":702},[36,93347,93348],{"class":42},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[36,93350,93351],{"class":38,"line":708},[36,93352,93353],{"class":42},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[36,93355,93356],{"class":38,"line":713},[36,93357,37021],{"class":42},[36,93359,93360,93362,93364],{"class":38,"line":719},[36,93361,55974],{"class":42},[36,93363,55370],{"class":54857},[36,93365,54864],{"class":42},[36,93367,93368,93370,93372],{"class":38,"line":725},[36,93369,55342],{"class":42},[36,93371,55357],{"class":54857},[36,93373,54864],{"class":42},[211,93375,93376],{"start":655},[214,93377,25574],{},[19,93379,93380],{},[5198,93381],{"alt":31,"src":93382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,93384,93386],{"id":93385},"_417-性能优化","4.17 性能优化",[318,93388,93390],{"id":93389},"_4171-防抖","4.17.1 防抖",[19,93392,93393],{},[5198,93394],{"alt":31,"src":93395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,93397,93398],{},[4027,93399,93400],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,93402,93403],{},"防抖实现方式：",[4875,93405,93406],{},[214,93407,93408],{},"lodash 提供了防抖处理",[19,93410,93411],{},"_.debounce(func,[wait=0],[options={}])",[19,93413,93414],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[26,93416,93418],{"className":54190,"code":93417,"language":54192,"meta":31,"style":31},"\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",[33,93419,93420,93430,93444,93448,93456,93470,93490,93502,93510,93516,93526,93538,93550,93561,93573,93583,93593,93606,93610,93618,93626,93630,93638,93656,93674,93682,93701,93711,93720,93731,93736,93740,93745,93750,93755,93780,93788,93796,93800],{"__ignoreMap":31},[36,93421,93422,93424,93426,93428],{"class":38,"line":39},[36,93423,54854],{"class":42},[36,93425,54858],{"class":54857},[36,93427,54861],{"class":101},[36,93429,54864],{"class":42},[36,93431,93432,93434,93436,93438,93440,93442],{"class":38,"line":53},[36,93433,393],{"class":42},[36,93435,54192],{"class":54857},[36,93437,54873],{"class":101},[36,93439,47],{"class":42},[36,93441,54878],{"class":105},[36,93443,54864],{"class":42},[36,93445,93446],{"class":38,"line":196},[36,93447,659],{"emptyLinePlaceholder":658},[36,93449,93450,93452,93454],{"class":38,"line":642},[36,93451,393],{"class":42},[36,93453,54891],{"class":54857},[36,93455,54864],{"class":42},[36,93457,93458,93460,93462,93464,93466,93468],{"class":38,"line":655},[36,93459,55701],{"class":42},[36,93461,54901],{"class":54857},[36,93463,54904],{"class":101},[36,93465,47],{"class":42},[36,93467,54909],{"class":105},[36,93469,54864],{"class":42},[36,93471,93472,93474,93476,93478,93480,93482,93484,93486,93488],{"class":38,"line":662},[36,93473,55701],{"class":42},[36,93475,54901],{"class":54857},[36,93477,18576],{"class":101},[36,93479,47],{"class":42},[36,93481,54948],{"class":105},[36,93483,54928],{"class":101},[36,93485,47],{"class":42},[36,93487,54955],{"class":105},[36,93489,54864],{"class":42},[36,93491,93492,93494,93496,93498,93500],{"class":38,"line":667},[36,93493,55701],{"class":42},[36,93495,54964],{"class":54857},[36,93497,54967],{"class":42},[36,93499,54964],{"class":54857},[36,93501,54864],{"class":42},[36,93503,93504,93506,93508],{"class":38,"line":679},[36,93505,55701],{"class":42},[36,93507,3785],{"class":54857},[36,93509,54864],{"class":42},[36,93511,93512,93514],{"class":38,"line":685},[36,93513,58308],{"class":101},[36,93515,19228],{"class":42},[36,93517,93518,93520,93522,93524],{"class":38,"line":691},[36,93519,76150],{"class":112},[36,93521,54994],{"class":42},[36,93523,64060],{"class":112},[36,93525,5029],{"class":42},[36,93527,93528,93530,93532,93534,93536],{"class":38,"line":696},[36,93529,58327],{"class":112},[36,93531,54994],{"class":42},[36,93533,5445],{"class":112},[36,93535,55049],{"class":46},[36,93537,5029],{"class":42},[36,93539,93540,93542,93544,93546,93548],{"class":38,"line":702},[36,93541,58341],{"class":112},[36,93543,54994],{"class":42},[36,93545,5445],{"class":112},[36,93547,55049],{"class":46},[36,93549,5029],{"class":42},[36,93551,93552,93554,93556,93559],{"class":38,"line":708},[36,93553,58440],{"class":112},[36,93555,54994],{"class":42},[36,93557,93558],{"class":112},"gray",[36,93560,5029],{"class":42},[36,93562,93563,93565,93567,93569,93571],{"class":38,"line":713},[36,93564,58478],{"class":112},[36,93566,54994],{"class":42},[36,93568,4695],{"class":112},[36,93570,55049],{"class":46},[36,93572,5029],{"class":42},[36,93574,93575,93577,93579,93581],{"class":38,"line":719},[36,93576,60971],{"class":112},[36,93578,54994],{"class":42},[36,93580,64397],{"class":112},[36,93582,5029],{"class":42},[36,93584,93585,93587,93589,93591],{"class":38,"line":725},[36,93586,60841],{"class":112},[36,93588,54994],{"class":42},[36,93590,55149],{"class":112},[36,93592,5029],{"class":42},[36,93594,93595,93598,93600,93602,93604],{"class":38,"line":731},[36,93596,93597],{"class":112},"      padding-top",[36,93599,54994],{"class":42},[36,93601,4194],{"class":112},[36,93603,55049],{"class":46},[36,93605,5029],{"class":42},[36,93607,93608],{"class":38,"line":736},[36,93609,5899],{"class":42},[36,93611,93612,93614,93616],{"class":38,"line":742},[36,93613,55974],{"class":42},[36,93615,3785],{"class":54857},[36,93617,54864],{"class":42},[36,93619,93620,93622,93624],{"class":38,"line":748},[36,93621,55342],{"class":42},[36,93623,54891],{"class":54857},[36,93625,54864],{"class":42},[36,93627,93628],{"class":38,"line":754},[36,93629,659],{"emptyLinePlaceholder":658},[36,93631,93632,93634,93636],{"class":38,"line":760},[36,93633,393],{"class":42},[36,93635,55357],{"class":54857},[36,93637,54864],{"class":42},[36,93639,93640,93642,93644,93646,93648,93650,93652,93654],{"class":38,"line":766},[36,93641,55701],{"class":42},[36,93643,55168],{"class":54857},[36,93645,57043],{"class":101},[36,93647,47],{"class":42},[36,93649,57048],{"class":105},[36,93651,58870],{"class":42},[36,93653,55168],{"class":54857},[36,93655,54864],{"class":42},[36,93657,93658,93660,93662,93664,93666,93668,93670,93672],{"class":38,"line":772},[36,93659,55701],{"class":42},[36,93661,55370],{"class":54857},[36,93663,58795],{"class":101},[36,93665,47],{"class":42},[36,93667,91827],{"class":105},[36,93669,58870],{"class":42},[36,93671,55370],{"class":54857},[36,93673,54864],{"class":42},[36,93675,93676,93678,93680],{"class":38,"line":778},[36,93677,55701],{"class":42},[36,93679,55370],{"class":54857},[36,93681,54864],{"class":42},[36,93683,93684,93686,93688,93690,93692,93694,93696,93699],{"class":38,"line":783},[36,93685,14882],{"class":46},[36,93687,90486],{"class":112},[36,93689,673],{"class":46},[36,93691,57953],{"class":42},[36,93693,57956],{"class":101},[36,93695,495],{"class":42},[36,93697,93698],{"class":105},"'.box'",[36,93700,922],{"class":42},[36,93702,93703,93705,93707,93709],{"class":38,"line":789},[36,93704,55776],{"class":46},[36,93706,13119],{"class":42},[36,93708,47],{"class":46},[36,93710,1074],{"class":112},[36,93712,93713,93715,93718],{"class":38,"line":795},[36,93714,73638],{"class":46},[36,93716,93717],{"class":101}," mouseMove",[36,93719,14514],{"class":42},[36,93721,93722,93725,93727,93729],{"class":38,"line":801},[36,93723,93724],{"class":42},"      box.innerHTML ",[36,93726,47],{"class":46},[36,93728,6734],{"class":42},[36,93730,6405],{"class":46},[36,93732,93733],{"class":38,"line":807},[36,93734,93735],{"class":3943},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[36,93737,93738],{"class":38,"line":813},[36,93739,5899],{"class":42},[36,93741,93742],{"class":38,"line":819},[36,93743,93744],{"class":3943},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[36,93746,93747],{"class":38,"line":824},[36,93748,93749],{"class":3943},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[36,93751,93752],{"class":38,"line":829},[36,93753,93754],{"class":3943},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[36,93756,93757,93760,93762,93764,93767,93770,93773,93776,93778],{"class":38,"line":851},[36,93758,93759],{"class":42},"    box.",[36,93761,61368],{"class":101},[36,93763,495],{"class":42},[36,93765,93766],{"class":105},"'mousemove'",[36,93768,93769],{"class":42},", _.",[36,93771,93772],{"class":101},"debounce",[36,93774,93775],{"class":42},"(mouseMove, ",[36,93777,68629],{"class":112},[36,93779,2005],{"class":42},[36,93781,93782,93784,93786],{"class":38,"line":868},[36,93783,55974],{"class":42},[36,93785,55370],{"class":54857},[36,93787,54864],{"class":42},[36,93789,93790,93792,93794],{"class":38,"line":873},[36,93791,55342],{"class":42},[36,93793,55357],{"class":54857},[36,93795,54864],{"class":42},[36,93797,93798],{"class":38,"line":891},[36,93799,659],{"emptyLinePlaceholder":658},[36,93801,93802,93804,93806],{"class":38,"line":906},[36,93803,55342],{"class":42},[36,93805,54192],{"class":54857},[36,93807,54864],{"class":42},[4875,93809,93810],{},[214,93811,93812],{},"手写一个防抖函数来处理",[19,93814,93815],{},"防抖的核心就是利用定时器来实现的：",[19,93817,93818],{},"①声明一个定时器变量",[19,93820,93821],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,93823,93824],{},"③如果没有定时器则开启定时器，记得存到变量里面",[26,93826,93828],{"className":54190,"code":93827,"language":54192,"meta":31,"style":31},"\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",[33,93829,93830,93840,93854,93858,93866,93880,93900,93912,93920,93926,93936,93948,93960,93970,93982,93992,94002,94014,94018,94026,94034,94038,94046,94064,94082,94090,94108,94118,94126,94136,94140,94144,94148,94153,94158,94163,94168,94173,94178,94196,94203,94208,94216,94221,94234,94250,94260,94265,94269,94273,94293,94297,94302,94307,94312,94317,94325,94333,94337],{"__ignoreMap":31},[36,93831,93832,93834,93836,93838],{"class":38,"line":39},[36,93833,54854],{"class":42},[36,93835,54858],{"class":54857},[36,93837,54861],{"class":101},[36,93839,54864],{"class":42},[36,93841,93842,93844,93846,93848,93850,93852],{"class":38,"line":53},[36,93843,393],{"class":42},[36,93845,54192],{"class":54857},[36,93847,54873],{"class":101},[36,93849,47],{"class":42},[36,93851,54878],{"class":105},[36,93853,54864],{"class":42},[36,93855,93856],{"class":38,"line":196},[36,93857,659],{"emptyLinePlaceholder":658},[36,93859,93860,93862,93864],{"class":38,"line":642},[36,93861,393],{"class":42},[36,93863,54891],{"class":54857},[36,93865,54864],{"class":42},[36,93867,93868,93870,93872,93874,93876,93878],{"class":38,"line":655},[36,93869,55701],{"class":42},[36,93871,54901],{"class":54857},[36,93873,54904],{"class":101},[36,93875,47],{"class":42},[36,93877,54909],{"class":105},[36,93879,54864],{"class":42},[36,93881,93882,93884,93886,93888,93890,93892,93894,93896,93898],{"class":38,"line":662},[36,93883,55701],{"class":42},[36,93885,54901],{"class":54857},[36,93887,18576],{"class":101},[36,93889,47],{"class":42},[36,93891,54948],{"class":105},[36,93893,54928],{"class":101},[36,93895,47],{"class":42},[36,93897,54955],{"class":105},[36,93899,54864],{"class":42},[36,93901,93902,93904,93906,93908,93910],{"class":38,"line":667},[36,93903,55701],{"class":42},[36,93905,54964],{"class":54857},[36,93907,54967],{"class":42},[36,93909,54964],{"class":54857},[36,93911,54864],{"class":42},[36,93913,93914,93916,93918],{"class":38,"line":679},[36,93915,55701],{"class":42},[36,93917,3785],{"class":54857},[36,93919,54864],{"class":42},[36,93921,93922,93924],{"class":38,"line":685},[36,93923,58308],{"class":101},[36,93925,19228],{"class":42},[36,93927,93928,93930,93932,93934],{"class":38,"line":691},[36,93929,76150],{"class":112},[36,93931,54994],{"class":42},[36,93933,64060],{"class":112},[36,93935,5029],{"class":42},[36,93937,93938,93940,93942,93944,93946],{"class":38,"line":696},[36,93939,58327],{"class":112},[36,93941,54994],{"class":42},[36,93943,5445],{"class":112},[36,93945,55049],{"class":46},[36,93947,5029],{"class":42},[36,93949,93950,93952,93954,93956,93958],{"class":38,"line":702},[36,93951,58341],{"class":112},[36,93953,54994],{"class":42},[36,93955,5445],{"class":112},[36,93957,55049],{"class":46},[36,93959,5029],{"class":42},[36,93961,93962,93964,93966,93968],{"class":38,"line":708},[36,93963,58440],{"class":112},[36,93965,54994],{"class":42},[36,93967,93558],{"class":112},[36,93969,5029],{"class":42},[36,93971,93972,93974,93976,93978,93980],{"class":38,"line":713},[36,93973,58478],{"class":112},[36,93975,54994],{"class":42},[36,93977,4695],{"class":112},[36,93979,55049],{"class":46},[36,93981,5029],{"class":42},[36,93983,93984,93986,93988,93990],{"class":38,"line":719},[36,93985,60971],{"class":112},[36,93987,54994],{"class":42},[36,93989,64397],{"class":112},[36,93991,5029],{"class":42},[36,93993,93994,93996,93998,94000],{"class":38,"line":725},[36,93995,60841],{"class":112},[36,93997,54994],{"class":42},[36,93999,55149],{"class":112},[36,94001,5029],{"class":42},[36,94003,94004,94006,94008,94010,94012],{"class":38,"line":731},[36,94005,93597],{"class":112},[36,94007,54994],{"class":42},[36,94009,4194],{"class":112},[36,94011,55049],{"class":46},[36,94013,5029],{"class":42},[36,94015,94016],{"class":38,"line":736},[36,94017,5899],{"class":42},[36,94019,94020,94022,94024],{"class":38,"line":742},[36,94021,55974],{"class":42},[36,94023,3785],{"class":54857},[36,94025,54864],{"class":42},[36,94027,94028,94030,94032],{"class":38,"line":748},[36,94029,55342],{"class":42},[36,94031,54891],{"class":54857},[36,94033,54864],{"class":42},[36,94035,94036],{"class":38,"line":754},[36,94037,659],{"emptyLinePlaceholder":658},[36,94039,94040,94042,94044],{"class":38,"line":760},[36,94041,393],{"class":42},[36,94043,55357],{"class":54857},[36,94045,54864],{"class":42},[36,94047,94048,94050,94052,94054,94056,94058,94060,94062],{"class":38,"line":766},[36,94049,55701],{"class":42},[36,94051,55168],{"class":54857},[36,94053,57043],{"class":101},[36,94055,47],{"class":42},[36,94057,57048],{"class":105},[36,94059,58870],{"class":42},[36,94061,55168],{"class":54857},[36,94063,54864],{"class":42},[36,94065,94066,94068,94070,94072,94074,94076,94078,94080],{"class":38,"line":772},[36,94067,55701],{"class":42},[36,94069,55370],{"class":54857},[36,94071,58795],{"class":101},[36,94073,47],{"class":42},[36,94075,91827],{"class":105},[36,94077,58870],{"class":42},[36,94079,55370],{"class":54857},[36,94081,54864],{"class":42},[36,94083,94084,94086,94088],{"class":38,"line":778},[36,94085,55701],{"class":42},[36,94087,55370],{"class":54857},[36,94089,54864],{"class":42},[36,94091,94092,94094,94096,94098,94100,94102,94104,94106],{"class":38,"line":783},[36,94093,14882],{"class":46},[36,94095,90486],{"class":112},[36,94097,673],{"class":46},[36,94099,57953],{"class":42},[36,94101,57956],{"class":101},[36,94103,495],{"class":42},[36,94105,93698],{"class":105},[36,94107,922],{"class":42},[36,94109,94110,94112,94114,94116],{"class":38,"line":789},[36,94111,55776],{"class":46},[36,94113,13119],{"class":42},[36,94115,47],{"class":46},[36,94117,1074],{"class":112},[36,94119,94120,94122,94124],{"class":38,"line":795},[36,94121,73638],{"class":46},[36,94123,93717],{"class":101},[36,94125,14514],{"class":42},[36,94127,94128,94130,94132,94134],{"class":38,"line":801},[36,94129,93724],{"class":42},[36,94131,47],{"class":46},[36,94133,6734],{"class":42},[36,94135,6405],{"class":46},[36,94137,94138],{"class":38,"line":807},[36,94139,93735],{"class":3943},[36,94141,94142],{"class":38,"line":813},[36,94143,5899],{"class":42},[36,94145,94146],{"class":38,"line":819},[36,94147,93744],{"class":3943},[36,94149,94150],{"class":38,"line":824},[36,94151,94152],{"class":3943},"    \u002F\u002F 手写防抖函数\n",[36,94154,94155],{"class":38,"line":829},[36,94156,94157],{"class":3943},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[36,94159,94160],{"class":38,"line":851},[36,94161,94162],{"class":3943},"    \u002F\u002F 1.声明定时器变量\n",[36,94164,94165],{"class":38,"line":868},[36,94166,94167],{"class":3943},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[36,94169,94170],{"class":38,"line":873},[36,94171,94172],{"class":3943},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[36,94174,94175],{"class":38,"line":891},[36,94176,94177],{"class":3943},"    \u002F\u002F 4.定时器里面写函数调用\n",[36,94179,94180,94182,94185,94187,94190,94192,94194],{"class":38,"line":906},[36,94181,73638],{"class":46},[36,94183,94184],{"class":101}," debounce",[36,94186,495],{"class":42},[36,94188,94189],{"class":468},"fn",[36,94191,478],{"class":42},[36,94193,4590],{"class":468},[36,94195,16102],{"class":42},[36,94197,94198,94200],{"class":38,"line":925},[36,94199,83326],{"class":46},[36,94201,94202],{"class":42}," timer\n",[36,94204,94205],{"class":38,"line":943},[36,94206,94207],{"class":3943},"      \u002F\u002F return 返回一个匿名函数\n",[36,94209,94210,94212,94214],{"class":38,"line":948},[36,94211,77536],{"class":46},[36,94213,62473],{"class":46},[36,94215,58008],{"class":42},[36,94217,94218],{"class":38,"line":971},[36,94219,94220],{"class":3943},"        \u002F\u002F 这里边写第二三四步\n",[36,94222,94223,94225,94228,94231],{"class":38,"line":992},[36,94224,995],{"class":46},[36,94226,94227],{"class":42}," (timer) ",[36,94229,94230],{"class":101},"clearTimeout",[36,94232,94233],{"class":42},"(timer)\n",[36,94235,94236,94239,94241,94244,94246,94248],{"class":38,"line":1020},[36,94237,94238],{"class":42},"        timer ",[36,94240,47],{"class":46},[36,94242,94243],{"class":101}," setTimeout",[36,94245,495],{"class":42},[36,94247,58005],{"class":46},[36,94249,58008],{"class":42},[36,94251,94252,94255,94257],{"class":38,"line":1036},[36,94253,94254],{"class":101},"          fn",[36,94256,16710],{"class":42},[36,94258,94259],{"class":3943},"\u002F\u002F加小括号调用fn }, t)\n",[36,94261,94262],{"class":38,"line":1041},[36,94263,94264],{"class":42},"        }, t)\n",[36,94266,94267],{"class":38,"line":1052},[36,94268,55955],{"class":42},[36,94270,94271],{"class":38,"line":1065},[36,94272,5899],{"class":42},[36,94274,94275,94277,94279,94281,94283,94285,94287,94289,94291],{"class":38,"line":1077},[36,94276,93759],{"class":42},[36,94278,61368],{"class":101},[36,94280,495],{"class":42},[36,94282,93766],{"class":105},[36,94284,478],{"class":42},[36,94286,93772],{"class":101},[36,94288,93775],{"class":42},[36,94290,68629],{"class":112},[36,94292,2005],{"class":42},[36,94294,94295],{"class":38,"line":1082},[36,94296,659],{"emptyLinePlaceholder":658},[36,94298,94299],{"class":38,"line":1125},[36,94300,94301],{"class":3943},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[36,94303,94304],{"class":38,"line":1164},[36,94305,94306],{"class":3943},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[36,94308,94309],{"class":38,"line":1169},[36,94310,94311],{"class":3943},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[36,94313,94314],{"class":38,"line":1180},[36,94315,94316],{"class":3943},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[36,94318,94319,94321,94323],{"class":38,"line":1198},[36,94320,55974],{"class":42},[36,94322,55370],{"class":54857},[36,94324,54864],{"class":42},[36,94326,94327,94329,94331],{"class":38,"line":1215},[36,94328,55342],{"class":42},[36,94330,55357],{"class":54857},[36,94332,54864],{"class":42},[36,94334,94335],{"class":38,"line":1236},[36,94336,659],{"emptyLinePlaceholder":658},[36,94338,94339,94341,94343],{"class":38,"line":1245},[36,94340,55342],{"class":42},[36,94342,54192],{"class":54857},[36,94344,54864],{"class":42},[318,94346,94348],{"id":94347},"_4172-节流","4.17.2 节流",[19,94350,94351],{},[5198,94352],{"alt":31,"src":94353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,94355,94356],{},[5198,94357],{"alt":31,"src":94358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,94360,94361],{},[4027,94362,94363],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,94365,94366],{},"实现方式：",[4875,94368,94369],{},[214,94370,94371],{},"lodash 提供的节流函数来处理",[19,94373,94374],{},"_.throttle(func,[wait=0],[options=])",[19,94376,94377],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[26,94379,94381],{"className":54190,"code":94380,"language":54192,"meta":31,"style":31},"\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",[33,94382,94383,94393,94407,94411,94419,94433,94453,94465,94473,94479,94489,94501,94513,94523,94535,94545,94555,94567,94571,94579,94587,94591,94599,94617,94635,94643,94661,94671,94679,94689,94693,94697,94701,94706,94711,94732,94740,94748,94752],{"__ignoreMap":31},[36,94384,94385,94387,94389,94391],{"class":38,"line":39},[36,94386,54854],{"class":42},[36,94388,54858],{"class":54857},[36,94390,54861],{"class":101},[36,94392,54864],{"class":42},[36,94394,94395,94397,94399,94401,94403,94405],{"class":38,"line":53},[36,94396,393],{"class":42},[36,94398,54192],{"class":54857},[36,94400,54873],{"class":101},[36,94402,47],{"class":42},[36,94404,54878],{"class":105},[36,94406,54864],{"class":42},[36,94408,94409],{"class":38,"line":196},[36,94410,659],{"emptyLinePlaceholder":658},[36,94412,94413,94415,94417],{"class":38,"line":642},[36,94414,393],{"class":42},[36,94416,54891],{"class":54857},[36,94418,54864],{"class":42},[36,94420,94421,94423,94425,94427,94429,94431],{"class":38,"line":655},[36,94422,55701],{"class":42},[36,94424,54901],{"class":54857},[36,94426,54904],{"class":101},[36,94428,47],{"class":42},[36,94430,54909],{"class":105},[36,94432,54864],{"class":42},[36,94434,94435,94437,94439,94441,94443,94445,94447,94449,94451],{"class":38,"line":662},[36,94436,55701],{"class":42},[36,94438,54901],{"class":54857},[36,94440,18576],{"class":101},[36,94442,47],{"class":42},[36,94444,54948],{"class":105},[36,94446,54928],{"class":101},[36,94448,47],{"class":42},[36,94450,54955],{"class":105},[36,94452,54864],{"class":42},[36,94454,94455,94457,94459,94461,94463],{"class":38,"line":667},[36,94456,55701],{"class":42},[36,94458,54964],{"class":54857},[36,94460,54967],{"class":42},[36,94462,54964],{"class":54857},[36,94464,54864],{"class":42},[36,94466,94467,94469,94471],{"class":38,"line":679},[36,94468,55701],{"class":42},[36,94470,3785],{"class":54857},[36,94472,54864],{"class":42},[36,94474,94475,94477],{"class":38,"line":685},[36,94476,58308],{"class":101},[36,94478,19228],{"class":42},[36,94480,94481,94483,94485,94487],{"class":38,"line":691},[36,94482,76150],{"class":112},[36,94484,54994],{"class":42},[36,94486,64060],{"class":112},[36,94488,5029],{"class":42},[36,94490,94491,94493,94495,94497,94499],{"class":38,"line":696},[36,94492,58327],{"class":112},[36,94494,54994],{"class":42},[36,94496,5445],{"class":112},[36,94498,55049],{"class":46},[36,94500,5029],{"class":42},[36,94502,94503,94505,94507,94509,94511],{"class":38,"line":702},[36,94504,58341],{"class":112},[36,94506,54994],{"class":42},[36,94508,5445],{"class":112},[36,94510,55049],{"class":46},[36,94512,5029],{"class":42},[36,94514,94515,94517,94519,94521],{"class":38,"line":708},[36,94516,58440],{"class":112},[36,94518,54994],{"class":42},[36,94520,93558],{"class":112},[36,94522,5029],{"class":42},[36,94524,94525,94527,94529,94531,94533],{"class":38,"line":713},[36,94526,58478],{"class":112},[36,94528,54994],{"class":42},[36,94530,4695],{"class":112},[36,94532,55049],{"class":46},[36,94534,5029],{"class":42},[36,94536,94537,94539,94541,94543],{"class":38,"line":719},[36,94538,60971],{"class":112},[36,94540,54994],{"class":42},[36,94542,64397],{"class":112},[36,94544,5029],{"class":42},[36,94546,94547,94549,94551,94553],{"class":38,"line":725},[36,94548,60841],{"class":112},[36,94550,54994],{"class":42},[36,94552,55149],{"class":112},[36,94554,5029],{"class":42},[36,94556,94557,94559,94561,94563,94565],{"class":38,"line":731},[36,94558,93597],{"class":112},[36,94560,54994],{"class":42},[36,94562,4194],{"class":112},[36,94564,55049],{"class":46},[36,94566,5029],{"class":42},[36,94568,94569],{"class":38,"line":736},[36,94570,5899],{"class":42},[36,94572,94573,94575,94577],{"class":38,"line":742},[36,94574,55974],{"class":42},[36,94576,3785],{"class":54857},[36,94578,54864],{"class":42},[36,94580,94581,94583,94585],{"class":38,"line":748},[36,94582,55342],{"class":42},[36,94584,54891],{"class":54857},[36,94586,54864],{"class":42},[36,94588,94589],{"class":38,"line":754},[36,94590,659],{"emptyLinePlaceholder":658},[36,94592,94593,94595,94597],{"class":38,"line":760},[36,94594,393],{"class":42},[36,94596,55357],{"class":54857},[36,94598,54864],{"class":42},[36,94600,94601,94603,94605,94607,94609,94611,94613,94615],{"class":38,"line":766},[36,94602,55701],{"class":42},[36,94604,55168],{"class":54857},[36,94606,57043],{"class":101},[36,94608,47],{"class":42},[36,94610,57048],{"class":105},[36,94612,58870],{"class":42},[36,94614,55168],{"class":54857},[36,94616,54864],{"class":42},[36,94618,94619,94621,94623,94625,94627,94629,94631,94633],{"class":38,"line":772},[36,94620,55701],{"class":42},[36,94622,55370],{"class":54857},[36,94624,58795],{"class":101},[36,94626,47],{"class":42},[36,94628,91827],{"class":105},[36,94630,58870],{"class":42},[36,94632,55370],{"class":54857},[36,94634,54864],{"class":42},[36,94636,94637,94639,94641],{"class":38,"line":778},[36,94638,55701],{"class":42},[36,94640,55370],{"class":54857},[36,94642,54864],{"class":42},[36,94644,94645,94647,94649,94651,94653,94655,94657,94659],{"class":38,"line":783},[36,94646,14882],{"class":46},[36,94648,90486],{"class":112},[36,94650,673],{"class":46},[36,94652,57953],{"class":42},[36,94654,57956],{"class":101},[36,94656,495],{"class":42},[36,94658,93698],{"class":105},[36,94660,922],{"class":42},[36,94662,94663,94665,94667,94669],{"class":38,"line":789},[36,94664,55776],{"class":46},[36,94666,13119],{"class":42},[36,94668,47],{"class":46},[36,94670,1074],{"class":112},[36,94672,94673,94675,94677],{"class":38,"line":795},[36,94674,73638],{"class":46},[36,94676,93717],{"class":101},[36,94678,14514],{"class":42},[36,94680,94681,94683,94685,94687],{"class":38,"line":801},[36,94682,93724],{"class":42},[36,94684,47],{"class":46},[36,94686,6734],{"class":42},[36,94688,6405],{"class":46},[36,94690,94691],{"class":38,"line":807},[36,94692,93735],{"class":3943},[36,94694,94695],{"class":38,"line":813},[36,94696,5899],{"class":42},[36,94698,94699],{"class":38,"line":819},[36,94700,93744],{"class":3943},[36,94702,94703],{"class":38,"line":824},[36,94704,94705],{"class":3943},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[36,94707,94708],{"class":38,"line":829},[36,94709,94710],{"class":3943},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[36,94712,94713,94715,94717,94719,94721,94723,94726,94728,94730],{"class":38,"line":851},[36,94714,93759],{"class":42},[36,94716,61368],{"class":101},[36,94718,495],{"class":42},[36,94720,93766],{"class":105},[36,94722,93769],{"class":42},[36,94724,94725],{"class":101},"throttle",[36,94727,93775],{"class":42},[36,94729,68629],{"class":112},[36,94731,2005],{"class":42},[36,94733,94734,94736,94738],{"class":38,"line":868},[36,94735,55974],{"class":42},[36,94737,55370],{"class":54857},[36,94739,54864],{"class":42},[36,94741,94742,94744,94746],{"class":38,"line":873},[36,94743,55342],{"class":42},[36,94745,55357],{"class":54857},[36,94747,54864],{"class":42},[36,94749,94750],{"class":38,"line":891},[36,94751,659],{"emptyLinePlaceholder":658},[36,94753,94754,94756,94758],{"class":38,"line":906},[36,94755,55342],{"class":42},[36,94757,54192],{"class":54857},[36,94759,54864],{"class":42},[4875,94761,94762],{},[214,94763,94764],{},"手写一个节流函数来处理",[19,94766,74506],{},[19,94768,93818],{},[19,94770,94771],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,94773,94774],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[26,94776,94778],{"className":54190,"code":94777,"language":54192,"meta":31,"style":31},"\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",[33,94779,94780,94790,94804,94808,94816,94830,94850,94862,94870,94876,94886,94898,94910,94920,94932,94942,94952,94964,94968,94976,94984,94988,94996,95014,95032,95040,95058,95068,95076,95086,95090,95094,95098,95103,95108,95113,95118,95123,95128,95145,95151,95159,95170,95185,95192,95197,95202,95212,95217,95222,95227,95231,95235,95239,95259,95267,95275,95279],{"__ignoreMap":31},[36,94781,94782,94784,94786,94788],{"class":38,"line":39},[36,94783,54854],{"class":42},[36,94785,54858],{"class":54857},[36,94787,54861],{"class":101},[36,94789,54864],{"class":42},[36,94791,94792,94794,94796,94798,94800,94802],{"class":38,"line":53},[36,94793,393],{"class":42},[36,94795,54192],{"class":54857},[36,94797,54873],{"class":101},[36,94799,47],{"class":42},[36,94801,54878],{"class":105},[36,94803,54864],{"class":42},[36,94805,94806],{"class":38,"line":196},[36,94807,659],{"emptyLinePlaceholder":658},[36,94809,94810,94812,94814],{"class":38,"line":642},[36,94811,393],{"class":42},[36,94813,54891],{"class":54857},[36,94815,54864],{"class":42},[36,94817,94818,94820,94822,94824,94826,94828],{"class":38,"line":655},[36,94819,55701],{"class":42},[36,94821,54901],{"class":54857},[36,94823,54904],{"class":101},[36,94825,47],{"class":42},[36,94827,54909],{"class":105},[36,94829,54864],{"class":42},[36,94831,94832,94834,94836,94838,94840,94842,94844,94846,94848],{"class":38,"line":662},[36,94833,55701],{"class":42},[36,94835,54901],{"class":54857},[36,94837,18576],{"class":101},[36,94839,47],{"class":42},[36,94841,54948],{"class":105},[36,94843,54928],{"class":101},[36,94845,47],{"class":42},[36,94847,54955],{"class":105},[36,94849,54864],{"class":42},[36,94851,94852,94854,94856,94858,94860],{"class":38,"line":667},[36,94853,55701],{"class":42},[36,94855,54964],{"class":54857},[36,94857,54967],{"class":42},[36,94859,54964],{"class":54857},[36,94861,54864],{"class":42},[36,94863,94864,94866,94868],{"class":38,"line":679},[36,94865,55701],{"class":42},[36,94867,3785],{"class":54857},[36,94869,54864],{"class":42},[36,94871,94872,94874],{"class":38,"line":685},[36,94873,58308],{"class":101},[36,94875,19228],{"class":42},[36,94877,94878,94880,94882,94884],{"class":38,"line":691},[36,94879,76150],{"class":112},[36,94881,54994],{"class":42},[36,94883,64060],{"class":112},[36,94885,5029],{"class":42},[36,94887,94888,94890,94892,94894,94896],{"class":38,"line":696},[36,94889,58327],{"class":112},[36,94891,54994],{"class":42},[36,94893,5445],{"class":112},[36,94895,55049],{"class":46},[36,94897,5029],{"class":42},[36,94899,94900,94902,94904,94906,94908],{"class":38,"line":702},[36,94901,58341],{"class":112},[36,94903,54994],{"class":42},[36,94905,5445],{"class":112},[36,94907,55049],{"class":46},[36,94909,5029],{"class":42},[36,94911,94912,94914,94916,94918],{"class":38,"line":708},[36,94913,58440],{"class":112},[36,94915,54994],{"class":42},[36,94917,93558],{"class":112},[36,94919,5029],{"class":42},[36,94921,94922,94924,94926,94928,94930],{"class":38,"line":713},[36,94923,58478],{"class":112},[36,94925,54994],{"class":42},[36,94927,4695],{"class":112},[36,94929,55049],{"class":46},[36,94931,5029],{"class":42},[36,94933,94934,94936,94938,94940],{"class":38,"line":719},[36,94935,60971],{"class":112},[36,94937,54994],{"class":42},[36,94939,64397],{"class":112},[36,94941,5029],{"class":42},[36,94943,94944,94946,94948,94950],{"class":38,"line":725},[36,94945,60841],{"class":112},[36,94947,54994],{"class":42},[36,94949,55149],{"class":112},[36,94951,5029],{"class":42},[36,94953,94954,94956,94958,94960,94962],{"class":38,"line":731},[36,94955,93597],{"class":112},[36,94957,54994],{"class":42},[36,94959,4194],{"class":112},[36,94961,55049],{"class":46},[36,94963,5029],{"class":42},[36,94965,94966],{"class":38,"line":736},[36,94967,5899],{"class":42},[36,94969,94970,94972,94974],{"class":38,"line":742},[36,94971,55974],{"class":42},[36,94973,3785],{"class":54857},[36,94975,54864],{"class":42},[36,94977,94978,94980,94982],{"class":38,"line":748},[36,94979,55342],{"class":42},[36,94981,54891],{"class":54857},[36,94983,54864],{"class":42},[36,94985,94986],{"class":38,"line":754},[36,94987,659],{"emptyLinePlaceholder":658},[36,94989,94990,94992,94994],{"class":38,"line":760},[36,94991,393],{"class":42},[36,94993,55357],{"class":54857},[36,94995,54864],{"class":42},[36,94997,94998,95000,95002,95004,95006,95008,95010,95012],{"class":38,"line":766},[36,94999,55701],{"class":42},[36,95001,55168],{"class":54857},[36,95003,57043],{"class":101},[36,95005,47],{"class":42},[36,95007,57048],{"class":105},[36,95009,58870],{"class":42},[36,95011,55168],{"class":54857},[36,95013,54864],{"class":42},[36,95015,95016,95018,95020,95022,95024,95026,95028,95030],{"class":38,"line":772},[36,95017,55701],{"class":42},[36,95019,55370],{"class":54857},[36,95021,58795],{"class":101},[36,95023,47],{"class":42},[36,95025,91827],{"class":105},[36,95027,58870],{"class":42},[36,95029,55370],{"class":54857},[36,95031,54864],{"class":42},[36,95033,95034,95036,95038],{"class":38,"line":778},[36,95035,55701],{"class":42},[36,95037,55370],{"class":54857},[36,95039,54864],{"class":42},[36,95041,95042,95044,95046,95048,95050,95052,95054,95056],{"class":38,"line":783},[36,95043,14882],{"class":46},[36,95045,90486],{"class":112},[36,95047,673],{"class":46},[36,95049,57953],{"class":42},[36,95051,57956],{"class":101},[36,95053,495],{"class":42},[36,95055,93698],{"class":105},[36,95057,922],{"class":42},[36,95059,95060,95062,95064,95066],{"class":38,"line":789},[36,95061,55776],{"class":46},[36,95063,13119],{"class":42},[36,95065,47],{"class":46},[36,95067,1074],{"class":112},[36,95069,95070,95072,95074],{"class":38,"line":795},[36,95071,73638],{"class":46},[36,95073,93717],{"class":101},[36,95075,14514],{"class":42},[36,95077,95078,95080,95082,95084],{"class":38,"line":801},[36,95079,93724],{"class":42},[36,95081,47],{"class":46},[36,95083,6734],{"class":42},[36,95085,6405],{"class":46},[36,95087,95088],{"class":38,"line":807},[36,95089,93735],{"class":3943},[36,95091,95092],{"class":38,"line":813},[36,95093,5899],{"class":42},[36,95095,95096],{"class":38,"line":819},[36,95097,93744],{"class":3943},[36,95099,95100],{"class":38,"line":824},[36,95101,95102],{"class":3943},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[36,95104,95105],{"class":38,"line":829},[36,95106,95107],{"class":3943},"    \u002F\u002F 1.声明一个定时器变量\n",[36,95109,95110],{"class":38,"line":851},[36,95111,95112],{"class":3943},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[36,95114,95115],{"class":38,"line":868},[36,95116,95117],{"class":3943},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[36,95119,95120],{"class":38,"line":873},[36,95121,95122],{"class":3943},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[36,95124,95125],{"class":38,"line":891},[36,95126,95127],{"class":3943},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[36,95129,95130,95132,95135,95137,95139,95141,95143],{"class":38,"line":906},[36,95131,73638],{"class":46},[36,95133,95134],{"class":101}," throttle",[36,95136,495],{"class":42},[36,95138,94189],{"class":468},[36,95140,478],{"class":42},[36,95142,4590],{"class":468},[36,95144,16102],{"class":42},[36,95146,95147,95149],{"class":38,"line":925},[36,95148,83326],{"class":46},[36,95150,94202],{"class":42},[36,95152,95153,95155,95157],{"class":38,"line":943},[36,95154,77536],{"class":46},[36,95156,62473],{"class":46},[36,95158,58008],{"class":42},[36,95160,95161,95163,95165,95167],{"class":38,"line":948},[36,95162,995],{"class":46},[36,95164,5386],{"class":42},[36,95166,4101],{"class":46},[36,95168,95169],{"class":42},"timer) {\n",[36,95171,95172,95175,95177,95179,95181,95183],{"class":38,"line":971},[36,95173,95174],{"class":42},"          timer ",[36,95176,47],{"class":46},[36,95178,94243],{"class":101},[36,95180,495],{"class":42},[36,95182,58005],{"class":46},[36,95184,58008],{"class":42},[36,95186,95187,95190],{"class":38,"line":992},[36,95188,95189],{"class":101},"            fn",[36,95191,903],{"class":42},[36,95193,95194],{"class":38,"line":1020},[36,95195,95196],{"class":3943},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[36,95198,95199],{"class":38,"line":1036},[36,95200,95201],{"class":3943},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[36,95203,95204,95207,95209],{"class":38,"line":1041},[36,95205,95206],{"class":42},"            timer ",[36,95208,47],{"class":46},[36,95210,95211],{"class":112}," null\n",[36,95213,95214],{"class":38,"line":1052},[36,95215,95216],{"class":3943},"            \u002F\u002F 不能用clearTimeout(timer)\n",[36,95218,95219],{"class":38,"line":1065},[36,95220,95221],{"class":3943},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[36,95223,95224],{"class":38,"line":1077},[36,95225,95226],{"class":42},"          }, t)\n",[36,95228,95229],{"class":38,"line":1082},[36,95230,6239],{"class":42},[36,95232,95233],{"class":38,"line":1125},[36,95234,55955],{"class":42},[36,95236,95237],{"class":38,"line":1164},[36,95238,5899],{"class":42},[36,95240,95241,95243,95245,95247,95249,95251,95253,95255,95257],{"class":38,"line":1169},[36,95242,93759],{"class":42},[36,95244,61368],{"class":101},[36,95246,495],{"class":42},[36,95248,93766],{"class":105},[36,95250,478],{"class":42},[36,95252,94725],{"class":101},[36,95254,93775],{"class":42},[36,95256,68629],{"class":112},[36,95258,2005],{"class":42},[36,95260,95261,95263,95265],{"class":38,"line":1180},[36,95262,55974],{"class":42},[36,95264,55370],{"class":54857},[36,95266,54864],{"class":42},[36,95268,95269,95271,95273],{"class":38,"line":1198},[36,95270,55342],{"class":42},[36,95272,55357],{"class":54857},[36,95274,54864],{"class":42},[36,95276,95277],{"class":38,"line":1215},[36,95278,659],{"emptyLinePlaceholder":658},[36,95280,95281,95283,95285],{"class":38,"line":1236},[36,95282,55342],{"class":42},[36,95284,54192],{"class":54857},[36,95286,54864],{"class":42},[318,95288,95290],{"id":95289},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[26,95292,95294],{"className":56624,"code":95293,"language":56626,"meta":31,"style":31},"\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",[33,95295,95296,95304,95312,95317,95322,95327,95332,95336,95344],{"__ignoreMap":31},[36,95297,95298,95300,95302],{"class":38,"line":39},[36,95299,393],{"class":42},[36,95301,55357],{"class":54857},[36,95303,54864],{"class":42},[36,95305,95306,95308,95310],{"class":38,"line":53},[36,95307,55701],{"class":42},[36,95309,55370],{"class":54857},[36,95311,54864],{"class":42},[36,95313,95314],{"class":38,"line":196},[36,95315,95316],{"class":42},"    let timer = null\n",[36,95318,95319],{"class":38,"line":642},[36,95320,95321],{"class":42},"    timer = setTimeout(() => {\n",[36,95323,95324],{"class":38,"line":655},[36,95325,95326],{"class":42},"      clearTimeout(timer)\n",[36,95328,95329],{"class":38,"line":662},[36,95330,95331],{"class":42},"      console.log(timer)\n",[36,95333,95334],{"class":38,"line":667},[36,95335,63780],{"class":42},[36,95337,95338,95340,95342],{"class":38,"line":679},[36,95339,55974],{"class":42},[36,95341,55370],{"class":54857},[36,95343,54864],{"class":42},[36,95345,95346,95348,95350],{"class":38,"line":685},[36,95347,55342],{"class":42},[36,95349,55357],{"class":54857},[36,95351,54864],{"class":42},[19,95353,95354],{},"输出为1",[19,95356,95357],{},"在开启的定时器里边写清除定时器",[19,95359,95360],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[318,95362,95364],{"id":95363},"_4174-节流综合案例","4.17.4 节流综合案例",[19,95366,95367],{},"页面打开，可以记录上一次的视频播放位置",[19,95369,95370],{},[5198,95371],{"alt":31,"src":95372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,95374,95375],{},[5198,95376],{"alt":31,"src":95377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[26,95379,95381],{"className":54190,"code":95380,"language":54192,"meta":31,"style":31},"\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",[33,95382,95383,95393,95407,95411,95419,95433,95453,95473,95495,95508,95516,95522,95532,95542,95552,95556,95560,95567,95580,95592,95596,95600,95610,95622,95636,95640,95644,95651,95661,95674,95686,95696,95706,95722,95734,95738,95742,95750,95760,95772,95782,95792,95802,95806,95810,95820,95831,95835,95843,95851,95855,95863,95878,95893,95908,95929,95937,95945,95960,95982,95990,96005,96031,96057,96083,96091,96099,96118,96126,96131,96150,96155,96173,96178,96183,96191,96196,96210,96218,96223,96240,96244,96249,96271,96275,96283,96291,96295],{"__ignoreMap":31},[36,95384,95385,95387,95389,95391],{"class":38,"line":39},[36,95386,54854],{"class":42},[36,95388,54858],{"class":54857},[36,95390,54861],{"class":101},[36,95392,54864],{"class":42},[36,95394,95395,95397,95399,95401,95403,95405],{"class":38,"line":53},[36,95396,393],{"class":42},[36,95398,54192],{"class":54857},[36,95400,54873],{"class":101},[36,95402,47],{"class":42},[36,95404,54878],{"class":105},[36,95406,54864],{"class":42},[36,95408,95409],{"class":38,"line":196},[36,95410,659],{"emptyLinePlaceholder":658},[36,95412,95413,95415,95417],{"class":38,"line":642},[36,95414,393],{"class":42},[36,95416,54891],{"class":54857},[36,95418,54864],{"class":42},[36,95420,95421,95423,95425,95427,95429,95431],{"class":38,"line":655},[36,95422,55701],{"class":42},[36,95424,54901],{"class":54857},[36,95426,54904],{"class":101},[36,95428,47],{"class":42},[36,95430,54909],{"class":105},[36,95432,62682],{"class":42},[36,95434,95435,95437,95439,95441,95443,95445,95447,95449,95451],{"class":38,"line":662},[36,95436,55701],{"class":42},[36,95438,54901],{"class":54857},[36,95440,54920],{"class":101},[36,95442,47],{"class":42},[36,95444,54925],{"class":105},[36,95446,54928],{"class":101},[36,95448,47],{"class":42},[36,95450,54933],{"class":105},[36,95452,62682],{"class":42},[36,95454,95455,95457,95459,95461,95463,95465,95467,95469,95471],{"class":38,"line":667},[36,95456,55701],{"class":42},[36,95458,54901],{"class":54857},[36,95460,18576],{"class":101},[36,95462,47],{"class":42},[36,95464,54948],{"class":105},[36,95466,54928],{"class":101},[36,95468,47],{"class":42},[36,95470,54955],{"class":105},[36,95472,62682],{"class":42},[36,95474,95475,95477,95479,95481,95483,95486,95488,95490,95493],{"class":38,"line":679},[36,95476,55701],{"class":42},[36,95478,54901],{"class":54857},[36,95480,18576],{"class":101},[36,95482,47],{"class":42},[36,95484,95485],{"class":105},"\"referrer\"",[36,95487,54928],{"class":101},[36,95489,47],{"class":42},[36,95491,95492],{"class":105},"\"never\"",[36,95494,62682],{"class":42},[36,95496,95497,95499,95501,95504,95506],{"class":38,"line":685},[36,95498,55701],{"class":42},[36,95500,54964],{"class":54857},[36,95502,95503],{"class":42},">综合案例\u003C\u002F",[36,95505,54964],{"class":54857},[36,95507,54864],{"class":42},[36,95509,95510,95512,95514],{"class":38,"line":691},[36,95511,55701],{"class":42},[36,95513,3785],{"class":54857},[36,95515,54864],{"class":42},[36,95517,95518,95520],{"class":38,"line":696},[36,95519,10096],{"class":54857},[36,95521,19228],{"class":42},[36,95523,95524,95526,95528,95530],{"class":38,"line":702},[36,95525,58251],{"class":112},[36,95527,54994],{"class":42},[36,95529,1859],{"class":112},[36,95531,5029],{"class":42},[36,95533,95534,95536,95538,95540],{"class":38,"line":708},[36,95535,58262],{"class":112},[36,95537,54994],{"class":42},[36,95539,1859],{"class":112},[36,95541,5029],{"class":42},[36,95543,95544,95546,95548,95550],{"class":38,"line":713},[36,95545,76150],{"class":112},[36,95547,54994],{"class":42},[36,95549,64060],{"class":112},[36,95551,5029],{"class":42},[36,95553,95554],{"class":38,"line":719},[36,95555,5899],{"class":42},[36,95557,95558],{"class":38,"line":725},[36,95559,659],{"emptyLinePlaceholder":658},[36,95561,95562,95565],{"class":38,"line":731},[36,95563,95564],{"class":101},"    .container",[36,95566,19228],{"class":42},[36,95568,95569,95571,95573,95576,95578],{"class":38,"line":736},[36,95570,58327],{"class":112},[36,95572,54994],{"class":42},[36,95574,95575],{"class":112},"1200",[36,95577,55049],{"class":46},[36,95579,5029],{"class":42},[36,95581,95582,95584,95586,95588,95590],{"class":38,"line":742},[36,95583,58262],{"class":112},[36,95585,54994],{"class":42},[36,95587,1859],{"class":112},[36,95589,55113],{"class":112},[36,95591,5029],{"class":42},[36,95593,95594],{"class":38,"line":748},[36,95595,5899],{"class":42},[36,95597,95598],{"class":38,"line":754},[36,95599,659],{"emptyLinePlaceholder":658},[36,95601,95602,95605,95608],{"class":38,"line":760},[36,95603,95604],{"class":101},"    .video",[36,95606,95607],{"class":54857}," video",[36,95609,19228],{"class":42},[36,95611,95612,95614,95616,95618,95620],{"class":38,"line":766},[36,95613,58327],{"class":112},[36,95615,54994],{"class":42},[36,95617,4186],{"class":112},[36,95619,4203],{"class":46},[36,95621,5029],{"class":42},[36,95623,95624,95626,95628,95630,95632,95634],{"class":38,"line":772},[36,95625,58251],{"class":112},[36,95627,54994],{"class":42},[36,95629,1921],{"class":112},[36,95631,55049],{"class":46},[36,95633,1004],{"class":112},[36,95635,5029],{"class":42},[36,95637,95638],{"class":38,"line":778},[36,95639,5899],{"class":42},[36,95641,95642],{"class":38,"line":783},[36,95643,659],{"emptyLinePlaceholder":658},[36,95645,95646,95649],{"class":38,"line":789},[36,95647,95648],{"class":101},"    .elevator",[36,95650,19228],{"class":42},[36,95652,95653,95655,95657,95659],{"class":38,"line":795},[36,95654,58315],{"class":112},[36,95656,54994],{"class":42},[36,95658,89786],{"class":112},[36,95660,5029],{"class":42},[36,95662,95663,95665,95667,95670,95672],{"class":38,"line":801},[36,95664,58503],{"class":112},[36,95666,54994],{"class":42},[36,95668,95669],{"class":112},"280",[36,95671,55049],{"class":46},[36,95673,5029],{"class":42},[36,95675,95676,95678,95680,95682,95684],{"class":38,"line":807},[36,95677,89980],{"class":112},[36,95679,54994],{"class":42},[36,95681,1921],{"class":112},[36,95683,55049],{"class":46},[36,95685,5029],{"class":42},[36,95687,95688,95690,95692,95694],{"class":38,"line":813},[36,95689,89793],{"class":112},[36,95691,54994],{"class":42},[36,95693,89798],{"class":112},[36,95695,5029],{"class":42},[36,95697,95698,95700,95702,95704],{"class":38,"line":819},[36,95699,65276],{"class":112},[36,95701,54994],{"class":42},[36,95703,64397],{"class":112},[36,95705,5029],{"class":42},[36,95707,95708,95710,95712,95714,95716,95718,95720],{"class":38,"line":824},[36,95709,65532],{"class":112},[36,95711,54994],{"class":42},[36,95713,4092],{"class":112},[36,95715,55049],{"class":46},[36,95717,55078],{"class":112},[36,95719,65799],{"class":112},[36,95721,5029],{"class":42},[36,95723,95724,95726,95728,95730,95732],{"class":38,"line":829},[36,95725,58327],{"class":112},[36,95727,54994],{"class":42},[36,95729,4777],{"class":112},[36,95731,55049],{"class":46},[36,95733,5029],{"class":42},[36,95735,95736],{"class":38,"line":851},[36,95737,5899],{"class":42},[36,95739,95740],{"class":38,"line":868},[36,95741,659],{"emptyLinePlaceholder":658},[36,95743,95744,95746,95748],{"class":38,"line":873},[36,95745,95648],{"class":101},[36,95747,5134],{"class":54857},[36,95749,19228],{"class":42},[36,95751,95752,95754,95756,95758],{"class":38,"line":891},[36,95753,58565],{"class":112},[36,95755,54994],{"class":42},[36,95757,64424],{"class":112},[36,95759,5029],{"class":42},[36,95761,95762,95764,95766,95768,95770],{"class":38,"line":906},[36,95763,58251],{"class":112},[36,95765,54994],{"class":42},[36,95767,554],{"class":112},[36,95769,55049],{"class":46},[36,95771,5029],{"class":42},[36,95773,95774,95776,95778,95780],{"class":38,"line":925},[36,95775,67525],{"class":112},[36,95777,54994],{"class":42},[36,95779,58293],{"class":112},[36,95781,5029],{"class":42},[36,95783,95784,95786,95788,95790],{"class":38,"line":943},[36,95785,60841],{"class":112},[36,95787,54994],{"class":42},[36,95789,55149],{"class":112},[36,95791,5029],{"class":42},[36,95793,95794,95796,95798,95800],{"class":38,"line":948},[36,95795,60971],{"class":112},[36,95797,54994],{"class":42},[36,95799,65625],{"class":112},[36,95801,5029],{"class":42},[36,95803,95804],{"class":38,"line":971},[36,95805,5899],{"class":42},[36,95807,95808],{"class":38,"line":992},[36,95809,659],{"emptyLinePlaceholder":658},[36,95811,95812,95814,95816,95818],{"class":38,"line":1020},[36,95813,95648],{"class":101},[36,95815,5134],{"class":54857},[36,95817,67579],{"class":101},[36,95819,19228],{"class":42},[36,95821,95822,95824,95826,95829],{"class":38,"line":1036},[36,95823,60971],{"class":112},[36,95825,54994],{"class":42},[36,95827,95828],{"class":112},"#1286ff",[36,95830,5029],{"class":42},[36,95832,95833],{"class":38,"line":1041},[36,95834,5899],{"class":42},[36,95836,95837,95839,95841],{"class":38,"line":1052},[36,95838,55974],{"class":42},[36,95840,3785],{"class":54857},[36,95842,54864],{"class":42},[36,95844,95845,95847,95849],{"class":38,"line":1065},[36,95846,55342],{"class":42},[36,95848,54891],{"class":54857},[36,95850,54864],{"class":42},[36,95852,95853],{"class":38,"line":1077},[36,95854,659],{"emptyLinePlaceholder":658},[36,95856,95857,95859,95861],{"class":38,"line":1082},[36,95858,393],{"class":42},[36,95860,55357],{"class":54857},[36,95862,54864],{"class":42},[36,95864,95865,95867,95869,95871,95873,95876],{"class":38,"line":1125},[36,95866,55701],{"class":42},[36,95868,55168],{"class":54857},[36,95870,57043],{"class":101},[36,95872,47],{"class":42},[36,95874,95875],{"class":105},"\"container\"",[36,95877,54864],{"class":42},[36,95879,95880,95882,95884,95886,95888,95891],{"class":38,"line":1164},[36,95881,54898],{"class":42},[36,95883,55168],{"class":54857},[36,95885,57043],{"class":101},[36,95887,47],{"class":42},[36,95889,95890],{"class":105},"\"header\"",[36,95892,54864],{"class":42},[36,95894,95895,95897,95899,95901,95903,95906],{"class":38,"line":1169},[36,95896,58790],{"class":42},[36,95898,4113],{"class":54857},[36,95900,64612],{"class":101},[36,95902,47],{"class":42},[36,95904,95905],{"class":105},"\"http:\u002F\u002Fpip.itcast.cn\"",[36,95907,54864],{"class":42},[36,95909,95910,95912,95914,95916,95918,95921,95923,95925,95927],{"class":38,"line":1180},[36,95911,58858],{"class":42},[36,95913,5198],{"class":54857},[36,95915,58795],{"class":101},[36,95917,47],{"class":42},[36,95919,95920],{"class":105},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[36,95922,58803],{"class":101},[36,95924,47],{"class":42},[36,95926,11343],{"class":105},[36,95928,62682],{"class":42},[36,95930,95931,95933,95935],{"class":38,"line":1198},[36,95932,58963],{"class":42},[36,95934,4113],{"class":54857},[36,95936,54864],{"class":42},[36,95938,95939,95941,95943],{"class":38,"line":1215},[36,95940,55333],{"class":42},[36,95942,55168],{"class":54857},[36,95944,54864],{"class":42},[36,95946,95947,95949,95951,95953,95955,95958],{"class":38,"line":1236},[36,95948,54898],{"class":42},[36,95950,55168],{"class":54857},[36,95952,57043],{"class":101},[36,95954,47],{"class":42},[36,95956,95957],{"class":105},"\"video\"",[36,95959,54864],{"class":42},[36,95961,95962,95964,95966,95968,95970,95973,95976,95978,95980],{"class":38,"line":1245},[36,95963,58790],{"class":42},[36,95965,31794],{"class":54857},[36,95967,58795],{"class":101},[36,95969,47],{"class":42},[36,95971,95972],{"class":105},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[36,95974,95975],{"class":101}," controls",[36,95977,58870],{"class":42},[36,95979,31794],{"class":54857},[36,95981,54864],{"class":42},[36,95983,95984,95986,95988],{"class":38,"line":1250},[36,95985,55333],{"class":42},[36,95987,55168],{"class":54857},[36,95989,54864],{"class":42},[36,95991,95992,95994,95996,95998,96000,96003],{"class":38,"line":1265},[36,95993,54898],{"class":42},[36,95995,55168],{"class":54857},[36,95997,57043],{"class":101},[36,95999,47],{"class":42},[36,96001,96002],{"class":105},"\"elevator\"",[36,96004,54864],{"class":42},[36,96006,96007,96009,96011,96013,96015,96017,96020,96022,96024,96027,96029],{"class":38,"line":1281},[36,96008,58790],{"class":42},[36,96010,4113],{"class":54857},[36,96012,64612],{"class":101},[36,96014,47],{"class":42},[36,96016,67791],{"class":105},[36,96018,96019],{"class":101}," data-ref",[36,96021,47],{"class":42},[36,96023,95957],{"class":105},[36,96025,96026],{"class":42},">视频介绍\u003C\u002F",[36,96028,4113],{"class":54857},[36,96030,54864],{"class":42},[36,96032,96033,96035,96037,96039,96041,96043,96045,96047,96050,96053,96055],{"class":38,"line":1297},[36,96034,58790],{"class":42},[36,96036,4113],{"class":54857},[36,96038,64612],{"class":101},[36,96040,47],{"class":42},[36,96042,67791],{"class":105},[36,96044,96019],{"class":101},[36,96046,47],{"class":42},[36,96048,96049],{"class":105},"\"intro\"",[36,96051,96052],{"class":42},">课程简介\u003C\u002F",[36,96054,4113],{"class":54857},[36,96056,54864],{"class":42},[36,96058,96059,96061,96063,96065,96067,96069,96071,96073,96076,96079,96081],{"class":38,"line":1314},[36,96060,58790],{"class":42},[36,96062,4113],{"class":54857},[36,96064,64612],{"class":101},[36,96066,47],{"class":42},[36,96068,67791],{"class":105},[36,96070,96019],{"class":101},[36,96072,47],{"class":42},[36,96074,96075],{"class":105},"\"outline\"",[36,96077,96078],{"class":42},">评论列表\u003C\u002F",[36,96080,4113],{"class":54857},[36,96082,54864],{"class":42},[36,96084,96085,96087,96089],{"class":38,"line":1336},[36,96086,55333],{"class":42},[36,96088,55168],{"class":54857},[36,96090,54864],{"class":42},[36,96092,96093,96095,96097],{"class":38,"line":1356},[36,96094,55974],{"class":42},[36,96096,55168],{"class":54857},[36,96098,54864],{"class":42},[36,96100,96101,96103,96105,96107,96109,96112,96114,96116],{"class":38,"line":1361},[36,96102,55701],{"class":42},[36,96104,55370],{"class":54857},[36,96106,58795],{"class":101},[36,96108,47],{"class":42},[36,96110,96111],{"class":105},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[36,96113,58870],{"class":42},[36,96115,55370],{"class":54857},[36,96117,54864],{"class":42},[36,96119,96120,96122,96124],{"class":38,"line":1407},[36,96121,55701],{"class":42},[36,96123,55370],{"class":54857},[36,96125,54864],{"class":42},[36,96127,96128],{"class":38,"line":1423},[36,96129,96130],{"class":3943},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[36,96132,96133,96135,96137,96139,96141,96143,96145,96148],{"class":38,"line":1439},[36,96134,14882],{"class":46},[36,96136,95607],{"class":112},[36,96138,673],{"class":46},[36,96140,57953],{"class":42},[36,96142,57956],{"class":101},[36,96144,495],{"class":42},[36,96146,96147],{"class":105},"'video'",[36,96149,922],{"class":42},[36,96151,96152],{"class":38,"line":1444},[36,96153,96154],{"class":3943},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[36,96156,96157,96160,96162,96164,96166,96169,96171],{"class":38,"line":1486},[36,96158,96159],{"class":42},"    video.ontimeupdate ",[36,96161,47],{"class":46},[36,96163,91908],{"class":42},[36,96165,94725],{"class":101},[36,96167,96168],{"class":42},"(() ",[36,96170,88276],{"class":46},[36,96172,19228],{"class":42},[36,96174,96175],{"class":38,"line":1499},[36,96176,96177],{"class":3943},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[36,96179,96180],{"class":38,"line":1513},[36,96181,96182],{"class":3943},"      \u002F\u002F 控制台输出当前的时间\n",[36,96184,96185,96188],{"class":38,"line":1518},[36,96186,96187],{"class":3943},"      \u002F\u002F console.log(video.currentTime)",[36,96189,96190],{"class":3943},"  \u002F\u002F获得当前的视频时间\n",[36,96192,96193],{"class":38,"line":1529},[36,96194,96195],{"class":3943},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[36,96197,96198,96200,96202,96204,96207],{"class":38,"line":1539},[36,96199,78237],{"class":42},[36,96201,75208],{"class":101},[36,96203,495],{"class":42},[36,96205,96206],{"class":105},"'currentTime'",[36,96208,96209],{"class":42},", video.currentTime)\n",[36,96211,96212,96214,96216],{"class":38,"line":1544},[36,96213,58091],{"class":42},[36,96215,3727],{"class":112},[36,96217,922],{"class":42},[36,96219,96220],{"class":38,"line":1555},[36,96221,96222],{"class":3943},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[36,96224,96225,96228,96231,96233,96236,96238],{"class":38,"line":1572},[36,96226,96227],{"class":42},"    video.",[36,96229,96230],{"class":101},"onloadeddata",[36,96232,673],{"class":46},[36,96234,96235],{"class":42}," () ",[36,96237,88276],{"class":46},[36,96239,19228],{"class":42},[36,96241,96242],{"class":38,"line":1592},[36,96243,63567],{"class":3943},[36,96245,96246],{"class":38,"line":1597},[36,96247,96248],{"class":3943},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[36,96250,96251,96254,96256,96259,96261,96263,96265,96267,96269],{"class":38,"line":1610},[36,96252,96253],{"class":42},"      video.currentTime ",[36,96255,47],{"class":46},[36,96257,96258],{"class":42}," localStorage.",[36,96260,75239],{"class":101},[36,96262,495],{"class":42},[36,96264,96206],{"class":105},[36,96266,17373],{"class":42},[36,96268,74911],{"class":46},[36,96270,1074],{"class":112},[36,96272,96273],{"class":38,"line":1632},[36,96274,5899],{"class":42},[36,96276,96277,96279,96281],{"class":38,"line":1646},[36,96278,55974],{"class":42},[36,96280,55370],{"class":54857},[36,96282,54864],{"class":42},[36,96284,96285,96287,96289],{"class":38,"line":1651},[36,96286,55342],{"class":42},[36,96288,55357],{"class":54857},[36,96290,54864],{"class":42},[36,96292,96293],{"class":38,"line":1664},[36,96294,659],{"emptyLinePlaceholder":658},[36,96296,96297,96299,96301],{"class":38,"line":1669},[36,96298,55342],{"class":42},[36,96300,54192],{"class":54857},[36,96302,54864],{"class":42},[3785,96304,96305],{},"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":31,"searchDepth":53,"depth":53,"links":96307},[96308,96313,96317,96318,96319,96324,96329,96330,96331,96332,96339,96344,96345,96355,96359,96360,96364],{"id":80245,"depth":53,"text":80246,"children":96309},[96310,96311,96312],{"id":80249,"depth":196,"text":80250},{"id":80274,"depth":196,"text":80275},{"id":80286,"depth":196,"text":80287},{"id":80298,"depth":53,"text":80299,"children":96314},[96315,96316],{"id":80302,"depth":196,"text":80303},{"id":80317,"depth":196,"text":80318},{"id":80369,"depth":53,"text":80370},{"id":80413,"depth":53,"text":80414},{"id":80430,"depth":53,"text":80431,"children":96320},[96321,96322,96323],{"id":80434,"depth":196,"text":80435},{"id":80447,"depth":196,"text":80448},{"id":80552,"depth":196,"text":80553},{"id":80841,"depth":53,"text":80842,"children":96325},[96326,96327,96328],{"id":80845,"depth":196,"text":80846},{"id":81288,"depth":196,"text":81289},{"id":81699,"depth":196,"text":81700},{"id":81762,"depth":53,"text":81763},{"id":81841,"depth":53,"text":81842},{"id":81934,"depth":53,"text":81935},{"id":83779,"depth":53,"text":83780,"children":96333},[96334,96335,96336,96337,96338],{"id":83783,"depth":196,"text":83784},{"id":83795,"depth":196,"text":83796},{"id":84014,"depth":196,"text":84015},{"id":84032,"depth":196,"text":84033},{"id":84092,"depth":196,"text":84093},{"id":88360,"depth":53,"text":88361,"children":96340},[96341,96342,96343],{"id":88364,"depth":196,"text":88365},{"id":88382,"depth":196,"text":88383},{"id":88408,"depth":196,"text":88409},{"id":88417,"depth":53,"text":88418},{"id":88439,"depth":53,"text":88440,"children":96346},[96347,96348,96349,96350,96351,96352,96353,96354],{"id":88443,"depth":196,"text":88444},{"id":88704,"depth":196,"text":88705},{"id":88890,"depth":196,"text":88891},{"id":89257,"depth":196,"text":89258},{"id":89373,"depth":196,"text":89374},{"id":89409,"depth":196,"text":89410},{"id":89456,"depth":196,"text":89457},{"id":89490,"depth":196,"text":89491},{"id":90852,"depth":53,"text":90853,"children":96356},[96357,96358],{"id":90856,"depth":196,"text":90857},{"id":90893,"depth":196,"text":90894},{"id":92248,"depth":53,"text":92249},{"id":92619,"depth":53,"text":92620,"children":96361},[96362,96363],{"id":92623,"depth":196,"text":92624},{"id":92657,"depth":196,"text":92658},{"id":93385,"depth":53,"text":93386,"children":96365},[96366,96367,96368,96369],{"id":93389,"depth":196,"text":93390},{"id":94347,"depth":196,"text":94348},{"id":95289,"depth":196,"text":95290},{"id":95363,"depth":196,"text":95364},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":80234,"description":26998},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":96376,"title":96377,"body":96378,"description":96389,"extension":3817,"meta":96390,"navigation":658,"path":96392,"seo":96393,"stem":96394,"__hash__":96395},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":96379,"toc":96387},[96380],[19,96381,96382,96383],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[4113,96384,96385],{"href":96385,"rel":96386},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[27481],{"title":31,"searchDepth":53,"depth":53,"links":96388},[],"三件套第三套学习",{"category":96391},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":96377,"description":96389},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":96397,"title":96398,"body":96399,"description":26998,"extension":3817,"meta":96504,"navigation":658,"path":96505,"seo":96506,"stem":96507,"__hash__":96508},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":96400,"toc":96499},[96401,96408,96411,96414,96417,96421,96430,96433,96436,96440,96449,96452,96456,96459,96479,96482,96496],[19,96402,96403],{},[4113,96404,96407],{"href":96405,"rel":96406},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[27481],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,96409,96398],{"id":96410},"_1安装",[19,96412,96413],{},"numpy是科学计算基础库,底层是C语言",[19,96415,96416],{},"三种方式：",[14,96418,96420],{"id":96419},"_11-通过pip安装","1.1 通过pip安装",[26,96422,96424],{"className":28,"code":96423,"language":30,"meta":31,"style":31},"pip install numpy\n",[33,96425,96426],{"__ignoreMap":31},[36,96427,96428],{"class":38,"line":39},[36,96429,96423],{"class":42},[19,96431,96432],{},"首选方式，自动处理依赖项",[19,96434,96435],{},"在提示系统命令符中使用cmd",[14,96437,96439],{"id":96438},"_12-通过anaconda安装","1.2 通过Anaconda安装",[26,96441,96443],{"className":28,"code":96442,"language":30,"meta":31,"style":31},"conda install numpy\n",[33,96444,96445],{"__ignoreMap":31},[36,96446,96447],{"class":38,"line":39},[36,96448,96442],{"class":42},[19,96450,96451],{},"自动解决环境依赖",[14,96453,96455],{"id":96454},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,96457,96458],{},"对于Debian\u002FUbuntu",[26,96460,96462],{"className":28,"code":96461,"language":30,"meta":31,"style":31},"sudo apt-get install python3-numpy\n",[33,96463,96464],{"__ignoreMap":31},[36,96465,96466,96469,96471,96474,96476],{"class":38,"line":39},[36,96467,96468],{"class":42},"sudo apt",[36,96470,1308],{"class":46},[36,96472,96473],{"class":42},"get install python3",[36,96475,1308],{"class":46},[36,96477,96478],{"class":42},"numpy\n",[19,96480,96481],{},"对于Fedora:",[26,96483,96485],{"className":28,"code":96484,"language":30,"meta":31,"style":31},"sudo dnf install python3-numpy\n",[33,96486,96487],{"__ignoreMap":31},[36,96488,96489,96492,96494],{"class":38,"line":39},[36,96490,96491],{"class":42},"sudo dnf install python3",[36,96493,1308],{"class":46},[36,96495,96478],{"class":42},[3785,96497,96498],{},"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":31,"searchDepth":53,"depth":53,"links":96500},[96501,96502,96503],{"id":96419,"depth":53,"text":96420},{"id":96438,"depth":53,"text":96439},{"id":96454,"depth":53,"text":96455},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":96398,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":96510,"title":96511,"body":96512,"description":26998,"extension":3817,"meta":96625,"navigation":658,"path":96626,"seo":96627,"stem":96628,"__hash__":96629},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":96513,"toc":96623},[96514,96517,96520,96523,96526,96529,96532,96535,96538,96541,96617,96620],[10,96515,96511],{"id":96516},"_10算数函数",[19,96518,96519],{},"加减乘除运算跟python基础语法没区别",[19,96521,96522],{},"除了python那种方法外还可以使用函数",[19,96524,96525],{},"加：np.add(a,b)",[19,96527,96528],{},"减：np.subtract(a,b)",[19,96530,96531],{},"乘：np.multiply(a,b)",[19,96533,96534],{},"除：np.divide(a,b) == a\u002Fb",[19,96536,96537],{},"取余：np.mod(a,b) == a%b",[19,96539,96540],{},"必须会的用法：",[26,96542,96544],{"className":28,"code":96543,"language":30,"meta":31,"style":31},"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",[33,96545,96546,96568,96589,96599,96612],{"__ignoreMap":31},[36,96547,96548,96550,96552,96555,96557,96560,96562,96564,96566],{"class":38,"line":39},[36,96549,4113],{"class":42},[36,96551,47],{"class":46},[36,96553,96554],{"class":42},"np.arange(",[36,96556,4295],{"class":112},[36,96558,96559],{"class":42},").reshape(",[36,96561,1982],{"class":112},[36,96563,4253],{"class":42},[36,96565,1982],{"class":112},[36,96567,922],{"class":42},[36,96569,96570,96572,96574,96577,96579,96581,96583,96585,96587],{"class":38,"line":53},[36,96571,4138],{"class":42},[36,96573,47],{"class":46},[36,96575,96576],{"class":42},"np.array([",[36,96578,554],{"class":112},[36,96580,4253],{"class":42},[36,96582,554],{"class":112},[36,96584,4253],{"class":42},[36,96586,554],{"class":112},[36,96588,8353],{"class":42},[36,96590,96591,96594,96596],{"class":38,"line":196},[36,96592,96593],{"class":42},"result",[36,96595,47],{"class":46},[36,96597,96598],{"class":42},"np.empty_like(a)\n",[36,96600,96601,96604,96607,96609],{"class":38,"line":642},[36,96602,96603],{"class":42},"np.add(a,b,",[36,96605,96606],{"class":468},"out",[36,96608,47],{"class":46},[36,96610,96611],{"class":42},"result)\n",[36,96613,96614],{"class":38,"line":655},[36,96615,96616],{"class":42},"result\n",[19,96618,96619],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[3785,96621,96622],{},"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":31,"searchDepth":53,"depth":53,"links":96624},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":96511,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":96631,"title":96632,"body":96633,"description":26998,"extension":3817,"meta":97394,"navigation":658,"path":97395,"seo":97396,"stem":97397,"__hash__":97398},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":96634,"toc":97381},[96635,96638,96641,96644,96648,96687,96691,96735,96795,96799,96802,96841,96844,96889,96893,96929,96933,97002,97006,97069,97073,97076,97079,97082,97085,97121,97125,97165,97169,97241,97244,97248,97311,97315,97378],[10,96636,96632],{"id":96637},"_11统计函数",[19,96639,96640],{},"sum max min mean",[19,96642,96643],{},"这些有axis参数，可以指定方向",[14,96645,96647],{"id":96646},"_111-sum求和函数","11.1 sum()求和函数",[26,96649,96651],{"className":28,"code":96650,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[33,96652,96653,96658,96679],{"__ignoreMap":31},[36,96654,96655],{"class":38,"line":39},[36,96656,96657],{"class":3943},"#创建一维数组\n",[36,96659,96660,96662,96664,96667,96669,96671,96673,96675,96677],{"class":38,"line":53},[36,96661,4113],{"class":42},[36,96663,47],{"class":46},[36,96665,96666],{"class":42},"np.random.randint(",[36,96668,4092],{"class":112},[36,96670,4253],{"class":42},[36,96672,4186],{"class":112},[36,96674,4253],{"class":42},[36,96676,1921],{"class":112},[36,96678,922],{"class":42},[36,96680,96681,96684],{"class":38,"line":196},[36,96682,96683],{"class":42},"np.sum(a)",[36,96685,96686],{"class":3943},"#求和\n",[14,96688,96690],{"id":96689},"_112-max求最大值函数","11.2 max()求最大值函数",[26,96692,96694],{"className":28,"code":96693,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[33,96695,96696,96700,96720,96725,96730],{"__ignoreMap":31},[36,96697,96698],{"class":38,"line":39},[36,96699,96657],{"class":3943},[36,96701,96702,96704,96706,96708,96710,96712,96714,96716,96718],{"class":38,"line":53},[36,96703,4113],{"class":42},[36,96705,47],{"class":46},[36,96707,96666],{"class":42},[36,96709,4092],{"class":112},[36,96711,4253],{"class":42},[36,96713,4186],{"class":112},[36,96715,4253],{"class":42},[36,96717,1921],{"class":112},[36,96719,922],{"class":42},[36,96721,96722],{"class":38,"line":196},[36,96723,96724],{"class":42},"np.max(a)\n",[36,96726,96727],{"class":38,"line":642},[36,96728,96729],{"class":3943},"#最大索引(求最大元素的索引)arg\n",[36,96731,96732],{"class":38,"line":655},[36,96733,96734],{"class":42},"np.argmax(a)\n",[26,96736,96738],{"className":28,"code":96737,"language":30,"meta":31,"style":31},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[33,96739,96740,96761,96781,96785],{"__ignoreMap":31},[36,96741,96742,96744,96746,96749,96751,96753,96755,96757,96759],{"class":38,"line":39},[36,96743,14580],{"class":42},[36,96745,47],{"class":46},[36,96747,96748],{"class":42}," np.array([",[36,96750,4092],{"class":112},[36,96752,478],{"class":42},[36,96754,4194],{"class":112},[36,96756,478],{"class":42},[36,96758,1982],{"class":112},[36,96760,8353],{"class":42},[36,96762,96763,96765,96767,96769,96771,96773,96775,96777,96779],{"class":38,"line":53},[36,96764,14606],{"class":42},[36,96766,47],{"class":46},[36,96768,96748],{"class":42},[36,96770,1982],{"class":112},[36,96772,478],{"class":42},[36,96774,498],{"class":112},[36,96776,478],{"class":42},[36,96778,4168],{"class":112},[36,96780,8353],{"class":42},[36,96782,96783],{"class":38,"line":196},[36,96784,659],{"emptyLinePlaceholder":658},[36,96786,96787,96789,96792],{"class":38,"line":642},[36,96788,3486],{"class":112},[36,96790,96791],{"class":42},"(np.maximum(a, b))   ",[36,96793,96794],{"class":3943},"# [3 5 4]，每个位置上取较大值\n",[14,96796,96798],{"id":96797},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,96800,96801],{},"①一维数组：",[26,96803,96805],{"className":28,"code":96804,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[33,96806,96807,96811,96831,96836],{"__ignoreMap":31},[36,96808,96809],{"class":38,"line":39},[36,96810,96657],{"class":3943},[36,96812,96813,96815,96817,96819,96821,96823,96825,96827,96829],{"class":38,"line":53},[36,96814,4113],{"class":42},[36,96816,47],{"class":46},[36,96818,96666],{"class":42},[36,96820,4092],{"class":112},[36,96822,4253],{"class":42},[36,96824,4186],{"class":112},[36,96826,4253],{"class":42},[36,96828,1921],{"class":112},[36,96830,922],{"class":42},[36,96832,96833],{"class":38,"line":196},[36,96834,96835],{"class":3943},"#求平均值\n",[36,96837,96838],{"class":38,"line":642},[36,96839,96840],{"class":42},"np.mean(a)\n",[19,96842,96843],{},"②二维数组",[26,96845,96847],{"className":28,"code":96846,"language":30,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[33,96848,96849,96854,96879,96884],{"__ignoreMap":31},[36,96850,96851],{"class":38,"line":39},[36,96852,96853],{"class":3943},"#二维数组\n",[36,96855,96856,96859,96861,96863,96865,96867,96869,96871,96873,96875,96877],{"class":38,"line":53},[36,96857,96858],{"class":42},"aa",[36,96860,47],{"class":46},[36,96862,96554],{"class":42},[36,96864,4092],{"class":112},[36,96866,4253],{"class":42},[36,96868,4396],{"class":112},[36,96870,96559],{"class":42},[36,96872,1982],{"class":112},[36,96874,4253],{"class":42},[36,96876,4168],{"class":112},[36,96878,922],{"class":42},[36,96880,96881],{"class":38,"line":196},[36,96882,96883],{"class":3943},"#对数组中的所有数求平均\n",[36,96885,96886],{"class":38,"line":642},[36,96887,96888],{"class":42},"np.mean(aa)\n",[14,96890,96892],{"id":96891},"_114-median求中位数函数","11.4 median()求中位数函数",[26,96894,96896],{"className":28,"code":96895,"language":30,"meta":31,"style":31},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[33,96897,96898,96903,96919,96924],{"__ignoreMap":31},[36,96899,96900],{"class":38,"line":39},[36,96901,96902],{"class":3943},"#求中位数\n",[36,96904,96905,96907,96909,96911,96913,96915,96917],{"class":38,"line":53},[36,96906,4138],{"class":42},[36,96908,47],{"class":46},[36,96910,96554],{"class":42},[36,96912,4092],{"class":112},[36,96914,4253],{"class":42},[36,96916,554],{"class":112},[36,96918,922],{"class":42},[36,96920,96921],{"class":38,"line":196},[36,96922,96923],{"class":42},"np.median(b)\n",[36,96925,96926],{"class":38,"line":642},[36,96927,96928],{"class":3943},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,96930,96932],{"id":96931},"_115-power求幂运算函数","11.5 power()求幂运算函数",[26,96934,96936],{"className":28,"code":96935,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[33,96937,96938,96954,96959,96964,96973,96978,96987],{"__ignoreMap":31},[36,96939,96940,96942,96944,96946,96948,96950,96952],{"class":38,"line":39},[36,96941,4138],{"class":42},[36,96943,47],{"class":46},[36,96945,96554],{"class":42},[36,96947,4092],{"class":112},[36,96949,4253],{"class":42},[36,96951,554],{"class":112},[36,96953,922],{"class":42},[36,96955,96956],{"class":38,"line":53},[36,96957,96958],{"class":3943},"#幂运算\n",[36,96960,96961],{"class":38,"line":196},[36,96962,96963],{"class":3943},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[36,96965,96966,96969,96971],{"class":38,"line":642},[36,96967,96968],{"class":42},"np.power(b,",[36,96970,498],{"class":112},[36,96972,922],{"class":42},[36,96974,96975],{"class":38,"line":655},[36,96976,96977],{"class":3943},"#或者以下代码，将数据存储起来\n",[36,96979,96980,96982,96984],{"class":38,"line":662},[36,96981,4715],{"class":42},[36,96983,47],{"class":46},[36,96985,96986],{"class":42},"np.empty_like(b)\n",[36,96988,96989,96991,96993,96995,96997,96999],{"class":38,"line":667},[36,96990,96968],{"class":42},[36,96992,498],{"class":112},[36,96994,4253],{"class":42},[36,96996,96606],{"class":468},[36,96998,47],{"class":46},[36,97000,97001],{"class":42},"y)\n",[14,97003,97005],{"id":97004},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[26,97007,97009],{"className":28,"code":97008,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[33,97010,97011,97027,97032,97037,97041,97058],{"__ignoreMap":31},[36,97012,97013,97015,97017,97019,97021,97023,97025],{"class":38,"line":39},[36,97014,4138],{"class":42},[36,97016,47],{"class":46},[36,97018,96554],{"class":42},[36,97020,4092],{"class":112},[36,97022,4253],{"class":42},[36,97024,554],{"class":112},[36,97026,922],{"class":42},[36,97028,97029],{"class":38,"line":53},[36,97030,97031],{"class":3943},"#开方\n",[36,97033,97034],{"class":38,"line":196},[36,97035,97036],{"class":42},"np.sqrt(b)\n",[36,97038,97039],{"class":38,"line":642},[36,97040,96977],{"class":3943},[36,97042,97043,97045,97047,97050,97052,97054,97056],{"class":38,"line":655},[36,97044,4715],{"class":42},[36,97046,47],{"class":46},[36,97048,97049],{"class":42},"np.empty_like(b,",[36,97051,504],{"class":468},[36,97053,47],{"class":46},[36,97055,1260],{"class":112},[36,97057,922],{"class":42},[36,97059,97060,97063,97065,97067],{"class":38,"line":662},[36,97061,97062],{"class":42},"np.sqrt(b,",[36,97064,96606],{"class":468},[36,97066,47],{"class":46},[36,97068,97001],{"class":42},[14,97070,97072],{"id":97071},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,97074,97075],{},"对数组中的元素累计求和，可指定轴",[19,97077,97078],{},"#累计求和的意思是：",[19,97080,97081],{},"a = np.array([1, 2, 3, 4])",[19,97083,97084],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[26,97086,97088],{"className":28,"code":97087,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[33,97089,97090,97106,97111,97116],{"__ignoreMap":31},[36,97091,97092,97094,97096,97098,97100,97102,97104],{"class":38,"line":39},[36,97093,4138],{"class":42},[36,97095,47],{"class":46},[36,97097,96554],{"class":42},[36,97099,4092],{"class":112},[36,97101,4253],{"class":42},[36,97103,554],{"class":112},[36,97105,922],{"class":42},[36,97107,97108],{"class":38,"line":53},[36,97109,97110],{"class":42},"np.cumsum(b)\n",[36,97112,97113],{"class":38,"line":196},[36,97114,97115],{"class":3943},"#结果：\n",[36,97117,97118],{"class":38,"line":642},[36,97119,97120],{"class":3943},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,97122,97124],{"id":97123},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[26,97126,97128],{"className":28,"code":97127,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[33,97129,97130,97146,97151,97156,97160],{"__ignoreMap":31},[36,97131,97132,97134,97136,97138,97140,97142,97144],{"class":38,"line":39},[36,97133,4138],{"class":42},[36,97135,47],{"class":46},[36,97137,96554],{"class":42},[36,97139,4092],{"class":112},[36,97141,4253],{"class":42},[36,97143,554],{"class":112},[36,97145,922],{"class":42},[36,97147,97148],{"class":38,"line":53},[36,97149,97150],{"class":3943},"#对数组中的元素累计求积，可指定轴\n",[36,97152,97153],{"class":38,"line":196},[36,97154,97155],{"class":42},"np.cumprod(b)\n",[36,97157,97158],{"class":38,"line":642},[36,97159,97115],{"class":3943},[36,97161,97162],{"class":38,"line":655},[36,97163,97164],{"class":3943},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,97166,97168],{"id":97167},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[26,97170,97172],{"className":28,"code":97171,"language":30,"meta":31,"style":31},"#删除数组中的重复数据，并对数据进行排序\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",[33,97173,97174,97179,97227,97232,97236],{"__ignoreMap":31},[36,97175,97176],{"class":38,"line":39},[36,97177,97178],{"class":3943},"#删除数组中的重复数据，并对数据进行排序\n",[36,97180,97181,97183,97185,97187,97189,97191,97193,97195,97197,97199,97201,97203,97205,97207,97209,97211,97213,97215,97217,97219,97221,97223,97225],{"class":38,"line":53},[36,97182,4113],{"class":42},[36,97184,47],{"class":46},[36,97186,96576],{"class":42},[36,97188,4092],{"class":112},[36,97190,4253],{"class":42},[36,97192,498],{"class":112},[36,97194,4253],{"class":42},[36,97196,1982],{"class":112},[36,97198,4253],{"class":42},[36,97200,4371],{"class":112},[36,97202,4253],{"class":42},[36,97204,1982],{"class":112},[36,97206,4253],{"class":42},[36,97208,554],{"class":112},[36,97210,4253],{"class":42},[36,97212,4072],{"class":112},[36,97214,4253],{"class":42},[36,97216,1859],{"class":112},[36,97218,4253],{"class":42},[36,97220,4645],{"class":112},[36,97222,4253],{"class":42},[36,97224,4168],{"class":112},[36,97226,8353],{"class":42},[36,97228,97229],{"class":38,"line":196},[36,97230,97231],{"class":42},"np.unique(a)\n",[36,97233,97234],{"class":38,"line":642},[36,97235,97115],{"class":3943},[36,97237,97238],{"class":38,"line":655},[36,97239,97240],{"class":3943},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,97242,97243],{},"升序形式排序",[14,97245,97247],{"id":97246},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[26,97249,97251],{"className":28,"code":97250,"language":30,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[33,97252,97253,97301,97306],{"__ignoreMap":31},[36,97254,97255,97257,97259,97261,97263,97265,97267,97269,97271,97273,97275,97277,97279,97281,97283,97285,97287,97289,97291,97293,97295,97297,97299],{"class":38,"line":39},[36,97256,4113],{"class":42},[36,97258,47],{"class":46},[36,97260,96576],{"class":42},[36,97262,4092],{"class":112},[36,97264,4253],{"class":42},[36,97266,498],{"class":112},[36,97268,4253],{"class":42},[36,97270,1982],{"class":112},[36,97272,4253],{"class":42},[36,97274,4371],{"class":112},[36,97276,4253],{"class":42},[36,97278,1982],{"class":112},[36,97280,4253],{"class":42},[36,97282,554],{"class":112},[36,97284,4253],{"class":42},[36,97286,4072],{"class":112},[36,97288,4253],{"class":42},[36,97290,1859],{"class":112},[36,97292,4253],{"class":42},[36,97294,4645],{"class":112},[36,97296,4253],{"class":42},[36,97298,4168],{"class":112},[36,97300,8353],{"class":42},[36,97302,97303],{"class":38,"line":53},[36,97304,97305],{"class":3943},"#返回数组中非零元素的索引\n",[36,97307,97308],{"class":38,"line":196},[36,97309,97310],{"class":42},"np.nonzero(a)\n",[14,97312,97314],{"id":97313},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[26,97316,97318],{"className":28,"code":97317,"language":30,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[33,97319,97320,97368,97373],{"__ignoreMap":31},[36,97321,97322,97324,97326,97328,97330,97332,97334,97336,97338,97340,97342,97344,97346,97348,97350,97352,97354,97356,97358,97360,97362,97364,97366],{"class":38,"line":39},[36,97323,4113],{"class":42},[36,97325,47],{"class":46},[36,97327,96576],{"class":42},[36,97329,4092],{"class":112},[36,97331,4253],{"class":42},[36,97333,498],{"class":112},[36,97335,4253],{"class":42},[36,97337,1982],{"class":112},[36,97339,4253],{"class":42},[36,97341,4371],{"class":112},[36,97343,4253],{"class":42},[36,97345,1982],{"class":112},[36,97347,4253],{"class":42},[36,97349,554],{"class":112},[36,97351,4253],{"class":42},[36,97353,4072],{"class":112},[36,97355,4253],{"class":42},[36,97357,1859],{"class":112},[36,97359,4253],{"class":42},[36,97361,4645],{"class":112},[36,97363,4253],{"class":42},[36,97365,4168],{"class":112},[36,97367,8353],{"class":42},[36,97369,97370],{"class":38,"line":53},[36,97371,97372],{"class":3943},"#计算一组数中最大值与最小值的差，可指定轴\n",[36,97374,97375],{"class":38,"line":196},[36,97376,97377],{"class":42},"np.ptp(a)\n",[3785,97379,97380],{},"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":31,"searchDepth":53,"depth":53,"links":97382},[97383,97384,97385,97386,97387,97388,97389,97390,97391,97392,97393],{"id":96646,"depth":53,"text":96647},{"id":96689,"depth":53,"text":96690},{"id":96797,"depth":53,"text":96798},{"id":96891,"depth":53,"text":96892},{"id":96931,"depth":53,"text":96932},{"id":97004,"depth":53,"text":97005},{"id":97071,"depth":53,"text":97072},{"id":97123,"depth":53,"text":97124},{"id":97167,"depth":53,"text":97168},{"id":97246,"depth":53,"text":97247},{"id":97313,"depth":53,"text":97314},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":96632,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":97400,"title":97401,"body":97402,"description":26998,"extension":3817,"meta":98057,"navigation":658,"path":98058,"seo":98059,"stem":98060,"__hash__":98061},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":97403,"toc":98045},[97404,97407,97411,97414,97630,97634,97637,97846,97850,97916,97921,97925,97928,97931,97969,97973,97976,97981,97985,97988,97991,97996,98000,98003,98007,98010,98013,98018,98022,98025,98028,98033,98037,98042],[10,97405,97401],{"id":97406},"_12其他常用函数",[14,97408,97410],{"id":97409},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,97412,97413],{},"将数组的数据按照行列复制扩展",[26,97415,97417],{"className":28,"code":97416,"language":30,"meta":31,"style":31},"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",[33,97418,97419,97435,97444,97448,97453,97458,97471,97475,97480,97485,97490,97494,97499,97523,97535,97539,97543,97548,97553,97558,97563,97567,97580,97584,97588,97593,97598,97603,97608,97613,97617,97621,97626],{"__ignoreMap":31},[36,97420,97421,97423,97425,97427,97429,97431,97433],{"class":38,"line":39},[36,97422,4113],{"class":42},[36,97424,47],{"class":46},[36,97426,96554],{"class":42},[36,97428,4092],{"class":112},[36,97430,4253],{"class":42},[36,97432,4194],{"class":112},[36,97434,922],{"class":42},[36,97436,97437,97440,97442],{"class":38,"line":53},[36,97438,97439],{"class":42},"np.tile(a,",[36,97441,498],{"class":112},[36,97443,922],{"class":42},[36,97445,97446],{"class":38,"line":196},[36,97447,97115],{"class":3943},[36,97449,97450],{"class":38,"line":642},[36,97451,97452],{"class":3943},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[36,97454,97455],{"class":38,"line":655},[36,97456,97457],{"class":3943},"#行复制两次，列复制三次\n",[36,97459,97460,97463,97465,97467,97469],{"class":38,"line":662},[36,97461,97462],{"class":42},"np.tile(a,(",[36,97464,498],{"class":112},[36,97466,4253],{"class":42},[36,97468,1982],{"class":112},[36,97470,2005],{"class":42},[36,97472,97473],{"class":38,"line":667},[36,97474,97115],{"class":3943},[36,97476,97477],{"class":38,"line":679},[36,97478,97479],{"class":105},"'''\n",[36,97481,97482],{"class":38,"line":685},[36,97483,97484],{"class":105},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[36,97486,97487],{"class":38,"line":691},[36,97488,97489],{"class":105},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[36,97491,97492],{"class":38,"line":696},[36,97493,97479],{"class":105},[36,97495,97496],{"class":38,"line":702},[36,97497,97498],{"class":3943},"#创建二维数组\n",[36,97500,97501,97503,97505,97507,97509,97511,97513,97515,97517,97519,97521],{"class":38,"line":708},[36,97502,96858],{"class":42},[36,97504,47],{"class":46},[36,97506,96554],{"class":42},[36,97508,4092],{"class":112},[36,97510,4253],{"class":42},[36,97512,4396],{"class":112},[36,97514,96559],{"class":42},[36,97516,4168],{"class":112},[36,97518,4253],{"class":42},[36,97520,1982],{"class":112},[36,97522,922],{"class":42},[36,97524,97525,97528,97530,97532],{"class":38,"line":713},[36,97526,97527],{"class":42},"np.tile(aa,",[36,97529,498],{"class":112},[36,97531,4304],{"class":42},[36,97533,97534],{"class":3943},"#一个数的时候就是行\n",[36,97536,97537],{"class":38,"line":719},[36,97538,97115],{"class":3943},[36,97540,97541],{"class":38,"line":725},[36,97542,97479],{"class":105},[36,97544,97545],{"class":38,"line":731},[36,97546,97547],{"class":105},"array([[ 1,  2,  3,  1,  2,  3],\n",[36,97549,97550],{"class":38,"line":736},[36,97551,97552],{"class":105},"       [ 4,  5,  6,  4,  5,  6],\n",[36,97554,97555],{"class":38,"line":742},[36,97556,97557],{"class":105},"       [ 7,  8,  9,  7,  8,  9],\n",[36,97559,97560],{"class":38,"line":748},[36,97561,97562],{"class":105},"       [10, 11, 12, 10, 11, 12]])\n",[36,97564,97565],{"class":38,"line":754},[36,97566,97479],{"class":105},[36,97568,97569,97572,97574,97576,97578],{"class":38,"line":760},[36,97570,97571],{"class":42},"np.tile(aa,(",[36,97573,498],{"class":112},[36,97575,4253],{"class":42},[36,97577,1982],{"class":112},[36,97579,2005],{"class":42},[36,97581,97582],{"class":38,"line":766},[36,97583,97115],{"class":3943},[36,97585,97586],{"class":38,"line":772},[36,97587,97479],{"class":105},[36,97589,97590],{"class":38,"line":778},[36,97591,97592],{"class":105},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,97594,97595],{"class":38,"line":783},[36,97596,97597],{"class":105},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[36,97599,97600],{"class":38,"line":789},[36,97601,97602],{"class":105},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[36,97604,97605],{"class":38,"line":795},[36,97606,97607],{"class":105},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[36,97609,97610],{"class":38,"line":801},[36,97611,97612],{"class":105},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,97614,97615],{"class":38,"line":807},[36,97616,97597],{"class":105},[36,97618,97619],{"class":38,"line":813},[36,97620,97602],{"class":105},[36,97622,97623],{"class":38,"line":819},[36,97624,97625],{"class":105},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[36,97627,97628],{"class":38,"line":824},[36,97629,97479],{"class":105},[14,97631,97633],{"id":97632},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,97635,97636],{},"repeat()将数组中的每个元素重复若干次",[26,97638,97640],{"className":28,"code":97639,"language":30,"meta":31,"style":31},"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",[33,97641,97642,97658,97667,97671,97676,97700,97705,97714,97718,97723,97727,97732,97748,97752,97756,97761,97766,97771,97775,97780,97784,97789,97794,97798,97814,97818,97822,97827,97832,97837,97842],{"__ignoreMap":31},[36,97643,97644,97646,97648,97650,97652,97654,97656],{"class":38,"line":39},[36,97645,4113],{"class":42},[36,97647,47],{"class":46},[36,97649,96554],{"class":42},[36,97651,4092],{"class":112},[36,97653,4253],{"class":42},[36,97655,4194],{"class":112},[36,97657,922],{"class":42},[36,97659,97660,97663,97665],{"class":38,"line":53},[36,97661,97662],{"class":42},"np.repeat(a,",[36,97664,1982],{"class":112},[36,97666,922],{"class":42},[36,97668,97669],{"class":38,"line":196},[36,97670,97115],{"class":3943},[36,97672,97673],{"class":38,"line":642},[36,97674,97675],{"class":3943},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[36,97677,97678,97680,97682,97684,97686,97688,97690,97692,97694,97696,97698],{"class":38,"line":655},[36,97679,96858],{"class":42},[36,97681,47],{"class":46},[36,97683,96554],{"class":42},[36,97685,4092],{"class":112},[36,97687,4253],{"class":42},[36,97689,4396],{"class":112},[36,97691,96559],{"class":42},[36,97693,4168],{"class":112},[36,97695,4253],{"class":42},[36,97697,1982],{"class":112},[36,97699,922],{"class":42},[36,97701,97702],{"class":38,"line":662},[36,97703,97704],{"class":3943},"#这个重复之后二维变成一维\n",[36,97706,97707,97710,97712],{"class":38,"line":667},[36,97708,97709],{"class":42},"np.repeat(aa,",[36,97711,498],{"class":112},[36,97713,922],{"class":42},[36,97715,97716],{"class":38,"line":679},[36,97717,97479],{"class":105},[36,97719,97720],{"class":38,"line":685},[36,97721,97722],{"class":105},"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",[36,97724,97725],{"class":38,"line":691},[36,97726,97479],{"class":105},[36,97728,97729],{"class":38,"line":696},[36,97730,97731],{"class":3943},"#指定axis\n",[36,97733,97734,97736,97738,97740,97742,97744,97746],{"class":38,"line":702},[36,97735,97709],{"class":42},[36,97737,498],{"class":112},[36,97739,4253],{"class":42},[36,97741,51071],{"class":468},[36,97743,47],{"class":46},[36,97745,1859],{"class":112},[36,97747,922],{"class":42},[36,97749,97750],{"class":38,"line":708},[36,97751,97115],{"class":3943},[36,97753,97754],{"class":38,"line":713},[36,97755,97479],{"class":105},[36,97757,97758],{"class":38,"line":719},[36,97759,97760],{"class":105},"array([[ 1,  2,  3],\n",[36,97762,97763],{"class":38,"line":725},[36,97764,97765],{"class":105},"       [ 1,  2,  3],\n",[36,97767,97768],{"class":38,"line":731},[36,97769,97770],{"class":105},"       [ 4,  5,  6],\n",[36,97772,97773],{"class":38,"line":736},[36,97774,97770],{"class":105},[36,97776,97777],{"class":38,"line":742},[36,97778,97779],{"class":105},"       [ 7,  8,  9],\n",[36,97781,97782],{"class":38,"line":748},[36,97783,97779],{"class":105},[36,97785,97786],{"class":38,"line":754},[36,97787,97788],{"class":105},"       [10, 11, 12],\n",[36,97790,97791],{"class":38,"line":760},[36,97792,97793],{"class":105},"       [10, 11, 12]])\n",[36,97795,97796],{"class":38,"line":766},[36,97797,97479],{"class":105},[36,97799,97800,97802,97804,97806,97808,97810,97812],{"class":38,"line":772},[36,97801,97709],{"class":42},[36,97803,498],{"class":112},[36,97805,4253],{"class":42},[36,97807,51071],{"class":468},[36,97809,47],{"class":46},[36,97811,4092],{"class":112},[36,97813,922],{"class":42},[36,97815,97816],{"class":38,"line":778},[36,97817,97115],{"class":3943},[36,97819,97820],{"class":38,"line":783},[36,97821,97479],{"class":105},[36,97823,97824],{"class":38,"line":789},[36,97825,97826],{"class":105},"array([[ 1,  1,  2,  2,  3,  3],\n",[36,97828,97829],{"class":38,"line":795},[36,97830,97831],{"class":105},"       [ 4,  4,  5,  5,  6,  6],\n",[36,97833,97834],{"class":38,"line":801},[36,97835,97836],{"class":105},"       [ 7,  7,  8,  8,  9,  9],\n",[36,97838,97839],{"class":38,"line":807},[36,97840,97841],{"class":105},"       [10, 10, 11, 11, 12, 12]])\n",[36,97843,97844],{"class":38,"line":813},[36,97845,97479],{"class":105},[14,97847,97849],{"id":97848},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[26,97851,97853],{"className":28,"code":97852,"language":30,"meta":31,"style":31},"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",[33,97854,97855,97871,97876,97888,97892,97897,97907,97911],{"__ignoreMap":31},[36,97856,97857,97859,97861,97863,97865,97867,97869],{"class":38,"line":39},[36,97858,4113],{"class":42},[36,97860,47],{"class":46},[36,97862,96554],{"class":42},[36,97864,4092],{"class":112},[36,97866,4253],{"class":42},[36,97868,4194],{"class":112},[36,97870,922],{"class":42},[36,97872,97873],{"class":38,"line":53},[36,97874,97875],{"class":3943},"#array([，2，3，4])\n",[36,97877,97878,97881,97883,97885],{"class":38,"line":196},[36,97879,97880],{"class":42},"np.roll(a,",[36,97882,498],{"class":112},[36,97884,4304],{"class":42},[36,97886,97887],{"class":3943},"#传正数向后调多少位，传负数向前调多少位\n",[36,97889,97890],{"class":38,"line":642},[36,97891,97115],{"class":3943},[36,97893,97894],{"class":38,"line":655},[36,97895,97896],{"class":3943},"#array([3, 4, 1, 2])\n",[36,97898,97899,97901,97903,97905],{"class":38,"line":662},[36,97900,97880],{"class":42},[36,97902,1308],{"class":46},[36,97904,4092],{"class":112},[36,97906,922],{"class":42},[36,97908,97909],{"class":38,"line":667},[36,97910,97115],{"class":3943},[36,97912,97913],{"class":38,"line":679},[36,97914,97915],{"class":3943},"#array([2, 3, 4, 1])\n",[19,97917,97918],{},[5198,97919],{"alt":31,"src":97920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,97922,97924],{"id":97923},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,97926,97927],{},"resize()重新调整数组的大小",[19,97929,97930],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[26,97932,97934],{"className":28,"code":97933,"language":30,"meta":31,"style":31},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[33,97935,97936,97941,97954],{"__ignoreMap":31},[36,97937,97938],{"class":38,"line":39},[36,97939,97940],{"class":3943},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[36,97942,97943,97946,97948,97950,97952],{"class":38,"line":53},[36,97944,97945],{"class":42},"np.resize(aa,(",[36,97947,498],{"class":112},[36,97949,4253],{"class":42},[36,97951,4219],{"class":112},[36,97953,2005],{"class":42},[36,97955,97956,97958,97960,97962,97964,97966],{"class":38,"line":196},[36,97957,97945],{"class":42},[36,97959,498],{"class":112},[36,97961,4253],{"class":42},[36,97963,4295],{"class":112},[36,97965,86325],{"class":42},[36,97967,97968],{"class":3943},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,97970,97972],{"id":97971},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,97974,97975],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,97977,97978],{},[5198,97979],{"alt":31,"src":97980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,97982,97984],{"id":97983},"_126-保存加载文件","12.6 保存加载文件",[19,97986,97987],{},"savetxt():将数据保存到txt文件中",[19,97989,97990],{},"loadtxt():从文件加载数据",[19,97992,97993],{},[5198,97994],{"alt":31,"src":97995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,97997,97999],{"id":97998},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,98001,98002],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,98004,98006],{"id":98005},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,98008,98009],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,98011,98012],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,98014,98015],{},[5198,98016],{"alt":31,"src":98017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,98019,98021],{"id":98020},"_129-where语句","12.9 where语句",[19,98023,98024],{},"np.where(条件,x,y)",[19,98026,98027],{},"如果条件为True,对应值为x,否则对应值为y",[19,98029,98030],{},[5198,98031],{"alt":31,"src":98032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,98034,98036],{"id":98035},"_1210-dot矩阵","12.10 dot()矩阵",[19,98038,98039],{},[5198,98040],{"alt":31,"src":98041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[3785,98043,98044],{},"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":31,"searchDepth":53,"depth":53,"links":98046},[98047,98048,98049,98050,98051,98052,98053,98054,98055,98056],{"id":97409,"depth":53,"text":97410},{"id":97632,"depth":53,"text":97633},{"id":97848,"depth":53,"text":97849},{"id":97923,"depth":53,"text":97924},{"id":97971,"depth":53,"text":97972},{"id":97983,"depth":53,"text":97984},{"id":97998,"depth":53,"text":97999},{"id":98005,"depth":53,"text":98006},{"id":98020,"depth":53,"text":98021},{"id":98035,"depth":53,"text":98036},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":97401,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":98063,"title":98064,"body":98065,"description":26998,"extension":3817,"meta":98418,"navigation":658,"path":98419,"seo":98420,"stem":98421,"__hash__":98422},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":98066,"toc":98416},[98067,98070,98073,98076,98079,98082,98147,98149,98413],[10,98068,98064],{"id":98069},"_13数组排序",[19,98071,98072],{},"排序主要用到的方法是np.sort和np.argsort",[19,98074,98075],{},"其中np.sort()对数组直接排序",[19,98077,98078],{},"而np.argsort()是返回排序后的原始索引",[19,98080,98081],{},"①一维数组",[26,98083,98085],{"className":28,"code":98084,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[33,98086,98087,98091,98131,98139],{"__ignoreMap":31},[36,98088,98089],{"class":38,"line":39},[36,98090,96657],{"class":3943},[36,98092,98093,98095,98097,98099,98101,98103,98105,98107,98109,98111,98113,98115,98117,98119,98121,98123,98125,98127,98129],{"class":38,"line":53},[36,98094,4113],{"class":42},[36,98096,47],{"class":46},[36,98098,96576],{"class":42},[36,98100,1982],{"class":112},[36,98102,4253],{"class":42},[36,98104,4371],{"class":112},[36,98106,4253],{"class":42},[36,98108,4270],{"class":112},[36,98110,4253],{"class":42},[36,98112,4645],{"class":112},[36,98114,4253],{"class":42},[36,98116,4154],{"class":112},[36,98118,4253],{"class":42},[36,98120,4763],{"class":112},[36,98122,4253],{"class":42},[36,98124,4219],{"class":112},[36,98126,4253],{"class":42},[36,98128,554],{"class":112},[36,98130,8353],{"class":42},[36,98132,98133,98136],{"class":38,"line":196},[36,98134,98135],{"class":42},"np.sort(a)",[36,98137,98138],{"class":3943},"#升序排序\n",[36,98140,98141,98144],{"class":38,"line":642},[36,98142,98143],{"class":42},"np.argsort(a)",[36,98145,98146],{"class":3943},"#按照元素大小来索引排序\n",[19,98148,96843],{},[26,98150,98152],{"className":28,"code":98151,"language":30,"meta":31,"style":31},"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",[33,98153,98154,98166,98192,98197,98201,98206,98211,98216,98221,98225,98233,98237,98242,98247,98252,98257,98261,98266,98279,98283,98288,98293,98298,98303,98307,98312,98324,98328,98332,98336,98340,98344,98348,98353,98368,98373,98382,98387,98391,98395,98400,98404,98409],{"__ignoreMap":31},[36,98155,98156,98159,98161,98163],{"class":38,"line":39},[36,98157,98158],{"class":42},"np.random.seed(",[36,98160,1859],{"class":112},[36,98162,4304],{"class":42},[36,98164,98165],{"class":3943},"#保证每次值一样\n",[36,98167,98168,98170,98172,98174,98176,98178,98180,98182,98184,98186,98188,98190],{"class":38,"line":53},[36,98169,96858],{"class":42},[36,98171,47],{"class":46},[36,98173,96666],{"class":42},[36,98175,4186],{"class":112},[36,98177,4253],{"class":42},[36,98179,1476],{"class":468},[36,98181,47],{"class":46},[36,98183,495],{"class":42},[36,98185,4168],{"class":112},[36,98187,4253],{"class":42},[36,98189,4219],{"class":112},[36,98191,2005],{"class":42},[36,98193,98194],{"class":38,"line":196},[36,98195,98196],{"class":3943},"#原数组：\n",[36,98198,98199],{"class":38,"line":642},[36,98200,97479],{"class":105},[36,98202,98203],{"class":38,"line":655},[36,98204,98205],{"class":105},"array([[44, 47, 64, 67, 67,  9],\n",[36,98207,98208],{"class":38,"line":662},[36,98209,98210],{"class":105},"       [83, 21, 36, 87, 70, 88],\n",[36,98212,98213],{"class":38,"line":667},[36,98214,98215],{"class":105},"       [88, 12, 58, 65, 39, 87],\n",[36,98217,98218],{"class":38,"line":679},[36,98219,98220],{"class":105},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[36,98222,98223],{"class":38,"line":685},[36,98224,97479],{"class":105},[36,98226,98227,98230],{"class":38,"line":691},[36,98228,98229],{"class":42},"np.sort(aa)",[36,98231,98232],{"class":3943},"#每行进行了排序\n",[36,98234,98235],{"class":38,"line":696},[36,98236,97479],{"class":105},[36,98238,98239],{"class":38,"line":702},[36,98240,98241],{"class":105},"array([[ 9, 44, 47, 64, 67, 67],\n",[36,98243,98244],{"class":38,"line":708},[36,98245,98246],{"class":105},"       [21, 36, 70, 83, 87, 88],\n",[36,98248,98249],{"class":38,"line":713},[36,98250,98251],{"class":105},"       [12, 39, 58, 65, 87, 88],\n",[36,98253,98254],{"class":38,"line":719},[36,98255,98256],{"class":105},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[36,98258,98259],{"class":38,"line":725},[36,98260,97479],{"class":105},[36,98262,98263],{"class":38,"line":731},[36,98264,98265],{"class":3943},"#axis=0时\n",[36,98267,98268,98271,98273,98275,98277],{"class":38,"line":736},[36,98269,98270],{"class":42},"np.sort(aa,",[36,98272,51071],{"class":468},[36,98274,47],{"class":46},[36,98276,1859],{"class":112},[36,98278,922],{"class":42},[36,98280,98281],{"class":38,"line":742},[36,98282,97479],{"class":105},[36,98284,98285],{"class":38,"line":748},[36,98286,98287],{"class":105},"array([[44, 12, 36, 37, 25,  9],\n",[36,98289,98290],{"class":38,"line":754},[36,98291,98292],{"class":105},"       [46, 21, 58, 65, 39, 77],\n",[36,98294,98295],{"class":38,"line":760},[36,98296,98297],{"class":105},"       [83, 47, 64, 67, 67, 87],\n",[36,98299,98300],{"class":38,"line":766},[36,98301,98302],{"class":105},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[36,98304,98305],{"class":38,"line":772},[36,98306,97479],{"class":105},[36,98308,98309],{"class":38,"line":778},[36,98310,98311],{"class":3943},"#axis=1时,为默认值\n",[36,98313,98314,98316,98318,98320,98322],{"class":38,"line":783},[36,98315,98270],{"class":42},[36,98317,51071],{"class":468},[36,98319,47],{"class":46},[36,98321,4092],{"class":112},[36,98323,922],{"class":42},[36,98325,98326],{"class":38,"line":789},[36,98327,97479],{"class":105},[36,98329,98330],{"class":38,"line":795},[36,98331,98241],{"class":105},[36,98333,98334],{"class":38,"line":801},[36,98335,98246],{"class":105},[36,98337,98338],{"class":38,"line":807},[36,98339,98251],{"class":105},[36,98341,98342],{"class":38,"line":813},[36,98343,98256],{"class":105},[36,98345,98346],{"class":38,"line":819},[36,98347,97479],{"class":105},[36,98349,98350],{"class":38,"line":824},[36,98351,98352],{"class":3943},"#按最后一列排序\n",[36,98354,98355,98357,98359,98362,98364,98366],{"class":38,"line":829},[36,98356,4138],{"class":42},[36,98358,47],{"class":46},[36,98360,98361],{"class":42},"aa[:,",[36,98363,1308],{"class":46},[36,98365,4092],{"class":112},[36,98367,36806],{"class":42},[36,98369,98370],{"class":38,"line":851},[36,98371,98372],{"class":3943},"#获取最后一列排好序的索引\n",[36,98374,98375,98377,98379],{"class":38,"line":868},[36,98376,77612],{"class":42},[36,98378,47],{"class":46},[36,98380,98381],{"class":42},"np.argsort(b)\n",[36,98383,98384],{"class":38,"line":873},[36,98385,98386],{"class":42},"aa[index]\n",[36,98388,98389],{"class":38,"line":891},[36,98390,97479],{"class":105},[36,98392,98393],{"class":38,"line":906},[36,98394,98205],{"class":105},[36,98396,98397],{"class":38,"line":925},[36,98398,98399],{"class":105},"       [46, 88, 81, 37, 25, 77],\n",[36,98401,98402],{"class":38,"line":943},[36,98403,98215],{"class":105},[36,98405,98406],{"class":38,"line":948},[36,98407,98408],{"class":105},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[36,98410,98411],{"class":38,"line":971},[36,98412,97479],{"class":105},[3785,98414,98415],{},"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":31,"searchDepth":53,"depth":53,"links":98417},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":98064,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":98424,"title":98425,"body":98426,"description":26998,"extension":3817,"meta":98456,"navigation":658,"path":98457,"seo":98458,"stem":98459,"__hash__":98460},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":98427,"toc":98454},[98428,98431,98434,98437,98440,98443,98446,98449],[10,98429,98425],{"id":98430},"_14广播机制",[19,98432,98433],{},"广播的规则：",[19,98435,98436],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,98438,98439],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,98441,98442],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,98444,98445],{},"3.如果没有维度形状为1，则会引发异常",[19,98447,98448],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,98450,98451],{},[5198,98452],{"alt":31,"src":98453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":31,"searchDepth":53,"depth":53,"links":98455},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":98425,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":98462,"title":98463,"body":98464,"description":26998,"extension":3817,"meta":98562,"navigation":658,"path":98563,"seo":98564,"stem":98565,"__hash__":98566},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":98465,"toc":98560},[98466,98469,98472,98557],[10,98467,98463],{"id":98468},"_15比较掩码",[19,98470,98471],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[26,98473,98475],{"className":28,"code":98474,"language":30,"meta":31,"style":31},"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",[33,98476,98477,98523,98534,98548,98552],{"__ignoreMap":31},[36,98478,98479,98481,98483,98486,98488,98490,98492,98494,98496,98498,98500,98502,98504,98506,98508,98510,98512,98514,98516,98518,98520],{"class":38,"line":39},[36,98480,4113],{"class":42},[36,98482,47],{"class":46},[36,98484,98485],{"class":42},"np.array([[",[36,98487,4092],{"class":112},[36,98489,4253],{"class":42},[36,98491,498],{"class":112},[36,98493,4253],{"class":42},[36,98495,1982],{"class":112},[36,98497,51587],{"class":42},[36,98499,4345],{"class":112},[36,98501,4253],{"class":42},[36,98503,4371],{"class":112},[36,98505,4253],{"class":42},[36,98507,4396],{"class":112},[36,98509,51587],{"class":42},[36,98511,4595],{"class":112},[36,98513,4253],{"class":42},[36,98515,4620],{"class":112},[36,98517,4253],{"class":42},[36,98519,4645],{"class":112},[36,98521,98522],{"class":42},"]])\n",[36,98524,98525,98527,98529,98531],{"class":38,"line":53},[36,98526,4113],{"class":42},[36,98528,393],{"class":46},[36,98530,1921],{"class":112},[36,98532,98533],{"class":3943},"#结果是一个由True,False组成的数组\n",[36,98535,98536,98539,98541,98543,98545],{"class":38,"line":196},[36,98537,98538],{"class":42},"a[a",[36,98540,393],{"class":46},[36,98542,1921],{"class":112},[36,98544,4809],{"class":42},[36,98546,98547],{"class":3943},"#小于20的元素会存到这个数组中\n",[36,98549,98550],{"class":38,"line":642},[36,98551,97115],{"class":3943},[36,98553,98554],{"class":38,"line":655},[36,98555,98556],{"class":3943},"#array([ 1,  2,  3, 11, 12, 13])\n",[3785,98558,98559],{},"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":31,"searchDepth":53,"depth":53,"links":98561},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":98463,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":98568,"title":98569,"body":98570,"description":26998,"extension":3817,"meta":98662,"navigation":658,"path":98663,"seo":98664,"stem":98665,"__hash__":98666},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":98571,"toc":98660},[98572,98575,98578,98581,98584,98587,98652,98657],[10,98573,98569],{"id":98574},"_16魔法命令time",[19,98576,98577],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,98579,98580],{},"%:行模式",[19,98582,98583],{},"%%:单元格模式",[19,98585,98586],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[26,98588,98590],{"className":28,"code":98589,"language":30,"meta":31,"style":31},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[33,98591,98592,98597,98604,98609,98618,98631,98635,98643],{"__ignoreMap":31},[36,98593,98594],{"class":38,"line":39},[36,98595,98596],{"class":3943},"#程序执行时间\n",[36,98598,98599,98601],{"class":38,"line":53},[36,98600,611],{"class":46},[36,98602,98603],{"class":42}," time \n",[36,98605,98606],{"class":38,"line":196},[36,98607,98608],{"class":3943},"#获取时间\n",[36,98610,98611,98614,98616],{"class":38,"line":642},[36,98612,98613],{"class":42},"start",[36,98615,47],{"class":46},[36,98617,36004],{"class":42},[36,98619,98620,98623,98626,98628],{"class":38,"line":655},[36,98621,98622],{"class":42},"time.sleep(",[36,98624,98625],{"class":112},"0.4",[36,98627,4304],{"class":42},[36,98629,98630],{"class":3943},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[36,98632,98633],{"class":38,"line":662},[36,98634,98608],{"class":3943},[36,98636,98637,98639,98641],{"class":38,"line":667},[36,98638,49359],{"class":42},[36,98640,47],{"class":46},[36,98642,36004],{"class":42},[36,98644,98645,98647,98649],{"class":38,"line":679},[36,98646,49359],{"class":42},[36,98648,1308],{"class":46},[36,98650,98651],{"class":42},"start\n",[19,98653,98654],{},[5198,98655],{"alt":31,"src":98656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[3785,98658,98659],{},"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":31,"searchDepth":53,"depth":53,"links":98661},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":98569,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":98668,"title":98669,"body":98670,"description":26998,"extension":3817,"meta":98705,"navigation":658,"path":98706,"seo":98707,"stem":98708,"__hash__":98709},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":98671,"toc":98703},[98672,98675,98678,98681,98684,98687,98690,98693,98698],[10,98673,98669],{"id":98674},"_17魔法命令timeit",[19,98676,98677],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,98679,98680],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,98682,98683],{},"单元格模式：",[19,98685,98686],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,98688,98689],{},"初始化语句执行次数由轮数来决定",[19,98691,98692],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,98694,98695],{},[5198,98696],{"alt":31,"src":98697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,98699,98700],{},[5198,98701],{"alt":31,"src":98702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":31,"searchDepth":53,"depth":53,"links":98704},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":98669,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":98711,"title":98712,"body":98713,"description":26998,"extension":3817,"meta":98731,"navigation":658,"path":98732,"seo":98733,"stem":98734,"__hash__":98735},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":98714,"toc":98729},[98715,98718,98721,98724],[10,98716,98712],{"id":98717},"_18魔法命令writefile和run",[19,98719,98720],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,98722,98723],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,98725,98726],{},[5198,98727],{"alt":31,"src":98728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":31,"searchDepth":53,"depth":53,"links":98730},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":98712,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":98737,"title":98738,"body":98739,"description":26998,"extension":3817,"meta":98792,"navigation":658,"path":98793,"seo":98794,"stem":98795,"__hash__":98796},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":98740,"toc":98790},[98741,98744,98747,98749,98752,98755,98760,98763,98766,98769,98772,98775,98778,98781,98784,98787],[10,98742,98738],{"id":98743},"_19魔法命令memit",[19,98745,98746],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,98748,28215],{},[19,98750,98751],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,98753,98754],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,98756,98757],{},[5198,98758],{"alt":31,"src":98759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,98761,98762],{},"补充：",[19,98764,98765],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,98767,98768],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,98770,98771],{},"解决方法：",[19,98773,98774],{},"1.cmd",[19,98776,98777],{},"2.依次输入以下代码：",[19,98779,98780],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,98782,98783],{},"pip install --upgrade ipython",[19,98785,98786],{},"#升级 memory_profiler 和 setuptools",[19,98788,98789],{},"pip install --upgrade memory_profiler setuptools",{"title":31,"searchDepth":53,"depth":53,"links":98791},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":98738,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":98798,"title":98799,"body":98800,"description":26998,"extension":3817,"meta":100443,"navigation":658,"path":100444,"seo":100445,"stem":100446,"__hash__":100447},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":98801,"toc":100413},[98802,98805,98809,98813,98874,98877,98882,98886,98891,98896,98901,98906,98909,98914,98918,98922,98955,98958,98961,98964,99016,99019,99055,99058,99100,99104,99125,99127,99164,99166,99171,99173,99178,99182,99185,99213,99217,99221,99272,99276,99368,99372,99376,99379,99384,99388,99413,99418,99422,99425,99428,99431,99434,99437,99440,99443,99455,99459,99463,99466,99498,99501,99523,99526,99552,99555,99581,99584,99618,99621,99683,99687,99690,99694,99697,99723,99726,99729,99734,99737,99806,99808,99813,99874,99877,99888,99894,99899,99903,99906,99919,99923,99938,99940,99963,99965,99991,99994,99997,100000,100048,100050,100055,100059,100063,100090,100094,100121,100124,100129,100134,100224,100228,100286,100291,100294,100297,100339,100343,100399,100404,100407,100410],[10,98803,98799],{"id":98804},"_2创建数组",[14,98806,98808],{"id":98807},"_21-array函数创建数组","2.1 array()函数创建数组",[318,98810,98812],{"id":98811},"_221-函数语句","2.2.1 函数语句",[26,98814,98816],{"className":28,"code":98815,"language":30,"meta":31,"style":31},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[33,98817,98818],{"__ignoreMap":31},[36,98819,98820,98823,98826,98828,98830,98832,98834,98836,98839,98841,98844,98846,98849,98851,98853,98855,98858,98860,98863,98865,98868,98870,98872],{"class":38,"line":39},[36,98821,98822],{"class":42},"numpy.array(",[36,98824,98825],{"class":112},"object",[36,98827,478],{"class":42},[36,98829,504],{"class":468},[36,98831,673],{"class":46},[36,98833,1384],{"class":112},[36,98835,478],{"class":42},[36,98837,98838],{"class":468},"copy",[36,98840,673],{"class":46},[36,98842,98843],{"class":112}," True",[36,98845,478],{"class":42},[36,98847,98848],{"class":468},"order",[36,98850,673],{"class":46},[36,98852,1384],{"class":112},[36,98854,478],{"class":42},[36,98856,98857],{"class":468},"subok",[36,98859,673],{"class":46},[36,98861,98862],{"class":112}," False",[36,98864,478],{"class":42},[36,98866,98867],{"class":468},"ndmin",[36,98869,673],{"class":46},[36,98871,1004],{"class":112},[36,98873,922],{"class":42},[19,98875,98876],{},"参数：",[19,98878,98879],{},[5198,98880],{"alt":31,"src":98881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[318,98883,98885],{"id":98884},"_222-实例","2.2.2 实例",[19,98887,98888],{},[5198,98889],{"alt":31,"src":98890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,98892,98893],{},[5198,98894],{"alt":31,"src":98895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,98897,98898],{},[5198,98899],{"alt":31,"src":98900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,98902,98903],{},[5198,98904],{"alt":31,"src":98905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,98907,98908],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,98910,98911],{},[5198,98912],{"alt":31,"src":98913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,98915,98917],{"id":98916},"_22-随机数创建数组","2.2 随机数创建数组",[318,98919,98921],{"id":98920},"_221-random语句","2.2.1 random语句",[26,98923,98925],{"className":28,"code":98924,"language":30,"meta":31,"style":31},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[33,98926,98927,98932,98937,98945,98950],{"__ignoreMap":31},[36,98928,98929],{"class":38,"line":39},[36,98930,98931],{"class":3943},"#random.random()\n",[36,98933,98934],{"class":38,"line":53},[36,98935,98936],{"class":3943},"#确定随机种子,就是每次运行结果是相同的\n",[36,98938,98939,98941,98943],{"class":38,"line":196},[36,98940,98158],{"class":42},[36,98942,1859],{"class":112},[36,98944,922],{"class":42},[36,98946,98947],{"class":38,"line":642},[36,98948,98949],{"class":42},"np.random.random()\n",[36,98951,98952],{"class":38,"line":655},[36,98953,98954],{"class":3943},"#生成一个随机的数目\n",[19,98956,98957],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,98959,98960],{},"可以指定数组形状 size",[19,98962,98963],{},"①生成一维数组",[26,98965,98967],{"className":28,"code":98966,"language":30,"meta":31,"style":31},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[33,98968,98969,98974,98987,98992,99008],{"__ignoreMap":31},[36,98970,98971],{"class":38,"line":39},[36,98972,98973],{"class":3943},"#random.random(size())\n",[36,98975,98976,98979,98981,98983,98985],{"class":38,"line":53},[36,98977,98978],{"class":42},"np.random.random(",[36,98980,1476],{"class":468},[36,98982,47],{"class":46},[36,98984,4194],{"class":112},[36,98986,922],{"class":42},[36,98988,98989],{"class":38,"line":196},[36,98990,98991],{"class":3943},"#生成一位的五个元素\n",[36,98993,98994,98996,98998,99000,99002,99004,99006],{"class":38,"line":642},[36,98995,4113],{"class":42},[36,98997,47],{"class":46},[36,98999,98978],{"class":42},[36,99001,1476],{"class":468},[36,99003,47],{"class":46},[36,99005,4168],{"class":112},[36,99007,922],{"class":42},[36,99009,99010,99013],{"class":38,"line":655},[36,99011,99012],{"class":42},"a.shape ",[36,99014,99015],{"class":3943},"#输出数组形状\n",[19,99017,99018],{},"②生成二维数组",[26,99020,99022],{"className":28,"code":99021,"language":30,"meta":31,"style":31},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[33,99023,99024,99028,99050],{"__ignoreMap":31},[36,99025,99026],{"class":38,"line":39},[36,99027,96853],{"class":3943},[36,99029,99030,99032,99034,99036,99038,99040,99042,99044,99046,99048],{"class":38,"line":53},[36,99031,96858],{"class":42},[36,99033,47],{"class":46},[36,99035,98978],{"class":42},[36,99037,1476],{"class":468},[36,99039,47],{"class":46},[36,99041,495],{"class":42},[36,99043,4168],{"class":112},[36,99045,4253],{"class":42},[36,99047,4194],{"class":112},[36,99049,2005],{"class":42},[36,99051,99052],{"class":38,"line":196},[36,99053,99054],{"class":3943},"#生成四行五列的数组\n",[19,99056,99057],{},"③生成三维数组",[26,99059,99061],{"className":28,"code":99060,"language":30,"meta":31,"style":31},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[33,99062,99063,99068,99095],{"__ignoreMap":31},[36,99064,99065],{"class":38,"line":39},[36,99066,99067],{"class":3943},"#三维数组\n",[36,99069,99070,99073,99075,99077,99079,99081,99083,99085,99087,99089,99091,99093],{"class":38,"line":53},[36,99071,99072],{"class":42},"aaa",[36,99074,47],{"class":46},[36,99076,98978],{"class":42},[36,99078,1476],{"class":468},[36,99080,47],{"class":46},[36,99082,495],{"class":42},[36,99084,498],{"class":112},[36,99086,4253],{"class":42},[36,99088,1982],{"class":112},[36,99090,4253],{"class":42},[36,99092,4168],{"class":112},[36,99094,2005],{"class":42},[36,99096,99097],{"class":38,"line":196},[36,99098,99099],{"class":42},"aaa.shape\n",[318,99101,99103],{"id":99102},"_222-randint语句","2.2.2 randint语句",[26,99105,99107],{"className":28,"code":99106,"language":30,"meta":31,"style":31},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[33,99108,99109,99114],{"__ignoreMap":31},[36,99110,99111],{"class":38,"line":39},[36,99112,99113],{"class":3943},"#生成随机的整数 random.randint(low,high,size)\n",[36,99115,99116,99118,99120,99122],{"class":38,"line":53},[36,99117,96666],{"class":42},[36,99119,4194],{"class":112},[36,99121,17373],{"class":42},[36,99123,99124],{"class":3943},"#0~5中的随机一个数\n",[19,99126,98963],{},[26,99128,99130],{"className":28,"code":99129,"language":30,"meta":31,"style":31},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[33,99131,99132,99137,99159],{"__ignoreMap":31},[36,99133,99134],{"class":38,"line":39},[36,99135,99136],{"class":3943},"#一维\n",[36,99138,99139,99141,99143,99145,99147,99149,99151,99153,99155,99157],{"class":38,"line":53},[36,99140,96666],{"class":42},[36,99142,4092],{"class":112},[36,99144,4253],{"class":42},[36,99146,4345],{"class":112},[36,99148,4253],{"class":42},[36,99150,1476],{"class":468},[36,99152,47],{"class":46},[36,99154,495],{"class":42},[36,99156,554],{"class":112},[36,99158,2005],{"class":42},[36,99160,99161],{"class":38,"line":196},[36,99162,99163],{"class":3943},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,99165,99018],{},[19,99167,99168],{},[5198,99169],{"alt":31,"src":99170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,99172,99057],{},[19,99174,99175],{},[5198,99176],{"alt":31,"src":99177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[318,99179,99181],{"id":99180},"_222-rand语句","2.2.2 rand语句",[19,99183,99184],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[26,99186,99188],{"className":28,"code":99187,"language":30,"meta":31,"style":31},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[33,99189,99190,99203,99208],{"__ignoreMap":31},[36,99191,99192,99195,99197,99199,99201],{"class":38,"line":39},[36,99193,99194],{"class":42},"np.random.rand(",[36,99196,4186],{"class":112},[36,99198,4253],{"class":42},[36,99200,554],{"class":112},[36,99202,922],{"class":42},[36,99204,99205],{"class":38,"line":53},[36,99206,99207],{"class":3943},"#第一个参数100：行数，表示有100个样本\n",[36,99209,99210],{"class":38,"line":196},[36,99211,99212],{"class":3943},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,99214,99216],{"id":99215},"_23-arange创建数组","2.3 arange()创建数组",[318,99218,99220],{"id":99219},"_231-函数语句","2.3.1 函数语句",[26,99222,99224],{"className":28,"code":99223,"language":30,"meta":31,"style":31},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[33,99225,99226,99239,99244,99248,99253,99258,99263,99268],{"__ignoreMap":31},[36,99227,99228,99231,99233,99235,99237],{"class":38,"line":39},[36,99229,99230],{"class":42},"numpy.arange([start,] stop[, step], ",[36,99232,504],{"class":468},[36,99234,47],{"class":46},[36,99236,885],{"class":112},[36,99238,922],{"class":42},[36,99240,99241],{"class":38,"line":53},[36,99242,99243],{"class":3943},"#参数\n",[36,99245,99246],{"class":38,"line":196},[36,99247,816],{"class":105},[36,99249,99250],{"class":38,"line":642},[36,99251,99252],{"class":105},"start:起始值，可选，默认从 0 开始。\n",[36,99254,99255],{"class":38,"line":655},[36,99256,99257],{"class":105},"stop:结束值（不包含该值）。\n",[36,99259,99260],{"class":38,"line":662},[36,99261,99262],{"class":105},"step:步长，可选，默认是 1。可以为浮点数。\n",[36,99264,99265],{"class":38,"line":667},[36,99266,99267],{"class":105},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[36,99269,99270],{"class":38,"line":679},[36,99271,816],{"class":105},[318,99273,99275],{"id":99274},"_232-实例","2.3.2 实例",[26,99277,99279],{"className":28,"code":99278,"language":30,"meta":31,"style":31},"#创建一维数组\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",[33,99280,99281,99285,99309,99314,99319,99323,99346,99350,99354,99359,99364],{"__ignoreMap":31},[36,99282,99283],{"class":38,"line":39},[36,99284,96657],{"class":3943},[36,99286,99287,99289,99291,99293,99295,99297,99299,99301,99303,99305,99307],{"class":38,"line":53},[36,99288,96554],{"class":42},[36,99290,4092],{"class":112},[36,99292,4253],{"class":42},[36,99294,4595],{"class":112},[36,99296,4253],{"class":42},[36,99298,4092],{"class":112},[36,99300,4253],{"class":42},[36,99302,504],{"class":468},[36,99304,47],{"class":46},[36,99306,1378],{"class":112},[36,99308,922],{"class":42},[36,99310,99311],{"class":38,"line":196},[36,99312,99313],{"class":3943},"#输出结果：\n",[36,99315,99316],{"class":38,"line":642},[36,99317,99318],{"class":3943},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[36,99320,99321],{"class":38,"line":655},[36,99322,97498],{"class":3943},[36,99324,99325,99328,99330,99332,99334,99337,99339,99341,99343],{"class":38,"line":662},[36,99326,99327],{"class":42},"np.array([np.arange(",[36,99329,4092],{"class":112},[36,99331,4253],{"class":42},[36,99333,4168],{"class":112},[36,99335,99336],{"class":42},"),np.arange(",[36,99338,4168],{"class":112},[36,99340,4253],{"class":42},[36,99342,4244],{"class":112},[36,99344,99345],{"class":42},")])\n",[36,99347,99348],{"class":38,"line":667},[36,99349,97115],{"class":3943},[36,99351,99352],{"class":38,"line":679},[36,99353,816],{"class":105},[36,99355,99356],{"class":38,"line":685},[36,99357,99358],{"class":105},"array([[1, 2, 3],\n",[36,99360,99361],{"class":38,"line":691},[36,99362,99363],{"class":105},"       [4, 5, 6]])\n",[36,99365,99366],{"class":38,"line":696},[36,99367,816],{"class":105},[14,99369,99371],{"id":99370},"_24-生态分布","2.4 生态分布",[318,99373,99375],{"id":99374},"_241-标准正态分布","2.4.1 标准正态分布",[19,99377,99378],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,99380,99381],{},[5198,99382],{"alt":31,"src":99383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[318,99385,99387],{"id":99386},"_242-常规正态分布","2.4.2 常规正态分布",[26,99389,99391],{"className":28,"code":99390,"language":30,"meta":31,"style":31},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[33,99392,99393,99398,99403,99408],{"__ignoreMap":31},[36,99394,99395],{"class":38,"line":39},[36,99396,99397],{"class":42},"random.normal(loc,scale,size)也可以生成正态分布\n",[36,99399,99400],{"class":38,"line":53},[36,99401,99402],{"class":3943},"#loc:期望\n",[36,99404,99405],{"class":38,"line":196},[36,99406,99407],{"class":3943},"#scale:方差\n",[36,99409,99410],{"class":38,"line":642},[36,99411,99412],{"class":3943},"#size:用于确定是几维的数列\n",[19,99414,99415],{},[5198,99416],{"alt":31,"src":99417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,99419,99421],{"id":99420},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,99423,99424],{},"ndim:秩，维度个数",[19,99426,99427],{},"size:数组元素的个数",[19,99429,99430],{},"shape:数组的形状",[19,99432,99433],{},"dtype:数组元素的类型",[19,99435,99436],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,99438,99439],{},"他们都是属性，通过数组.属性的形式来确定",[19,99441,99442],{},"如果需要输出多个可以通过以下方式：",[26,99444,99446],{"className":28,"code":99445,"language":30,"meta":31,"style":31},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[33,99447,99448],{"__ignoreMap":31},[36,99449,99450,99452],{"class":38,"line":39},[36,99451,3486],{"class":112},[36,99453,99454],{"class":42},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,99456,99458],{"id":99457},"_26-其他方式创建数组","2.6 其他方式创建数组",[318,99460,99462],{"id":99461},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,99464,99465],{},"①创建一维数组",[26,99467,99469],{"className":28,"code":99468,"language":30,"meta":31,"style":31},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[33,99470,99471,99480,99484,99489,99494],{"__ignoreMap":31},[36,99472,99473,99476,99478],{"class":38,"line":39},[36,99474,99475],{"class":42},"np.zeros(",[36,99477,554],{"class":112},[36,99479,922],{"class":42},[36,99481,99482],{"class":38,"line":53},[36,99483,816],{"class":105},[36,99485,99486],{"class":38,"line":196},[36,99487,99488],{"class":105},"输出结果：\n",[36,99490,99491],{"class":38,"line":642},[36,99492,99493],{"class":105},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[36,99495,99496],{"class":38,"line":655},[36,99497,816],{"class":105},[19,99499,99500],{},"上方代码等价于：",[26,99502,99504],{"className":28,"code":99503,"language":30,"meta":31,"style":31},"np.zeros(shape=(10))#创建10个元素的0数组\n",[33,99505,99506],{"__ignoreMap":31},[36,99507,99508,99510,99512,99514,99516,99518,99520],{"class":38,"line":39},[36,99509,99475],{"class":42},[36,99511,490],{"class":468},[36,99513,47],{"class":46},[36,99515,495],{"class":42},[36,99517,554],{"class":112},[36,99519,86325],{"class":42},[36,99521,99522],{"class":3943},"#创建10个元素的0数组\n",[19,99524,99525],{},"也可以指定类型",[26,99527,99529],{"className":28,"code":99528,"language":30,"meta":31,"style":31},"#指定类型\nnp.zeros(5,dtype=int)\n",[33,99530,99531,99536],{"__ignoreMap":31},[36,99532,99533],{"class":38,"line":39},[36,99534,99535],{"class":3943},"#指定类型\n",[36,99537,99538,99540,99542,99544,99546,99548,99550],{"class":38,"line":53},[36,99539,99475],{"class":42},[36,99541,4194],{"class":112},[36,99543,4253],{"class":42},[36,99545,504],{"class":468},[36,99547,47],{"class":46},[36,99549,1378],{"class":112},[36,99551,922],{"class":42},[19,99553,99554],{},"②创建二维数组",[26,99556,99558],{"className":28,"code":99557,"language":30,"meta":31,"style":31},"np.zeros((3,4),dtype=int)\n",[33,99559,99560],{"__ignoreMap":31},[36,99561,99562,99565,99567,99569,99571,99573,99575,99577,99579],{"class":38,"line":39},[36,99563,99564],{"class":42},"np.zeros((",[36,99566,1982],{"class":112},[36,99568,4253],{"class":42},[36,99570,4168],{"class":112},[36,99572,45814],{"class":42},[36,99574,504],{"class":468},[36,99576,47],{"class":46},[36,99578,1378],{"class":112},[36,99580,922],{"class":42},[19,99582,99583],{},"③创建三维数组",[26,99585,99587],{"className":28,"code":99586,"language":30,"meta":31,"style":31},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[33,99588,99589,99594],{"__ignoreMap":31},[36,99590,99591],{"class":38,"line":39},[36,99592,99593],{"class":3943},"#创建三维数组\n",[36,99595,99596,99598,99600,99602,99604,99606,99608,99610,99612,99614,99616],{"class":38,"line":53},[36,99597,99564],{"class":42},[36,99599,1982],{"class":112},[36,99601,4253],{"class":42},[36,99603,4168],{"class":112},[36,99605,4253],{"class":42},[36,99607,4194],{"class":112},[36,99609,45814],{"class":42},[36,99611,504],{"class":468},[36,99613,47],{"class":46},[36,99615,1378],{"class":112},[36,99617,922],{"class":42},[19,99619,99620],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[26,99622,99624],{"className":28,"code":99623,"language":30,"meta":31,"style":31},"#使用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",[33,99625,99626,99631,99646,99651,99656,99678],{"__ignoreMap":31},[36,99627,99628],{"class":38,"line":39},[36,99629,99630],{"class":3943},"#使用zeros_like将创建的一维数组变成全0的数组\n",[36,99632,99633,99635,99637,99639,99641,99643],{"class":38,"line":53},[36,99634,4113],{"class":42},[36,99636,47],{"class":46},[36,99638,96554],{"class":42},[36,99640,4168],{"class":112},[36,99642,4304],{"class":42},[36,99644,99645],{"class":3943},"#这个得到的结果：一维数组0，1，2，3\n",[36,99647,99648],{"class":38,"line":196},[36,99649,99650],{"class":42},"np.zeros_like(a)\n",[36,99652,99653],{"class":38,"line":642},[36,99654,99655],{"class":3943},"#使用zeros_like将创建的二维数组变成全0的数组\n",[36,99657,99658,99660,99662,99664,99666,99668,99670,99672,99674,99676],{"class":38,"line":655},[36,99659,96858],{"class":42},[36,99661,47],{"class":46},[36,99663,98978],{"class":42},[36,99665,1476],{"class":468},[36,99667,47],{"class":46},[36,99669,495],{"class":42},[36,99671,4168],{"class":112},[36,99673,4253],{"class":42},[36,99675,4194],{"class":112},[36,99677,2005],{"class":42},[36,99679,99680],{"class":38,"line":662},[36,99681,99682],{"class":42},"np.zeros_like(aa)\n",[318,99684,99686],{"id":99685},"_262-ones创建数组","2.6.2 ones()创建数组",[19,99688,99689],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[318,99691,99693],{"id":99692},"_263-empty创建数组","2.6.3 empty()创建数组",[19,99695,99696],{},"①empty()用法",[26,99698,99700],{"className":28,"code":99699,"language":30,"meta":31,"style":31},"numpy.empty(shape,dtype=float,order='c')\n",[33,99701,99702],{"__ignoreMap":31},[36,99703,99704,99707,99709,99711,99713,99715,99717,99719,99721],{"class":38,"line":39},[36,99705,99706],{"class":42},"numpy.empty(shape,",[36,99708,504],{"class":468},[36,99710,47],{"class":46},[36,99712,1260],{"class":112},[36,99714,4253],{"class":42},[36,99716,98848],{"class":468},[36,99718,47],{"class":46},[36,99720,79582],{"class":105},[36,99722,922],{"class":42},[19,99724,99725],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,99727,99728],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,99730,99731],{},[5198,99732],{"alt":31,"src":99733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,99735,99736],{},"②empty()用法",[26,99738,99740],{"className":28,"code":99739,"language":30,"meta":31,"style":31},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[33,99741,99742,99763,99775,99796,99801],{"__ignoreMap":31},[36,99743,99744,99746,99748,99751,99753,99755,99757,99759,99761],{"class":38,"line":39},[36,99745,4715],{"class":42},[36,99747,47],{"class":46},[36,99749,99750],{"class":42},"np.empty(",[36,99752,554],{"class":112},[36,99754,4253],{"class":42},[36,99756,504],{"class":468},[36,99758,47],{"class":46},[36,99760,1378],{"class":112},[36,99762,922],{"class":42},[36,99764,99765,99767,99769,99771,99773],{"class":38,"line":53},[36,99766,4690],{"class":42},[36,99768,47],{"class":46},[36,99770,96554],{"class":42},[36,99772,4194],{"class":112},[36,99774,922],{"class":42},[36,99776,99777,99780,99782,99785,99787,99789,99792,99794],{"class":38,"line":196},[36,99778,99779],{"class":42},"np.add(",[36,99781,498],{"class":112},[36,99783,99784],{"class":42},",x,",[36,99786,96606],{"class":468},[36,99788,47],{"class":46},[36,99790,99791],{"class":42},"y[:",[36,99793,4194],{"class":112},[36,99795,8353],{"class":42},[36,99797,99798],{"class":38,"line":642},[36,99799,99800],{"class":3943},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[36,99802,99803],{"class":38,"line":655},[36,99804,99805],{"class":42},"y\n",[19,99807,15175],{},[19,99809,99810],{},[5198,99811],{"alt":31,"src":99812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[26,99814,99816],{"className":28,"code":99815,"language":30,"meta":31,"style":31},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[33,99817,99818,99834,99854,99869],{"__ignoreMap":31},[36,99819,99820,99822,99824,99826,99828,99830,99832],{"class":38,"line":39},[36,99821,4690],{"class":42},[36,99823,47],{"class":46},[36,99825,96554],{"class":42},[36,99827,4092],{"class":112},[36,99829,4253],{"class":42},[36,99831,4219],{"class":112},[36,99833,922],{"class":42},[36,99835,99836,99838,99840,99842,99844,99846,99848,99850,99852],{"class":38,"line":53},[36,99837,4715],{"class":42},[36,99839,47],{"class":46},[36,99841,99750],{"class":42},[36,99843,4194],{"class":112},[36,99845,4253],{"class":42},[36,99847,504],{"class":468},[36,99849,47],{"class":46},[36,99851,1378],{"class":112},[36,99853,922],{"class":42},[36,99855,99856,99859,99861,99863,99865,99867],{"class":38,"line":196},[36,99857,99858],{"class":42},"np.add(x,",[36,99860,498],{"class":112},[36,99862,4253],{"class":42},[36,99864,96606],{"class":468},[36,99866,47],{"class":46},[36,99868,97001],{"class":42},[36,99870,99871],{"class":38,"line":642},[36,99872,99873],{"class":3943},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,99875,99876],{},"③empty_like()",[19,99878,99879],{},[4027,99880,99881,99882,99887],{},"创建一个",[4027,99883,99884],{},[4027,99885,99886],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,99889,99890,99893],{},[33,99891,99892],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,99895,99896],{},[5198,99897],{"alt":31,"src":99898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[318,99900,99902],{"id":99901},"_264-用法","2.6.4 ？？用法",[19,99904,99905],{},"当想查看一个函数的参数时，可以通过？？来实现",[26,99907,99909],{"className":28,"code":99908,"language":30,"meta":31,"style":31},"np.full??\n",[33,99910,99911],{"__ignoreMap":31},[36,99912,99913,99916],{"class":38,"line":39},[36,99914,99915],{"class":42},"np.full",[36,99917,99918],{"class":80957},"??\n",[318,99920,99922],{"id":99921},"_265-full创建数组","2.6.5 full()创建数组",[26,99924,99926],{"className":28,"code":99925,"language":30,"meta":31,"style":31},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[33,99927,99928,99933],{"__ignoreMap":31},[36,99929,99930],{"class":38,"line":39},[36,99931,99932],{"class":42},"full(shape,fill_value)\n",[36,99934,99935],{"class":38,"line":53},[36,99936,99937],{"class":42},"创建全为某个指定值的数组\n",[19,99939,98081],{},[26,99941,99943],{"className":28,"code":99942,"language":30,"meta":31,"style":31},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[33,99944,99945,99950],{"__ignoreMap":31},[36,99946,99947],{"class":38,"line":39},[36,99948,99949],{"class":3943},"#创建一个一维数组,以20进行填充\n",[36,99951,99952,99955,99957,99959,99961],{"class":38,"line":53},[36,99953,99954],{"class":42},"np.full(",[36,99956,554],{"class":112},[36,99958,4253],{"class":42},[36,99960,1921],{"class":112},[36,99962,922],{"class":42},[19,99964,96843],{},[26,99966,99968],{"className":28,"code":99967,"language":30,"meta":31,"style":31},"#创建二维数组\nnp.full((3,5),11)\n",[33,99969,99970,99974],{"__ignoreMap":31},[36,99971,99972],{"class":38,"line":39},[36,99973,97498],{"class":3943},[36,99975,99976,99979,99981,99983,99985,99987,99989],{"class":38,"line":53},[36,99977,99978],{"class":42},"np.full((",[36,99980,1982],{"class":112},[36,99982,4253],{"class":42},[36,99984,4194],{"class":112},[36,99986,45814],{"class":42},[36,99988,4345],{"class":112},[36,99990,922],{"class":42},[19,99992,99993],{},"③full_like用法",[19,99995,99996],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,99998,99999],{},"这里是指定填充而已",[26,100001,100003],{"className":28,"code":100002,"language":30,"meta":31,"style":31},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[33,100004,100005,100010,100034,100039],{"__ignoreMap":31},[36,100006,100007],{"class":38,"line":39},[36,100008,100009],{"class":3943},"#创建一个指定形状数组\n",[36,100011,100012,100014,100016,100018,100020,100022,100024,100026,100028,100030,100032],{"class":38,"line":53},[36,100013,4113],{"class":42},[36,100015,47],{"class":46},[36,100017,96554],{"class":42},[36,100019,4092],{"class":112},[36,100021,4253],{"class":42},[36,100023,4200],{"class":112},[36,100025,96559],{"class":42},[36,100027,4168],{"class":112},[36,100029,4253],{"class":42},[36,100031,4295],{"class":112},[36,100033,922],{"class":42},[36,100035,100036],{"class":38,"line":196},[36,100037,100038],{"class":3943},"#进行指定填充\n",[36,100040,100041,100044,100046],{"class":38,"line":642},[36,100042,100043],{"class":42},"np.full_like(a,",[36,100045,554],{"class":112},[36,100047,922],{"class":42},[19,100049,15175],{},[19,100051,100052],{},[5198,100053],{"alt":31,"src":100054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[318,100056,100058],{"id":100057},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[25619,100060,100062],{"id":100061},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[26,100064,100066],{"className":28,"code":100065,"language":30,"meta":31,"style":31},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[33,100067,100068,100085],{"__ignoreMap":31},[36,100069,100070,100073,100075,100077,100079,100081,100083],{"class":38,"line":39},[36,100071,100072],{"class":42},"np.eye(",[36,100074,4168],{"class":112},[36,100076,4253],{"class":42},[36,100078,504],{"class":468},[36,100080,47],{"class":46},[36,100082,1378],{"class":112},[36,100084,922],{"class":42},[36,100086,100087],{"class":38,"line":53},[36,100088,100089],{"class":3943},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[25619,100091,100093],{"id":100092},"_2662-法2identity","2.6.6.2 法2：identity()",[26,100095,100097],{"className":28,"code":100096,"language":30,"meta":31,"style":31},"#identity()\nnp.identity(5,dtype=int)\n",[33,100098,100099,100104],{"__ignoreMap":31},[36,100100,100101],{"class":38,"line":39},[36,100102,100103],{"class":3943},"#identity()\n",[36,100105,100106,100109,100111,100113,100115,100117,100119],{"class":38,"line":53},[36,100107,100108],{"class":42},"np.identity(",[36,100110,4194],{"class":112},[36,100112,4253],{"class":42},[36,100114,504],{"class":468},[36,100116,47],{"class":46},[36,100118,1378],{"class":112},[36,100120,922],{"class":42},[19,100122,100123],{},"两个函数是有区别的",[19,100125,100126],{},[5198,100127],{"alt":31,"src":100128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,100130,100131],{},[5198,100132],{"alt":31,"src":100133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[26,100135,100137],{"className":28,"code":100136,"language":30,"meta":31,"style":31},"# 创建一个 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",[33,100138,100139,100144,100156,100161,100166,100171,100176,100180,100185,100205,100209,100214,100219],{"__ignoreMap":31},[36,100140,100141],{"class":38,"line":39},[36,100142,100143],{"class":3943},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[36,100145,100146,100148,100150,100152,100154],{"class":38,"line":53},[36,100147,100072],{"class":42},[36,100149,1982],{"class":112},[36,100151,478],{"class":42},[36,100153,4168],{"class":112},[36,100155,922],{"class":42},[36,100157,100158],{"class":38,"line":196},[36,100159,100160],{"class":3943},"# 输出:\n",[36,100162,100163],{"class":38,"line":642},[36,100164,100165],{"class":3943},"# [[1. 0. 0. 0.]\n",[36,100167,100168],{"class":38,"line":655},[36,100169,100170],{"class":3943},"#  [0. 1. 0. 0.]\n",[36,100172,100173],{"class":38,"line":662},[36,100174,100175],{"class":3943},"#  [0. 0. 1. 0.]]\n",[36,100177,100178],{"class":38,"line":667},[36,100179,659],{"emptyLinePlaceholder":658},[36,100181,100182],{"class":38,"line":679},[36,100183,100184],{"class":3943},"# 对角线向上偏移1\n",[36,100186,100187,100189,100191,100193,100195,100197,100199,100201,100203],{"class":38,"line":685},[36,100188,100072],{"class":42},[36,100190,1982],{"class":112},[36,100192,478],{"class":42},[36,100194,4168],{"class":112},[36,100196,478],{"class":42},[36,100198,4366],{"class":468},[36,100200,47],{"class":46},[36,100202,4092],{"class":112},[36,100204,922],{"class":42},[36,100206,100207],{"class":38,"line":691},[36,100208,100160],{"class":3943},[36,100210,100211],{"class":38,"line":696},[36,100212,100213],{"class":3943},"# [[0. 1. 0. 0.]\n",[36,100215,100216],{"class":38,"line":702},[36,100217,100218],{"class":3943},"#  [0. 0. 1. 0.]\n",[36,100220,100221],{"class":38,"line":708},[36,100222,100223],{"class":3943},"#  [0. 0. 0. 1.]]\n",[318,100225,100227],{"id":100226},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[26,100229,100231],{"className":28,"code":100230,"language":30,"meta":31,"style":31},"#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",[33,100232,100233,100238,100242,100247,100252,100257,100262,100267,100272,100277,100282],{"__ignoreMap":31},[36,100234,100235],{"class":38,"line":39},[36,100236,100237],{"class":3943},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[36,100239,100240],{"class":38,"line":53},[36,100241,816],{"class":105},[36,100243,100244],{"class":38,"line":196},[36,100245,100246],{"class":105},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[36,100248,100249],{"class":38,"line":642},[36,100250,100251],{"class":105},"参数介绍：\n",[36,100253,100254],{"class":38,"line":655},[36,100255,100256],{"class":105},"start：序列的起始值\n",[36,100258,100259],{"class":38,"line":662},[36,100260,100261],{"class":105},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[36,100263,100264],{"class":38,"line":667},[36,100265,100266],{"class":105},"num：要生长的等步长的样本数量，默认为50\n",[36,100268,100269],{"class":38,"line":679},[36,100270,100271],{"class":105},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[36,100273,100274],{"class":38,"line":685},[36,100275,100276],{"class":105},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[36,100278,100279],{"class":38,"line":691},[36,100280,100281],{"class":105},"dtype：ndarry的数据类型\n",[36,100283,100284],{"class":38,"line":696},[36,100285,816],{"class":105},[19,100287,100288],{},[5198,100289],{"alt":31,"src":100290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,100292,100293],{},"这里num=是可以省略的",[19,100295,100296],{},"也就是下方两行代码结果是一模一样的",[26,100298,100300],{"className":28,"code":100299,"language":30,"meta":31,"style":31},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[33,100301,100302,100319],{"__ignoreMap":31},[36,100303,100304,100307,100309,100311,100313,100315,100317],{"class":38,"line":39},[36,100305,100306],{"class":42},"np.linspace(",[36,100308,4092],{"class":112},[36,100310,4253],{"class":42},[36,100312,4194],{"class":112},[36,100314,4253],{"class":42},[36,100316,4194],{"class":112},[36,100318,922],{"class":42},[36,100320,100321,100323,100325,100327,100329,100331,100333,100335,100337],{"class":38,"line":53},[36,100322,100306],{"class":42},[36,100324,4092],{"class":112},[36,100326,4253],{"class":42},[36,100328,4194],{"class":112},[36,100330,4253],{"class":42},[36,100332,5393],{"class":468},[36,100334,47],{"class":46},[36,100336,4194],{"class":112},[36,100338,922],{"class":42},[318,100340,100342],{"id":100341},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[26,100344,100346],{"className":28,"code":100345,"language":30,"meta":31,"style":31},"#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",[33,100347,100348,100353,100357,100362,100367,100372,100377,100381,100386,100391,100395],{"__ignoreMap":31},[36,100349,100350],{"class":38,"line":39},[36,100351,100352],{"class":3943},"#logspace函数用于创建一个等比数列，格式如下：\n",[36,100354,100355],{"class":38,"line":53},[36,100356,816],{"class":105},[36,100358,100359],{"class":38,"line":196},[36,100360,100361],{"class":105},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[36,100363,100364],{"class":38,"line":642},[36,100365,100366],{"class":105},"参数为：\n",[36,100368,100369],{"class":38,"line":655},[36,100370,100371],{"class":105},"start:序列的起始位置为：base**start\n",[36,100373,100374],{"class":38,"line":662},[36,100375,100376],{"class":105},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[36,100378,100379],{"class":38,"line":667},[36,100380,100266],{"class":105},[36,100382,100383],{"class":38,"line":679},[36,100384,100385],{"class":105},"endpoint：是否包含 stop 这个值，默认是 True\n",[36,100387,100388],{"class":38,"line":685},[36,100389,100390],{"class":105},"base：对数的底数，默认是 10（常见对数）\n",[36,100392,100393],{"class":38,"line":691},[36,100394,100281],{"class":105},[36,100396,100397],{"class":38,"line":696},[36,100398,816],{"class":105},[19,100400,100401],{},[5198,100402],{"alt":31,"src":100403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,100405,100406],{},"logspace()函数中的num参数也是可以不写num=的",[19,100408,100409],{},"endpoint是不可以省略的",[3785,100411,100412],{},"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":31,"searchDepth":53,"depth":53,"links":100414},[100415,100419,100424,100428,100432,100433],{"id":98807,"depth":53,"text":98808,"children":100416},[100417,100418],{"id":98811,"depth":196,"text":98812},{"id":98884,"depth":196,"text":98885},{"id":98916,"depth":53,"text":98917,"children":100420},[100421,100422,100423],{"id":98920,"depth":196,"text":98921},{"id":99102,"depth":196,"text":99103},{"id":99180,"depth":196,"text":99181},{"id":99215,"depth":53,"text":99216,"children":100425},[100426,100427],{"id":99219,"depth":196,"text":99220},{"id":99274,"depth":196,"text":99275},{"id":99370,"depth":53,"text":99371,"children":100429},[100430,100431],{"id":99374,"depth":196,"text":99375},{"id":99386,"depth":196,"text":99387},{"id":99420,"depth":53,"text":99421},{"id":99457,"depth":53,"text":99458,"children":100434},[100435,100436,100437,100438,100439,100440,100441,100442],{"id":99461,"depth":196,"text":99462},{"id":99685,"depth":196,"text":99686},{"id":99692,"depth":196,"text":99693},{"id":99901,"depth":196,"text":99902},{"id":99921,"depth":196,"text":99922},{"id":100057,"depth":196,"text":100058},{"id":100226,"depth":196,"text":100227},{"id":100341,"depth":196,"text":100342},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":98799,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":100449,"title":100450,"body":100451,"description":26998,"extension":3817,"meta":100544,"navigation":658,"path":100545,"seo":100546,"stem":100547,"__hash__":100548},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":100452,"toc":100542},[100453,100456,100459,100462,100465,100468,100471,100474,100477,100480,100483,100486,100488,100491,100494,100499,100502,100505,100539],[10,100454,100450],{"id":100455},"_20魔法命令mprun",[19,100457,100458],{},"逐行分析数据内存的使用情况",[19,100460,100461],{},"语法格式：",[19,100463,100464],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,100466,100467],{},"分析结果列如下：",[19,100469,100470],{},"Line行号",[19,100472,100473],{},"Mem usage内存使用大小",[19,100475,100476],{},"increment内存增量",[19,100478,100479],{},"Line content代码内容",[19,100481,100482],{},"补充说明：",[19,100484,100485],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,100487,98754],{},[19,100489,100490],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,100492,100493],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,100495,100496],{},[5198,100497],{"alt":31,"src":100498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,100500,100501],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,100503,100504],{},"这时候需要重新加载模块",[26,100506,100508],{"className":28,"code":100507,"language":30,"meta":31,"style":31},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[33,100509,100510,100515,100522,100527],{"__ignoreMap":31},[36,100511,100512],{"class":38,"line":39},[36,100513,100514],{"class":3943},"#重新加载模块\n",[36,100516,100517,100519],{"class":38,"line":53},[36,100518,611],{"class":46},[36,100520,100521],{"class":42}," importlib\n",[36,100523,100524],{"class":38,"line":196},[36,100525,100526],{"class":42},"importlib.reload(mprun_test)\n",[36,100528,100529,100531,100534,100536],{"class":38,"line":642},[36,100530,4203],{"class":46},[36,100532,100533],{"class":42},"mprun ",[36,100535,1308],{"class":46},[36,100537,100538],{"class":42},"f mprun_test.fun_test mprun_test.fun_test()\n",[3785,100540,100541],{},"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":31,"searchDepth":53,"depth":53,"links":100543},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":100450,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":100550,"title":100551,"body":100552,"description":26998,"extension":3817,"meta":100569,"navigation":658,"path":100570,"seo":100571,"stem":100572,"__hash__":100573},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":100553,"toc":100567},[100554,100557,100562],[10,100555,100551],{"id":100556},"_3一维数组的索引和切片",[19,100558,100559],{},[5198,100560],{"alt":31,"src":100561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,100563,100564],{},[5198,100565],{"alt":31,"src":100566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":31,"searchDepth":53,"depth":53,"links":100568},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":100551,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":100575,"title":100576,"body":100577,"description":26998,"extension":3817,"meta":101060,"navigation":658,"path":101061,"seo":101062,"stem":101063,"__hash__":101064},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":100578,"toc":101058},[100579,100582,100585,100590,100623,100626,100664,100667,100701,100704,100809,100812,100849,100852,100953,100956,101007,101010,101052,101055],[10,100580,100576],{"id":100581},"_4二维数组的索引与切片",[19,100583,100584],{},"①获取指定单个元素",[19,100586,100587],{},[5198,100588],{"alt":31,"src":100589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[26,100591,100593],{"className":28,"code":100592,"language":30,"meta":31,"style":31},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[33,100594,100595,100600,100605,100610],{"__ignoreMap":31},[36,100596,100597],{"class":38,"line":39},[36,100598,100599],{"class":3943},"#获取元素9\n",[36,100601,100602],{"class":38,"line":53},[36,100603,100604],{"class":3943},"#先获取所在行，再获取所在列\n",[36,100606,100607],{"class":38,"line":196},[36,100608,100609],{"class":3943},"#数组[行索引号，列索引号]\n",[36,100611,100612,100615,100617,100619,100621],{"class":38,"line":642},[36,100613,100614],{"class":42},"a[",[36,100616,4092],{"class":112},[36,100618,4253],{"class":42},[36,100620,498],{"class":112},[36,100622,36806],{"class":42},[19,100624,100625],{},"②获取整行元素",[26,100627,100629],{"className":28,"code":100628,"language":30,"meta":31,"style":31},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[33,100630,100631,100636,100641,100649,100654],{"__ignoreMap":31},[36,100632,100633],{"class":38,"line":39},[36,100634,100635],{"class":3943},"#获取整行 数组[行索引号]\n",[36,100637,100638],{"class":38,"line":53},[36,100639,100640],{"class":3943},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[36,100642,100643,100645,100647],{"class":38,"line":196},[36,100644,100614],{"class":42},[36,100646,498],{"class":112},[36,100648,36806],{"class":42},[36,100650,100651],{"class":38,"line":642},[36,100652,100653],{"class":3943},"#也可以负索引获取一行\n",[36,100655,100656,100658,100660,100662],{"class":38,"line":655},[36,100657,100614],{"class":42},[36,100659,1308],{"class":46},[36,100661,4092],{"class":112},[36,100663,36806],{"class":42},[19,100665,100666],{},"③获取整列元素",[26,100668,100670],{"className":28,"code":100669,"language":30,"meta":31,"style":31},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[33,100671,100672,100677,100686,100691],{"__ignoreMap":31},[36,100673,100674],{"class":38,"line":39},[36,100675,100676],{"class":3943},"#获取整列 数组名[:,列索引]\n",[36,100678,100679,100682,100684],{"class":38,"line":53},[36,100680,100681],{"class":42},"a[:,",[36,100683,498],{"class":112},[36,100685,36806],{"class":42},[36,100687,100688],{"class":38,"line":196},[36,100689,100690],{"class":3943},"#也可以负索引获取一列\n",[36,100692,100693,100695,100697,100699],{"class":38,"line":642},[36,100694,100681],{"class":42},[36,100696,1308],{"class":46},[36,100698,4092],{"class":112},[36,100700,36806],{"class":42},[19,100702,100703],{},"④部分行部分列的元素",[26,100705,100707],{"className":28,"code":100706,"language":30,"meta":31,"style":31},"#部分行部分列 数组名[行切片，列切片]\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",[33,100708,100709,100714,100724,100728,100732,100737,100742,100746,100758,100762,100766,100771,100776,100781,100786,100790,100795],{"__ignoreMap":31},[36,100710,100711],{"class":38,"line":39},[36,100712,100713],{"class":3943},"#部分行部分列 数组名[行切片，列切片]\n",[36,100715,100716,100719,100721],{"class":38,"line":53},[36,100717,100718],{"class":42},"a[:",[36,100720,498],{"class":112},[36,100722,100723],{"class":42},",:]\n",[36,100725,100726],{"class":38,"line":196},[36,100727,97115],{"class":3943},[36,100729,100730],{"class":38,"line":642},[36,100731,97479],{"class":105},[36,100733,100734],{"class":38,"line":655},[36,100735,100736],{"class":105},"array([[ 1,  2,  3,  4,  5,  6],\n",[36,100738,100739],{"class":38,"line":662},[36,100740,100741],{"class":105},"       [ 7,  8,  9, 10, 11, 12]])\n",[36,100743,100744],{"class":38,"line":667},[36,100745,97479],{"class":105},[36,100747,100748,100750,100752,100754,100756],{"class":38,"line":679},[36,100749,100681],{"class":42},[36,100751,4092],{"class":112},[36,100753,4729],{"class":42},[36,100755,4168],{"class":112},[36,100757,36806],{"class":42},[36,100759,100760],{"class":38,"line":685},[36,100761,97115],{"class":3943},[36,100763,100764],{"class":38,"line":691},[36,100765,97479],{"class":105},[36,100767,100768],{"class":38,"line":696},[36,100769,100770],{"class":105},"array([[ 2,  3,  4],\n",[36,100772,100773],{"class":38,"line":702},[36,100774,100775],{"class":105},"       [ 8,  9, 10],\n",[36,100777,100778],{"class":38,"line":708},[36,100779,100780],{"class":105},"       [14, 15, 16],\n",[36,100782,100783],{"class":38,"line":713},[36,100784,100785],{"class":105},"       [20, 21, 22]])\n",[36,100787,100788],{"class":38,"line":719},[36,100789,97479],{"class":105},[36,100791,100792],{"class":38,"line":725},[36,100793,100794],{"class":3943},"#对列行同时进行切片，使用了step参数\n",[36,100796,100797,100800,100802,100805,100807],{"class":38,"line":731},[36,100798,100799],{"class":42},"a[::",[36,100801,498],{"class":112},[36,100803,100804],{"class":42},",::",[36,100806,498],{"class":112},[36,100808,36806],{"class":42},[19,100810,100811],{},"⑤同时获取两个元素",[26,100813,100815],{"className":28,"code":100814,"language":30,"meta":31,"style":31},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[33,100816,100817,100822,100827],{"__ignoreMap":31},[36,100818,100819],{"class":38,"line":39},[36,100820,100821],{"class":3943},"#同时获取第三行第二列，第四行第一列\n",[36,100823,100824],{"class":38,"line":53},[36,100825,100826],{"class":3943},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[36,100828,100829,100832,100834,100836,100838,100840,100842,100844,100846],{"class":38,"line":196},[36,100830,100831],{"class":42},"a[(",[36,100833,498],{"class":112},[36,100835,4253],{"class":42},[36,100837,1982],{"class":112},[36,100839,45805],{"class":42},[36,100841,4092],{"class":112},[36,100843,4253],{"class":42},[36,100845,1859],{"class":112},[36,100847,100848],{"class":42},")]\n",[19,100850,100851],{},"⑥切片，对行进行反向获取",[26,100853,100855],{"className":28,"code":100854,"language":30,"meta":31,"style":31},"#切片 对所有行进行反向获取\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",[33,100856,100857,100862,100872,100876,100880,100885,100890,100895,100900,100904,100909,100925,100929,100934,100939,100944,100949],{"__ignoreMap":31},[36,100858,100859],{"class":38,"line":39},[36,100860,100861],{"class":3943},"#切片 对所有行进行反向获取\n",[36,100863,100864,100866,100868,100870],{"class":38,"line":53},[36,100865,100799],{"class":42},[36,100867,1308],{"class":46},[36,100869,4092],{"class":112},[36,100871,36806],{"class":42},[36,100873,100874],{"class":38,"line":196},[36,100875,97115],{"class":3943},[36,100877,100878],{"class":38,"line":642},[36,100879,97479],{"class":105},[36,100881,100882],{"class":38,"line":655},[36,100883,100884],{"class":105},"array([[19, 20, 21, 22, 23, 24],\n",[36,100886,100887],{"class":38,"line":662},[36,100888,100889],{"class":105},"       [13, 14, 15, 16, 17, 18],\n",[36,100891,100892],{"class":38,"line":667},[36,100893,100894],{"class":105},"       [ 7,  8,  9, 10, 11, 12],\n",[36,100896,100897],{"class":38,"line":679},[36,100898,100899],{"class":105},"       [ 1,  2,  3,  4,  5,  6]])\n",[36,100901,100902],{"class":38,"line":685},[36,100903,97479],{"class":105},[36,100905,100906],{"class":38,"line":691},[36,100907,100908],{"class":3943},"#对行列都进行反向切片获取\n",[36,100910,100911,100913,100915,100917,100919,100921,100923],{"class":38,"line":696},[36,100912,100799],{"class":42},[36,100914,1308],{"class":46},[36,100916,4092],{"class":112},[36,100918,100804],{"class":42},[36,100920,1308],{"class":46},[36,100922,4092],{"class":112},[36,100924,36806],{"class":42},[36,100926,100927],{"class":38,"line":702},[36,100928,97479],{"class":105},[36,100930,100931],{"class":38,"line":708},[36,100932,100933],{"class":105},"array([[24, 23, 22, 21, 20, 19],\n",[36,100935,100936],{"class":38,"line":713},[36,100937,100938],{"class":105},"       [18, 17, 16, 15, 14, 13],\n",[36,100940,100941],{"class":38,"line":719},[36,100942,100943],{"class":105},"       [12, 11, 10,  9,  8,  7],\n",[36,100945,100946],{"class":38,"line":725},[36,100947,100948],{"class":105},"       [ 6,  5,  4,  3,  2,  1]])\n",[36,100950,100951],{"class":38,"line":731},[36,100952,97479],{"class":105},[19,100954,100955],{},"⑦修改元素",[26,100957,100959],{"className":28,"code":100958,"language":30,"meta":31,"style":31},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[33,100960,100961,100966,100984,100989],{"__ignoreMap":31},[36,100962,100963],{"class":38,"line":39},[36,100964,100965],{"class":3943},"#获取前两行和前两列\n",[36,100967,100968,100971,100973,100975,100977,100980,100982],{"class":38,"line":53},[36,100969,100970],{"class":42},"sub_a",[36,100972,47],{"class":46},[36,100974,100718],{"class":42},[36,100976,498],{"class":112},[36,100978,100979],{"class":42},",:",[36,100981,498],{"class":112},[36,100983,36806],{"class":42},[36,100985,100986],{"class":38,"line":196},[36,100987,100988],{"class":3943},"#修改sub_a第一个元素的值\n",[36,100990,100991,100994,100996,100998,101000,101002,101004],{"class":38,"line":642},[36,100992,100993],{"class":42},"sub_a[",[36,100995,1859],{"class":112},[36,100997,4253],{"class":42},[36,100999,1859],{"class":112},[36,101001,4809],{"class":42},[36,101003,47],{"class":46},[36,101005,101006],{"class":112},"100\n",[19,101008,101009],{},"⑧数组复制copy()",[26,101011,101013],{"className":28,"code":101012,"language":30,"meta":31,"style":31},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[33,101014,101015,101020,101030,101035],{"__ignoreMap":31},[36,101016,101017],{"class":38,"line":39},[36,101018,101019],{"class":3943},"#数组复制\n",[36,101021,101022,101025,101027],{"class":38,"line":53},[36,101023,101024],{"class":42},"copy_a",[36,101026,47],{"class":46},[36,101028,101029],{"class":42},"np.copy(sub_a)\n",[36,101031,101032],{"class":38,"line":196},[36,101033,101034],{"class":3943},"#修改copy_a后不影响原数组\n",[36,101036,101037,101040,101042,101044,101046,101048,101050],{"class":38,"line":642},[36,101038,101039],{"class":42},"copy_a[",[36,101041,1859],{"class":112},[36,101043,4253],{"class":42},[36,101045,1859],{"class":112},[36,101047,4809],{"class":42},[36,101049,47],{"class":46},[36,101051,101006],{"class":112},[19,101053,101054],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[3785,101056,101057],{},"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":31,"searchDepth":53,"depth":53,"links":101059},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":100576,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":101066,"title":101067,"body":101068,"description":26998,"extension":3817,"meta":101560,"navigation":658,"path":101561,"seo":101562,"stem":101563,"__hash__":101564},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":101069,"toc":101552},[101070,101073,101077,101080,101083,101136,101139,101164,101167,101186,101206,101209,101225,101229,101275,101279,101321,101325,101328,101331,101334,101337,101340,101402,101462,101466,101469,101526,101530,101535,101544,101549],[10,101071,101067],{"id":101072},"_5改变数组的维度",[14,101074,101076],{"id":101075},"_51-使用reshape","5.1 使用reshape()",[19,101078,101079],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,101081,101082],{},"①一维数组转换为二维数组",[26,101084,101086],{"className":28,"code":101085,"language":30,"meta":31,"style":31},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[33,101087,101088,101104,101109,101114,101119],{"__ignoreMap":31},[36,101089,101090,101092,101094,101096,101098,101100,101102],{"class":38,"line":39},[36,101091,4113],{"class":42},[36,101093,47],{"class":46},[36,101095,96554],{"class":42},[36,101097,4092],{"class":112},[36,101099,4253],{"class":42},[36,101101,4396],{"class":112},[36,101103,922],{"class":42},[36,101105,101106],{"class":38,"line":53},[36,101107,101108],{"class":3943},"#将一维数组进行转换\n",[36,101110,101111],{"class":38,"line":196},[36,101112,101113],{"class":3943},"#注意点：元素个数不可以变\n",[36,101115,101116],{"class":38,"line":642},[36,101117,101118],{"class":3943},"#转换维度要保持一致，不一致就异常！！！\n",[36,101120,101121,101123,101125,101128,101130,101132,101134],{"class":38,"line":655},[36,101122,96858],{"class":42},[36,101124,47],{"class":46},[36,101126,101127],{"class":42},"a.reshape(",[36,101129,498],{"class":112},[36,101131,4253],{"class":42},[36,101133,4219],{"class":112},[36,101135,922],{"class":42},[19,101137,101138],{},"②一维数组转换为三维数组",[26,101140,101142],{"className":28,"code":101141,"language":30,"meta":31,"style":31},"aaa=a.reshape(2,3,2)\n",[33,101143,101144],{"__ignoreMap":31},[36,101145,101146,101148,101150,101152,101154,101156,101158,101160,101162],{"class":38,"line":39},[36,101147,99072],{"class":42},[36,101149,47],{"class":46},[36,101151,101127],{"class":42},[36,101153,498],{"class":112},[36,101155,4253],{"class":42},[36,101157,1982],{"class":112},[36,101159,4253],{"class":42},[36,101161,498],{"class":112},[36,101163,922],{"class":42},[19,101165,101166],{},"③二维数组转化为一维数组",[26,101168,101170],{"className":28,"code":101169,"language":30,"meta":31,"style":31},"#知道元素个数：\naa.reshape(12)\n",[33,101171,101172,101177],{"__ignoreMap":31},[36,101173,101174],{"class":38,"line":39},[36,101175,101176],{"class":3943},"#知道元素个数：\n",[36,101178,101179,101182,101184],{"class":38,"line":53},[36,101180,101181],{"class":42},"aa.reshape(",[36,101183,4371],{"class":112},[36,101185,922],{"class":42},[26,101187,101189],{"className":28,"code":101188,"language":30,"meta":31,"style":31},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[33,101190,101191,101196],{"__ignoreMap":31},[36,101192,101193],{"class":38,"line":39},[36,101194,101195],{"class":3943},"#不知道元素个数，参数传递-1\n",[36,101197,101198,101200,101202,101204],{"class":38,"line":53},[36,101199,101181],{"class":42},[36,101201,1308],{"class":46},[36,101203,4092],{"class":112},[36,101205,922],{"class":42},[19,101207,101208],{},"④三维数组转换为一维数组",[26,101210,101212],{"className":28,"code":101211,"language":30,"meta":31,"style":31},"aaa.reshape(-1)\n",[33,101213,101214],{"__ignoreMap":31},[36,101215,101216,101219,101221,101223],{"class":38,"line":39},[36,101217,101218],{"class":42},"aaa.reshape(",[36,101220,1308],{"class":46},[36,101222,4092],{"class":112},[36,101224,922],{"class":42},[14,101226,101228],{"id":101227},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[26,101230,101232],{"className":28,"code":101231,"language":30,"meta":31,"style":31},"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",[33,101233,101234,101261,101266,101270],{"__ignoreMap":31},[36,101235,101236,101238,101240,101242,101244,101246,101248,101250,101252,101254,101256,101258],{"class":38,"line":39},[36,101237,96858],{"class":42},[36,101239,47],{"class":46},[36,101241,96554],{"class":42},[36,101243,4092],{"class":112},[36,101245,4253],{"class":42},[36,101247,4396],{"class":112},[36,101249,96559],{"class":42},[36,101251,498],{"class":112},[36,101253,4253],{"class":42},[36,101255,4219],{"class":112},[36,101257,4304],{"class":42},[36,101259,101260],{"class":3943},"#转换为2行6列的数组\n",[36,101262,101263],{"class":38,"line":53},[36,101264,101265],{"class":42},"aa.revel()\n",[36,101267,101268],{"class":38,"line":196},[36,101269,97115],{"class":3943},[36,101271,101272],{"class":38,"line":642},[36,101273,101274],{"class":3943},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,101276,101278],{"id":101277},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[26,101280,101282],{"className":28,"code":101281,"language":30,"meta":31,"style":31},"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",[33,101283,101284,101308,101313,101317],{"__ignoreMap":31},[36,101285,101286,101288,101290,101292,101294,101296,101298,101300,101302,101304,101306],{"class":38,"line":39},[36,101287,96858],{"class":42},[36,101289,47],{"class":46},[36,101291,96554],{"class":42},[36,101293,4092],{"class":112},[36,101295,4253],{"class":42},[36,101297,4396],{"class":112},[36,101299,96559],{"class":42},[36,101301,498],{"class":112},[36,101303,4253],{"class":42},[36,101305,4219],{"class":112},[36,101307,922],{"class":42},[36,101309,101310],{"class":38,"line":53},[36,101311,101312],{"class":42},"aa.flatten()\n",[36,101314,101315],{"class":38,"line":196},[36,101316,97115],{"class":3943},[36,101318,101319],{"class":38,"line":642},[36,101320,101274],{"class":3943},[14,101322,101324],{"id":101323},"_54-使用resize","5.4 使用resize()",[19,101326,101327],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,101329,101330],{},"通过resize方法可以改变数组的维度",[19,101332,101333],{},"#resize修改数组维度",[19,101335,101336],{},"#以元组的形式指定形状",[19,101338,101339],{},"#改变的是原数组",[26,101341,101343],{"className":28,"code":101342,"language":30,"meta":31,"style":31},"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",[33,101344,101345,101361,101381,101394,101398],{"__ignoreMap":31},[36,101346,101347,101349,101351,101353,101355,101357,101359],{"class":38,"line":39},[36,101348,4113],{"class":42},[36,101350,47],{"class":46},[36,101352,96554],{"class":42},[36,101354,4092],{"class":112},[36,101356,4253],{"class":42},[36,101358,4396],{"class":112},[36,101360,922],{"class":42},[36,101362,101363,101366,101368,101370,101372,101374,101376,101378],{"class":38,"line":53},[36,101364,101365],{"class":42},"a.shape",[36,101367,47],{"class":46},[36,101369,495],{"class":42},[36,101371,498],{"class":112},[36,101373,4253],{"class":42},[36,101375,4219],{"class":112},[36,101377,4304],{"class":42},[36,101379,101380],{"class":3943},"#改变了原数组\n",[36,101382,101383,101385,101387,101390,101392],{"class":38,"line":196},[36,101384,4113],{"class":42},[36,101386,47],{"class":46},[36,101388,101389],{"class":42},"resize((",[36,101391,4371],{"class":112},[36,101393,2005],{"class":42},[36,101395,101396],{"class":38,"line":642},[36,101397,97115],{"class":3943},[36,101399,101400],{"class":38,"line":655},[36,101401,101274],{"class":3943},[26,101403,101405],{"className":28,"code":101404,"language":30,"meta":31,"style":31},"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",[33,101406,101407,101420,101424,101428,101433,101438,101443,101448,101453,101458],{"__ignoreMap":31},[36,101408,101409,101412,101414,101416,101418],{"class":38,"line":39},[36,101410,101411],{"class":42},"a.resize((",[36,101413,4219],{"class":112},[36,101415,4253],{"class":42},[36,101417,498],{"class":112},[36,101419,2005],{"class":42},[36,101421,101422],{"class":38,"line":53},[36,101423,97115],{"class":3943},[36,101425,101426],{"class":38,"line":196},[36,101427,97479],{"class":105},[36,101429,101430],{"class":38,"line":642},[36,101431,101432],{"class":105},"array([[ 1,  2],\n",[36,101434,101435],{"class":38,"line":655},[36,101436,101437],{"class":105},"       [ 3,  4],\n",[36,101439,101440],{"class":38,"line":662},[36,101441,101442],{"class":105},"       [ 5,  6],\n",[36,101444,101445],{"class":38,"line":667},[36,101446,101447],{"class":105},"       [ 7,  8],\n",[36,101449,101450],{"class":38,"line":679},[36,101451,101452],{"class":105},"       [ 9, 10],\n",[36,101454,101455],{"class":38,"line":685},[36,101456,101457],{"class":105},"       [11, 12]])\n",[36,101459,101460],{"class":38,"line":691},[36,101461,97479],{"class":105},[14,101463,101465],{"id":101464},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,101467,101468],{},"改变了原数组",[26,101470,101472],{"className":28,"code":101471,"language":30,"meta":31,"style":31},"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",[33,101473,101474,101490,101506,101510,101514,101518,101522],{"__ignoreMap":31},[36,101475,101476,101478,101480,101482,101484,101486,101488],{"class":38,"line":39},[36,101477,4113],{"class":42},[36,101479,47],{"class":46},[36,101481,96554],{"class":42},[36,101483,4092],{"class":112},[36,101485,4253],{"class":42},[36,101487,4396],{"class":112},[36,101489,922],{"class":42},[36,101491,101492,101494,101496,101498,101500,101502,101504],{"class":38,"line":53},[36,101493,101365],{"class":42},[36,101495,47],{"class":46},[36,101497,495],{"class":42},[36,101499,498],{"class":112},[36,101501,4253],{"class":42},[36,101503,4219],{"class":112},[36,101505,922],{"class":42},[36,101507,101508],{"class":38,"line":196},[36,101509,97115],{"class":3943},[36,101511,101512],{"class":38,"line":642},[36,101513,97479],{"class":105},[36,101515,101516],{"class":38,"line":655},[36,101517,100736],{"class":105},[36,101519,101520],{"class":38,"line":662},[36,101521,100741],{"class":105},[36,101523,101524],{"class":38,"line":667},[36,101525,97479],{"class":105},[14,101527,101529],{"id":101528},"_56-重要比较","5.6 重要比较：",[19,101531,101532],{},[5198,101533],{"alt":31,"src":101534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,101536,101537,101538,101540,101541,101543],{},"口诀：NumPy 函数要么用 ",[33,101539,490],{},"，要么用 ",[33,101542,1476],{},"，创建结构用 shape，造数据用 size",[19,101545,101546],{},[5198,101547],{"alt":31,"src":101548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[3785,101550,101551],{},"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":31,"searchDepth":53,"depth":53,"links":101553},[101554,101555,101556,101557,101558,101559],{"id":101075,"depth":53,"text":101076},{"id":101227,"depth":53,"text":101228},{"id":101277,"depth":53,"text":101278},{"id":101323,"depth":53,"text":101324},{"id":101464,"depth":53,"text":101465},{"id":101528,"depth":53,"text":101529},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":101067,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":101566,"title":101567,"body":101568,"description":26998,"extension":3817,"meta":102640,"navigation":658,"path":102641,"seo":102642,"stem":102643,"__hash__":102644},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":101569,"toc":102634},[101570,101573,101577,101580,101583,101586,101651,101654,101694,101697,101779,101782,101787,101809,101811,101816,101821,101824,101827,101982,101985,102187,102191,102194,102197,102265,102267,102272,102275,102278,102358,102362,102365,102367,102440,102442,102447,102449,102529,102533,102536,102539,102542,102545,102548,102551,102631],[10,101571,101567],{"id":101572},"_6数组的拼接",[14,101574,101576],{"id":101575},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,101578,101579],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,101581,101582],{},"函数内部传两个数列构成的数列或者元组",[19,101584,101585],{},"①一维数组的拼接",[26,101587,101589],{"className":28,"code":101588,"language":30,"meta":31,"style":31},"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",[33,101590,101591,101611,101631,101636,101641,101646],{"__ignoreMap":31},[36,101592,101593,101595,101597,101599,101601,101603,101605,101607,101609],{"class":38,"line":39},[36,101594,4113],{"class":42},[36,101596,47],{"class":46},[36,101598,96576],{"class":42},[36,101600,4092],{"class":112},[36,101602,4253],{"class":42},[36,101604,498],{"class":112},[36,101606,4253],{"class":42},[36,101608,1982],{"class":112},[36,101610,8353],{"class":42},[36,101612,101613,101615,101617,101619,101621,101623,101625,101627,101629],{"class":38,"line":53},[36,101614,4138],{"class":42},[36,101616,47],{"class":46},[36,101618,96576],{"class":42},[36,101620,4168],{"class":112},[36,101622,4253],{"class":42},[36,101624,4194],{"class":112},[36,101626,4253],{"class":42},[36,101628,4219],{"class":112},[36,101630,8353],{"class":42},[36,101632,101633],{"class":38,"line":196},[36,101634,101635],{"class":3943},"#调用concatenate进行数组拼接\n",[36,101637,101638],{"class":38,"line":642},[36,101639,101640],{"class":42},"np.concatenate((a,b))\n",[36,101642,101643],{"class":38,"line":655},[36,101644,101645],{"class":3943},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[36,101647,101648],{"class":38,"line":662},[36,101649,101650],{"class":3943},"#np.concatenate([a,b])\n",[19,101652,101653],{},"②一维多个数组拼接",[26,101655,101657],{"className":28,"code":101656,"language":30,"meta":31,"style":31},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[33,101658,101659,101664,101684,101689],{"__ignoreMap":31},[36,101660,101661],{"class":38,"line":39},[36,101662,101663],{"class":3943},"#也可以多个数组进行拼接\n",[36,101665,101666,101668,101670,101672,101674,101676,101678,101680,101682],{"class":38,"line":53},[36,101667,4163],{"class":42},[36,101669,47],{"class":46},[36,101671,96576],{"class":42},[36,101673,554],{"class":112},[36,101675,4253],{"class":42},[36,101677,4345],{"class":112},[36,101679,4253],{"class":42},[36,101681,4396],{"class":112},[36,101683,8353],{"class":42},[36,101685,101686],{"class":38,"line":196},[36,101687,101688],{"class":42},"c\n",[36,101690,101691],{"class":38,"line":642},[36,101692,101693],{"class":42},"np.concatenate((a,b,c))\n",[19,101695,101696],{},"③二维数组拼接",[26,101698,101700],{"className":28,"code":101699,"language":30,"meta":31,"style":31},"#二维数组使用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",[33,101701,101702,101707,101731,101756,101761,101766],{"__ignoreMap":31},[36,101703,101704],{"class":38,"line":39},[36,101705,101706],{"class":3943},"#二维数组使用concatenate进行拼接\n",[36,101708,101709,101711,101713,101715,101717,101719,101721,101723,101725,101727,101729],{"class":38,"line":53},[36,101710,96858],{"class":42},[36,101712,47],{"class":46},[36,101714,96554],{"class":42},[36,101716,4092],{"class":112},[36,101718,4253],{"class":42},[36,101720,4396],{"class":112},[36,101722,96559],{"class":42},[36,101724,1982],{"class":112},[36,101726,4253],{"class":42},[36,101728,4168],{"class":112},[36,101730,922],{"class":42},[36,101732,101733,101736,101738,101740,101742,101744,101746,101748,101750,101752,101754],{"class":38,"line":196},[36,101734,101735],{"class":42},"bb",[36,101737,47],{"class":46},[36,101739,96554],{"class":42},[36,101741,4212],{"class":112},[36,101743,4253],{"class":42},[36,101745,4513],{"class":112},[36,101747,96559],{"class":42},[36,101749,1982],{"class":112},[36,101751,4253],{"class":42},[36,101753,4168],{"class":112},[36,101755,922],{"class":42},[36,101757,101758],{"class":38,"line":642},[36,101759,101760],{"class":3943},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[36,101762,101763],{"class":38,"line":655},[36,101764,101765],{"class":3943},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[36,101767,101768,101771,101773,101775,101777],{"class":38,"line":662},[36,101769,101770],{"class":42},"np.concatenate((aa,bb),",[36,101772,51071],{"class":468},[36,101774,47],{"class":46},[36,101776,1859],{"class":112},[36,101778,922],{"class":42},[19,101780,101781],{},"结果：",[19,101783,101784],{},[5198,101785],{"alt":31,"src":101786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[26,101788,101790],{"className":28,"code":101789,"language":30,"meta":31,"style":31},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[33,101791,101792,101797],{"__ignoreMap":31},[36,101793,101794],{"class":38,"line":39},[36,101795,101796],{"class":3943},"#指定axis为1进行拼接\n",[36,101798,101799,101801,101803,101805,101807],{"class":38,"line":53},[36,101800,101770],{"class":42},[36,101802,51071],{"class":468},[36,101804,47],{"class":46},[36,101806,4092],{"class":112},[36,101808,922],{"class":42},[19,101810,101781],{},[19,101812,101813],{},[5198,101814],{"alt":31,"src":101815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,101817,101818],{},[4027,101819,101820],{},"二维数组总结：0竖着方向，1横着方向",[19,101822,101823],{},"④三维数组拼接",[19,101825,101826],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[26,101828,101830],{"className":28,"code":101829,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,101831,101832,101837,101865,101895,101900,101917,101922,101927,101932,101949,101954,101959,101964,101977],{"__ignoreMap":31},[36,101833,101834],{"class":38,"line":39},[36,101835,101836],{"class":3943},"#两个三行六列\n",[36,101838,101839,101841,101843,101845,101847,101849,101851,101853,101855,101857,101859,101861,101863],{"class":38,"line":53},[36,101840,99072],{"class":42},[36,101842,47],{"class":46},[36,101844,96554],{"class":42},[36,101846,4092],{"class":112},[36,101848,4253],{"class":42},[36,101850,4200],{"class":112},[36,101852,96559],{"class":42},[36,101854,498],{"class":112},[36,101856,4253],{"class":42},[36,101858,1982],{"class":112},[36,101860,4253],{"class":42},[36,101862,4219],{"class":112},[36,101864,922],{"class":42},[36,101866,101867,101870,101872,101874,101876,101878,101881,101883,101885,101887,101889,101891,101893],{"class":38,"line":196},[36,101868,101869],{"class":42},"bbb",[36,101871,47],{"class":46},[36,101873,96554],{"class":42},[36,101875,4212],{"class":112},[36,101877,4253],{"class":42},[36,101879,101880],{"class":112},"137",[36,101882,96559],{"class":42},[36,101884,498],{"class":112},[36,101886,4253],{"class":42},[36,101888,1982],{"class":112},[36,101890,4253],{"class":42},[36,101892,4219],{"class":112},[36,101894,922],{"class":42},[36,101896,101897],{"class":38,"line":642},[36,101898,101899],{"class":3943},"#axis=0\n",[36,101901,101902,101904,101906,101909,101911,101913,101915],{"class":38,"line":655},[36,101903,4566],{"class":42},[36,101905,47],{"class":46},[36,101907,101908],{"class":42},"np.concatenate((aaa,bbb),",[36,101910,51071],{"class":468},[36,101912,47],{"class":46},[36,101914,1859],{"class":112},[36,101916,922],{"class":42},[36,101918,101919],{"class":38,"line":662},[36,101920,101921],{"class":42},"s.shape\n",[36,101923,101924],{"class":38,"line":667},[36,101925,101926],{"class":3943},"#输出：(4,3,6)\n",[36,101928,101929],{"class":38,"line":679},[36,101930,101931],{"class":3943},"#axis=1\n",[36,101933,101934,101937,101939,101941,101943,101945,101947],{"class":38,"line":685},[36,101935,101936],{"class":42},"ss",[36,101938,47],{"class":46},[36,101940,101908],{"class":42},[36,101942,51071],{"class":468},[36,101944,47],{"class":46},[36,101946,4092],{"class":112},[36,101948,922],{"class":42},[36,101950,101951],{"class":38,"line":691},[36,101952,101953],{"class":42},"ss.shape\n",[36,101955,101956],{"class":38,"line":696},[36,101957,101958],{"class":3943},"#输出：(2,6,6)\n",[36,101960,101961],{"class":38,"line":702},[36,101962,101963],{"class":3943},"#axis=2\n",[36,101965,101966,101968,101970,101972,101974],{"class":38,"line":708},[36,101967,101908],{"class":42},[36,101969,51071],{"class":468},[36,101971,47],{"class":46},[36,101973,498],{"class":112},[36,101975,101976],{"class":42},").shape\n",[36,101978,101979],{"class":38,"line":713},[36,101980,101981],{"class":3943},"#输出：（2，3，12）\n",[19,101983,101984],{},"⑤四维数组拼接",[26,101986,101988],{"className":28,"code":101987,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,101989,101990,101994,102022,102050,102075,102101,102105,102118,102123,102127,102139,102144,102148,102160,102165,102170,102182],{"__ignoreMap":31},[36,101991,101992],{"class":38,"line":39},[36,101993,101836],{"class":3943},[36,101995,101996,101998,102000,102002,102004,102006,102008,102010,102012,102014,102016,102018,102020],{"class":38,"line":53},[36,101997,99072],{"class":42},[36,101999,47],{"class":46},[36,102001,96554],{"class":42},[36,102003,4092],{"class":112},[36,102005,4253],{"class":42},[36,102007,4200],{"class":112},[36,102009,96559],{"class":42},[36,102011,498],{"class":112},[36,102013,4253],{"class":42},[36,102015,1982],{"class":112},[36,102017,4253],{"class":42},[36,102019,4219],{"class":112},[36,102021,922],{"class":42},[36,102023,102024,102026,102028,102030,102032,102034,102036,102038,102040,102042,102044,102046,102048],{"class":38,"line":196},[36,102025,101869],{"class":42},[36,102027,47],{"class":46},[36,102029,96554],{"class":42},[36,102031,4212],{"class":112},[36,102033,4253],{"class":42},[36,102035,101880],{"class":112},[36,102037,96559],{"class":42},[36,102039,498],{"class":112},[36,102041,4253],{"class":42},[36,102043,1982],{"class":112},[36,102045,4253],{"class":42},[36,102047,4219],{"class":112},[36,102049,922],{"class":42},[36,102051,102052,102055,102057,102059,102061,102063,102065,102067,102069,102071,102073],{"class":38,"line":642},[36,102053,102054],{"class":42},"aaaa",[36,102056,47],{"class":46},[36,102058,101218],{"class":42},[36,102060,498],{"class":112},[36,102062,4253],{"class":42},[36,102064,1982],{"class":112},[36,102066,4253],{"class":42},[36,102068,1982],{"class":112},[36,102070,4253],{"class":42},[36,102072,498],{"class":112},[36,102074,922],{"class":42},[36,102076,102077,102080,102082,102085,102087,102089,102091,102093,102095,102097,102099],{"class":38,"line":655},[36,102078,102079],{"class":42},"bbbb",[36,102081,47],{"class":46},[36,102083,102084],{"class":42},"bbb.reshape(",[36,102086,498],{"class":112},[36,102088,4253],{"class":42},[36,102090,1982],{"class":112},[36,102092,4253],{"class":42},[36,102094,1982],{"class":112},[36,102096,4253],{"class":42},[36,102098,498],{"class":112},[36,102100,922],{"class":42},[36,102102,102103],{"class":38,"line":662},[36,102104,101899],{"class":3943},[36,102106,102107,102110,102112,102114,102116],{"class":38,"line":667},[36,102108,102109],{"class":42},"np.concatenate((aaaa,bbbb),",[36,102111,51071],{"class":468},[36,102113,47],{"class":46},[36,102115,1859],{"class":112},[36,102117,101976],{"class":42},[36,102119,102120],{"class":38,"line":679},[36,102121,102122],{"class":3943},"#结果：（4，3，3，2）\n",[36,102124,102125],{"class":38,"line":685},[36,102126,101931],{"class":3943},[36,102128,102129,102131,102133,102135,102137],{"class":38,"line":691},[36,102130,102109],{"class":42},[36,102132,51071],{"class":468},[36,102134,47],{"class":46},[36,102136,4092],{"class":112},[36,102138,101976],{"class":42},[36,102140,102141],{"class":38,"line":696},[36,102142,102143],{"class":3943},"#结果：（2，6，3，2）\n",[36,102145,102146],{"class":38,"line":702},[36,102147,101963],{"class":3943},[36,102149,102150,102152,102154,102156,102158],{"class":38,"line":708},[36,102151,102109],{"class":42},[36,102153,51071],{"class":468},[36,102155,47],{"class":46},[36,102157,498],{"class":112},[36,102159,101976],{"class":42},[36,102161,102162],{"class":38,"line":713},[36,102163,102164],{"class":3943},"#结果：（2，3，6，2）\n",[36,102166,102167],{"class":38,"line":719},[36,102168,102169],{"class":3943},"#axis=3\n",[36,102171,102172,102174,102176,102178,102180],{"class":38,"line":725},[36,102173,102109],{"class":42},[36,102175,51071],{"class":468},[36,102177,47],{"class":46},[36,102179,1982],{"class":112},[36,102181,101976],{"class":42},[36,102183,102184],{"class":38,"line":731},[36,102185,102186],{"class":3943},"#结果：（2，3，3，4）\n",[14,102188,102190],{"id":102189},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,102192,102193],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,102195,102196],{},"①二维数组",[26,102198,102200],{"className":28,"code":102199,"language":30,"meta":31,"style":31},"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",[33,102201,102202,102226,102250,102255,102260],{"__ignoreMap":31},[36,102203,102204,102206,102208,102210,102212,102214,102216,102218,102220,102222,102224],{"class":38,"line":39},[36,102205,96858],{"class":42},[36,102207,47],{"class":46},[36,102209,96554],{"class":42},[36,102211,4092],{"class":112},[36,102213,4253],{"class":42},[36,102215,4396],{"class":112},[36,102217,96559],{"class":42},[36,102219,1982],{"class":112},[36,102221,4253],{"class":42},[36,102223,4168],{"class":112},[36,102225,922],{"class":42},[36,102227,102228,102230,102232,102234,102236,102238,102240,102242,102244,102246,102248],{"class":38,"line":53},[36,102229,101735],{"class":42},[36,102231,47],{"class":46},[36,102233,96554],{"class":42},[36,102235,4212],{"class":112},[36,102237,4253],{"class":42},[36,102239,4513],{"class":112},[36,102241,96559],{"class":42},[36,102243,1982],{"class":112},[36,102245,4253],{"class":42},[36,102247,4168],{"class":112},[36,102249,922],{"class":42},[36,102251,102252],{"class":38,"line":196},[36,102253,102254],{"class":42},"np.hstack((aa,bb))\n",[36,102256,102257],{"class":38,"line":642},[36,102258,102259],{"class":3943},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[36,102261,102262],{"class":38,"line":655},[36,102263,102264],{"class":3943},"#np.hstack([aa,bb])\n",[19,102266,101781],{},[19,102268,102269],{},[5198,102270],{"alt":31,"src":102271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,102273,102274],{},"等效于concatenate()函数中axis=1时的情况",[19,102276,102277],{},"②三维数组",[26,102279,102281],{"className":28,"code":102280,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,102282,102283,102287,102315,102343,102348,102353],{"__ignoreMap":31},[36,102284,102285],{"class":38,"line":39},[36,102286,101836],{"class":3943},[36,102288,102289,102291,102293,102295,102297,102299,102301,102303,102305,102307,102309,102311,102313],{"class":38,"line":53},[36,102290,99072],{"class":42},[36,102292,47],{"class":46},[36,102294,96554],{"class":42},[36,102296,4092],{"class":112},[36,102298,4253],{"class":42},[36,102300,4200],{"class":112},[36,102302,96559],{"class":42},[36,102304,498],{"class":112},[36,102306,4253],{"class":42},[36,102308,1982],{"class":112},[36,102310,4253],{"class":42},[36,102312,4219],{"class":112},[36,102314,922],{"class":42},[36,102316,102317,102319,102321,102323,102325,102327,102329,102331,102333,102335,102337,102339,102341],{"class":38,"line":196},[36,102318,101869],{"class":42},[36,102320,47],{"class":46},[36,102322,96554],{"class":42},[36,102324,4212],{"class":112},[36,102326,4253],{"class":42},[36,102328,101880],{"class":112},[36,102330,96559],{"class":42},[36,102332,498],{"class":112},[36,102334,4253],{"class":42},[36,102336,1982],{"class":112},[36,102338,4253],{"class":42},[36,102340,4219],{"class":112},[36,102342,922],{"class":42},[36,102344,102345],{"class":38,"line":642},[36,102346,102347],{"class":3943},"#使用hstack\n",[36,102349,102350],{"class":38,"line":655},[36,102351,102352],{"class":42},"np.hstack((aaa,bbb)).shape\n",[36,102354,102355],{"class":38,"line":662},[36,102356,102357],{"class":3943},"#输出：（2，6，6）\n",[14,102359,102361],{"id":102360},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,102363,102364],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,102366,102196],{},[26,102368,102370],{"className":28,"code":102369,"language":30,"meta":31,"style":31},"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",[33,102371,102372,102396,102420,102425,102430,102435],{"__ignoreMap":31},[36,102373,102374,102376,102378,102380,102382,102384,102386,102388,102390,102392,102394],{"class":38,"line":39},[36,102375,96858],{"class":42},[36,102377,47],{"class":46},[36,102379,96554],{"class":42},[36,102381,4092],{"class":112},[36,102383,4253],{"class":42},[36,102385,4396],{"class":112},[36,102387,96559],{"class":42},[36,102389,1982],{"class":112},[36,102391,4253],{"class":42},[36,102393,4168],{"class":112},[36,102395,922],{"class":42},[36,102397,102398,102400,102402,102404,102406,102408,102410,102412,102414,102416,102418],{"class":38,"line":53},[36,102399,101735],{"class":42},[36,102401,47],{"class":46},[36,102403,96554],{"class":42},[36,102405,4212],{"class":112},[36,102407,4253],{"class":42},[36,102409,4513],{"class":112},[36,102411,96559],{"class":42},[36,102413,1982],{"class":112},[36,102415,4253],{"class":42},[36,102417,4168],{"class":112},[36,102419,922],{"class":42},[36,102421,102422],{"class":38,"line":196},[36,102423,102424],{"class":3943},"#vstack 垂直方向进行堆叠\n",[36,102426,102427],{"class":38,"line":642},[36,102428,102429],{"class":42},"np.vstack((aa,bb))\n",[36,102431,102432],{"class":38,"line":655},[36,102433,102434],{"class":3943},"#与hstack传的参数类似，等价于：\n",[36,102436,102437],{"class":38,"line":662},[36,102438,102439],{"class":42},"np.vstack([aa,bb])\n",[19,102441,101781],{},[19,102443,102444],{},[5198,102445],{"alt":31,"src":102446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,102448,102277],{},[26,102450,102452],{"className":28,"code":102451,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,102453,102454,102458,102486,102514,102519,102524],{"__ignoreMap":31},[36,102455,102456],{"class":38,"line":39},[36,102457,101836],{"class":3943},[36,102459,102460,102462,102464,102466,102468,102470,102472,102474,102476,102478,102480,102482,102484],{"class":38,"line":53},[36,102461,99072],{"class":42},[36,102463,47],{"class":46},[36,102465,96554],{"class":42},[36,102467,4092],{"class":112},[36,102469,4253],{"class":42},[36,102471,4200],{"class":112},[36,102473,96559],{"class":42},[36,102475,498],{"class":112},[36,102477,4253],{"class":42},[36,102479,1982],{"class":112},[36,102481,4253],{"class":42},[36,102483,4219],{"class":112},[36,102485,922],{"class":42},[36,102487,102488,102490,102492,102494,102496,102498,102500,102502,102504,102506,102508,102510,102512],{"class":38,"line":196},[36,102489,101869],{"class":42},[36,102491,47],{"class":46},[36,102493,96554],{"class":42},[36,102495,4212],{"class":112},[36,102497,4253],{"class":42},[36,102499,101880],{"class":112},[36,102501,96559],{"class":42},[36,102503,498],{"class":112},[36,102505,4253],{"class":42},[36,102507,1982],{"class":112},[36,102509,4253],{"class":42},[36,102511,4219],{"class":112},[36,102513,922],{"class":42},[36,102515,102516],{"class":38,"line":642},[36,102517,102518],{"class":3943},"#使用vstack\n",[36,102520,102521],{"class":38,"line":655},[36,102522,102523],{"class":42},"np.vstack((aaa,bbb)).shape\n",[36,102525,102526],{"class":38,"line":662},[36,102527,102528],{"class":3943},"#输出：（4，3，6）\n",[14,102530,102532],{"id":102531},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,102534,102535],{},"该方法是三维数组特有的方法",[19,102537,102538],{},"也就是说",[19,102540,102541],{},"一维数组拼接方法用：concatenate()",[19,102543,102544],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,102546,102547],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,102549,102550],{},"四维数组及多维数组只能用concatenate进行拼接",[26,102552,102554],{"className":28,"code":102553,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,102555,102556,102560,102588,102616,102621,102626],{"__ignoreMap":31},[36,102557,102558],{"class":38,"line":39},[36,102559,101836],{"class":3943},[36,102561,102562,102564,102566,102568,102570,102572,102574,102576,102578,102580,102582,102584,102586],{"class":38,"line":53},[36,102563,99072],{"class":42},[36,102565,47],{"class":46},[36,102567,96554],{"class":42},[36,102569,4092],{"class":112},[36,102571,4253],{"class":42},[36,102573,4200],{"class":112},[36,102575,96559],{"class":42},[36,102577,498],{"class":112},[36,102579,4253],{"class":42},[36,102581,1982],{"class":112},[36,102583,4253],{"class":42},[36,102585,4219],{"class":112},[36,102587,922],{"class":42},[36,102589,102590,102592,102594,102596,102598,102600,102602,102604,102606,102608,102610,102612,102614],{"class":38,"line":196},[36,102591,101869],{"class":42},[36,102593,47],{"class":46},[36,102595,96554],{"class":42},[36,102597,4212],{"class":112},[36,102599,4253],{"class":42},[36,102601,101880],{"class":112},[36,102603,96559],{"class":42},[36,102605,498],{"class":112},[36,102607,4253],{"class":42},[36,102609,1982],{"class":112},[36,102611,4253],{"class":42},[36,102613,4219],{"class":112},[36,102615,922],{"class":42},[36,102617,102618],{"class":38,"line":642},[36,102619,102620],{"class":3943},"#使用dstack\n",[36,102622,102623],{"class":38,"line":655},[36,102624,102625],{"class":42},"np.dstack((aaa,bbb)).shape\n",[36,102627,102628],{"class":38,"line":662},[36,102629,102630],{"class":3943},"#结果：（2，3，12）\n",[3785,102632,102633],{},"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":31,"searchDepth":53,"depth":53,"links":102635},[102636,102637,102638,102639],{"id":101575,"depth":53,"text":101576},{"id":102189,"depth":53,"text":102190},{"id":102360,"depth":53,"text":102361},{"id":102531,"depth":53,"text":102532},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":101567,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":102646,"title":102647,"body":102648,"description":26998,"extension":3817,"meta":102923,"navigation":658,"path":102924,"seo":102925,"stem":102926,"__hash__":102927},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":102649,"toc":102921},[102650,102653,102656,102750,102753,102756,102759,102762,102765,102768,102771,102774,102918],[10,102651,102647],{"id":102652},"_7数组转置",[19,102654,102655],{},"使用transpose()函数",[26,102657,102659],{"className":28,"code":102658,"language":30,"meta":31,"style":31},"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",[33,102660,102661,102671,102695,102700,102705,102710,102715,102723,102727,102731,102736,102741,102746],{"__ignoreMap":31},[36,102662,102663,102665,102667,102669],{"class":38,"line":39},[36,102664,611],{"class":46},[36,102666,634],{"class":42},[36,102668,617],{"class":46},[36,102670,639],{"class":42},[36,102672,102673,102675,102677,102679,102681,102683,102685,102687,102689,102691,102693],{"class":38,"line":53},[36,102674,4113],{"class":42},[36,102676,47],{"class":46},[36,102678,35305],{"class":42},[36,102680,4092],{"class":112},[36,102682,4253],{"class":42},[36,102684,4396],{"class":112},[36,102686,96559],{"class":42},[36,102688,4168],{"class":112},[36,102690,4253],{"class":42},[36,102692,1982],{"class":112},[36,102694,922],{"class":42},[36,102696,102697],{"class":38,"line":196},[36,102698,102699],{"class":3943},"#二维数组转置\n",[36,102701,102702],{"class":38,"line":642},[36,102703,102704],{"class":3943},"#调用transpose()函数\n",[36,102706,102707],{"class":38,"line":655},[36,102708,102709],{"class":42},"a.transpose()\n",[36,102711,102712],{"class":38,"line":662},[36,102713,102714],{"class":3943},"#对于二维数组也可以采用.T来实现\n",[36,102716,102717,102720],{"class":38,"line":667},[36,102718,102719],{"class":42},"a.T",[36,102721,102722],{"class":3943},"#与上述代码一样\n",[36,102724,102725],{"class":38,"line":679},[36,102726,97115],{"class":3943},[36,102728,102729],{"class":38,"line":685},[36,102730,97479],{"class":105},[36,102732,102733],{"class":38,"line":691},[36,102734,102735],{"class":105},"array([[ 1,  4,  7, 10],\n",[36,102737,102738],{"class":38,"line":696},[36,102739,102740],{"class":105},"       [ 2,  5,  8, 11],\n",[36,102742,102743],{"class":38,"line":702},[36,102744,102745],{"class":105},"       [ 3,  6,  9, 12]])\n",[36,102747,102748],{"class":38,"line":708},[36,102749,97479],{"class":105},[19,102751,102752],{},"也可以使用np.transpose()的形式",[19,102754,102755],{},"#多维数组进行转置 np.transpose()",[19,102757,102758],{},"#对二维数组也可以使用np.transpose()进行转置",[19,102760,102761],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,102763,102764],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,102766,102767],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,102769,102770],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,102772,102773],{},"四维及以上的数组也是一样的道理",[26,102775,102777],{"className":28,"code":102776,"language":30,"meta":31,"style":31},"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",[33,102778,102779,102807,102812,102817,102822,102840,102845,102877,102882,102887,102892,102913],{"__ignoreMap":31},[36,102780,102781,102783,102785,102787,102789,102791,102793,102795,102797,102799,102801,102803,102805],{"class":38,"line":39},[36,102782,4690],{"class":42},[36,102784,47],{"class":46},[36,102786,96554],{"class":42},[36,102788,4092],{"class":112},[36,102790,4253],{"class":42},[36,102792,4200],{"class":112},[36,102794,96559],{"class":42},[36,102796,1982],{"class":112},[36,102798,4253],{"class":42},[36,102800,4219],{"class":112},[36,102802,4253],{"class":42},[36,102804,498],{"class":112},[36,102806,922],{"class":42},[36,102808,102809],{"class":38,"line":53},[36,102810,102811],{"class":42},"x.shape\n",[36,102813,102814],{"class":38,"line":196},[36,102815,102816],{"class":3943},"#结果：（3,6,2）\n",[36,102818,102819],{"class":38,"line":642},[36,102820,102821],{"class":3943},"#使用np.transpose()进行转置 变为(2,6,3)\n",[36,102823,102824,102827,102829,102831,102833,102835,102837],{"class":38,"line":655},[36,102825,102826],{"class":42},"np.transpose(x,(",[36,102828,498],{"class":112},[36,102830,4253],{"class":42},[36,102832,4092],{"class":112},[36,102834,4253],{"class":42},[36,102836,1859],{"class":112},[36,102838,102839],{"class":42},")).shape\n",[36,102841,102842],{"class":38,"line":662},[36,102843,102844],{"class":3943},"#结果：(2,6,3)\n",[36,102846,102847,102849,102851,102853,102855,102857,102859,102861,102863,102865,102867,102869,102871,102873,102875],{"class":38,"line":667},[36,102848,102054],{"class":42},[36,102850,47],{"class":46},[36,102852,96554],{"class":42},[36,102854,4092],{"class":112},[36,102856,4253],{"class":42},[36,102858,4200],{"class":112},[36,102860,96559],{"class":42},[36,102862,1982],{"class":112},[36,102864,4253],{"class":42},[36,102866,498],{"class":112},[36,102868,4253],{"class":42},[36,102870,4092],{"class":112},[36,102872,4253],{"class":42},[36,102874,4219],{"class":112},[36,102876,922],{"class":42},[36,102878,102879],{"class":38,"line":679},[36,102880,102881],{"class":42},"aaaa.shape\n",[36,102883,102884],{"class":38,"line":685},[36,102885,102886],{"class":3943},"#结果：（3，2，1，6）\n",[36,102888,102889],{"class":38,"line":691},[36,102890,102891],{"class":3943},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[36,102893,102894,102897,102899,102901,102903,102905,102907,102909,102911],{"class":38,"line":696},[36,102895,102896],{"class":42},"np.transpose(aaaa,(",[36,102898,4092],{"class":112},[36,102900,4253],{"class":42},[36,102902,498],{"class":112},[36,102904,4253],{"class":42},[36,102906,1859],{"class":112},[36,102908,4253],{"class":42},[36,102910,1982],{"class":112},[36,102912,102839],{"class":42},[36,102914,102915],{"class":38,"line":702},[36,102916,102917],{"class":3943},"#结果：(2,1,3,6)\n",[3785,102919,102920],{},"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":31,"searchDepth":53,"depth":53,"links":102922},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":102647,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":102929,"title":102930,"body":102931,"description":26998,"extension":3817,"meta":103665,"navigation":658,"path":103666,"seo":103667,"stem":103668,"__hash__":103669},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":102932,"toc":103663},[102933,102936,102939,102942,102945,102948,102951,102954,102957,103066,103069,103072,103660],[10,102934,102930],{"id":102935},"_8数组分割",[19,102937,102938],{},"split分割",[19,102940,102941],{},"numpy.split(ary,indics_or_sections,axis)",[19,102943,102944],{},"解释：",[19,102946,102947],{},"ary:被分割的数组",[19,102949,102950],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,102952,102953],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,102955,102956],{},"①一维数组的分割",[26,102958,102960],{"className":28,"code":102959,"language":30,"meta":31,"style":31},"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",[33,102961,102962,102978,102983,102992,102996,103001,103009,103013,103018,103023,103036,103040,103045,103057,103061],{"__ignoreMap":31},[36,102963,102964,102966,102968,102970,102972,102974,102976],{"class":38,"line":39},[36,102965,4113],{"class":42},[36,102967,47],{"class":46},[36,102969,96554],{"class":42},[36,102971,4092],{"class":112},[36,102973,4253],{"class":42},[36,102975,4295],{"class":112},[36,102977,922],{"class":42},[36,102979,102980],{"class":38,"line":53},[36,102981,102982],{"class":3943},"#如果传入整数，必须能够平分，否则会报错\n",[36,102984,102985,102988,102990],{"class":38,"line":196},[36,102986,102987],{"class":42},"np.split(a,",[36,102989,498],{"class":112},[36,102991,922],{"class":42},[36,102993,102994],{"class":38,"line":642},[36,102995,97115],{"class":3943},[36,102997,102998],{"class":38,"line":655},[36,102999,103000],{"class":3943},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[36,103002,103003,103005,103007],{"class":38,"line":662},[36,103004,102987],{"class":42},[36,103006,4168],{"class":112},[36,103008,922],{"class":42},[36,103010,103011],{"class":38,"line":667},[36,103012,97115],{"class":3943},[36,103014,103015],{"class":38,"line":679},[36,103016,103017],{"class":3943},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[36,103019,103020],{"class":38,"line":685},[36,103021,103022],{"class":3943},"#传入数组\n",[36,103024,103025,103028,103030,103032,103034],{"class":38,"line":691},[36,103026,103027],{"class":42},"np.split(a,[",[36,103029,1982],{"class":112},[36,103031,4253],{"class":42},[36,103033,4194],{"class":112},[36,103035,8353],{"class":42},[36,103037,103038],{"class":38,"line":696},[36,103039,97115],{"class":3943},[36,103041,103042],{"class":38,"line":702},[36,103043,103044],{"class":3943},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[36,103046,103047,103049,103051,103053,103055],{"class":38,"line":708},[36,103048,103027],{"class":42},[36,103050,4194],{"class":112},[36,103052,4253],{"class":42},[36,103054,4244],{"class":112},[36,103056,8353],{"class":42},[36,103058,103059],{"class":38,"line":713},[36,103060,97115],{"class":3943},[36,103062,103063],{"class":38,"line":719},[36,103064,103065],{"class":3943},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,103067,103068],{},"②二维数组的分割",[19,103070,103071],{},"使用split()",[26,103073,103075],{"className":28,"code":103074,"language":30,"meta":31,"style":31},"#二维数组分割\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",[33,103076,103077,103082,103106,103111,103120,103124,103128,103133,103138,103143,103148,103153,103158,103163,103167,103180,103184,103188,103192,103196,103200,103205,103210,103215,103219,103224,103240,103244,103248,103253,103258,103263,103268,103273,103278,103283,103288,103293,103298,103303,103308,103313,103318,103323,103328,103333,103338,103342,103346,103366,103370,103374,103379,103384,103389,103394,103399,103404,103409,103414,103419,103424,103429,103434,103439,103444,103449,103454,103459,103464,103468,103473,103482,103486,103490,103494,103498,103502,103506,103510,103514,103518,103527,103531,103535,103539,103543,103547,103551,103555,103559,103563,103567,103571,103575,103579,103583,103587,103591,103595,103599,103603,103607,103611,103624,103628,103632,103636,103640,103644,103648,103652,103656],{"__ignoreMap":31},[36,103078,103079],{"class":38,"line":39},[36,103080,103081],{"class":3943},"#二维数组分割\n",[36,103083,103084,103086,103088,103090,103092,103094,103096,103098,103100,103102,103104],{"class":38,"line":53},[36,103085,96858],{"class":42},[36,103087,47],{"class":46},[36,103089,96554],{"class":42},[36,103091,4092],{"class":112},[36,103093,4253],{"class":42},[36,103095,4200],{"class":112},[36,103097,96559],{"class":42},[36,103099,4219],{"class":112},[36,103101,4253],{"class":42},[36,103103,4219],{"class":112},[36,103105,922],{"class":42},[36,103107,103108],{"class":38,"line":196},[36,103109,103110],{"class":3943},"#默认axis=0  传入整数平均分,按行来的\n",[36,103112,103113,103116,103118],{"class":38,"line":642},[36,103114,103115],{"class":42},"np.split(aa,",[36,103117,1982],{"class":112},[36,103119,922],{"class":42},[36,103121,103122],{"class":38,"line":655},[36,103123,99313],{"class":3943},[36,103125,103126],{"class":38,"line":662},[36,103127,97479],{"class":105},[36,103129,103130],{"class":38,"line":667},[36,103131,103132],{"class":105},"[array([[ 1,  2,  3,  4,  5,  6],\n",[36,103134,103135],{"class":38,"line":679},[36,103136,103137],{"class":105},"        [ 7,  8,  9, 10, 11, 12]]),\n",[36,103139,103140],{"class":38,"line":685},[36,103141,103142],{"class":105}," array([[13, 14, 15, 16, 17, 18],\n",[36,103144,103145],{"class":38,"line":691},[36,103146,103147],{"class":105},"        [19, 20, 21, 22, 23, 24]]),\n",[36,103149,103150],{"class":38,"line":696},[36,103151,103152],{"class":105}," array([[25, 26, 27, 28, 29, 30],\n",[36,103154,103155],{"class":38,"line":702},[36,103156,103157],{"class":105},"        [31, 32, 33, 34, 35, 36]])]\n",[36,103159,103160],{"class":38,"line":708},[36,103161,103162],{"class":105}," '''\n",[36,103164,103165],{"class":38,"line":713},[36,103166,103022],{"class":3943},[36,103168,103169,103172,103174,103176,103178],{"class":38,"line":719},[36,103170,103171],{"class":42},"np.split(aa,[",[36,103173,498],{"class":112},[36,103175,4253],{"class":42},[36,103177,4194],{"class":112},[36,103179,8353],{"class":42},[36,103181,103182],{"class":38,"line":725},[36,103183,99313],{"class":3943},[36,103185,103186],{"class":38,"line":731},[36,103187,97479],{"class":105},[36,103189,103190],{"class":38,"line":736},[36,103191,103132],{"class":105},[36,103193,103194],{"class":38,"line":742},[36,103195,103137],{"class":105},[36,103197,103198],{"class":38,"line":748},[36,103199,103142],{"class":105},[36,103201,103202],{"class":38,"line":754},[36,103203,103204],{"class":105},"        [19, 20, 21, 22, 23, 24],\n",[36,103206,103207],{"class":38,"line":760},[36,103208,103209],{"class":105},"        [25, 26, 27, 28, 29, 30]]),\n",[36,103211,103212],{"class":38,"line":766},[36,103213,103214],{"class":105}," array([[31, 32, 33, 34, 35, 36]])]\n",[36,103216,103217],{"class":38,"line":772},[36,103218,97479],{"class":105},[36,103220,103221],{"class":38,"line":778},[36,103222,103223],{"class":3943},"#axis=1 按照列来分\n",[36,103225,103226,103228,103230,103232,103234,103236,103238],{"class":38,"line":783},[36,103227,103115],{"class":42},[36,103229,1982],{"class":112},[36,103231,4253],{"class":42},[36,103233,51071],{"class":468},[36,103235,47],{"class":46},[36,103237,4092],{"class":112},[36,103239,922],{"class":42},[36,103241,103242],{"class":38,"line":789},[36,103243,99313],{"class":3943},[36,103245,103246],{"class":38,"line":795},[36,103247,97479],{"class":105},[36,103249,103250],{"class":38,"line":801},[36,103251,103252],{"class":105},"[array([[ 1,  2],\n",[36,103254,103255],{"class":38,"line":807},[36,103256,103257],{"class":105},"        [ 7,  8],\n",[36,103259,103260],{"class":38,"line":813},[36,103261,103262],{"class":105},"        [13, 14],\n",[36,103264,103265],{"class":38,"line":819},[36,103266,103267],{"class":105},"        [19, 20],\n",[36,103269,103270],{"class":38,"line":824},[36,103271,103272],{"class":105},"        [25, 26],\n",[36,103274,103275],{"class":38,"line":829},[36,103276,103277],{"class":105},"        [31, 32]]),\n",[36,103279,103280],{"class":38,"line":851},[36,103281,103282],{"class":105}," array([[ 3,  4],\n",[36,103284,103285],{"class":38,"line":868},[36,103286,103287],{"class":105},"        [ 9, 10],\n",[36,103289,103290],{"class":38,"line":873},[36,103291,103292],{"class":105},"        [15, 16],\n",[36,103294,103295],{"class":38,"line":891},[36,103296,103297],{"class":105},"        [21, 22],\n",[36,103299,103300],{"class":38,"line":906},[36,103301,103302],{"class":105},"        [27, 28],\n",[36,103304,103305],{"class":38,"line":925},[36,103306,103307],{"class":105},"        [33, 34]]),\n",[36,103309,103310],{"class":38,"line":943},[36,103311,103312],{"class":105}," array([[ 5,  6],\n",[36,103314,103315],{"class":38,"line":948},[36,103316,103317],{"class":105},"        [11, 12],\n",[36,103319,103320],{"class":38,"line":971},[36,103321,103322],{"class":105},"        [17, 18],\n",[36,103324,103325],{"class":38,"line":992},[36,103326,103327],{"class":105},"        [23, 24],\n",[36,103329,103330],{"class":38,"line":1020},[36,103331,103332],{"class":105},"        [29, 30],\n",[36,103334,103335],{"class":38,"line":1036},[36,103336,103337],{"class":105},"        [35, 36]])]\n",[36,103339,103340],{"class":38,"line":1041},[36,103341,103162],{"class":105},[36,103343,103344],{"class":38,"line":1052},[36,103345,103022],{"class":3943},[36,103347,103348,103350,103352,103354,103356,103358,103360,103362,103364],{"class":38,"line":1065},[36,103349,103171],{"class":42},[36,103351,4092],{"class":112},[36,103353,4253],{"class":42},[36,103355,498],{"class":112},[36,103357,45167],{"class":42},[36,103359,51071],{"class":468},[36,103361,47],{"class":46},[36,103363,4092],{"class":112},[36,103365,922],{"class":42},[36,103367,103368],{"class":38,"line":1077},[36,103369,97115],{"class":3943},[36,103371,103372],{"class":38,"line":1082},[36,103373,97479],{"class":105},[36,103375,103376],{"class":38,"line":1125},[36,103377,103378],{"class":105},"[array([[ 1],\n",[36,103380,103381],{"class":38,"line":1164},[36,103382,103383],{"class":105},"        [ 7],\n",[36,103385,103386],{"class":38,"line":1169},[36,103387,103388],{"class":105},"        [13],\n",[36,103390,103391],{"class":38,"line":1180},[36,103392,103393],{"class":105},"        [19],\n",[36,103395,103396],{"class":38,"line":1198},[36,103397,103398],{"class":105},"        [25],\n",[36,103400,103401],{"class":38,"line":1215},[36,103402,103403],{"class":105},"        [31]]),\n",[36,103405,103406],{"class":38,"line":1236},[36,103407,103408],{"class":105}," array([[ 2],\n",[36,103410,103411],{"class":38,"line":1245},[36,103412,103413],{"class":105},"        [ 8],\n",[36,103415,103416],{"class":38,"line":1250},[36,103417,103418],{"class":105},"        [14],\n",[36,103420,103421],{"class":38,"line":1265},[36,103422,103423],{"class":105},"        [20],\n",[36,103425,103426],{"class":38,"line":1281},[36,103427,103428],{"class":105},"        [26],\n",[36,103430,103431],{"class":38,"line":1297},[36,103432,103433],{"class":105},"        [32]]),\n",[36,103435,103436],{"class":38,"line":1314},[36,103437,103438],{"class":105}," array([[ 3,  4,  5,  6],\n",[36,103440,103441],{"class":38,"line":1336},[36,103442,103443],{"class":105},"        [ 9, 10, 11, 12],\n",[36,103445,103446],{"class":38,"line":1356},[36,103447,103448],{"class":105},"        [15, 16, 17, 18],\n",[36,103450,103451],{"class":38,"line":1361},[36,103452,103453],{"class":105},"        [21, 22, 23, 24],\n",[36,103455,103456],{"class":38,"line":1407},[36,103457,103458],{"class":105},"        [27, 28, 29, 30],\n",[36,103460,103461],{"class":38,"line":1423},[36,103462,103463],{"class":105},"        [33, 34, 35, 36]])]\n",[36,103465,103466],{"class":38,"line":1439},[36,103467,97479],{"class":105},[36,103469,103470],{"class":38,"line":1444},[36,103471,103472],{"class":3943},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[36,103474,103475,103478,103480],{"class":38,"line":1486},[36,103476,103477],{"class":42},"np.vsplit(aa,",[36,103479,1982],{"class":112},[36,103481,922],{"class":42},[36,103483,103484],{"class":38,"line":1499},[36,103485,97115],{"class":3943},[36,103487,103488],{"class":38,"line":1513},[36,103489,97479],{"class":105},[36,103491,103492],{"class":38,"line":1518},[36,103493,103132],{"class":105},[36,103495,103496],{"class":38,"line":1529},[36,103497,103137],{"class":105},[36,103499,103500],{"class":38,"line":1539},[36,103501,103142],{"class":105},[36,103503,103504],{"class":38,"line":1544},[36,103505,103147],{"class":105},[36,103507,103508],{"class":38,"line":1555},[36,103509,103152],{"class":105},[36,103511,103512],{"class":38,"line":1572},[36,103513,103157],{"class":105},[36,103515,103516],{"class":38,"line":1592},[36,103517,97479],{"class":105},[36,103519,103520,103523,103525],{"class":38,"line":1597},[36,103521,103522],{"class":42},"np.hsplit(aa,",[36,103524,1982],{"class":112},[36,103526,922],{"class":42},[36,103528,103529],{"class":38,"line":1610},[36,103530,97115],{"class":3943},[36,103532,103533],{"class":38,"line":1632},[36,103534,97479],{"class":105},[36,103536,103537],{"class":38,"line":1646},[36,103538,103252],{"class":105},[36,103540,103541],{"class":38,"line":1651},[36,103542,103257],{"class":105},[36,103544,103545],{"class":38,"line":1664},[36,103546,103262],{"class":105},[36,103548,103549],{"class":38,"line":1669},[36,103550,103267],{"class":105},[36,103552,103553],{"class":38,"line":1681},[36,103554,103272],{"class":105},[36,103556,103557],{"class":38,"line":1694},[36,103558,103277],{"class":105},[36,103560,103561],{"class":38,"line":1699},[36,103562,103282],{"class":105},[36,103564,103565],{"class":38,"line":1714},[36,103566,103287],{"class":105},[36,103568,103569],{"class":38,"line":1729},[36,103570,103292],{"class":105},[36,103572,103573],{"class":38,"line":1746},[36,103574,103297],{"class":105},[36,103576,103577],{"class":38,"line":1751},[36,103578,103302],{"class":105},[36,103580,103581],{"class":38,"line":1765},[36,103582,103307],{"class":105},[36,103584,103585],{"class":38,"line":1783},[36,103586,103312],{"class":105},[36,103588,103589],{"class":38,"line":1799},[36,103590,103317],{"class":105},[36,103592,103593],{"class":38,"line":1807},[36,103594,103322],{"class":105},[36,103596,103597],{"class":38,"line":1812},[36,103598,103327],{"class":105},[36,103600,103601],{"class":38,"line":1817},[36,103602,103332],{"class":105},[36,103604,103605],{"class":38,"line":1833},[36,103606,103337],{"class":105},[36,103608,103609],{"class":38,"line":1844},[36,103610,97479],{"class":105},[36,103612,103613,103616,103618,103620,103622],{"class":38,"line":1864},[36,103614,103615],{"class":42},"np.vsplit(aa,[",[36,103617,498],{"class":112},[36,103619,4253],{"class":42},[36,103621,4194],{"class":112},[36,103623,8353],{"class":42},[36,103625,103626],{"class":38,"line":1878},[36,103627,97115],{"class":3943},[36,103629,103630],{"class":38,"line":1891},[36,103631,97479],{"class":105},[36,103633,103634],{"class":38,"line":1896},[36,103635,103132],{"class":105},[36,103637,103638],{"class":38,"line":1906},[36,103639,103137],{"class":105},[36,103641,103642],{"class":38,"line":1926},[36,103643,103142],{"class":105},[36,103645,103646],{"class":38,"line":1936},[36,103647,103204],{"class":105},[36,103649,103650],{"class":38,"line":1946},[36,103651,103209],{"class":105},[36,103653,103654],{"class":38,"line":1957},[36,103655,103214],{"class":105},[36,103657,103658],{"class":38,"line":2008},[36,103659,103162],{"class":105},[3785,103661,103662],{},"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":31,"searchDepth":53,"depth":53,"links":103664},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":102930,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":103671,"title":103672,"body":103673,"description":26998,"extension":3817,"meta":104167,"navigation":658,"path":104168,"seo":104169,"stem":104170,"__hash__":104171},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":103674,"toc":104158},[103675,103678,103681,103706,103710,103769,103821,103825,103827,103863,103917,103919,103957,104028,104032,104037,104041,104044,104077,104080,104084,104087,104090,104093,104096,104101,104105,104108,104111,104114,104117,104122,104126,104131,104134,104155],[10,103676,103672],{"id":103677},"_9数学函数",[19,103679,103680],{},"补充回顾：python的列表推导式",[26,103682,103684],{"className":28,"code":103683,"language":30,"meta":31,"style":31},"[1\u002Fi for i in a]\n",[33,103685,103686],{"__ignoreMap":31},[36,103687,103688,103690,103692,103694,103697,103699,103701,103703],{"class":38,"line":39},[36,103689,4760],{"class":42},[36,103691,4092],{"class":112},[36,103693,4455],{"class":46},[36,103695,103696],{"class":42},"i ",[36,103698,3120],{"class":46},[36,103700,13119],{"class":42},[36,103702,1619],{"class":46},[36,103704,103705],{"class":42}," a]\n",[14,103707,103709],{"id":103708},"_91-求倒数","9.1 求倒数",[26,103711,103713],{"className":28,"code":103712,"language":30,"meta":31,"style":31},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[33,103714,103715,103720,103748,103760],{"__ignoreMap":31},[36,103716,103717],{"class":38,"line":39},[36,103718,103719],{"class":3943},"#数组求倒数\n",[36,103721,103722,103724,103726,103728,103730,103732,103734,103736,103738,103740,103742,103744,103746],{"class":38,"line":53},[36,103723,4113],{"class":42},[36,103725,47],{"class":46},[36,103727,4760],{"class":42},[36,103729,4092],{"class":112},[36,103731,4253],{"class":42},[36,103733,498],{"class":112},[36,103735,4253],{"class":42},[36,103737,1982],{"class":112},[36,103739,4253],{"class":42},[36,103741,4168],{"class":112},[36,103743,4253],{"class":42},[36,103745,4194],{"class":112},[36,103747,36806],{"class":42},[36,103749,103750,103752,103754,103757],{"class":38,"line":196},[36,103751,4138],{"class":42},[36,103753,47],{"class":46},[36,103755,103756],{"class":42},"np.array(a)",[36,103758,103759],{"class":3943},"#将列表转换为数组\n",[36,103761,103762,103764,103766],{"class":38,"line":642},[36,103763,4092],{"class":112},[36,103765,4455],{"class":46},[36,103767,103768],{"class":42},"b\n",[26,103770,103772],{"className":28,"code":103771,"language":30,"meta":31,"style":31},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[33,103773,103774,103802,103811,103816],{"__ignoreMap":31},[36,103775,103776,103778,103780,103782,103784,103786,103788,103790,103792,103794,103796,103798,103800],{"class":38,"line":39},[36,103777,4113],{"class":42},[36,103779,47],{"class":46},[36,103781,4760],{"class":42},[36,103783,4092],{"class":112},[36,103785,4253],{"class":42},[36,103787,498],{"class":112},[36,103789,4253],{"class":42},[36,103791,1982],{"class":112},[36,103793,4253],{"class":42},[36,103795,4168],{"class":112},[36,103797,4253],{"class":42},[36,103799,4194],{"class":112},[36,103801,36806],{"class":42},[36,103803,103804,103806,103808],{"class":38,"line":53},[36,103805,4138],{"class":42},[36,103807,47],{"class":46},[36,103809,103810],{"class":42},"np.array(a)\n",[36,103812,103813],{"class":38,"line":196},[36,103814,103815],{"class":3943},"#调用numpy中的函数reciprocal()\n",[36,103817,103818],{"class":38,"line":642},[36,103819,103820],{"class":42},"np.reciprocal(b)\n",[14,103822,103824],{"id":103823},"_92-求平方","9.2 求平方",[19,103826,98081],{},[26,103828,103830],{"className":28,"code":103829,"language":30,"meta":31,"style":31},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[33,103831,103832,103837,103842,103858],{"__ignoreMap":31},[36,103833,103834],{"class":38,"line":39},[36,103835,103836],{"class":3943},"#square()，求平方\n",[36,103838,103839],{"class":38,"line":53},[36,103840,103841],{"class":3943},"#一维数组\n",[36,103843,103844,103846,103848,103850,103852,103854,103856],{"class":38,"line":196},[36,103845,4113],{"class":42},[36,103847,47],{"class":46},[36,103849,96554],{"class":42},[36,103851,4092],{"class":112},[36,103853,4253],{"class":42},[36,103855,554],{"class":112},[36,103857,922],{"class":42},[36,103859,103860],{"class":38,"line":642},[36,103861,103862],{"class":42},"np.square(a)\n",[26,103864,103866],{"className":28,"code":103865,"language":30,"meta":31,"style":31},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[33,103867,103868,103873,103878,103899],{"__ignoreMap":31},[36,103869,103870],{"class":38,"line":39},[36,103871,103872],{"class":3943},"#或者通过循环遍历的形式来计算\n",[36,103874,103875],{"class":38,"line":53},[36,103876,103877],{"class":3943},"#这是一个列表\n",[36,103879,103880,103883,103885,103887,103889,103891,103893,103896],{"class":38,"line":196},[36,103881,103882],{"class":42},"[i",[36,103884,1372],{"class":46},[36,103886,103696],{"class":42},[36,103888,3120],{"class":46},[36,103890,13119],{"class":42},[36,103892,1619],{"class":46},[36,103894,103895],{"class":42}," a]",[36,103897,103898],{"class":3943},"#这个求完之后在数列当中\n",[36,103900,103901,103904,103906,103908,103910,103912,103914],{"class":38,"line":642},[36,103902,103903],{"class":42},"np.array([i",[36,103905,1372],{"class":46},[36,103907,103696],{"class":42},[36,103909,3120],{"class":46},[36,103911,13119],{"class":42},[36,103913,1619],{"class":46},[36,103915,103916],{"class":42}," a])\n",[19,103918,96843],{},[26,103920,103922],{"className":28,"code":103921,"language":30,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[33,103923,103924,103928,103952],{"__ignoreMap":31},[36,103925,103926],{"class":38,"line":39},[36,103927,96853],{"class":3943},[36,103929,103930,103932,103934,103936,103938,103940,103942,103944,103946,103948,103950],{"class":38,"line":53},[36,103931,96858],{"class":42},[36,103933,47],{"class":46},[36,103935,96554],{"class":42},[36,103937,4092],{"class":112},[36,103939,4253],{"class":42},[36,103941,4396],{"class":112},[36,103943,96559],{"class":42},[36,103945,4168],{"class":112},[36,103947,4253],{"class":42},[36,103949,1982],{"class":112},[36,103951,922],{"class":42},[36,103953,103954],{"class":38,"line":196},[36,103955,103956],{"class":42},"np.square(aa)\n",[26,103958,103960],{"className":28,"code":103959,"language":30,"meta":31,"style":31},"#传统的方式\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",[33,103961,103962,103967,103976,103992,104008,104023],{"__ignoreMap":31},[36,103963,103964],{"class":38,"line":39},[36,103965,103966],{"class":3943},"#传统的方式\n",[36,103968,103969,103971,103973],{"class":38,"line":53},[36,103970,101735],{"class":42},[36,103972,47],{"class":46},[36,103974,103975],{"class":42},"np.empty_like(aa)\n",[36,103977,103978,103980,103982,103984,103986,103988,103990],{"class":38,"line":196},[36,103979,3120],{"class":46},[36,103981,13119],{"class":42},[36,103983,1619],{"class":46},[36,103985,1622],{"class":112},[36,103987,495],{"class":42},[36,103989,4168],{"class":112},[36,103991,848],{"class":42},[36,103993,103994,103996,103998,104000,104002,104004,104006],{"class":38,"line":642},[36,103995,1909],{"class":46},[36,103997,13180],{"class":42},[36,103999,1619],{"class":46},[36,104001,1622],{"class":112},[36,104003,495],{"class":42},[36,104005,1982],{"class":112},[36,104007,848],{"class":42},[36,104009,104010,104013,104015,104018,104020],{"class":38,"line":655},[36,104011,104012],{"class":42},"        bb[i,j]",[36,104014,47],{"class":46},[36,104016,104017],{"class":42},"aa[i,j]",[36,104019,1372],{"class":46},[36,104021,104022],{"class":42},"aa[i,j]\n",[36,104024,104025],{"class":38,"line":662},[36,104026,104027],{"class":42},"bb\n",[14,104029,104031],{"id":104030},"_93-求各元素的符号","9.3 求各元素的符号",[19,104033,104034],{},[5198,104035],{"alt":31,"src":104036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,104038,104040],{"id":104039},"_94-modf函数","9.4 modf函数",[19,104042,104043],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[26,104045,104047],{"className":28,"code":104046,"language":30,"meta":31,"style":31},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[33,104048,104049,104072],{"__ignoreMap":31},[36,104050,104051,104053,104055,104057,104059,104061,104063,104065,104067,104070],{"class":38,"line":39},[36,104052,4113],{"class":42},[36,104054,47],{"class":46},[36,104056,96554],{"class":42},[36,104058,1308],{"class":46},[36,104060,554],{"class":112},[36,104062,4253],{"class":42},[36,104064,554],{"class":112},[36,104066,4253],{"class":42},[36,104068,104069],{"class":112},"0.3",[36,104071,922],{"class":42},[36,104073,104074],{"class":38,"line":53},[36,104075,104076],{"class":42},"np.modf(a)\n",[19,104078,104079],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,104081,104083],{"id":104082},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,104085,104086],{},"np.cell()",[19,104088,104089],{},"np.floor()",[19,104091,104092],{},"np.rint()",[19,104094,104095],{},"对各元素分别向上取整、向下取整、四舍五入",[19,104097,104098],{},[5198,104099],{"alt":31,"src":104100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,104102,104104],{"id":104103},"_96-around函数","9.6 around()函数",[19,104106,104107],{},"around()函数也可以实现对数的小数位数进行操作",[19,104109,104110],{},"其中的参数：",[19,104112,104113],{},"1.要传的数组",[19,104115,104116],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,104118,104119],{},[5198,104120],{"alt":31,"src":104121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,104123,104125],{"id":104124},"_97-三角函数","9.7 三角函数",[19,104127,104128],{},[5198,104129],{"alt":31,"src":104130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,104132,104133],{},"引入图像模块非常重要",[26,104135,104137],{"className":28,"code":104136,"language":30,"meta":31,"style":31},"from matplotlib import pyplot as plt\n",[33,104138,104139],{"__ignoreMap":31},[36,104140,104141,104143,104146,104148,104151,104153],{"class":38,"line":39},[36,104142,645],{"class":46},[36,104144,104145],{"class":42}," matplotlib ",[36,104147,611],{"class":46},[36,104149,104150],{"class":42}," pyplot ",[36,104152,617],{"class":46},[36,104154,35027],{"class":42},[3785,104156,104157],{},"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":31,"searchDepth":53,"depth":53,"links":104159},[104160,104161,104162,104163,104164,104165,104166],{"id":103708,"depth":53,"text":103709},{"id":103823,"depth":53,"text":103824},{"id":104030,"depth":53,"text":104031},{"id":104039,"depth":53,"text":104040},{"id":104082,"depth":53,"text":104083},{"id":104103,"depth":53,"text":104104},{"id":104124,"depth":53,"text":104125},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":103672,"description":26998},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":104173,"title":104174,"body":104175,"description":26998,"extension":3817,"meta":104179,"navigation":658,"path":104180,"seo":104181,"stem":104182,"__hash__":104183},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":104176,"toc":104177},[],{"title":31,"searchDepth":53,"depth":53,"links":104178},[],{"category":53977},"\u002Fwiki\u002F2025-08-14-numpy",{"title":104174,"description":26998},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":104185,"title":104186,"body":104187,"description":31,"extension":3817,"meta":106143,"navigation":658,"path":106144,"seo":106145,"stem":106146,"__hash__":106147},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":104188,"toc":106119},[104189,104192,104194,104197,104200,104206,104209,104232,104235,104268,104271,104312,104314,104316,104407,104410,104454,104457,104473,104476,104490,104493,104496,104537,104539,104575,104577,104580,104586,104591,104610,104614,104617,104683,104686,104704,104708,104711,104740,104749,104755,104759,104762,104768,104779,104781,104784,104813,104816,105083,105085,105088,105099,105102,105105,105127,105134,105137,105155,105158,105161,105175,105183,105186,105212,105218,105220,105223,105233,105245,105265,105274,105294,105304,105328,105341,105355,105360,105401,105418,105443,105455,105475,105481,105526,105545,105562,105575,105591,105598,105610,105619,105654,105674,105699,105712,105736,105751,105776,105779,105800,105808,105811,105822,105824,105827,105833,105845,105852,105854,105857,105869,105872,105886,105889,105899,105908,105911,105949,105952,105954,105960,105962,105976,105980,105983,106015,106019,106021,106044,106052,106055,106061,106067,106070,106072,106100,106104,106107,106113,106116],[10,104190,104186],{"id":104191},"_1环境安装与第一个-mujoco-程序",[14,104193,17],{"id":16},[19,104195,104196],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,104198,104199],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[26,104201,104204],{"className":104202,"code":104203,"language":80,"meta":31},[78],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[33,104205,104203],{"__ignoreMap":31},[19,104207,104208],{},"需要掌握:",[211,104210,104211,104214,104217,104222,104227],{},[214,104212,104213],{},"Fedora 44 下 MuJoCo 的系统依赖",[214,104215,104216],{},"Python 虚拟环境创建",[214,104218,104219],{},[33,104220,104221],{},"mujoco.MjModel",[214,104223,104224],{},[33,104225,104226],{},"mujoco.MjData",[214,104228,104229],{},[33,104230,104231],{},"mujoco.mj_step(model, data)",[19,104233,104234],{},"MuJoCo 中最重要的两个对象:",[248,104236,104237,104246],{},[251,104238,104239],{},[254,104240,104241,104244],{},[257,104242,104243],{"align":259},"对象",[257,104245,343],{"align":259},[265,104247,104248,104258],{},[254,104249,104250,104255],{},[270,104251,104252],{"align":259},[33,104253,104254],{},"MjModel",[270,104256,104257],{"align":259},"模型结构，来自 XML，基本不随时间变化",[254,104259,104260,104265],{},[270,104261,104262],{"align":259},[33,104263,104264],{},"MjData",[270,104266,104267],{"align":259},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,104269,104270],{},"可以先用一个类比理解：",[248,104272,104273,104283],{},[251,104274,104275],{},[254,104276,104277,104280],{},[257,104278,104279],{"align":259},"类比",[257,104281,104282],{"align":259},"MuJoCo 对象",[265,104284,104285,104294,104303],{},[254,104286,104287,104290],{},[270,104288,104289],{"align":259},"游戏地图和角色配置",[270,104291,104292],{"align":259},[33,104293,104254],{},[254,104295,104296,104299],{},[270,104297,104298],{"align":259},"游戏运行到当前帧的状态",[270,104300,104301],{"align":259},[33,104302,104264],{},[254,104304,104305,104308],{},[270,104306,104307],{"align":259},"前进一帧",[270,104309,104310],{"align":259},[33,104311,104231],{},[14,104313,86],{"id":85},[19,104315,89],{},[26,104317,104319],{"className":92,"code":104318,"language":94,"meta":31,"style":31},"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",[33,104320,104321,104333,104345,104357,104367,104377,104396],{"__ignoreMap":31},[36,104322,104323,104325,104327,104329,104331],{"class":38,"line":39},[36,104324,102],{"class":101},[36,104326,106],{"class":105},[36,104328,109],{"class":105},[36,104330,113],{"class":112},[36,104332,28294],{"class":112},[36,104334,104335,104338,104340,104343],{"class":38,"line":53},[36,104336,104337],{"class":105},"  python3",[36,104339,119],{"class":105},[36,104341,104342],{"class":105}," python3-virtualenv",[36,104344,28294],{"class":112},[36,104346,104347,104350,104353,104355],{"class":38,"line":196},[36,104348,104349],{"class":105},"  mesa-libGL",[36,104351,104352],{"class":105}," mesa-libGLU",[36,104354,125],{"class":105},[36,104356,28294],{"class":112},[36,104358,104359,104362,104365],{"class":38,"line":642},[36,104360,104361],{"class":105},"  libglvnd-glx",[36,104363,104364],{"class":105}," libglvnd-opengl",[36,104366,28294],{"class":112},[36,104368,104369,104372,104375],{"class":38,"line":655},[36,104370,104371],{"class":105},"  glfw",[36,104373,104374],{"class":105}," glfw-devel",[36,104376,28294],{"class":112},[36,104378,104379,104382,104385,104388,104391,104394],{"class":38,"line":662},[36,104380,104381],{"class":105},"  libX11",[36,104383,104384],{"class":105}," libXcursor",[36,104386,104387],{"class":105}," libXi",[36,104389,104390],{"class":105}," libXinerama",[36,104392,104393],{"class":105}," libXrandr",[36,104395,28294],{"class":112},[36,104397,104398,104401,104404],{"class":38,"line":667},[36,104399,104400],{"class":105},"  gcc",[36,104402,104403],{"class":105}," gcc-c++",[36,104405,104406],{"class":105}," make\n",[19,104408,104409],{},"创建 Python 环境:",[26,104411,104413],{"className":92,"code":104412,"language":94,"meta":31,"style":31},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[33,104414,104415,104429,104437],{"__ignoreMap":31},[36,104416,104417,104420,104423,104426],{"class":38,"line":39},[36,104418,104419],{"class":101},"python3",[36,104421,104422],{"class":112}," -m",[36,104424,104425],{"class":105}," venv",[36,104427,104428],{"class":105}," .venv\n",[36,104430,104431,104434],{"class":38,"line":53},[36,104432,104433],{"class":112},"source",[36,104435,104436],{"class":105}," .venv\u002Fbin\u002Factivate\n",[36,104438,104439,104441,104443,104446,104448,104451],{"class":38,"line":196},[36,104440,30],{"class":101},[36,104442,104422],{"class":112},[36,104444,104445],{"class":105}," pip",[36,104447,109],{"class":105},[36,104449,104450],{"class":112}," --upgrade",[36,104452,104453],{"class":105}," pip\n",[19,104455,104456],{},"pip 安装:",[26,104458,104460],{"className":92,"code":104459,"language":94,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy\n",[33,104461,104462],{"__ignoreMap":31},[36,104463,104464,104466,104468,104470],{"class":38,"line":39},[36,104465,141],{"class":101},[36,104467,109],{"class":105},[36,104469,146],{"class":105},[36,104471,104472],{"class":105}," numpy\n",[19,104474,104475],{},"安装完成后，先做最小检查：",[26,104477,104479],{"className":92,"code":104478,"language":94,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[33,104480,104481],{"__ignoreMap":31},[36,104482,104483,104485,104487],{"class":38,"line":39},[36,104484,30],{"class":101},[36,104486,33966],{"class":112},[36,104488,104489],{"class":105}," \"import mujoco; print(mujoco.__version__)\"\n",[19,104491,104492],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,104494,104495],{},"conda 安装:",[26,104497,104499],{"className":92,"code":104498,"language":94,"meta":31,"style":31},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[33,104500,104501,104518,104527],{"__ignoreMap":31},[36,104502,104503,104505,104507,104509,104512,104514,104516],{"class":38,"line":39},[36,104504,165],{"class":101},[36,104506,168],{"class":105},[36,104508,171],{"class":112},[36,104510,104511],{"class":105}," mujoco-study",[36,104513,177],{"class":105},[36,104515,180],{"class":112},[36,104517,183],{"class":112},[36,104519,104520,104522,104524],{"class":38,"line":53},[36,104521,165],{"class":101},[36,104523,190],{"class":105},[36,104525,104526],{"class":105}," mujoco-study\n",[36,104528,104529,104531,104533,104535],{"class":38,"line":196},[36,104530,141],{"class":101},[36,104532,109],{"class":105},[36,104534,146],{"class":105},[36,104536,104472],{"class":105},[19,104538,209],{},[211,104540,104541,104547,104556,104565],{},[214,104542,104543,104544,224],{},"不要安装 ",[33,104545,104546],{},"mujoco-py",[214,104548,104549,104550,324,104552,104555],{},"如果旧项目里同时安装了 ",[33,104551,104546],{},[33,104553,104554],{},"mujoco","，建议新建干净虚拟环境。",[214,104557,104558,104561,104562,224],{},[33,104559,104560],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[33,104563,104564],{},"~\u002F.mujoco\u002Fmujoco210",[214,104566,104567,104568,86093,104571,104574],{},"离屏渲染可能涉及 OpenGL 后端，",[33,104569,104570],{},"MUJOCO_GL=egl",[33,104572,104573],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,104576,243],{"id":242},[19,104578,104579],{},"MuJoCo 的基本执行流程:",[26,104581,104584],{"className":104582,"code":104583,"language":80,"meta":31},[78],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[33,104585,104583],{"__ignoreMap":31},[19,104587,104588,104590],{},[33,104589,104254],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,104592,104593,104595,104596,4087,104599,4087,104602,4087,104605,4087,104607,224],{},[33,104594,104264],{}," 存放仿真运行时状态，例如 ",[33,104597,104598],{},"data.time",[33,104600,104601],{},"data.qpos",[33,104603,104604],{},"data.qvel",[33,104606,3612],{},[33,104608,104609],{},"data.xpos",[318,104611,104613],{"id":104612},"xml-是什么","XML 是什么",[19,104615,104616],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[26,104618,104620],{"className":56624,"code":104619,"language":56626,"meta":31,"style":31},"\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",[33,104621,104622,104644,104675],{"__ignoreMap":31},[36,104623,104624,104626,104628,104630,104632,104634,104637,104639,104642],{"class":38,"line":39},[36,104625,393],{"class":42},[36,104627,55357],{"class":54857},[36,104629,18576],{"class":101},[36,104631,47],{"class":42},[36,104633,57048],{"class":105},[36,104635,104636],{"class":101}," pos",[36,104638,47],{"class":42},[36,104640,104641],{"class":105},"\"0 0 1\"",[36,104643,54864],{"class":42},[36,104645,104646,104648,104651,104653,104655,104658,104660,104662,104664,104667,104669,104672],{"class":38,"line":53},[36,104647,55701],{"class":42},[36,104649,104650],{"class":54857},"geom",[36,104652,18576],{"class":101},[36,104654,47],{"class":42},[36,104656,104657],{"class":105},"\"box_geom\"",[36,104659,57381],{"class":101},[36,104661,47],{"class":42},[36,104663,57048],{"class":105},[36,104665,104666],{"class":101}," size",[36,104668,47],{"class":42},[36,104670,104671],{"class":105},"\"0.1 0.1 0.1\"",[36,104673,104674],{"class":42},"\u002F>\n",[36,104676,104677,104679,104681],{"class":38,"line":196},[36,104678,55342],{"class":42},[36,104680,55357],{"class":54857},[36,104682,54864],{"class":42},[19,104684,104685],{},"这段意思是：",[211,104687,104688,104694,104701],{},[214,104689,104690,104691,104693],{},"创建一个叫 ",[33,104692,57271],{}," 的刚体。",[214,104695,104696,104697,104700],{},"它初始放在 ",[33,104698,104699],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[214,104702,104703],{},"它里面有一个盒子形状的几何体。",[318,104705,104707],{"id":104706},"timestep-是什么","timestep 是什么",[19,104709,104710],{},"XML 里的：",[26,104712,104714],{"className":56624,"code":104713,"language":56626,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[33,104715,104716],{"__ignoreMap":31},[36,104717,104718,104720,104722,104725,104727,104730,104733,104735,104738],{"class":38,"line":39},[36,104719,393],{"class":42},[36,104721,72721],{"class":54857},[36,104723,104724],{"class":101}," timestep",[36,104726,47],{"class":42},[36,104728,104729],{"class":105},"\"0.01\"",[36,104731,104732],{"class":101}," gravity",[36,104734,47],{"class":42},[36,104736,104737],{"class":105},"\"0 0 -9.81\"",[36,104739,104674],{"class":42},[19,104741,104742,104743,104745,104746,104748],{},"表示每调用一次 ",[33,104744,596],{},"，仿真时间前进 ",[33,104747,42544],{}," 秒。循环 100 次，大约就是 1 秒：",[26,104750,104753],{"className":104751,"code":104752,"language":80,"meta":31},[78],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[33,104754,104752],{"__ignoreMap":31},[318,104756,104758],{"id":104757},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,104760,104761],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[26,104763,104766],{"className":104764,"code":104765,"language":80,"meta":31},[78],"x y z qw qx qy qz\n",[33,104767,104765],{"__ignoreMap":31},[19,104769,104770,104771,104774,104775,104778],{},"表示一个自由刚体的位置和姿态。其中 ",[33,104772,104773],{},"x y z"," 是位置，",[33,104776,104777],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,104780,601],{"id":600},[19,104782,104783],{},"新建文件:",[26,104785,104787],{"className":92,"code":104786,"language":94,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[33,104788,104789,104799,104806],{"__ignoreMap":31},[36,104790,104791,104794,104796],{"class":38,"line":39},[36,104792,104793],{"class":101},"mkdir",[36,104795,32825],{"class":112},[36,104797,104798],{"class":105}," mujoco_tutorial\n",[36,104800,104801,104804],{"class":38,"line":53},[36,104802,104803],{"class":112},"cd",[36,104805,104798],{"class":105},[36,104807,104808,104810],{"class":38,"line":196},[36,104809,2097],{"class":101},[36,104811,104812],{"class":105}," ch1_first_sim.py\n",[19,104814,104815],{},"写入:",[26,104817,104819],{"className":28,"code":104818,"language":30,"meta":31,"style":31},"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",[33,104820,104821,104827,104831,104835,104843,104848,104853,104857,104861,104866,104870,104875,104880,104885,104889,104893,104897,104901,104905,104909,104921,104934,104944,104948,104960,104972,104984,104996,105008,105012,105028,105033,105037,105048,105059,105063,105067,105079],{"__ignoreMap":31},[36,104822,104823,104825],{"class":38,"line":39},[36,104824,611],{"class":46},[36,104826,627],{"class":42},[36,104828,104829],{"class":38,"line":53},[36,104830,659],{"emptyLinePlaceholder":658},[36,104832,104833],{"class":38,"line":196},[36,104834,659],{"emptyLinePlaceholder":658},[36,104836,104837,104839,104841],{"class":38,"line":642},[36,104838,670],{"class":112},[36,104840,673],{"class":46},[36,104842,676],{"class":105},[36,104844,104845],{"class":38,"line":655},[36,104846,104847],{"class":105},"\u003Cmujoco model=\"first_sim\">\n",[36,104849,104850],{"class":38,"line":662},[36,104851,104852],{"class":105},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[36,104854,104855],{"class":38,"line":667},[36,104856,659],{"emptyLinePlaceholder":658},[36,104858,104859],{"class":38,"line":679},[36,104860,699],{"class":105},[36,104862,104863],{"class":38,"line":685},[36,104864,104865],{"class":105},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,104867,104868],{"class":38,"line":691},[36,104869,659],{"emptyLinePlaceholder":658},[36,104871,104872],{"class":38,"line":696},[36,104873,104874],{"class":105},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[36,104876,104877],{"class":38,"line":702},[36,104878,104879],{"class":105},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[36,104881,104882],{"class":38,"line":708},[36,104883,104884],{"class":105},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,104886,104887],{"class":38,"line":713},[36,104888,769],{"class":105},[36,104890,104891],{"class":38,"line":719},[36,104892,775],{"class":105},[36,104894,104895],{"class":38,"line":725},[36,104896,810],{"class":105},[36,104898,104899],{"class":38,"line":731},[36,104900,816],{"class":105},[36,104902,104903],{"class":38,"line":736},[36,104904,659],{"emptyLinePlaceholder":658},[36,104906,104907],{"class":38,"line":742},[36,104908,659],{"emptyLinePlaceholder":658},[36,104910,104911,104913,104915,104917,104919],{"class":38,"line":748},[36,104912,1820],{"class":46},[36,104914,1823],{"class":101},[36,104916,1826],{"class":42},[36,104918,885],{"class":112},[36,104920,888],{"class":42},[36,104922,104923,104926,104928,104930,104932],{"class":38,"line":754},[36,104924,104925],{"class":42},"    model ",[36,104927,47],{"class":46},[36,104929,917],{"class":42},[36,104931,670],{"class":112},[36,104933,922],{"class":42},[36,104935,104936,104939,104941],{"class":38,"line":760},[36,104937,104938],{"class":42},"    data ",[36,104940,47],{"class":46},[36,104942,104943],{"class":42}," mujoco.MjData(model)\n",[36,104945,104946],{"class":38,"line":766},[36,104947,659],{"emptyLinePlaceholder":658},[36,104949,104950,104952,104954,104957],{"class":38,"line":772},[36,104951,1867],{"class":112},[36,104953,495],{"class":42},[36,104955,104956],{"class":105},"\"nq:\"",[36,104958,104959],{"class":42},", model.nq)\n",[36,104961,104962,104964,104966,104969],{"class":38,"line":778},[36,104963,1867],{"class":112},[36,104965,495],{"class":42},[36,104967,104968],{"class":105},"\"nv:\"",[36,104970,104971],{"class":42},", model.nv)\n",[36,104973,104974,104976,104978,104981],{"class":38,"line":783},[36,104975,1867],{"class":112},[36,104977,495],{"class":42},[36,104979,104980],{"class":105},"\"nu:\"",[36,104982,104983],{"class":42},", model.nu)\n",[36,104985,104986,104988,104990,104993],{"class":38,"line":789},[36,104987,1867],{"class":112},[36,104989,495],{"class":42},[36,104991,104992],{"class":105},"\"initial time:\"",[36,104994,104995],{"class":42},", data.time)\n",[36,104997,104998,105000,105002,105005],{"class":38,"line":795},[36,104999,1867],{"class":112},[36,105001,495],{"class":42},[36,105003,105004],{"class":105},"\"initial qpos:\"",[36,105006,105007],{"class":42},", data.qpos.copy())\n",[36,105009,105010],{"class":38,"line":801},[36,105011,659],{"emptyLinePlaceholder":658},[36,105013,105014,105016,105018,105020,105022,105024,105026],{"class":38,"line":807},[36,105015,1909],{"class":46},[36,105017,1616],{"class":42},[36,105019,1619],{"class":46},[36,105021,1622],{"class":112},[36,105023,495],{"class":42},[36,105025,4186],{"class":112},[36,105027,848],{"class":42},[36,105029,105030],{"class":38,"line":813},[36,105031,105032],{"class":42},"        mujoco.mj_step(model, data)\n",[36,105034,105035],{"class":38,"line":819},[36,105036,659],{"emptyLinePlaceholder":658},[36,105038,105039,105041,105043,105046],{"class":38,"line":824},[36,105040,1867],{"class":112},[36,105042,495],{"class":42},[36,105044,105045],{"class":105},"\"final time:\"",[36,105047,104995],{"class":42},[36,105049,105050,105052,105054,105057],{"class":38,"line":829},[36,105051,1867],{"class":112},[36,105053,495],{"class":42},[36,105055,105056],{"class":105},"\"final qpos:\"",[36,105058,105007],{"class":42},[36,105060,105061],{"class":38,"line":851},[36,105062,659],{"emptyLinePlaceholder":658},[36,105064,105065],{"class":38,"line":868},[36,105066,659],{"emptyLinePlaceholder":658},[36,105068,105069,105071,105073,105075,105077],{"class":38,"line":873},[36,105070,2067],{"class":46},[36,105072,2070],{"class":112},[36,105074,2073],{"class":46},[36,105076,2076],{"class":105},[36,105078,888],{"class":42},[36,105080,105081],{"class":38,"line":891},[36,105082,2084],{"class":42},[318,105084,2117],{"id":2117},[19,105086,105087],{},"导入库：",[26,105089,105091],{"className":28,"code":105090,"language":30,"meta":31,"style":31},"import mujoco\n",[33,105092,105093],{"__ignoreMap":31},[36,105094,105095,105097],{"class":38,"line":39},[36,105096,611],{"class":46},[36,105098,627],{"class":42},[19,105100,105101],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,105103,105104],{},"定义 XML：",[26,105106,105108],{"className":28,"code":105107,"language":30,"meta":31,"style":31},"XML = \"\"\"\n...\n\"\"\"\n",[33,105109,105110,105118,105123],{"__ignoreMap":31},[36,105111,105112,105114,105116],{"class":38,"line":39},[36,105113,670],{"class":112},[36,105115,673],{"class":46},[36,105117,676],{"class":105},[36,105119,105120],{"class":38,"line":53},[36,105121,105122],{"class":105},"...\n",[36,105124,105125],{"class":38,"line":196},[36,105126,816],{"class":105},[19,105128,105129,105130,105133],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[33,105131,105132],{},"freejoint"," 的方块。",[19,105135,105136],{},"编译模型：",[26,105138,105140],{"className":28,"code":105139,"language":30,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\n",[33,105141,105142],{"__ignoreMap":31},[36,105143,105144,105147,105149,105151,105153],{"class":38,"line":39},[36,105145,105146],{"class":42},"model ",[36,105148,47],{"class":46},[36,105150,917],{"class":42},[36,105152,670],{"class":112},[36,105154,922],{"class":42},[19,105156,105157],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,105159,105160],{},"创建数据：",[26,105162,105164],{"className":28,"code":105163,"language":30,"meta":31,"style":31},"data = mujoco.MjData(model)\n",[33,105165,105166],{"__ignoreMap":31},[36,105167,105168,105171,105173],{"class":38,"line":39},[36,105169,105170],{"class":42},"data ",[36,105172,47],{"class":46},[36,105174,104943],{"class":42},[19,105176,105177,105179,105180,105182],{},[33,105178,36961],{}," 会保存仿真当前状态。刚创建时，时间是 ",[33,105181,1859],{},"，方块还在初始位置。",[19,105184,105185],{},"推进仿真：",[26,105187,105189],{"className":28,"code":105188,"language":30,"meta":31,"style":31},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[33,105190,105191,105207],{"__ignoreMap":31},[36,105192,105193,105195,105197,105199,105201,105203,105205],{"class":38,"line":39},[36,105194,3120],{"class":46},[36,105196,1616],{"class":42},[36,105198,1619],{"class":46},[36,105200,1622],{"class":112},[36,105202,495],{"class":42},[36,105204,4186],{"class":112},[36,105206,848],{"class":42},[36,105208,105209],{"class":38,"line":53},[36,105210,105211],{"class":42},"    mujoco.mj_step(model, data)\n",[19,105213,105214,105215,105217],{},"每次 ",[33,105216,596],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[318,105219,2338],{"id":2338},[19,105221,105222],{},"下面把完整代码按新手视角拆开讲。",[26,105224,105225],{"className":28,"code":105090,"language":30,"meta":31,"style":31},[33,105226,105227],{"__ignoreMap":31},[36,105228,105229,105231],{"class":38,"line":39},[36,105230,611],{"class":46},[36,105232,627],{"class":42},[19,105234,105235,105237,105238,4087,105240,4087,105242,224],{},[33,105236,611],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[33,105239,104221],{},[33,105241,104226],{},[33,105243,105244],{},"mujoco.mj_step",[26,105246,105247],{"className":28,"code":105107,"language":30,"meta":31,"style":31},[33,105248,105249,105257,105261],{"__ignoreMap":31},[36,105250,105251,105253,105255],{"class":38,"line":39},[36,105252,670],{"class":112},[36,105254,673],{"class":46},[36,105256,676],{"class":105},[36,105258,105259],{"class":38,"line":53},[36,105260,105122],{"class":105},[36,105262,105263],{"class":38,"line":196},[36,105264,816],{"class":105},[19,105266,105267,105269,105270,105273],{},[33,105268,670],{}," 是一个变量名。右边的三引号 ",[33,105271,105272],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[26,105275,105276],{"className":56624,"code":104847,"language":56626,"meta":31,"style":31},[33,105277,105278],{"__ignoreMap":31},[36,105279,105280,105282,105284,105287,105289,105292],{"class":38,"line":39},[36,105281,393],{"class":42},[36,105283,104554],{"class":54857},[36,105285,105286],{"class":101}," model",[36,105288,47],{"class":42},[36,105290,105291],{"class":105},"\"first_sim\"",[36,105293,54864],{"class":42},[19,105295,105296,105297,105300,105301,224],{},"这是 XML 的根标签。",[33,105298,105299],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[33,105302,105303],{},"first_sim",[26,105305,105306],{"className":56624,"code":104713,"language":56626,"meta":31,"style":31},[33,105307,105308],{"__ignoreMap":31},[36,105309,105310,105312,105314,105316,105318,105320,105322,105324,105326],{"class":38,"line":39},[36,105311,393],{"class":42},[36,105313,72721],{"class":54857},[36,105315,104724],{"class":101},[36,105317,47],{"class":42},[36,105319,104729],{"class":105},[36,105321,104732],{"class":101},[36,105323,47],{"class":42},[36,105325,104737],{"class":105},[36,105327,104674],{"class":42},[19,105329,105330,105332,105333,105336,105337,105340],{},[33,105331,72721],{}," 用来设置仿真参数。",[33,105334,105335],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[33,105338,105339],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[26,105342,105344],{"className":56624,"code":105343,"language":56626,"meta":31,"style":31},"\u003Cworldbody>\n",[33,105345,105346],{"__ignoreMap":31},[36,105347,105348,105350,105353],{"class":38,"line":39},[36,105349,393],{"class":42},[36,105351,105352],{"class":54857},"worldbody",[36,105354,54864],{"class":42},[19,105356,105357,105359],{},[33,105358,105352],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[26,105361,105363],{"className":56624,"code":105362,"language":56626,"meta":31,"style":31},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,105364,105365],{"__ignoreMap":31},[36,105366,105367,105369,105371,105373,105375,105378,105380,105382,105385,105387,105389,105392,105394,105396,105399],{"class":38,"line":39},[36,105368,393],{"class":42},[36,105370,104650],{"class":54857},[36,105372,18576],{"class":101},[36,105374,47],{"class":42},[36,105376,105377],{"class":105},"\"floor\"",[36,105379,57381],{"class":101},[36,105381,47],{"class":42},[36,105383,105384],{"class":105},"\"plane\"",[36,105386,104666],{"class":101},[36,105388,47],{"class":42},[36,105390,105391],{"class":105},"\"2 2 0.1\"",[36,105393,82321],{"class":101},[36,105395,47],{"class":42},[36,105397,105398],{"class":105},"\"0.8 0.8 0.8 1\"",[36,105400,104674],{"class":42},[19,105402,105403,105404,105406,105407,105410,105411,105414,105415,105417],{},"这行创建地面。",[33,105405,104650],{}," 是几何体。",[33,105408,105409],{},"name=\"floor\""," 是名字。",[33,105412,105413],{},"type=\"plane\""," 表示平面。",[33,105416,58666],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[26,105419,105421],{"className":56624,"code":105420,"language":56626,"meta":31,"style":31},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[33,105422,105423],{"__ignoreMap":31},[36,105424,105425,105427,105429,105431,105433,105435,105437,105439,105441],{"class":38,"line":39},[36,105426,393],{"class":42},[36,105428,55357],{"class":54857},[36,105430,18576],{"class":101},[36,105432,47],{"class":42},[36,105434,57048],{"class":105},[36,105436,104636],{"class":101},[36,105438,47],{"class":42},[36,105440,104641],{"class":105},[36,105442,54864],{"class":42},[19,105444,105445,105446,224,105448,105451,105452,105454],{},"这行创建一个刚体，名字叫 ",[33,105447,57271],{},[33,105449,105450],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[33,105453,104699],{},"，也就是离地面 1 米高。",[26,105456,105458],{"className":56624,"code":105457,"language":56626,"meta":31,"style":31},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[33,105459,105460],{"__ignoreMap":31},[36,105461,105462,105464,105466,105468,105470,105473],{"class":38,"line":39},[36,105463,393],{"class":42},[36,105465,105132],{"class":54857},[36,105467,18576],{"class":101},[36,105469,47],{"class":42},[36,105471,105472],{"class":105},"\"box_free\"",[36,105474,104674],{"class":42},[19,105476,105477,105478,105480],{},"这行很重要。",[33,105479,105132],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[26,105482,105484],{"className":56624,"code":105483,"language":56626,"meta":31,"style":31},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,105485,105486],{"__ignoreMap":31},[36,105487,105488,105490,105492,105494,105496,105498,105500,105502,105504,105506,105508,105510,105513,105515,105517,105519,105521,105524],{"class":38,"line":39},[36,105489,393],{"class":42},[36,105491,104650],{"class":54857},[36,105493,18576],{"class":101},[36,105495,47],{"class":42},[36,105497,104657],{"class":105},[36,105499,57381],{"class":101},[36,105501,47],{"class":42},[36,105503,57048],{"class":105},[36,105505,104666],{"class":101},[36,105507,47],{"class":42},[36,105509,104671],{"class":105},[36,105511,105512],{"class":101}," mass",[36,105514,47],{"class":42},[36,105516,7377],{"class":105},[36,105518,82321],{"class":101},[36,105520,47],{"class":42},[36,105522,105523],{"class":105},"\"1 0 0 1\"",[36,105525,104674],{"class":42},[19,105527,105528,105529,105532,105533,105536,105537,105540,105541,105544],{},"这行给 box body 添加一个盒子形状。",[33,105530,105531],{},"type=\"box\""," 表示形状是盒子。",[33,105534,105535],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[33,105538,105539],{},"mass=\"1\""," 表示质量是 1。",[33,105542,105543],{},"rgba=\"1 0 0 1\""," 表示红色。",[26,105546,105548],{"className":28,"code":105547,"language":30,"meta":31,"style":31},"def main() -> None:\n",[33,105549,105550],{"__ignoreMap":31},[36,105551,105552,105554,105556,105558,105560],{"class":38,"line":39},[36,105553,1820],{"class":46},[36,105555,1823],{"class":101},[36,105557,1826],{"class":42},[36,105559,885],{"class":112},[36,105561,888],{"class":42},[19,105563,105564,105566,105567,105570,105571,105574],{},[33,105565,1820],{}," 用来定义函数。这里定义了一个叫 ",[33,105568,105569],{},"main"," 的函数。",[33,105572,105573],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[26,105576,105577],{"className":28,"code":105139,"language":30,"meta":31,"style":31},[33,105578,105579],{"__ignoreMap":31},[36,105580,105581,105583,105585,105587,105589],{"class":38,"line":39},[36,105582,105146],{"class":42},[36,105584,47],{"class":46},[36,105586,917],{"class":42},[36,105588,670],{"class":112},[36,105590,922],{"class":42},[19,105592,105593,105594,105597],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[33,105595,105596],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[26,105599,105600],{"className":28,"code":105163,"language":30,"meta":31,"style":31},[33,105601,105602],{"__ignoreMap":31},[36,105603,105604,105606,105608],{"class":38,"line":39},[36,105605,105170],{"class":42},[36,105607,47],{"class":46},[36,105609,104943],{"class":42},[19,105611,105612,105613,105615,105616,105618],{},"这行创建仿真数据。",[33,105614,36961],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[33,105617,36961],{}," 都会变化。",[26,105620,105622],{"className":28,"code":105621,"language":30,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[33,105623,105624,105634,105644],{"__ignoreMap":31},[36,105625,105626,105628,105630,105632],{"class":38,"line":39},[36,105627,3486],{"class":112},[36,105629,495],{"class":42},[36,105631,104956],{"class":105},[36,105633,104959],{"class":42},[36,105635,105636,105638,105640,105642],{"class":38,"line":53},[36,105637,3486],{"class":112},[36,105639,495],{"class":42},[36,105641,104968],{"class":105},[36,105643,104971],{"class":42},[36,105645,105646,105648,105650,105652],{"class":38,"line":196},[36,105647,3486],{"class":112},[36,105649,495],{"class":42},[36,105651,104980],{"class":105},[36,105653,104983],{"class":42},[19,105655,105656,105658,105659,105661,105662,105665,105666,105669,105670,105673],{},[33,105657,3486],{}," 用来输出信息。",[33,105660,2983],{}," 是位置变量数量，",[33,105663,105664],{},"model.nv"," 是速度变量数量，",[33,105667,105668],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[33,105671,105672],{},"nu"," 是 0。",[26,105675,105677],{"className":28,"code":105676,"language":30,"meta":31,"style":31},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[33,105678,105679,105689],{"__ignoreMap":31},[36,105680,105681,105683,105685,105687],{"class":38,"line":39},[36,105682,3486],{"class":112},[36,105684,495],{"class":42},[36,105686,104992],{"class":105},[36,105688,104995],{"class":42},[36,105690,105691,105693,105695,105697],{"class":38,"line":53},[36,105692,3486],{"class":112},[36,105694,495],{"class":42},[36,105696,105004],{"class":105},[36,105698,105007],{"class":42},[19,105700,105701,105702,105704,105705,105707,105708,105711],{},"这里打印初始时间和初始位置。",[33,105703,104598],{}," 一开始是 0。",[33,105706,104601],{}," 是位置数组。",[33,105709,105710],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[26,105713,105714],{"className":28,"code":105188,"language":30,"meta":31,"style":31},[33,105715,105716,105732],{"__ignoreMap":31},[36,105717,105718,105720,105722,105724,105726,105728,105730],{"class":38,"line":39},[36,105719,3120],{"class":46},[36,105721,1616],{"class":42},[36,105723,1619],{"class":46},[36,105725,1622],{"class":112},[36,105727,495],{"class":42},[36,105729,4186],{"class":112},[36,105731,848],{"class":42},[36,105733,105734],{"class":38,"line":53},[36,105735,105211],{"class":42},[19,105737,105738,105740,105741,105744,105745,105747,105748,105750],{},[33,105739,3120],{}," 是循环。",[33,105742,105743],{},"range(100)"," 表示循环 100 次。",[33,105746,2756],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[33,105749,596],{},"，仿真就前进一步。",[26,105752,105754],{"className":28,"code":105753,"language":30,"meta":31,"style":31},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[33,105755,105756,105766],{"__ignoreMap":31},[36,105757,105758,105760,105762,105764],{"class":38,"line":39},[36,105759,3486],{"class":112},[36,105761,495],{"class":42},[36,105763,105045],{"class":105},[36,105765,104995],{"class":42},[36,105767,105768,105770,105772,105774],{"class":38,"line":53},[36,105769,3486],{"class":112},[36,105771,495],{"class":42},[36,105773,105056],{"class":105},[36,105775,105007],{"class":42},[19,105777,105778],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[26,105780,105782],{"className":28,"code":105781,"language":30,"meta":31,"style":31},"if __name__ == \"__main__\":\n    main()\n",[33,105783,105784,105796],{"__ignoreMap":31},[36,105785,105786,105788,105790,105792,105794],{"class":38,"line":39},[36,105787,2067],{"class":46},[36,105789,2070],{"class":112},[36,105791,2073],{"class":46},[36,105793,2076],{"class":105},[36,105795,888],{"class":42},[36,105797,105798],{"class":38,"line":53},[36,105799,2084],{"class":42},[19,105801,105802,105803,105805,105806,224],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[33,105804,70],{}," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[33,105807,70],{},[19,105809,105810],{},"运行:",[26,105812,105814],{"className":92,"code":105813,"language":94,"meta":31,"style":31},"python ch1_first_sim.py\n",[33,105815,105816],{"__ignoreMap":31},[36,105817,105818,105820],{"class":38,"line":39},[36,105819,30],{"class":101},[36,105821,104812],{"class":105},[14,105823,3348],{"id":3347},[19,105825,105826],{},"你应该看到类似输出:",[26,105828,105831],{"className":105829,"code":105830,"language":80,"meta":31},[78],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[33,105832,105830],{"__ignoreMap":31},[19,105834,105835,105837,105838,105841,105842,224],{},[33,105836,105132],{}," 有 7 个位置变量: ",[33,105839,105840],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[33,105843,105844],{},"vx vy vz wx wy wz",[19,105846,105847,105848,105851],{},"你还会看到 ",[33,105849,105850],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,105853,3382],{"id":3381},[19,105855,105856],{},"确认版本:",[26,105858,105859],{"className":92,"code":104478,"language":94,"meta":31,"style":31},[33,105860,105861],{"__ignoreMap":31},[36,105862,105863,105865,105867],{"class":38,"line":39},[36,105864,30],{"class":101},[36,105866,33966],{"class":112},[36,105868,104489],{"class":105},[19,105870,105871],{},"确认导入的是官方 bindings:",[26,105873,105875],{"className":92,"code":105874,"language":94,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco)\"\n",[33,105876,105877],{"__ignoreMap":31},[36,105878,105879,105881,105883],{"class":38,"line":39},[36,105880,30],{"class":101},[36,105882,33966],{"class":112},[36,105884,105885],{"class":105}," \"import mujoco; print(mujoco)\"\n",[19,105887,105888],{},"运行程序:",[26,105890,105891],{"className":92,"code":105813,"language":94,"meta":31,"style":31},[33,105892,105893],{"__ignoreMap":31},[36,105894,105895,105897],{"class":38,"line":39},[36,105896,30],{"class":101},[36,105898,104812],{"class":105},[19,105900,105901,105902,105905,105906,224],{},"检查 ",[33,105903,105904],{},"final time"," 是否约等于 ",[33,105907,475],{},[19,105909,105910],{},"再做几个小实验：",[211,105912,105913,105921,105929,105942],{},[214,105914,3416,105915,3420,105917,105920],{},[33,105916,105450],{},[33,105918,105919],{},"pos=\"0 0 2\"","，观察初始高度变化。",[214,105922,3416,105923,3420,105925,105928],{},[33,105924,105339],{},[33,105926,105927],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[214,105930,3416,105931,3420,105933,105936,105937,105939,105940,224],{},[33,105932,105335],{},[33,105934,105935],{},"timestep=\"0.005\"","，观察 100 步后的 ",[33,105938,105904],{}," 是否变成约 ",[33,105941,38889],{},[214,105943,105944,105945,105948],{},"删除 ",[33,105946,105947],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,105950,105951],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,105953,3444],{"id":3443},[318,105955,105957],{"id":105956},"modulenotfounderror-no-module-named-mujoco",[33,105958,105959],{},"ModuleNotFoundError: No module named 'mujoco'",[19,105961,3510],{},[26,105963,105965],{"className":92,"code":105964,"language":94,"meta":31,"style":31},"pip install \"mujoco>=2.3\"\n",[33,105966,105967],{"__ignoreMap":31},[36,105968,105969,105971,105973],{"class":38,"line":39},[36,105970,141],{"class":101},[36,105972,109],{"class":105},[36,105974,105975],{"class":105}," \"mujoco>=2.3\"\n",[318,105977,105979],{"id":105978},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,105981,105982],{},"先安装系统依赖:",[26,105984,105986],{"className":92,"code":105985,"language":94,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[33,105987,105988],{"__ignoreMap":31},[36,105989,105990,105992,105994,105996,105998,106000,106002,106005,106007,106010,106012],{"class":38,"line":39},[36,105991,102],{"class":101},[36,105993,106],{"class":105},[36,105995,109],{"class":105},[36,105997,113],{"class":112},[36,105999,122],{"class":105},[36,106001,125],{"class":105},[36,106003,106004],{"class":105}," glfw",[36,106006,104374],{"class":105},[36,106008,106009],{"class":105}," libX11",[36,106011,104387],{"class":105},[36,106013,106014],{"class":105}," libXrandr\n",[318,106016,106018],{"id":106017},"xml-解析失败","XML 解析失败",[19,106020,3476],{},[211,106022,106023,106026,106029,106035],{},[214,106024,106025],{},"标签是否闭合",[214,106027,106028],{},"属性是否带引号",[214,106030,106031,106032],{},"根节点是否是 ",[33,106033,106034],{},"\u003Cmujoco>",[214,106036,106037,106039,106040,106043],{},[33,106038,55357],{}," 是否放在 ",[33,106041,106042],{},"\u003Cworldbody>"," 内部",[318,106045,106047,106049,106050],{"id":106046},"final-time-不是严格等于-10",[33,106048,105904],{}," 不是严格等于 ",[33,106051,475],{},[19,106053,106054],{},"这通常不是错误。浮点数计算可能得到：",[26,106056,106059],{"className":106057,"code":106058,"language":80,"meta":31},[78],"1.0000000000000007\n",[33,106060,106058],{"__ignoreMap":31},[19,106062,106063,106064,106066],{},"只要接近 ",[33,106065,475],{}," 就正常。",[318,106068,106069],{"id":106069},"方块没有掉下来",[19,106071,3537],{},[211,106073,106074,106080,106086,106091],{},[214,106075,106076,106077],{},"方块 body 里是否有 ",[33,106078,106079],{},"\u003Cfreejoint\u002F>",[214,106081,106082,106083],{},"重力是否是 ",[33,106084,106085],{},"0 0 -9.81",[214,106087,106088,106089],{},"是否真的调用了 ",[33,106090,104231],{},[214,106092,106093,106094,106096,106097],{},"你看的是否是 ",[33,106095,105850],{},"，不是 ",[33,106098,106099],{},"initial qpos",[14,106101,106103],{"id":106102},"_8本章小结","8.本章小结",[19,106105,106106],{},"本章你已经完成了 MuJoCo 的最小闭环：",[26,106108,106111],{"className":106109,"code":106110,"language":80,"meta":31},[78],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[33,106112,106110],{"__ignoreMap":31},[19,106114,106115],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[3785,106117,106118],{},"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":31,"searchDepth":53,"depth":53,"links":106120},[106121,106122,106123,106128,106132,106133,106134,106142],{"id":16,"depth":53,"text":17},{"id":85,"depth":53,"text":86},{"id":242,"depth":53,"text":243,"children":106124},[106125,106126,106127],{"id":104612,"depth":196,"text":104613},{"id":104706,"depth":196,"text":104707},{"id":104757,"depth":196,"text":104758},{"id":600,"depth":53,"text":601,"children":106129},[106130,106131],{"id":2117,"depth":196,"text":2117},{"id":2338,"depth":196,"text":2338},{"id":3347,"depth":53,"text":3348},{"id":3381,"depth":53,"text":3382},{"id":3443,"depth":53,"text":3444,"children":106135},[106136,106137,106138,106139,106141],{"id":105956,"depth":196,"text":105959},{"id":105978,"depth":196,"text":105979},{"id":106017,"depth":196,"text":106018},{"id":106046,"depth":196,"text":106140},"final time 不是严格等于 1.0",{"id":106069,"depth":196,"text":106069},{"id":106102,"depth":53,"text":106103},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":104186,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":106149,"title":106150,"body":106151,"description":31,"extension":3817,"meta":107802,"navigation":658,"path":107803,"seo":107804,"stem":107805,"__hash__":107806},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":106152,"toc":107778},[106153,106156,106158,106161,106164,106181,106275,106278,106284,106286,106288,106312,106314,106328,106330,106371,106373,106386,106388,106391,106439,106451,106454,106457,106463,106476,106543,106546,106565,106568,106571,106577,106579,106588,106591,106595,106604,106686,106695,106699,106705,106719,106729,106731,107060,107062,107074,107076,107087,107089,107092,107110,107113,107116,107134,107145,107148,107163,107173,107175,107196,107213,107233,107239,107279,107295,107311,107317,107320,107344,107360,107365,107395,107412,107437,107440,107455,107464,107479,107488,107503,107510,107512,107522,107535,107542,107545,107584,107591,107593,107645,107647,107653,107656,107663,107670,107673,107675,107693,107696,107699,107733,107745,107747,107750,107772,107775],[10,106154,106150],{"id":106155},"_2xml-与-mjcf-物理建模基础",[14,106157,17],{"id":16},[19,106159,106160],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,106162,106163],{},"本章结束后，你应该能看懂一个简单模型里：",[211,106165,106166,106169,106172,106175,106178],{},[214,106167,106168],{},"地面在哪里。",[214,106170,106171],{},"物体初始位置在哪里。",[214,106173,106174],{},"几何体是什么形状。",[214,106176,106177],{},"哪些 body 可以自由运动。",[214,106179,106180],{},"如何用名字在 Python 里找到 XML 中的对象。",[248,106182,106183,106192],{},[251,106184,106185],{},[254,106186,106187,106190],{},[257,106188,106189],{"align":259},"标签",[257,106191,263],{"align":259},[265,106193,106194,106203,106213,106222,106232,106242,106255,106265],{},[254,106195,106196,106200],{},[270,106197,106198],{"align":259},[33,106199,106034],{},[270,106201,106202],{"align":259},"根节点",[254,106204,106205,106210],{},[270,106206,106207],{"align":259},[33,106208,106209],{},"\u003Coption>",[270,106211,106212],{"align":259},"仿真参数",[254,106214,106215,106219],{},[270,106216,106217],{"align":259},[33,106218,106042],{},[270,106220,106221],{"align":259},"世界中的物体",[254,106223,106224,106229],{},[270,106225,106226],{"align":259},[33,106227,106228],{},"\u003Cbody>",[270,106230,106231],{"align":259},"刚体",[254,106233,106234,106239],{},[270,106235,106236],{"align":259},[33,106237,106238],{},"\u003Cgeom>",[270,106240,106241],{"align":259},"几何体、碰撞体、可视体",[254,106243,106244,106252],{},[270,106245,106246,28594,106249],{"align":259},[33,106247,106248],{},"\u003Cjoint>",[33,106250,106251],{},"\u003Cfreejoint>",[270,106253,106254],{"align":259},"关节",[254,106256,106257,106262],{},[270,106258,106259],{"align":259},[33,106260,106261],{},"\u003Csite>",[270,106263,106264],{"align":259},"标记点",[254,106266,106267,106272],{},[270,106268,106269],{"align":259},[33,106270,106271],{},"\u003Cactuator>",[270,106273,106274],{"align":259},"控制器",[19,106276,106277],{},"初学时可以先记住：",[26,106279,106282],{"className":106280,"code":106281,"language":80,"meta":31},[78],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[33,106283,106281],{"__ignoreMap":31},[14,106285,86],{"id":85},[19,106287,89],{},[26,106289,106291],{"className":92,"code":106290,"language":94,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[33,106292,106293],{"__ignoreMap":31},[36,106294,106295,106297,106299,106301,106303,106305,106307,106309],{"class":38,"line":39},[36,106296,102],{"class":101},[36,106298,106],{"class":105},[36,106300,109],{"class":105},[36,106302,113],{"class":112},[36,106304,122],{"class":105},[36,106306,125],{"class":105},[36,106308,106004],{"class":105},[36,106310,106311],{"class":105}," glfw-devel\n",[19,106313,131],{},[26,106315,106316],{"className":92,"code":104459,"language":94,"meta":31,"style":31},[33,106317,106318],{"__ignoreMap":31},[36,106319,106320,106322,106324,106326],{"class":38,"line":39},[36,106321,141],{"class":101},[36,106323,109],{"class":105},[36,106325,146],{"class":105},[36,106327,104472],{"class":105},[19,106329,155],{},[26,106331,106333],{"className":92,"code":106332,"language":94,"meta":31,"style":31},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[33,106334,106335,106352,106361],{"__ignoreMap":31},[36,106336,106337,106339,106341,106343,106346,106348,106350],{"class":38,"line":39},[36,106338,165],{"class":101},[36,106340,168],{"class":105},[36,106342,171],{"class":112},[36,106344,106345],{"class":105}," mujoco-xml",[36,106347,177],{"class":105},[36,106349,180],{"class":112},[36,106351,183],{"class":112},[36,106353,106354,106356,106358],{"class":38,"line":53},[36,106355,165],{"class":101},[36,106357,190],{"class":105},[36,106359,106360],{"class":105}," mujoco-xml\n",[36,106362,106363,106365,106367,106369],{"class":38,"line":196},[36,106364,141],{"class":101},[36,106366,109],{"class":105},[36,106368,146],{"class":105},[36,106370,104472],{"class":105},[19,106372,209],{},[211,106374,106375,106378,106383],{},[214,106376,106377],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[214,106379,106380,106381,224],{},"本章使用基础标签，适用于 ",[33,106382,104560],{},[214,106384,106385],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,106387,243],{"id":242},[19,106389,106390],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[26,106392,106394],{"className":56624,"code":106393,"language":56626,"meta":31,"style":31},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[33,106395,106396,106410,106418,106423,106431],{"__ignoreMap":31},[36,106397,106398,106400,106402,106404,106406,106408],{"class":38,"line":39},[36,106399,393],{"class":42},[36,106401,104554],{"class":54857},[36,106403,105286],{"class":101},[36,106405,47],{"class":42},[36,106407,66234],{"class":105},[36,106409,54864],{"class":42},[36,106411,106412,106414,106416],{"class":38,"line":53},[36,106413,55701],{"class":42},[36,106415,105352],{"class":54857},[36,106417,54864],{"class":42},[36,106419,106420],{"class":38,"line":196},[36,106421,106422],{"class":42},"    ...\n",[36,106424,106425,106427,106429],{"class":38,"line":642},[36,106426,55974],{"class":42},[36,106428,105352],{"class":54857},[36,106430,54864],{"class":42},[36,106432,106433,106435,106437],{"class":38,"line":655},[36,106434,55342],{"class":42},[36,106436,104554],{"class":54857},[36,106438,54864],{"class":42},[19,106440,106441,106443,106444,106446,106447,106450],{},[33,106442,55357],{}," 表示刚体。",[33,106445,104650],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[33,106448,106449],{},"joint"," 表示刚体相对父刚体如何运动。",[318,106452,106453],{"id":106453},"层级结构非常重要",[19,106455,106456],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[26,106458,106461],{"className":106459,"code":106460,"language":80,"meta":31},[78],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[33,106462,106460],{"__ignoreMap":31},[19,106464,106465,324,106468,106471,106472,106475],{},[33,106466,106467],{},"red_box_geom",[33,106469,106470],{},"box_center"," 都属于 ",[33,106473,106474],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[26,106477,106479],{"className":56624,"code":106478,"language":56626,"meta":31,"style":31},"\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",[33,106480,106481,106501,106515,106535],{"__ignoreMap":31},[36,106482,106483,106485,106487,106489,106491,106493,106495,106497,106499],{"class":38,"line":39},[36,106484,393],{"class":42},[36,106486,55357],{"class":54857},[36,106488,18576],{"class":101},[36,106490,47],{"class":42},[36,106492,57048],{"class":105},[36,106494,104636],{"class":101},[36,106496,47],{"class":42},[36,106498,104641],{"class":105},[36,106500,54864],{"class":42},[36,106502,106503,106505,106507,106509,106511,106513],{"class":38,"line":53},[36,106504,55701],{"class":42},[36,106506,105132],{"class":54857},[36,106508,18576],{"class":101},[36,106510,47],{"class":42},[36,106512,105472],{"class":105},[36,106514,104674],{"class":42},[36,106516,106517,106519,106521,106523,106525,106527,106529,106531,106533],{"class":38,"line":196},[36,106518,55701],{"class":42},[36,106520,104650],{"class":54857},[36,106522,57381],{"class":101},[36,106524,47],{"class":42},[36,106526,57048],{"class":105},[36,106528,104666],{"class":101},[36,106530,47],{"class":42},[36,106532,104671],{"class":105},[36,106534,104674],{"class":42},[36,106536,106537,106539,106541],{"class":38,"line":642},[36,106538,55342],{"class":42},[36,106540,55357],{"class":54857},[36,106542,54864],{"class":42},[19,106544,106545],{},"含义:",[211,106547,106548,106554,106559,106562],{},[214,106549,106550,106551,106553],{},"创建名为 ",[33,106552,57271],{}," 的刚体",[214,106555,106556,106557],{},"初始位置在世界坐标 ",[33,106558,104699],{},[214,106560,106561],{},"它有一个自由关节",[214,106563,106564],{},"它有一个盒子几何体",[318,106566,106567],{"id":106567},"坐标怎么理解",[19,106569,106570],{},"MuJoCo 默认使用三维坐标：",[26,106572,106575],{"className":106573,"code":106574,"language":80,"meta":31},[78],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[33,106576,106574],{"__ignoreMap":31},[19,106578,447],{},[26,106580,106582],{"className":56624,"code":106581,"language":56626,"meta":31,"style":31},"pos=\"0 0 1\"\n",[33,106583,106584],{"__ignoreMap":31},[36,106585,106586],{"class":38,"line":39},[36,106587,106581],{"class":42},[19,106589,106590],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[318,106592,106594],{"id":106593},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,106596,106597,106598,86084,106601,106603],{},"不同 ",[33,106599,106600],{},"type",[33,106602,1476],{}," 含义不同：",[248,106605,106606,106621],{},[251,106607,106608],{},[254,106609,106610,106614,106619],{},[257,106611,106612],{"align":259},[33,106613,106600],{},[257,106615,106616,106618],{"align":259},[33,106617,1476],{}," 示例",[257,106620,343],{"align":259},[265,106622,106623,106637,106652,106671],{},[254,106624,106625,106629,106634],{},[270,106626,106627],{"align":259},[33,106628,57271],{},[270,106630,106631],{"align":259},[33,106632,106633],{},"size=\"0.1 0.2 0.3\"",[270,106635,106636],{"align":259},"x\u002Fy\u002Fz 半边长，不是完整长度",[254,106638,106639,106644,106649],{},[270,106640,106641],{"align":259},[33,106642,106643],{},"sphere",[270,106645,106646],{"align":259},[33,106647,106648],{},"size=\"0.1\"",[270,106650,106651],{"align":259},"球半径",[254,106653,106654,106659,106664],{},[270,106655,106656],{"align":259},[33,106657,106658],{},"capsule",[270,106660,106661],{"align":259},[33,106662,106663],{},"size=\"0.03\"",[270,106665,106666,106667,106670],{"align":259},"胶囊半径，长度常用 ",[33,106668,106669],{},"fromto"," 指定",[254,106672,106673,106678,106683],{},[270,106674,106675],{"align":259},[33,106676,106677],{},"plane",[270,106679,106680],{"align":259},[33,106681,106682],{},"size=\"3 3 0.1\"",[270,106684,106685],{"align":259},"可视平面大小，通常当地面",[19,106687,106688,106689,106691,106692,106694],{},"最容易踩坑的是 box：",[33,106690,105535],{}," 表示边长大约是 ",[33,106693,35623],{},"，因为 MuJoCo 用的是半边长。",[318,106696,106698],{"id":106697},"site-是什么","site 是什么",[19,106700,106701,106704],{},[33,106702,106703],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[211,106706,106707,106710,106713,106716],{},[214,106708,106709],{},"标记机械臂末端。",[214,106711,106712],{},"标记目标位置。",[214,106714,106715],{},"放传感器或相机参考点。",[214,106717,106718],{},"在 Python 中读取某个关键点的世界坐标。",[19,106720,106721,106722,324,106725,106728],{},"在后面的 Reacher 任务中，",[33,106723,106724],{},"tip",[33,106726,106727],{},"target"," 就会用 site 表示。",[14,106730,601],{"id":600},[26,106732,106734],{"className":28,"code":106733,"language":30,"meta":31,"style":31},"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",[33,106735,106736,106742,106752,106756,106760,106768,106773,106777,106781,106785,106790,106794,106799,106804,106809,106814,106818,106822,106826,106830,106834,106838,106850,106862,106870,106874,106889,106904,106908,106921,106935,106948,106961,106965,106981,106985,106989,107000,107012,107024,107036,107040,107044,107056],{"__ignoreMap":31},[36,106737,106738,106740],{"class":38,"line":39},[36,106739,611],{"class":46},[36,106741,627],{"class":42},[36,106743,106744,106746,106748,106750],{"class":38,"line":53},[36,106745,611],{"class":46},[36,106747,634],{"class":42},[36,106749,617],{"class":46},[36,106751,639],{"class":42},[36,106753,106754],{"class":38,"line":196},[36,106755,659],{"emptyLinePlaceholder":658},[36,106757,106758],{"class":38,"line":642},[36,106759,659],{"emptyLinePlaceholder":658},[36,106761,106762,106764,106766],{"class":38,"line":655},[36,106763,670],{"class":112},[36,106765,673],{"class":46},[36,106767,676],{"class":105},[36,106769,106770],{"class":38,"line":662},[36,106771,106772],{"class":105},"\u003Cmujoco model=\"xml_basic\">\n",[36,106774,106775],{"class":38,"line":667},[36,106776,104852],{"class":105},[36,106778,106779],{"class":38,"line":679},[36,106780,659],{"emptyLinePlaceholder":658},[36,106782,106783],{"class":38,"line":685},[36,106784,699],{"class":105},[36,106786,106787],{"class":38,"line":691},[36,106788,106789],{"class":105},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[36,106791,106792],{"class":38,"line":696},[36,106793,659],{"emptyLinePlaceholder":658},[36,106795,106796],{"class":38,"line":702},[36,106797,106798],{"class":105},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[36,106800,106801],{"class":38,"line":708},[36,106802,106803],{"class":105},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[36,106805,106806],{"class":38,"line":713},[36,106807,106808],{"class":105},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,106810,106811],{"class":38,"line":719},[36,106812,106813],{"class":105},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[36,106815,106816],{"class":38,"line":725},[36,106817,769],{"class":105},[36,106819,106820],{"class":38,"line":731},[36,106821,775],{"class":105},[36,106823,106824],{"class":38,"line":736},[36,106825,810],{"class":105},[36,106827,106828],{"class":38,"line":742},[36,106829,816],{"class":105},[36,106831,106832],{"class":38,"line":748},[36,106833,659],{"emptyLinePlaceholder":658},[36,106835,106836],{"class":38,"line":754},[36,106837,659],{"emptyLinePlaceholder":658},[36,106839,106840,106842,106844,106846,106848],{"class":38,"line":760},[36,106841,1820],{"class":46},[36,106843,1823],{"class":101},[36,106845,1826],{"class":42},[36,106847,885],{"class":112},[36,106849,888],{"class":42},[36,106851,106852,106854,106856,106858,106860],{"class":38,"line":766},[36,106853,104925],{"class":42},[36,106855,47],{"class":46},[36,106857,917],{"class":42},[36,106859,670],{"class":112},[36,106861,922],{"class":42},[36,106863,106864,106866,106868],{"class":38,"line":772},[36,106865,104938],{"class":42},[36,106867,47],{"class":46},[36,106869,104943],{"class":42},[36,106871,106872],{"class":38,"line":778},[36,106873,659],{"emptyLinePlaceholder":658},[36,106875,106876,106879,106881,106884,106887],{"class":38,"line":783},[36,106877,106878],{"class":42},"    box_body_id ",[36,106880,47],{"class":46},[36,106882,106883],{"class":42}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[36,106885,106886],{"class":105},"\"red_box\"",[36,106888,922],{"class":42},[36,106890,106891,106894,106896,106899,106902],{"class":38,"line":789},[36,106892,106893],{"class":42},"    site_id ",[36,106895,47],{"class":46},[36,106897,106898],{"class":42}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[36,106900,106901],{"class":105},"\"box_center\"",[36,106903,922],{"class":42},[36,106905,106906],{"class":38,"line":795},[36,106907,659],{"emptyLinePlaceholder":658},[36,106909,106910,106912,106915,106917,106919],{"class":38,"line":801},[36,106911,3752],{"class":46},[36,106913,106914],{"class":42}," box_body_id ",[36,106916,393],{"class":46},[36,106918,1004],{"class":112},[36,106920,888],{"class":42},[36,106922,106923,106926,106928,106930,106933],{"class":38,"line":807},[36,106924,106925],{"class":46},"        raise",[36,106927,1026],{"class":112},[36,106929,495],{"class":42},[36,106931,106932],{"class":105},"\"body red_box not found\"",[36,106934,922],{"class":42},[36,106936,106937,106939,106942,106944,106946],{"class":38,"line":813},[36,106938,3752],{"class":46},[36,106940,106941],{"class":42}," site_id ",[36,106943,393],{"class":46},[36,106945,1004],{"class":112},[36,106947,888],{"class":42},[36,106949,106950,106952,106954,106956,106959],{"class":38,"line":819},[36,106951,106925],{"class":46},[36,106953,1026],{"class":112},[36,106955,495],{"class":42},[36,106957,106958],{"class":105},"\"site box_center not found\"",[36,106960,922],{"class":42},[36,106962,106963],{"class":38,"line":824},[36,106964,659],{"emptyLinePlaceholder":658},[36,106966,106967,106969,106971,106973,106975,106977,106979],{"class":38,"line":829},[36,106968,1909],{"class":46},[36,106970,1616],{"class":42},[36,106972,1619],{"class":46},[36,106974,1622],{"class":112},[36,106976,495],{"class":42},[36,106978,5445],{"class":112},[36,106980,848],{"class":42},[36,106982,106983],{"class":38,"line":851},[36,106984,105032],{"class":42},[36,106986,106987],{"class":38,"line":868},[36,106988,659],{"emptyLinePlaceholder":658},[36,106990,106991,106993,106995,106998],{"class":38,"line":873},[36,106992,1867],{"class":112},[36,106994,495],{"class":42},[36,106996,106997],{"class":105},"\"simulation time:\"",[36,106999,104995],{"class":42},[36,107001,107002,107004,107006,107009],{"class":38,"line":891},[36,107003,1867],{"class":112},[36,107005,495],{"class":42},[36,107007,107008],{"class":105},"\"box body position:\"",[36,107010,107011],{"class":42},", data.xpos[box_body_id].copy())\n",[36,107013,107014,107016,107018,107021],{"class":38,"line":906},[36,107015,1867],{"class":112},[36,107017,495],{"class":42},[36,107019,107020],{"class":105},"\"site position:\"",[36,107022,107023],{"class":42},", data.site_xpos[site_id].copy())\n",[36,107025,107026,107028,107030,107033],{"class":38,"line":925},[36,107027,1867],{"class":112},[36,107029,495],{"class":42},[36,107031,107032],{"class":105},"\"box qpos:\"",[36,107034,107035],{"class":42},", np.array(data.qpos))\n",[36,107037,107038],{"class":38,"line":943},[36,107039,659],{"emptyLinePlaceholder":658},[36,107041,107042],{"class":38,"line":948},[36,107043,659],{"emptyLinePlaceholder":658},[36,107045,107046,107048,107050,107052,107054],{"class":38,"line":971},[36,107047,2067],{"class":46},[36,107049,2070],{"class":112},[36,107051,2073],{"class":46},[36,107053,2076],{"class":105},[36,107055,888],{"class":42},[36,107057,107058],{"class":38,"line":992},[36,107059,2084],{"class":42},[19,107061,2087],{},[26,107063,107065],{"className":92,"code":107064,"language":94,"meta":31,"style":31},"touch ch2_xml_basic.py\n",[33,107066,107067],{"__ignoreMap":31},[36,107068,107069,107071],{"class":38,"line":39},[36,107070,2097],{"class":101},[36,107072,107073],{"class":105}," ch2_xml_basic.py\n",[19,107075,105810],{},[26,107077,107079],{"className":92,"code":107078,"language":94,"meta":31,"style":31},"python ch2_xml_basic.py\n",[33,107080,107081],{"__ignoreMap":31},[36,107082,107083,107085],{"class":38,"line":39},[36,107084,30],{"class":101},[36,107086,107073],{"class":105},[318,107088,2117],{"id":2117},[19,107090,107091],{},"用名字查找 body：",[26,107093,107095],{"className":28,"code":107094,"language":30,"meta":31,"style":31},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[33,107096,107097],{"__ignoreMap":31},[36,107098,107099,107102,107104,107106,107108],{"class":38,"line":39},[36,107100,107101],{"class":42},"box_body_id ",[36,107103,47],{"class":46},[36,107105,106883],{"class":42},[36,107107,106886],{"class":105},[36,107109,922],{"class":42},[19,107111,107112],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,107114,107115],{},"用名字查找 site：",[26,107117,107119],{"className":28,"code":107118,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[33,107120,107121],{"__ignoreMap":31},[36,107122,107123,107126,107128,107130,107132],{"class":38,"line":39},[36,107124,107125],{"class":42},"site_id ",[36,107127,47],{"class":46},[36,107129,106898],{"class":42},[36,107131,106901],{"class":105},[36,107133,922],{"class":42},[19,107135,107136,107137,107140,107141,107144],{},"注意第二个参数是对象类型。查 body 就用 ",[33,107138,107139],{},"mjOBJ_BODY","，查 site 就用 ",[33,107142,107143],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,107146,107147],{},"读取世界坐标：",[26,107149,107151],{"className":28,"code":107150,"language":30,"meta":31,"style":31},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[33,107152,107153,107158],{"__ignoreMap":31},[36,107154,107155],{"class":38,"line":39},[36,107156,107157],{"class":42},"data.xpos[box_body_id]\n",[36,107159,107160],{"class":38,"line":53},[36,107161,107162],{"class":42},"data.site_xpos[site_id]\n",[19,107164,107165,107168,107169,107172],{},[33,107166,107167],{},"xpos"," 是 body 的世界坐标，",[33,107170,107171],{},"site_xpos"," 是 site 的世界坐标。",[318,107174,2338],{"id":2338},[26,107176,107178],{"className":28,"code":107177,"language":30,"meta":31,"style":31},"import mujoco\nimport numpy as np\n",[33,107179,107180,107186],{"__ignoreMap":31},[36,107181,107182,107184],{"class":38,"line":39},[36,107183,611],{"class":46},[36,107185,627],{"class":42},[36,107187,107188,107190,107192,107194],{"class":38,"line":53},[36,107189,611],{"class":46},[36,107191,634],{"class":42},[36,107193,617],{"class":46},[36,107195,639],{"class":42},[19,107197,107198,107199,107202,107203,107206,107207,4087,107210,224],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[33,107200,107201],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[33,107204,107205],{},"as np"," 是习惯写法，后面就可以写 ",[33,107208,107209],{},"np.array(...)",[33,107211,107212],{},"np.round(...)",[26,107214,107215],{"className":28,"code":105107,"language":30,"meta":31,"style":31},[33,107216,107217,107225,107229],{"__ignoreMap":31},[36,107218,107219,107221,107223],{"class":38,"line":39},[36,107220,670],{"class":112},[36,107222,673],{"class":46},[36,107224,676],{"class":105},[36,107226,107227],{"class":38,"line":53},[36,107228,105122],{"class":105},[36,107230,107231],{"class":38,"line":196},[36,107232,816],{"class":105},[19,107234,107235,107236,224],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[33,107237,107238],{},"mujoco.MjModel.from_xml_string(XML)",[26,107240,107242],{"className":56624,"code":107241,"language":56626,"meta":31,"style":31},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,107243,107244],{"__ignoreMap":31},[36,107245,107246,107248,107250,107252,107254,107256,107258,107260,107263,107265,107267,107270,107272,107274,107277],{"class":38,"line":39},[36,107247,393],{"class":42},[36,107249,106703],{"class":54857},[36,107251,18576],{"class":101},[36,107253,47],{"class":42},[36,107255,106901],{"class":105},[36,107257,104636],{"class":101},[36,107259,47],{"class":42},[36,107261,107262],{"class":105},"\"0 0 0\"",[36,107264,104666],{"class":101},[36,107266,47],{"class":42},[36,107268,107269],{"class":105},"\"0.03\"",[36,107271,82321],{"class":101},[36,107273,47],{"class":42},[36,107275,107276],{"class":105},"\"0 1 0 1\"",[36,107278,104674],{"class":42},[19,107280,107281,107283,107284,107287,107288,107290,107291,107294],{},[33,107282,106703],{}," 是标记点。",[33,107285,107286],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[33,107289,106663],{}," 表示显示出来的小球大小。",[33,107292,107293],{},"rgba=\"0 1 0 1\""," 表示绿色。",[26,107296,107297],{"className":28,"code":107094,"language":30,"meta":31,"style":31},[33,107298,107299],{"__ignoreMap":31},[36,107300,107301,107303,107305,107307,107309],{"class":38,"line":39},[36,107302,107101],{"class":42},[36,107304,47],{"class":46},[36,107306,106883],{"class":42},[36,107308,106886],{"class":105},[36,107310,922],{"class":42},[19,107312,107313,107314,107316],{},"这行的作用是：根据名字 ",[33,107315,106886],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,107318,107319],{},"拆开看：",[211,107321,107322,107328,107333,107339],{},[214,107323,107324,107327],{},[33,107325,107326],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[214,107329,107330,107332],{},[33,107331,105596],{}," 是被查询的模型。",[214,107334,107335,107338],{},[33,107336,107337],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[214,107340,107341,107343],{},[33,107342,106886],{}," 是 XML 里写的名字。",[26,107345,107346],{"className":28,"code":107118,"language":30,"meta":31,"style":31},[33,107347,107348],{"__ignoreMap":31},[36,107349,107350,107352,107354,107356,107358],{"class":38,"line":39},[36,107351,107125],{"class":42},[36,107353,47],{"class":46},[36,107355,106898],{"class":42},[36,107357,106901],{"class":105},[36,107359,922],{"class":42},[19,107361,107362,107363,224],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[33,107364,106901],{},[26,107366,107368],{"className":28,"code":107367,"language":30,"meta":31,"style":31},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[33,107369,107370,107382],{"__ignoreMap":31},[36,107371,107372,107374,107376,107378,107380],{"class":38,"line":39},[36,107373,2067],{"class":46},[36,107375,106914],{"class":42},[36,107377,393],{"class":46},[36,107379,1004],{"class":112},[36,107381,888],{"class":42},[36,107383,107384,107387,107389,107391,107393],{"class":38,"line":53},[36,107385,107386],{"class":46},"    raise",[36,107388,1026],{"class":112},[36,107390,495],{"class":42},[36,107392,106932],{"class":105},[36,107394,922],{"class":42},[19,107396,107397,107399,107400,107403,107404,107407,107408,107411],{},[33,107398,2067],{}," 是条件判断。",[33,107401,107402],{},"mj_name2id"," 找不到对象时会返回 ",[33,107405,107406],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[33,107409,107410],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[26,107413,107415],{"className":28,"code":107414,"language":30,"meta":31,"style":31},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[33,107416,107417,107433],{"__ignoreMap":31},[36,107418,107419,107421,107423,107425,107427,107429,107431],{"class":38,"line":39},[36,107420,3120],{"class":46},[36,107422,1616],{"class":42},[36,107424,1619],{"class":46},[36,107426,1622],{"class":112},[36,107428,495],{"class":42},[36,107430,5445],{"class":112},[36,107432,848],{"class":42},[36,107434,107435],{"class":38,"line":53},[36,107436,105211],{"class":42},[19,107438,107439],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[26,107441,107443],{"className":28,"code":107442,"language":30,"meta":31,"style":31},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[33,107444,107445],{"__ignoreMap":31},[36,107446,107447,107449,107451,107453],{"class":38,"line":39},[36,107448,3486],{"class":112},[36,107450,495],{"class":42},[36,107452,107008],{"class":105},[36,107454,107011],{"class":42},[19,107456,107457,107459,107460,107463],{},[33,107458,104609],{}," 保存所有 body 的世界坐标。",[33,107461,107462],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[26,107465,107467],{"className":28,"code":107466,"language":30,"meta":31,"style":31},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[33,107468,107469],{"__ignoreMap":31},[36,107470,107471,107473,107475,107477],{"class":38,"line":39},[36,107472,3486],{"class":112},[36,107474,495],{"class":42},[36,107476,107020],{"class":105},[36,107478,107023],{"class":42},[19,107480,107481,107484,107485,107487],{},[33,107482,107483],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[33,107486,106470],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[26,107489,107491],{"className":28,"code":107490,"language":30,"meta":31,"style":31},"print(\"box qpos:\", np.array(data.qpos))\n",[33,107492,107493],{"__ignoreMap":31},[36,107494,107495,107497,107499,107501],{"class":38,"line":39},[36,107496,3486],{"class":112},[36,107498,495],{"class":42},[36,107500,107032],{"class":105},[36,107502,107035],{"class":42},[19,107504,107505,107506,107509],{},"这里打印广义位置数组。",[33,107507,107508],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,107511,3348],{"id":3347},[19,107513,107514,107515,107518,107519,224],{},"程序会输出 ",[33,107516,107517],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[33,107520,107521],{},"qpos",[19,107523,107524,107526,107527,107530,107531,107534],{},[33,107525,107462],{}," 是 body 的世界坐标位置。",[33,107528,107529],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[33,107532,107533],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,107536,85776,107537,86084,107539,107541],{},[33,107538,106470],{},[33,107540,107286],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,107543,107544],{},"如果你把 site 改成：",[26,107546,107548],{"className":56624,"code":107547,"language":56626,"meta":31,"style":31},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,107549,107550],{"__ignoreMap":31},[36,107551,107552,107554,107556,107558,107560,107563,107565,107567,107570,107572,107574,107576,107578,107580,107582],{"class":38,"line":39},[36,107553,393],{"class":42},[36,107555,106703],{"class":54857},[36,107557,18576],{"class":101},[36,107559,47],{"class":42},[36,107561,107562],{"class":105},"\"box_top\"",[36,107564,104636],{"class":101},[36,107566,47],{"class":42},[36,107568,107569],{"class":105},"\"0 0 0.15\"",[36,107571,104666],{"class":101},[36,107573,47],{"class":42},[36,107575,107269],{"class":105},[36,107577,82321],{"class":101},[36,107579,47],{"class":42},[36,107581,107276],{"class":105},[36,107583,104674],{"class":42},[19,107585,107586,107587,107590],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[33,107588,107589],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,107592,3382],{"id":3381},[211,107594,107595,107604,107607,107614,107620,107631],{},[214,107596,3416,107597,107599,107600,3420,107602,224],{},[33,107598,106474],{}," 的初始高度从 ",[33,107601,4092],{},[33,107603,498],{},[214,107605,107606],{},"重新运行程序。",[214,107608,107609,107610,107613],{},"观察 ",[33,107611,107612],{},"box qpos"," 和最终位置是否变化。",[214,107615,107616,107617,107619],{},"故意把 ",[33,107618,106703],{}," 名称改错，确认程序能报错。",[214,107621,3416,107622,107624,107625,3420,107627,107630],{},[33,107623,104650],{}," 的颜色 ",[33,107626,105543],{},[33,107628,107629],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[214,107632,3416,107633,86084,107635,3420,107638,107641,107642,107644],{},[33,107634,106470],{},[33,107636,107637],{},"pos",[33,107639,107640],{},"0 0 0.2","，观察 ",[33,107643,107589],{}," 如何变化。",[14,107646,3444],{"id":3443},[318,107648,107650],{"id":107649},"xml-error-schema-violation",[33,107651,107652],{},"XML Error: Schema violation",[19,107654,107655],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[318,107657,107659,84844,107661],{"id":107658},"mj_name2id-返回-1",[33,107660,107402],{},[33,107662,107406],{},[19,107664,107665,107666,107669],{},"说明名字没有找到。检查 XML 中 ",[33,107667,107668],{},"name=\"...\"","，并确认对象类型正确。",[318,107671,107672],{"id":107672},"物体不下落",[19,107674,3476],{},[211,107676,107677,107682,107687],{},[214,107678,107679,107680],{},"body 是否有 ",[33,107681,105132],{},[214,107683,107684,107685],{},"gravity 是否为 ",[33,107686,106085],{},[214,107688,107689,107690,107692],{},"body 是否被固定在 ",[33,107691,105352],{}," 中",[318,107694,107695],{"id":107695},"坐标看起来不符合预期",[19,107697,107698],{},"先区分两种坐标：",[248,107700,107701,107710],{},[251,107702,107703],{},[254,107704,107705,107708],{},[257,107706,107707],{"align":259},"坐标",[257,107709,343],{"align":259},[265,107711,107712,107722],{},[254,107713,107714,107719],{},[270,107715,107716,107717],{"align":259},"XML 里的 ",[33,107718,107637],{},[270,107720,107721],{"align":259},"相对父 body 的局部坐标",[254,107723,107724,107730],{},[270,107725,107726,28594,107728],{"align":259},[33,107727,104609],{},[33,107729,107483],{},[270,107731,107732],{"align":259},"仿真更新后的世界坐标",[19,107734,107735,107736,107738,107739,86093,107742,107744],{},"如果你修改了 ",[33,107737,104601],{},"，但还没调用 ",[33,107740,107741],{},"mj_forward",[33,107743,596],{},"，世界坐标可能还没有更新。",[14,107746,106103],{"id":106102},[19,107748,107749],{},"MJCF 建模先掌握四件事：",[211,107751,107752,107757,107762,107767],{},[214,107753,107754,107756],{},[33,107755,55357],{}," 表示刚体层级。",[214,107758,107759,107761],{},[33,107760,104650],{}," 表示形状、碰撞和质量。",[214,107763,107764,107766],{},[33,107765,106449],{}," 决定 body 能不能动、怎么动。",[214,107768,107769,107771],{},[33,107770,106703],{}," 用来标记关键点，方便 Python 读取位置。",[19,107773,107774],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[3785,107776,107777],{},"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":31,"searchDepth":53,"depth":53,"links":107779},[107780,107781,107782,107788,107792,107793,107794,107801],{"id":16,"depth":53,"text":17},{"id":85,"depth":53,"text":86},{"id":242,"depth":53,"text":243,"children":107783},[107784,107785,107786,107787],{"id":106453,"depth":196,"text":106453},{"id":106567,"depth":196,"text":106567},{"id":106593,"depth":196,"text":106594},{"id":106697,"depth":196,"text":106698},{"id":600,"depth":53,"text":601,"children":107789},[107790,107791],{"id":2117,"depth":196,"text":2117},{"id":2338,"depth":196,"text":2338},{"id":3347,"depth":53,"text":3348},{"id":3381,"depth":53,"text":3382},{"id":3443,"depth":53,"text":3444,"children":107795},[107796,107797,107799,107800],{"id":107649,"depth":196,"text":107652},{"id":107658,"depth":196,"text":107798},"mj_name2id 返回 -1",{"id":107672,"depth":196,"text":107672},{"id":107695,"depth":196,"text":107695},{"id":106102,"depth":53,"text":106103},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":106150,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":107808,"title":107809,"body":107810,"description":31,"extension":3817,"meta":109297,"navigation":658,"path":109298,"seo":109299,"stem":109300,"__hash__":109301},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":107811,"toc":109269},[107812,107815,107817,107820,107823,107861,107864,107870,107873,107875,107877,107901,107903,107917,107919,107960,107962,107986,107988,107991,108000,108009,108012,108021,108029,108038,108041,108051,108054,108105,108112,108118,108125,108173,108176,108195,108198,108206,108210,108219,108251,108253,108601,108603,108615,108617,108628,108630,108633,108654,108660,108663,108688,108698,108701,108709,108712,108715,108736,108747,108749,108769,108772,108793,108802,108821,108827,108852,108855,108869,108876,108900,108903,108911,108920,108936,108948,108956,108965,108967,108969,108993,108998,109001,109023,109025,109064,109066,109072,109074,109082,109085,109088,109100,109141,109148,109159,109166,109169,109218,109221,109224,109230,109232,109237,109263,109266],[10,107813,107809],{"id":107814},"_3python-控制接口读取状态与推进仿真",[14,107816,17],{"id":16},[19,107818,107819],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,107821,107822],{},"你将学习:",[211,107824,107825,107830,107835,107839,107844,107855],{},[214,107826,107827],{},[33,107828,107829],{},"MjModel.from_xml_string",[214,107831,107832],{},[33,107833,107834],{},"MjData(model)",[214,107836,107837],{},[33,107838,596],{},[214,107840,107841],{},[33,107842,107843],{},"mj_resetData",[214,107845,107846,107847,4087,107849,4087,107852],{},"读取 ",[33,107848,107521],{},[33,107850,107851],{},"qvel",[33,107853,107854],{},"ctrl",[214,107856,107857,107858],{},"使用 ",[33,107859,107860],{},"model.opt.timestep",[19,107862,107863],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[26,107865,107868],{"className":107866,"code":107867,"language":80,"meta":31},[78],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[33,107869,107867],{"__ignoreMap":31},[19,107871,107872],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,107874,86],{"id":85},[19,107876,89],{},[26,107878,107879],{"className":92,"code":93,"language":94,"meta":31,"style":31},[33,107880,107881],{"__ignoreMap":31},[36,107882,107883,107885,107887,107889,107891,107893,107895,107897,107899],{"class":38,"line":39},[36,107884,102],{"class":101},[36,107886,106],{"class":105},[36,107888,109],{"class":105},[36,107890,113],{"class":112},[36,107892,116],{"class":105},[36,107894,119],{"class":105},[36,107896,122],{"class":105},[36,107898,125],{"class":105},[36,107900,128],{"class":105},[19,107902,131],{},[26,107904,107905],{"className":92,"code":104459,"language":94,"meta":31,"style":31},[33,107906,107907],{"__ignoreMap":31},[36,107908,107909,107911,107913,107915],{"class":38,"line":39},[36,107910,141],{"class":101},[36,107912,109],{"class":105},[36,107914,146],{"class":105},[36,107916,104472],{"class":105},[19,107918,155],{},[26,107920,107922],{"className":92,"code":107921,"language":94,"meta":31,"style":31},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[33,107923,107924,107941,107950],{"__ignoreMap":31},[36,107925,107926,107928,107930,107932,107935,107937,107939],{"class":38,"line":39},[36,107927,165],{"class":101},[36,107929,168],{"class":105},[36,107931,171],{"class":112},[36,107933,107934],{"class":105}," mujoco-python-api",[36,107936,177],{"class":105},[36,107938,180],{"class":112},[36,107940,183],{"class":112},[36,107942,107943,107945,107947],{"class":38,"line":53},[36,107944,165],{"class":101},[36,107946,190],{"class":105},[36,107948,107949],{"class":105}," mujoco-python-api\n",[36,107951,107952,107954,107956,107958],{"class":38,"line":196},[36,107953,141],{"class":101},[36,107955,109],{"class":105},[36,107957,146],{"class":105},[36,107959,104472],{"class":105},[19,107961,209],{},[211,107963,107964,107971,107980],{},[214,107965,107966,324,107968,107970],{},[33,107967,104221],{},[33,107969,104226],{}," 是官方 Python bindings 的类名。",[214,107972,107973,107974,107977,107978,224],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[33,107975,107976],{},"mjModel"," 在 Python 中是 ",[33,107979,104254],{},[214,107981,107982,107983,224],{},"不要使用 ",[33,107984,107985],{},"sim = mujoco_py.MjSim(...)",[14,107987,243],{"id":242},[19,107989,107990],{},"仿真推进核心代码:",[26,107992,107994],{"className":28,"code":107993,"language":30,"meta":31,"style":31},"mujoco.mj_step(model, data)\n",[33,107995,107996],{"__ignoreMap":31},[36,107997,107998],{"class":38,"line":39},[36,107999,107993],{"class":42},[19,108001,108002,108003,4087,108005,4087,108007,224],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[33,108004,104601],{},[33,108006,104604],{},[33,108008,104598],{},[19,108010,108011],{},"重置仿真:",[26,108013,108015],{"className":28,"code":108014,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\n",[33,108016,108017],{"__ignoreMap":31},[36,108018,108019],{"class":38,"line":39},[36,108020,108014],{"class":42},[19,108022,108023,108024,86093,108026,108028],{},"如果手动修改了 ",[33,108025,104601],{},[33,108027,104604],{},"，通常应调用:",[26,108030,108032],{"className":28,"code":108031,"language":30,"meta":31,"style":31},"mujoco.mj_forward(model, data)\n",[33,108033,108034],{"__ignoreMap":31},[36,108035,108036],{"class":38,"line":39},[36,108037,108031],{"class":42},[19,108039,108040],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[318,108042,108044,4087,108046,4087,108048,108050],{"id":108043},"qposqvelctrl-是什么",[33,108045,107521],{},[33,108047,107851],{},[33,108049,107854],{}," 是什么",[19,108052,108053],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[248,108055,108056,108067],{},[251,108057,108058],{},[254,108059,108060,108062,108064],{},[257,108061,340],{"align":259},[257,108063,343],{"align":259},[257,108065,108066],{"align":259},"谁来修改",[265,108068,108069,108081,108093],{},[254,108070,108071,108075,108078],{},[270,108072,108073],{"align":259},[33,108074,104601],{},[270,108076,108077],{"align":259},"广义位置，例如小车位置、关节角、自由物体位置姿态",[270,108079,108080],{"align":259},"MuJoCo 更新，也可以手动设置初始状态",[254,108082,108083,108087,108090],{},[270,108084,108085],{"align":259},[33,108086,104604],{},[270,108088,108089],{"align":259},"广义速度，例如小车速度、关节角速度",[270,108091,108092],{"align":259},"MuJoCo 更新，也可以手动清零",[254,108094,108095,108099,108102],{},[270,108096,108097],{"align":259},[33,108098,3612],{},[270,108100,108101],{"align":259},"actuator 的控制输入",[270,108103,108104],{"align":259},"主要由你的控制代码写入",[19,108106,12706,108107,324,108109,108111],{},[33,108108,107521],{},[33,108110,107851],{}," 不一定同维。自由刚体就是典型例子：",[26,108113,108116],{"className":108114,"code":108115,"language":80,"meta":31},[78],"freejoint: qpos 7 维，qvel 6 维\n",[33,108117,108115],{"__ignoreMap":31},[318,108119,108121,324,108123,328],{"id":108120},"mj_step-和-mj_forward-的区别",[33,108122,596],{},[33,108124,107741],{},[248,108126,108127,108140],{},[251,108128,108129],{},[254,108130,108131,108134,108137],{},[257,108132,108133],{"align":259},"函数",[257,108135,108136],{"align":259},"是否推进时间",[257,108138,108139],{"align":259},"什么时候用",[265,108141,108142,108155],{},[254,108143,108144,108149,108152],{},[270,108145,108146],{"align":259},[33,108147,108148],{},"mj_step(model, data)",[270,108150,108151],{"align":259},"是",[270,108153,108154],{"align":259},"正常仿真循环，每调用一次前进一步",[254,108156,108157,108162,108165],{},[270,108158,108159],{"align":259},[33,108160,108161],{},"mj_forward(model, data)",[270,108163,108164],{"align":259},"否",[270,108166,108167,108168,4087,108170,108172],{"align":259},"手动改了 ",[33,108169,107521],{},[33,108171,107851],{}," 后，刷新派生量",[19,108174,108175],{},"例如你写：",[26,108177,108179],{"className":28,"code":108178,"language":30,"meta":31,"style":31},"data.qpos[2] = 2.0\n",[33,108180,108181],{"__ignoreMap":31},[36,108182,108183,108186,108188,108190,108192],{"class":38,"line":39},[36,108184,108185],{"class":42},"data.qpos[",[36,108187,498],{"class":112},[36,108189,8140],{"class":42},[36,108191,47],{"class":46},[36,108193,108194],{"class":112}," 2.0\n",[19,108196,108197],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[26,108199,108200],{"className":28,"code":108031,"language":30,"meta":31,"style":31},[33,108201,108202],{"__ignoreMap":31},[36,108203,108204],{"class":38,"line":39},[36,108205,108031],{"class":42},[318,108207,108209],{"id":108208},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,108211,108212,108215,108216,108218],{},[33,108213,108214],{},"mujoco.mj_resetData(model, data)"," 会把 ",[33,108217,36961],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[26,108220,108222],{"className":28,"code":108221,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[33,108223,108224,108228,108238,108247],{"__ignoreMap":31},[36,108225,108226],{"class":38,"line":39},[36,108227,108014],{"class":42},[36,108229,108230,108233,108235],{"class":38,"line":53},[36,108231,108232],{"class":42},"data.qpos[:] ",[36,108234,47],{"class":46},[36,108236,108237],{"class":42}," random_qpos\n",[36,108239,108240,108243,108245],{"class":38,"line":196},[36,108241,108242],{"class":42},"data.qvel[:] ",[36,108244,47],{"class":46},[36,108246,1496],{"class":112},[36,108248,108249],{"class":38,"line":642},[36,108250,108031],{"class":42},[14,108252,601],{"id":600},[26,108254,108256],{"className":28,"code":108255,"language":30,"meta":31,"style":31},"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",[33,108257,108258,108264,108274,108278,108282,108290,108295,108299,108303,108307,108312,108316,108321,108326,108331,108335,108339,108343,108347,108351,108355,108374,108381,108393,108404,108420,108436,108440,108444,108456,108468,108476,108480,108491,108495,108511,108515,108519,108528,108532,108537,108546,108550,108563,108568,108577,108581,108585,108597],{"__ignoreMap":31},[36,108259,108260,108262],{"class":38,"line":39},[36,108261,611],{"class":46},[36,108263,627],{"class":42},[36,108265,108266,108268,108270,108272],{"class":38,"line":53},[36,108267,611],{"class":46},[36,108269,634],{"class":42},[36,108271,617],{"class":46},[36,108273,639],{"class":42},[36,108275,108276],{"class":38,"line":196},[36,108277,659],{"emptyLinePlaceholder":658},[36,108279,108280],{"class":38,"line":642},[36,108281,659],{"emptyLinePlaceholder":658},[36,108283,108284,108286,108288],{"class":38,"line":655},[36,108285,670],{"class":112},[36,108287,673],{"class":46},[36,108289,676],{"class":105},[36,108291,108292],{"class":38,"line":662},[36,108293,108294],{"class":105},"\u003Cmujoco model=\"state_api\">\n",[36,108296,108297],{"class":38,"line":667},[36,108298,104852],{"class":105},[36,108300,108301],{"class":38,"line":679},[36,108302,659],{"emptyLinePlaceholder":658},[36,108304,108305],{"class":38,"line":685},[36,108306,699],{"class":105},[36,108308,108309],{"class":38,"line":691},[36,108310,108311],{"class":105},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[36,108313,108314],{"class":38,"line":696},[36,108315,659],{"emptyLinePlaceholder":658},[36,108317,108318],{"class":38,"line":702},[36,108319,108320],{"class":105},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[36,108322,108323],{"class":38,"line":708},[36,108324,108325],{"class":105},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[36,108327,108328],{"class":38,"line":713},[36,108329,108330],{"class":105},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[36,108332,108333],{"class":38,"line":719},[36,108334,769],{"class":105},[36,108336,108337],{"class":38,"line":725},[36,108338,775],{"class":105},[36,108340,108341],{"class":38,"line":731},[36,108342,810],{"class":105},[36,108344,108345],{"class":38,"line":736},[36,108346,816],{"class":105},[36,108348,108349],{"class":38,"line":742},[36,108350,659],{"emptyLinePlaceholder":658},[36,108352,108353],{"class":38,"line":748},[36,108354,659],{"emptyLinePlaceholder":658},[36,108356,108357,108359,108362,108365,108367,108370,108372],{"class":38,"line":754},[36,108358,1820],{"class":46},[36,108360,108361],{"class":101}," print_state",[36,108363,108364],{"class":42},"(prefix: ",[36,108366,5038],{"class":112},[36,108368,108369],{"class":42},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,108371,885],{"class":112},[36,108373,888],{"class":42},[36,108375,108376,108378],{"class":38,"line":760},[36,108377,1867],{"class":112},[36,108379,108380],{"class":42},"(prefix)\n",[36,108382,108383,108385,108387,108390],{"class":38,"line":766},[36,108384,1867],{"class":112},[36,108386,495],{"class":42},[36,108388,108389],{"class":105},"\"  timestep:\"",[36,108391,108392],{"class":42},", model.opt.timestep)\n",[36,108394,108395,108397,108399,108402],{"class":38,"line":772},[36,108396,1867],{"class":112},[36,108398,495],{"class":42},[36,108400,108401],{"class":105},"\"  time:\"",[36,108403,104995],{"class":42},[36,108405,108406,108408,108410,108413,108416,108418],{"class":38,"line":778},[36,108407,1867],{"class":112},[36,108409,495],{"class":42},[36,108411,108412],{"class":105},"\"  qpos:\"",[36,108414,108415],{"class":42},", np.round(data.qpos.copy(), ",[36,108417,4168],{"class":112},[36,108419,2005],{"class":42},[36,108421,108422,108424,108426,108429,108432,108434],{"class":38,"line":783},[36,108423,1867],{"class":112},[36,108425,495],{"class":42},[36,108427,108428],{"class":105},"\"  qvel:\"",[36,108430,108431],{"class":42},", np.round(data.qvel.copy(), ",[36,108433,4168],{"class":112},[36,108435,2005],{"class":42},[36,108437,108438],{"class":38,"line":789},[36,108439,659],{"emptyLinePlaceholder":658},[36,108441,108442],{"class":38,"line":795},[36,108443,659],{"emptyLinePlaceholder":658},[36,108445,108446,108448,108450,108452,108454],{"class":38,"line":801},[36,108447,1820],{"class":46},[36,108449,1823],{"class":101},[36,108451,1826],{"class":42},[36,108453,885],{"class":112},[36,108455,888],{"class":42},[36,108457,108458,108460,108462,108464,108466],{"class":38,"line":807},[36,108459,104925],{"class":42},[36,108461,47],{"class":46},[36,108463,917],{"class":42},[36,108465,670],{"class":112},[36,108467,922],{"class":42},[36,108469,108470,108472,108474],{"class":38,"line":813},[36,108471,104938],{"class":42},[36,108473,47],{"class":46},[36,108475,104943],{"class":42},[36,108477,108478],{"class":38,"line":819},[36,108479,659],{"emptyLinePlaceholder":658},[36,108481,108482,108485,108488],{"class":38,"line":824},[36,108483,108484],{"class":42},"    print_state(",[36,108486,108487],{"class":105},"\"initial\"",[36,108489,108490],{"class":42},", model, data)\n",[36,108492,108493],{"class":38,"line":829},[36,108494,659],{"emptyLinePlaceholder":658},[36,108496,108497,108499,108501,108503,108505,108507,108509],{"class":38,"line":851},[36,108498,1909],{"class":46},[36,108500,1616],{"class":42},[36,108502,1619],{"class":46},[36,108504,1622],{"class":112},[36,108506,495],{"class":42},[36,108508,4527],{"class":112},[36,108510,848],{"class":42},[36,108512,108513],{"class":38,"line":868},[36,108514,105032],{"class":42},[36,108516,108517],{"class":38,"line":873},[36,108518,659],{"emptyLinePlaceholder":658},[36,108520,108521,108523,108526],{"class":38,"line":891},[36,108522,108484],{"class":42},[36,108524,108525],{"class":105},"\"after 50 steps\"",[36,108527,108490],{"class":42},[36,108529,108530],{"class":38,"line":906},[36,108531,659],{"emptyLinePlaceholder":658},[36,108533,108534],{"class":38,"line":925},[36,108535,108536],{"class":42},"    mujoco.mj_resetData(model, data)\n",[36,108538,108539,108541,108544],{"class":38,"line":943},[36,108540,108484],{"class":42},[36,108542,108543],{"class":105},"\"after reset\"",[36,108545,108490],{"class":42},[36,108547,108548],{"class":38,"line":948},[36,108549,659],{"emptyLinePlaceholder":658},[36,108551,108552,108555,108557,108559,108561],{"class":38,"line":971},[36,108553,108554],{"class":42},"    data.qpos[",[36,108556,498],{"class":112},[36,108558,8140],{"class":42},[36,108560,47],{"class":46},[36,108562,108194],{"class":112},[36,108564,108565],{"class":38,"line":992},[36,108566,108567],{"class":42},"    mujoco.mj_forward(model, data)\n",[36,108569,108570,108572,108575],{"class":38,"line":1020},[36,108571,108484],{"class":42},[36,108573,108574],{"class":105},"\"after manual qpos edit\"",[36,108576,108490],{"class":42},[36,108578,108579],{"class":38,"line":1036},[36,108580,659],{"emptyLinePlaceholder":658},[36,108582,108583],{"class":38,"line":1041},[36,108584,659],{"emptyLinePlaceholder":658},[36,108586,108587,108589,108591,108593,108595],{"class":38,"line":1052},[36,108588,2067],{"class":46},[36,108590,2070],{"class":112},[36,108592,2073],{"class":46},[36,108594,2076],{"class":105},[36,108596,888],{"class":42},[36,108598,108599],{"class":38,"line":1065},[36,108600,2084],{"class":42},[19,108602,2087],{},[26,108604,108606],{"className":92,"code":108605,"language":94,"meta":31,"style":31},"touch ch3_python_state.py\n",[33,108607,108608],{"__ignoreMap":31},[36,108609,108610,108612],{"class":38,"line":39},[36,108611,2097],{"class":101},[36,108613,108614],{"class":105}," ch3_python_state.py\n",[19,108616,105810],{},[26,108618,108620],{"className":92,"code":108619,"language":94,"meta":31,"style":31},"python ch3_python_state.py\n",[33,108621,108622],{"__ignoreMap":31},[36,108623,108624,108626],{"class":38,"line":39},[36,108625,30],{"class":101},[36,108627,108614],{"class":105},[318,108629,2117],{"id":2117},[19,108631,108632],{},"打印状态的函数：",[26,108634,108636],{"className":28,"code":108635,"language":30,"meta":31,"style":31},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[33,108637,108638],{"__ignoreMap":31},[36,108639,108640,108642,108644,108646,108648,108650,108652],{"class":38,"line":39},[36,108641,1820],{"class":46},[36,108643,108361],{"class":101},[36,108645,108364],{"class":42},[36,108647,5038],{"class":112},[36,108649,108369],{"class":42},[36,108651,885],{"class":112},[36,108653,888],{"class":42},[19,108655,108656,108657,108659],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[33,108658,36961],{}," 里发生了什么。",[19,108661,108662],{},"推进 50 步：",[26,108664,108666],{"className":28,"code":108665,"language":30,"meta":31,"style":31},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[33,108667,108668,108684],{"__ignoreMap":31},[36,108669,108670,108672,108674,108676,108678,108680,108682],{"class":38,"line":39},[36,108671,3120],{"class":46},[36,108673,1616],{"class":42},[36,108675,1619],{"class":46},[36,108677,1622],{"class":112},[36,108679,495],{"class":42},[36,108681,4527],{"class":112},[36,108683,848],{"class":42},[36,108685,108686],{"class":38,"line":53},[36,108687,105211],{"class":42},[19,108689,108690,108691,108694,108695,108697],{},"由于 ",[33,108692,108693],{},"timestep=0.01","，所以 50 步后时间约为 ",[33,108696,38889],{}," 秒。",[19,108699,108700],{},"重置：",[26,108702,108703],{"className":28,"code":108014,"language":30,"meta":31,"style":31},[33,108704,108705],{"__ignoreMap":31},[36,108706,108707],{"class":38,"line":39},[36,108708,108014],{"class":42},[19,108710,108711],{},"这会把时间、位置、速度恢复到初始状态。",[19,108713,108714],{},"手动改高度：",[26,108716,108718],{"className":28,"code":108717,"language":30,"meta":31,"style":31},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[33,108719,108720,108732],{"__ignoreMap":31},[36,108721,108722,108724,108726,108728,108730],{"class":38,"line":39},[36,108723,108185],{"class":42},[36,108725,498],{"class":112},[36,108727,8140],{"class":42},[36,108729,47],{"class":46},[36,108731,108194],{"class":112},[36,108733,108734],{"class":38,"line":53},[36,108735,108031],{"class":42},[19,108737,108738,108739,108742,108743,108746],{},"这个例子里 ",[33,108740,108741],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[33,108744,108745],{},"2.0"," 表示把小球放到更高的位置。",[318,108748,2338],{"id":2338},[26,108750,108751],{"className":28,"code":108635,"language":30,"meta":31,"style":31},[33,108752,108753],{"__ignoreMap":31},[36,108754,108755,108757,108759,108761,108763,108765,108767],{"class":38,"line":39},[36,108756,1820],{"class":46},[36,108758,108361],{"class":101},[36,108760,108364],{"class":42},[36,108762,5038],{"class":112},[36,108764,108369],{"class":42},[36,108766,885],{"class":112},[36,108768,888],{"class":42},[19,108770,108771],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[211,108773,108774,108783,108788],{},[214,108775,108776,108779,108780,108782],{},[33,108777,108778],{},"prefix","：一段文字，比如 ",[33,108781,108487],{},"，用来说明现在打印的是哪个阶段。",[214,108784,108785,108787],{},[33,108786,105596],{},"：MuJoCo 模型。",[214,108789,108790,108792],{},[33,108791,36961],{},"：MuJoCo 当前状态。",[19,108794,108795,4087,108798,108801],{},[33,108796,108797],{},"prefix: str",[33,108799,108800],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[26,108803,108805],{"className":28,"code":108804,"language":30,"meta":31,"style":31},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[33,108806,108807],{"__ignoreMap":31},[36,108808,108809,108811,108813,108815,108817,108819],{"class":38,"line":39},[36,108810,3486],{"class":112},[36,108812,495],{"class":42},[36,108814,108412],{"class":105},[36,108816,108415],{"class":42},[36,108818,4168],{"class":112},[36,108820,2005],{"class":42},[19,108822,108823,108826],{},[33,108824,108825],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[26,108828,108830],{"className":28,"code":108829,"language":30,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[33,108831,108832,108844],{"__ignoreMap":31},[36,108833,108834,108836,108838,108840,108842],{"class":38,"line":39},[36,108835,105146],{"class":42},[36,108837,47],{"class":46},[36,108839,917],{"class":42},[36,108841,670],{"class":112},[36,108843,922],{"class":42},[36,108845,108846,108848,108850],{"class":38,"line":53},[36,108847,105170],{"class":42},[36,108849,47],{"class":46},[36,108851,104943],{"class":42},[19,108853,108854],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[26,108856,108858],{"className":28,"code":108857,"language":30,"meta":31,"style":31},"print_state(\"initial\", model, data)\n",[33,108859,108860],{"__ignoreMap":31},[36,108861,108862,108865,108867],{"class":38,"line":39},[36,108863,108864],{"class":42},"print_state(",[36,108866,108487],{"class":105},[36,108868,108490],{"class":42},[19,108870,108871,108872,108875],{},"调用刚才定义的 ",[33,108873,108874],{},"print_state"," 函数，打印初始状态。",[26,108877,108878],{"className":28,"code":108665,"language":30,"meta":31,"style":31},[33,108879,108880,108896],{"__ignoreMap":31},[36,108881,108882,108884,108886,108888,108890,108892,108894],{"class":38,"line":39},[36,108883,3120],{"class":46},[36,108885,1616],{"class":42},[36,108887,1619],{"class":46},[36,108889,1622],{"class":112},[36,108891,495],{"class":42},[36,108893,4527],{"class":112},[36,108895,848],{"class":42},[36,108897,108898],{"class":38,"line":53},[36,108899,105211],{"class":42},[19,108901,108902],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[26,108904,108905],{"className":28,"code":108014,"language":30,"meta":31,"style":31},[33,108906,108907],{"__ignoreMap":31},[36,108908,108909],{"class":38,"line":39},[36,108910,108014],{"class":42},[19,108912,108913,108914,108916,108917,108919],{},"重置 ",[33,108915,36961],{},"。注意它不会重新创建 ",[33,108918,105596],{},"，因为模型结构没有变，只是状态回到初始值。",[26,108921,108922],{"className":28,"code":108178,"language":30,"meta":31,"style":31},[33,108923,108924],{"__ignoreMap":31},[36,108925,108926,108928,108930,108932,108934],{"class":38,"line":39},[36,108927,108185],{"class":42},[36,108929,498],{"class":112},[36,108931,8140],{"class":42},[36,108933,47],{"class":46},[36,108935,108194],{"class":112},[19,108937,108938,108939,4087,108942,4087,108945,108947],{},"这行是“手动改状态”。在 freejoint 中，",[33,108940,108941],{},"qpos[0]",[33,108943,108944],{},"qpos[1]",[33,108946,108741],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[26,108949,108950],{"className":28,"code":108031,"language":30,"meta":31,"style":31},[33,108951,108952],{"__ignoreMap":31},[36,108953,108954],{"class":38,"line":39},[36,108955,108031],{"class":42},[19,108957,108958,108959,108961,108962,108964],{},"手动改完 ",[33,108960,107521],{}," 后，调用 ",[33,108963,107741],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,108966,3348],{"id":3347},[19,108968,3351],{},[211,108970,108971,108976,108981,108984],{},[214,108972,108973,108974],{},"初始时间为 ",[33,108975,1859],{},[214,108977,108978,108979],{},"50 步后时间约为 ",[33,108980,38889],{},[214,108982,108983],{},"reset 后状态恢复",[214,108985,108986,108987,108990,108991],{},"手动修改 ",[33,108988,108989],{},"data.qpos[2]"," 后，小球高度变为 ",[33,108992,108745],{},[19,108994,108995,108997],{},[33,108996,108741],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,108999,109000],{},"输出里可以重点看三件事：",[211,109002,109003,109011,109016],{},[214,109004,109005,109007,109008,109010],{},[33,109006,6099],{}," 是否随着 ",[33,109009,596],{}," 增加。",[214,109012,109013,109015],{},[33,109014,107521],{}," 的 z 坐标是否因为下落而变化。",[214,109017,109018,109020,109021,224],{},[33,109019,107843],{}," 后时间是否回到 ",[33,109022,1859],{},[14,109024,3382],{"id":3381},[211,109026,109027,109033,109039,109045,109048,109057],{},[214,109028,109029,109030,224],{},"修改 timestep 为 ",[33,109031,109032],{},"0.005",[214,109034,109035,109036,224],{},"重新运行，检查 50 步后时间是否约为 ",[33,109037,109038],{},"0.25",[214,109040,109041,109042,224],{},"修改重力为 ",[33,109043,109044],{},"0 0 -1.0",[214,109046,109047],{},"观察小球下降速度是否变慢。",[214,109049,3416,109050,3420,109053,109056],{},[33,109051,109052],{},"data.qpos[2] = 2.0",[33,109054,109055],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[214,109058,109059,109060,109063],{},"注释掉 ",[33,109061,109062],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,109065,3444],{"id":3443},[318,109067,3406,109069,109071],{"id":109068},"修改-dataqpos-后位置没有更新",[33,109070,104601],{}," 后位置没有更新",[19,109073,3510],{},[26,109075,109076],{"className":28,"code":108031,"language":30,"meta":31,"style":31},[33,109077,109078],{"__ignoreMap":31},[36,109079,109080],{"class":38,"line":39},[36,109081,108031],{"class":42},[318,109083,109084],{"id":109084},"数组维度看不懂",[19,109086,109087],{},"打印模型维度:",[26,109089,109091],{"className":28,"code":109090,"language":30,"meta":31,"style":31},"print(model.nq, model.nv, model.nu)\n",[33,109092,109093],{"__ignoreMap":31},[36,109094,109095,109097],{"class":38,"line":39},[36,109096,3486],{"class":112},[36,109098,109099],{"class":42},"(model.nq, model.nv, model.nu)\n",[248,109101,109102,109110],{},[251,109103,109104],{},[254,109105,109106,109108],{},[257,109107,340],{"align":259},[257,109109,343],{"align":259},[265,109111,109112,109122,109132],{},[254,109113,109114,109119],{},[270,109115,109116],{"align":259},[33,109117,109118],{},"nq",[270,109120,109121],{"align":259},"位置变量数量",[254,109123,109124,109129],{},[270,109125,109126],{"align":259},[33,109127,109128],{},"nv",[270,109130,109131],{"align":259},"速度变量数量",[254,109133,109134,109138],{},[270,109135,109136],{"align":259},[33,109137,105672],{},[270,109139,109140],{"align":259},"控制输入数量",[318,109142,109144,109145,109147],{"id":109143},"误以为-qpos-一定等于关节数","误以为 ",[33,109146,107521],{}," 一定等于关节数",[19,109149,109150,109151,86084,109153,109155,109156,109158],{},"不是。例如 ",[33,109152,105132],{},[33,109154,107521],{}," 是 7 维，但 ",[33,109157,107851],{}," 是 6 维。",[318,109160,109162,109163,109165],{"id":109161},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[33,109164,107521],{}," 的第几位",[19,109167,109168],{},"初学时可以先打印：",[26,109170,109172],{"className":28,"code":109171,"language":30,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[33,109173,109174,109184,109194,109206],{"__ignoreMap":31},[36,109175,109176,109178,109180,109182],{"class":38,"line":39},[36,109177,3486],{"class":112},[36,109179,495],{"class":42},[36,109181,104956],{"class":105},[36,109183,104959],{"class":42},[36,109185,109186,109188,109190,109192],{"class":38,"line":53},[36,109187,3486],{"class":112},[36,109189,495],{"class":42},[36,109191,104968],{"class":105},[36,109193,104971],{"class":42},[36,109195,109196,109198,109200,109203],{"class":38,"line":196},[36,109197,3486],{"class":112},[36,109199,495],{"class":42},[36,109201,109202],{"class":105},"\"qpos:\"",[36,109204,109205],{"class":42},", data.qpos)\n",[36,109207,109208,109210,109212,109215],{"class":38,"line":642},[36,109209,3486],{"class":112},[36,109211,495],{"class":42},[36,109213,109214],{"class":105},"\"qvel:\"",[36,109216,109217],{"class":42},", data.qvel)\n",[19,109219,109220],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[318,109222,109223],{"id":109223},"仿真结果每次都一样",[19,109225,109226,109227,109229],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[33,109228,107521],{},"、目标点或控制输入。",[14,109231,106103],{"id":106102},[19,109233,109234,109235,28234],{},"Python 控制 MuJoCo 的核心就是读写 ",[33,109236,36961],{},[211,109238,109239,109247,109252,109257],{},[214,109240,109241,109242,324,109244,109246],{},"用 ",[33,109243,104601],{},[33,109245,104604],{}," 读取状态。",[214,109248,109241,109249,109251],{},[33,109250,3612],{}," 写入控制。",[214,109253,109241,109254,109256],{},[33,109255,596],{}," 推进时间。",[214,109258,109259,109260,109262],{},"手动改状态后用 ",[33,109261,107741],{}," 刷新派生量。",[19,109264,109265],{},"理解这一章后，就可以进入关节和 actuator 控制。",[3785,109267,109268],{},"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":31,"searchDepth":53,"depth":53,"links":109270},[109271,109272,109273,109280,109284,109285,109286,109296],{"id":16,"depth":53,"text":17},{"id":85,"depth":53,"text":86},{"id":242,"depth":53,"text":243,"children":109274},[109275,109277,109279],{"id":108043,"depth":196,"text":109276},"qpos、qvel、ctrl 是什么",{"id":108120,"depth":196,"text":109278},"mj_step 和 mj_forward 的区别",{"id":108208,"depth":196,"text":108209},{"id":600,"depth":53,"text":601,"children":109281},[109282,109283],{"id":2117,"depth":196,"text":2117},{"id":2338,"depth":196,"text":2338},{"id":3347,"depth":53,"text":3348},{"id":3381,"depth":53,"text":3382},{"id":3443,"depth":53,"text":3444,"children":109287},[109288,109290,109291,109293,109295],{"id":109068,"depth":196,"text":109289},"修改 data.qpos 后位置没有更新",{"id":109084,"depth":196,"text":109084},{"id":109143,"depth":196,"text":109292},"误以为 qpos 一定等于关节数",{"id":109161,"depth":196,"text":109294},"不知道某个元素在 qpos 的第几位",{"id":109223,"depth":196,"text":109223},{"id":106102,"depth":53,"text":106103},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":107809,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":109303,"title":109304,"body":109305,"description":31,"extension":3817,"meta":110988,"navigation":658,"path":110989,"seo":110990,"stem":110991,"__hash__":110992},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":109306,"toc":110964},[109307,109310,109312,109315,109317,109342,109345,109364,109367,109369,109371,109395,109397,109411,109413,109454,109456,109480,109482,109485,109519,109521,109534,109537,109605,109614,109618,109621,109655,109661,109664,109668,109707,109710,109730,109734,109777,109779,109808,109811,109817,109820,109822,110213,110215,110227,110229,110240,110242,110245,110274,110282,110285,110320,110323,110325,110333,110336,110338,110349,110359,110379,110382,110418,110430,110478,110497,110539,110552,110580,110585,110606,110615,110633,110636,110670,110673,110693,110696,110715,110721,110723,110726,110732,110738,110748,110751,110757,110766,110768,110814,110816,110822,110828,110831,110834,110854,110857,110863,110869,110871,110894,110897,110900,110909,110912,110947,110949,110952,110958,110961],[10,109308,109304],{"id":109309},"_4关节actuator-与力控制",[14,109311,17],{"id":16},[19,109313,109314],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,109316,107822],{},[211,109318,109319,109325,109330,109334,109339],{},[214,109320,109321,109324],{},[33,109322,109323],{},"hinge"," 关节",[214,109326,109327],{},[33,109328,109329],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[214,109331,109332],{},[33,109333,3612],{},[214,109335,109336],{},[33,109337,109338],{},"ctrlrange",[214,109340,109341],{},"读取关节角和角速度",[19,109343,109344],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[26,109346,109348],{"className":28,"code":109347,"language":30,"meta":31,"style":31},"data.ctrl[0] = ...\n",[33,109349,109350],{"__ignoreMap":31},[36,109351,109352,109355,109357,109359,109361],{"class":38,"line":39},[36,109353,109354],{"class":42},"data.ctrl[",[36,109356,1859],{"class":112},[36,109358,8140],{"class":42},[36,109360,47],{"class":46},[36,109362,109363],{"class":112}," ...\n",[19,109365,109366],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,109368,86],{"id":85},[19,109370,89],{},[26,109372,109373],{"className":92,"code":93,"language":94,"meta":31,"style":31},[33,109374,109375],{"__ignoreMap":31},[36,109376,109377,109379,109381,109383,109385,109387,109389,109391,109393],{"class":38,"line":39},[36,109378,102],{"class":101},[36,109380,106],{"class":105},[36,109382,109],{"class":105},[36,109384,113],{"class":112},[36,109386,116],{"class":105},[36,109388,119],{"class":105},[36,109390,122],{"class":105},[36,109392,125],{"class":105},[36,109394,128],{"class":105},[19,109396,131],{},[26,109398,109399],{"className":92,"code":104459,"language":94,"meta":31,"style":31},[33,109400,109401],{"__ignoreMap":31},[36,109402,109403,109405,109407,109409],{"class":38,"line":39},[36,109404,141],{"class":101},[36,109406,109],{"class":105},[36,109408,146],{"class":105},[36,109410,104472],{"class":105},[19,109412,155],{},[26,109414,109416],{"className":92,"code":109415,"language":94,"meta":31,"style":31},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[33,109417,109418,109435,109444],{"__ignoreMap":31},[36,109419,109420,109422,109424,109426,109429,109431,109433],{"class":38,"line":39},[36,109421,165],{"class":101},[36,109423,168],{"class":105},[36,109425,171],{"class":112},[36,109427,109428],{"class":105}," mujoco-control",[36,109430,177],{"class":105},[36,109432,180],{"class":112},[36,109434,183],{"class":112},[36,109436,109437,109439,109441],{"class":38,"line":53},[36,109438,165],{"class":101},[36,109440,190],{"class":105},[36,109442,109443],{"class":105}," mujoco-control\n",[36,109445,109446,109448,109450,109452],{"class":38,"line":196},[36,109447,141],{"class":101},[36,109449,109],{"class":105},[36,109451,146],{"class":105},[36,109453,104472],{"class":105},[19,109455,209],{},[211,109457,109458,109464,109471,109477],{},[214,109459,109460,109463],{},[33,109461,109462],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[214,109465,109466,109468,109469,224],{},[33,109467,3612],{}," 长度等于 ",[33,109470,105668],{},[214,109472,85776,109473,109476],{},[33,109474,109475],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[214,109478,109479],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,109481,243],{"id":242},[19,109483,109484],{},"关节决定 body 如何运动:",[26,109486,109488],{"className":56624,"code":109487,"language":56626,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,109489,109490],{"__ignoreMap":31},[36,109491,109492,109494,109496,109498,109500,109503,109505,109507,109509,109512,109514,109517],{"class":38,"line":39},[36,109493,393],{"class":42},[36,109495,106449],{"class":54857},[36,109497,18576],{"class":101},[36,109499,47],{"class":42},[36,109501,109502],{"class":105},"\"hinge\"",[36,109504,57381],{"class":101},[36,109506,47],{"class":42},[36,109508,109502],{"class":105},[36,109510,109511],{"class":101}," axis",[36,109513,47],{"class":42},[36,109515,109516],{"class":105},"\"0 1 0\"",[36,109518,104674],{"class":42},[19,109520,106545],{},[211,109522,109523,109528,109531],{},[214,109524,109525,109526],{},"名字是 ",[33,109527,109323],{},[214,109529,109530],{},"类型是旋转关节",[214,109532,109533],{},"绕 y 轴旋转",[19,109535,109536],{},"actuator 决定如何施加控制:",[26,109538,109540],{"className":56624,"code":109539,"language":56626,"meta":31,"style":31},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[33,109541,109542,109551,109597],{"__ignoreMap":31},[36,109543,109544,109546,109549],{"class":38,"line":39},[36,109545,393],{"class":42},[36,109547,109548],{"class":54857},"actuator",[36,109550,54864],{"class":42},[36,109552,109553,109555,109558,109560,109562,109565,109568,109570,109572,109575,109577,109579,109582,109584,109587,109590,109592,109595],{"class":38,"line":53},[36,109554,55701],{"class":42},[36,109556,109557],{"class":54857},"motor",[36,109559,18576],{"class":101},[36,109561,47],{"class":42},[36,109563,109564],{"class":105},"\"hinge_motor\"",[36,109566,109567],{"class":101}," joint",[36,109569,47],{"class":42},[36,109571,109502],{"class":105},[36,109573,109574],{"class":101}," gear",[36,109576,47],{"class":42},[36,109578,7377],{"class":105},[36,109580,109581],{"class":101}," ctrlrange",[36,109583,47],{"class":42},[36,109585,109586],{"class":105},"\"-2 2\"",[36,109588,109589],{"class":101}," ctrllimited",[36,109591,47],{"class":42},[36,109593,109594],{"class":105},"\"true\"",[36,109596,104674],{"class":42},[36,109598,109599,109601,109603],{"class":38,"line":196},[36,109600,55342],{"class":42},[36,109602,109548],{"class":54857},[36,109604,54864],{"class":42},[19,109606,109607,109610,109611,224],{},[33,109608,109609],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[33,109612,109613],{},"[-2, 2]",[318,109615,109617],{"id":109616},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,109619,109620],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[248,109622,109623,109633],{},[251,109624,109625],{},[254,109626,109627,109629,109631],{},[257,109628,29367],{"align":259},[257,109630,263],{"align":259},[257,109632,104279],{"align":259},[265,109634,109635,109645],{},[254,109636,109637,109639,109642],{},[270,109638,106449],{"align":259},[270,109640,109641],{"align":259},"定义能怎么动",[270,109643,109644],{"align":259},"门轴允许门旋转",[254,109646,109647,109649,109652],{},[270,109648,109548],{"align":259},[270,109650,109651],{"align":259},"定义怎么施力或控制",[270,109653,109654],{"align":259},"人推门、马达带动门",[19,109656,109657,109658,109660],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[33,109659,3612],{}," 主动控制它。",[19,109662,109663],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[318,109665,109667],{"id":109666},"hinge-joint","hinge joint",[26,109669,109671],{"className":56624,"code":109670,"language":56626,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,109672,109673],{"__ignoreMap":31},[36,109674,109675,109677,109679,109681,109683,109685,109687,109689,109691,109693,109695,109697,109700,109702,109705],{"class":38,"line":39},[36,109676,393],{"class":42},[36,109678,106449],{"class":54857},[36,109680,18576],{"class":101},[36,109682,47],{"class":42},[36,109684,109502],{"class":105},[36,109686,57381],{"class":101},[36,109688,47],{"class":42},[36,109690,109502],{"class":105},[36,109692,109511],{"class":101},[36,109694,47],{"class":42},[36,109696,109516],{"class":105},[36,109698,109699],{"class":101}," damping",[36,109701,47],{"class":42},[36,109703,109704],{"class":105},"\"0.1\"",[36,109706,104674],{"class":42},[19,109708,109709],{},"含义：",[211,109711,109712,109718,109724],{},[214,109713,109714,109717],{},[33,109715,109716],{},"type=\"hinge\"","：只能绕一个轴旋转。",[214,109719,109720,109723],{},[33,109721,109722],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[214,109725,109726,109729],{},[33,109727,109728],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[318,109731,109733],{"id":109732},"motor-actuator","motor actuator",[26,109735,109737],{"className":56624,"code":109736,"language":56626,"meta":31,"style":31},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[33,109738,109739],{"__ignoreMap":31},[36,109740,109741,109743,109745,109747,109749,109751,109753,109755,109757,109759,109761,109763,109765,109767,109769,109771,109773,109775],{"class":38,"line":39},[36,109742,393],{"class":42},[36,109744,109557],{"class":54857},[36,109746,18576],{"class":101},[36,109748,47],{"class":42},[36,109750,109564],{"class":105},[36,109752,109567],{"class":101},[36,109754,47],{"class":42},[36,109756,109502],{"class":105},[36,109758,109574],{"class":101},[36,109760,47],{"class":42},[36,109762,7377],{"class":105},[36,109764,109581],{"class":101},[36,109766,47],{"class":42},[36,109768,109586],{"class":105},[36,109770,109589],{"class":101},[36,109772,47],{"class":42},[36,109774,109594],{"class":105},[36,109776,104674],{"class":42},[19,109778,109709],{},[211,109780,109781,109790,109796,109802],{},[214,109782,109783,109786,109787,109789],{},[33,109784,109785],{},"joint=\"hinge\"","：这个电机作用在名为 ",[33,109788,109323],{}," 的关节上。",[214,109791,109792,109795],{},[33,109793,109794],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[214,109797,109798,109801],{},[33,109799,109800],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[214,109803,109804,109807],{},[33,109805,109806],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,109809,109810],{},"简单理解：",[26,109812,109815],{"className":109813,"code":109814,"language":80,"meta":31},[78],"实际施加效果 ≈ data.ctrl[0] * gear\n",[33,109816,109814],{"__ignoreMap":31},[19,109818,109819],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,109821,601],{"id":600},[26,109823,109825],{"className":28,"code":109824,"language":30,"meta":31,"style":31},"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",[33,109826,109827,109834,109838,109844,109854,109858,109862,109870,109875,109880,109884,109888,109893,109898,109902,109907,109912,109917,109921,109925,109929,109933,109937,109942,109946,109950,109954,109958,109962,109974,109986,109994,109998,110008,110018,110028,110032,110045,110058,110062,110079,110093,110128,110132,110136,110147,110162,110177,110189,110193,110197,110209],{"__ignoreMap":31},[36,109828,109829,109831],{"class":38,"line":39},[36,109830,611],{"class":46},[36,109832,109833],{"class":42}," math\n",[36,109835,109836],{"class":38,"line":53},[36,109837,659],{"emptyLinePlaceholder":658},[36,109839,109840,109842],{"class":38,"line":196},[36,109841,611],{"class":46},[36,109843,627],{"class":42},[36,109845,109846,109848,109850,109852],{"class":38,"line":642},[36,109847,611],{"class":46},[36,109849,634],{"class":42},[36,109851,617],{"class":46},[36,109853,639],{"class":42},[36,109855,109856],{"class":38,"line":655},[36,109857,659],{"emptyLinePlaceholder":658},[36,109859,109860],{"class":38,"line":662},[36,109861,659],{"emptyLinePlaceholder":658},[36,109863,109864,109866,109868],{"class":38,"line":667},[36,109865,670],{"class":112},[36,109867,673],{"class":46},[36,109869,676],{"class":105},[36,109871,109872],{"class":38,"line":679},[36,109873,109874],{"class":105},"\u003Cmujoco model=\"one_link_motor\">\n",[36,109876,109877],{"class":38,"line":685},[36,109878,109879],{"class":105},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[36,109881,109882],{"class":38,"line":691},[36,109883,659],{"emptyLinePlaceholder":658},[36,109885,109886],{"class":38,"line":696},[36,109887,699],{"class":105},[36,109889,109890],{"class":38,"line":702},[36,109891,109892],{"class":105},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[36,109894,109895],{"class":38,"line":708},[36,109896,109897],{"class":105},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[36,109899,109900],{"class":38,"line":713},[36,109901,659],{"emptyLinePlaceholder":658},[36,109903,109904],{"class":38,"line":719},[36,109905,109906],{"class":105},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[36,109908,109909],{"class":38,"line":725},[36,109910,109911],{"class":105},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,109913,109914],{"class":38,"line":731},[36,109915,109916],{"class":105},"        \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",[36,109918,109919],{"class":38,"line":736},[36,109920,763],{"class":105},[36,109922,109923],{"class":38,"line":742},[36,109924,769],{"class":105},[36,109926,109927],{"class":38,"line":748},[36,109928,775],{"class":105},[36,109930,109931],{"class":38,"line":754},[36,109932,659],{"emptyLinePlaceholder":658},[36,109934,109935],{"class":38,"line":760},[36,109936,786],{"class":105},[36,109938,109939],{"class":38,"line":766},[36,109940,109941],{"class":105},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[36,109943,109944],{"class":38,"line":772},[36,109945,804],{"class":105},[36,109947,109948],{"class":38,"line":778},[36,109949,810],{"class":105},[36,109951,109952],{"class":38,"line":783},[36,109953,816],{"class":105},[36,109955,109956],{"class":38,"line":789},[36,109957,659],{"emptyLinePlaceholder":658},[36,109959,109960],{"class":38,"line":795},[36,109961,659],{"emptyLinePlaceholder":658},[36,109963,109964,109966,109968,109970,109972],{"class":38,"line":801},[36,109965,1820],{"class":46},[36,109967,1823],{"class":101},[36,109969,1826],{"class":42},[36,109971,885],{"class":112},[36,109973,888],{"class":42},[36,109975,109976,109978,109980,109982,109984],{"class":38,"line":807},[36,109977,104925],{"class":42},[36,109979,47],{"class":46},[36,109981,917],{"class":42},[36,109983,670],{"class":112},[36,109985,922],{"class":42},[36,109987,109988,109990,109992],{"class":38,"line":813},[36,109989,104938],{"class":42},[36,109991,47],{"class":46},[36,109993,104943],{"class":42},[36,109995,109996],{"class":38,"line":819},[36,109997,659],{"emptyLinePlaceholder":658},[36,109999,110000,110002,110004,110006],{"class":38,"line":824},[36,110001,1867],{"class":112},[36,110003,495],{"class":42},[36,110005,104956],{"class":105},[36,110007,104959],{"class":42},[36,110009,110010,110012,110014,110016],{"class":38,"line":829},[36,110011,1867],{"class":112},[36,110013,495],{"class":42},[36,110015,104968],{"class":105},[36,110017,104971],{"class":42},[36,110019,110020,110022,110024,110026],{"class":38,"line":851},[36,110021,1867],{"class":112},[36,110023,495],{"class":42},[36,110025,104980],{"class":105},[36,110027,104983],{"class":42},[36,110029,110030],{"class":38,"line":868},[36,110031,659],{"emptyLinePlaceholder":658},[36,110033,110034,110036,110039,110041,110043],{"class":38,"line":873},[36,110035,3752],{"class":46},[36,110037,110038],{"class":42}," model.nu ",[36,110040,24570],{"class":46},[36,110042,28732],{"class":112},[36,110044,888],{"class":42},[36,110046,110047,110049,110051,110053,110056],{"class":38,"line":891},[36,110048,106925],{"class":46},[36,110050,1026],{"class":112},[36,110052,495],{"class":42},[36,110054,110055],{"class":105},"\"expected exactly one actuator\"",[36,110057,922],{"class":42},[36,110059,110060],{"class":38,"line":906},[36,110061,659],{"emptyLinePlaceholder":658},[36,110063,110064,110066,110068,110070,110072,110074,110077],{"class":38,"line":925},[36,110065,1909],{"class":46},[36,110067,1912],{"class":42},[36,110069,1619],{"class":46},[36,110071,1622],{"class":112},[36,110073,495],{"class":42},[36,110075,110076],{"class":112},"2000",[36,110078,848],{"class":42},[36,110080,110081,110084,110086,110088,110090],{"class":38,"line":943},[36,110082,110083],{"class":42},"        t ",[36,110085,47],{"class":46},[36,110087,1912],{"class":42},[36,110089,1372],{"class":46},[36,110091,110092],{"class":42}," model.opt.timestep\n",[36,110094,110095,110098,110100,110102,110104,110107,110109,110112,110114,110116,110119,110121,110123,110125],{"class":38,"line":948},[36,110096,110097],{"class":42},"        data.ctrl[",[36,110099,1859],{"class":112},[36,110101,8140],{"class":42},[36,110103,47],{"class":46},[36,110105,110106],{"class":112}," 1.5",[36,110108,1325],{"class":46},[36,110110,110111],{"class":42}," math.sin(",[36,110113,108745],{"class":112},[36,110115,1325],{"class":46},[36,110117,110118],{"class":42}," math.pi ",[36,110120,1372],{"class":46},[36,110122,65422],{"class":112},[36,110124,1325],{"class":46},[36,110126,110127],{"class":42}," t)\n",[36,110129,110130],{"class":38,"line":971},[36,110131,105032],{"class":42},[36,110133,110134],{"class":38,"line":992},[36,110135,659],{"emptyLinePlaceholder":658},[36,110137,110138,110140,110142,110145],{"class":38,"line":1020},[36,110139,1867],{"class":112},[36,110141,495],{"class":42},[36,110143,110144],{"class":105},"\"time:\"",[36,110146,104995],{"class":42},[36,110148,110149,110151,110153,110156,110158,110160],{"class":38,"line":1036},[36,110150,1867],{"class":112},[36,110152,495],{"class":42},[36,110154,110155],{"class":105},"\"joint qpos:\"",[36,110157,108415],{"class":42},[36,110159,4168],{"class":112},[36,110161,2005],{"class":42},[36,110163,110164,110166,110168,110171,110173,110175],{"class":38,"line":1041},[36,110165,1867],{"class":112},[36,110167,495],{"class":42},[36,110169,110170],{"class":105},"\"joint qvel:\"",[36,110172,108431],{"class":42},[36,110174,4168],{"class":112},[36,110176,2005],{"class":42},[36,110178,110179,110181,110183,110186],{"class":38,"line":1052},[36,110180,1867],{"class":112},[36,110182,495],{"class":42},[36,110184,110185],{"class":105},"\"last ctrl:\"",[36,110187,110188],{"class":42},", data.ctrl.copy())\n",[36,110190,110191],{"class":38,"line":1065},[36,110192,659],{"emptyLinePlaceholder":658},[36,110194,110195],{"class":38,"line":1077},[36,110196,659],{"emptyLinePlaceholder":658},[36,110198,110199,110201,110203,110205,110207],{"class":38,"line":1082},[36,110200,2067],{"class":46},[36,110202,2070],{"class":112},[36,110204,2073],{"class":46},[36,110206,2076],{"class":105},[36,110208,888],{"class":42},[36,110210,110211],{"class":38,"line":1125},[36,110212,2084],{"class":42},[19,110214,2087],{},[26,110216,110218],{"className":92,"code":110217,"language":94,"meta":31,"style":31},"touch ch4_joint_motor.py\n",[33,110219,110220],{"__ignoreMap":31},[36,110221,110222,110224],{"class":38,"line":39},[36,110223,2097],{"class":101},[36,110225,110226],{"class":105}," ch4_joint_motor.py\n",[19,110228,105810],{},[26,110230,110232],{"className":92,"code":110231,"language":94,"meta":31,"style":31},"python ch4_joint_motor.py\n",[33,110233,110234],{"__ignoreMap":31},[36,110235,110236,110238],{"class":38,"line":39},[36,110237,30],{"class":101},[36,110239,110226],{"class":105},[318,110241,2117],{"id":2117},[19,110243,110244],{},"检查 actuator 数量：",[26,110246,110248],{"className":28,"code":110247,"language":30,"meta":31,"style":31},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[33,110249,110250,110262],{"__ignoreMap":31},[36,110251,110252,110254,110256,110258,110260],{"class":38,"line":39},[36,110253,2067],{"class":46},[36,110255,110038],{"class":42},[36,110257,24570],{"class":46},[36,110259,28732],{"class":112},[36,110261,888],{"class":42},[36,110263,110264,110266,110268,110270,110272],{"class":38,"line":53},[36,110265,107386],{"class":46},[36,110267,1026],{"class":112},[36,110269,495],{"class":42},[36,110271,110055],{"class":105},[36,110273,922],{"class":42},[19,110275,110276,110278,110279,110281],{},[33,110277,105668],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[33,110280,3612],{}," 长度应该是 1。",[19,110283,110284],{},"产生正弦控制信号：",[26,110286,110288],{"className":28,"code":110287,"language":30,"meta":31,"style":31},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[33,110289,110290],{"__ignoreMap":31},[36,110291,110292,110294,110296,110298,110300,110302,110304,110306,110308,110310,110312,110314,110316,110318],{"class":38,"line":39},[36,110293,109354],{"class":42},[36,110295,1859],{"class":112},[36,110297,8140],{"class":42},[36,110299,47],{"class":46},[36,110301,110106],{"class":112},[36,110303,1325],{"class":46},[36,110305,110111],{"class":42},[36,110307,108745],{"class":112},[36,110309,1325],{"class":46},[36,110311,110118],{"class":42},[36,110313,1372],{"class":46},[36,110315,65422],{"class":112},[36,110317,1325],{"class":46},[36,110319,110127],{"class":42},[19,110321,110322],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,110324,105185],{},[26,110326,110327],{"className":28,"code":107993,"language":30,"meta":31,"style":31},[33,110328,110329],{"__ignoreMap":31},[36,110330,110331],{"class":38,"line":39},[36,110332,107993],{"class":42},[19,110334,110335],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[318,110337,2338],{"id":2338},[26,110339,110341],{"className":28,"code":110340,"language":30,"meta":31,"style":31},"import math\n",[33,110342,110343],{"__ignoreMap":31},[36,110344,110345,110347],{"class":38,"line":39},[36,110346,611],{"class":46},[36,110348,109833],{"class":42},[19,110350,110351,110352,324,110355,110358],{},"导入 Python 标准库里的数学模块。后面要用 ",[33,110353,110354],{},"math.sin",[33,110356,110357],{},"math.pi"," 生成周期变化的控制信号。",[26,110360,110361],{"className":28,"code":107177,"language":30,"meta":31,"style":31},[33,110362,110363,110369],{"__ignoreMap":31},[36,110364,110365,110367],{"class":38,"line":39},[36,110366,611],{"class":46},[36,110368,627],{"class":42},[36,110370,110371,110373,110375,110377],{"class":38,"line":53},[36,110372,611],{"class":46},[36,110374,634],{"class":42},[36,110376,617],{"class":46},[36,110378,639],{"class":42},[19,110380,110381],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[26,110383,110384],{"className":56624,"code":109670,"language":56626,"meta":31,"style":31},[33,110385,110386],{"__ignoreMap":31},[36,110387,110388,110390,110392,110394,110396,110398,110400,110402,110404,110406,110408,110410,110412,110414,110416],{"class":38,"line":39},[36,110389,393],{"class":42},[36,110391,106449],{"class":54857},[36,110393,18576],{"class":101},[36,110395,47],{"class":42},[36,110397,109502],{"class":105},[36,110399,57381],{"class":101},[36,110401,47],{"class":42},[36,110403,109502],{"class":105},[36,110405,109511],{"class":101},[36,110407,47],{"class":42},[36,110409,109516],{"class":105},[36,110411,109699],{"class":101},[36,110413,47],{"class":42},[36,110415,109704],{"class":105},[36,110417,104674],{"class":42},[19,110419,110420,110421,110423,110424,110426,110427,110429],{},"这行定义关节。",[33,110422,109323],{}," 表示旋转关节。",[33,110425,109722],{}," 表示绕 y 轴旋转。",[33,110428,109728],{}," 表示有一点阻尼，运动不会完全无损耗。",[26,110431,110433],{"className":56624,"code":110432,"language":56626,"meta":31,"style":31},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[33,110434,110435],{"__ignoreMap":31},[36,110436,110437,110439,110441,110443,110445,110448,110450,110452,110455,110458,110460,110463,110465,110467,110469,110471,110473,110476],{"class":38,"line":39},[36,110438,393],{"class":42},[36,110440,104650],{"class":54857},[36,110442,18576],{"class":101},[36,110444,47],{"class":42},[36,110446,110447],{"class":105},"\"link_geom\"",[36,110449,57381],{"class":101},[36,110451,47],{"class":42},[36,110453,110454],{"class":105},"\"capsule\"",[36,110456,110457],{"class":101}," fromto",[36,110459,47],{"class":42},[36,110461,110462],{"class":105},"\"0 0 0 0 0 0.5\"",[36,110464,104666],{"class":101},[36,110466,47],{"class":42},[36,110468,107269],{"class":105},[36,110470,105512],{"class":101},[36,110472,47],{"class":42},[36,110474,110475],{"class":105},"\"0.5\"",[36,110477,104674],{"class":42},[19,110479,110480,110481,110483,110484,110486,110487,110490,110491,224,110494,110496],{},"这行定义摆杆的形状。",[33,110482,106658],{}," 是胶囊体，适合表示杆子。",[33,110485,106669],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[33,110488,110489],{},"(0,0,0)"," 延伸到 ",[33,110492,110493],{},"(0,0,0.5)",[33,110495,106663],{}," 是半径。",[26,110498,110499],{"className":56624,"code":109736,"language":56626,"meta":31,"style":31},[33,110500,110501],{"__ignoreMap":31},[36,110502,110503,110505,110507,110509,110511,110513,110515,110517,110519,110521,110523,110525,110527,110529,110531,110533,110535,110537],{"class":38,"line":39},[36,110504,393],{"class":42},[36,110506,109557],{"class":54857},[36,110508,18576],{"class":101},[36,110510,47],{"class":42},[36,110512,109564],{"class":105},[36,110514,109567],{"class":101},[36,110516,47],{"class":42},[36,110518,109502],{"class":105},[36,110520,109574],{"class":101},[36,110522,47],{"class":42},[36,110524,7377],{"class":105},[36,110526,109581],{"class":101},[36,110528,47],{"class":42},[36,110530,109586],{"class":105},[36,110532,109589],{"class":101},[36,110534,47],{"class":42},[36,110536,109594],{"class":105},[36,110538,104674],{"class":42},[19,110540,110541,110542,110544,110545,110548,110549,110551],{},"这行定义电机。它作用在 ",[33,110543,109323],{}," 关节上。",[33,110546,110547],{},"gear"," 可以理解成放大倍数。",[33,110550,109338],{}," 限制控制输入范围。",[26,110553,110554],{"className":28,"code":110247,"language":30,"meta":31,"style":31},[33,110555,110556,110568],{"__ignoreMap":31},[36,110557,110558,110560,110562,110564,110566],{"class":38,"line":39},[36,110559,2067],{"class":46},[36,110561,110038],{"class":42},[36,110563,24570],{"class":46},[36,110565,28732],{"class":112},[36,110567,888],{"class":42},[36,110569,110570,110572,110574,110576,110578],{"class":38,"line":53},[36,110571,107386],{"class":46},[36,110573,1026],{"class":112},[36,110575,495],{"class":42},[36,110577,110055],{"class":105},[36,110579,922],{"class":42},[19,110581,110582,110584],{},[33,110583,105668],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[26,110586,110588],{"className":28,"code":110587,"language":30,"meta":31,"style":31},"for step in range(2000):\n",[33,110589,110590],{"__ignoreMap":31},[36,110591,110592,110594,110596,110598,110600,110602,110604],{"class":38,"line":39},[36,110593,3120],{"class":46},[36,110595,1912],{"class":42},[36,110597,1619],{"class":46},[36,110599,1622],{"class":112},[36,110601,495],{"class":42},[36,110603,110076],{"class":112},[36,110605,848],{"class":42},[19,110607,110608,110609,110611,110612,110614],{},"循环 2000 步。这里没有用 ",[33,110610,2756],{},"，而是用 ",[33,110613,2311],{},"，因为后面要用当前步数计算时间。",[26,110616,110618],{"className":28,"code":110617,"language":30,"meta":31,"style":31},"t = step * model.opt.timestep\n",[33,110619,110620],{"__ignoreMap":31},[36,110621,110622,110625,110627,110629,110631],{"class":38,"line":39},[36,110623,110624],{"class":42},"t ",[36,110626,47],{"class":46},[36,110628,1912],{"class":42},[36,110630,1372],{"class":46},[36,110632,110092],{"class":42},[19,110634,110635],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[26,110637,110638],{"className":28,"code":110287,"language":30,"meta":31,"style":31},[33,110639,110640],{"__ignoreMap":31},[36,110641,110642,110644,110646,110648,110650,110652,110654,110656,110658,110660,110662,110664,110666,110668],{"class":38,"line":39},[36,110643,109354],{"class":42},[36,110645,1859],{"class":112},[36,110647,8140],{"class":42},[36,110649,47],{"class":46},[36,110651,110106],{"class":112},[36,110653,1325],{"class":46},[36,110655,110111],{"class":42},[36,110657,108745],{"class":112},[36,110659,1325],{"class":46},[36,110661,110118],{"class":42},[36,110663,1372],{"class":46},[36,110665,65422],{"class":112},[36,110667,1325],{"class":46},[36,110669,110127],{"class":42},[19,110671,110672],{},"这行给电机输入一个正弦波。拆开看：",[211,110674,110675,110681,110687],{},[214,110676,110677,110680],{},[33,110678,110679],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[214,110682,110683,110686],{},[33,110684,110685],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[214,110688,110689,110692],{},[33,110690,110691],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,110694,110695],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[26,110697,110699],{"className":28,"code":110698,"language":30,"meta":31,"style":31},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[33,110700,110701],{"__ignoreMap":31},[36,110702,110703,110705,110707,110709,110711,110713],{"class":38,"line":39},[36,110704,3486],{"class":112},[36,110706,495],{"class":42},[36,110708,110155],{"class":105},[36,110710,108415],{"class":42},[36,110712,4168],{"class":112},[36,110714,2005],{"class":42},[19,110716,110717,110718,110720],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[33,110719,104601],{}," 只有一个数。",[14,110722,3348],{"id":3347},[19,110724,110725],{},"输出类似:",[26,110727,110730],{"className":110728,"code":110729,"language":80,"meta":31},[78],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[33,110731,110729],{"__ignoreMap":31},[19,110733,110734,110735,110737],{},"这里 ",[33,110736,109609],{}," 是电机输入。",[19,110739,110740,110743,110744,110747],{},[33,110741,110742],{},"joint qpos"," 是关节角度，单位通常是弧度。",[33,110745,110746],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,110749,110750],{},"角度单位提示：",[26,110752,110755],{"className":110753,"code":110754,"language":80,"meta":31},[78],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[33,110756,110754],{"__ignoreMap":31},[19,110758,110759,110760,110762,110763,110765],{},"如果你看到 ",[33,110761,107521],{}," 是 ",[33,110764,38889],{},"，大约就是 28.6 度。",[14,110767,3382],{"id":3381},[211,110769,110770,110777,110780,110787,110790,110798,110806],{},[214,110771,3416,110772,3420,110774,224],{},[33,110773,109794],{},[33,110775,110776],{},"gear=\"5\"",[214,110778,110779],{},"重新运行，观察关节运动是否更剧烈。",[214,110781,3416,110782,3420,110784,224],{},[33,110783,109338],{},[33,110785,110786],{},"-0.2 0.2",[214,110788,110789],{},"重新运行，观察控制能力是否变弱。",[214,110791,110792,110793,110795,110796,224],{},"去掉 actuator，确认 ",[33,110794,105668],{}," 变成 ",[33,110797,1859],{},[214,110799,3416,110800,3420,110802,110805],{},[33,110801,109728],{},[33,110803,110804],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[214,110807,3416,110808,3420,110810,110813],{},[33,110809,109722],{},[33,110811,110812],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,110815,3444],{"id":3443},[318,110817,110819],{"id":110818},"indexerror-index-0-is-out-of-bounds",[33,110820,110821],{},"IndexError: index 0 is out of bounds",[19,110823,110824,110825,110827],{},"原因是 ",[33,110826,109475],{},"，没有 actuator。",[318,110829,110830],{"id":110830},"关节几乎不动",[19,110832,110833],{},"可能原因:",[211,110835,110836,110841,110845,110851],{},[214,110837,110838,110840],{},[33,110839,110547],{}," 太小",[214,110842,110843,110840],{},[33,110844,109338],{},[214,110846,110847,110850],{},[33,110848,110849],{},"damping"," 太大",[214,110852,110853],{},"重力方向导致运动不明显",[318,110855,110856],{"id":110856},"模型编译失败",[19,110858,110859,110860,110862],{},"检查 actuator 引用的 ",[33,110861,109785],{}," 是否存在，joint 名称是否拼写一致。",[318,110864,110866,110868],{"id":110865},"datactrl0-写了但没有效果",[33,110867,109609],{}," 写了但没有效果",[19,110870,3537],{},[211,110872,110873,110878,110881,110886,110891],{},[214,110874,110875,110877],{},[33,110876,105668],{}," 是否大于 0。",[214,110879,110880],{},"motor 是否引用了正确 joint。",[214,110882,110883,110885],{},[33,110884,110547],{}," 是否太小。",[214,110887,110888,110890],{},[33,110889,109338],{}," 是否把输入限制得太小。",[214,110892,110893],{},"body 是否真的有可动 joint。",[318,110895,110896],{"id":110896},"控制输入超过范围会怎样",[19,110898,110899],{},"如果设置了：",[26,110901,110903],{"className":56624,"code":110902,"language":56626,"meta":31,"style":31},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[33,110904,110905],{"__ignoreMap":31},[36,110906,110907],{"class":38,"line":39},[36,110908,110902],{"class":42},[19,110910,110911],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[26,110913,110915],{"className":28,"code":110914,"language":30,"meta":31,"style":31},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[33,110916,110917,110935],{"__ignoreMap":31},[36,110918,110919,110921,110923,110925,110927,110929,110931,110933],{"class":38,"line":39},[36,110920,3053],{"class":42},[36,110922,47],{"class":46},[36,110924,1579],{"class":42},[36,110926,1308],{"class":46},[36,110928,108745],{"class":112},[36,110930,478],{"class":42},[36,110932,108745],{"class":112},[36,110934,922],{"class":42},[36,110936,110937,110939,110941,110943,110945],{"class":38,"line":53},[36,110938,109354],{"class":42},[36,110940,1859],{"class":112},[36,110942,8140],{"class":42},[36,110944,47],{"class":46},[36,110946,1607],{"class":42},[14,110948,106103],{"id":106102},[19,110950,110951],{},"这一章建立了控制任务的基本形式：",[26,110953,110956],{"className":110954,"code":110955,"language":80,"meta":31},[78],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[33,110957,110955],{"__ignoreMap":31},[19,110959,110960],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[3785,110962,110963],{},"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":31,"searchDepth":53,"depth":53,"links":110965},[110966,110967,110968,110973,110977,110978,110979,110987],{"id":16,"depth":53,"text":17},{"id":85,"depth":53,"text":86},{"id":242,"depth":53,"text":243,"children":110969},[110970,110971,110972],{"id":109616,"depth":196,"text":109617},{"id":109666,"depth":196,"text":109667},{"id":109732,"depth":196,"text":109733},{"id":600,"depth":53,"text":601,"children":110974},[110975,110976],{"id":2117,"depth":196,"text":2117},{"id":2338,"depth":196,"text":2338},{"id":3347,"depth":53,"text":3348},{"id":3381,"depth":53,"text":3382},{"id":3443,"depth":53,"text":3444,"children":110980},[110981,110982,110983,110984,110986],{"id":110818,"depth":196,"text":110821},{"id":110830,"depth":196,"text":110830},{"id":110856,"depth":196,"text":110856},{"id":110865,"depth":196,"text":110985},"data.ctrl[0] 写了但没有效果",{"id":110896,"depth":196,"text":110896},{"id":106102,"depth":53,"text":106103},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":109304,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":110994,"title":110995,"body":110996,"description":31,"extension":3817,"meta":112904,"navigation":658,"path":112905,"seo":112906,"stem":112907,"__hash__":112908},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":110997,"toc":112880},[110998,111001,111003,111006,111014,111017,111034,111037,111062,111065,111111,111113,111115,111170,111172,111190,111192,111235,111238,111255,111258,111274,111284,111291,111293,111296,111299,111333,111336,111384,111388,111391,111405,111414,111418,111421,111446,111449,111453,111466,111469,111475,111478,111493,111495,111498,111758,111760,111772,111775,112087,112089,112101,112103,112106,112121,112126,112129,112151,112154,112157,112191,112194,112198,112209,112212,112229,112232,112246,112253,112273,112280,112294,112297,112309,112324,112344,112347,112369,112372,112376,112391,112402,112417,112420,112450,112466,112495,112503,112527,112530,112548,112558,112570,112577,112586,112592,112601,112604,112606,112615,112618,112633,112635,112638,112649,112652,112663,112666,112684,112686,112703,112706,112734,112736,112740,112743,112773,112779,112782,112786,112794,112797,112799,112820,112823,112826,112842,112845,112861,112863,112866,112877],[10,110999,110995],{"id":111000},"_5viewer-可视化与-renderer-离屏渲染",[14,111002,17],{"id":16},[19,111004,111005],{},"本章掌握两类可视化方式:",[211,111007,111008,111011],{},[214,111009,111010],{},"交互式 viewer: 适合人工观察仿真",[214,111012,111013],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,111015,111016],{},"使用官方接口:",[26,111018,111020],{"className":28,"code":111019,"language":30,"meta":31,"style":31},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[33,111021,111022,111029],{"__ignoreMap":31},[36,111023,111024,111026],{"class":38,"line":39},[36,111025,611],{"class":46},[36,111027,111028],{"class":42}," mujoco.viewer\n",[36,111030,111031],{"class":38,"line":53},[36,111032,111033],{"class":42},"mujoco.viewer.launch_passive(model, data)\n",[19,111035,111036],{},"以及:",[26,111038,111040],{"className":28,"code":111039,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[33,111041,111042,111052],{"__ignoreMap":31},[36,111043,111044,111047,111049],{"class":38,"line":39},[36,111045,111046],{"class":42},"renderer ",[36,111048,47],{"class":46},[36,111050,111051],{"class":42}," mujoco.Renderer(model)\n",[36,111053,111054,111057,111059],{"class":38,"line":53},[36,111055,111056],{"class":42},"image ",[36,111058,47],{"class":46},[36,111060,111061],{"class":42}," renderer.render()\n",[19,111063,111064],{},"新手建议先理解二者区别：",[248,111066,111067,111083],{},[251,111068,111069],{},[254,111070,111071,111074,111077,111080],{},[257,111072,111073],{"align":259},"工具",[257,111075,111076],{"align":259},"用途",[257,111078,111079],{"align":259},"是否打开窗口",[257,111081,111082],{"align":259},"常见场景",[265,111084,111085,111098],{},[254,111086,111087,111090,111093,111095],{},[270,111088,111089],{"align":259},"Viewer",[270,111091,111092],{"align":259},"人眼实时观察仿真",[270,111094,108151],{"align":259},[270,111096,111097],{"align":259},"调试模型、看控制效果",[254,111099,111100,111103,111106,111108],{},[270,111101,111102],{"align":259},"Renderer",[270,111104,111105],{"align":259},"生成图像数组",[270,111107,108164],{"align":259},[270,111109,111110],{"align":259},"保存图片、训练视觉策略、服务器批量采集",[14,111112,86],{"id":85},[19,111114,89],{},[26,111116,111118],{"className":92,"code":111117,"language":94,"meta":31,"style":31},"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",[33,111119,111120,111132,111142,111150,111158],{"__ignoreMap":31},[36,111121,111122,111124,111126,111128,111130],{"class":38,"line":39},[36,111123,102],{"class":101},[36,111125,106],{"class":105},[36,111127,109],{"class":105},[36,111129,113],{"class":112},[36,111131,28294],{"class":112},[36,111133,111134,111136,111138,111140],{"class":38,"line":53},[36,111135,104349],{"class":105},[36,111137,104352],{"class":105},[36,111139,125],{"class":105},[36,111141,28294],{"class":112},[36,111143,111144,111146,111148],{"class":38,"line":196},[36,111145,104361],{"class":105},[36,111147,104364],{"class":105},[36,111149,28294],{"class":112},[36,111151,111152,111154,111156],{"class":38,"line":642},[36,111153,104371],{"class":105},[36,111155,104374],{"class":105},[36,111157,28294],{"class":112},[36,111159,111160,111162,111164,111166,111168],{"class":38,"line":655},[36,111161,104381],{"class":105},[36,111163,104384],{"class":105},[36,111165,104387],{"class":105},[36,111167,104390],{"class":105},[36,111169,106014],{"class":105},[19,111171,131],{},[26,111173,111175],{"className":92,"code":111174,"language":94,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy pillow\n",[33,111176,111177],{"__ignoreMap":31},[36,111178,111179,111181,111183,111185,111187],{"class":38,"line":39},[36,111180,141],{"class":101},[36,111182,109],{"class":105},[36,111184,146],{"class":105},[36,111186,149],{"class":105},[36,111188,111189],{"class":105}," pillow\n",[19,111191,155],{},[26,111193,111195],{"className":92,"code":111194,"language":94,"meta":31,"style":31},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[33,111196,111197,111214,111223],{"__ignoreMap":31},[36,111198,111199,111201,111203,111205,111208,111210,111212],{"class":38,"line":39},[36,111200,165],{"class":101},[36,111202,168],{"class":105},[36,111204,171],{"class":112},[36,111206,111207],{"class":105}," mujoco-render",[36,111209,177],{"class":105},[36,111211,180],{"class":112},[36,111213,183],{"class":112},[36,111215,111216,111218,111220],{"class":38,"line":53},[36,111217,165],{"class":101},[36,111219,190],{"class":105},[36,111221,111222],{"class":105}," mujoco-render\n",[36,111224,111225,111227,111229,111231,111233],{"class":38,"line":196},[36,111226,141],{"class":101},[36,111228,109],{"class":105},[36,111230,146],{"class":105},[36,111232,149],{"class":105},[36,111234,111189],{"class":105},[19,111236,111237],{},"离屏渲染后端:",[26,111239,111241],{"className":92,"code":111240,"language":94,"meta":31,"style":31},"export MUJOCO_GL=egl\n",[33,111242,111243],{"__ignoreMap":31},[36,111244,111245,111247,111250,111252],{"class":38,"line":39},[36,111246,28658],{"class":46},[36,111248,111249],{"class":42}," MUJOCO_GL",[36,111251,47],{"class":46},[36,111253,111254],{"class":42},"egl\n",[19,111256,111257],{},"或:",[26,111259,111261],{"className":92,"code":111260,"language":94,"meta":31,"style":31},"export MUJOCO_GL=osmesa\n",[33,111262,111263],{"__ignoreMap":31},[36,111264,111265,111267,111269,111271],{"class":38,"line":39},[36,111266,28658],{"class":46},[36,111268,111249],{"class":42},[36,111270,47],{"class":46},[36,111272,111273],{"class":42},"osmesa\n",[19,111275,111276,111277,111280,111281,224],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[33,111278,111279],{},"egl"," 失败，再尝试 ",[33,111282,111283],{},"osmesa",[19,111285,111286,111287,111290],{},"如果你在本机桌面环境运行，通常先不要设置 ",[33,111288,111289],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,111292,243],{"id":242},[19,111294,111295],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,111297,111298],{},"典型 viewer 流程:",[26,111300,111302],{"className":28,"code":111301,"language":30,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[33,111303,111304,111317,111324,111328],{"__ignoreMap":31},[36,111305,111306,111309,111312,111314],{"class":38,"line":39},[36,111307,111308],{"class":46},"with",[36,111310,111311],{"class":42}," mujoco.viewer.launch_passive(model, data) ",[36,111313,617],{"class":46},[36,111315,111316],{"class":42}," viewer:\n",[36,111318,111319,111321],{"class":38,"line":53},[36,111320,5963],{"class":46},[36,111322,111323],{"class":42}," viewer.is_running():\n",[36,111325,111326],{"class":38,"line":196},[36,111327,105032],{"class":42},[36,111329,111330],{"class":38,"line":642},[36,111331,111332],{"class":42},"        viewer.sync()\n",[19,111334,111335],{},"典型 renderer 流程:",[26,111337,111339],{"className":28,"code":111338,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[33,111340,111341,111367,111371,111376],{"__ignoreMap":31},[36,111342,111343,111345,111347,111350,111352,111354,111356,111358,111360,111362,111365],{"class":38,"line":39},[36,111344,111046],{"class":42},[36,111346,47],{"class":46},[36,111348,111349],{"class":42}," mujoco.Renderer(model, ",[36,111351,28597],{"class":468},[36,111353,47],{"class":46},[36,111355,45900],{"class":112},[36,111357,478],{"class":42},[36,111359,28593],{"class":468},[36,111361,47],{"class":46},[36,111363,111364],{"class":112},"640",[36,111366,922],{"class":42},[36,111368,111369],{"class":38,"line":53},[36,111370,107993],{"class":42},[36,111372,111373],{"class":38,"line":196},[36,111374,111375],{"class":42},"renderer.update_scene(data)\n",[36,111377,111378,111380,111382],{"class":38,"line":642},[36,111379,111056],{"class":42},[36,111381,47],{"class":46},[36,111383,111061],{"class":42},[318,111385,111387],{"id":111386},"viewer-的同步逻辑","viewer 的同步逻辑",[19,111389,111390],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[26,111392,111394],{"className":28,"code":111393,"language":30,"meta":31,"style":31},"mujoco.mj_step(model, data)\nviewer.sync()\n",[33,111395,111396,111400],{"__ignoreMap":31},[36,111397,111398],{"class":38,"line":39},[36,111399,107993],{"class":42},[36,111401,111402],{"class":38,"line":53},[36,111403,111404],{"class":42},"viewer.sync()\n",[19,111406,111407,111409,111410,111413],{},[33,111408,596],{}," 负责算物理，",[33,111411,111412],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[318,111415,111417],{"id":111416},"为什么要-sleep","为什么要 sleep",[19,111419,111420],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[26,111422,111424],{"className":28,"code":111423,"language":30,"meta":31,"style":31},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[33,111425,111426],{"__ignoreMap":31},[36,111427,111428,111431,111433,111436,111438,111441,111443],{"class":38,"line":39},[36,111429,111430],{"class":42},"sleep_time ",[36,111432,47],{"class":46},[36,111434,111435],{"class":42}," model.opt.timestep ",[36,111437,1308],{"class":46},[36,111439,111440],{"class":42}," (time.time() ",[36,111442,1308],{"class":46},[36,111444,111445],{"class":42}," step_start)\n",[19,111447,111448],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[318,111450,111452],{"id":111451},"renderer-输出是什么","renderer 输出是什么",[26,111454,111456],{"className":28,"code":111455,"language":30,"meta":31,"style":31},"image = renderer.render()\n",[33,111457,111458],{"__ignoreMap":31},[36,111459,111460,111462,111464],{"class":38,"line":39},[36,111461,111056],{"class":42},[36,111463,47],{"class":46},[36,111465,111061],{"class":42},[19,111467,111468],{},"得到的是 NumPy 数组，形状通常是：",[26,111470,111473],{"className":111471,"code":111472,"language":80,"meta":31},[78],"(height, width, 3)\n",[33,111474,111472],{"__ignoreMap":31},[19,111476,111477],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[26,111479,111481],{"className":28,"code":111480,"language":30,"meta":31,"style":31},"Image.fromarray(image).save(\"render_output.png\")\n",[33,111482,111483],{"__ignoreMap":31},[36,111484,111485,111488,111491],{"class":38,"line":39},[36,111486,111487],{"class":42},"Image.fromarray(image).save(",[36,111489,111490],{"class":105},"\"render_output.png\"",[36,111492,922],{"class":42},[14,111494,601],{"id":600},[19,111496,111497],{},"交互式 Viewer:",[26,111499,111501],{"className":28,"code":111500,"language":30,"meta":31,"style":31},"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",[33,111502,111503,111509,111513,111519,111525,111529,111533,111541,111546,111550,111554,111558,111563,111568,111572,111576,111580,111585,111589,111593,111597,111601,111605,111609,111621,111633,111641,111645,111655,111675,111685,111690,111695,111699,111716,111729,111734,111738,111742,111754],{"__ignoreMap":31},[36,111504,111505,111507],{"class":38,"line":39},[36,111506,611],{"class":46},[36,111508,35417],{"class":42},[36,111510,111511],{"class":38,"line":53},[36,111512,659],{"emptyLinePlaceholder":658},[36,111514,111515,111517],{"class":38,"line":196},[36,111516,611],{"class":46},[36,111518,627],{"class":42},[36,111520,111521,111523],{"class":38,"line":642},[36,111522,611],{"class":46},[36,111524,111028],{"class":42},[36,111526,111527],{"class":38,"line":655},[36,111528,659],{"emptyLinePlaceholder":658},[36,111530,111531],{"class":38,"line":662},[36,111532,659],{"emptyLinePlaceholder":658},[36,111534,111535,111537,111539],{"class":38,"line":667},[36,111536,670],{"class":112},[36,111538,673],{"class":46},[36,111540,676],{"class":105},[36,111542,111543],{"class":38,"line":679},[36,111544,111545],{"class":105},"\u003Cmujoco model=\"viewer_demo\">\n",[36,111547,111548],{"class":38,"line":685},[36,111549,104852],{"class":105},[36,111551,111552],{"class":38,"line":691},[36,111553,659],{"emptyLinePlaceholder":658},[36,111555,111556],{"class":38,"line":696},[36,111557,699],{"class":105},[36,111559,111560],{"class":38,"line":702},[36,111561,111562],{"class":105},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[36,111564,111565],{"class":38,"line":708},[36,111566,111567],{"class":105},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,111569,111570],{"class":38,"line":713},[36,111571,659],{"emptyLinePlaceholder":658},[36,111573,111574],{"class":38,"line":719},[36,111575,104874],{"class":105},[36,111577,111578],{"class":38,"line":725},[36,111579,104879],{"class":105},[36,111581,111582],{"class":38,"line":731},[36,111583,111584],{"class":105},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,111586,111587],{"class":38,"line":736},[36,111588,769],{"class":105},[36,111590,111591],{"class":38,"line":742},[36,111592,775],{"class":105},[36,111594,111595],{"class":38,"line":748},[36,111596,810],{"class":105},[36,111598,111599],{"class":38,"line":754},[36,111600,816],{"class":105},[36,111602,111603],{"class":38,"line":760},[36,111604,659],{"emptyLinePlaceholder":658},[36,111606,111607],{"class":38,"line":766},[36,111608,659],{"emptyLinePlaceholder":658},[36,111610,111611,111613,111615,111617,111619],{"class":38,"line":772},[36,111612,1820],{"class":46},[36,111614,1823],{"class":101},[36,111616,1826],{"class":42},[36,111618,885],{"class":112},[36,111620,888],{"class":42},[36,111622,111623,111625,111627,111629,111631],{"class":38,"line":778},[36,111624,104925],{"class":42},[36,111626,47],{"class":46},[36,111628,917],{"class":42},[36,111630,670],{"class":112},[36,111632,922],{"class":42},[36,111634,111635,111637,111639],{"class":38,"line":783},[36,111636,104938],{"class":42},[36,111638,47],{"class":46},[36,111640,104943],{"class":42},[36,111642,111643],{"class":38,"line":789},[36,111644,659],{"emptyLinePlaceholder":658},[36,111646,111647,111649,111651,111653],{"class":38,"line":795},[36,111648,37738],{"class":46},[36,111650,111311],{"class":42},[36,111652,617],{"class":46},[36,111654,111316],{"class":42},[36,111656,111657,111660,111663,111665,111668,111670,111673],{"class":38,"line":801},[36,111658,111659],{"class":46},"        while",[36,111661,111662],{"class":42}," viewer.is_running() ",[36,111664,34066],{"class":46},[36,111666,111667],{"class":42}," data.time ",[36,111669,393],{"class":46},[36,111671,111672],{"class":112}," 5.0",[36,111674,888],{"class":42},[36,111676,111677,111680,111682],{"class":38,"line":807},[36,111678,111679],{"class":42},"            step_start ",[36,111681,47],{"class":46},[36,111683,111684],{"class":42}," time.time()\n",[36,111686,111687],{"class":38,"line":813},[36,111688,111689],{"class":42},"            mujoco.mj_step(model, data)\n",[36,111691,111692],{"class":38,"line":819},[36,111693,111694],{"class":42},"            viewer.sync()\n",[36,111696,111697],{"class":38,"line":824},[36,111698,659],{"emptyLinePlaceholder":658},[36,111700,111701,111704,111706,111708,111710,111712,111714],{"class":38,"line":829},[36,111702,111703],{"class":42},"            sleep_time ",[36,111705,47],{"class":46},[36,111707,111435],{"class":42},[36,111709,1308],{"class":46},[36,111711,111440],{"class":42},[36,111713,1308],{"class":46},[36,111715,111445],{"class":42},[36,111717,111718,111720,111723,111725,111727],{"class":38,"line":851},[36,111719,8338],{"class":46},[36,111721,111722],{"class":42}," sleep_time ",[36,111724,4829],{"class":46},[36,111726,1004],{"class":112},[36,111728,888],{"class":42},[36,111730,111731],{"class":38,"line":868},[36,111732,111733],{"class":42},"                time.sleep(sleep_time)\n",[36,111735,111736],{"class":38,"line":873},[36,111737,659],{"emptyLinePlaceholder":658},[36,111739,111740],{"class":38,"line":891},[36,111741,659],{"emptyLinePlaceholder":658},[36,111743,111744,111746,111748,111750,111752],{"class":38,"line":906},[36,111745,2067],{"class":46},[36,111747,2070],{"class":112},[36,111749,2073],{"class":46},[36,111751,2076],{"class":105},[36,111753,888],{"class":42},[36,111755,111756],{"class":38,"line":925},[36,111757,2084],{"class":42},[19,111759,2087],{},[26,111761,111763],{"className":92,"code":111762,"language":94,"meta":31,"style":31},"touch ch5_viewer.py\n",[33,111764,111765],{"__ignoreMap":31},[36,111766,111767,111769],{"class":38,"line":39},[36,111768,2097],{"class":101},[36,111770,111771],{"class":105}," ch5_viewer.py\n",[19,111773,111774],{},"离屏 Renderer 保存图片:",[26,111776,111778],{"className":28,"code":111777,"language":30,"meta":31,"style":31},"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",[33,111779,111780,111792,111796,111802,111812,111816,111820,111828,111833,111837,111841,111845,111849,111854,111858,111862,111866,111870,111874,111878,111882,111886,111890,111894,111898,111910,111922,111930,111955,111959,111975,111979,111983,111998,112007,112011,112025,112030,112035,112039,112051,112063,112067,112071,112083],{"__ignoreMap":31},[36,111781,111782,111784,111787,111789],{"class":38,"line":39},[36,111783,645],{"class":46},[36,111785,111786],{"class":42}," pathlib ",[36,111788,611],{"class":46},[36,111790,111791],{"class":42}," Path\n",[36,111793,111794],{"class":38,"line":53},[36,111795,659],{"emptyLinePlaceholder":658},[36,111797,111798,111800],{"class":38,"line":196},[36,111799,611],{"class":46},[36,111801,627],{"class":42},[36,111803,111804,111806,111808,111810],{"class":38,"line":642},[36,111805,645],{"class":46},[36,111807,50821],{"class":112},[36,111809,50824],{"class":46},[36,111811,50827],{"class":42},[36,111813,111814],{"class":38,"line":655},[36,111815,659],{"emptyLinePlaceholder":658},[36,111817,111818],{"class":38,"line":662},[36,111819,659],{"emptyLinePlaceholder":658},[36,111821,111822,111824,111826],{"class":38,"line":667},[36,111823,670],{"class":112},[36,111825,673],{"class":46},[36,111827,676],{"class":105},[36,111829,111830],{"class":38,"line":679},[36,111831,111832],{"class":105},"\u003Cmujoco model=\"renderer_demo\">\n",[36,111834,111835],{"class":38,"line":685},[36,111836,104852],{"class":105},[36,111838,111839],{"class":38,"line":691},[36,111840,659],{"emptyLinePlaceholder":658},[36,111842,111843],{"class":38,"line":696},[36,111844,699],{"class":105},[36,111846,111847],{"class":38,"line":702},[36,111848,111562],{"class":105},[36,111850,111851],{"class":38,"line":708},[36,111852,111853],{"class":105},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[36,111855,111856],{"class":38,"line":713},[36,111857,111567],{"class":105},[36,111859,111860],{"class":38,"line":719},[36,111861,659],{"emptyLinePlaceholder":658},[36,111863,111864],{"class":38,"line":725},[36,111865,104874],{"class":105},[36,111867,111868],{"class":38,"line":731},[36,111869,104879],{"class":105},[36,111871,111872],{"class":38,"line":736},[36,111873,111584],{"class":105},[36,111875,111876],{"class":38,"line":742},[36,111877,769],{"class":105},[36,111879,111880],{"class":38,"line":748},[36,111881,775],{"class":105},[36,111883,111884],{"class":38,"line":754},[36,111885,810],{"class":105},[36,111887,111888],{"class":38,"line":760},[36,111889,816],{"class":105},[36,111891,111892],{"class":38,"line":766},[36,111893,659],{"emptyLinePlaceholder":658},[36,111895,111896],{"class":38,"line":772},[36,111897,659],{"emptyLinePlaceholder":658},[36,111899,111900,111902,111904,111906,111908],{"class":38,"line":778},[36,111901,1820],{"class":46},[36,111903,1823],{"class":101},[36,111905,1826],{"class":42},[36,111907,885],{"class":112},[36,111909,888],{"class":42},[36,111911,111912,111914,111916,111918,111920],{"class":38,"line":783},[36,111913,104925],{"class":42},[36,111915,47],{"class":46},[36,111917,917],{"class":42},[36,111919,670],{"class":112},[36,111921,922],{"class":42},[36,111923,111924,111926,111928],{"class":38,"line":789},[36,111925,104938],{"class":42},[36,111927,47],{"class":46},[36,111929,104943],{"class":42},[36,111931,111932,111935,111937,111939,111941,111943,111945,111947,111949,111951,111953],{"class":38,"line":795},[36,111933,111934],{"class":42},"    renderer ",[36,111936,47],{"class":46},[36,111938,111349],{"class":42},[36,111940,28597],{"class":468},[36,111942,47],{"class":46},[36,111944,45900],{"class":112},[36,111946,478],{"class":42},[36,111948,28593],{"class":468},[36,111950,47],{"class":46},[36,111952,111364],{"class":112},[36,111954,922],{"class":42},[36,111956,111957],{"class":38,"line":801},[36,111958,659],{"emptyLinePlaceholder":658},[36,111960,111961,111963,111965,111967,111969,111971,111973],{"class":38,"line":807},[36,111962,1909],{"class":46},[36,111964,1616],{"class":42},[36,111966,1619],{"class":46},[36,111968,1622],{"class":112},[36,111970,495],{"class":42},[36,111972,4186],{"class":112},[36,111974,848],{"class":42},[36,111976,111977],{"class":38,"line":813},[36,111978,105032],{"class":42},[36,111980,111981],{"class":38,"line":819},[36,111982,659],{"emptyLinePlaceholder":658},[36,111984,111985,111988,111991,111993,111996],{"class":38,"line":824},[36,111986,111987],{"class":42},"    renderer.update_scene(data, ",[36,111989,111990],{"class":468},"camera",[36,111992,47],{"class":46},[36,111994,111995],{"class":105},"\"fixed_camera\"",[36,111997,922],{"class":42},[36,111999,112000,112003,112005],{"class":38,"line":829},[36,112001,112002],{"class":42},"    image ",[36,112004,47],{"class":46},[36,112006,111061],{"class":42},[36,112008,112009],{"class":38,"line":851},[36,112010,659],{"emptyLinePlaceholder":658},[36,112012,112013,112016,112018,112021,112023],{"class":38,"line":868},[36,112014,112015],{"class":42},"    output_path ",[36,112017,47],{"class":46},[36,112019,112020],{"class":42}," Path(",[36,112022,111490],{"class":105},[36,112024,922],{"class":42},[36,112026,112027],{"class":38,"line":873},[36,112028,112029],{"class":42},"    Image.fromarray(image).save(output_path)\n",[36,112031,112032],{"class":38,"line":891},[36,112033,112034],{"class":42},"    renderer.close()\n",[36,112036,112037],{"class":38,"line":906},[36,112038,659],{"emptyLinePlaceholder":658},[36,112040,112041,112043,112045,112048],{"class":38,"line":925},[36,112042,1867],{"class":112},[36,112044,495],{"class":42},[36,112046,112047],{"class":105},"\"saved:\"",[36,112049,112050],{"class":42},", output_path.resolve())\n",[36,112052,112053,112055,112057,112060],{"class":38,"line":943},[36,112054,1867],{"class":112},[36,112056,495],{"class":42},[36,112058,112059],{"class":105},"\"image shape:\"",[36,112061,112062],{"class":42},", image.shape)\n",[36,112064,112065],{"class":38,"line":948},[36,112066,659],{"emptyLinePlaceholder":658},[36,112068,112069],{"class":38,"line":971},[36,112070,659],{"emptyLinePlaceholder":658},[36,112072,112073,112075,112077,112079,112081],{"class":38,"line":992},[36,112074,2067],{"class":46},[36,112076,2070],{"class":112},[36,112078,2073],{"class":46},[36,112080,2076],{"class":105},[36,112082,888],{"class":42},[36,112084,112085],{"class":38,"line":1020},[36,112086,2084],{"class":42},[19,112088,2087],{},[26,112090,112092],{"className":92,"code":112091,"language":94,"meta":31,"style":31},"touch ch5_renderer.py\n",[33,112093,112094],{"__ignoreMap":31},[36,112095,112096,112098],{"class":38,"line":39},[36,112097,2097],{"class":101},[36,112099,112100],{"class":105}," ch5_renderer.py\n",[318,112102,2117],{"id":2117},[19,112104,112105],{},"viewer 上下文：",[26,112107,112109],{"className":28,"code":112108,"language":30,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[33,112110,112111],{"__ignoreMap":31},[36,112112,112113,112115,112117,112119],{"class":38,"line":39},[36,112114,111308],{"class":46},[36,112116,111311],{"class":42},[36,112118,617],{"class":46},[36,112120,111316],{"class":42},[19,112122,112123,112125],{},[33,112124,111308],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,112127,112128],{},"窗口循环：",[26,112130,112132],{"className":28,"code":112131,"language":30,"meta":31,"style":31},"while viewer.is_running() and data.time \u003C 5.0:\n",[33,112133,112134],{"__ignoreMap":31},[36,112135,112136,112139,112141,112143,112145,112147,112149],{"class":38,"line":39},[36,112137,112138],{"class":46},"while",[36,112140,111662],{"class":42},[36,112142,34066],{"class":46},[36,112144,111667],{"class":42},[36,112146,393],{"class":46},[36,112148,111672],{"class":112},[36,112150,888],{"class":42},[19,112152,112153],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,112155,112156],{},"固定相机：",[26,112158,112160],{"className":56624,"code":112159,"language":56626,"meta":31,"style":31},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[33,112161,112162],{"__ignoreMap":31},[36,112163,112164,112166,112168,112170,112172,112174,112176,112178,112181,112184,112186,112189],{"class":38,"line":39},[36,112165,393],{"class":42},[36,112167,111990],{"class":54857},[36,112169,18576],{"class":101},[36,112171,47],{"class":42},[36,112173,111995],{"class":105},[36,112175,104636],{"class":101},[36,112177,47],{"class":42},[36,112179,112180],{"class":105},"\"1.5 -2.0 1.2\"",[36,112182,112183],{"class":101}," xyaxes",[36,112185,47],{"class":42},[36,112187,112188],{"class":105},"\"1 0.75 0 0 0 1\"",[36,112190,104674],{"class":42},[19,112192,112193],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[318,112195,112197],{"id":112196},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[26,112199,112201],{"className":28,"code":112200,"language":30,"meta":31,"style":31},"import time\n",[33,112202,112203],{"__ignoreMap":31},[36,112204,112205,112207],{"class":38,"line":39},[36,112206,611],{"class":46},[36,112208,35417],{"class":42},[19,112210,112211],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[26,112213,112215],{"className":28,"code":112214,"language":30,"meta":31,"style":31},"import mujoco\nimport mujoco.viewer\n",[33,112216,112217,112223],{"__ignoreMap":31},[36,112218,112219,112221],{"class":38,"line":39},[36,112220,611],{"class":46},[36,112222,627],{"class":42},[36,112224,112225,112227],{"class":38,"line":53},[36,112226,611],{"class":46},[36,112228,111028],{"class":42},[19,112230,112231],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[26,112233,112234],{"className":28,"code":112108,"language":30,"meta":31,"style":31},[33,112235,112236],{"__ignoreMap":31},[36,112237,112238,112240,112242,112244],{"class":38,"line":39},[36,112239,111308],{"class":46},[36,112241,111311],{"class":42},[36,112243,617],{"class":46},[36,112245,111316],{"class":42},[19,112247,112248,112249,112252],{},"打开一个 viewer 窗口。",[33,112250,112251],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[26,112254,112255],{"className":28,"code":112131,"language":30,"meta":31,"style":31},[33,112256,112257],{"__ignoreMap":31},[36,112258,112259,112261,112263,112265,112267,112269,112271],{"class":38,"line":39},[36,112260,112138],{"class":46},[36,112262,111662],{"class":42},[36,112264,34066],{"class":46},[36,112266,111667],{"class":42},[36,112268,393],{"class":46},[36,112270,111672],{"class":112},[36,112272,888],{"class":42},[19,112274,112275,112276,112279],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[33,112277,112278],{},"viewer.is_running()"," 会变成 false，循环结束。",[26,112281,112283],{"className":28,"code":112282,"language":30,"meta":31,"style":31},"step_start = time.time()\n",[33,112284,112285],{"__ignoreMap":31},[36,112286,112287,112290,112292],{"class":38,"line":39},[36,112288,112289],{"class":42},"step_start ",[36,112291,47],{"class":46},[36,112293,111684],{"class":42},[19,112295,112296],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[26,112298,112299],{"className":28,"code":111393,"language":30,"meta":31,"style":31},[33,112300,112301,112305],{"__ignoreMap":31},[36,112302,112303],{"class":38,"line":39},[36,112304,107993],{"class":42},[36,112306,112307],{"class":38,"line":53},[36,112308,111404],{"class":42},[19,112310,112311,112313,112314,112316,112317,112319,112320,112323],{},[33,112312,596],{}," 推进物理仿真。",[33,112315,111412],{}," 把最新的 ",[33,112318,36961],{}," 同步到窗口里显示。没有 ",[33,112321,112322],{},"sync()","，窗口可能看不到最新状态。",[26,112325,112326],{"className":28,"code":111423,"language":30,"meta":31,"style":31},[33,112327,112328],{"__ignoreMap":31},[36,112329,112330,112332,112334,112336,112338,112340,112342],{"class":38,"line":39},[36,112331,111430],{"class":42},[36,112333,47],{"class":46},[36,112335,111435],{"class":42},[36,112337,1308],{"class":46},[36,112339,111440],{"class":42},[36,112341,1308],{"class":46},[36,112343,111445],{"class":42},[19,112345,112346],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[26,112348,112350],{"className":28,"code":112349,"language":30,"meta":31,"style":31},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[33,112351,112352,112364],{"__ignoreMap":31},[36,112353,112354,112356,112358,112360,112362],{"class":38,"line":39},[36,112355,2067],{"class":46},[36,112357,111722],{"class":42},[36,112359,4829],{"class":46},[36,112361,1004],{"class":112},[36,112363,888],{"class":42},[36,112365,112366],{"class":38,"line":53},[36,112367,112368],{"class":42},"    time.sleep(sleep_time)\n",[19,112370,112371],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[318,112373,112375],{"id":112374},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[26,112377,112379],{"className":28,"code":112378,"language":30,"meta":31,"style":31},"from pathlib import Path\n",[33,112380,112381],{"__ignoreMap":31},[36,112382,112383,112385,112387,112389],{"class":38,"line":39},[36,112384,645],{"class":46},[36,112386,111786],{"class":42},[36,112388,611],{"class":46},[36,112390,111791],{"class":42},[19,112392,112393,112394,112397,112398,112401],{},"导入 ",[33,112395,112396],{},"Path","，用来处理文件路径。相比直接写字符串，",[33,112399,112400],{},"Path(\"render_output.png\")"," 更清晰。",[26,112403,112405],{"className":28,"code":112404,"language":30,"meta":31,"style":31},"from PIL import Image\n",[33,112406,112407],{"__ignoreMap":31},[36,112408,112409,112411,112413,112415],{"class":38,"line":39},[36,112410,645],{"class":46},[36,112412,50821],{"class":112},[36,112414,50824],{"class":46},[36,112416,50827],{"class":42},[19,112418,112419],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[26,112421,112422],{"className":56624,"code":112159,"language":56626,"meta":31,"style":31},[33,112423,112424],{"__ignoreMap":31},[36,112425,112426,112428,112430,112432,112434,112436,112438,112440,112442,112444,112446,112448],{"class":38,"line":39},[36,112427,393],{"class":42},[36,112429,111990],{"class":54857},[36,112431,18576],{"class":101},[36,112433,47],{"class":42},[36,112435,111995],{"class":105},[36,112437,104636],{"class":101},[36,112439,47],{"class":42},[36,112441,112180],{"class":105},[36,112443,112183],{"class":101},[36,112445,47],{"class":42},[36,112447,112188],{"class":105},[36,112449,104674],{"class":42},[19,112451,112452,112453,112455,112456,112458,112459,112462,112463,112465],{},"定义一个相机。",[33,112454,83364],{}," 是相机名字。",[33,112457,107637],{}," 是相机在世界里的位置。",[33,112460,112461],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[33,112464,107637],{}," 来调视角。",[26,112467,112469],{"className":28,"code":112468,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[33,112470,112471],{"__ignoreMap":31},[36,112472,112473,112475,112477,112479,112481,112483,112485,112487,112489,112491,112493],{"class":38,"line":39},[36,112474,111046],{"class":42},[36,112476,47],{"class":46},[36,112478,111349],{"class":42},[36,112480,28597],{"class":468},[36,112482,47],{"class":46},[36,112484,45900],{"class":112},[36,112486,478],{"class":42},[36,112488,28593],{"class":468},[36,112490,47],{"class":46},[36,112492,111364],{"class":112},[36,112494,922],{"class":42},[19,112496,112497,112498,324,112500,112502],{},"创建离屏渲染器。",[33,112499,28597],{},[33,112501,28593],{}," 决定输出图片大小。",[26,112504,112505],{"className":28,"code":105188,"language":30,"meta":31,"style":31},[33,112506,112507,112523],{"__ignoreMap":31},[36,112508,112509,112511,112513,112515,112517,112519,112521],{"class":38,"line":39},[36,112510,3120],{"class":46},[36,112512,1616],{"class":42},[36,112514,1619],{"class":46},[36,112516,1622],{"class":112},[36,112518,495],{"class":42},[36,112520,4186],{"class":112},[36,112522,848],{"class":42},[36,112524,112525],{"class":38,"line":53},[36,112526,105211],{"class":42},[19,112528,112529],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[26,112531,112533],{"className":28,"code":112532,"language":30,"meta":31,"style":31},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[33,112534,112535],{"__ignoreMap":31},[36,112536,112537,112540,112542,112544,112546],{"class":38,"line":39},[36,112538,112539],{"class":42},"renderer.update_scene(data, ",[36,112541,111990],{"class":468},[36,112543,47],{"class":46},[36,112545,111995],{"class":105},[36,112547,922],{"class":42},[19,112549,112550,112551,112553,112554,112557],{},"告诉 renderer：用当前 ",[33,112552,36961],{}," 的状态更新画面，并使用名为 ",[33,112555,112556],{},"fixed_camera"," 的相机视角。",[26,112559,112560],{"className":28,"code":111455,"language":30,"meta":31,"style":31},[33,112561,112562],{"__ignoreMap":31},[36,112563,112564,112566,112568],{"class":38,"line":39},[36,112565,111056],{"class":42},[36,112567,47],{"class":46},[36,112569,111061],{"class":42},[19,112571,112572,112573,112576],{},"真正渲染出图像。",[33,112574,112575],{},"image"," 是一个 NumPy 数组，不是文件。",[26,112578,112580],{"className":28,"code":112579,"language":30,"meta":31,"style":31},"Image.fromarray(image).save(output_path)\n",[33,112581,112582],{"__ignoreMap":31},[36,112583,112584],{"class":38,"line":39},[36,112585,112579],{"class":42},[19,112587,112588,112589,224],{},"把数组转换成图片，并保存到 ",[33,112590,112591],{},"render_output.png",[26,112593,112595],{"className":28,"code":112594,"language":30,"meta":31,"style":31},"renderer.close()\n",[33,112596,112597],{"__ignoreMap":31},[36,112598,112599],{"class":38,"line":39},[36,112600,112594],{"class":42},[19,112602,112603],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,112605,3348],{"id":3347},[19,112607,112608,112609,112611,112612,224],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[33,112610,112591],{},"，并输出图像数组形状，例如 ",[33,112613,112614],{},"(480, 640, 3)",[19,112616,112617],{},"如果图片里看不到方块，先检查：",[211,112619,112620,112623,112626],{},[214,112621,112622],{},"方块是否掉到相机视野外。",[214,112624,112625],{},"camera 位置是否合理。",[214,112627,112628,112629,112632],{},"是否在 ",[33,112630,112631],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,112634,3382],{"id":3381},[19,112636,112637],{},"运行 viewer:",[26,112639,112641],{"className":92,"code":112640,"language":94,"meta":31,"style":31},"python ch5_viewer.py\n",[33,112642,112643],{"__ignoreMap":31},[36,112644,112645,112647],{"class":38,"line":39},[36,112646,30],{"class":101},[36,112648,111771],{"class":105},[19,112650,112651],{},"运行 renderer:",[26,112653,112655],{"className":92,"code":112654,"language":94,"meta":31,"style":31},"python ch5_renderer.py\n",[33,112656,112657],{"__ignoreMap":31},[36,112658,112659,112661],{"class":38,"line":39},[36,112660,30],{"class":101},[36,112662,112100],{"class":105},[19,112664,112665],{},"如果在服务器上运行:",[26,112667,112669],{"className":92,"code":112668,"language":94,"meta":31,"style":31},"MUJOCO_GL=egl python ch5_renderer.py\n",[33,112670,112671],{"__ignoreMap":31},[36,112672,112673,112675,112677,112679,112682],{"class":38,"line":39},[36,112674,111289],{"class":42},[36,112676,47],{"class":46},[36,112678,111279],{"class":105},[36,112680,112681],{"class":101}," python",[36,112683,112100],{"class":105},[19,112685,111257],{},[26,112687,112689],{"className":92,"code":112688,"language":94,"meta":31,"style":31},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[33,112690,112691],{"__ignoreMap":31},[36,112692,112693,112695,112697,112699,112701],{"class":38,"line":39},[36,112694,111289],{"class":42},[36,112696,47],{"class":46},[36,112698,111283],{"class":105},[36,112700,112681],{"class":101},[36,112702,112100],{"class":105},[19,112704,112705],{},"再做几个练习：",[211,112707,112708,112715,112718,112724],{},[214,112709,112710,112711,112714],{},"把 renderer 分辨率改成 ",[33,112712,112713],{},"height=240, width=320","，观察输出 shape。",[214,112716,112717],{},"把方块颜色改成蓝色，重新保存图片。",[214,112719,112720,112721,112723],{},"把相机 ",[33,112722,107637],{}," 改远一点，观察画面中物体是否变小。",[214,112725,112726,112727,3420,112730,112733],{},"把 viewer 示例中的 ",[33,112728,112729],{},"data.time \u003C 5.0",[33,112731,112732],{},"data.time \u003C 20.0","，观察更长时间。",[14,112735,3444],{"id":3443},[318,112737,112739],{"id":112738},"viewer-窗口打不开","viewer 窗口打不开",[19,112741,112742],{},"安装:",[26,112744,112746],{"className":92,"code":112745,"language":94,"meta":31,"style":31},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[33,112747,112748],{"__ignoreMap":31},[36,112749,112750,112752,112754,112756,112758,112760,112762,112764,112766,112768,112770],{"class":38,"line":39},[36,112751,102],{"class":101},[36,112753,106],{"class":105},[36,112755,109],{"class":105},[36,112757,113],{"class":112},[36,112759,106004],{"class":105},[36,112761,104374],{"class":105},[36,112763,106009],{"class":105},[36,112765,104387],{"class":105},[36,112767,104393],{"class":105},[36,112769,104384],{"class":105},[36,112771,112772],{"class":105}," libXinerama\n",[318,112774,112776],{"id":112775},"glfwerror",[33,112777,112778],{},"GLFWError",[19,112780,112781],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[318,112783,112785],{"id":112784},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,112787,112788,112789,86093,112791,112793],{},"尝试 ",[33,112790,104570],{},[33,112792,104573],{},"。可能存在版本差异。",[318,112795,112796],{"id":112796},"保存图片是黑的",[19,112798,3537],{},[211,112800,112801,112804,112807,112817],{},[214,112802,112803],{},"XML 里是否有 light。",[214,112805,112806],{},"相机是否对着模型。",[214,112808,112809,112810,112813,112814,224],{},"是否先 ",[33,112811,112812],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[33,112815,112816],{},"renderer.render()",[214,112818,112819],{},"物体是否已经掉出视野。",[318,112821,112822],{"id":112822},"远程服务器没有显示器",[19,112824,112825],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[26,112827,112828],{"className":92,"code":112668,"language":94,"meta":31,"style":31},[33,112829,112830],{"__ignoreMap":31},[36,112831,112832,112834,112836,112838,112840],{"class":38,"line":39},[36,112833,111289],{"class":42},[36,112835,47],{"class":46},[36,112837,111279],{"class":105},[36,112839,112681],{"class":101},[36,112841,112100],{"class":105},[19,112843,112844],{},"如果 EGL 不可用，再尝试：",[26,112846,112847],{"className":92,"code":112688,"language":94,"meta":31,"style":31},[33,112848,112849],{"__ignoreMap":31},[36,112850,112851,112853,112855,112857,112859],{"class":38,"line":39},[36,112852,111289],{"class":42},[36,112854,47],{"class":46},[36,112856,111283],{"class":105},[36,112858,112681],{"class":101},[36,112860,112100],{"class":105},[14,112862,106103],{"id":106102},[19,112864,112865],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[211,112867,112868,112871,112874],{},[214,112869,112870],{},"先用 viewer 看模型和控制是否正常。",[214,112872,112873],{},"再用 renderer 保存图片或构造视觉观测。",[214,112875,112876],{},"最后把状态、动作、图像、奖励组织成训练数据。",[3785,112878,112879],{},"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":31,"searchDepth":53,"depth":53,"links":112881},[112882,112883,112884,112889,112894,112895,112896,112903],{"id":16,"depth":53,"text":17},{"id":85,"depth":53,"text":86},{"id":242,"depth":53,"text":243,"children":112885},[112886,112887,112888],{"id":111386,"depth":196,"text":111387},{"id":111416,"depth":196,"text":111417},{"id":111451,"depth":196,"text":111452},{"id":600,"depth":53,"text":601,"children":112890},[112891,112892,112893],{"id":2117,"depth":196,"text":2117},{"id":112196,"depth":196,"text":112197},{"id":112374,"depth":196,"text":112375},{"id":3347,"depth":53,"text":3348},{"id":3381,"depth":53,"text":3382},{"id":3443,"depth":53,"text":3444,"children":112897},[112898,112899,112900,112901,112902],{"id":112738,"depth":196,"text":112739},{"id":112775,"depth":196,"text":112778},{"id":112784,"depth":196,"text":112785},{"id":112796,"depth":196,"text":112796},{"id":112822,"depth":196,"text":112822},{"id":106102,"depth":53,"text":106103},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":110995,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":112910,"title":112911,"body":112912,"description":31,"extension":3817,"meta":114807,"navigation":658,"path":114808,"seo":114809,"stem":114810,"__hash__":114811},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":112913,"toc":114783},[112914,112917,112919,112922,112924,112943,112946,112952,112955,112957,112959,112983,112985,112999,113001,113042,113044,113055,113057,113060,113066,113069,113103,113106,113138,113141,113173,113177,113180,113220,113223,113229,113232,113238,113242,113245,113251,113254,113258,113261,113300,113302,113315,113318,113320,113891,113893,113905,113907,113918,113920,113923,113942,113954,113957,113978,113981,113984,114027,114030,114033,114053,114060,114062,114080,114095,114098,114104,114107,114113,114130,114137,114168,114179,114213,114224,114241,114250,114258,114263,114277,114280,114301,114307,114320,114325,114355,114365,114390,114398,114421,114424,114440,114443,114451,114457,114478,114491,114512,114521,114560,114571,114573,114576,114582,114585,114588,114594,114597,114617,114620,114622,114660,114662,114665,114673,114676,114679,114706,114709,114719,114725,114728,114734,114736,114742,114746,114749,114751,114754,114778,114781],[10,112915,112911],{"id":112916},"_6控制任务cartpole",[14,112918,17],{"id":16},[19,112920,112921],{},"本章搭建一个最小 Cartpole 控制任务。",[19,112923,107822],{},[211,112925,112926,112929,112931,112934,112937,112940],{},[214,112927,112928],{},"slide joint",[214,112930,109667],{},[214,112932,112933],{},"cart force actuator",[214,112935,112936],{},"状态观测",[214,112938,112939],{},"简单控制循环",[214,112941,112942],{},"reward 设计雏形",[19,112944,112945],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[26,112947,112950],{"className":112948,"code":112949,"language":80,"meta":31},[78],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[33,112951,112949],{"__ignoreMap":31},[19,112953,112954],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,112956,86],{"id":85},[19,112958,89],{},[26,112960,112961],{"className":92,"code":93,"language":94,"meta":31,"style":31},[33,112962,112963],{"__ignoreMap":31},[36,112964,112965,112967,112969,112971,112973,112975,112977,112979,112981],{"class":38,"line":39},[36,112966,102],{"class":101},[36,112968,106],{"class":105},[36,112970,109],{"class":105},[36,112972,113],{"class":112},[36,112974,116],{"class":105},[36,112976,119],{"class":105},[36,112978,122],{"class":105},[36,112980,125],{"class":105},[36,112982,128],{"class":105},[19,112984,131],{},[26,112986,112987],{"className":92,"code":104459,"language":94,"meta":31,"style":31},[33,112988,112989],{"__ignoreMap":31},[36,112990,112991,112993,112995,112997],{"class":38,"line":39},[36,112992,141],{"class":101},[36,112994,109],{"class":105},[36,112996,146],{"class":105},[36,112998,104472],{"class":105},[19,113000,155],{},[26,113002,113004],{"className":92,"code":113003,"language":94,"meta":31,"style":31},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[33,113005,113006,113023,113032],{"__ignoreMap":31},[36,113007,113008,113010,113012,113014,113017,113019,113021],{"class":38,"line":39},[36,113009,165],{"class":101},[36,113011,168],{"class":105},[36,113013,171],{"class":112},[36,113015,113016],{"class":105}," mujoco-cartpole",[36,113018,177],{"class":105},[36,113020,180],{"class":112},[36,113022,183],{"class":112},[36,113024,113025,113027,113029],{"class":38,"line":53},[36,113026,165],{"class":101},[36,113028,190],{"class":105},[36,113030,113031],{"class":105}," mujoco-cartpole\n",[36,113033,113034,113036,113038,113040],{"class":38,"line":196},[36,113035,141],{"class":101},[36,113037,109],{"class":105},[36,113039,146],{"class":105},[36,113041,104472],{"class":105},[19,113043,209],{},[211,113045,113046,113049,113052],{},[214,113047,113048],{},"本章不依赖 Gymnasium。",[214,113050,113051],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[214,113053,113054],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,113056,243],{"id":242},[19,113058,113059],{},"Cartpole 的模型结构:",[26,113061,113064],{"className":113062,"code":113063,"language":80,"meta":31},[78],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[33,113065,113063],{"__ignoreMap":31},[19,113067,113068],{},"小车通过 slide joint 左右移动:",[26,113070,113072],{"className":56624,"code":113071,"language":56626,"meta":31,"style":31},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[33,113073,113074],{"__ignoreMap":31},[36,113075,113076,113078,113080,113082,113084,113087,113089,113091,113094,113096,113098,113101],{"class":38,"line":39},[36,113077,393],{"class":42},[36,113079,106449],{"class":54857},[36,113081,18576],{"class":101},[36,113083,47],{"class":42},[36,113085,113086],{"class":105},"\"cart_x\"",[36,113088,57381],{"class":101},[36,113090,47],{"class":42},[36,113092,113093],{"class":105},"\"slide\"",[36,113095,109511],{"class":101},[36,113097,47],{"class":42},[36,113099,113100],{"class":105},"\"1 0 0\"",[36,113102,104674],{"class":42},[19,113104,113105],{},"杆子通过 hinge joint 旋转:",[26,113107,113109],{"className":56624,"code":113108,"language":56626,"meta":31,"style":31},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,113110,113111],{"__ignoreMap":31},[36,113112,113113,113115,113117,113119,113121,113124,113126,113128,113130,113132,113134,113136],{"class":38,"line":39},[36,113114,393],{"class":42},[36,113116,106449],{"class":54857},[36,113118,18576],{"class":101},[36,113120,47],{"class":42},[36,113122,113123],{"class":105},"\"pole_hinge\"",[36,113125,57381],{"class":101},[36,113127,47],{"class":42},[36,113129,109502],{"class":105},[36,113131,109511],{"class":101},[36,113133,47],{"class":42},[36,113135,109516],{"class":105},[36,113137,104674],{"class":42},[19,113139,113140],{},"控制力作用在小车 slide joint 上:",[26,113142,113144],{"className":56624,"code":113143,"language":56626,"meta":31,"style":31},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[33,113145,113146],{"__ignoreMap":31},[36,113147,113148,113150,113152,113154,113156,113159,113161,113163,113165,113167,113169,113171],{"class":38,"line":39},[36,113149,393],{"class":42},[36,113151,109557],{"class":54857},[36,113153,18576],{"class":101},[36,113155,47],{"class":42},[36,113157,113158],{"class":105},"\"cart_motor\"",[36,113160,109567],{"class":101},[36,113162,47],{"class":42},[36,113164,113086],{"class":105},[36,113166,109574],{"class":101},[36,113168,47],{"class":42},[36,113170,57873],{"class":105},[36,113172,104674],{"class":42},[318,113174,113176],{"id":113175},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,113178,113179],{},"这个简化模型有两个关节：",[248,113181,113182,113193],{},[251,113183,113184],{},[254,113185,113186,113188,113190],{},[257,113187,106254],{"align":259},[257,113189,27357],{"align":259},[257,113191,113192],{"align":259},"对应状态",[265,113194,113195,113208],{},[254,113196,113197,113202,113205],{},[270,113198,113199],{"align":259},[33,113200,113201],{},"cart_x",[270,113203,113204],{"align":259},"slide",[270,113206,113207],{"align":259},"小车 x 位置",[254,113209,113210,113215,113217],{},[270,113211,113212],{"align":259},[33,113213,113214],{},"pole_hinge",[270,113216,109323],{"align":259},[270,113218,113219],{"align":259},"杆子角度",[19,113221,113222],{},"所以：",[26,113224,113227],{"className":113225,"code":113226,"language":80,"meta":31},[78],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[33,113228,113226],{"__ignoreMap":31},[19,113230,113231],{},"把它们拼起来就是观测：",[26,113233,113236],{"className":113234,"code":113235,"language":80,"meta":31},[78],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,113237,113235],{"__ignoreMap":31},[318,113239,113241],{"id":113240},"action-是什么","action 是什么",[19,113243,113244],{},"本章只有一个 actuator：",[26,113246,113249],{"className":113247,"code":113248,"language":80,"meta":31},[78],"data.ctrl[0] = action\n",[33,113250,113248],{"__ignoreMap":31},[19,113252,113253],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[318,113255,113257],{"id":113256},"reward-是什么","reward 是什么",[19,113259,113260],{},"奖励函数：",[26,113262,113264],{"className":28,"code":113263,"language":30,"meta":31,"style":31},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[33,113265,113266],{"__ignoreMap":31},[36,113267,113268,113270,113272,113274,113276,113278,113281,113283,113286,113288,113290,113292,113295,113297],{"class":38,"line":39},[36,113269,2822],{"class":46},[36,113271,1341],{"class":112},[36,113273,495],{"class":42},[36,113275,475],{"class":112},[36,113277,55828],{"class":46},[36,113279,113280],{"class":112}," 0.1",[36,113282,1325],{"class":46},[36,113284,113285],{"class":42}," cart_x ",[36,113287,1372],{"class":46},[36,113289,113285],{"class":42},[36,113291,1308],{"class":46},[36,113293,113294],{"class":42}," pole_angle ",[36,113296,1372],{"class":46},[36,113298,113299],{"class":42}," pole_angle)\n",[19,113301,109709],{},[211,113303,113304,113309,113312],{},[214,113305,113306,113307,224],{},"基础奖励是 ",[33,113308,475],{},[214,113310,113311],{},"小车离中心越远，扣分越多。",[214,113313,113314],{},"杆子角度越大，扣分越多。",[19,113316,113317],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,113319,601],{"id":600},[26,113321,113323],{"className":28,"code":113322,"language":30,"meta":31,"style":31},"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",[33,113324,113325,113331,113341,113345,113349,113357,113362,113366,113370,113374,113379,113383,113388,113393,113398,113402,113407,113412,113417,113421,113425,113429,113433,113437,113442,113446,113450,113454,113458,113462,113472,113479,113483,113487,113501,113515,113528,113558,113562,113566,113578,113590,113598,113602,113615,113619,113623,113631,113635,113651,113660,113673,113686,113690,113712,113730,113734,113746,113750,113754,113763,113771,113775,113791,113829,113833,113851,113867,113871,113875,113887],{"__ignoreMap":31},[36,113326,113327,113329],{"class":38,"line":39},[36,113328,611],{"class":46},[36,113330,627],{"class":42},[36,113332,113333,113335,113337,113339],{"class":38,"line":53},[36,113334,611],{"class":46},[36,113336,634],{"class":42},[36,113338,617],{"class":46},[36,113340,639],{"class":42},[36,113342,113343],{"class":38,"line":196},[36,113344,659],{"emptyLinePlaceholder":658},[36,113346,113347],{"class":38,"line":642},[36,113348,659],{"emptyLinePlaceholder":658},[36,113350,113351,113353,113355],{"class":38,"line":655},[36,113352,670],{"class":112},[36,113354,673],{"class":46},[36,113356,676],{"class":105},[36,113358,113359],{"class":38,"line":662},[36,113360,113361],{"class":105},"\u003Cmujoco model=\"cartpole\">\n",[36,113363,113364],{"class":38,"line":667},[36,113365,104852],{"class":105},[36,113367,113368],{"class":38,"line":679},[36,113369,659],{"emptyLinePlaceholder":658},[36,113371,113372],{"class":38,"line":685},[36,113373,699],{"class":105},[36,113375,113376],{"class":38,"line":691},[36,113377,113378],{"class":105},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,113380,113381],{"class":38,"line":696},[36,113382,659],{"emptyLinePlaceholder":658},[36,113384,113385],{"class":38,"line":702},[36,113386,113387],{"class":105},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[36,113389,113390],{"class":38,"line":708},[36,113391,113392],{"class":105},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[36,113394,113395],{"class":38,"line":713},[36,113396,113397],{"class":105},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[36,113399,113400],{"class":38,"line":719},[36,113401,659],{"emptyLinePlaceholder":658},[36,113403,113404],{"class":38,"line":725},[36,113405,113406],{"class":105},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[36,113408,113409],{"class":38,"line":731},[36,113410,113411],{"class":105},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[36,113413,113414],{"class":38,"line":736},[36,113415,113416],{"class":105},"        \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",[36,113418,113419],{"class":38,"line":742},[36,113420,763],{"class":105},[36,113422,113423],{"class":38,"line":748},[36,113424,769],{"class":105},[36,113426,113427],{"class":38,"line":754},[36,113428,775],{"class":105},[36,113430,113431],{"class":38,"line":760},[36,113432,659],{"emptyLinePlaceholder":658},[36,113434,113435],{"class":38,"line":766},[36,113436,786],{"class":105},[36,113438,113439],{"class":38,"line":772},[36,113440,113441],{"class":105},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,113443,113444],{"class":38,"line":778},[36,113445,804],{"class":105},[36,113447,113448],{"class":38,"line":783},[36,113449,810],{"class":105},[36,113451,113452],{"class":38,"line":789},[36,113453,816],{"class":105},[36,113455,113456],{"class":38,"line":795},[36,113457,659],{"emptyLinePlaceholder":658},[36,113459,113460],{"class":38,"line":801},[36,113461,659],{"emptyLinePlaceholder":658},[36,113463,113464,113466,113469],{"class":38,"line":807},[36,113465,1820],{"class":46},[36,113467,113468],{"class":101}," get_observation",[36,113470,113471],{"class":42},"(data: mujoco.MjData) -> np.ndarray:\n",[36,113473,113474,113476],{"class":38,"line":813},[36,113475,7788],{"class":46},[36,113477,113478],{"class":42}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[36,113480,113481],{"class":38,"line":819},[36,113482,659],{"emptyLinePlaceholder":658},[36,113484,113485],{"class":38,"line":824},[36,113486,659],{"emptyLinePlaceholder":658},[36,113488,113489,113491,113494,113497,113499],{"class":38,"line":829},[36,113490,1820],{"class":46},[36,113492,113493],{"class":101}," compute_reward",[36,113495,113496],{"class":42},"(obs: np.ndarray) -> ",[36,113498,1260],{"class":112},[36,113500,888],{"class":42},[36,113502,113503,113506,113508,113511,113513],{"class":38,"line":851},[36,113504,113505],{"class":42},"    cart_x ",[36,113507,47],{"class":46},[36,113509,113510],{"class":42}," obs[",[36,113512,1859],{"class":112},[36,113514,36806],{"class":42},[36,113516,113517,113520,113522,113524,113526],{"class":38,"line":868},[36,113518,113519],{"class":42},"    pole_angle ",[36,113521,47],{"class":46},[36,113523,113510],{"class":42},[36,113525,4092],{"class":112},[36,113527,36806],{"class":42},[36,113529,113530,113532,113534,113536,113538,113540,113542,113544,113546,113548,113550,113552,113554,113556],{"class":38,"line":873},[36,113531,7788],{"class":46},[36,113533,1341],{"class":112},[36,113535,495],{"class":42},[36,113537,475],{"class":112},[36,113539,55828],{"class":46},[36,113541,113280],{"class":112},[36,113543,1325],{"class":46},[36,113545,113285],{"class":42},[36,113547,1372],{"class":46},[36,113549,113285],{"class":42},[36,113551,1308],{"class":46},[36,113553,113294],{"class":42},[36,113555,1372],{"class":46},[36,113557,113299],{"class":42},[36,113559,113560],{"class":38,"line":891},[36,113561,659],{"emptyLinePlaceholder":658},[36,113563,113564],{"class":38,"line":906},[36,113565,659],{"emptyLinePlaceholder":658},[36,113567,113568,113570,113572,113574,113576],{"class":38,"line":925},[36,113569,1820],{"class":46},[36,113571,1823],{"class":101},[36,113573,1826],{"class":42},[36,113575,885],{"class":112},[36,113577,888],{"class":42},[36,113579,113580,113582,113584,113586,113588],{"class":38,"line":943},[36,113581,104925],{"class":42},[36,113583,47],{"class":46},[36,113585,917],{"class":42},[36,113587,670],{"class":112},[36,113589,922],{"class":42},[36,113591,113592,113594,113596],{"class":38,"line":948},[36,113593,104938],{"class":42},[36,113595,47],{"class":46},[36,113597,104943],{"class":42},[36,113599,113600],{"class":38,"line":971},[36,113601,659],{"emptyLinePlaceholder":658},[36,113603,113604,113606,113608,113610,113612],{"class":38,"line":992},[36,113605,108554],{"class":42},[36,113607,4092],{"class":112},[36,113609,8140],{"class":42},[36,113611,47],{"class":46},[36,113613,113614],{"class":112}," 0.1\n",[36,113616,113617],{"class":38,"line":1020},[36,113618,108567],{"class":42},[36,113620,113621],{"class":38,"line":1036},[36,113622,659],{"emptyLinePlaceholder":658},[36,113624,113625,113627,113629],{"class":38,"line":1041},[36,113626,1899],{"class":42},[36,113628,47],{"class":46},[36,113630,1496],{"class":112},[36,113632,113633],{"class":38,"line":1052},[36,113634,659],{"emptyLinePlaceholder":658},[36,113636,113637,113639,113641,113643,113645,113647,113649],{"class":38,"line":1065},[36,113638,1909],{"class":46},[36,113640,1912],{"class":42},[36,113642,1619],{"class":46},[36,113644,1622],{"class":112},[36,113646,495],{"class":42},[36,113648,3727],{"class":112},[36,113650,848],{"class":42},[36,113652,113653,113655,113657],{"class":38,"line":1077},[36,113654,1218],{"class":42},[36,113656,47],{"class":46},[36,113658,113659],{"class":42}," get_observation(data)\n",[36,113661,113662,113665,113667,113669,113671],{"class":38,"line":1082},[36,113663,113664],{"class":42},"        pole_angle ",[36,113666,47],{"class":46},[36,113668,113510],{"class":42},[36,113670,4092],{"class":112},[36,113672,36806],{"class":42},[36,113674,113675,113678,113680,113682,113684],{"class":38,"line":1125},[36,113676,113677],{"class":42},"        pole_angular_velocity ",[36,113679,47],{"class":46},[36,113681,113510],{"class":42},[36,113683,1982],{"class":112},[36,113685,36806],{"class":42},[36,113687,113688],{"class":38,"line":1164},[36,113689,659],{"emptyLinePlaceholder":658},[36,113691,113692,113694,113696,113699,113701,113703,113705,113707,113709],{"class":38,"line":1169},[36,113693,1558],{"class":42},[36,113695,47],{"class":46},[36,113697,113698],{"class":112}," 2.0",[36,113700,1325],{"class":46},[36,113702,113294],{"class":42},[36,113704,4354],{"class":46},[36,113706,65422],{"class":112},[36,113708,1325],{"class":46},[36,113710,113711],{"class":42}," pole_angular_velocity\n",[36,113713,113714,113716,113718,113720,113722,113724,113726,113728],{"class":38,"line":1180},[36,113715,1558],{"class":42},[36,113717,47],{"class":46},[36,113719,1579],{"class":42},[36,113721,1308],{"class":46},[36,113723,475],{"class":112},[36,113725,478],{"class":42},[36,113727,475],{"class":112},[36,113729,922],{"class":42},[36,113731,113732],{"class":38,"line":1198},[36,113733,659],{"emptyLinePlaceholder":658},[36,113735,113736,113738,113740,113742,113744],{"class":38,"line":1215},[36,113737,110097],{"class":42},[36,113739,1859],{"class":112},[36,113741,8140],{"class":42},[36,113743,47],{"class":46},[36,113745,1607],{"class":42},[36,113747,113748],{"class":38,"line":1236},[36,113749,105032],{"class":42},[36,113751,113752],{"class":38,"line":1245},[36,113753,659],{"emptyLinePlaceholder":658},[36,113755,113756,113758,113760],{"class":38,"line":1250},[36,113757,1684],{"class":42},[36,113759,47],{"class":46},[36,113761,113762],{"class":42}," compute_reward(get_observation(data))\n",[36,113764,113765,113767,113769],{"class":38,"line":1265},[36,113766,1949],{"class":42},[36,113768,1658],{"class":46},[36,113770,1954],{"class":42},[36,113772,113773],{"class":38,"line":1281},[36,113774,659],{"emptyLinePlaceholder":658},[36,113776,113777,113779,113781,113783,113785,113787,113789],{"class":38,"line":1297},[36,113778,995],{"class":46},[36,113780,1912],{"class":42},[36,113782,4203],{"class":46},[36,113784,9447],{"class":112},[36,113786,2073],{"class":46},[36,113788,1004],{"class":112},[36,113790,888],{"class":42},[36,113792,113793,113795,113797,113799,113801,113804,113807,113809,113811,113814,113816,113818,113820,113822,113825,113827],{"class":38,"line":1314},[36,113794,38210],{"class":112},[36,113796,495],{"class":42},[36,113798,1965],{"class":105},[36,113800,1968],{"class":42},[36,113802,113803],{"class":105},"\"obs:\"",[36,113805,113806],{"class":42},", np.round(obs, ",[36,113808,1982],{"class":112},[36,113810,1985],{"class":42},[36,113812,113813],{"class":105},"\"action:\"",[36,113815,478],{"class":42},[36,113817,1976],{"class":112},[36,113819,495],{"class":42},[36,113821,1260],{"class":112},[36,113823,113824],{"class":42},"(action), ",[36,113826,1982],{"class":112},[36,113828,2005],{"class":42},[36,113830,113831],{"class":38,"line":1336},[36,113832,659],{"emptyLinePlaceholder":658},[36,113834,113835,113837,113839,113841,113843,113845,113847,113849],{"class":38,"line":1356},[36,113836,1867],{"class":112},[36,113838,495],{"class":42},[36,113840,2040],{"class":105},[36,113842,478],{"class":42},[36,113844,1976],{"class":112},[36,113846,2047],{"class":42},[36,113848,1982],{"class":112},[36,113850,2005],{"class":42},[36,113852,113853,113855,113857,113860,113863,113865],{"class":38,"line":1361},[36,113854,1867],{"class":112},[36,113856,495],{"class":42},[36,113858,113859],{"class":105},"\"final obs:\"",[36,113861,113862],{"class":42},", np.round(get_observation(data), ",[36,113864,1982],{"class":112},[36,113866,2005],{"class":42},[36,113868,113869],{"class":38,"line":1407},[36,113870,659],{"emptyLinePlaceholder":658},[36,113872,113873],{"class":38,"line":1423},[36,113874,659],{"emptyLinePlaceholder":658},[36,113876,113877,113879,113881,113883,113885],{"class":38,"line":1439},[36,113878,2067],{"class":46},[36,113880,2070],{"class":112},[36,113882,2073],{"class":46},[36,113884,2076],{"class":105},[36,113886,888],{"class":42},[36,113888,113889],{"class":38,"line":1444},[36,113890,2084],{"class":42},[19,113892,2087],{},[26,113894,113896],{"className":92,"code":113895,"language":94,"meta":31,"style":31},"touch ch6_cartpole.py\n",[33,113897,113898],{"__ignoreMap":31},[36,113899,113900,113902],{"class":38,"line":39},[36,113901,2097],{"class":101},[36,113903,113904],{"class":105}," ch6_cartpole.py\n",[19,113906,2103],{},[26,113908,113910],{"className":92,"code":113909,"language":94,"meta":31,"style":31},"python ch6_cartpole.py\n",[33,113911,113912],{"__ignoreMap":31},[36,113913,113914,113916],{"class":38,"line":39},[36,113915,30],{"class":101},[36,113917,113904],{"class":105},[318,113919,2117],{"id":2117},[19,113921,113922],{},"构造观测：",[26,113924,113926],{"className":28,"code":113925,"language":30,"meta":31,"style":31},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[33,113927,113928,113936],{"__ignoreMap":31},[36,113929,113930,113932,113934],{"class":38,"line":39},[36,113931,1820],{"class":46},[36,113933,113468],{"class":101},[36,113935,113471],{"class":42},[36,113937,113938,113940],{"class":38,"line":53},[36,113939,7788],{"class":46},[36,113941,113478],{"class":42},[19,113943,113944,113947,113948,113950,113951,113953],{},[33,113945,113946],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[33,113949,107521],{}," 2 维，",[33,113952,107851],{}," 2 维，所以 obs 是 4 维。",[19,113955,113956],{},"设置初始角度：",[26,113958,113960],{"className":28,"code":113959,"language":30,"meta":31,"style":31},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[33,113961,113962,113974],{"__ignoreMap":31},[36,113963,113964,113966,113968,113970,113972],{"class":38,"line":39},[36,113965,108185],{"class":42},[36,113967,4092],{"class":112},[36,113969,8140],{"class":42},[36,113971,47],{"class":46},[36,113973,113614],{"class":112},[36,113975,113976],{"class":38,"line":53},[36,113977,108031],{"class":42},[19,113979,113980],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,113982,113983],{},"简单反馈控制：",[26,113985,113987],{"className":28,"code":113986,"language":30,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[33,113988,113989,114009],{"__ignoreMap":31},[36,113990,113991,113993,113995,113997,113999,114001,114003,114005,114007],{"class":38,"line":39},[36,113992,3053],{"class":42},[36,113994,47],{"class":46},[36,113996,113698],{"class":112},[36,113998,1325],{"class":46},[36,114000,113294],{"class":42},[36,114002,4354],{"class":46},[36,114004,65422],{"class":112},[36,114006,1325],{"class":46},[36,114008,113711],{"class":42},[36,114010,114011,114013,114015,114017,114019,114021,114023,114025],{"class":38,"line":53},[36,114012,3053],{"class":42},[36,114014,47],{"class":46},[36,114016,1579],{"class":42},[36,114018,1308],{"class":46},[36,114020,475],{"class":112},[36,114022,478],{"class":42},[36,114024,475],{"class":112},[36,114026,922],{"class":42},[19,114028,114029],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,114031,114032],{},"限制动作：",[26,114034,114036],{"className":28,"code":114035,"language":30,"meta":31,"style":31},"np.clip(action, -1.0, 1.0)\n",[33,114037,114038],{"__ignoreMap":31},[36,114039,114040,114043,114045,114047,114049,114051],{"class":38,"line":39},[36,114041,114042],{"class":42},"np.clip(action, ",[36,114044,1308],{"class":46},[36,114046,475],{"class":112},[36,114048,478],{"class":42},[36,114050,475],{"class":112},[36,114052,922],{"class":42},[19,114054,114055,114056,114059],{},"因为 XML 里 ",[33,114057,114058],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[318,114061,2338],{"id":2338},[26,114063,114064],{"className":28,"code":113925,"language":30,"meta":31,"style":31},[33,114065,114066,114074],{"__ignoreMap":31},[36,114067,114068,114070,114072],{"class":38,"line":39},[36,114069,1820],{"class":46},[36,114071,113468],{"class":101},[36,114073,113471],{"class":42},[36,114075,114076,114078],{"class":38,"line":53},[36,114077,7788],{"class":46},[36,114079,113478],{"class":42},[19,114081,114082,114083,114086,114087,114090,114091,114094],{},"这段定义了一个函数，用来获取当前观测。",[33,114084,114085],{},"data.qpos.copy()"," 是位置数组副本，",[33,114088,114089],{},"data.qvel.copy()"," 是速度数组副本。",[33,114092,114093],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,114096,114097],{},"在本章模型里：",[26,114099,114102],{"className":114100,"code":114101,"language":80,"meta":31},[78],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[33,114103,114101],{"__ignoreMap":31},[19,114105,114106],{},"所以返回的 obs 是：",[26,114108,114111],{"className":114109,"code":114110,"language":80,"meta":31},[78],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[33,114112,114110],{"__ignoreMap":31},[26,114114,114116],{"className":28,"code":114115,"language":30,"meta":31,"style":31},"def compute_reward(obs: np.ndarray) -> float:\n",[33,114117,114118],{"__ignoreMap":31},[36,114119,114120,114122,114124,114126,114128],{"class":38,"line":39},[36,114121,1820],{"class":46},[36,114123,113493],{"class":101},[36,114125,113496],{"class":42},[36,114127,1260],{"class":112},[36,114129,888],{"class":42},[19,114131,114132,114133,114136],{},"这行定义奖励函数。输入是观测 ",[33,114134,114135],{},"obs","，输出是一个浮点数奖励。",[26,114138,114140],{"className":28,"code":114139,"language":30,"meta":31,"style":31},"cart_x = obs[0]\npole_angle = obs[1]\n",[33,114141,114142,114155],{"__ignoreMap":31},[36,114143,114144,114147,114149,114151,114153],{"class":38,"line":39},[36,114145,114146],{"class":42},"cart_x ",[36,114148,47],{"class":46},[36,114150,113510],{"class":42},[36,114152,1859],{"class":112},[36,114154,36806],{"class":42},[36,114156,114157,114160,114162,114164,114166],{"class":38,"line":53},[36,114158,114159],{"class":42},"pole_angle ",[36,114161,47],{"class":46},[36,114163,113510],{"class":42},[36,114165,4092],{"class":112},[36,114167,36806],{"class":42},[19,114169,114170,114171,114174,114175,114178],{},"数组索引从 0 开始。",[33,114172,114173],{},"obs[0]"," 是第一个元素，也就是小车位置。",[33,114176,114177],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[26,114180,114181],{"className":28,"code":113263,"language":30,"meta":31,"style":31},[33,114182,114183],{"__ignoreMap":31},[36,114184,114185,114187,114189,114191,114193,114195,114197,114199,114201,114203,114205,114207,114209,114211],{"class":38,"line":39},[36,114186,2822],{"class":46},[36,114188,1341],{"class":112},[36,114190,495],{"class":42},[36,114192,475],{"class":112},[36,114194,55828],{"class":46},[36,114196,113280],{"class":112},[36,114198,1325],{"class":46},[36,114200,113285],{"class":42},[36,114202,1372],{"class":46},[36,114204,113285],{"class":42},[36,114206,1308],{"class":46},[36,114208,113294],{"class":42},[36,114210,1372],{"class":46},[36,114212,113299],{"class":42},[19,114214,114215,114216,114219,114220,114223],{},"这行计算奖励。",[33,114217,114218],{},"cart_x * cart_x"," 是小车位置的平方，",[33,114221,114222],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[26,114225,114227],{"className":28,"code":114226,"language":30,"meta":31,"style":31},"data.qpos[1] = 0.1\n",[33,114228,114229],{"__ignoreMap":31},[36,114230,114231,114233,114235,114237,114239],{"class":38,"line":39},[36,114232,108185],{"class":42},[36,114234,4092],{"class":112},[36,114236,8140],{"class":42},[36,114238,47],{"class":46},[36,114240,113614],{"class":112},[19,114242,114243,114244,114246,114247,114249],{},"手动设置杆子的初始角度。因为 ",[33,114245,108941],{}," 是小车位置，",[33,114248,108944],{}," 是杆子角度，所以这里改的是杆子。",[26,114251,114252],{"className":28,"code":108031,"language":30,"meta":31,"style":31},[33,114253,114254],{"__ignoreMap":31},[36,114255,114256],{"class":38,"line":39},[36,114257,108031],{"class":42},[19,114259,108986,114260,114262],{},[33,114261,107521],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[26,114264,114266],{"className":28,"code":114265,"language":30,"meta":31,"style":31},"total_reward = 0.0\n",[33,114267,114268],{"__ignoreMap":31},[36,114269,114270,114273,114275],{"class":38,"line":39},[36,114271,114272],{"class":42},"total_reward ",[36,114274,47],{"class":46},[36,114276,1496],{"class":112},[19,114278,114279],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[26,114281,114283],{"className":28,"code":114282,"language":30,"meta":31,"style":31},"for step in range(1000):\n",[33,114284,114285],{"__ignoreMap":31},[36,114286,114287,114289,114291,114293,114295,114297,114299],{"class":38,"line":39},[36,114288,3120],{"class":46},[36,114290,1912],{"class":42},[36,114292,1619],{"class":46},[36,114294,1622],{"class":112},[36,114296,495],{"class":42},[36,114298,3727],{"class":112},[36,114300,848],{"class":42},[19,114302,114303,114304,114306],{},"循环 1000 步。",[33,114305,2311],{}," 是当前步数，从 0 到 999。",[26,114308,114310],{"className":28,"code":114309,"language":30,"meta":31,"style":31},"obs = get_observation(data)\n",[33,114311,114312],{"__ignoreMap":31},[36,114313,114314,114316,114318],{"class":38,"line":39},[36,114315,2805],{"class":42},[36,114317,47],{"class":46},[36,114319,113659],{"class":42},[19,114321,114322,114323,224],{},"读取当前状态，保存到 ",[33,114324,114135],{},[26,114326,114328],{"className":28,"code":114327,"language":30,"meta":31,"style":31},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[33,114329,114330,114342],{"__ignoreMap":31},[36,114331,114332,114334,114336,114338,114340],{"class":38,"line":39},[36,114333,114159],{"class":42},[36,114335,47],{"class":46},[36,114337,113510],{"class":42},[36,114339,4092],{"class":112},[36,114341,36806],{"class":42},[36,114343,114344,114347,114349,114351,114353],{"class":38,"line":53},[36,114345,114346],{"class":42},"pole_angular_velocity ",[36,114348,47],{"class":46},[36,114350,113510],{"class":42},[36,114352,1982],{"class":112},[36,114354,36806],{"class":42},[19,114356,114357,114358,114361,114362,224],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[33,114359,114360],{},"obs[3]","？因为 obs 的顺序是 ",[33,114363,114364],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[26,114366,114368],{"className":28,"code":114367,"language":30,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[33,114369,114370],{"__ignoreMap":31},[36,114371,114372,114374,114376,114378,114380,114382,114384,114386,114388],{"class":38,"line":39},[36,114373,3053],{"class":42},[36,114375,47],{"class":46},[36,114377,113698],{"class":112},[36,114379,1325],{"class":46},[36,114381,113294],{"class":42},[36,114383,4354],{"class":46},[36,114385,65422],{"class":112},[36,114387,1325],{"class":46},[36,114389,113711],{"class":42},[19,114391,114392,114393,324,114395,114397],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[33,114394,108745],{},[33,114396,38889],{}," 是人为设置的系数，不是固定公式。",[26,114399,114401],{"className":28,"code":114400,"language":30,"meta":31,"style":31},"action = np.clip(action, -1.0, 1.0)\n",[33,114402,114403],{"__ignoreMap":31},[36,114404,114405,114407,114409,114411,114413,114415,114417,114419],{"class":38,"line":39},[36,114406,3053],{"class":42},[36,114408,47],{"class":46},[36,114410,1579],{"class":42},[36,114412,1308],{"class":46},[36,114414,475],{"class":112},[36,114416,478],{"class":42},[36,114418,475],{"class":112},[36,114420,922],{"class":42},[19,114422,114423],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[26,114425,114426],{"className":28,"code":113248,"language":30,"meta":31,"style":31},[33,114427,114428],{"__ignoreMap":31},[36,114429,114430,114432,114434,114436,114438],{"class":38,"line":39},[36,114431,109354],{"class":42},[36,114433,1859],{"class":112},[36,114435,8140],{"class":42},[36,114437,47],{"class":46},[36,114439,1607],{"class":42},[19,114441,114442],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[26,114444,114445],{"className":28,"code":107993,"language":30,"meta":31,"style":31},[33,114446,114447],{"__ignoreMap":31},[36,114448,114449],{"class":38,"line":39},[36,114450,107993],{"class":42},[19,114452,114453,114454,114456],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[33,114455,109609],{}," 计算小车和杆子的下一刻状态。",[26,114458,114460],{"className":28,"code":114459,"language":30,"meta":31,"style":31},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[33,114461,114462,114470],{"__ignoreMap":31},[36,114463,114464,114466,114468],{"class":38,"line":39},[36,114465,3195],{"class":42},[36,114467,47],{"class":46},[36,114469,113762],{"class":42},[36,114471,114472,114474,114476],{"class":38,"line":53},[36,114473,114272],{"class":42},[36,114475,1658],{"class":46},[36,114477,1954],{"class":42},[19,114479,114480,114481,114483,114484,114487,114488,224],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[33,114482,1658],{}," 是简写，",[33,114485,114486],{},"total_reward += reward"," 等价于 ",[33,114489,114490],{},"total_reward = total_reward + reward",[26,114492,114494],{"className":28,"code":114493,"language":30,"meta":31,"style":31},"if step % 100 == 0:\n",[33,114495,114496],{"__ignoreMap":31},[36,114497,114498,114500,114502,114504,114506,114508,114510],{"class":38,"line":39},[36,114499,2067],{"class":46},[36,114501,1912],{"class":42},[36,114503,4203],{"class":46},[36,114505,9447],{"class":112},[36,114507,2073],{"class":46},[36,114509,1004],{"class":112},[36,114511,888],{"class":42},[19,114513,114514,114516,114517,114520],{},[33,114515,4203],{}," 是取余数。",[33,114518,114519],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[26,114522,114524],{"className":28,"code":114523,"language":30,"meta":31,"style":31},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[33,114525,114526],{"__ignoreMap":31},[36,114527,114528,114530,114532,114534,114536,114538,114540,114542,114544,114546,114548,114550,114552,114554,114556,114558],{"class":38,"line":39},[36,114529,3486],{"class":112},[36,114531,495],{"class":42},[36,114533,1965],{"class":105},[36,114535,1968],{"class":42},[36,114537,113803],{"class":105},[36,114539,113806],{"class":42},[36,114541,1982],{"class":112},[36,114543,1985],{"class":42},[36,114545,113813],{"class":105},[36,114547,478],{"class":42},[36,114549,1976],{"class":112},[36,114551,495],{"class":42},[36,114553,1260],{"class":112},[36,114555,113824],{"class":42},[36,114557,1982],{"class":112},[36,114559,2005],{"class":42},[19,114561,114562,114563,114566,114567,114570],{},"打印当前步数、观测和动作。",[33,114564,114565],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[33,114568,114569],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,114572,3348],{"id":3347},[19,114574,114575],{},"观测向量:",[26,114577,114580],{"className":114578,"code":114579,"language":80,"meta":31},[78],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,114581,114579],{"__ignoreMap":31},[19,114583,114584],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,114586,114587],{},"每隔 100 步会打印一次：",[26,114589,114592],{"className":114590,"code":114591,"language":80,"meta":31},[78],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[33,114593,114591],{"__ignoreMap":31},[19,114595,114596],{},"重点观察：",[211,114598,114599,114605,114610],{},[214,114600,114601,114604],{},[33,114602,114603],{},"pole_angle"," 是否越来越大。",[214,114606,114607,114609],{},[33,114608,113201],{}," 是否跑得太远。",[214,114611,114612,114613,86093,114615,224],{},"action 是否经常被 clip 到 ",[33,114614,107406],{},[33,114616,4092],{},[19,114618,114619],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,114621,3382],{"id":3381},[211,114623,114624,114630,114633,114639,114648,114654,114657],{},[214,114625,114626,114627,224],{},"把初始角度改为 ",[33,114628,114629],{},"data.qpos[1] = 0.3",[214,114631,114632],{},"重新运行，观察控制是否变差。",[214,114634,114635,114636,114638],{},"把 actuator ",[33,114637,110547],{}," 改小。",[214,114640,3396,114641,114644,114645,224],{},[33,114642,114643],{},"model.nq, model.nv, model.nu","，应为 ",[33,114646,114647],{},"2 2 1",[214,114649,114650,114651,114653],{},"把 reward 里的 ",[33,114652,114222],{}," 系数改大，观察总奖励变化。",[214,114655,114656],{},"把控制器改成反号，观察杆子是否更容易倒。",[214,114658,114659],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,114661,3444],{"id":3443},[318,114663,114664],{"id":114664},"杆子方向和预期不一致",[19,114666,105901,114667,114669,114670,114672],{},[33,114668,109722],{}," 和 capsule 的 ",[33,114671,106669],{},"，必要时用 viewer 可视化确认。",[318,114674,114675],{"id":114675},"控制器越控越倒",[19,114677,114678],{},"说明反馈符号可能反了，尝试:",[26,114680,114682],{"className":28,"code":114681,"language":30,"meta":31,"style":31},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[33,114683,114684],{"__ignoreMap":31},[36,114685,114686,114688,114690,114692,114694,114696,114698,114700,114702,114704],{"class":38,"line":39},[36,114687,3053],{"class":42},[36,114689,47],{"class":46},[36,114691,55828],{"class":46},[36,114693,108745],{"class":112},[36,114695,1325],{"class":46},[36,114697,113294],{"class":42},[36,114699,1308],{"class":46},[36,114701,65422],{"class":112},[36,114703,1325],{"class":46},[36,114705,113711],{"class":42},[318,114707,114708],{"id":114708},"小车飞走",[19,114710,114711,114712,114714,114715,114718],{},"降低 ",[33,114713,110547],{}," 或缩小 ",[33,114716,114717],{},"action"," 的 clip 范围。",[318,114720,114722,114724],{"id":114721},"obs3-为什么是杆子角速度",[33,114723,114360],{}," 为什么是杆子角速度",[19,114726,114727],{},"因为这个模型里：",[26,114729,114732],{"className":114730,"code":114731,"language":80,"meta":31},[78],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[33,114733,114731],{"__ignoreMap":31},[19,114735,113222],{},[26,114737,114740],{"className":114738,"code":114739,"language":80,"meta":31},[78],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[33,114741,114739],{"__ignoreMap":31},[318,114743,114745],{"id":114744},"reward-变成负数是否错误","reward 变成负数是否错误",[19,114747,114748],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,114750,106103],{"id":106102},[19,114752,114753],{},"一个控制任务通常包含：",[211,114755,114756,114759,114767,114772,114775],{},[214,114757,114758],{},"模型：Cartpole 的 body、joint、actuator。",[214,114760,114761,114762,4087,114764,114766],{},"观测：从 ",[33,114763,107521],{},[33,114765,107851],{}," 里取状态。",[214,114768,114769,114770,224],{},"动作：写入 ",[33,114771,3612],{},[214,114773,114774],{},"奖励：根据任务目标打分。",[214,114776,114777],{},"循环：obs -> action -> step -> reward。",[19,114779,114780],{},"这就是后面 Gymnasium 环境的基本骨架。",[3785,114782,107777],{},{"title":31,"searchDepth":53,"depth":53,"links":114784},[114785,114786,114787,114792,114796,114797,114798,114806],{"id":16,"depth":53,"text":17},{"id":85,"depth":53,"text":86},{"id":242,"depth":53,"text":243,"children":114788},[114789,114790,114791],{"id":113175,"depth":196,"text":113176},{"id":113240,"depth":196,"text":113241},{"id":113256,"depth":196,"text":113257},{"id":600,"depth":53,"text":601,"children":114793},[114794,114795],{"id":2117,"depth":196,"text":2117},{"id":2338,"depth":196,"text":2338},{"id":3347,"depth":53,"text":3348},{"id":3381,"depth":53,"text":3382},{"id":3443,"depth":53,"text":3444,"children":114799},[114800,114801,114802,114803,114805],{"id":114664,"depth":196,"text":114664},{"id":114675,"depth":196,"text":114675},{"id":114708,"depth":196,"text":114708},{"id":114721,"depth":196,"text":114804},"obs[3] 为什么是杆子角速度",{"id":114744,"depth":196,"text":114745},{"id":106102,"depth":53,"text":106103},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":112911,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":114813,"title":114814,"body":114815,"description":31,"extension":3817,"meta":116808,"navigation":658,"path":116809,"seo":116810,"stem":116811,"__hash__":116812},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":114816,"toc":116784},[114817,114820,114822,114825,114827,114844,114847,114850,114856,114859,114861,114863,114887,114889,114903,114905,114946,114948,114966,114968,114971,114977,114980,115007,115011,115017,115040,115043,115071,115078,115081,115084,115090,115093,115099,115102,115108,115112,115115,115140,115143,115145,115890,115892,115904,115906,115917,115919,115922,115939,115942,115944,115955,115958,115960,116006,116009,116022,116025,116107,116110,116112,116128,116138,116151,116154,116193,116203,116214,116224,116237,116240,116269,116272,116282,116285,116291,116308,116319,116321,116327,116344,116355,116376,116379,116391,116394,116415,116418,116426,116434,116451,116454,116523,116530,116538,116541,116554,116561,116563,116566,116572,116575,116578,116584,116590,116592,116632,116634,116640,116649,116652,116654,116674,116677,116680,116686,116690,116692,116719,116722,116725,116752,116758,116761,116764,116766,116769,116772,116778,116781],[10,114818,114814],{"id":114819},"_7控制任务reacher-机械臂到达目标",[14,114821,17],{"id":16},[19,114823,114824],{},"本章搭建一个二维两关节 reacher 任务。",[19,114826,107822],{},[211,114828,114829,114832,114835,114838,114841],{},[214,114830,114831],{},"两个 hinge joint",[214,114833,114834],{},"两个 motor actuator",[214,114836,114837],{},"site 作为末端点和目标点",[214,114839,114840],{},"根据末端和目标距离设计 reward",[214,114842,114843],{},"构造机械臂任务的基本形式",[19,114845,114846],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,114848,114849],{},"Reacher 任务可以理解为：",[26,114851,114854],{"className":114852,"code":114853,"language":80,"meta":31},[78],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[33,114855,114853],{"__ignoreMap":31},[19,114857,114858],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,114860,86],{"id":85},[19,114862,89],{},[26,114864,114865],{"className":92,"code":93,"language":94,"meta":31,"style":31},[33,114866,114867],{"__ignoreMap":31},[36,114868,114869,114871,114873,114875,114877,114879,114881,114883,114885],{"class":38,"line":39},[36,114870,102],{"class":101},[36,114872,106],{"class":105},[36,114874,109],{"class":105},[36,114876,113],{"class":112},[36,114878,116],{"class":105},[36,114880,119],{"class":105},[36,114882,122],{"class":105},[36,114884,125],{"class":105},[36,114886,128],{"class":105},[19,114888,131],{},[26,114890,114891],{"className":92,"code":104459,"language":94,"meta":31,"style":31},[33,114892,114893],{"__ignoreMap":31},[36,114894,114895,114897,114899,114901],{"class":38,"line":39},[36,114896,141],{"class":101},[36,114898,109],{"class":105},[36,114900,146],{"class":105},[36,114902,104472],{"class":105},[19,114904,155],{},[26,114906,114908],{"className":92,"code":114907,"language":94,"meta":31,"style":31},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[33,114909,114910,114927,114936],{"__ignoreMap":31},[36,114911,114912,114914,114916,114918,114921,114923,114925],{"class":38,"line":39},[36,114913,165],{"class":101},[36,114915,168],{"class":105},[36,114917,171],{"class":112},[36,114919,114920],{"class":105}," mujoco-reacher",[36,114922,177],{"class":105},[36,114924,180],{"class":112},[36,114926,183],{"class":112},[36,114928,114929,114931,114933],{"class":38,"line":53},[36,114930,165],{"class":101},[36,114932,190],{"class":105},[36,114934,114935],{"class":105}," mujoco-reacher\n",[36,114937,114938,114940,114942,114944],{"class":38,"line":196},[36,114939,141],{"class":101},[36,114941,109],{"class":105},[36,114943,146],{"class":105},[36,114945,104472],{"class":105},[19,114947,209],{},[211,114949,114950,114953,114956],{},[214,114951,114952],{},"本章使用低维状态，不使用图像输入。",[214,114954,114955],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[214,114957,114958,114959,4087,114961,4087,114963,114965],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[33,114960,107521],{},[33,114962,107851],{},[33,114964,107171],{}," 的方法一致。",[14,114967,243],{"id":242},[19,114969,114970],{},"Reacher 任务核心:",[26,114972,114975],{"className":114973,"code":114974,"language":80,"meta":31},[78],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[33,114976,114974],{"__ignoreMap":31},[19,114978,114979],{},"读取 site 世界坐标:",[26,114981,114983],{"className":28,"code":114982,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[33,114984,114985,114997],{"__ignoreMap":31},[36,114986,114987,114989,114991,114993,114995],{"class":38,"line":39},[36,114988,107125],{"class":42},[36,114990,47],{"class":46},[36,114992,106898],{"class":42},[36,114994,966],{"class":105},[36,114996,922],{"class":42},[36,114998,114999,115002,115004],{"class":38,"line":53},[36,115000,115001],{"class":42},"tip_pos ",[36,115003,47],{"class":46},[36,115005,115006],{"class":42}," data.site_xpos[site_id]\n",[318,115008,115010],{"id":115009},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,115012,115013,115014,115016],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[33,115015,107521],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[26,115018,115020],{"className":28,"code":115019,"language":30,"meta":31,"style":31},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[33,115021,115022,115031],{"__ignoreMap":31},[36,115023,115024,115026,115028],{"class":38,"line":39},[36,115025,2767],{"class":42},[36,115027,47],{"class":46},[36,115029,115030],{"class":42}," data.site_xpos[tip_site_id]\n",[36,115032,115033,115035,115037],{"class":38,"line":53},[36,115034,2782],{"class":42},[36,115036,47],{"class":46},[36,115038,115039],{"class":42}," data.site_xpos[target_site_id]\n",[19,115041,115042],{},"这样 reward 就很容易写：",[26,115044,115046],{"className":28,"code":115045,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[33,115047,115048,115060],{"__ignoreMap":31},[36,115049,115050,115052,115054,115056,115058],{"class":38,"line":39},[36,115051,1348],{"class":42},[36,115053,47],{"class":46},[36,115055,1305],{"class":42},[36,115057,1308],{"class":46},[36,115059,1311],{"class":42},[36,115061,115062,115064,115066,115068],{"class":38,"line":53},[36,115063,3195],{"class":42},[36,115065,47],{"class":46},[36,115067,55828],{"class":46},[36,115069,115070],{"class":42},"dist\n",[19,115072,115073,115074,115077],{},"距离越小，",[33,115075,115076],{},"-dist"," 越接近 0，奖励越高。",[318,115079,115080],{"id":115080},"两关节机械臂的状态",[19,115082,115083],{},"这个模型有两个 hinge joint：",[26,115085,115088],{"className":115086,"code":115087,"language":80,"meta":31},[78],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[33,115089,115087],{"__ignoreMap":31},[19,115091,115092],{},"再加上末端和目标位置：",[26,115094,115097],{"className":115095,"code":115096,"language":80,"meta":31},[78],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[33,115098,115096],{"__ignoreMap":31},[19,115100,115101],{},"总维度：",[26,115103,115106],{"className":115104,"code":115105,"language":80,"meta":31},[78],"2 + 2 + 3 + 3 = 10\n",[33,115107,115105],{"__ignoreMap":31},[318,115109,115111],{"id":115110},"为什么-gravity-是-0","为什么 gravity 是 0",[19,115113,115114],{},"本章把重力设为：",[26,115116,115118],{"className":56624,"code":115117,"language":56626,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[33,115119,115120],{"__ignoreMap":31},[36,115121,115122,115124,115126,115128,115130,115132,115134,115136,115138],{"class":38,"line":39},[36,115123,393],{"class":42},[36,115125,72721],{"class":54857},[36,115127,104724],{"class":101},[36,115129,47],{"class":42},[36,115131,104729],{"class":105},[36,115133,104732],{"class":101},[36,115135,47],{"class":42},[36,115137,107262],{"class":105},[36,115139,104674],{"class":42},[19,115141,115142],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,115144,601],{"id":600},[26,115146,115148],{"className":28,"code":115147,"language":30,"meta":31,"style":31},"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",[33,115149,115150,115156,115166,115170,115174,115182,115187,115191,115195,115199,115204,115208,115212,115216,115220,115225,115229,115233,115237,115242,115246,115250,115254,115258,115262,115266,115270,115274,115278,115282,115286,115290,115294,115309,115318,115330,115353,115360,115364,115368,115378,115392,115405,115412,115416,115420,115434,115446,115458,115471,115485,115501,115505,115509,115521,115533,115541,115549,115553,115569,115574,115586,115598,115613,115617,115651,115683,115687,115691,115700,115704,115720,115730,115741,115757,115773,115789,115805,115809,115827,115847,115866,115870,115874,115886],{"__ignoreMap":31},[36,115151,115152,115154],{"class":38,"line":39},[36,115153,611],{"class":46},[36,115155,627],{"class":42},[36,115157,115158,115160,115162,115164],{"class":38,"line":53},[36,115159,611],{"class":46},[36,115161,634],{"class":42},[36,115163,617],{"class":46},[36,115165,639],{"class":42},[36,115167,115168],{"class":38,"line":196},[36,115169,659],{"emptyLinePlaceholder":658},[36,115171,115172],{"class":38,"line":642},[36,115173,659],{"emptyLinePlaceholder":658},[36,115175,115176,115178,115180],{"class":38,"line":655},[36,115177,670],{"class":112},[36,115179,673],{"class":46},[36,115181,676],{"class":105},[36,115183,115184],{"class":38,"line":662},[36,115185,115186],{"class":105},"\u003Cmujoco model=\"two_link_reacher\">\n",[36,115188,115189],{"class":38,"line":667},[36,115190,688],{"class":105},[36,115192,115193],{"class":38,"line":679},[36,115194,659],{"emptyLinePlaceholder":658},[36,115196,115197],{"class":38,"line":685},[36,115198,699],{"class":105},[36,115200,115201],{"class":38,"line":691},[36,115202,115203],{"class":105},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[36,115205,115206],{"class":38,"line":696},[36,115207,705],{"class":105},[36,115209,115210],{"class":38,"line":702},[36,115211,659],{"emptyLinePlaceholder":658},[36,115213,115214],{"class":38,"line":708},[36,115215,716],{"class":105},[36,115217,115218],{"class":38,"line":713},[36,115219,722],{"class":105},[36,115221,115222],{"class":38,"line":719},[36,115223,115224],{"class":105},"      \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",[36,115226,115227],{"class":38,"line":725},[36,115228,659],{"emptyLinePlaceholder":658},[36,115230,115231],{"class":38,"line":731},[36,115232,739],{"class":105},[36,115234,115235],{"class":38,"line":736},[36,115236,745],{"class":105},[36,115238,115239],{"class":38,"line":742},[36,115240,115241],{"class":105},"        \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",[36,115243,115244],{"class":38,"line":748},[36,115245,757],{"class":105},[36,115247,115248],{"class":38,"line":754},[36,115249,763],{"class":105},[36,115251,115252],{"class":38,"line":760},[36,115253,769],{"class":105},[36,115255,115256],{"class":38,"line":766},[36,115257,775],{"class":105},[36,115259,115260],{"class":38,"line":772},[36,115261,659],{"emptyLinePlaceholder":658},[36,115263,115264],{"class":38,"line":778},[36,115265,786],{"class":105},[36,115267,115268],{"class":38,"line":783},[36,115269,792],{"class":105},[36,115271,115272],{"class":38,"line":789},[36,115273,798],{"class":105},[36,115275,115276],{"class":38,"line":795},[36,115277,804],{"class":105},[36,115279,115280],{"class":38,"line":801},[36,115281,810],{"class":105},[36,115283,115284],{"class":38,"line":807},[36,115285,816],{"class":105},[36,115287,115288],{"class":38,"line":813},[36,115289,659],{"emptyLinePlaceholder":658},[36,115291,115292],{"class":38,"line":819},[36,115293,659],{"emptyLinePlaceholder":658},[36,115295,115296,115298,115301,115304,115306],{"class":38,"line":824},[36,115297,1820],{"class":46},[36,115299,115300],{"class":101}," site_position",[36,115302,115303],{"class":42},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[36,115305,5038],{"class":112},[36,115307,115308],{"class":42},") -> np.ndarray:\n",[36,115310,115311,115313,115315],{"class":38,"line":829},[36,115312,106893],{"class":42},[36,115314,47],{"class":46},[36,115316,115317],{"class":42}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[36,115319,115320,115322,115324,115326,115328],{"class":38,"line":851},[36,115321,3752],{"class":46},[36,115323,106941],{"class":42},[36,115325,393],{"class":46},[36,115327,1004],{"class":112},[36,115329,888],{"class":42},[36,115331,115332,115334,115336,115338,115340,115343,115345,115347,115349,115351],{"class":38,"line":868},[36,115333,106925],{"class":46},[36,115335,1026],{"class":112},[36,115337,495],{"class":42},[36,115339,3937],{"class":46},[36,115341,115342],{"class":105},"\"site not found: ",[36,115344,4766],{"class":112},[36,115346,83364],{"class":42},[36,115348,4815],{"class":112},[36,115350,4126],{"class":105},[36,115352,922],{"class":42},[36,115354,115355,115357],{"class":38,"line":873},[36,115356,7788],{"class":46},[36,115358,115359],{"class":42}," data.site_xpos[site_id].copy()\n",[36,115361,115362],{"class":38,"line":891},[36,115363,659],{"emptyLinePlaceholder":658},[36,115365,115366],{"class":38,"line":906},[36,115367,659],{"emptyLinePlaceholder":658},[36,115369,115370,115372,115375],{"class":38,"line":925},[36,115371,1820],{"class":46},[36,115373,115374],{"class":101}," get_obs",[36,115376,115377],{"class":42},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[36,115379,115380,115383,115385,115388,115390],{"class":38,"line":943},[36,115381,115382],{"class":42},"    tip ",[36,115384,47],{"class":46},[36,115386,115387],{"class":42}," site_position(model, data, ",[36,115389,966],{"class":105},[36,115391,922],{"class":42},[36,115393,115394,115397,115399,115401,115403],{"class":38,"line":948},[36,115395,115396],{"class":42},"    target ",[36,115398,47],{"class":46},[36,115400,115387],{"class":42},[36,115402,987],{"class":105},[36,115404,922],{"class":42},[36,115406,115407,115409],{"class":38,"line":971},[36,115408,7788],{"class":46},[36,115410,115411],{"class":42}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[36,115413,115414],{"class":38,"line":992},[36,115415,659],{"emptyLinePlaceholder":658},[36,115417,115418],{"class":38,"line":1020},[36,115419,659],{"emptyLinePlaceholder":658},[36,115421,115422,115424,115427,115430,115432],{"class":38,"line":1036},[36,115423,1820],{"class":46},[36,115425,115426],{"class":101}," reward",[36,115428,115429],{"class":42},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,115431,1260],{"class":112},[36,115433,888],{"class":42},[36,115435,115436,115438,115440,115442,115444],{"class":38,"line":1041},[36,115437,115382],{"class":42},[36,115439,47],{"class":46},[36,115441,115387],{"class":42},[36,115443,966],{"class":105},[36,115445,922],{"class":42},[36,115447,115448,115450,115452,115454,115456],{"class":38,"line":1052},[36,115449,115396],{"class":42},[36,115451,47],{"class":46},[36,115453,115387],{"class":42},[36,115455,987],{"class":105},[36,115457,922],{"class":42},[36,115459,115460,115463,115465,115467,115469],{"class":38,"line":1065},[36,115461,115462],{"class":42},"    dist ",[36,115464,47],{"class":46},[36,115466,1305],{"class":42},[36,115468,1308],{"class":46},[36,115470,1311],{"class":42},[36,115472,115473,115476,115478,115480,115482],{"class":38,"line":1077},[36,115474,115475],{"class":42},"    control_cost ",[36,115477,47],{"class":46},[36,115479,1322],{"class":112},[36,115481,1325],{"class":46},[36,115483,115484],{"class":42}," np.sum(np.square(data.ctrl))\n",[36,115486,115487,115489,115491,115493,115495,115497,115499],{"class":38,"line":1082},[36,115488,7788],{"class":46},[36,115490,1341],{"class":112},[36,115492,495],{"class":42},[36,115494,1308],{"class":46},[36,115496,1348],{"class":42},[36,115498,1308],{"class":46},[36,115500,1353],{"class":42},[36,115502,115503],{"class":38,"line":1125},[36,115504,659],{"emptyLinePlaceholder":658},[36,115506,115507],{"class":38,"line":1164},[36,115508,659],{"emptyLinePlaceholder":658},[36,115510,115511,115513,115515,115517,115519],{"class":38,"line":1169},[36,115512,1820],{"class":46},[36,115514,1823],{"class":101},[36,115516,1826],{"class":42},[36,115518,885],{"class":112},[36,115520,888],{"class":42},[36,115522,115523,115525,115527,115529,115531],{"class":38,"line":1180},[36,115524,104925],{"class":42},[36,115526,47],{"class":46},[36,115528,917],{"class":42},[36,115530,670],{"class":112},[36,115532,922],{"class":42},[36,115534,115535,115537,115539],{"class":38,"line":1198},[36,115536,104938],{"class":42},[36,115538,47],{"class":46},[36,115540,104943],{"class":42},[36,115542,115543,115545,115547],{"class":38,"line":1215},[36,115544,1899],{"class":42},[36,115546,47],{"class":46},[36,115548,1496],{"class":112},[36,115550,115551],{"class":38,"line":1236},[36,115552,659],{"emptyLinePlaceholder":658},[36,115554,115555,115557,115559,115561,115563,115565,115567],{"class":38,"line":1245},[36,115556,1909],{"class":46},[36,115558,1912],{"class":42},[36,115560,1619],{"class":46},[36,115562,1622],{"class":112},[36,115564,495],{"class":42},[36,115566,68629],{"class":112},[36,115568,848],{"class":42},[36,115570,115571],{"class":38,"line":1250},[36,115572,115573],{"class":42},"        mujoco.mj_forward(model, data)\n",[36,115575,115576,115578,115580,115582,115584],{"class":38,"line":1265},[36,115577,1183],{"class":42},[36,115579,47],{"class":46},[36,115581,115387],{"class":42},[36,115583,966],{"class":105},[36,115585,922],{"class":42},[36,115587,115588,115590,115592,115594,115596],{"class":38,"line":1281},[36,115589,1201],{"class":42},[36,115591,47],{"class":46},[36,115593,115387],{"class":42},[36,115595,987],{"class":105},[36,115597,922],{"class":42},[36,115599,115600,115603,115605,115608,115610],{"class":38,"line":1297},[36,115601,115602],{"class":42},"        error ",[36,115604,47],{"class":46},[36,115606,115607],{"class":42}," target ",[36,115609,1308],{"class":46},[36,115611,115612],{"class":42}," tip\n",[36,115614,115615],{"class":38,"line":1314},[36,115616,659],{"emptyLinePlaceholder":658},[36,115618,115619,115621,115623,115625,115627,115630,115632,115634,115637,115639,115641,115643,115645,115647,115649],{"class":38,"line":1336},[36,115620,110097],{"class":42},[36,115622,1859],{"class":112},[36,115624,8140],{"class":42},[36,115626,47],{"class":46},[36,115628,115629],{"class":42}," np.clip(",[36,115631,108745],{"class":112},[36,115633,1325],{"class":46},[36,115635,115636],{"class":42}," error[",[36,115638,498],{"class":112},[36,115640,2000],{"class":42},[36,115642,1308],{"class":46},[36,115644,475],{"class":112},[36,115646,478],{"class":42},[36,115648,475],{"class":112},[36,115650,922],{"class":42},[36,115652,115653,115655,115657,115659,115661,115663,115665,115667,115669,115671,115673,115675,115677,115679,115681],{"class":38,"line":1356},[36,115654,110097],{"class":42},[36,115656,4092],{"class":112},[36,115658,8140],{"class":42},[36,115660,47],{"class":46},[36,115662,115629],{"class":42},[36,115664,108745],{"class":112},[36,115666,1325],{"class":46},[36,115668,115636],{"class":42},[36,115670,1859],{"class":112},[36,115672,2000],{"class":42},[36,115674,1308],{"class":46},[36,115676,475],{"class":112},[36,115678,478],{"class":42},[36,115680,475],{"class":112},[36,115682,922],{"class":42},[36,115684,115685],{"class":38,"line":1361},[36,115686,659],{"emptyLinePlaceholder":658},[36,115688,115689],{"class":38,"line":1407},[36,115690,105032],{"class":42},[36,115692,115693,115695,115697],{"class":38,"line":1423},[36,115694,1949],{"class":42},[36,115696,1658],{"class":46},[36,115698,115699],{"class":42}," reward(model, data)\n",[36,115701,115702],{"class":38,"line":1439},[36,115703,659],{"emptyLinePlaceholder":658},[36,115705,115706,115708,115710,115712,115714,115716,115718],{"class":38,"line":1444},[36,115707,995],{"class":46},[36,115709,1912],{"class":42},[36,115711,4203],{"class":46},[36,115713,9447],{"class":112},[36,115715,2073],{"class":46},[36,115717,1004],{"class":112},[36,115719,888],{"class":42},[36,115721,115722,115725,115727],{"class":38,"line":1486},[36,115723,115724],{"class":42},"            obs ",[36,115726,47],{"class":46},[36,115728,115729],{"class":42}," get_obs(model, data)\n",[36,115731,115732,115734,115736,115738],{"class":38,"line":1499},[36,115733,38210],{"class":112},[36,115735,495],{"class":42},[36,115737,1965],{"class":105},[36,115739,115740],{"class":42},", step)\n",[36,115742,115743,115745,115747,115750,115753,115755],{"class":38,"line":1513},[36,115744,38210],{"class":112},[36,115746,495],{"class":42},[36,115748,115749],{"class":105},"\"  tip:\"",[36,115751,115752],{"class":42},", np.round(tip, ",[36,115754,1982],{"class":112},[36,115756,2005],{"class":42},[36,115758,115759,115761,115763,115766,115769,115771],{"class":38,"line":1518},[36,115760,38210],{"class":112},[36,115762,495],{"class":42},[36,115764,115765],{"class":105},"\"  target:\"",[36,115767,115768],{"class":42},", np.round(target, ",[36,115770,1982],{"class":112},[36,115772,2005],{"class":42},[36,115774,115775,115777,115779,115782,115785,115787],{"class":38,"line":1529},[36,115776,38210],{"class":112},[36,115778,495],{"class":42},[36,115780,115781],{"class":105},"\"  ctrl:\"",[36,115783,115784],{"class":42},", np.round(data.ctrl.copy(), ",[36,115786,1982],{"class":112},[36,115788,2005],{"class":42},[36,115790,115791,115793,115795,115798,115801,115803],{"class":38,"line":1539},[36,115792,38210],{"class":112},[36,115794,495],{"class":42},[36,115796,115797],{"class":105},"\"  obs_dim:\"",[36,115799,115800],{"class":42},", obs.shape[",[36,115802,1859],{"class":112},[36,115804,8353],{"class":42},[36,115806,115807],{"class":38,"line":1544},[36,115808,659],{"emptyLinePlaceholder":658},[36,115810,115811,115813,115815,115817,115819,115821,115823,115825],{"class":38,"line":1555},[36,115812,1867],{"class":112},[36,115814,495],{"class":42},[36,115816,2040],{"class":105},[36,115818,478],{"class":42},[36,115820,1976],{"class":112},[36,115822,2047],{"class":42},[36,115824,1982],{"class":112},[36,115826,2005],{"class":42},[36,115828,115829,115831,115833,115836,115839,115841,115843,115845],{"class":38,"line":1572},[36,115830,1867],{"class":112},[36,115832,495],{"class":42},[36,115834,115835],{"class":105},"\"final tip:\"",[36,115837,115838],{"class":42},", np.round(site_position(model, data, ",[36,115840,966],{"class":105},[36,115842,1985],{"class":42},[36,115844,1982],{"class":112},[36,115846,2005],{"class":42},[36,115848,115849,115851,115853,115856,115858,115860,115862,115864],{"class":38,"line":1592},[36,115850,1867],{"class":112},[36,115852,495],{"class":42},[36,115854,115855],{"class":105},"\"target:\"",[36,115857,115838],{"class":42},[36,115859,987],{"class":105},[36,115861,1985],{"class":42},[36,115863,1982],{"class":112},[36,115865,2005],{"class":42},[36,115867,115868],{"class":38,"line":1597},[36,115869,659],{"emptyLinePlaceholder":658},[36,115871,115872],{"class":38,"line":1610},[36,115873,659],{"emptyLinePlaceholder":658},[36,115875,115876,115878,115880,115882,115884],{"class":38,"line":1632},[36,115877,2067],{"class":46},[36,115879,2070],{"class":112},[36,115881,2073],{"class":46},[36,115883,2076],{"class":105},[36,115885,888],{"class":42},[36,115887,115888],{"class":38,"line":1646},[36,115889,2084],{"class":42},[19,115891,2087],{},[26,115893,115895],{"className":92,"code":115894,"language":94,"meta":31,"style":31},"touch ch7_reacher.py\n",[33,115896,115897],{"__ignoreMap":31},[36,115898,115899,115901],{"class":38,"line":39},[36,115900,2097],{"class":101},[36,115902,115903],{"class":105}," ch7_reacher.py\n",[19,115905,2103],{},[26,115907,115909],{"className":92,"code":115908,"language":94,"meta":31,"style":31},"python ch7_reacher.py\n",[33,115910,115911],{"__ignoreMap":31},[36,115912,115913,115915],{"class":38,"line":39},[36,115914,30],{"class":101},[36,115916,115903],{"class":105},[318,115918,2117],{"id":2117},[19,115920,115921],{},"读取 site 坐标：",[26,115923,115925],{"className":28,"code":115924,"language":30,"meta":31,"style":31},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[33,115926,115927],{"__ignoreMap":31},[36,115928,115929,115931,115933,115935,115937],{"class":38,"line":39},[36,115930,1820],{"class":46},[36,115932,115300],{"class":101},[36,115934,115303],{"class":42},[36,115936,5038],{"class":112},[36,115938,115308],{"class":42},[19,115940,115941],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,115943,113922],{},[26,115945,115947],{"className":28,"code":115946,"language":30,"meta":31,"style":31},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[33,115948,115949],{"__ignoreMap":31},[36,115950,115951,115953],{"class":38,"line":39},[36,115952,2822],{"class":46},[36,115954,115411],{"class":42},[19,115956,115957],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,115959,113260],{},[26,115961,115963],{"className":28,"code":115962,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[33,115964,115965,115977,115990],{"__ignoreMap":31},[36,115966,115967,115969,115971,115973,115975],{"class":38,"line":39},[36,115968,1348],{"class":42},[36,115970,47],{"class":46},[36,115972,1305],{"class":42},[36,115974,1308],{"class":46},[36,115976,1311],{"class":42},[36,115978,115979,115982,115984,115986,115988],{"class":38,"line":53},[36,115980,115981],{"class":42},"control_cost ",[36,115983,47],{"class":46},[36,115985,1322],{"class":112},[36,115987,1325],{"class":46},[36,115989,115484],{"class":42},[36,115991,115992,115994,115996,115998,116000,116002,116004],{"class":38,"line":196},[36,115993,2822],{"class":46},[36,115995,1341],{"class":112},[36,115997,495],{"class":42},[36,115999,1308],{"class":46},[36,116001,1348],{"class":42},[36,116003,1308],{"class":46},[36,116005,1353],{"class":42},[19,116007,116008],{},"奖励由两部分组成：",[211,116010,116011,116016],{},[214,116012,116013,116015],{},[33,116014,115076],{},"：末端离目标越远，奖励越低。",[214,116017,116018,116021],{},[33,116019,116020],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,116023,116024],{},"简单控制器：",[26,116026,116028],{"className":28,"code":116027,"language":30,"meta":31,"style":31},"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",[33,116029,116030,116043,116075],{"__ignoreMap":31},[36,116031,116032,116035,116037,116039,116041],{"class":38,"line":39},[36,116033,116034],{"class":42},"error ",[36,116036,47],{"class":46},[36,116038,115607],{"class":42},[36,116040,1308],{"class":46},[36,116042,115612],{"class":42},[36,116044,116045,116047,116049,116051,116053,116055,116057,116059,116061,116063,116065,116067,116069,116071,116073],{"class":38,"line":53},[36,116046,109354],{"class":42},[36,116048,1859],{"class":112},[36,116050,8140],{"class":42},[36,116052,47],{"class":46},[36,116054,115629],{"class":42},[36,116056,108745],{"class":112},[36,116058,1325],{"class":46},[36,116060,115636],{"class":42},[36,116062,498],{"class":112},[36,116064,2000],{"class":42},[36,116066,1308],{"class":46},[36,116068,475],{"class":112},[36,116070,478],{"class":42},[36,116072,475],{"class":112},[36,116074,922],{"class":42},[36,116076,116077,116079,116081,116083,116085,116087,116089,116091,116093,116095,116097,116099,116101,116103,116105],{"class":38,"line":196},[36,116078,109354],{"class":42},[36,116080,4092],{"class":112},[36,116082,8140],{"class":42},[36,116084,47],{"class":46},[36,116086,115629],{"class":42},[36,116088,108745],{"class":112},[36,116090,1325],{"class":46},[36,116092,115636],{"class":42},[36,116094,1859],{"class":112},[36,116096,2000],{"class":42},[36,116098,1308],{"class":46},[36,116100,475],{"class":112},[36,116102,478],{"class":42},[36,116104,475],{"class":112},[36,116106,922],{"class":42},[19,116108,116109],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[318,116111,2338],{"id":2338},[26,116113,116114],{"className":28,"code":115924,"language":30,"meta":31,"style":31},[33,116115,116116],{"__ignoreMap":31},[36,116117,116118,116120,116122,116124,116126],{"class":38,"line":39},[36,116119,1820],{"class":46},[36,116121,115300],{"class":101},[36,116123,115303],{"class":42},[36,116125,5038],{"class":112},[36,116127,115308],{"class":42},[19,116129,116130,116131,116133,116134,86093,116136,224],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[33,116132,83364],{}," 是 site 的名字，比如 ",[33,116135,966],{},[33,116137,987],{},[26,116139,116141],{"className":28,"code":116140,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[33,116142,116143],{"__ignoreMap":31},[36,116144,116145,116147,116149],{"class":38,"line":39},[36,116146,107125],{"class":42},[36,116148,47],{"class":46},[36,116150,115317],{"class":42},[19,116152,116153],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[26,116155,116157],{"className":28,"code":116156,"language":30,"meta":31,"style":31},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[33,116158,116159,116171],{"__ignoreMap":31},[36,116160,116161,116163,116165,116167,116169],{"class":38,"line":39},[36,116162,2067],{"class":46},[36,116164,106941],{"class":42},[36,116166,393],{"class":46},[36,116168,1004],{"class":112},[36,116170,888],{"class":42},[36,116172,116173,116175,116177,116179,116181,116183,116185,116187,116189,116191],{"class":38,"line":53},[36,116174,107386],{"class":46},[36,116176,1026],{"class":112},[36,116178,495],{"class":42},[36,116180,3937],{"class":46},[36,116182,115342],{"class":105},[36,116184,4766],{"class":112},[36,116186,83364],{"class":42},[36,116188,4815],{"class":112},[36,116190,4126],{"class":105},[36,116192,922],{"class":42},[19,116194,116195,116196,116199,116200,116202],{},"如果 site 没找到，就主动报错。",[33,116197,116198],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[33,116201,83364],{}," 的值放进字符串里。",[26,116204,116206],{"className":28,"code":116205,"language":30,"meta":31,"style":31},"return data.site_xpos[site_id].copy()\n",[33,116207,116208],{"__ignoreMap":31},[36,116209,116210,116212],{"class":38,"line":39},[36,116211,2822],{"class":46},[36,116213,115359],{"class":42},[19,116215,116216,116217,116219,116220,116223],{},"返回这个 site 的世界坐标。",[33,116218,107171],{}," 里的每一行都是一个 site 的 ",[33,116221,116222],{},"(x, y, z)"," 坐标。",[26,116225,116227],{"className":28,"code":116226,"language":30,"meta":31,"style":31},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[33,116228,116229],{"__ignoreMap":31},[36,116230,116231,116233,116235],{"class":38,"line":39},[36,116232,1820],{"class":46},[36,116234,115374],{"class":101},[36,116236,115377],{"class":42},[19,116238,116239],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[26,116241,116243],{"className":28,"code":116242,"language":30,"meta":31,"style":31},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[33,116244,116245,116257],{"__ignoreMap":31},[36,116246,116247,116249,116251,116253,116255],{"class":38,"line":39},[36,116248,2767],{"class":42},[36,116250,47],{"class":46},[36,116252,115387],{"class":42},[36,116254,966],{"class":105},[36,116256,922],{"class":42},[36,116258,116259,116261,116263,116265,116267],{"class":38,"line":53},[36,116260,2782],{"class":42},[36,116262,47],{"class":46},[36,116264,115387],{"class":42},[36,116266,987],{"class":105},[36,116268,922],{"class":42},[19,116270,116271],{},"分别读取末端点和目标点的世界坐标。",[26,116273,116274],{"className":28,"code":115946,"language":30,"meta":31,"style":31},[33,116275,116276],{"__ignoreMap":31},[36,116277,116278,116280],{"class":38,"line":39},[36,116279,2822],{"class":46},[36,116281,115411],{"class":42},[19,116283,116284],{},"把四部分拼成一个观测数组：",[26,116286,116289],{"className":116287,"code":116288,"language":80,"meta":31},[78],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[33,116290,116288],{"__ignoreMap":31},[26,116292,116294],{"className":28,"code":116293,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\n",[33,116295,116296],{"__ignoreMap":31},[36,116297,116298,116300,116302,116304,116306],{"class":38,"line":39},[36,116299,1348],{"class":42},[36,116301,47],{"class":46},[36,116303,1305],{"class":42},[36,116305,1308],{"class":46},[36,116307,1311],{"class":42},[19,116309,116310,116311,116314,116315,116318],{},"计算 tip 到 target 的距离。",[33,116312,116313],{},"tip - target"," 得到一个三维向量，",[33,116316,116317],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,116320,447],{},[26,116322,116325],{"className":116323,"code":116324,"language":80,"meta":31},[78],"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",[33,116326,116324],{"__ignoreMap":31},[26,116328,116330],{"className":28,"code":116329,"language":30,"meta":31,"style":31},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[33,116331,116332],{"__ignoreMap":31},[36,116333,116334,116336,116338,116340,116342],{"class":38,"line":39},[36,116335,115981],{"class":42},[36,116337,47],{"class":46},[36,116339,1322],{"class":112},[36,116341,1325],{"class":46},[36,116343,115484],{"class":42},[19,116345,116346,116347,116350,116351,116354],{},"计算动作惩罚。",[33,116348,116349],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[33,116352,116353],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[26,116356,116358],{"className":28,"code":116357,"language":30,"meta":31,"style":31},"return float(-dist - control_cost)\n",[33,116359,116360],{"__ignoreMap":31},[36,116361,116362,116364,116366,116368,116370,116372,116374],{"class":38,"line":39},[36,116363,2822],{"class":46},[36,116365,1341],{"class":112},[36,116367,495],{"class":42},[36,116369,1308],{"class":46},[36,116371,1348],{"class":42},[36,116373,1308],{"class":46},[36,116375,1353],{"class":42},[19,116377,116378],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[26,116380,116381],{"className":28,"code":114265,"language":30,"meta":31,"style":31},[33,116382,116383],{"__ignoreMap":31},[36,116384,116385,116387,116389],{"class":38,"line":39},[36,116386,114272],{"class":42},[36,116388,47],{"class":46},[36,116390,1496],{"class":112},[19,116392,116393],{},"累计奖励变量，记录整个运行过程的总分。",[26,116395,116397],{"className":28,"code":116396,"language":30,"meta":31,"style":31},"for step in range(500):\n",[33,116398,116399],{"__ignoreMap":31},[36,116400,116401,116403,116405,116407,116409,116411,116413],{"class":38,"line":39},[36,116402,3120],{"class":46},[36,116404,1912],{"class":42},[36,116406,1619],{"class":46},[36,116408,1622],{"class":112},[36,116410,495],{"class":42},[36,116412,68629],{"class":112},[36,116414,848],{"class":42},[19,116416,116417],{},"运行 500 个控制步。",[26,116419,116420],{"className":28,"code":108031,"language":30,"meta":31,"style":31},[33,116421,116422],{"__ignoreMap":31},[36,116423,116424],{"class":38,"line":39},[36,116425,108031],{"class":42},[19,116427,116428,116429,324,116431,116433],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[33,116430,106724],{},[33,116432,106727],{}," 是当前状态下的坐标。",[26,116435,116437],{"className":28,"code":116436,"language":30,"meta":31,"style":31},"error = target - tip\n",[33,116438,116439],{"__ignoreMap":31},[36,116440,116441,116443,116445,116447,116449],{"class":38,"line":39},[36,116442,116034],{"class":42},[36,116444,47],{"class":46},[36,116446,115607],{"class":42},[36,116448,1308],{"class":46},[36,116450,115612],{"class":42},[19,116452,116453],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[26,116455,116457],{"className":28,"code":116456,"language":30,"meta":31,"style":31},"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",[33,116458,116459,116491],{"__ignoreMap":31},[36,116460,116461,116463,116465,116467,116469,116471,116473,116475,116477,116479,116481,116483,116485,116487,116489],{"class":38,"line":39},[36,116462,109354],{"class":42},[36,116464,1859],{"class":112},[36,116466,8140],{"class":42},[36,116468,47],{"class":46},[36,116470,115629],{"class":42},[36,116472,108745],{"class":112},[36,116474,1325],{"class":46},[36,116476,115636],{"class":42},[36,116478,498],{"class":112},[36,116480,2000],{"class":42},[36,116482,1308],{"class":46},[36,116484,475],{"class":112},[36,116486,478],{"class":42},[36,116488,475],{"class":112},[36,116490,922],{"class":42},[36,116492,116493,116495,116497,116499,116501,116503,116505,116507,116509,116511,116513,116515,116517,116519,116521],{"class":38,"line":53},[36,116494,109354],{"class":42},[36,116496,4092],{"class":112},[36,116498,8140],{"class":42},[36,116500,47],{"class":46},[36,116502,115629],{"class":42},[36,116504,108745],{"class":112},[36,116506,1325],{"class":46},[36,116508,115636],{"class":42},[36,116510,1859],{"class":112},[36,116512,2000],{"class":42},[36,116514,1308],{"class":46},[36,116516,475],{"class":112},[36,116518,478],{"class":42},[36,116520,475],{"class":112},[36,116522,922],{"class":42},[19,116524,116525,116526,116529],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[33,116527,116528],{},"error -> ctrl -> step"," 的流程。",[26,116531,116532],{"className":28,"code":107993,"language":30,"meta":31,"style":31},[33,116533,116534],{"__ignoreMap":31},[36,116535,116536],{"class":38,"line":39},[36,116537,107993],{"class":42},[19,116539,116540],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[26,116542,116544],{"className":28,"code":116543,"language":30,"meta":31,"style":31},"obs = get_obs(model, data)\n",[33,116545,116546],{"__ignoreMap":31},[36,116547,116548,116550,116552],{"class":38,"line":39},[36,116549,2805],{"class":42},[36,116551,47],{"class":46},[36,116553,115729],{"class":42},[19,116555,116556,116557,116560],{},"读取最新观测。后面打印 ",[33,116558,116559],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,116562,3348],{"id":3347},[19,116564,116565],{},"观测维度为:",[26,116567,116570],{"className":116568,"code":116569,"language":80,"meta":31},[78],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[33,116571,116569],{"__ignoreMap":31},[19,116573,116574],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,116576,116577],{},"程序每 100 步打印：",[26,116579,116582],{"className":116580,"code":116581,"language":80,"meta":31},[78],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[33,116583,116581],{"__ignoreMap":31},[19,116585,116586,116587,116589],{},"如果控制有效，你应该看到最终 ",[33,116588,106724],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,116591,3382],{"id":3381},[211,116593,116594,116597,116600,116606,116612,116619,116629],{},[214,116595,116596],{},"修改目标点位置。",[214,116598,116599],{},"重新运行，观察最终 tip 是否变化。",[214,116601,116602,116603,116605],{},"把 gravity 改成 ",[33,116604,106085],{},"，观察控制是否变差。",[214,116607,3396,116608,114644,116610,224],{},[33,116609,105668],{},[33,116611,498],{},[214,116613,3416,116614,3420,116616,116618],{},[33,116615,114058],{},[33,116617,110786],{},"，观察机械臂是否更难移动。",[214,116620,3416,116621,86084,116623,3420,116625,116628],{},[33,116622,106727],{},[33,116624,107637],{},[33,116626,116627],{},"0.2 0 0.6","，观察 reward 和 final tip。",[214,116630,116631],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,116633,3444],{"id":3443},[318,116635,116637],{"id":116636},"site-not-found",[33,116638,116639],{},"site not found",[19,116641,116642,116643,324,116646,224],{},"检查 XML 中是否有 ",[33,116644,116645],{},"site name=\"tip\"",[33,116647,116648],{},"site name=\"target\"",[318,116650,116651],{"id":116651},"机械臂完全不动",[19,116653,3476],{},[211,116655,116656,116661,116664,116669],{},[214,116657,116658,116660],{},[33,116659,105668],{}," 是否为 2",[214,116662,116663],{},"actuator 是否引用正确 joint",[214,116665,116666,116668],{},[33,116667,3612],{}," 是否被赋值",[214,116670,116671,116672],{},"是否执行了 ",[33,116673,104231],{},[318,116675,116676],{"id":116676},"控制效果不好",[19,116678,116679],{},"正常。本章重点不是控制器最优，而是任务结构:",[26,116681,116684],{"className":116682,"code":116683,"language":80,"meta":31},[78],"obs → action → mj_step → reward → next_obs\n",[33,116685,116683],{"__ignoreMap":31},[318,116687,116689],{"id":116688},"tip-坐标不变化","tip 坐标不变化",[19,116691,3537],{},[211,116693,116694,116699,116707,116716],{},[214,116695,116696,116697,224],{},"是否每步调用了 ",[33,116698,104231],{},[214,116700,116701,116702,324,116704,224],{},"是否写入了 ",[33,116703,109609],{},[33,116705,116706],{},"data.ctrl[1]",[214,116708,116709,116710,4087,116713,224],{},"actuator 是否正确引用 ",[33,116711,116712],{},"joint1",[33,116714,116715],{},"joint2",[214,116717,116718],{},"控制输入是否太小。",[318,116720,116721],{"id":116721},"目标点不会动",[19,116723,116724],{},"本章的 target 是固定 site：",[26,116726,116728],{"className":56624,"code":116727,"language":56626,"meta":31,"style":31},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[33,116729,116730],{"__ignoreMap":31},[36,116731,116732,116734,116736,116738,116740,116742,116744,116746,116749],{"class":38,"line":39},[36,116733,393],{"class":42},[36,116735,106703],{"class":54857},[36,116737,18576],{"class":101},[36,116739,47],{"class":42},[36,116741,987],{"class":105},[36,116743,104636],{"class":101},[36,116745,47],{"class":42},[36,116747,116748],{"class":105},"\"0.5 0 0.4\"",[36,116750,116751],{"class":42}," ...\u002F>\n",[19,116753,116754,116755,116757],{},"它直接挂在 ",[33,116756,105352],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[318,116759,116760],{"id":116760},"机械臂不像真实机械臂",[19,116762,116763],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,116765,106103],{"id":106102},[19,116767,116768],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,116770,116771],{},"核心公式：",[26,116773,116776],{"className":116774,"code":116775,"language":80,"meta":31},[78],"distance = ||tip - target||\nreward = -distance - action_cost\n",[33,116777,116775],{"__ignoreMap":31},[19,116779,116780],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[3785,116782,116783],{},"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":31,"searchDepth":53,"depth":53,"links":116785},[116786,116787,116788,116793,116797,116798,116799,116807],{"id":16,"depth":53,"text":17},{"id":85,"depth":53,"text":86},{"id":242,"depth":53,"text":243,"children":116789},[116790,116791,116792],{"id":115009,"depth":196,"text":115010},{"id":115080,"depth":196,"text":115080},{"id":115110,"depth":196,"text":115111},{"id":600,"depth":53,"text":601,"children":116794},[116795,116796],{"id":2117,"depth":196,"text":2117},{"id":2338,"depth":196,"text":2338},{"id":3347,"depth":53,"text":3348},{"id":3381,"depth":53,"text":3382},{"id":3443,"depth":53,"text":3444,"children":116800},[116801,116802,116803,116804,116805,116806],{"id":116636,"depth":196,"text":116639},{"id":116651,"depth":196,"text":116651},{"id":116676,"depth":196,"text":116676},{"id":116688,"depth":196,"text":116689},{"id":116721,"depth":196,"text":116721},{"id":116760,"depth":196,"text":116760},{"id":106102,"depth":53,"text":106103},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":114814,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":4,"title":5,"body":116814,"description":31,"extension":3817,"meta":119877,"navigation":658,"path":3819,"seo":119878,"stem":3821,"__hash__":3822},{"type":7,"value":116815,"toc":119852},[116816,116818,116820,116822,116824,116844,116846,116850,116852,116857,116859,116861,116885,116887,116903,116905,116945,116947,116965,116967,116969,117013,117015,117020,117026,117028,117062,117064,117096,117098,117104,117110,117112,117117,117119,117165,117169,117211,117213,117215,117229,117235,117237,118403,118405,118415,118417,118427,118429,118431,118451,118453,118455,118487,118491,118493,118525,118527,118529,118569,118573,118583,118585,118597,118601,118617,118619,118633,118639,118653,118657,118677,118687,118703,118705,118721,118727,118741,118745,118777,118785,118817,118823,118857,118865,118911,118919,118961,118967,118979,118983,119015,119017,119043,119049,119089,119095,119111,119115,119131,119133,119173,119181,119195,119197,119219,119221,119233,119235,119253,119257,119277,119279,119293,119295,119327,119335,119349,119351,119375,119377,119395,119397,119429,119431,119453,119457,119485,119489,119501,119503,119505,119507,119512,119514,119516,119528,119530,119532,119568,119570,119572,119576,119584,119586,119590,119592,119612,119614,119616,119618,119634,119638,119640,119670,119672,119677,119679,119681,119701,119705,119707,119713,119733,119737,119739,119741,119755,119757,119839,119841,119843,119848,119850],[10,116817,5],{"id":12},[14,116819,17],{"id":16},[19,116821,21],{},[19,116823,24],{},[26,116825,116826],{"className":28,"code":29,"language":30,"meta":31,"style":31},[33,116827,116828,116836],{"__ignoreMap":31},[36,116829,116830,116832,116834],{"class":38,"line":39},[36,116831,43],{"class":42},[36,116833,47],{"class":46},[36,116835,50],{"class":42},[36,116837,116838,116840,116842],{"class":38,"line":53},[36,116839,56],{"class":42},[36,116841,47],{"class":46},[36,116843,61],{"class":42},[19,116845,64],{},[19,116847,67,116848,71],{},[33,116849,70],{},[19,116851,74],{},[26,116853,116855],{"className":116854,"code":79,"language":80,"meta":31},[78],[33,116856,79],{"__ignoreMap":31},[14,116858,86],{"id":85},[19,116860,89],{},[26,116862,116863],{"className":92,"code":93,"language":94,"meta":31,"style":31},[33,116864,116865],{"__ignoreMap":31},[36,116866,116867,116869,116871,116873,116875,116877,116879,116881,116883],{"class":38,"line":39},[36,116868,102],{"class":101},[36,116870,106],{"class":105},[36,116872,109],{"class":105},[36,116874,113],{"class":112},[36,116876,116],{"class":105},[36,116878,119],{"class":105},[36,116880,122],{"class":105},[36,116882,125],{"class":105},[36,116884,128],{"class":105},[19,116886,131],{},[26,116888,116889],{"className":92,"code":134,"language":94,"meta":31,"style":31},[33,116890,116891],{"__ignoreMap":31},[36,116892,116893,116895,116897,116899,116901],{"class":38,"line":39},[36,116894,141],{"class":101},[36,116896,109],{"class":105},[36,116898,146],{"class":105},[36,116900,149],{"class":105},[36,116902,152],{"class":105},[19,116904,155],{},[26,116906,116907],{"className":92,"code":158,"language":94,"meta":31,"style":31},[33,116908,116909,116925,116933],{"__ignoreMap":31},[36,116910,116911,116913,116915,116917,116919,116921,116923],{"class":38,"line":39},[36,116912,165],{"class":101},[36,116914,168],{"class":105},[36,116916,171],{"class":112},[36,116918,174],{"class":105},[36,116920,177],{"class":105},[36,116922,180],{"class":112},[36,116924,183],{"class":112},[36,116926,116927,116929,116931],{"class":38,"line":53},[36,116928,165],{"class":101},[36,116930,190],{"class":105},[36,116932,193],{"class":105},[36,116934,116935,116937,116939,116941,116943],{"class":38,"line":196},[36,116936,141],{"class":101},[36,116938,109],{"class":105},[36,116940,146],{"class":105},[36,116942,149],{"class":105},[36,116944,152],{"class":105},[19,116946,209],{},[211,116948,116949,116955,116957,116961],{},[214,116950,216,116951,220,116953,224],{},[33,116952,219],{},[33,116954,223],{},[214,116956,227],{},[214,116958,230,116959,224],{},[33,116960,233],{},[214,116962,236,116963,224],{},[33,116964,239],{},[14,116966,243],{"id":242},[19,116968,246],{},[248,116970,116971,116979],{},[251,116972,116973],{},[254,116974,116975,116977],{},[257,116976,260],{"align":259},[257,116978,263],{"align":259},[265,116980,116981,116989,116997,117005],{},[254,116982,116983,116987],{},[270,116984,116985],{"align":259},[33,116986,274],{},[270,116988,277],{"align":259},[254,116990,116991,116995],{},[270,116992,116993],{"align":259},[33,116994,284],{},[270,116996,287],{"align":259},[254,116998,116999,117003],{},[270,117000,117001],{"align":259},[33,117002,294],{},[270,117004,297],{"align":259},[254,117006,117007,117011],{},[270,117008,117009],{"align":259},[33,117010,304],{},[270,117012,307],{"align":259},[19,117014,310],{},[26,117016,117018],{"className":117017,"code":314,"language":80,"meta":31},[78],[33,117019,314],{"__ignoreMap":31},[318,117021,117022,324,117024,328],{"id":320},[33,117023,323],{},[33,117025,327],{},[19,117027,331],{},[248,117029,117030,117040],{},[251,117031,117032],{},[254,117033,117034,117036,117038],{},[257,117035,340],{"align":259},[257,117037,343],{"align":259},[257,117039,346],{"align":259},[265,117041,117042,117052],{},[254,117043,117044,117048,117050],{},[270,117045,117046],{"align":259},[33,117047,323],{},[270,117049,357],{"align":259},[270,117051,360],{"align":259},[254,117053,117054,117058,117060],{},[270,117055,117056],{"align":259},[33,117057,327],{},[270,117059,369],{"align":259},[270,117061,372],{"align":259},[19,117063,375],{},[26,117065,117066],{"className":28,"code":378,"language":30,"meta":31,"style":31},[33,117067,117068,117080],{"__ignoreMap":31},[36,117069,117070,117072,117074,117076,117078],{"class":38,"line":39},[36,117071,385],{"class":42},[36,117073,47],{"class":46},[36,117075,390],{"class":42},[36,117077,393],{"class":46},[36,117079,396],{"class":112},[36,117081,117082,117084,117086,117088,117090,117092,117094],{"class":38,"line":53},[36,117083,401],{"class":42},[36,117085,47],{"class":46},[36,117087,406],{"class":112},[36,117089,409],{"class":42},[36,117091,412],{"class":46},[36,117093,406],{"class":112},[36,117095,417],{"class":42},[19,117097,420],{},[211,117099,117100,117102],{},[214,117101,425],{},[214,117103,428],{},[318,117105,117106,324,117108],{"id":431},[33,117107,294],{},[33,117109,304],{},[19,117111,438],{},[26,117113,117115],{"className":117114,"code":442,"language":80,"meta":31},[78],[33,117116,442],{"__ignoreMap":31},[19,117118,447],{},[26,117120,117121],{"className":28,"code":450,"language":30,"meta":31,"style":31},[33,117122,117123],{"__ignoreMap":31},[36,117124,117125,117127,117129,117131,117133,117135,117137,117139,117141,117143,117145,117147,117149,117151,117153,117155,117157,117159,117161,117163],{"class":38,"line":39},[36,117126,457],{"class":112},[36,117128,460],{"class":42},[36,117130,47],{"class":46},[36,117132,465],{"class":42},[36,117134,469],{"class":468},[36,117136,472],{"class":46},[36,117138,475],{"class":112},[36,117140,478],{"class":42},[36,117142,481],{"class":468},[36,117144,47],{"class":46},[36,117146,475],{"class":112},[36,117148,478],{"class":42},[36,117150,490],{"class":468},[36,117152,47],{"class":46},[36,117154,495],{"class":42},[36,117156,498],{"class":112},[36,117158,501],{"class":42},[36,117160,504],{"class":468},[36,117162,47],{"class":46},[36,117164,509],{"class":42},[19,117166,512,117167,516],{},[33,117168,515],{},[26,117170,117171],{"className":28,"code":519,"language":30,"meta":31,"style":31},[33,117172,117173],{"__ignoreMap":31},[36,117174,117175,117177,117179,117181,117183,117185,117187,117189,117191,117193,117195,117197,117199,117201,117203,117205,117207,117209],{"class":38,"line":39},[36,117176,457],{"class":112},[36,117178,528],{"class":42},[36,117180,47],{"class":46},[36,117182,465],{"class":42},[36,117184,469],{"class":468},[36,117186,472],{"class":46},[36,117188,539],{"class":42},[36,117190,481],{"class":468},[36,117192,47],{"class":46},[36,117194,539],{"class":42},[36,117196,490],{"class":468},[36,117198,47],{"class":46},[36,117200,495],{"class":42},[36,117202,554],{"class":112},[36,117204,501],{"class":42},[36,117206,504],{"class":468},[36,117208,47],{"class":46},[36,117210,509],{"class":42},[19,117212,565],{},[318,117214,569],{"id":568},[26,117216,117217],{"className":28,"code":572,"language":30,"meta":31,"style":31},[33,117218,117219],{"__ignoreMap":31},[36,117220,117221,117223,117225,117227],{"class":38,"line":39},[36,117222,457],{"class":112},[36,117224,581],{"class":42},[36,117226,47],{"class":46},[36,117228,586],{"class":112},[19,117230,589,117231,593,117233,597],{},[33,117232,592],{},[33,117234,596],{},[14,117236,601],{"id":600},[26,117238,117239],{"className":28,"code":604,"language":30,"meta":31,"style":31},[33,117240,117241,117251,117257,117267,117277,117281,117285,117293,117297,117301,117305,117309,117313,117317,117321,117325,117329,117333,117337,117341,117345,117349,117353,117357,117361,117365,117369,117373,117377,117381,117385,117389,117393,117397,117413,117425,117429,117441,117451,117465,117479,117483,117501,117519,117543,117555,117559,117569,117579,117589,117593,117635,117673,117677,117685,117699,117713,117729,117735,117739,117751,117765,117779,117791,117807,117823,117827,117863,117875,117887,117891,117927,117937,117949,117953,117963,117971,117975,117983,117997,118013,118017,118027,118043,118055,118059,118069,118073,118083,118093,118097,118111,118125,118139,118143,118155,118171,118183,118189,118193,118197,118209,118217,118233,118243,118253,118257,118265,118281,118289,118297,118305,118343,118353,118357,118361,118379,118383,118387,118399],{"__ignoreMap":31},[36,117242,117243,117245,117247,117249],{"class":38,"line":39},[36,117244,611],{"class":46},[36,117246,614],{"class":42},[36,117248,617],{"class":46},[36,117250,620],{"class":42},[36,117252,117253,117255],{"class":38,"line":53},[36,117254,611],{"class":46},[36,117256,627],{"class":42},[36,117258,117259,117261,117263,117265],{"class":38,"line":196},[36,117260,611],{"class":46},[36,117262,634],{"class":42},[36,117264,617],{"class":46},[36,117266,639],{"class":42},[36,117268,117269,117271,117273,117275],{"class":38,"line":642},[36,117270,645],{"class":46},[36,117272,614],{"class":42},[36,117274,611],{"class":46},[36,117276,652],{"class":42},[36,117278,117279],{"class":38,"line":655},[36,117280,659],{"emptyLinePlaceholder":658},[36,117282,117283],{"class":38,"line":662},[36,117284,659],{"emptyLinePlaceholder":658},[36,117286,117287,117289,117291],{"class":38,"line":667},[36,117288,670],{"class":112},[36,117290,673],{"class":46},[36,117292,676],{"class":105},[36,117294,117295],{"class":38,"line":679},[36,117296,682],{"class":105},[36,117298,117299],{"class":38,"line":685},[36,117300,688],{"class":105},[36,117302,117303],{"class":38,"line":691},[36,117304,659],{"emptyLinePlaceholder":658},[36,117306,117307],{"class":38,"line":696},[36,117308,699],{"class":105},[36,117310,117311],{"class":38,"line":702},[36,117312,705],{"class":105},[36,117314,117315],{"class":38,"line":708},[36,117316,659],{"emptyLinePlaceholder":658},[36,117318,117319],{"class":38,"line":713},[36,117320,716],{"class":105},[36,117322,117323],{"class":38,"line":719},[36,117324,722],{"class":105},[36,117326,117327],{"class":38,"line":725},[36,117328,728],{"class":105},[36,117330,117331],{"class":38,"line":731},[36,117332,659],{"emptyLinePlaceholder":658},[36,117334,117335],{"class":38,"line":736},[36,117336,739],{"class":105},[36,117338,117339],{"class":38,"line":742},[36,117340,745],{"class":105},[36,117342,117343],{"class":38,"line":748},[36,117344,751],{"class":105},[36,117346,117347],{"class":38,"line":754},[36,117348,757],{"class":105},[36,117350,117351],{"class":38,"line":760},[36,117352,763],{"class":105},[36,117354,117355],{"class":38,"line":766},[36,117356,769],{"class":105},[36,117358,117359],{"class":38,"line":772},[36,117360,775],{"class":105},[36,117362,117363],{"class":38,"line":778},[36,117364,659],{"emptyLinePlaceholder":658},[36,117366,117367],{"class":38,"line":783},[36,117368,786],{"class":105},[36,117370,117371],{"class":38,"line":789},[36,117372,792],{"class":105},[36,117374,117375],{"class":38,"line":795},[36,117376,798],{"class":105},[36,117378,117379],{"class":38,"line":801},[36,117380,804],{"class":105},[36,117382,117383],{"class":38,"line":807},[36,117384,810],{"class":105},[36,117386,117387],{"class":38,"line":813},[36,117388,816],{"class":105},[36,117390,117391],{"class":38,"line":819},[36,117392,659],{"emptyLinePlaceholder":658},[36,117394,117395],{"class":38,"line":824},[36,117396,659],{"emptyLinePlaceholder":658},[36,117398,117399,117401,117403,117405,117407,117409,117411],{"class":38,"line":829},[36,117400,832],{"class":46},[36,117402,835],{"class":101},[36,117404,495],{"class":42},[36,117406,223],{"class":101},[36,117408,842],{"class":42},[36,117410,845],{"class":101},[36,117412,848],{"class":42},[36,117414,117415,117417,117419,117421,117423],{"class":38,"line":851},[36,117416,854],{"class":42},[36,117418,47],{"class":46},[36,117420,859],{"class":42},[36,117422,862],{"class":105},[36,117424,865],{"class":42},[36,117426,117427],{"class":38,"line":868},[36,117428,659],{"emptyLinePlaceholder":658},[36,117430,117431,117433,117435,117437,117439],{"class":38,"line":873},[36,117432,876],{"class":46},[36,117434,879],{"class":112},[36,117436,882],{"class":42},[36,117438,885],{"class":112},[36,117440,888],{"class":42},[36,117442,117443,117445,117447,117449],{"class":38,"line":891},[36,117444,894],{"class":112},[36,117446,897],{"class":42},[36,117448,900],{"class":112},[36,117450,903],{"class":42},[36,117452,117453,117455,117457,117459,117461,117463],{"class":38,"line":906},[36,117454,909],{"class":112},[36,117456,912],{"class":42},[36,117458,47],{"class":46},[36,117460,917],{"class":42},[36,117462,670],{"class":112},[36,117464,922],{"class":42},[36,117466,117467,117469,117471,117473,117475,117477],{"class":38,"line":925},[36,117468,909],{"class":112},[36,117470,930],{"class":42},[36,117472,47],{"class":46},[36,117474,935],{"class":42},[36,117476,457],{"class":112},[36,117478,940],{"class":42},[36,117480,117481],{"class":38,"line":943},[36,117482,659],{"emptyLinePlaceholder":658},[36,117484,117485,117487,117489,117491,117493,117495,117497,117499],{"class":38,"line":948},[36,117486,909],{"class":112},[36,117488,953],{"class":42},[36,117490,47],{"class":46},[36,117492,958],{"class":42},[36,117494,457],{"class":112},[36,117496,963],{"class":42},[36,117498,966],{"class":105},[36,117500,922],{"class":42},[36,117502,117503,117505,117507,117509,117511,117513,117515,117517],{"class":38,"line":971},[36,117504,909],{"class":112},[36,117506,976],{"class":42},[36,117508,47],{"class":46},[36,117510,958],{"class":42},[36,117512,457],{"class":112},[36,117514,963],{"class":42},[36,117516,987],{"class":105},[36,117518,922],{"class":42},[36,117520,117521,117523,117525,117527,117529,117531,117533,117535,117537,117539,117541],{"class":38,"line":992},[36,117522,995],{"class":46},[36,117524,406],{"class":112},[36,117526,953],{"class":42},[36,117528,393],{"class":46},[36,117530,1004],{"class":112},[36,117532,1007],{"class":46},[36,117534,406],{"class":112},[36,117536,976],{"class":42},[36,117538,393],{"class":46},[36,117540,1004],{"class":112},[36,117542,888],{"class":42},[36,117544,117545,117547,117549,117551,117553],{"class":38,"line":1020},[36,117546,1023],{"class":46},[36,117548,1026],{"class":112},[36,117550,495],{"class":42},[36,117552,1031],{"class":105},[36,117554,922],{"class":42},[36,117556,117557],{"class":38,"line":1036},[36,117558,659],{"emptyLinePlaceholder":658},[36,117560,117561,117563,117565,117567],{"class":38,"line":1041},[36,117562,909],{"class":112},[36,117564,581],{"class":42},[36,117566,47],{"class":46},[36,117568,586],{"class":112},[36,117570,117571,117573,117575,117577],{"class":38,"line":1052},[36,117572,909],{"class":112},[36,117574,1057],{"class":42},[36,117576,47],{"class":46},[36,117578,1062],{"class":112},[36,117580,117581,117583,117585,117587],{"class":38,"line":1065},[36,117582,909],{"class":112},[36,117584,409],{"class":42},[36,117586,47],{"class":46},[36,117588,1074],{"class":112},[36,117590,117591],{"class":38,"line":1077},[36,117592,659],{"emptyLinePlaceholder":658},[36,117594,117595,117597,117599,117601,117603,117605,117607,117609,117611,117613,117615,117617,117619,117621,117623,117625,117627,117629,117631,117633],{"class":38,"line":1082},[36,117596,909],{"class":112},[36,117598,460],{"class":42},[36,117600,47],{"class":46},[36,117602,465],{"class":42},[36,117604,469],{"class":468},[36,117606,472],{"class":46},[36,117608,475],{"class":112},[36,117610,478],{"class":42},[36,117612,481],{"class":468},[36,117614,47],{"class":46},[36,117616,475],{"class":112},[36,117618,478],{"class":42},[36,117620,490],{"class":468},[36,117622,47],{"class":46},[36,117624,495],{"class":42},[36,117626,498],{"class":112},[36,117628,501],{"class":42},[36,117630,504],{"class":468},[36,117632,47],{"class":46},[36,117634,509],{"class":42},[36,117636,117637,117639,117641,117643,117645,117647,117649,117651,117653,117655,117657,117659,117661,117663,117665,117667,117669,117671],{"class":38,"line":1125},[36,117638,909],{"class":112},[36,117640,528],{"class":42},[36,117642,47],{"class":46},[36,117644,465],{"class":42},[36,117646,469],{"class":468},[36,117648,472],{"class":46},[36,117650,539],{"class":42},[36,117652,481],{"class":468},[36,117654,47],{"class":46},[36,117656,539],{"class":42},[36,117658,490],{"class":468},[36,117660,47],{"class":46},[36,117662,495],{"class":42},[36,117664,554],{"class":112},[36,117666,501],{"class":42},[36,117668,504],{"class":468},[36,117670,47],{"class":46},[36,117672,509],{"class":42},[36,117674,117675],{"class":38,"line":1164},[36,117676,659],{"emptyLinePlaceholder":658},[36,117678,117679,117681,117683],{"class":38,"line":1169},[36,117680,876],{"class":46},[36,117682,1174],{"class":101},[36,117684,1177],{"class":42},[36,117686,117687,117689,117691,117693,117695,117697],{"class":38,"line":1180},[36,117688,1183],{"class":42},[36,117690,47],{"class":46},[36,117692,406],{"class":112},[36,117694,1190],{"class":42},[36,117696,457],{"class":112},[36,117698,1195],{"class":42},[36,117700,117701,117703,117705,117707,117709,117711],{"class":38,"line":1198},[36,117702,1201],{"class":42},[36,117704,47],{"class":46},[36,117706,406],{"class":112},[36,117708,1190],{"class":42},[36,117710,457],{"class":112},[36,117712,1212],{"class":42},[36,117714,117715,117717,117719,117721,117723,117725,117727],{"class":38,"line":1215},[36,117716,1218],{"class":42},[36,117718,47],{"class":46},[36,117720,1223],{"class":42},[36,117722,457],{"class":112},[36,117724,1228],{"class":42},[36,117726,457],{"class":112},[36,117728,1233],{"class":42},[36,117730,117731,117733],{"class":38,"line":1236},[36,117732,1239],{"class":46},[36,117734,1242],{"class":42},[36,117736,117737],{"class":38,"line":1245},[36,117738,659],{"emptyLinePlaceholder":658},[36,117740,117741,117743,117745,117747,117749],{"class":38,"line":1250},[36,117742,876],{"class":46},[36,117744,1255],{"class":101},[36,117746,882],{"class":42},[36,117748,1260],{"class":112},[36,117750,888],{"class":42},[36,117752,117753,117755,117757,117759,117761,117763],{"class":38,"line":1265},[36,117754,1183],{"class":42},[36,117756,47],{"class":46},[36,117758,406],{"class":112},[36,117760,1190],{"class":42},[36,117762,457],{"class":112},[36,117764,1278],{"class":42},[36,117766,117767,117769,117771,117773,117775,117777],{"class":38,"line":1281},[36,117768,1201],{"class":42},[36,117770,47],{"class":46},[36,117772,406],{"class":112},[36,117774,1190],{"class":42},[36,117776,457],{"class":112},[36,117778,1294],{"class":42},[36,117780,117781,117783,117785,117787,117789],{"class":38,"line":1297},[36,117782,1300],{"class":42},[36,117784,47],{"class":46},[36,117786,1305],{"class":42},[36,117788,1308],{"class":46},[36,117790,1311],{"class":42},[36,117792,117793,117795,117797,117799,117801,117803,117805],{"class":38,"line":1314},[36,117794,1317],{"class":42},[36,117796,47],{"class":46},[36,117798,1322],{"class":112},[36,117800,1325],{"class":46},[36,117802,1328],{"class":42},[36,117804,457],{"class":112},[36,117806,1333],{"class":42},[36,117808,117809,117811,117813,117815,117817,117819,117821],{"class":38,"line":1336},[36,117810,1239],{"class":46},[36,117812,1341],{"class":112},[36,117814,495],{"class":42},[36,117816,1308],{"class":46},[36,117818,1348],{"class":42},[36,117820,1308],{"class":46},[36,117822,1353],{"class":42},[36,117824,117825],{"class":38,"line":1356},[36,117826,659],{"emptyLinePlaceholder":658},[36,117828,117829,117831,117833,117835,117837,117839,117841,117843,117845,117847,117849,117851,117853,117855,117857,117859,117861],{"class":38,"line":1361},[36,117830,876],{"class":46},[36,117832,1366],{"class":101},[36,117834,1369],{"class":42},[36,117836,1372],{"class":46},[36,117838,1375],{"class":42},[36,117840,1378],{"class":112},[36,117842,1381],{"class":46},[36,117844,1384],{"class":112},[36,117846,673],{"class":46},[36,117848,1384],{"class":112},[36,117850,1391],{"class":42},[36,117852,1394],{"class":112},[36,117854,1381],{"class":46},[36,117856,1384],{"class":112},[36,117858,673],{"class":46},[36,117860,1384],{"class":112},[36,117862,848],{"class":42},[36,117864,117865,117867,117869,117871,117873],{"class":38,"line":1407},[36,117866,894],{"class":112},[36,117868,1412],{"class":42},[36,117870,1415],{"class":468},[36,117872,47],{"class":46},[36,117874,1420],{"class":42},[36,117876,117877,117879,117881,117883,117885],{"class":38,"line":1423},[36,117878,1426],{"class":42},[36,117880,457],{"class":112},[36,117882,1431],{"class":42},[36,117884,457],{"class":112},[36,117886,1436],{"class":42},[36,117888,117889],{"class":38,"line":1439},[36,117890,659],{"emptyLinePlaceholder":658},[36,117892,117893,117895,117897,117899,117901,117903,117905,117907,117909,117911,117913,117915,117917,117919,117921,117923,117925],{"class":38,"line":1444},[36,117894,909],{"class":112},[36,117896,1449],{"class":42},[36,117898,47],{"class":46},[36,117900,406],{"class":112},[36,117902,1456],{"class":42},[36,117904,469],{"class":468},[36,117906,472],{"class":46},[36,117908,1463],{"class":112},[36,117910,478],{"class":42},[36,117912,481],{"class":468},[36,117914,47],{"class":46},[36,117916,1463],{"class":112},[36,117918,478],{"class":42},[36,117920,1476],{"class":468},[36,117922,47],{"class":46},[36,117924,457],{"class":112},[36,117926,1483],{"class":42},[36,117928,117929,117931,117933,117935],{"class":38,"line":1486},[36,117930,909],{"class":112},[36,117932,1491],{"class":42},[36,117934,47],{"class":46},[36,117936,1496],{"class":112},[36,117938,117939,117941,117943,117945,117947],{"class":38,"line":1499},[36,117940,1502],{"class":42},[36,117942,457],{"class":112},[36,117944,1431],{"class":42},[36,117946,457],{"class":112},[36,117948,1436],{"class":42},[36,117950,117951],{"class":38,"line":1513},[36,117952,659],{"emptyLinePlaceholder":658},[36,117954,117955,117957,117959,117961],{"class":38,"line":1518},[36,117956,909],{"class":112},[36,117958,409],{"class":42},[36,117960,47],{"class":46},[36,117962,1074],{"class":112},[36,117964,117965,117967,117969],{"class":38,"line":1529},[36,117966,1239],{"class":46},[36,117968,406],{"class":112},[36,117970,1536],{"class":42},[36,117972,117973],{"class":38,"line":1539},[36,117974,659],{"emptyLinePlaceholder":658},[36,117976,117977,117979,117981],{"class":38,"line":1544},[36,117978,876],{"class":46},[36,117980,1549],{"class":101},[36,117982,1552],{"class":42},[36,117984,117985,117987,117989,117991,117993,117995],{"class":38,"line":1555},[36,117986,1558],{"class":42},[36,117988,47],{"class":46},[36,117990,1563],{"class":42},[36,117992,504],{"class":468},[36,117994,47],{"class":46},[36,117996,509],{"class":42},[36,117998,117999,118001,118003,118005,118007,118009,118011],{"class":38,"line":1572},[36,118000,1558],{"class":42},[36,118002,47],{"class":46},[36,118004,1579],{"class":42},[36,118006,457],{"class":112},[36,118008,1584],{"class":42},[36,118010,457],{"class":112},[36,118012,1589],{"class":42},[36,118014,118015],{"class":38,"line":1592},[36,118016,659],{"emptyLinePlaceholder":658},[36,118018,118019,118021,118023,118025],{"class":38,"line":1597},[36,118020,909],{"class":112},[36,118022,1602],{"class":42},[36,118024,47],{"class":46},[36,118026,1607],{"class":42},[36,118028,118029,118031,118033,118035,118037,118039,118041],{"class":38,"line":1610},[36,118030,1613],{"class":46},[36,118032,1616],{"class":42},[36,118034,1619],{"class":46},[36,118036,1622],{"class":112},[36,118038,495],{"class":42},[36,118040,457],{"class":112},[36,118042,1629],{"class":42},[36,118044,118045,118047,118049,118051,118053],{"class":38,"line":1632},[36,118046,1635],{"class":42},[36,118048,457],{"class":112},[36,118050,1431],{"class":42},[36,118052,457],{"class":112},[36,118054,1436],{"class":42},[36,118056,118057],{"class":38,"line":1646},[36,118058,659],{"emptyLinePlaceholder":658},[36,118060,118061,118063,118065,118067],{"class":38,"line":1651},[36,118062,909],{"class":112},[36,118064,409],{"class":42},[36,118066,1658],{"class":46},[36,118068,1661],{"class":112},[36,118070,118071],{"class":38,"line":1664},[36,118072,659],{"emptyLinePlaceholder":658},[36,118074,118075,118077,118079,118081],{"class":38,"line":1669},[36,118076,1218],{"class":42},[36,118078,47],{"class":46},[36,118080,406],{"class":112},[36,118082,1678],{"class":42},[36,118084,118085,118087,118089,118091],{"class":38,"line":1681},[36,118086,1684],{"class":42},[36,118088,47],{"class":46},[36,118090,406],{"class":112},[36,118092,1691],{"class":42},[36,118094,118095],{"class":38,"line":1694},[36,118096,659],{"emptyLinePlaceholder":658},[36,118098,118099,118101,118103,118105,118107,118109],{"class":38,"line":1699},[36,118100,1183],{"class":42},[36,118102,47],{"class":46},[36,118104,406],{"class":112},[36,118106,1190],{"class":42},[36,118108,457],{"class":112},[36,118110,1278],{"class":42},[36,118112,118113,118115,118117,118119,118121,118123],{"class":38,"line":1714},[36,118114,1201],{"class":42},[36,118116,47],{"class":46},[36,118118,406],{"class":112},[36,118120,1190],{"class":42},[36,118122,457],{"class":112},[36,118124,1294],{"class":42},[36,118126,118127,118129,118131,118133,118135,118137],{"class":38,"line":1729},[36,118128,1300],{"class":42},[36,118130,47],{"class":46},[36,118132,1341],{"class":112},[36,118134,1738],{"class":42},[36,118136,1308],{"class":46},[36,118138,1743],{"class":42},[36,118140,118141],{"class":38,"line":1746},[36,118142,659],{"emptyLinePlaceholder":658},[36,118144,118145,118147,118149,118151,118153],{"class":38,"line":1751},[36,118146,1754],{"class":42},[36,118148,47],{"class":46},[36,118150,390],{"class":42},[36,118152,393],{"class":46},[36,118154,396],{"class":112},[36,118156,118157,118159,118161,118163,118165,118167,118169],{"class":38,"line":1765},[36,118158,1768],{"class":42},[36,118160,47],{"class":46},[36,118162,406],{"class":112},[36,118164,409],{"class":42},[36,118166,412],{"class":46},[36,118168,406],{"class":112},[36,118170,417],{"class":42},[36,118172,118173,118175,118177,118179,118181],{"class":38,"line":1783},[36,118174,1786],{"class":42},[36,118176,47],{"class":46},[36,118178,859],{"class":42},[36,118180,1793],{"class":105},[36,118182,1796],{"class":42},[36,118184,118185,118187],{"class":38,"line":1799},[36,118186,1239],{"class":46},[36,118188,1804],{"class":42},[36,118190,118191],{"class":38,"line":1807},[36,118192,659],{"emptyLinePlaceholder":658},[36,118194,118195],{"class":38,"line":1812},[36,118196,659],{"emptyLinePlaceholder":658},[36,118198,118199,118201,118203,118205,118207],{"class":38,"line":1817},[36,118200,1820],{"class":46},[36,118202,1823],{"class":101},[36,118204,1826],{"class":42},[36,118206,885],{"class":112},[36,118208,888],{"class":42},[36,118210,118211,118213,118215],{"class":38,"line":1833},[36,118212,1836],{"class":42},[36,118214,47],{"class":46},[36,118216,1841],{"class":42},[36,118218,118219,118221,118223,118225,118227,118229,118231],{"class":38,"line":1844},[36,118220,1847],{"class":42},[36,118222,47],{"class":46},[36,118224,1852],{"class":42},[36,118226,1415],{"class":468},[36,118228,47],{"class":46},[36,118230,1859],{"class":112},[36,118232,922],{"class":42},[36,118234,118235,118237,118239,118241],{"class":38,"line":1864},[36,118236,1867],{"class":112},[36,118238,495],{"class":42},[36,118240,1872],{"class":105},[36,118242,1875],{"class":42},[36,118244,118245,118247,118249,118251],{"class":38,"line":1878},[36,118246,1867],{"class":112},[36,118248,495],{"class":42},[36,118250,1885],{"class":105},[36,118252,1888],{"class":42},[36,118254,118255],{"class":38,"line":1891},[36,118256,659],{"emptyLinePlaceholder":658},[36,118258,118259,118261,118263],{"class":38,"line":1896},[36,118260,1899],{"class":42},[36,118262,47],{"class":46},[36,118264,1496],{"class":112},[36,118266,118267,118269,118271,118273,118275,118277,118279],{"class":38,"line":1906},[36,118268,1909],{"class":46},[36,118270,1912],{"class":42},[36,118272,1619],{"class":46},[36,118274,1622],{"class":112},[36,118276,495],{"class":42},[36,118278,1921],{"class":112},[36,118280,848],{"class":42},[36,118282,118283,118285,118287],{"class":38,"line":1926},[36,118284,1558],{"class":42},[36,118286,47],{"class":46},[36,118288,1933],{"class":42},[36,118290,118291,118293,118295],{"class":38,"line":1936},[36,118292,1939],{"class":42},[36,118294,47],{"class":46},[36,118296,61],{"class":42},[36,118298,118299,118301,118303],{"class":38,"line":1946},[36,118300,1949],{"class":42},[36,118302,1658],{"class":46},[36,118304,1954],{"class":42},[36,118306,118307,118309,118311,118313,118315,118317,118319,118321,118323,118325,118327,118329,118331,118333,118335,118337,118339,118341],{"class":38,"line":1957},[36,118308,1960],{"class":112},[36,118310,495],{"class":42},[36,118312,1965],{"class":105},[36,118314,1968],{"class":42},[36,118316,1971],{"class":105},[36,118318,478],{"class":42},[36,118320,1976],{"class":112},[36,118322,1979],{"class":42},[36,118324,1982],{"class":112},[36,118326,1985],{"class":42},[36,118328,1988],{"class":105},[36,118330,478],{"class":42},[36,118332,1976],{"class":112},[36,118334,1995],{"class":42},[36,118336,1793],{"class":105},[36,118338,2000],{"class":42},[36,118340,1982],{"class":112},[36,118342,2005],{"class":42},[36,118344,118345,118347,118349,118351],{"class":38,"line":2008},[36,118346,995],{"class":46},[36,118348,2013],{"class":42},[36,118350,2016],{"class":46},[36,118352,2019],{"class":42},[36,118354,118355],{"class":38,"line":2022},[36,118356,2025],{"class":46},[36,118358,118359],{"class":38,"line":2028},[36,118360,659],{"emptyLinePlaceholder":658},[36,118362,118363,118365,118367,118369,118371,118373,118375,118377],{"class":38,"line":2033},[36,118364,1867],{"class":112},[36,118366,495],{"class":42},[36,118368,2040],{"class":105},[36,118370,478],{"class":42},[36,118372,1976],{"class":112},[36,118374,2047],{"class":42},[36,118376,1982],{"class":112},[36,118378,2005],{"class":42},[36,118380,118381],{"class":38,"line":2054},[36,118382,659],{"emptyLinePlaceholder":658},[36,118384,118385],{"class":38,"line":2059},[36,118386,659],{"emptyLinePlaceholder":658},[36,118388,118389,118391,118393,118395,118397],{"class":38,"line":2064},[36,118390,2067],{"class":46},[36,118392,2070],{"class":112},[36,118394,2073],{"class":46},[36,118396,2076],{"class":105},[36,118398,888],{"class":42},[36,118400,118401],{"class":38,"line":2081},[36,118402,2084],{"class":42},[19,118404,2087],{},[26,118406,118407],{"className":92,"code":2090,"language":94,"meta":31,"style":31},[33,118408,118409],{"__ignoreMap":31},[36,118410,118411,118413],{"class":38,"line":39},[36,118412,2097],{"class":101},[36,118414,2100],{"class":105},[19,118416,2103],{},[26,118418,118419],{"className":92,"code":2106,"language":94,"meta":31,"style":31},[33,118420,118421],{"__ignoreMap":31},[36,118422,118423,118425],{"class":38,"line":39},[36,118424,30],{"class":101},[36,118426,2100],{"class":105},[318,118428,2117],{"id":2117},[19,118430,2120],{},[26,118432,118433],{"className":28,"code":2123,"language":30,"meta":31,"style":31},[33,118434,118435],{"__ignoreMap":31},[36,118436,118437,118439,118441,118443,118445,118447,118449],{"class":38,"line":39},[36,118438,832],{"class":46},[36,118440,835],{"class":101},[36,118442,495],{"class":42},[36,118444,223],{"class":101},[36,118446,842],{"class":42},[36,118448,845],{"class":101},[36,118450,848],{"class":42},[19,118452,2144],{},[19,118454,2147],{},[26,118456,118457],{"className":28,"code":2150,"language":30,"meta":31,"style":31},[33,118458,118459,118473],{"__ignoreMap":31},[36,118460,118461,118463,118465,118467,118469,118471],{"class":38,"line":39},[36,118462,457],{"class":112},[36,118464,912],{"class":42},[36,118466,47],{"class":46},[36,118468,917],{"class":42},[36,118470,670],{"class":112},[36,118472,922],{"class":42},[36,118474,118475,118477,118479,118481,118483,118485],{"class":38,"line":53},[36,118476,457],{"class":112},[36,118478,930],{"class":42},[36,118480,47],{"class":46},[36,118482,935],{"class":42},[36,118484,457],{"class":112},[36,118486,940],{"class":42},[19,118488,2183,118489,2186],{},[33,118490,900],{},[19,118492,2189],{},[26,118494,118495],{"className":28,"code":2192,"language":30,"meta":31,"style":31},[33,118496,118497,118511],{"__ignoreMap":31},[36,118498,118499,118501,118503,118505,118507,118509],{"class":38,"line":39},[36,118500,457],{"class":112},[36,118502,953],{"class":42},[36,118504,47],{"class":46},[36,118506,958],{"class":42},[36,118508,2207],{"class":112},[36,118510,922],{"class":42},[36,118512,118513,118515,118517,118519,118521,118523],{"class":38,"line":53},[36,118514,457],{"class":112},[36,118516,976],{"class":42},[36,118518,47],{"class":46},[36,118520,958],{"class":42},[36,118522,2207],{"class":112},[36,118524,922],{"class":42},[19,118526,2226],{},[19,118528,2229],{},[26,118530,118531],{"className":28,"code":2232,"language":30,"meta":31,"style":31},[33,118532,118533],{"__ignoreMap":31},[36,118534,118535,118537,118539,118541,118543,118545,118547,118549,118551,118553,118555,118557,118559,118561,118563,118565,118567],{"class":38,"line":39},[36,118536,1820],{"class":46},[36,118538,1366],{"class":101},[36,118540,1369],{"class":42},[36,118542,1372],{"class":46},[36,118544,1375],{"class":42},[36,118546,1378],{"class":112},[36,118548,1381],{"class":46},[36,118550,1384],{"class":112},[36,118552,673],{"class":46},[36,118554,1384],{"class":112},[36,118556,1391],{"class":42},[36,118558,1394],{"class":112},[36,118560,1381],{"class":46},[36,118562,1384],{"class":112},[36,118564,673],{"class":46},[36,118566,1384],{"class":112},[36,118568,848],{"class":42},[19,118570,118571,2276],{},[33,118572,2275],{},[211,118574,118575,118577,118579,118581],{},[214,118576,2281],{},[214,118578,2284],{},[214,118580,2287],{},[214,118582,2290],{},[19,118584,2293],{},[26,118586,118587],{"className":28,"code":2296,"language":30,"meta":31,"style":31},[33,118588,118589],{"__ignoreMap":31},[36,118590,118591,118593,118595],{"class":38,"line":39},[36,118592,1820],{"class":46},[36,118594,1549],{"class":101},[36,118596,1552],{"class":42},[19,118598,118599,2312],{},[33,118600,2311],{},[211,118602,118603,118605,118609,118611,118613,118615],{},[214,118604,2317],{},[214,118606,2320,118607,224],{},[33,118608,2323],{},[214,118610,2326],{},[214,118612,2329],{},[214,118614,2332],{},[214,118616,2335],{},[318,118618,2338],{"id":2338},[26,118620,118621],{"className":28,"code":2341,"language":30,"meta":31,"style":31},[33,118622,118623],{"__ignoreMap":31},[36,118624,118625,118627,118629,118631],{"class":38,"line":39},[36,118626,611],{"class":46},[36,118628,614],{"class":42},[36,118630,617],{"class":46},[36,118632,620],{"class":42},[19,118634,2356,118635,2359,118637,2363],{},[33,118636,223],{},[33,118638,2362],{},[26,118640,118641],{"className":28,"code":2366,"language":30,"meta":31,"style":31},[33,118642,118643],{"__ignoreMap":31},[36,118644,118645,118647,118649,118651],{"class":38,"line":39},[36,118646,645],{"class":46},[36,118648,614],{"class":42},[36,118650,611],{"class":46},[36,118652,652],{"class":42},[19,118654,2381,118655,2385],{},[33,118656,2384],{},[26,118658,118659],{"className":28,"code":2123,"language":30,"meta":31,"style":31},[33,118660,118661],{"__ignoreMap":31},[36,118662,118663,118665,118667,118669,118671,118673,118675],{"class":38,"line":39},[36,118664,832],{"class":46},[36,118666,835],{"class":101},[36,118668,495],{"class":42},[36,118670,223],{"class":101},[36,118672,842],{"class":42},[36,118674,845],{"class":101},[36,118676,848],{"class":42},[19,118678,2408,118679,2412,118681,2415,118683,324,118685,2420],{},[33,118680,2411],{},[33,118682,2362],{},[33,118684,2275],{},[33,118686,2311],{},[26,118688,118689],{"className":28,"code":2423,"language":30,"meta":31,"style":31},[33,118690,118691],{"__ignoreMap":31},[36,118692,118693,118695,118697,118699,118701],{"class":38,"line":39},[36,118694,2430],{"class":42},[36,118696,47],{"class":46},[36,118698,859],{"class":42},[36,118700,862],{"class":105},[36,118702,865],{"class":42},[19,118704,2441],{},[26,118706,118707],{"className":28,"code":2444,"language":30,"meta":31,"style":31},[33,118708,118709],{"__ignoreMap":31},[36,118710,118711,118713,118715,118717,118719],{"class":38,"line":39},[36,118712,1820],{"class":46},[36,118714,879],{"class":112},[36,118716,882],{"class":42},[36,118718,885],{"class":112},[36,118720,888],{"class":42},[19,118722,118723,2463,118725,224],{},[33,118724,900],{},[33,118726,2466],{},[26,118728,118729],{"className":28,"code":2469,"language":30,"meta":31,"style":31},[33,118730,118731],{"__ignoreMap":31},[36,118732,118733,118735,118737,118739],{"class":38,"line":39},[36,118734,2476],{"class":112},[36,118736,897],{"class":42},[36,118738,900],{"class":112},[36,118740,903],{"class":42},[19,118742,2485,118743,2488],{},[33,118744,2362],{},[26,118746,118747],{"className":28,"code":2150,"language":30,"meta":31,"style":31},[33,118748,118749,118763],{"__ignoreMap":31},[36,118750,118751,118753,118755,118757,118759,118761],{"class":38,"line":39},[36,118752,457],{"class":112},[36,118754,912],{"class":42},[36,118756,47],{"class":46},[36,118758,917],{"class":42},[36,118760,670],{"class":112},[36,118762,922],{"class":42},[36,118764,118765,118767,118769,118771,118773,118775],{"class":38,"line":53},[36,118766,457],{"class":112},[36,118768,930],{"class":42},[36,118770,47],{"class":46},[36,118772,935],{"class":42},[36,118774,457],{"class":112},[36,118776,940],{"class":42},[19,118778,2523,118779,2526,118781,324,118783,2533],{},[33,118780,457],{},[33,118782,2529],{},[33,118784,2532],{},[26,118786,118787],{"className":28,"code":2192,"language":30,"meta":31,"style":31},[33,118788,118789,118803],{"__ignoreMap":31},[36,118790,118791,118793,118795,118797,118799,118801],{"class":38,"line":39},[36,118792,457],{"class":112},[36,118794,953],{"class":42},[36,118796,47],{"class":46},[36,118798,958],{"class":42},[36,118800,2207],{"class":112},[36,118802,922],{"class":42},[36,118804,118805,118807,118809,118811,118813,118815],{"class":38,"line":53},[36,118806,457],{"class":112},[36,118808,976],{"class":42},[36,118810,47],{"class":46},[36,118812,958],{"class":42},[36,118814,2207],{"class":112},[36,118816,922],{"class":42},[19,118818,2568,118819,324,118821,2575],{},[33,118820,2571],{},[33,118822,2574],{},[26,118824,118825],{"className":28,"code":2578,"language":30,"meta":31,"style":31},[33,118826,118827,118837,118847],{"__ignoreMap":31},[36,118828,118829,118831,118833,118835],{"class":38,"line":39},[36,118830,457],{"class":112},[36,118832,581],{"class":42},[36,118834,47],{"class":46},[36,118836,586],{"class":112},[36,118838,118839,118841,118843,118845],{"class":38,"line":53},[36,118840,457],{"class":112},[36,118842,1057],{"class":42},[36,118844,47],{"class":46},[36,118846,1062],{"class":112},[36,118848,118849,118851,118853,118855],{"class":38,"line":196},[36,118850,457],{"class":112},[36,118852,409],{"class":42},[36,118854,47],{"class":46},[36,118856,1074],{"class":112},[19,118858,118859,2616,118861,2620,118863,2624],{},[33,118860,2615],{},[33,118862,2619],{},[33,118864,2623],{},[26,118866,118867],{"className":28,"code":450,"language":30,"meta":31,"style":31},[33,118868,118869],{"__ignoreMap":31},[36,118870,118871,118873,118875,118877,118879,118881,118883,118885,118887,118889,118891,118893,118895,118897,118899,118901,118903,118905,118907,118909],{"class":38,"line":39},[36,118872,457],{"class":112},[36,118874,460],{"class":42},[36,118876,47],{"class":46},[36,118878,465],{"class":42},[36,118880,469],{"class":468},[36,118882,472],{"class":46},[36,118884,475],{"class":112},[36,118886,478],{"class":42},[36,118888,481],{"class":468},[36,118890,47],{"class":46},[36,118892,475],{"class":112},[36,118894,478],{"class":42},[36,118896,490],{"class":468},[36,118898,47],{"class":46},[36,118900,495],{"class":42},[36,118902,498],{"class":112},[36,118904,501],{"class":42},[36,118906,504],{"class":468},[36,118908,47],{"class":46},[36,118910,509],{"class":42},[19,118912,2673,118913,2677,118915,324,118917,2684],{},[33,118914,2676],{},[33,118916,2680],{},[33,118918,2683],{},[26,118920,118921],{"className":28,"code":519,"language":30,"meta":31,"style":31},[33,118922,118923],{"__ignoreMap":31},[36,118924,118925,118927,118929,118931,118933,118935,118937,118939,118941,118943,118945,118947,118949,118951,118953,118955,118957,118959],{"class":38,"line":39},[36,118926,457],{"class":112},[36,118928,528],{"class":42},[36,118930,47],{"class":46},[36,118932,465],{"class":42},[36,118934,469],{"class":468},[36,118936,472],{"class":46},[36,118938,539],{"class":42},[36,118940,481],{"class":468},[36,118942,47],{"class":46},[36,118944,539],{"class":42},[36,118946,490],{"class":468},[36,118948,47],{"class":46},[36,118950,495],{"class":42},[36,118952,554],{"class":112},[36,118954,501],{"class":42},[36,118956,504],{"class":468},[36,118958,47],{"class":46},[36,118960,509],{"class":42},[19,118962,2729,118963,2733,118965,2737],{},[33,118964,2732],{},[33,118966,2736],{},[26,118968,118969],{"className":28,"code":2740,"language":30,"meta":31,"style":31},[33,118970,118971],{"__ignoreMap":31},[36,118972,118973,118975,118977],{"class":38,"line":39},[36,118974,1820],{"class":46},[36,118976,1174],{"class":101},[36,118978,1177],{"class":42},[19,118980,2753,118981,2757],{},[33,118982,2756],{},[26,118984,118985],{"className":28,"code":2760,"language":30,"meta":31,"style":31},[33,118986,118987,119001],{"__ignoreMap":31},[36,118988,118989,118991,118993,118995,118997,118999],{"class":38,"line":39},[36,118990,2767],{"class":42},[36,118992,47],{"class":46},[36,118994,406],{"class":112},[36,118996,1190],{"class":42},[36,118998,457],{"class":112},[36,119000,1195],{"class":42},[36,119002,119003,119005,119007,119009,119011,119013],{"class":38,"line":53},[36,119004,2782],{"class":42},[36,119006,47],{"class":46},[36,119008,406],{"class":112},[36,119010,1190],{"class":42},[36,119012,457],{"class":112},[36,119014,1212],{"class":42},[19,119016,2795],{},[26,119018,119019],{"className":28,"code":2798,"language":30,"meta":31,"style":31},[33,119020,119021,119037],{"__ignoreMap":31},[36,119022,119023,119025,119027,119029,119031,119033,119035],{"class":38,"line":39},[36,119024,2805],{"class":42},[36,119026,47],{"class":46},[36,119028,1223],{"class":42},[36,119030,457],{"class":112},[36,119032,1228],{"class":42},[36,119034,457],{"class":112},[36,119036,1233],{"class":42},[36,119038,119039,119041],{"class":38,"line":53},[36,119040,2822],{"class":46},[36,119042,1242],{"class":42},[19,119044,2827,119045,2831,119047,2834],{},[33,119046,2830],{},[33,119048,2830],{},[26,119050,119051],{"className":28,"code":2232,"language":30,"meta":31,"style":31},[33,119052,119053],{"__ignoreMap":31},[36,119054,119055,119057,119059,119061,119063,119065,119067,119069,119071,119073,119075,119077,119079,119081,119083,119085,119087],{"class":38,"line":39},[36,119056,1820],{"class":46},[36,119058,1366],{"class":101},[36,119060,1369],{"class":42},[36,119062,1372],{"class":46},[36,119064,1375],{"class":42},[36,119066,1378],{"class":112},[36,119068,1381],{"class":46},[36,119070,1384],{"class":112},[36,119072,673],{"class":46},[36,119074,1384],{"class":112},[36,119076,1391],{"class":42},[36,119078,1394],{"class":112},[36,119080,1381],{"class":46},[36,119082,1384],{"class":112},[36,119084,673],{"class":46},[36,119086,1384],{"class":112},[36,119088,848],{"class":42},[19,119090,2877,119091,2880,119093,2884],{},[33,119092,1415],{},[33,119094,2883],{},[26,119096,119097],{"className":28,"code":2887,"language":30,"meta":31,"style":31},[33,119098,119099],{"__ignoreMap":31},[36,119100,119101,119103,119105,119107,119109],{"class":38,"line":39},[36,119102,2476],{"class":112},[36,119104,1412],{"class":42},[36,119106,1415],{"class":468},[36,119108,47],{"class":46},[36,119110,1420],{"class":42},[19,119112,2904,119113,2908],{},[33,119114,2907],{},[26,119116,119117],{"className":28,"code":2911,"language":30,"meta":31,"style":31},[33,119118,119119],{"__ignoreMap":31},[36,119120,119121,119123,119125,119127,119129],{"class":38,"line":39},[36,119122,2918],{"class":42},[36,119124,457],{"class":112},[36,119126,1431],{"class":42},[36,119128,457],{"class":112},[36,119130,1436],{"class":42},[19,119132,2929],{},[26,119134,119135],{"className":28,"code":2932,"language":30,"meta":31,"style":31},[33,119136,119137],{"__ignoreMap":31},[36,119138,119139,119141,119143,119145,119147,119149,119151,119153,119155,119157,119159,119161,119163,119165,119167,119169,119171],{"class":38,"line":39},[36,119140,457],{"class":112},[36,119142,1449],{"class":42},[36,119144,47],{"class":46},[36,119146,406],{"class":112},[36,119148,1456],{"class":42},[36,119150,469],{"class":468},[36,119152,472],{"class":46},[36,119154,1463],{"class":112},[36,119156,478],{"class":42},[36,119158,481],{"class":468},[36,119160,47],{"class":46},[36,119162,1463],{"class":112},[36,119164,478],{"class":42},[36,119166,1476],{"class":468},[36,119168,47],{"class":46},[36,119170,457],{"class":112},[36,119172,1483],{"class":42},[19,119174,2287,119175,2976,119177,2980,119179,2984],{},[33,119176,2975],{},[33,119178,2979],{},[33,119180,2983],{},[26,119182,119183],{"className":28,"code":2987,"language":30,"meta":31,"style":31},[33,119184,119185],{"__ignoreMap":31},[36,119186,119187,119189,119191,119193],{"class":38,"line":39},[36,119188,457],{"class":112},[36,119190,1491],{"class":42},[36,119192,47],{"class":46},[36,119194,1496],{"class":112},[19,119196,3002],{},[26,119198,119199],{"className":28,"code":3005,"language":30,"meta":31,"style":31},[33,119200,119201,119211],{"__ignoreMap":31},[36,119202,119203,119205,119207,119209],{"class":38,"line":39},[36,119204,457],{"class":112},[36,119206,409],{"class":42},[36,119208,47],{"class":46},[36,119210,1074],{"class":112},[36,119212,119213,119215,119217],{"class":38,"line":53},[36,119214,2822],{"class":46},[36,119216,406],{"class":112},[36,119218,1536],{"class":42},[19,119220,3028],{},[26,119222,119223],{"className":28,"code":2296,"language":30,"meta":31,"style":31},[33,119224,119225],{"__ignoreMap":31},[36,119226,119227,119229,119231],{"class":38,"line":39},[36,119228,1820],{"class":46},[36,119230,1549],{"class":101},[36,119232,1552],{"class":42},[19,119234,3043],{},[26,119236,119237],{"className":28,"code":3046,"language":30,"meta":31,"style":31},[33,119238,119239],{"__ignoreMap":31},[36,119240,119241,119243,119245,119247,119249,119251],{"class":38,"line":39},[36,119242,3053],{"class":42},[36,119244,47],{"class":46},[36,119246,1563],{"class":42},[36,119248,504],{"class":468},[36,119250,47],{"class":46},[36,119252,509],{"class":42},[19,119254,3066,119255,224],{},[33,119256,2830],{},[26,119258,119259],{"className":28,"code":3071,"language":30,"meta":31,"style":31},[33,119260,119261],{"__ignoreMap":31},[36,119262,119263,119265,119267,119269,119271,119273,119275],{"class":38,"line":39},[36,119264,3053],{"class":42},[36,119266,47],{"class":46},[36,119268,1579],{"class":42},[36,119270,457],{"class":112},[36,119272,1584],{"class":42},[36,119274,457],{"class":112},[36,119276,1589],{"class":42},[19,119278,3092],{},[26,119280,119281],{"className":28,"code":3095,"language":30,"meta":31,"style":31},[33,119282,119283],{"__ignoreMap":31},[36,119284,119285,119287,119289,119291],{"class":38,"line":39},[36,119286,457],{"class":112},[36,119288,1602],{"class":42},[36,119290,47],{"class":46},[36,119292,1607],{"class":42},[19,119294,3110],{},[26,119296,119297],{"className":28,"code":3113,"language":30,"meta":31,"style":31},[33,119298,119299,119315],{"__ignoreMap":31},[36,119300,119301,119303,119305,119307,119309,119311,119313],{"class":38,"line":39},[36,119302,3120],{"class":46},[36,119304,1616],{"class":42},[36,119306,1619],{"class":46},[36,119308,1622],{"class":112},[36,119310,495],{"class":42},[36,119312,457],{"class":112},[36,119314,1629],{"class":42},[36,119316,119317,119319,119321,119323,119325],{"class":38,"line":53},[36,119318,3137],{"class":42},[36,119320,457],{"class":112},[36,119322,1431],{"class":42},[36,119324,457],{"class":112},[36,119326,1436],{"class":42},[19,119328,3148,119329,3152,119331,3155,119333,224],{},[33,119330,3151],{},[33,119332,592],{},[33,119334,596],{},[26,119336,119337],{"className":28,"code":3160,"language":30,"meta":31,"style":31},[33,119338,119339],{"__ignoreMap":31},[36,119340,119341,119343,119345,119347],{"class":38,"line":39},[36,119342,457],{"class":112},[36,119344,409],{"class":42},[36,119346,1658],{"class":46},[36,119348,1661],{"class":112},[19,119350,3175],{},[26,119352,119353],{"className":28,"code":3178,"language":30,"meta":31,"style":31},[33,119354,119355,119365],{"__ignoreMap":31},[36,119356,119357,119359,119361,119363],{"class":38,"line":39},[36,119358,2805],{"class":42},[36,119360,47],{"class":46},[36,119362,406],{"class":112},[36,119364,1678],{"class":42},[36,119366,119367,119369,119371,119373],{"class":38,"line":53},[36,119368,3195],{"class":42},[36,119370,47],{"class":46},[36,119372,406],{"class":112},[36,119374,1691],{"class":42},[19,119376,3204],{},[26,119378,119379],{"className":28,"code":3207,"language":30,"meta":31,"style":31},[33,119380,119381],{"__ignoreMap":31},[36,119382,119383,119385,119387,119389,119391,119393],{"class":38,"line":39},[36,119384,1348],{"class":42},[36,119386,47],{"class":46},[36,119388,1341],{"class":112},[36,119390,1738],{"class":42},[36,119392,1308],{"class":46},[36,119394,1743],{"class":42},[19,119396,3226],{},[26,119398,119399],{"className":28,"code":378,"language":30,"meta":31,"style":31},[33,119400,119401,119413],{"__ignoreMap":31},[36,119402,119403,119405,119407,119409,119411],{"class":38,"line":39},[36,119404,385],{"class":42},[36,119406,47],{"class":46},[36,119408,390],{"class":42},[36,119410,393],{"class":46},[36,119412,396],{"class":112},[36,119414,119415,119417,119419,119421,119423,119425,119427],{"class":38,"line":53},[36,119416,401],{"class":42},[36,119418,47],{"class":46},[36,119420,406],{"class":112},[36,119422,409],{"class":42},[36,119424,412],{"class":46},[36,119426,406],{"class":112},[36,119428,417],{"class":42},[19,119430,3261],{},[26,119432,119433],{"className":28,"code":3264,"language":30,"meta":31,"style":31},[33,119434,119435,119447],{"__ignoreMap":31},[36,119436,119437,119439,119441,119443,119445],{"class":38,"line":39},[36,119438,3271],{"class":42},[36,119440,47],{"class":46},[36,119442,859],{"class":42},[36,119444,1793],{"class":105},[36,119446,1796],{"class":42},[36,119448,119449,119451],{"class":38,"line":53},[36,119450,2822],{"class":46},[36,119452,1804],{"class":42},[19,119454,119455,3291],{},[33,119456,3290],{},[26,119458,119459],{"className":28,"code":3294,"language":30,"meta":31,"style":31},[33,119460,119461,119469],{"__ignoreMap":31},[36,119462,119463,119465,119467],{"class":38,"line":39},[36,119464,3301],{"class":42},[36,119466,47],{"class":46},[36,119468,1841],{"class":42},[36,119470,119471,119473,119475,119477,119479,119481,119483],{"class":38,"line":53},[36,119472,43],{"class":42},[36,119474,47],{"class":46},[36,119476,1852],{"class":42},[36,119478,1415],{"class":468},[36,119480,47],{"class":46},[36,119482,1859],{"class":112},[36,119484,922],{"class":42},[19,119486,3324,119487,3328],{},[33,119488,3327],{},[26,119490,119491],{"className":28,"code":3331,"language":30,"meta":31,"style":31},[33,119492,119493],{"__ignoreMap":31},[36,119494,119495,119497,119499],{"class":38,"line":39},[36,119496,3053],{"class":42},[36,119498,47],{"class":46},[36,119500,1933],{"class":42},[19,119502,3344],{},[14,119504,3348],{"id":3347},[19,119506,3351],{},[26,119508,119510],{"className":119509,"code":3355,"language":80,"meta":31},[78],[33,119511,3355],{"__ignoreMap":31},[19,119513,3360],{},[19,119515,3363],{},[26,119517,119518],{"className":28,"code":3331,"language":30,"meta":31,"style":31},[33,119519,119520],{"__ignoreMap":31},[36,119521,119522,119524,119526],{"class":38,"line":39},[36,119523,3053],{"class":42},[36,119525,47],{"class":46},[36,119527,1933],{"class":42},[19,119529,3378],{},[14,119531,3382],{"id":3381},[211,119533,119534,119536,119540,119546,119552,119558,119562],{},[214,119535,3387],{},[214,119537,3390,119538,224],{},[33,119539,3393],{},[214,119541,3396,119542,3400,119544,224],{},[33,119543,3399],{},[33,119545,3403],{},[214,119547,3406,119548,3410,119550,224],{},[33,119549,3409],{},[33,119551,3413],{},[214,119553,3416,119554,3420,119556,3424],{},[33,119555,3419],{},[33,119557,3423],{},[214,119559,3416,119560,3430],{},[33,119561,3429],{},[214,119563,3433,119564,3436,119566,3440],{},[33,119565,3290],{},[33,119567,3439],{},[14,119569,3444],{"id":3443},[318,119571,3448],{"id":3447},[19,119573,3451,119574,3454],{},[33,119575,2311],{},[26,119577,119578],{"className":28,"code":3457,"language":30,"meta":31,"style":31},[33,119579,119580],{"__ignoreMap":31},[36,119581,119582],{"class":38,"line":39},[36,119583,3457],{"class":42},[19,119585,3466],{},[318,119587,119588,3473],{"id":3469},[33,119589,3472],{},[19,119591,3476],{},[26,119593,119594],{"className":28,"code":3479,"language":30,"meta":31,"style":31},[33,119595,119596,119606],{"__ignoreMap":31},[36,119597,119598,119600,119602,119604],{"class":38,"line":39},[36,119599,3486],{"class":112},[36,119601,495],{"class":42},[36,119603,457],{"class":112},[36,119605,3493],{"class":42},[36,119607,119608,119610],{"class":38,"line":53},[36,119609,3486],{"class":112},[36,119611,3500],{"class":42},[19,119613,3503],{},[318,119615,3507],{"id":3506},[19,119617,3510],{},[26,119619,119620],{"className":28,"code":3513,"language":30,"meta":31,"style":31},[33,119621,119622],{"__ignoreMap":31},[36,119623,119624,119626,119628,119630,119632],{"class":38,"line":39},[36,119625,3520],{"class":42},[36,119627,457],{"class":112},[36,119629,1431],{"class":42},[36,119631,457],{"class":112},[36,119633,1436],{"class":42},[318,119635,119636,3534],{"id":3531},[33,119637,294],{},[19,119639,3537],{},[26,119641,119642],{"className":28,"code":3540,"language":30,"meta":31,"style":31},[33,119643,119644,119654,119660],{"__ignoreMap":31},[36,119645,119646,119648,119650,119652],{"class":38,"line":39},[36,119647,2805],{"class":42},[36,119649,47],{"class":46},[36,119651,406],{"class":112},[36,119653,1678],{"class":42},[36,119655,119656,119658],{"class":38,"line":53},[36,119657,3486],{"class":112},[36,119659,3559],{"class":42},[36,119661,119662,119664,119666,119668],{"class":38,"line":196},[36,119663,3486],{"class":112},[36,119665,495],{"class":42},[36,119667,457],{"class":112},[36,119669,3570],{"class":42},[19,119671,3573],{},[26,119673,119675],{"className":119674,"code":3577,"language":80,"meta":31},[78],[33,119676,3577],{"__ignoreMap":31},[318,119678,3583],{"id":3582},[19,119680,3586],{},[26,119682,119683],{"className":28,"code":3071,"language":30,"meta":31,"style":31},[33,119684,119685],{"__ignoreMap":31},[36,119686,119687,119689,119691,119693,119695,119697,119699],{"class":38,"line":39},[36,119688,3053],{"class":42},[36,119690,47],{"class":46},[36,119692,1579],{"class":42},[36,119694,457],{"class":112},[36,119696,1584],{"class":42},[36,119698,457],{"class":112},[36,119700,1589],{"class":42},[19,119702,3609,119703,224],{},[33,119704,3612],{},[318,119706,3616],{"id":3615},[19,119708,3451,119709,324,119711,3623],{},[33,119710,2275],{},[33,119712,2311],{},[26,119714,119715],{"className":28,"code":29,"language":30,"meta":31,"style":31},[33,119716,119717,119725],{"__ignoreMap":31},[36,119718,119719,119721,119723],{"class":38,"line":39},[36,119720,43],{"class":42},[36,119722,47],{"class":46},[36,119724,50],{"class":42},[36,119726,119727,119729,119731],{"class":38,"line":53},[36,119728,56],{"class":42},[36,119730,47],{"class":46},[36,119732,61],{"class":42},[19,119734,3646,119735,224],{},[33,119736,3649],{},[14,119738,3653],{"id":3652},[19,119740,3656],{},[211,119742,119743,119745,119747,119749,119751,119753],{},[214,119744,3661],{},[214,119746,3664],{},[214,119748,3667],{},[214,119750,3670],{},[214,119752,3673],{},[214,119754,3676],{},[19,119756,3679],{},[26,119758,119759],{"className":28,"code":3682,"language":30,"meta":31,"style":31},[33,119760,119761,119769,119785,119789,119805,119813,119821,119831],{"__ignoreMap":31},[36,119762,119763,119765,119767],{"class":38,"line":39},[36,119764,3301],{"class":42},[36,119766,47],{"class":46},[36,119768,1841],{"class":42},[36,119770,119771,119773,119775,119777,119779,119781,119783],{"class":38,"line":53},[36,119772,43],{"class":42},[36,119774,47],{"class":46},[36,119776,1852],{"class":42},[36,119778,1415],{"class":468},[36,119780,47],{"class":46},[36,119782,1859],{"class":112},[36,119784,922],{"class":42},[36,119786,119787],{"class":38,"line":196},[36,119788,659],{"emptyLinePlaceholder":658},[36,119790,119791,119793,119795,119797,119799,119801,119803],{"class":38,"line":642},[36,119792,3120],{"class":46},[36,119794,1616],{"class":42},[36,119796,1619],{"class":46},[36,119798,1622],{"class":112},[36,119800,495],{"class":42},[36,119802,3727],{"class":112},[36,119804,848],{"class":42},[36,119806,119807,119809,119811],{"class":38,"line":655},[36,119808,3734],{"class":42},[36,119810,47],{"class":46},[36,119812,1933],{"class":42},[36,119814,119815,119817,119819],{"class":38,"line":662},[36,119816,3743],{"class":42},[36,119818,47],{"class":46},[36,119820,61],{"class":42},[36,119822,119823,119825,119827,119829],{"class":38,"line":667},[36,119824,3752],{"class":46},[36,119826,2013],{"class":42},[36,119828,2016],{"class":46},[36,119830,2019],{"class":42},[36,119832,119833,119835,119837],{"class":38,"line":679},[36,119834,3763],{"class":42},[36,119836,47],{"class":46},[36,119838,50],{"class":42},[14,119840,3771],{"id":3770},[19,119842,3774],{},[26,119844,119846],{"className":119845,"code":3778,"language":80,"meta":31},[78],[33,119847,3778],{"__ignoreMap":31},[19,119849,3783],{},[3785,119851,3787],{},{"title":31,"searchDepth":53,"depth":53,"links":119853},[119854,119855,119856,119861,119865,119866,119867,119875,119876],{"id":16,"depth":53,"text":17},{"id":85,"depth":53,"text":86},{"id":242,"depth":53,"text":243,"children":119857},[119858,119859,119860],{"id":320,"depth":196,"text":3795},{"id":431,"depth":196,"text":3797},{"id":568,"depth":196,"text":569},{"id":600,"depth":53,"text":601,"children":119862},[119863,119864],{"id":2117,"depth":196,"text":2117},{"id":2338,"depth":196,"text":2338},{"id":3347,"depth":53,"text":3348},{"id":3381,"depth":53,"text":3382},{"id":3443,"depth":53,"text":3444,"children":119868},[119869,119870,119871,119872,119873,119874],{"id":3447,"depth":196,"text":3448},{"id":3469,"depth":196,"text":3809},{"id":3506,"depth":196,"text":3507},{"id":3531,"depth":196,"text":3812},{"id":3582,"depth":196,"text":3583},{"id":3615,"depth":196,"text":3616},{"id":3652,"depth":53,"text":3653},{"id":3770,"depth":53,"text":3771},{},{"title":5,"description":31},{"id":119880,"title":119881,"body":119882,"description":120305,"extension":3817,"meta":120306,"navigation":658,"path":120307,"seo":120308,"stem":120309,"__hash__":120310},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":119883,"toc":120295},[119884,119888,119891,119894,119914,119920,119926,119936,119939,119942,119962,119965,119969,119972,119978,119981,119995,119998,120001,120075,120078,120084,120087,120110,120113,120163,120166,120172,120175,120178,120181,120200,120203,120209,120212,120215,120218,120238,120241,120244,120247,120292],[10,119885,119887],{"id":119886},"mujoco-学习","MuJoCo 学习",[19,119889,119890],{},"初版",[19,119892,119893],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[211,119895,119896,119899,119902,119911],{},[214,119897,119898],{},"MuJoCo 模型文件在描述什么。",[214,119900,119901],{},"Python 代码怎样读取和推进仿真。",[214,119903,119904,4087,119906,4087,119908,119910],{},[33,119905,107521],{},[33,119907,107851],{},[33,119909,107854],{}," 这些数组为什么重要。",[214,119912,119913],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,119915,119916,119917,119919],{},"默认环境为 Fedora 44、Python >= 3.10、",[33,119918,104560],{}," 官方 Python bindings。",[19,119921,119922,119923,119925],{},"注意：本文禁止使用 ",[33,119924,104546],{},"。所有示例均使用：",[26,119927,119928],{"className":28,"code":105090,"language":30,"meta":31,"style":31},[33,119929,119930],{"__ignoreMap":31},[36,119931,119932,119934],{"class":38,"line":39},[36,119933,611],{"class":46},[36,119935,627],{"class":42},[14,119937,119938],{"id":119938},"适合谁阅读",[19,119940,119941],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[211,119943,119944,119947,119950,119953],{},[214,119945,119946],{},"没学过 MuJoCo，只会一点 Python。",[214,119948,119949],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[214,119951,119952],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[214,119954,119955,119956,119958,119959,119961],{},"以前接触过 ",[33,119957,104546],{},"，现在想迁移到官方 ",[33,119960,104554],{}," Python bindings。",[19,119963,119964],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,119966,119968],{"id":119967},"mujoco-到底是什么","MuJoCo 到底是什么",[19,119970,119971],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[26,119973,119976],{"className":119974,"code":119975,"language":80,"meta":31},[78],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[33,119977,119975],{"__ignoreMap":31},[19,119979,119980],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[211,119982,119983,119986,119989,119992],{},[214,119984,119985],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[214,119987,119988],{},"快速测试控制算法，不必一开始就上真实机器人。",[214,119990,119991],{},"生成强化学习环境。",[214,119993,119994],{},"采集状态、动作、图像、奖励等训练数据。",[14,119996,119997],{"id":119997},"学习前的心智模型",[19,119999,120000],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[248,120002,120003,120015],{},[251,120004,120005],{},[254,120006,120007,120010,120013],{},[257,120008,120009],{"align":259},"部分",[257,120011,120012],{"align":259},"负责什么",[257,120014,346],{"align":259},[265,120016,120017,120028,120040,120052,120064],{},[254,120018,120019,120022,120025],{},[270,120020,120021],{"align":259},"MJCF XML",[270,120023,120024],{"align":259},"定义世界和机器人结构",[270,120026,120027],{"align":259},"地面、盒子、关节、电机、摄像头",[254,120029,120030,120034,120037],{},[270,120031,120032],{"align":259},[33,120033,104254],{},[270,120035,120036],{"align":259},"编译后的静态模型",[270,120038,120039],{"align":259},"有几个关节、有几个电机、时间步长是多少",[254,120041,120042,120046,120049],{},[270,120043,120044],{"align":259},[33,120045,104264],{},[270,120047,120048],{"align":259},"运行中的动态状态",[270,120050,120051],{"align":259},"当前时间、位置、速度、电机输入",[254,120053,120054,120058,120061],{},[270,120055,120056],{"align":259},[33,120057,596],{},[270,120059,120060],{"align":259},"推进一步物理仿真",[270,120062,120063],{"align":259},"根据重力、力、碰撞更新状态",[254,120065,120066,120069,120072],{},[270,120067,120068],{"align":259},"Viewer \u002F Renderer",[270,120070,120071],{"align":259},"把仿真显示出来",[270,120073,120074],{"align":259},"打开窗口或保存图片",[19,120076,120077],{},"一句话总结：",[26,120079,120082],{"className":120080,"code":120081,"language":80,"meta":31},[78],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[33,120083,120081],{"__ignoreMap":31},[19,120085,120086],{},"参考来源：",[4875,120088,120089,120096,120103],{},[214,120090,120091,120092],{},"MuJoCo Python 官方文档：",[4113,120093,120094],{"href":120094,"rel":120095},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[27481],[214,120097,120098,120099],{},"MuJoCo XML Reference：",[4113,120100,120101],{"href":120101,"rel":120102},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[27481],[214,120104,120105,120106],{},"MuJoCo Overview：",[4113,120107,120108],{"href":120108,"rel":120109},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[27481],[14,120111,120112],{"id":120112},"章节目录",[211,120114,120115,120121,120127,120133,120139,120145,120151,120157],{},[214,120116,120117],{},[4113,120118,120120],{"href":120119},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[214,120122,120123],{},[4113,120124,120126],{"href":120125},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[214,120128,120129],{},[4113,120130,120132],{"href":120131},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[214,120134,120135],{},[4113,120136,120138],{"href":120137},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[214,120140,120141],{},[4113,120142,120144],{"href":120143},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[214,120146,120147],{},[4113,120148,120150],{"href":120149},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[214,120152,120153],{},[4113,120154,120156],{"href":120155},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[214,120158,120159],{},[4113,120160,120162],{"href":120161},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,120164,120165],{"id":120165},"推荐学习路线",[26,120167,120170],{"className":120168,"code":120169,"language":80,"meta":31},[78],"环境安装\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",[33,120171,120169],{"__ignoreMap":31},[19,120173,120174],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,120176,120177],{"id":120177},"建议的目录结构",[19,120179,120180],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[26,120182,120184],{"className":92,"code":120183,"language":94,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[33,120185,120186,120194],{"__ignoreMap":31},[36,120187,120188,120190,120192],{"class":38,"line":39},[36,120189,104793],{"class":101},[36,120191,32825],{"class":112},[36,120193,104798],{"class":105},[36,120195,120196,120198],{"class":38,"line":53},[36,120197,104803],{"class":112},[36,120199,104798],{"class":105},[19,120201,120202],{},"每一章的代码都单独保存：",[26,120204,120207],{"className":120205,"code":120206,"language":80,"meta":31},[78],"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",[33,120208,120206],{"__ignoreMap":31},[19,120210,120211],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,120213,120214],{"id":120214},"学习方法",[19,120216,120217],{},"每章建议按这个顺序操作：",[211,120219,120220,120223,120226,120229,120232,120235],{},[214,120221,120222],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[214,120224,120225],{},"复制最小可运行代码，保存成指定文件。",[214,120227,120228],{},"运行代码，确认没有报错。",[214,120230,120231],{},"对照“运行结果说明”理解输出。",[214,120233,120234],{},"做“验证步骤”，主动改一两个参数。",[214,120236,120237],{},"遇到报错先看“常见错误与解决方案”。",[19,120239,120240],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,120242,120243],{"id":120243},"全局排错顺序",[19,120245,120246],{},"遇到问题时，按下面顺序查：",[211,120248,120249,120255,120261,120266,120269,120272,120279,120289],{},[214,120250,120251,120252],{},"Python 环境是否激活：",[33,120253,120254],{},"which python",[214,120256,120257,120258],{},"MuJoCo 是否能导入：",[33,120259,120260],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[214,120262,120263,120264],{},"是否误装了 ",[33,120265,104546],{},[214,120267,120268],{},"XML 标签是否闭合、属性是否拼写正确",[214,120270,120271],{},"actuator 引用的 joint 名字是否存在",[214,120273,120274,120276,120277],{},[33,120275,3612],{}," 的长度是否等于 ",[33,120278,105668],{},[214,120280,3406,120281,86093,120283,120285,120286],{},[33,120282,107521],{},[33,120284,107851],{}," 后是否调用了 ",[33,120287,120288],{},"mujoco.mj_forward",[214,120290,120291],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[3785,120293,120294],{},"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":31,"searchDepth":53,"depth":53,"links":120296},[120297,120298,120299,120300,120301,120302,120303,120304],{"id":119938,"depth":53,"text":119938},{"id":119967,"depth":53,"text":119968},{"id":119997,"depth":53,"text":119997},{"id":120112,"depth":53,"text":120112},{"id":120165,"depth":53,"text":120165},{"id":120177,"depth":53,"text":120177},{"id":120214,"depth":53,"text":120214},{"id":120243,"depth":53,"text":120243},"仿真搭建。",{"category":27000},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":119881,"description":120305},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":120312,"title":120313,"body":120314,"description":26998,"extension":3817,"meta":120769,"navigation":658,"path":120770,"seo":120771,"stem":120772,"__hash__":120773},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":120315,"toc":120767},[120316,120319,120322,120328,120764],[10,120317,120313],{"id":120318},"_1-最常用的基本操作更新",[19,120320,120321],{},"装linux系统教程：",[19,120323,120324],{},[4113,120325,120326],{"href":120326,"rel":120327},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[27481],[26,120329,120333],{"className":120330,"code":120331,"language":120332,"meta":31,"style":31},"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",[33,120334,120335,120340,120345,120354,120359,120368,120373,120393,120398,120409,120414,120423,120428,120456,120461,120480,120485,120504,120508,120513,120529,120533,120538,120568,120572,120577,120593,120597,120602,120617,120621,120626,120642,120646,120651,120663,120675,120679,120684,120701,120705,120710,120728,120732,120737,120746,120750,120755],{"__ignoreMap":31},[36,120336,120337],{"class":38,"line":39},[36,120338,120339],{"class":3943},"#更新相关的知识\n",[36,120341,120342],{"class":38,"line":53},[36,120343,120344],{"class":3943},"# 更新软件包列表（从服务器获取最新软件信息）\n",[36,120346,120347,120349,120352],{"class":38,"line":196},[36,120348,102],{"class":101},[36,120350,120351],{"class":105}," apt",[36,120353,29855],{"class":105},[36,120355,120356],{"class":38,"line":642},[36,120357,120358],{"class":3943},"# 升级所有可更新的软件包（不删除旧包）\n",[36,120360,120361,120363,120365],{"class":38,"line":655},[36,120362,102],{"class":101},[36,120364,120351],{"class":105},[36,120366,120367],{"class":105}," upgrade\n",[36,120369,120370],{"class":38,"line":662},[36,120371,120372],{"class":3943},"#更新和升级软件包\n",[36,120374,120375,120377,120379,120382,120384,120386,120388,120391],{"class":38,"line":667},[36,120376,102],{"class":101},[36,120378,120351],{"class":105},[36,120380,120381],{"class":105}," update",[36,120383,29803],{"class":42},[36,120385,102],{"class":101},[36,120387,120351],{"class":105},[36,120389,120390],{"class":105}," upgrade",[36,120392,183],{"class":112},[36,120394,120395],{"class":38,"line":679},[36,120396,120397],{"class":3943},"#列出可更新的软件包及版本信息\n",[36,120399,120400,120403,120406],{"class":38,"line":685},[36,120401,120402],{"class":101},"apt",[36,120404,120405],{"class":105}," list",[36,120407,120408],{"class":112}," --upgradable\n",[36,120410,120411],{"class":38,"line":691},[36,120412,120413],{"class":3943},"#彻底升级（处理依赖关系，可能删除旧包）\n",[36,120415,120416,120418,120420],{"class":38,"line":696},[36,120417,102],{"class":101},[36,120419,120351],{"class":105},[36,120421,120422],{"class":105}," full-upgrade\n",[36,120424,120425],{"class":38,"line":702},[36,120426,120427],{"class":3943},"#设置指定版本\n",[36,120429,120430,120432,120434,120436,120438,120441,120443,120445,120447,120449,120452,120454],{"class":38,"line":708},[36,120431,102],{"class":101},[36,120433,120351],{"class":105},[36,120435,109],{"class":105},[36,120437,32512],{"class":46},[36,120439,120440],{"class":105},"package_nam",[36,120442,3958],{"class":42},[36,120444,4829],{"class":46},[36,120446,47],{"class":105},[36,120448,393],{"class":46},[36,120450,120451],{"class":105},"version_numbe",[36,120453,4541],{"class":42},[36,120455,54864],{"class":46},[36,120457,120458],{"class":38,"line":713},[36,120459,120460],{"class":3943},"#只安装软件包不升级\n",[36,120462,120463,120465,120467,120469,120471,120473,120475,120477],{"class":38,"line":719},[36,120464,102],{"class":101},[36,120466,120351],{"class":105},[36,120468,109],{"class":105},[36,120470,32512],{"class":46},[36,120472,120440],{"class":105},[36,120474,3958],{"class":42},[36,120476,4829],{"class":46},[36,120478,120479],{"class":112}," --no-upgrade\n",[36,120481,120482],{"class":38,"line":725},[36,120483,120484],{"class":3943},"#只升级，不存在就不安装\n",[36,120486,120487,120489,120491,120493,120495,120497,120499,120501],{"class":38,"line":731},[36,120488,102],{"class":101},[36,120490,120351],{"class":105},[36,120492,109],{"class":105},[36,120494,32512],{"class":46},[36,120496,120440],{"class":105},[36,120498,3958],{"class":42},[36,120500,4829],{"class":46},[36,120502,120503],{"class":112}," --only-upgrade\n",[36,120505,120506],{"class":38,"line":736},[36,120507,659],{"emptyLinePlaceholder":658},[36,120509,120510],{"class":38,"line":742},[36,120511,120512],{"class":3943},"#安装指定的软件命令\n",[36,120514,120515,120517,120519,120521,120523,120525,120527],{"class":38,"line":748},[36,120516,102],{"class":101},[36,120518,120351],{"class":105},[36,120520,109],{"class":105},[36,120522,32512],{"class":46},[36,120524,120440],{"class":105},[36,120526,3958],{"class":42},[36,120528,54864],{"class":46},[36,120530,120531],{"class":38,"line":754},[36,120532,659],{"emptyLinePlaceholder":658},[36,120534,120535],{"class":38,"line":760},[36,120536,120537],{"class":3943},"#安装多个软件包\n",[36,120539,120540,120542,120544,120546,120548,120551,120554,120556,120558,120561,120563,120565],{"class":38,"line":766},[36,120541,102],{"class":101},[36,120543,120351],{"class":105},[36,120545,109],{"class":105},[36,120547,32512],{"class":46},[36,120549,120550],{"class":105},"package_",[36,120552,120553],{"class":46},"1>",[36,120555,32512],{"class":46},[36,120557,120550],{"class":105},[36,120559,120560],{"class":46},"2>",[36,120562,32512],{"class":46},[36,120564,120550],{"class":105},[36,120566,120567],{"class":46},"3>\n",[36,120569,120570],{"class":38,"line":772},[36,120571,659],{"emptyLinePlaceholder":658},[36,120573,120574],{"class":38,"line":778},[36,120575,120576],{"class":3943},"#更新指定的软件命令\n",[36,120578,120579,120581,120583,120585,120587,120589,120591],{"class":38,"line":783},[36,120580,102],{"class":101},[36,120582,120351],{"class":105},[36,120584,120381],{"class":105},[36,120586,32512],{"class":46},[36,120588,120440],{"class":105},[36,120590,3958],{"class":42},[36,120592,54864],{"class":46},[36,120594,120595],{"class":38,"line":789},[36,120596,659],{"emptyLinePlaceholder":658},[36,120598,120599],{"class":38,"line":795},[36,120600,120601],{"class":3943},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[36,120603,120604,120606,120609,120611,120613,120615],{"class":38,"line":801},[36,120605,120402],{"class":101},[36,120607,120608],{"class":105}," show",[36,120610,32512],{"class":46},[36,120612,120440],{"class":105},[36,120614,3958],{"class":42},[36,120616,54864],{"class":46},[36,120618,120619],{"class":38,"line":807},[36,120620,659],{"emptyLinePlaceholder":658},[36,120622,120623],{"class":38,"line":813},[36,120624,120625],{"class":3943},"#删除软件包命令\n",[36,120627,120628,120630,120632,120634,120636,120638,120640],{"class":38,"line":819},[36,120629,102],{"class":101},[36,120631,120351],{"class":105},[36,120633,29692],{"class":105},[36,120635,32512],{"class":46},[36,120637,120440],{"class":105},[36,120639,3958],{"class":42},[36,120641,54864],{"class":46},[36,120643,120644],{"class":38,"line":824},[36,120645,659],{"emptyLinePlaceholder":658},[36,120647,120648],{"class":38,"line":829},[36,120649,120650],{"class":3943},"# 清理旧版本和缓存（释放磁盘空间）\n",[36,120652,120653,120655,120657,120660],{"class":38,"line":851},[36,120654,102],{"class":101},[36,120656,120351],{"class":105},[36,120658,120659],{"class":105}," autoremove",[36,120661,120662],{"class":3943},"  # 删除不再需要的依赖和库文件\n",[36,120664,120665,120667,120669,120672],{"class":38,"line":868},[36,120666,102],{"class":101},[36,120668,120351],{"class":105},[36,120670,120671],{"class":105}," clean",[36,120673,120674],{"class":3943},"       # 清理下载的缓存包\n",[36,120676,120677],{"class":38,"line":873},[36,120678,659],{"emptyLinePlaceholder":658},[36,120680,120681],{"class":38,"line":891},[36,120682,120683],{"class":3943},"#移除软件包及配置文件\n",[36,120685,120686,120688,120690,120693,120695,120697,120699],{"class":38,"line":906},[36,120687,102],{"class":101},[36,120689,120351],{"class":105},[36,120691,120692],{"class":105}," purge",[36,120694,32512],{"class":46},[36,120696,120440],{"class":105},[36,120698,3958],{"class":42},[36,120700,54864],{"class":46},[36,120702,120703],{"class":38,"line":925},[36,120704,659],{"emptyLinePlaceholder":658},[36,120706,120707],{"class":38,"line":943},[36,120708,120709],{"class":3943},"#查找软件包命令\n",[36,120711,120712,120714,120716,120719,120721,120724,120726],{"class":38,"line":948},[36,120713,102],{"class":101},[36,120715,120351],{"class":105},[36,120717,120718],{"class":105}," search",[36,120720,32512],{"class":46},[36,120722,120723],{"class":105},"keywor",[36,120725,4189],{"class":42},[36,120727,54864],{"class":46},[36,120729,120730],{"class":38,"line":971},[36,120731,659],{"emptyLinePlaceholder":658},[36,120733,120734],{"class":38,"line":992},[36,120735,120736],{"class":3943},"#列出所有已安装的包\n",[36,120738,120739,120741,120743],{"class":38,"line":1020},[36,120740,120402],{"class":101},[36,120742,120405],{"class":105},[36,120744,120745],{"class":112}," --installed\n",[36,120747,120748],{"class":38,"line":1036},[36,120749,659],{"emptyLinePlaceholder":658},[36,120751,120752],{"class":38,"line":1041},[36,120753,120754],{"class":3943},"#列出所有已安装的包的版本信息\n",[36,120756,120757,120759,120761],{"class":38,"line":1052},[36,120758,120402],{"class":101},[36,120760,120405],{"class":105},[36,120762,120763],{"class":112}," --all-versions\n",[3785,120765,120766],{},"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":31,"searchDepth":53,"depth":53,"links":120768},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":120313,"description":26998},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":120775,"title":120776,"body":120777,"description":26998,"extension":3817,"meta":121518,"navigation":658,"path":121519,"seo":121520,"stem":121521,"__hash__":121522},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":120778,"toc":121505},[120779,120782,120786,120789,120795,120799,120803,120809,120814,120819,120824,120829,120834,120837,120840,120843,120846,120850,120853,120858,120861,120866,120869,120874,120881,120884,120887,120890,120893,120896,120907,120911,120915,120920,120925,120929,120934,120938,120943,120947,120951,120956,120959,121004,121009,121013,121017,121022,121028,121033,121043,121048,121058,121063,121068,121095,121099,121102,121107,121110,121135,121139,121144,121147,121152,121157,121177,121182,121185,121200,121204,121257,121260,121265,121269,121272,121287,121290,121293,121298,121302,121306,121309,121313,121317,121320,121325,121330,121334,121341,121349,121352,121359,121364,121369,121372,121377,121384,121389,121396,121400,121402,121407,121411,121414,121417,121422,121425,121430,121433,121438,121443,121448,121452,121457,121461,121502],[10,120780,120776],{"id":120781},"_2-linux装机教程",[14,120783,120785],{"id":120784},"_21-实体机","2.1 实体机",[19,120787,120788],{},"使用清华源：（Ubuntu24.04）",[19,120790,120791],{},[4113,120792,120793],{"href":120793,"rel":120794},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[27481],[14,120796,120798],{"id":120797},"_22-普通虚拟机","2.2 普通虚拟机",[318,120800,120802],{"id":120801},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,120804,120805],{},[4113,120806,120807],{"href":120807,"rel":120808},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[27481],[19,120810,120811],{},[5198,120812],{"alt":31,"src":120813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,120815,120816],{},[5198,120817],{"alt":31,"src":120818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,120820,120821],{},[5198,120822],{"alt":31,"src":120823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,120825,120826],{},[5198,120827],{"alt":31,"src":120828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,120830,120831],{},[5198,120832],{"alt":31,"src":120833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,120835,120836],{},"内存4G（4096MB）；",[19,120838,120839],{},"CPU给4个核；",[19,120841,120842],{},"硬盘动态分配60G；",[19,120844,120845],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[318,120847,120849],{"id":120848},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,120851,120852],{},"按照1.1的步骤下载Ubuntu",[19,120854,120855],{},[5198,120856],{"alt":31,"src":120857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,120859,120860],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,120862,120863],{},[5198,120864],{"alt":31,"src":120865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,120867,120868],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,120870,120871],{},[5198,120872],{"alt":31,"src":120873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,120875,120876,120877,120880],{},"选择“正常安装”(找不到都用Alt+F7)， ",[4027,120878,120879],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,120882,120883],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,120885,120886],{},"将改动写入磁盘吗 继续",[19,120888,120889],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,120891,120892],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,120894,120895],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,120897,120898,120899,120902,120903,120906],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[4027,120900,120901],{},"除了"," 选不发送系统信息与不升级之外， ",[4027,120904,120905],{},"其它"," 都跳过或前进）",[318,120908,120910],{"id":120909},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[25619,120912,120914],{"id":120913},"_2231-全屏","2.2.3.1 全屏",[19,120916,120917],{},[5198,120918],{"alt":31,"src":120919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,120921,120922],{},[5198,120923],{"alt":31,"src":120924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[25619,120926,120928],{"id":120927},"_2232-文件交换","2.2.3.2 文件交换",[19,120930,120931],{},[5198,120932],{"alt":31,"src":120933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[25619,120935,120937],{"id":120936},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,120939,120940],{},[5198,120941],{"alt":31,"src":120942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,120944,120946],{"id":120945},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[318,120948,120950],{"id":120949},"_231-简介与优缺点","2.3.1 简介与优缺点",[211,120952,120953],{},[214,120954,120955],{},"什么情况下推荐？",[19,120957,120958],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[211,120960,120961],{"start":53},[214,120962,120963,120964],{},"优缺点：",[211,120965,120966,120996],{},[214,120967,120968,120969],{},"优点：",[211,120970,120971,120974,120981,120984,120987,120990,120993],{},[214,120972,120973],{},"WSL2是最好的Linux发行版;(bushi)",[214,120975,120976,120977,120980],{},"性能损耗极低。且比在Windows上跑深度性能 ",[4027,120978,120979],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[214,120982,120983],{},"非常方便调用USB设备，可以USB直通;",[214,120985,120986],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[214,120988,120989],{},"非常方便Win与WSL2互相传文件等协同操作;",[214,120991,120992],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[214,120994,120995],{},"非常方便使用Windows的VScode远程开发;",[214,120997,120998,120999],{},"缺点：",[211,121000,121001],{},[214,121002,121003],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,121005,121006],{},[5198,121007],{"alt":31,"src":121008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[318,121010,121012],{"id":121011},"_232-安装教程","2.3.2 安装教程",[25619,121014,121016],{"id":121015},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[211,121018,121019],{},[214,121020,121021],{},"方法一(图形界面)",[19,121023,121024,121025,28234],{},"用Win+R输入",[33,121026,121027],{},"appwiz.cpl",[19,121029,121030],{},[5198,121031],{"alt":31,"src":121032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,121034,121035,121036,121039,121040,30084],{},"点击OK进入 ",[4027,121037,121038],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[4027,121041,121042],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,121044,121045],{},[5198,121046],{"alt":31,"src":121047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,121049,121050,121051,324,121054,121057],{},"选择 ",[4027,121052,121053],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[4027,121055,121056],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,121059,121060],{},[5198,121061],{"alt":31,"src":121062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[211,121064,121065],{"start":53},[214,121066,121067],{},"方法二(命令行)",[26,121069,121073],{"className":121070,"code":121071,"language":121072,"meta":31,"style":31},"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",[33,121074,121075,121080,121085,121090],{"__ignoreMap":31},[36,121076,121077],{"class":38,"line":39},[36,121078,121079],{},"# 开启 Linux 子系统\n",[36,121081,121082],{"class":38,"line":53},[36,121083,121084],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[36,121086,121087],{"class":38,"line":196},[36,121088,121089],{},"# 开启虚拟机平台\n",[36,121091,121092],{"class":38,"line":642},[36,121093,121094],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[25619,121096,121098],{"id":121097},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,121100,121101],{},"用管理员权限打开powershell",[19,121103,121104],{},[5198,121105],{"alt":31,"src":121106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,121108,121109],{},"升级WSL并设置默认版本为WSL2",[26,121111,121113],{"className":121070,"code":121112,"language":121072,"meta":31,"style":31},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[33,121114,121115,121120,121125,121130],{"__ignoreMap":31},[36,121116,121117],{"class":38,"line":39},[36,121118,121119],{},"# 更新 wsl\n",[36,121121,121122],{"class":38,"line":53},[36,121123,121124],{},"wsl --update\n",[36,121126,121127],{"class":38,"line":196},[36,121128,121129],{},"# 将 wsl 版本设置为 wsl2\n",[36,121131,121132],{"class":38,"line":642},[36,121133,121134],{},"wsl --set-default-version 2\n",[25619,121136,121138],{"id":121137},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[211,121140,121141],{},[214,121142,121143],{},"方式一(商店下载)",[19,121145,121146],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,121148,121149],{},[5198,121150],{"alt":31,"src":121151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[211,121153,121154],{"start":53},[214,121155,121156],{},"方式二(命令行安装)",[26,121158,121160],{"className":121070,"code":121159,"language":121072,"meta":31,"style":31},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[33,121161,121162,121167,121172],{"__ignoreMap":31},[36,121163,121164],{"class":38,"line":39},[36,121165,121166],{},"# 列出可安装的 Linux 版本\n",[36,121168,121169],{"class":38,"line":53},[36,121170,121171],{},"#（需要科学手段）\n",[36,121173,121174],{"class":38,"line":196},[36,121175,121176],{},"wsl --list --online\n",[19,121178,121179],{},[5198,121180],{"alt":31,"src":121181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,121183,121184],{},"选择对应发行版并安装",[26,121186,121188],{"className":121070,"code":121187,"language":121072,"meta":31,"style":31},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[33,121189,121190,121195],{"__ignoreMap":31},[36,121191,121192],{"class":38,"line":39},[36,121193,121194],{},"# Ubuntu安装完毕后需要重启系统\n",[36,121196,121197],{"class":38,"line":53},[36,121198,121199],{},"wsl --install -d Ubuntu-24.04\n",[25619,121201,121203],{"id":121202},"_2324-查看系统状态","2.3.2.4 查看系统状态",[26,121205,121207],{"className":121070,"code":121206,"language":121072,"meta":31,"style":31},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[33,121208,121209,121214,121219,121224,121229,121233,121237,121242,121247,121252],{"__ignoreMap":31},[36,121210,121211],{"class":38,"line":39},[36,121212,121213],{},"# 查看 wsl\n",[36,121215,121216],{"class":38,"line":53},[36,121217,121218],{},"wsl -l\n",[36,121220,121221],{"class":38,"line":196},[36,121222,121223],{},"# 查看 wsl 运行版本或模式\n",[36,121225,121226],{"class":38,"line":642},[36,121227,121228],{},"wsl -l -v\n",[36,121230,121231],{"class":38,"line":655},[36,121232,659],{"emptyLinePlaceholder":658},[36,121234,121235],{"class":38,"line":662},[36,121236,659],{"emptyLinePlaceholder":658},[36,121238,121239],{"class":38,"line":667},[36,121240,121241],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[36,121243,121244],{"class":38,"line":679},[36,121245,121246],{},"wsl --set-version \u003Cdistro> 2\n",[36,121248,121249],{"class":38,"line":685},[36,121250,121251],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[36,121253,121254],{"class":38,"line":691},[36,121255,121256],{},"wsl --unregister \u003Cdistro>\n",[19,121258,121259],{},"输出Version为2即正常",[19,121261,121262],{},[5198,121263],{"alt":31,"src":121264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[25619,121266,121268],{"id":121267},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,121270,121271],{},"直接在Powershell里输入wsl命令进入子系统",[26,121273,121275],{"className":121070,"code":121274,"language":121072,"meta":31,"style":31},"# 进入子系统\nwsl\n",[33,121276,121277,121282],{"__ignoreMap":31},[36,121278,121279],{"class":38,"line":39},[36,121280,121281],{},"# 进入子系统\n",[36,121283,121284],{"class":38,"line":53},[36,121285,121286],{},"wsl\n",[19,121288,121289],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,121291,121292],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,121294,121295],{},[5198,121296],{"alt":31,"src":121297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[318,121299,121301],{"id":121300},"_233-配置各种环境","2.3.3 配置各种环境",[25619,121303,121305],{"id":121304},"_2331-换源","2.3.3.1 换源",[19,121307,121308],{},"(同实体机LINUX，往下找教程)",[25619,121310,121312],{"id":121311},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[26531,121314,121316],{"id":121315},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,121318,121319],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,121321,121322],{},[5198,121323],{"alt":31,"src":121324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,121326,121327],{},[5198,121328],{"alt":31,"src":121329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[26531,121331,121333],{"id":121332},"_23322-cuda","2.3.3.2.2 CUDA",[19,121335,121336,121337],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[4113,121338,121339],{"href":121339,"rel":121340},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[27481],[19,121342,121343,121346],{},[5198,121344],{"alt":31,"src":121345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[5198,121347],{"alt":31,"src":121348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,121350,121351],{},"在下方的网站，选择合适的版本。",[19,121353,121354,121355],{},"WSL2 专属 CUDA 指南：",[4113,121356,121357],{"href":121357,"rel":121358},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[27481],[19,121360,121361],{},[4027,121362,121363],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,121365,121366],{},[5198,121367],{"alt":31,"src":121368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,121370,121371],{},"挨行敲一遍",[19,121373,121374],{},[5198,121375],{"alt":31,"src":121376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,121378,121379,121380,121383],{},"敲完后，输入",[33,121381,121382],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,121385,121386],{},[5198,121387],{"alt":31,"src":121388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,121390,121391,121392,121395],{},"（请详看下方教程的",[4027,121393,121394],{},"安装CUDA的配置环境来看","如何配置环境）",[26531,121397,121399],{"id":121398},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,121401,121308],{},[19,121403,121404],{},[5198,121405],{"alt":31,"src":121406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[25619,121408,121410],{"id":121409},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,121412,121413],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,121415,121416],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,121418,121419],{},[5198,121420],{"alt":31,"src":121421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,121423,121424],{},"连接WSL2",[19,121426,121427],{},[5198,121428],{"alt":31,"src":121429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,121431,121432],{},"远程开发成功。",[19,121434,121435],{},[5198,121436],{"alt":31,"src":121437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,121439,121440],{},[5198,121441],{"alt":31,"src":121442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,121444,121445],{},[5198,121446],{"alt":31,"src":121447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[25619,121449,121451],{"id":121450},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,121453,121454],{},[5198,121455],{"alt":31,"src":121456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[25619,121458,121460],{"id":121459},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[26,121462,121464],{"className":120330,"code":121463,"language":120332,"meta":31,"style":31},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[33,121465,121466,121474,121482,121493,121497],{"__ignoreMap":31},[36,121467,121468,121470,121472],{"class":38,"line":39},[36,121469,102],{"class":101},[36,121471,120351],{"class":105},[36,121473,29855],{"class":105},[36,121475,121476,121478,121480],{"class":38,"line":53},[36,121477,102],{"class":101},[36,121479,120351],{"class":105},[36,121481,120367],{"class":105},[36,121483,121484,121486,121488,121490],{"class":38,"line":196},[36,121485,102],{"class":101},[36,121487,120351],{"class":105},[36,121489,109],{"class":105},[36,121491,121492],{"class":105}," mesa-utils\n",[36,121494,121495],{"class":38,"line":642},[36,121496,659],{"emptyLinePlaceholder":658},[36,121498,121499],{"class":38,"line":655},[36,121500,121501],{"class":3943},"#然后重启wsl2即可\n",[3785,121503,121504],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":31,"searchDepth":53,"depth":53,"links":121506},[121507,121508,121513],{"id":120784,"depth":53,"text":120785},{"id":120797,"depth":53,"text":120798,"children":121509},[121510,121511,121512],{"id":120801,"depth":196,"text":120802},{"id":120848,"depth":196,"text":120849},{"id":120909,"depth":196,"text":120910},{"id":120945,"depth":53,"text":120946,"children":121514},[121515,121516,121517],{"id":120949,"depth":196,"text":120950},{"id":121011,"depth":196,"text":121012},{"id":121300,"depth":196,"text":121301},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":120776,"description":26998},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":121524,"title":121525,"body":121526,"description":26998,"extension":3817,"meta":124462,"navigation":658,"path":124463,"seo":124464,"stem":124465,"__hash__":124466},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":121527,"toc":124434},[121528,121531,121535,121541,121545,121551,121555,121743,121746,121751,121755,121759,121762,121765,121771,121776,121779,121782,121787,121820,121825,121829,121906,121909,121914,121918,121921,121960,121963,121972,121990,121995,122002,122119,122124,122127,122154,122159,122163,122172,122222,122229,122233,122236,122250,122257,122291,122296,122300,122323,122326,122331,122335,122338,122341,122344,122386,122390,122393,122396,122437,122441,122445,122448,122453,122458,122461,122484,122487,122495,122500,122503,122508,122513,122516,122521,122525,122530,122553,122558,122620,122628,122633,122638,122641,122646,122649,122654,122659,122677,122682,122688,122693,122707,122711,122714,122717,122720,122763,122766,122771,122872,122875,122880,122884,122888,122925,122929,122933,122937,122983,122987,123032,123036,123043,123051,123106,123109,123186,123189,123212,123216,123219,123224,123229,123237,123240,123245,123250,123255,123258,123263,123272,123275,123280,123283,123354,123359,123362,123367,123370,123375,123378,123383,123386,123391,123396,123399,123474,123477,123490,123495,123498,123512,123515,123544,123549,123578,123581,123586,123590,123595,123604,123607,123612,123615,123620,123623,123626,123631,123634,123639,123644,123647,123652,123655,123780,123785,123815,123818,123823,123828,123845,123848,123891,123894,123921,123926,123939,124082,124086,124091,124105,124108,124159,124162,124192,124195,124211,124216,124230,124233,124300,124305,124314,124319,124322,124334,124339,124346,124370,124373,124378,124381,124400,124405,124412,124424,124431],[10,121529,121525],{"id":121530},"_3-安装必备配置",[14,121532,121534],{"id":121533},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[26,121536,121539],{"className":121537,"code":121538,"language":80},[78],"  打开下方网站（注意，该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",[33,121540,121538],{"__ignoreMap":31},[318,121542,121544],{"id":121543},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[26,121546,121549],{"className":121547,"code":121548,"language":80},[78],"  输入以下命令\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",[33,121550,121548],{"__ignoreMap":31},[318,121552,121554],{"id":121553},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[26,121556,121560],{"className":121557,"code":121558,"language":121559,"meta":31,"style":31},"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",[33,121561,121562,121570,121581,121593,121607,121611,121621,121626,121630,121634,121639,121643,121655,121659,121664,121668,121679,121683,121699,121703,121714,121718,121723,121727,121735],{"__ignoreMap":31},[36,121563,121564,121566,121568],{"class":38,"line":39},[36,121565,102],{"class":101},[36,121567,120351],{"class":105},[36,121569,29855],{"class":105},[36,121571,121572,121574,121576,121578],{"class":38,"line":53},[36,121573,102],{"class":101},[36,121575,120351],{"class":105},[36,121577,109],{"class":105},[36,121579,121580],{"class":105}," vim\n",[36,121582,121583,121585,121588,121590],{"class":38,"line":196},[36,121584,102],{"class":101},[36,121586,121587],{"class":105}," rm",[36,121589,28939],{"class":112},[36,121591,121592],{"class":105}," \u002Fetc\u002Fapt\u002Fsources.list\n",[36,121594,121595,121597,121599,121601,121604],{"class":38,"line":642},[36,121596,102],{"class":101},[36,121598,121587],{"class":105},[36,121600,28939],{"class":112},[36,121602,121603],{"class":105}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[36,121605,121606],{"class":112},"**\n",[36,121608,121609],{"class":38,"line":655},[36,121610,659],{"emptyLinePlaceholder":658},[36,121612,121613,121615,121618],{"class":38,"line":662},[36,121614,102],{"class":101},[36,121616,121617],{"class":105}," vim",[36,121619,121620],{"class":105}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[36,121622,121623],{"class":38,"line":667},[36,121624,121625],{"class":105},"```\n",[36,121627,121628],{"class":38,"line":679},[36,121629,659],{"emptyLinePlaceholder":658},[36,121631,121632],{"class":38,"line":685},[36,121633,659],{"emptyLinePlaceholder":658},[36,121635,121636],{"class":38,"line":691},[36,121637,121638],{"class":101},"选择好Ubuntu版本后，复制下方的内容。\n",[36,121640,121641],{"class":38,"line":696},[36,121642,659],{"emptyLinePlaceholder":658},[36,121644,121645,121647,121650,121653],{"class":38,"line":702},[36,121646,4101],{"class":46},[36,121648,121649],{"class":105},"[](",[36,121651,121652],{"class":101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[36,121654,922],{"class":105},[36,121656,121657],{"class":38,"line":708},[36,121658,659],{"emptyLinePlaceholder":658},[36,121660,121661],{"class":38,"line":713},[36,121662,121663],{"class":101},"粘贴进去\n",[36,121665,121666],{"class":38,"line":719},[36,121667,659],{"emptyLinePlaceholder":658},[36,121669,121670,121672,121674,121677],{"class":38,"line":725},[36,121671,4101],{"class":46},[36,121673,121649],{"class":105},[36,121675,121676],{"class":101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[36,121678,922],{"class":105},[36,121680,121681],{"class":38,"line":731},[36,121682,659],{"emptyLinePlaceholder":658},[36,121684,121685,121688,121691,121694,121696],{"class":38,"line":736},[36,121686,121687],{"class":101},"按一下ESC，然后英文冒号，输入",[36,121689,121690],{"class":105}," `",[36,121692,121693],{"class":101},":wq!",[36,121695,4841],{"class":105},[36,121697,121698],{"class":101},"然后回车\n",[36,121700,121701],{"class":38,"line":742},[36,121702,659],{"emptyLinePlaceholder":658},[36,121704,121705,121707,121709,121712],{"class":38,"line":748},[36,121706,4101],{"class":46},[36,121708,121649],{"class":105},[36,121710,121711],{"class":101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[36,121713,922],{"class":105},[36,121715,121716],{"class":38,"line":754},[36,121717,659],{"emptyLinePlaceholder":658},[36,121719,121720],{"class":38,"line":760},[36,121721,121722],{"class":101},"输入以下命令\n",[36,121724,121725],{"class":38,"line":766},[36,121726,659],{"emptyLinePlaceholder":658},[36,121728,121729,121732],{"class":38,"line":772},[36,121730,121731],{"class":105},"```",[36,121733,121734],{"class":101},"Bash\n",[36,121736,121737,121739,121741],{"class":38,"line":778},[36,121738,102],{"class":101},[36,121740,120351],{"class":105},[36,121742,29855],{"class":105},[19,121744,121745],{},"这里被替换成对应学校则成功",[19,121747,121748],{},[5198,121749],{"alt":31,"src":121750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,121752,121754],{"id":121753},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[318,121756,121758],{"id":121757},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,121760,121761],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,121763,121764],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,121766,121767],{},[4113,121768,121769],{"href":121769,"rel":121770},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[27481],[19,121772,121773],{},[5198,121774],{"alt":31,"src":121775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,121777,121778],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,121780,121781],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,121783,121784],{},[5198,121785],{"alt":31,"src":121786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[26,121788,121790],{"className":120330,"code":121789,"language":120332,"meta":31,"style":31},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[33,121791,121792,121797,121804,121809],{"__ignoreMap":31},[36,121793,121794],{"class":38,"line":39},[36,121795,121796],{"class":3943},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[36,121798,121799,121801],{"class":38,"line":53},[36,121800,104803],{"class":112},[36,121802,121803],{"class":105}," ~\u002FDownloads\n",[36,121805,121806],{"class":38,"line":196},[36,121807,121808],{"class":3943},"#下方chrome安装包名不一定是这个，根据名字来看\n",[36,121810,121811,121813,121815,121817],{"class":38,"line":642},[36,121812,102],{"class":101},[36,121814,120351],{"class":105},[36,121816,109],{"class":105},[36,121818,121819],{"class":105}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,121821,121822],{},[5198,121823],{"alt":31,"src":121824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[318,121826,121828],{"id":121827},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[26,121830,121832],{"className":120330,"code":121831,"language":120332,"meta":31,"style":31},"# 老版\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",[33,121833,121834,121839,121847,121858,121863,121867,121872,121882,121890,121901],{"__ignoreMap":31},[36,121835,121836],{"class":38,"line":39},[36,121837,121838],{"class":3943},"# 老版\n",[36,121840,121841,121843,121845],{"class":38,"line":53},[36,121842,102],{"class":101},[36,121844,120351],{"class":105},[36,121846,29855],{"class":105},[36,121848,121849,121851,121853,121855],{"class":38,"line":196},[36,121850,102],{"class":101},[36,121852,120351],{"class":105},[36,121854,109],{"class":105},[36,121856,121857],{"class":105}," neofetch\n",[36,121859,121860],{"class":38,"line":642},[36,121861,121862],{"class":101},"neofetch\n",[36,121864,121865],{"class":38,"line":655},[36,121866,659],{"emptyLinePlaceholder":658},[36,121868,121869],{"class":38,"line":662},[36,121870,121871],{"class":3943},"# 新版\n",[36,121873,121874,121876,121879],{"class":38,"line":667},[36,121875,102],{"class":101},[36,121877,121878],{"class":105}," add-apt-repository",[36,121880,121881],{"class":105}," ppa:zhangsongcui3371\u002Ffastfetch\n",[36,121883,121884,121886,121888],{"class":38,"line":679},[36,121885,102],{"class":101},[36,121887,120351],{"class":105},[36,121889,29855],{"class":105},[36,121891,121892,121894,121896,121898],{"class":38,"line":685},[36,121893,102],{"class":101},[36,121895,120351],{"class":105},[36,121897,109],{"class":105},[36,121899,121900],{"class":105}," fastfetch\n",[36,121902,121903],{"class":38,"line":691},[36,121904,121905],{"class":101},"fastfetch\n",[19,121907,121908],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,121910,121911],{},[5198,121912],{"alt":31,"src":121913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[318,121915,121917],{"id":121916},"_323-移除snap应用","3.2.3 移除snap应用",[19,121919,121920],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[26,121922,121924],{"className":120330,"code":121923,"language":120332,"meta":31,"style":31},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[33,121925,121926,121938,121949],{"__ignoreMap":31},[36,121927,121928,121930,121932,121935],{"class":38,"line":39},[36,121929,102],{"class":101},[36,121931,30124],{"class":105},[36,121933,121934],{"class":105}," disable",[36,121936,121937],{"class":105}," snapd.service\n",[36,121939,121940,121942,121944,121946],{"class":38,"line":53},[36,121941,102],{"class":101},[36,121943,30124],{"class":105},[36,121945,121934],{"class":105},[36,121947,121948],{"class":105}," snapd.socket\n",[36,121950,121951,121953,121955,121957],{"class":38,"line":196},[36,121952,102],{"class":101},[36,121954,30124],{"class":105},[36,121956,121934],{"class":105},[36,121958,121959],{"class":105}," snapd.seeded.service\n",[19,121961,121962],{},"然后查看snap应用列表",[19,121964,121965,121966,121971],{},"根据你安装的选择不同（最小安装或普通安装），有",[4113,121967,121970],{"href":121968,"rel":121969},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[27481],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[26,121973,121975],{"className":120330,"code":121974,"language":120332,"meta":31,"style":31},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[33,121976,121977,121982],{"__ignoreMap":31},[36,121978,121979],{"class":38,"line":39},[36,121980,121981],{"class":3943},"# 查询当前系统上snap安装了哪些app\n",[36,121983,121984,121987],{"class":38,"line":53},[36,121985,121986],{"class":101},"snap",[36,121988,121989],{"class":105}," list\n",[19,121991,121992],{},[5198,121993],{"alt":31,"src":121994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,121996,121997,121998,122001],{},"卸载掉图中所有应用，按照 ",[4027,121999,122000],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[26,122003,122005],{"className":120330,"code":122004,"language":120332,"meta":31,"style":31},"#移除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",[33,122006,122007,122012,122024,122029,122040,122045,122056,122061,122072,122077,122081,122086,122097,122108],{"__ignoreMap":31},[36,122008,122009],{"class":38,"line":39},[36,122010,122011],{"class":3943},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[36,122013,122014,122016,122019,122021],{"class":38,"line":53},[36,122015,102],{"class":101},[36,122017,122018],{"class":105}," snap",[36,122020,29692],{"class":105},[36,122022,122023],{"class":105}," snap-store\n",[36,122025,122026],{"class":38,"line":196},[36,122027,122028],{"class":3943},"#移除firefox浏览器\n",[36,122030,122031,122033,122035,122037],{"class":38,"line":642},[36,122032,102],{"class":101},[36,122034,122018],{"class":105},[36,122036,29692],{"class":105},[36,122038,122039],{"class":105}," firefox\n",[36,122041,122042],{"class":38,"line":655},[36,122043,122044],{"class":3943},"#移除gnome-42-2204\n",[36,122046,122047,122049,122051,122053],{"class":38,"line":662},[36,122048,102],{"class":101},[36,122050,122018],{"class":105},[36,122052,29692],{"class":105},[36,122054,122055],{"class":105}," gnome-42-2204\n",[36,122057,122058],{"class":38,"line":667},[36,122059,122060],{"class":3943},"#移除gtk-common-themes\n",[36,122062,122063,122065,122067,122069],{"class":38,"line":679},[36,122064,102],{"class":101},[36,122066,122018],{"class":105},[36,122068,29692],{"class":105},[36,122070,122071],{"class":105}," gtk-common-themes\n",[36,122073,122074],{"class":38,"line":685},[36,122075,122076],{"class":3943},"#移除其它...\n",[36,122078,122079],{"class":38,"line":691},[36,122080,6377],{"class":42},[36,122082,122083],{"class":38,"line":696},[36,122084,122085],{"class":3943},"#移除core22,bare以及snapd\n",[36,122087,122088,122090,122092,122094],{"class":38,"line":702},[36,122089,102],{"class":101},[36,122091,122018],{"class":105},[36,122093,29692],{"class":105},[36,122095,122096],{"class":105}," core22\n",[36,122098,122099,122101,122103,122105],{"class":38,"line":708},[36,122100,102],{"class":101},[36,122102,122018],{"class":105},[36,122104,29692],{"class":105},[36,122106,122107],{"class":105}," bare\n",[36,122109,122110,122112,122114,122116],{"class":38,"line":713},[36,122111,102],{"class":101},[36,122113,122018],{"class":105},[36,122115,29692],{"class":105},[36,122117,122118],{"class":105}," snapd\n",[19,122120,122121],{},[5198,122122],{"alt":31,"src":122123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,122125,122126],{},"输入以下命令查看是否还有snap包",[26,122128,122130],{"className":120330,"code":122129,"language":120332,"meta":31,"style":31},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[33,122131,122132,122138,122142,122146,122150],{"__ignoreMap":31},[36,122133,122134,122136],{"class":38,"line":39},[36,122135,121986],{"class":101},[36,122137,121989],{"class":105},[36,122139,122140],{"class":38,"line":53},[36,122141,121838],{"class":3943},[36,122143,122144],{"class":38,"line":196},[36,122145,121862],{"class":101},[36,122147,122148],{"class":38,"line":642},[36,122149,121871],{"class":3943},[36,122151,122152],{"class":38,"line":655},[36,122153,121905],{"class":101},[19,122155,122156],{},[5198,122157],{"alt":31,"src":122158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[318,122160,122162],{"id":122161},"_324-移除snap","3.2.4 移除snap",[19,122164,122165,122166,122171],{},"在删除掉",[4113,122167,122170],{"href":122168,"rel":122169},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[27481],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[26,122173,122175],{"className":120330,"code":122174,"language":120332,"meta":31,"style":31}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[33,122176,122177,122182,122195,122200,122211],{"__ignoreMap":31},[36,122178,122179],{"class":38,"line":39},[36,122180,122181],{"class":3943}," #使用apt移除掉snap\n",[36,122183,122184,122186,122188,122190,122193],{"class":38,"line":53},[36,122185,102],{"class":101},[36,122187,120351],{"class":105},[36,122189,120659],{"class":105},[36,122191,122192],{"class":112}," --purge",[36,122194,122118],{"class":105},[36,122196,122197],{"class":38,"line":196},[36,122198,122199],{"class":3943},"#移除snapd的一些目录\n",[36,122201,122202,122204,122206,122208],{"class":38,"line":642},[36,122203,102],{"class":101},[36,122205,121587],{"class":105},[36,122207,28939],{"class":112},[36,122209,122210],{"class":105}," \u002Fvar\u002Fcache\u002Fsnapd\n",[36,122212,122213,122215,122217,122219],{"class":38,"line":655},[36,122214,102],{"class":101},[36,122216,121587],{"class":105},[36,122218,28939],{"class":112},[36,122220,122221],{"class":105}," ~\u002Fsnap\n",[19,122223,122224,122225,122228],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[33,122226,122227],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[318,122230,122232],{"id":122231},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,122234,122235],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[26,122237,122239],{"className":120330,"code":122238,"language":120332,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[33,122240,122241],{"__ignoreMap":31},[36,122242,122243,122245,122247],{"class":38,"line":39},[36,122244,102],{"class":101},[36,122246,121617],{"class":105},[36,122248,122249],{"class":105}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,122251,122252,122253,122256],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[33,122254,122255],{},":wq"," 回车",[26,122258,122260],{"className":120330,"code":122259,"language":120332,"meta":31,"style":31},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[33,122261,122262,122269,122283],{"__ignoreMap":31},[36,122263,122264,122267],{"class":38,"line":39},[36,122265,122266],{"class":101},"Package:",[36,122268,122118],{"class":105},[36,122270,122271,122274,122277,122280],{"class":38,"line":53},[36,122272,122273],{"class":101},"Pin:",[36,122275,122276],{"class":105}," release",[36,122278,122279],{"class":105}," a=",[36,122281,122282],{"class":112},"*\n",[36,122284,122285,122288],{"class":38,"line":196},[36,122286,122287],{"class":101},"Pin-Priority:",[36,122289,122290],{"class":112}," -10\n",[19,122292,122293],{},[5198,122294],{"alt":31,"src":122295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[318,122297,122299],{"id":122298},"_326-测试是否成功","3.2.6 测试是否成功",[26,122301,122303],{"className":120330,"code":122302,"language":120332,"meta":31,"style":31},"sudo apt update\nsudo apt install firefox\n",[33,122304,122305,122313],{"__ignoreMap":31},[36,122306,122307,122309,122311],{"class":38,"line":39},[36,122308,102],{"class":101},[36,122310,120351],{"class":105},[36,122312,29855],{"class":105},[36,122314,122315,122317,122319,122321],{"class":38,"line":53},[36,122316,102],{"class":101},[36,122318,120351],{"class":105},[36,122320,109],{"class":105},[36,122322,122039],{"class":105},[19,122324,122325],{},"这里提示snapd无法被安装，就证明成功了",[19,122327,122328],{},[5198,122329],{"alt":31,"src":122330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[318,122332,122334],{"id":122333},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,122336,122337],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,122339,122340],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,122342,122343],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[26,122345,122347],{"className":120330,"code":122346,"language":120332,"meta":31,"style":31},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[33,122348,122349,122354,122363,122368,122376],{"__ignoreMap":31},[36,122350,122351],{"class":38,"line":39},[36,122352,122353],{"class":3943},"# 添加Mozilla提供的源\n",[36,122355,122356,122358,122360],{"class":38,"line":53},[36,122357,102],{"class":101},[36,122359,121878],{"class":105},[36,122361,122362],{"class":105}," ppa:mozillateam\u002Fppa\n",[36,122364,122365],{"class":38,"line":196},[36,122366,122367],{"class":3943},"# 安装Firefox\n",[36,122369,122370,122372,122374],{"class":38,"line":642},[36,122371,102],{"class":101},[36,122373,120351],{"class":105},[36,122375,29855],{"class":105},[36,122377,122378,122380,122382,122384],{"class":38,"line":655},[36,122379,102],{"class":101},[36,122381,120351],{"class":105},[36,122383,109],{"class":105},[36,122385,122039],{"class":105},[318,122387,122389],{"id":122388},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,122391,122392],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,122394,122395],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[26,122397,122399],{"className":120330,"code":122398,"language":120332,"meta":31,"style":31},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[33,122400,122401,122406,122416,122424,122428],{"__ignoreMap":31},[36,122402,122403],{"class":38,"line":39},[36,122404,122405],{"class":3943},"#删掉禁止安装snap的配置文件\n",[36,122407,122408,122410,122412,122414],{"class":38,"line":53},[36,122409,102],{"class":101},[36,122411,121587],{"class":105},[36,122413,28939],{"class":112},[36,122415,122249],{"class":105},[36,122417,122418,122420,122422],{"class":38,"line":196},[36,122419,102],{"class":101},[36,122421,120351],{"class":105},[36,122423,29855],{"class":105},[36,122425,122426],{"class":38,"line":642},[36,122427,659],{"emptyLinePlaceholder":658},[36,122429,122430,122432,122434],{"class":38,"line":655},[36,122431,102],{"class":101},[36,122433,120351],{"class":105},[36,122435,122436],{"class":105}," dist-update\n",[14,122438,122440],{"id":122439},"_33-中文输入法","3.3 中文输入法",[318,122442,122444],{"id":122443},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,122446,122447],{},"官网下载搜狗输入法",[19,122449,122450],{},[5198,122451],{"alt":31,"src":122452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,122454,122455],{},[5198,122456],{"alt":31,"src":122457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,122459,122460],{},"打开终端输入如下",[26,122462,122464],{"className":120330,"code":122463,"language":120332,"meta":31,"style":31},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[33,122465,122466,122473],{"__ignoreMap":31},[36,122467,122468,122470],{"class":38,"line":39},[36,122469,104803],{"class":112},[36,122471,122472],{"class":105}," ~\u002FDownloads\u002F\n",[36,122474,122475,122477,122479,122481],{"class":38,"line":53},[36,122476,102],{"class":101},[36,122478,120351],{"class":105},[36,122480,109],{"class":105},[36,122482,122483],{"class":105}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,122485,122486],{},"打开Fcitx",[19,122488,122489,122492],{},[5198,122490],{"alt":31,"src":122491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[5198,122493],{"alt":31,"src":122494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,122496,122497],{},[5198,122498],{"alt":31,"src":122499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,122501,122502],{},"添加搜狗输入法",[19,122504,122505],{},[5198,122506],{"alt":31,"src":122507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,122509,122510],{},[5198,122511],{"alt":31,"src":122512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,122514,122515],{},"将搜狗输入法设置为唯一输入法",[19,122517,122518],{},[5198,122519],{"alt":31,"src":122520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[318,122522,122524],{"id":122523},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[211,122526,122527],{},[214,122528,122529],{},"卸载旧输入法",[26,122531,122533],{"className":121557,"code":122532,"language":121559,"meta":31,"style":31},"sudo apt purge fcitx* ibus*\n",[33,122534,122535],{"__ignoreMap":31},[36,122536,122537,122539,122541,122543,122546,122548,122551],{"class":38,"line":39},[36,122538,102],{"class":101},[36,122540,120351],{"class":105},[36,122542,120692],{"class":105},[36,122544,122545],{"class":105}," fcitx",[36,122547,1372],{"class":112},[36,122549,122550],{"class":105}," ibus",[36,122552,122282],{"class":112},[211,122554,122555],{"start":53},[214,122556,122557],{},"安装Fcitx5",[26,122559,122561],{"className":120330,"code":122560,"language":120332,"meta":31,"style":31},"# 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",[33,122562,122563,122568,122582,122586,122591,122600,122608],{"__ignoreMap":31},[36,122564,122565],{"class":38,"line":39},[36,122566,122567],{"class":3943},"# Ubuntu22.04及以上、Debian12及以上\n",[36,122569,122570,122572,122574,122576,122579],{"class":38,"line":53},[36,122571,102],{"class":101},[36,122573,120351],{"class":105},[36,122575,109],{"class":105},[36,122577,122578],{"class":105}," fcitx5",[36,122580,122581],{"class":105}," fcitx5-chinese-addons\n",[36,122583,122584],{"class":38,"line":196},[36,122585,659],{"emptyLinePlaceholder":658},[36,122587,122588],{"class":38,"line":642},[36,122589,122590],{"class":3943},"# Ubuntu20.04\n",[36,122592,122593,122595,122597],{"class":38,"line":655},[36,122594,102],{"class":101},[36,122596,121878],{"class":105},[36,122598,122599],{"class":105}," ppa:zhsj\u002Ffcitx5\n",[36,122601,122602,122604,122606],{"class":38,"line":662},[36,122603,102],{"class":101},[36,122605,120351],{"class":105},[36,122607,29855],{"class":105},[36,122609,122610,122612,122614,122616,122618],{"class":38,"line":667},[36,122611,102],{"class":101},[36,122613,120351],{"class":105},[36,122615,109],{"class":105},[36,122617,122578],{"class":105},[36,122619,122581],{"class":105},[211,122621,122622,122625],{"start":196},[214,122623,122624],{},"Reboot System",[214,122626,122627],{},"启动Fcitx5",[19,122629,122630],{},[5198,122631],{"alt":31,"src":122632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[211,122634,122635],{"start":655},[214,122636,122637],{},"修改一些设置",[19,122639,122640],{},"将Pinyin和Keyboard - English US加入到左边。",[19,122642,122643],{},[5198,122644],{"alt":31,"src":122645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,122647,122648],{},"添加快捷键以便于更好切换中英文",[19,122650,122651],{},[5198,122652],{"alt":31,"src":122653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[211,122655,122656],{"start":662},[214,122657,122658],{},"重启",[26,122660,122662],{"className":121557,"code":122661,"language":121559,"meta":31,"style":31},"sudo shutdown -r now\n",[33,122663,122664],{"__ignoreMap":31},[36,122665,122666,122668,122671,122674],{"class":38,"line":39},[36,122667,102],{"class":101},[36,122669,122670],{"class":105}," shutdown",[36,122672,122673],{"class":112}," -r",[36,122675,122676],{"class":105}," now\n",[211,122678,122679],{"start":667},[214,122680,122681],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,122683,122684],{},[4113,122685,122686],{"href":122686,"rel":122687},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[27481],[211,122689,122690],{"start":679},[214,122691,122692],{},"再重启",[26,122694,122695],{"className":121557,"code":122661,"language":121559,"meta":31,"style":31},[33,122696,122697],{"__ignoreMap":31},[36,122698,122699,122701,122703,122705],{"class":38,"line":39},[36,122700,102],{"class":101},[36,122702,122670],{"class":105},[36,122704,122673],{"class":112},[36,122706,122676],{"class":105},[14,122708,122710],{"id":122709},"_34-pip3源替换","3.4 pip3源替换",[19,122712,122713],{},"非Debian系发行版需要做。",[19,122715,122716],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,122718,122719],{},"使用dnf的系统也可能不用做。",[26,122721,122723],{"className":120330,"code":122722,"language":120332,"meta":31,"style":31},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[33,122724,122725,122730,122737,122742,122747],{"__ignoreMap":31},[36,122726,122727],{"class":38,"line":39},[36,122728,122729],{"class":3943},"# 检查是否已安装 pip\n",[36,122731,122732,122735],{"class":38,"line":53},[36,122733,122734],{"class":101},"pip3",[36,122736,29906],{"class":112},[36,122738,122739],{"class":38,"line":196},[36,122740,122741],{"class":3943},"# 如果未安装，先安装 pip3（见下方）\n",[36,122743,122744],{"class":38,"line":642},[36,122745,122746],{"class":3943},"# 配置 pip 使用清华源\n",[36,122748,122749,122751,122754,122757,122760],{"class":38,"line":655},[36,122750,122734],{"class":101},[36,122752,122753],{"class":105}," config",[36,122755,122756],{"class":105}," set",[36,122758,122759],{"class":105}," global.index-url",[36,122761,122762],{"class":105}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,122764,122765],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,122767,122768],{},[5198,122769],{"alt":31,"src":122770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[26,122772,122774],{"className":120330,"code":122773,"language":120332,"meta":31,"style":31},"#安装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",[33,122775,122776,122781,122789,122800,122804,122809,122828,122832,122837,122849,122853,122858],{"__ignoreMap":31},[36,122777,122778],{"class":38,"line":39},[36,122779,122780],{"class":3943},"#安装pip3\n",[36,122782,122783,122785,122787],{"class":38,"line":53},[36,122784,102],{"class":101},[36,122786,120351],{"class":105},[36,122788,29855],{"class":105},[36,122790,122791,122793,122795,122797],{"class":38,"line":196},[36,122792,102],{"class":101},[36,122794,29689],{"class":105},[36,122796,109],{"class":105},[36,122798,122799],{"class":105}," python3-pip\n",[36,122801,122802],{"class":38,"line":642},[36,122803,659],{"emptyLinePlaceholder":658},[36,122805,122806],{"class":38,"line":655},[36,122807,122808],{"class":3943},"#更新pip3\n",[36,122810,122811,122813,122815,122817,122819,122821,122824,122826],{"class":38,"line":662},[36,122812,104419],{"class":101},[36,122814,104422],{"class":112},[36,122816,104445],{"class":105},[36,122818,109],{"class":105},[36,122820,30041],{"class":112},[36,122822,122823],{"class":105}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[36,122825,104450],{"class":112},[36,122827,104453],{"class":105},[36,122829,122830],{"class":38,"line":667},[36,122831,659],{"emptyLinePlaceholder":658},[36,122833,122834],{"class":38,"line":679},[36,122835,122836],{"class":3943},"#设置pip源为清华源\n",[36,122838,122839,122841,122843,122845,122847],{"class":38,"line":685},[36,122840,122734],{"class":101},[36,122842,122753],{"class":105},[36,122844,122756],{"class":105},[36,122846,122759],{"class":105},[36,122848,122762],{"class":105},[36,122850,122851],{"class":38,"line":691},[36,122852,659],{"emptyLinePlaceholder":658},[36,122854,122855],{"class":38,"line":696},[36,122856,122857],{"class":3943},"#测试\n",[36,122859,122860,122862,122864,122866,122868,122870],{"class":38,"line":702},[36,122861,104419],{"class":101},[36,122863,104422],{"class":112},[36,122865,104445],{"class":105},[36,122867,109],{"class":105},[36,122869,104450],{"class":112},[36,122871,104453],{"class":105},[19,122873,122874],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,122876,122877],{},[5198,122878],{"alt":31,"src":122879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,122881,122883],{"id":122882},"_35-显卡驱动安装","3.5 显卡驱动安装",[318,122885,122887],{"id":122886},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[26,122889,122891],{"className":121557,"code":122890,"language":121559,"meta":31,"style":31},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[33,122892,122893,122898,122913,122918],{"__ignoreMap":31},[36,122894,122895],{"class":38,"line":39},[36,122896,122897],{"class":3943},"# 如果是使用apt安装的驱动\n",[36,122899,122900,122902,122904,122906,122908,122911],{"class":38,"line":53},[36,122901,102],{"class":101},[36,122903,29689],{"class":105},[36,122905,29692],{"class":105},[36,122907,122192],{"class":112},[36,122909,122910],{"class":105}," nvidia",[36,122912,122282],{"class":112},[36,122914,122915],{"class":38,"line":196},[36,122916,122917],{"class":3943},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[36,122919,122920,122922],{"class":38,"line":642},[36,122921,102],{"class":101},[36,122923,122924],{"class":105}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[318,122926,122928],{"id":122927},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[25619,122930,122932],{"id":122931},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[26531,122934,122936],{"id":122935},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[26,122938,122940],{"className":121557,"code":122939,"language":121559,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,122941,122942,122947,122958,122963,122973,122978],{"__ignoreMap":31},[36,122943,122944],{"class":38,"line":39},[36,122945,122946],{"class":3943},"# 安装英伟达驱动\n",[36,122948,122949,122951,122953,122955],{"class":38,"line":53},[36,122950,102],{"class":101},[36,122952,120351],{"class":105},[36,122954,109],{"class":105},[36,122956,122957],{"class":105}," nvidia-driver-版本号\n",[36,122959,122960],{"class":38,"line":196},[36,122961,122962],{"class":3943},"# 重启 \n",[36,122964,122965,122967,122969,122971],{"class":38,"line":642},[36,122966,102],{"class":101},[36,122968,122670],{"class":105},[36,122970,122673],{"class":112},[36,122972,122676],{"class":105},[36,122974,122975],{"class":38,"line":655},[36,122976,122977],{"class":3943},"# 检查驱动是否安装成功\n",[36,122979,122980],{"class":38,"line":662},[36,122981,122982],{"class":101},"nvidia-smi\n",[26531,122984,122986],{"id":122985},"_35212-debian","3.5.2.1.2 Debian",[26,122988,122990],{"className":121557,"code":122989,"language":121559,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,122991,122992,122996,123010,123014,123024,123028],{"__ignoreMap":31},[36,122993,122994],{"class":38,"line":39},[36,122995,122946],{"class":3943},[36,122997,122998,123000,123002,123004,123007],{"class":38,"line":53},[36,122999,102],{"class":101},[36,123001,120351],{"class":105},[36,123003,109],{"class":105},[36,123005,123006],{"class":105}," nvidia-driver",[36,123008,123009],{"class":105}," nvidia-settings\n",[36,123011,123012],{"class":38,"line":196},[36,123013,122962],{"class":3943},[36,123015,123016,123018,123020,123022],{"class":38,"line":642},[36,123017,102],{"class":101},[36,123019,122670],{"class":105},[36,123021,122673],{"class":112},[36,123023,122676],{"class":105},[36,123025,123026],{"class":38,"line":655},[36,123027,122977],{"class":3943},[36,123029,123030],{"class":38,"line":662},[36,123031,122982],{"class":101},[25619,123033,123035],{"id":123034},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,123037,123038,123039,123042],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[4027,123040,123041],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,123044,123045,123046],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[27175,123047,123048],{},[4027,123049,123050],{},"（也可以不禁用桌面环境，直接进行下一步。）",[26,123052,123054],{"className":121557,"code":123053,"language":121559,"meta":31,"style":31},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[33,123055,123056,123061,123071,123076,123089,123094],{"__ignoreMap":31},[36,123057,123058],{"class":38,"line":39},[36,123059,123060],{"class":3943},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[36,123062,123063,123065,123068],{"class":38,"line":53},[36,123064,102],{"class":101},[36,123066,123067],{"class":105}," telinit",[36,123069,123070],{"class":112}," 3\n",[36,123072,123073],{"class":38,"line":196},[36,123074,123075],{"class":3943},"# ubuntu 使用下方命令\n",[36,123077,123078,123080,123083,123086],{"class":38,"line":642},[36,123079,102],{"class":101},[36,123081,123082],{"class":105}," service",[36,123084,123085],{"class":105}," lightdm",[36,123087,123088],{"class":105}," stop\n",[36,123090,123091],{"class":38,"line":655},[36,123092,123093],{"class":3943},"# Fedora 使用下方命令\n",[36,123095,123096,123098,123100,123103],{"class":38,"line":662},[36,123097,102],{"class":101},[36,123099,30124],{"class":105},[36,123101,123102],{"class":105}," isolate",[36,123104,123105],{"class":105}," multi-user.target\n",[19,123107,123108],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[26,123110,123112],{"className":121557,"code":123111,"language":121559,"meta":31,"style":31},"# 编译环境+准备工作\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",[33,123113,123114,123119,123130,123135,123142,123147,123159,123164,123171,123176],{"__ignoreMap":31},[36,123115,123116],{"class":38,"line":39},[36,123117,123118],{"class":3943},"# 编译环境+准备工作\n",[36,123120,123121,123123,123125,123127],{"class":38,"line":53},[36,123122,102],{"class":101},[36,123124,120351],{"class":105},[36,123126,109],{"class":105},[36,123128,123129],{"class":105}," build-essential\n",[36,123131,123132],{"class":38,"line":196},[36,123133,123134],{"class":3943},"# 进入到.run目录中\n",[36,123136,123137,123139],{"class":38,"line":642},[36,123138,104803],{"class":112},[36,123140,123141],{"class":105}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[36,123143,123144],{"class":38,"line":655},[36,123145,123146],{"class":3943},"# 给驱动文件增加可执行权限：\n",[36,123148,123149,123151,123153,123156],{"class":38,"line":662},[36,123150,102],{"class":101},[36,123152,28195],{"class":105},[36,123154,123155],{"class":105}," a+x",[36,123157,123158],{"class":105}," NVIDIA-Linux-x86_64-550.107.02.run\n",[36,123160,123161],{"class":38,"line":667},[36,123162,123163],{"class":3943},"# 然后执行安装：\n",[36,123165,123166,123168],{"class":38,"line":679},[36,123167,102],{"class":101},[36,123169,123170],{"class":105}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[36,123172,123173],{"class":38,"line":685},[36,123174,123175],{"class":3943},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[36,123177,123178,123180,123183],{"class":38,"line":691},[36,123179,102],{"class":101},[36,123181,123182],{"class":105}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[36,123184,123185],{"class":112},"  --no-opengl-files\n",[19,123187,123188],{},"安装完毕重启即可",[26,123190,123192],{"className":121557,"code":123191,"language":121559,"meta":31,"style":31},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,123193,123194,123198,123204,123208],{"__ignoreMap":31},[36,123195,123196],{"class":38,"line":39},[36,123197,122962],{"class":3943},[36,123199,123200,123202],{"class":38,"line":53},[36,123201,102],{"class":101},[36,123203,30258],{"class":105},[36,123205,123206],{"class":38,"line":196},[36,123207,122977],{"class":3943},[36,123209,123210],{"class":38,"line":642},[36,123211,122982],{"class":101},[318,123213,123215],{"id":123214},"_353-安装cuda","3.5.3 安装CUDA",[19,123217,123218],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,123220,123221],{},[5198,123222],{"alt":31,"src":123223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[211,123225,123226],{},[214,123227,123228],{},"先查看显卡驱动所支持的最高CUDA版本",[26,123230,123231],{"className":121557,"code":122982,"language":121559,"meta":31,"style":31},[33,123232,123233],{"__ignoreMap":31},[36,123234,123235],{"class":38,"line":39},[36,123236,122982],{"class":101},[19,123238,123239],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,123241,123242],{},[5198,123243],{"alt":31,"src":123244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[211,123246,123247],{"start":53},[214,123248,123249],{},"下载CUDA并安装CUDA",[19,123251,121336,123252],{},[4113,123253,121339],{"href":121339,"rel":123254},[27481],[19,123256,123257],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,123259,123260],{},[5198,123261],{"alt":31,"src":123262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,123264,123265,123266,123271],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[4113,123267,123270],{"href":123268,"rel":123269},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[27481],"Vinci机器人队单片机教程","）",[19,123273,123274],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,123276,123277],{},[5198,123278],{"alt":31,"src":123279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,123281,123282],{},"将最下方框框里的命令敲入终端",[26,123284,123286],{"className":121557,"code":123285,"language":121559,"meta":31,"style":31},"# 在当前文件夹下创建一个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",[33,123287,123288,123293,123302,123307,123314,123319,123327,123332,123343,123348],{"__ignoreMap":31},[36,123289,123290],{"class":38,"line":39},[36,123291,123292],{"class":3943},"# 在当前文件夹下创建一个ttt的子文件夹\n",[36,123294,123295,123297,123299],{"class":38,"line":53},[36,123296,104793],{"class":101},[36,123298,32825],{"class":112},[36,123300,123301],{"class":105}," .\u002Fttt\n",[36,123303,123304],{"class":38,"line":196},[36,123305,123306],{"class":3943},"# 进入ttt文件夹\n",[36,123308,123309,123311],{"class":38,"line":642},[36,123310,104803],{"class":112},[36,123312,123313],{"class":105}," ttt\n",[36,123315,123316],{"class":38,"line":655},[36,123317,123318],{"class":3943},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[36,123320,123321,123324],{"class":38,"line":662},[36,123322,123323],{"class":101},"wget",[36,123325,123326],{"class":105}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,123328,123329],{"class":38,"line":667},[36,123330,123331],{"class":3943},"# 给予权限\n",[36,123333,123334,123336,123338,123340],{"class":38,"line":679},[36,123335,102],{"class":101},[36,123337,28195],{"class":105},[36,123339,123155],{"class":105},[36,123341,123342],{"class":105}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,123344,123345],{"class":38,"line":685},[36,123346,123347],{"class":3943},"# 运行脚本\n",[36,123349,123350,123352],{"class":38,"line":691},[36,123351,102],{"class":101},[36,123353,123342],{"class":105},[19,123355,123356],{},[5198,123357],{"alt":31,"src":123358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,123360,123361],{},"正在安装中：",[19,123363,123364],{},[5198,123365],{"alt":31,"src":123366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,123368,123369],{},"输入accept接受即可",[19,123371,123372],{},[5198,123373],{"alt":31,"src":123374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,123376,123377],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,123379,123380],{},[5198,123381],{"alt":31,"src":123382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,123384,123385],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,123387,123388],{},[5198,123389],{"alt":31,"src":123390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[211,123392,123393],{"start":196},[214,123394,123395],{},"配置环境",[19,123397,123398],{},"根据上方确认一下路径，比如我上面红色框起来的为",[26,123400,123402],{"className":121557,"code":123401,"language":121559,"meta":31,"style":31},"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",[33,123403,123404,123420,123435],{"__ignoreMap":31},[36,123405,123406,123409,123412,123415,123418],{"class":38,"line":39},[36,123407,123408],{"class":101},"Please",[36,123410,123411],{"class":105}," make",[36,123413,123414],{"class":105}," sure",[36,123416,123417],{"class":105}," that",[36,123419,6377],{"class":42},[36,123421,123422,123424,123427,123430,123433],{"class":38,"line":53},[36,123423,55828],{"class":101},[36,123425,123426],{"class":105},"   PATH",[36,123428,123429],{"class":105}," includes",[36,123431,123432],{"class":105}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[36,123434,6377],{"class":42},[36,123436,123437,123439,123442,123444,123447,123450,123452,123455,123458,123461,123464,123466,123469,123471],{"class":38,"line":196},[36,123438,55828],{"class":101},[36,123440,123441],{"class":105},"   LD_LIBRARY_PATH",[36,123443,123429],{"class":105},[36,123445,123446],{"class":105}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[36,123448,123449],{"class":105}," or,",[36,123451,8903],{"class":105},[36,123453,123454],{"class":105}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[36,123456,123457],{"class":105}," to",[36,123459,123460],{"class":105}," \u002Fetc\u002Fld.so.conf",[36,123462,123463],{"class":105}," and",[36,123465,30841],{"class":105},[36,123467,123468],{"class":105}," ldconfig",[36,123470,68159],{"class":105},[36,123472,123473],{"class":105}," root\n",[19,123475,123476],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[26,123478,123480],{"className":121557,"code":123479,"language":121559,"meta":31,"style":31},"which nvcc\n",[33,123481,123482],{"__ignoreMap":31},[36,123483,123484,123487],{"class":38,"line":39},[36,123485,123486],{"class":112},"which",[36,123488,123489],{"class":105}," nvcc\n",[19,123491,123492],{},[5198,123493],{"alt":31,"src":123494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,123496,123497],{},"所以我进行以下操作：",[26,123499,123501],{"className":121557,"code":123500,"language":121559,"meta":31,"style":31},"sudo vim ~\u002F.bashrc\n",[33,123502,123503],{"__ignoreMap":31},[36,123504,123505,123507,123509],{"class":38,"line":39},[36,123506,102],{"class":101},[36,123508,121617],{"class":105},[36,123510,123511],{"class":105}," ~\u002F.bashrc\n",[19,123513,123514],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[26,123516,123518],{"className":121557,"code":123517,"language":121559,"meta":31,"style":31},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[33,123519,123520,123532],{"__ignoreMap":31},[36,123521,123522,123524,123527,123529],{"class":38,"line":39},[36,123523,28658],{"class":46},[36,123525,123526],{"class":42}," PATH",[36,123528,47],{"class":46},[36,123530,123531],{"class":42},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[36,123533,123534,123536,123539,123541],{"class":38,"line":53},[36,123535,28658],{"class":46},[36,123537,123538],{"class":42}," LD_LIBRARY_PATH",[36,123540,47],{"class":46},[36,123542,123543],{"class":42},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,123545,123546],{},[5198,123547],{"alt":31,"src":123548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[26,123550,123552],{"className":121557,"code":123551,"language":121559,"meta":31,"style":31},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[33,123553,123554,123559,123565,123570],{"__ignoreMap":31},[36,123555,123556],{"class":38,"line":39},[36,123557,123558],{"class":3943},"# 刷新当前终端的环境变量\n",[36,123560,123561,123563],{"class":38,"line":53},[36,123562,104433],{"class":112},[36,123564,123511],{"class":105},[36,123566,123567],{"class":38,"line":196},[36,123568,123569],{"class":3943},"# 验证CUDA是否安装成功\n",[36,123571,123572,123575],{"class":38,"line":642},[36,123573,123574],{"class":101},"nvcc",[36,123576,123577],{"class":112}," -V\n",[19,123579,123580],{},"出现下图这种则安装成功。",[19,123582,123583],{},[5198,123584],{"alt":31,"src":123585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[318,123587,123589],{"id":123588},"_354-安装cudnn","3.5.4 安装cuDNN",[211,123591,123592],{},[214,123593,123594],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,123596,123597,123598,123603],{},"前往 NVIDIA cuDNN 下载页面：",[4113,123599,123602],{"href":123600,"rel":123601},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[27481],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,123605,123606],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,123608,123609],{},[5198,123610],{"alt":31,"src":123611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,123613,123614],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,123616,123617],{},[5198,123618],{"alt":31,"src":123619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,123621,123622],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,123624,123625],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,123627,123628],{},[4027,123629,123630],{},"我这里选择所有Linux X86_64最通用的办法：",[19,123632,123633],{},"下载好的：",[19,123635,123636],{},[5198,123637],{"alt":31,"src":123638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[211,123640,123641],{"start":53},[214,123642,123643],{},"安装cuDNN",[19,123645,123646],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,123648,123649],{},[5198,123650],{"alt":31,"src":123651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,123653,123654],{},"解压文件，并复制到对应位置完成安装",[26,123656,123658],{"className":121557,"code":123657,"language":121559,"meta":31,"style":31},"# 解压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",[33,123659,123660,123665,123676,123681,123688,123693,123709,123723,123728,123739,123748,123752,123768],{"__ignoreMap":31},[36,123661,123662],{"class":38,"line":39},[36,123663,123664],{"class":3943},"# 解压cuDNN文件\n",[36,123666,123667,123670,123673],{"class":38,"line":53},[36,123668,123669],{"class":101},"tar",[36,123671,123672],{"class":112}," -xvf",[36,123674,123675],{"class":105}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[36,123677,123678],{"class":38,"line":196},[36,123679,123680],{"class":3943},"# cd进文件夹\n",[36,123682,123683,123685],{"class":38,"line":642},[36,123684,104803],{"class":112},[36,123686,123687],{"class":105}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[36,123689,123690],{"class":38,"line":655},[36,123691,123692],{"class":3943},"# 复制cuDNN文件到CUDA目录\n",[36,123694,123695,123697,123699,123702,123704,123707],{"class":38,"line":662},[36,123696,102],{"class":101},[36,123698,31472],{"class":105},[36,123700,123701],{"class":105}," include\u002Fcudnn",[36,123703,1372],{"class":112},[36,123705,123706],{"class":105},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[36,123708,6377],{"class":42},[36,123710,123711,123713,123715,123718,123720],{"class":38,"line":667},[36,123712,102],{"class":101},[36,123714,31472],{"class":105},[36,123716,123717],{"class":105}," lib\u002Flibcudnn",[36,123719,1372],{"class":112},[36,123721,123722],{"class":105},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[36,123724,123725],{"class":38,"line":679},[36,123726,123727],{"class":3943},"# 对比一下有没有缺文件\n",[36,123729,123730,123732,123735,123737],{"class":38,"line":685},[36,123731,30372],{"class":101},[36,123733,123734],{"class":105}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[36,123736,1372],{"class":112},[36,123738,6377],{"class":42},[36,123740,123741,123743,123746],{"class":38,"line":691},[36,123742,30372],{"class":101},[36,123744,123745],{"class":105}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[36,123747,122282],{"class":112},[36,123749,123750],{"class":38,"line":696},[36,123751,123331],{"class":3943},[36,123753,123754,123756,123758,123761,123763,123765],{"class":38,"line":702},[36,123755,102],{"class":101},[36,123757,28195],{"class":105},[36,123759,123760],{"class":105}," a+r",[36,123762,123734],{"class":105},[36,123764,1372],{"class":112},[36,123766,123767],{"class":42},"   \n",[36,123769,123770,123772,123774,123776,123778],{"class":38,"line":708},[36,123771,102],{"class":101},[36,123773,28195],{"class":105},[36,123775,123760],{"class":105},[36,123777,123745],{"class":105},[36,123779,122282],{"class":112},[211,123781,123782],{"start":196},[214,123783,123784],{},"检查是否安装成功",[26,123786,123788],{"className":121557,"code":123787,"language":121559,"meta":31,"style":31},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[33,123789,123790,123795],{"__ignoreMap":31},[36,123791,123792],{"class":38,"line":39},[36,123793,123794],{"class":3943},"# 检查cuDNN版本命令\n",[36,123796,123797,123800,123803,123805,123807,123810,123813],{"class":38,"line":53},[36,123798,123799],{"class":101},"cat",[36,123801,123802],{"class":105}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[36,123804,1381],{"class":46},[36,123806,33845],{"class":101},[36,123808,123809],{"class":105}," CUDNN_MAJOR",[36,123811,123812],{"class":112}," -A",[36,123814,51280],{"class":112},[19,123816,123817],{},"出现下图这样的就是安装成功了",[19,123819,123820],{},[5198,123821],{"alt":31,"src":123822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[211,123824,123825],{"start":642},[214,123826,123827],{},"软链接(一般不需要)",[26,123829,123831],{"className":121557,"code":123830,"language":121559,"meta":31,"style":31},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[33,123832,123833,123838],{"__ignoreMap":31},[36,123834,123835],{"class":38,"line":39},[36,123836,123837],{"class":3943},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[36,123839,123840,123842],{"class":38,"line":53},[36,123841,102],{"class":101},[36,123843,123844],{"class":105}," ldconfig\n",[19,123846,123847],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[26,123849,123854],{"className":123850,"code":123851,"language":123852,"meta":123853,"style":31},"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",[33,123855,123856,123861,123866,123871,123876,123881,123886],{"__ignoreMap":31},[36,123857,123858],{"class":38,"line":39},[36,123859,123860],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[36,123862,123863],{"class":38,"line":53},[36,123864,123865],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[36,123867,123868],{"class":38,"line":196},[36,123869,123870],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[36,123872,123873],{"class":38,"line":642},[36,123874,123875],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[36,123877,123878],{"class":38,"line":655},[36,123879,123880],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[36,123882,123883],{"class":38,"line":662},[36,123884,123885],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[36,123887,123888],{"class":38,"line":667},[36,123889,123890],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,123892,123893],{},"运行下方的命令",[26,123895,123897],{"className":121557,"code":123896,"language":121559,"meta":31,"style":31},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[33,123898,123899,123904,123911,123916],{"__ignoreMap":31},[36,123900,123901],{"class":38,"line":39},[36,123902,123903],{"class":3943},"# cd进入CUDA路径\n",[36,123905,123906,123908],{"class":38,"line":53},[36,123907,104803],{"class":112},[36,123909,123910],{"class":105}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[36,123912,123913],{"class":38,"line":196},[36,123914,123915],{"class":3943}," # 查看本路径下的需要软链接的文件名\n",[36,123917,123918],{"class":38,"line":642},[36,123919,123920],{"class":101}," ls\n",[19,123922,123923],{},[5198,123924],{"alt":31,"src":123925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,123927,123928,123929,22032,123932,22032,123935,123938],{},"如上图，我需要将",[33,123930,123931],{},"libcudnn_xxx_xxxxx.so.8.9.7",[33,123933,123934],{},"libcudnn_xxx_xxxxx.so.8",[33,123936,123937],{},"libcudnn_xxx_xxxxx.so","软链接",[26,123940,123942],{"className":121557,"code":123941,"language":121559,"meta":31,"style":31},"# 创建符号链接。对于每个 .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",[33,123943,123944,123949,123965,123979,123993,124007,124021,124035,124049,124054,124060,124065],{"__ignoreMap":31},[36,123945,123946],{"class":38,"line":39},[36,123947,123948],{"class":3943},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[36,123950,123951,123953,123956,123959,123962],{"class":38,"line":53},[36,123952,102],{"class":101},[36,123954,123955],{"class":105}," ln",[36,123957,123958],{"class":112}," -sf",[36,123960,123961],{"class":105}," libcudnn_cnn_train.so.8.9.7",[36,123963,123964],{"class":105}," libcudnn_cnn_train.so.8\n",[36,123966,123967,123969,123971,123973,123976],{"class":38,"line":196},[36,123968,102],{"class":101},[36,123970,123955],{"class":105},[36,123972,123958],{"class":112},[36,123974,123975],{"class":105}," libcudnn_adv_infer.so.8.9.7",[36,123977,123978],{"class":105}," libcudnn_adv_infer.so.8\n",[36,123980,123981,123983,123985,123987,123990],{"class":38,"line":642},[36,123982,102],{"class":101},[36,123984,123955],{"class":105},[36,123986,123958],{"class":112},[36,123988,123989],{"class":105}," libcudnn_adv_train.so.8.9.7",[36,123991,123992],{"class":105}," libcudnn_adv_train.so.8\n",[36,123994,123995,123997,123999,124001,124004],{"class":38,"line":655},[36,123996,102],{"class":101},[36,123998,123955],{"class":105},[36,124000,123958],{"class":112},[36,124002,124003],{"class":105}," libcudnn_cnn_infer.so.8.9.7",[36,124005,124006],{"class":105}," libcudnn_cnn_infer.so.8\n",[36,124008,124009,124011,124013,124015,124018],{"class":38,"line":662},[36,124010,102],{"class":101},[36,124012,123955],{"class":105},[36,124014,123958],{"class":112},[36,124016,124017],{"class":105}," libcudnn.so.8.9.7",[36,124019,124020],{"class":105}," libcudnn.so.8\n",[36,124022,124023,124025,124027,124029,124032],{"class":38,"line":667},[36,124024,102],{"class":101},[36,124026,123955],{"class":105},[36,124028,123958],{"class":112},[36,124030,124031],{"class":105}," libcudnn_ops_infer.so.8.9.7",[36,124033,124034],{"class":105}," libcudnn_ops_infer.so.8\n",[36,124036,124037,124039,124041,124043,124046],{"class":38,"line":679},[36,124038,102],{"class":101},[36,124040,123955],{"class":105},[36,124042,123958],{"class":112},[36,124044,124045],{"class":105}," libcudnn_ops_train.so.8.9.7",[36,124047,124048],{"class":105}," libcudnn_ops_train.so.8\n",[36,124050,124051],{"class":38,"line":685},[36,124052,124053],{"class":3943},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[36,124055,124056,124058],{"class":38,"line":691},[36,124057,102],{"class":101},[36,124059,123844],{"class":105},[36,124061,124062],{"class":38,"line":696},[36,124063,124064],{"class":3943},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[36,124066,124067,124069,124072,124075,124077,124080],{"class":38,"line":702},[36,124068,30372],{"class":101},[36,124070,124071],{"class":112}," -l",[36,124073,124074],{"class":105}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[36,124076,1372],{"class":112},[36,124078,124079],{"class":105},".so",[36,124081,122282],{"class":112},[318,124083,124085],{"id":124084},"_355-常见问题","3.5.5 常见问题",[211,124087,124088],{},[214,124089,124090],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[26,124092,124094],{"className":121557,"code":124093,"language":121559,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[33,124095,124096],{"__ignoreMap":31},[36,124097,124098,124100,124102],{"class":38,"line":39},[36,124099,102],{"class":101},[36,124101,121617],{"class":105},[36,124103,124104],{"class":105}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,124106,124107],{},"blacklist-nouveau.conf文件内容如下：",[26,124109,124111],{"className":121557,"code":124110,"language":121559,"meta":31,"style":31},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[33,124112,124113,124121,124128,124140,124150],{"__ignoreMap":31},[36,124114,124115,124118],{"class":38,"line":39},[36,124116,124117],{"class":101},"blacklist",[36,124119,124120],{"class":105}," nouveau\n",[36,124122,124123,124125],{"class":38,"line":53},[36,124124,124117],{"class":101},[36,124126,124127],{"class":105}," lbm-nouveau\n",[36,124129,124130,124132,124135,124138],{"class":38,"line":196},[36,124131,2883],{"class":101},[36,124133,124134],{"class":105}," nouveau",[36,124136,124137],{"class":105}," modeset=",[36,124139,6787],{"class":112},[36,124141,124142,124145,124147],{"class":38,"line":642},[36,124143,124144],{"class":112},"alias",[36,124146,124134],{"class":105},[36,124148,124149],{"class":105}," off\n",[36,124151,124152,124154,124157],{"class":38,"line":655},[36,124153,124144],{"class":112},[36,124155,124156],{"class":105}," lbm-nouveau",[36,124158,124149],{"class":105},[19,124160,124161],{},"接着运行下方命令",[26,124163,124165],{"className":121557,"code":124164,"language":121559,"meta":31,"style":31},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[33,124166,124167,124177,124182],{"__ignoreMap":31},[36,124168,124169,124171,124174],{"class":38,"line":39},[36,124170,102],{"class":101},[36,124172,124173],{"class":105}," update-initramfs",[36,124175,124176],{"class":112}," -u\n",[36,124178,124179],{"class":38,"line":53},[36,124180,124181],{"class":101},"或者\n",[36,124183,124184,124186,124189],{"class":38,"line":196},[36,124185,102],{"class":101},[36,124187,124188],{"class":105}," dracut",[36,124190,124191],{"class":112}," --force\n",[19,124193,124194],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[26,124196,124198],{"className":121557,"code":124197,"language":121559,"meta":31,"style":31},"lsmod | grep nouveau\n",[33,124199,124200],{"__ignoreMap":31},[36,124201,124202,124205,124207,124209],{"class":38,"line":39},[36,124203,124204],{"class":101},"lsmod",[36,124206,1381],{"class":46},[36,124208,33845],{"class":101},[36,124210,124120],{"class":105},[211,124212,124213],{"start":53},[214,124214,124215],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[26,124217,124219],{"className":121557,"code":124218,"language":121559,"meta":31,"style":31},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[33,124220,124221],{"__ignoreMap":31},[36,124222,124223,124225,124227],{"class":38,"line":39},[36,124224,102],{"class":101},[36,124226,121617],{"class":105},[36,124228,124229],{"class":105}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,124231,124232],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[26,124234,124236],{"className":121557,"code":124235,"language":121559,"meta":31,"style":31},"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",[33,124237,124238,124246,124254,124262,124269,124277,124287,124295],{"__ignoreMap":31},[36,124239,124240,124243],{"class":38,"line":39},[36,124241,124242],{"class":101},"Section",[36,124244,124245],{"class":105}," \"OutputClass\"\n",[36,124247,124248,124251],{"class":38,"line":53},[36,124249,124250],{"class":101},"   Identifier",[36,124252,124253],{"class":105}," \"nvidia\"\n",[36,124255,124256,124259],{"class":38,"line":196},[36,124257,124258],{"class":101},"   MatchDriver",[36,124260,124261],{"class":105}," \"nvidia-drm\"\n",[36,124263,124264,124267],{"class":38,"line":642},[36,124265,124266],{"class":101},"   Driver",[36,124268,124253],{"class":105},[36,124270,124271,124274],{"class":38,"line":655},[36,124272,124273],{"class":101},"   Option",[36,124275,124276],{"class":105}," \"AllowEmptyInitialConfiguration\"\n",[36,124278,124279,124281,124284],{"class":38,"line":662},[36,124280,124273],{"class":101},[36,124282,124283],{"class":105}," \"PrimaryGPU\"",[36,124285,124286],{"class":105}," \"yes\"\n",[36,124288,124289,124292],{"class":38,"line":667},[36,124290,124291],{"class":101},"   ModulePath",[36,124293,124294],{"class":105}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[36,124296,124297],{"class":38,"line":679},[36,124298,124299],{"class":101},"EndSection\n",[211,124301,124302],{"start":196},[214,124303,124304],{},"安装N卡驱动提示错误",[26,124306,124308],{"className":123850,"code":124307,"language":123852,"meta":123853,"style":31},"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",[33,124309,124310],{"__ignoreMap":31},[36,124311,124312],{"class":38,"line":39},[36,124313,124307],{},[211,124315,124316],{},[214,124317,124318],{},"检查当前运行的内核版本：",[19,124320,124321],{},"运行以下命令以查看你当前正在使用的内核版本：",[26,124323,124325],{"className":120330,"code":124324,"language":120332,"meta":31,"style":31},"uname -r\n",[33,124326,124327],{"__ignoreMap":31},[36,124328,124329,124331],{"class":38,"line":39},[36,124330,73758],{"class":101},[36,124332,124333],{"class":112}," -r\n",[211,124335,124336],{"start":53},[214,124337,124338],{},"安装内核开发文件：",[19,124340,124341,124342,124345],{},"确保你已经安装了与当前内核版本相匹配的 ",[33,124343,124344],{},"kernel-devel"," 包。运行以下命令来安装：",[26,124347,124349],{"className":120330,"code":124348,"language":120332,"meta":31,"style":31},"sudo dnf install kernel-devel-$(uname -r)\n",[33,124350,124351],{"__ignoreMap":31},[36,124352,124353,124355,124357,124359,124362,124364,124366,124368],{"class":38,"line":39},[36,124354,102],{"class":101},[36,124356,106],{"class":105},[36,124358,109],{"class":105},[36,124360,124361],{"class":105}," kernel-devel-",[36,124363,28715],{"class":42},[36,124365,73758],{"class":101},[36,124367,122673],{"class":112},[36,124369,922],{"class":42},[19,124371,124372],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[211,124374,124375],{"start":196},[214,124376,124377],{},"安装内核源代码（如果需要）：",[19,124379,124380],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[26,124382,124384],{"className":120330,"code":124383,"language":120332,"meta":31,"style":31},"sudo dnf install kernel-headers kernel-source\n",[33,124385,124386],{"__ignoreMap":31},[36,124387,124388,124390,124392,124394,124397],{"class":38,"line":39},[36,124389,102],{"class":101},[36,124391,106],{"class":105},[36,124393,109],{"class":105},[36,124395,124396],{"class":105}," kernel-headers",[36,124398,124399],{"class":105}," kernel-source\n",[211,124401,124402],{"start":642},[214,124403,124404],{},"检查安装：",[19,124406,124407,124408,124411],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[33,124409,124410],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[26,124413,124415],{"className":120330,"code":124414,"language":120332,"meta":31,"style":31},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[33,124416,124417],{"__ignoreMap":31},[36,124418,124419,124421],{"class":38,"line":39},[36,124420,30372],{"class":101},[36,124422,124423],{"class":105}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,124425,124426,124427,124430],{},"如果仍然遇到问题，可以通过 ",[33,124428,124429],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[3785,124432,124433],{},"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":31,"searchDepth":53,"depth":53,"links":124435},[124436,124440,124450,124454,124455],{"id":121533,"depth":53,"text":121534,"children":124437},[124438,124439],{"id":121543,"depth":196,"text":121544},{"id":121553,"depth":196,"text":121554},{"id":121753,"depth":53,"text":121754,"children":124441},[124442,124443,124444,124445,124446,124447,124448,124449],{"id":121757,"depth":196,"text":121758},{"id":121827,"depth":196,"text":121828},{"id":121916,"depth":196,"text":121917},{"id":122161,"depth":196,"text":122162},{"id":122231,"depth":196,"text":122232},{"id":122298,"depth":196,"text":122299},{"id":122333,"depth":196,"text":122334},{"id":122388,"depth":196,"text":122389},{"id":122439,"depth":53,"text":122440,"children":124451},[124452,124453],{"id":122443,"depth":196,"text":122444},{"id":122523,"depth":196,"text":122524},{"id":122709,"depth":53,"text":122710},{"id":122882,"depth":53,"text":122883,"children":124456},[124457,124458,124459,124460,124461],{"id":122886,"depth":196,"text":122887},{"id":122927,"depth":196,"text":122928},{"id":123214,"depth":196,"text":123215},{"id":123588,"depth":196,"text":123589},{"id":124084,"depth":196,"text":124085},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":121525,"description":26998},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":124468,"title":124469,"body":124470,"description":26998,"extension":3817,"meta":124810,"navigation":658,"path":124811,"seo":124812,"stem":124813,"__hash__":124814},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":124471,"toc":124808},[124472,124475,124480,124483,124729,124734,124737,124773,124776,124805],[10,124473,124469],{"id":124474},"_4-命令教程长期积累",[211,124476,124477],{},[214,124478,124479],{},"大多数命令",[19,124481,124482],{},"常用 Linux 命令速查：",[26,124484,124486],{"className":120330,"code":124485,"language":120332,"meta":31,"style":31},"# 文件与目录\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",[33,124487,124488,124493,124500,124507,124515,124522,124529,124537,124545,124552,124559,124567,124571,124576,124583,124591,124598,124602,124607,124614,124622,124630,124638,124646,124650,124655,124663,124670,124677,124685,124693,124697,124702,124711,124720],{"__ignoreMap":31},[36,124489,124490],{"class":38,"line":39},[36,124491,124492],{"class":3943},"# 文件与目录\n",[36,124494,124495,124497],{"class":38,"line":53},[36,124496,30372],{"class":101},[36,124498,124499],{"class":3943},"        # 列出目录内容\n",[36,124501,124502,124504],{"class":38,"line":196},[36,124503,104803],{"class":112},[36,124505,124506],{"class":3943},"        # 切换目录\n",[36,124508,124509,124512],{"class":38,"line":642},[36,124510,124511],{"class":112},"pwd",[36,124513,124514],{"class":3943},"       # 显示当前路径\n",[36,124516,124517,124519],{"class":38,"line":655},[36,124518,104793],{"class":101},[36,124520,124521],{"class":3943},"     # 创建目录\n",[36,124523,124524,124526],{"class":38,"line":662},[36,124525,28936],{"class":101},[36,124527,124528],{"class":3943},"        # 删除文件或目录\n",[36,124530,124531,124534],{"class":38,"line":667},[36,124532,124533],{"class":101},"cp",[36,124535,124536],{"class":3943},"        # 复制文件或目录\n",[36,124538,124539,124542],{"class":38,"line":679},[36,124540,124541],{"class":101},"mv",[36,124543,124544],{"class":3943},"        # 移动\u002F重命名文件或目录\n",[36,124546,124547,124549],{"class":38,"line":685},[36,124548,2097],{"class":101},[36,124550,124551],{"class":3943},"     # 创建空文件\n",[36,124553,124554,124556],{"class":38,"line":691},[36,124555,123799],{"class":101},[36,124557,124558],{"class":3943},"       # 查看文件内容\n",[36,124560,124561,124564],{"class":38,"line":696},[36,124562,124563],{"class":101},"head\u002Ftail",[36,124565,124566],{"class":3943}," # 查看文件头部\u002F尾部\n",[36,124568,124569],{"class":38,"line":702},[36,124570,659],{"emptyLinePlaceholder":658},[36,124572,124573],{"class":38,"line":708},[36,124574,124575],{"class":3943},"# 权限管理\n",[36,124577,124578,124580],{"class":38,"line":713},[36,124579,28227],{"class":101},[36,124581,124582],{"class":3943},"     # 修改文件权限\n",[36,124584,124585,124588],{"class":38,"line":719},[36,124586,124587],{"class":101},"chown",[36,124589,124590],{"class":3943},"     # 修改文件所有者\n",[36,124592,124593,124595],{"class":38,"line":725},[36,124594,102],{"class":101},[36,124596,124597],{"class":3943},"      # 以管理员身份执行\n",[36,124599,124600],{"class":38,"line":731},[36,124601,659],{"emptyLinePlaceholder":658},[36,124603,124604],{"class":38,"line":736},[36,124605,124606],{"class":3943},"# 系统信息\n",[36,124608,124609,124611],{"class":38,"line":742},[36,124610,73758],{"class":101},[36,124612,124613],{"class":3943},"     # 系统信息\n",[36,124615,124616,124619],{"class":38,"line":748},[36,124617,124618],{"class":101},"df",[36,124620,124621],{"class":3943},"        # 磁盘使用情况\n",[36,124623,124624,124627],{"class":38,"line":754},[36,124625,124626],{"class":101},"free",[36,124628,124629],{"class":3943},"      # 内存使用情况\n",[36,124631,124632,124635],{"class":38,"line":760},[36,124633,124634],{"class":101},"top\u002Fhtop",[36,124636,124637],{"class":3943},"  # 进程监控\n",[36,124639,124640,124643],{"class":38,"line":766},[36,124641,124642],{"class":101},"ps",[36,124644,124645],{"class":3943},"        # 查看进程\n",[36,124647,124648],{"class":38,"line":772},[36,124649,659],{"emptyLinePlaceholder":658},[36,124651,124652],{"class":38,"line":778},[36,124653,124654],{"class":3943},"# 网络\n",[36,124656,124657,124660],{"class":38,"line":783},[36,124658,124659],{"class":101},"ping",[36,124661,124662],{"class":3943},"      # 测试网络连通性\n",[36,124664,124665,124667],{"class":38,"line":789},[36,124666,30460],{"class":101},[36,124668,124669],{"class":3943},"      # 发送 HTTP 请求\n",[36,124671,124672,124674],{"class":38,"line":795},[36,124673,123323],{"class":101},[36,124675,124676],{"class":3943},"      # 下载文件\n",[36,124678,124679,124682],{"class":38,"line":801},[36,124680,124681],{"class":101},"ssh",[36,124683,124684],{"class":3943},"       # 远程登录\n",[36,124686,124687,124690],{"class":38,"line":807},[36,124688,124689],{"class":101},"scp",[36,124691,124692],{"class":3943},"       # 远程文件传输\n",[36,124694,124695],{"class":38,"line":813},[36,124696,659],{"emptyLinePlaceholder":658},[36,124698,124699],{"class":38,"line":819},[36,124700,124701],{"class":3943},"# 包管理（Debian\u002FUbuntu）\n",[36,124703,124704,124706,124708],{"class":38,"line":824},[36,124705,120402],{"class":101},[36,124707,120381],{"class":105},[36,124709,124710],{"class":3943},"   # 更新软件源\n",[36,124712,124713,124715,124717],{"class":38,"line":829},[36,124714,120402],{"class":101},[36,124716,109],{"class":105},[36,124718,124719],{"class":3943},"  # 安装软件包\n",[36,124721,124722,124724,124726],{"class":38,"line":851},[36,124723,120402],{"class":101},[36,124725,29692],{"class":105},[36,124727,124728],{"class":3943},"   # 卸载软件包\n",[211,124730,124731],{"start":53},[214,124732,124733],{},"KDE Dolphin 以root打开",[19,124735,124736],{},"kde5",[26,124738,124740],{"className":120330,"code":124739,"language":120332,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[33,124741,124742],{"__ignoreMap":31},[36,124743,124744,124747,124750,124753,124755,124757,124760,124763,124765,124768,124770],{"class":38,"line":39},[36,124745,124746],{"class":101},"pkexec",[36,124748,124749],{"class":105}," env",[36,124751,124752],{"class":105}," DISPLAY=",[36,124754,31754],{"class":42},[36,124756,31812],{"class":105},[36,124758,124759],{"class":42},"$XAUTHORITY ",[36,124761,124762],{"class":105},"KDE_SESSION_VERSION=",[36,124764,4194],{"class":112},[36,124766,124767],{"class":105}," KDE_FULL_SESSION=",[36,124769,5098],{"class":112},[36,124771,124772],{"class":105}," dolphin\n",[19,124774,124775],{},"kde6",[26,124777,124779],{"className":120330,"code":124778,"language":120332,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[33,124780,124781],{"__ignoreMap":31},[36,124782,124783,124785,124787,124789,124791,124793,124795,124797,124799,124801,124803],{"class":38,"line":39},[36,124784,124746],{"class":101},[36,124786,124749],{"class":105},[36,124788,124752],{"class":105},[36,124790,31754],{"class":42},[36,124792,31812],{"class":105},[36,124794,124759],{"class":42},[36,124796,124762],{"class":105},[36,124798,4219],{"class":112},[36,124800,124767],{"class":105},[36,124802,5098],{"class":112},[36,124804,124772],{"class":105},[3785,124806,124807],{},"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":31,"searchDepth":53,"depth":53,"links":124809},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":124469,"description":26998},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":124816,"title":124817,"body":124818,"description":26998,"extension":3817,"meta":124832,"navigation":658,"path":124833,"seo":124834,"stem":124835,"__hash__":124836},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":124819,"toc":124830},[124820,124823],[10,124821,124817],{"id":124822},"_5-各种环境配置",[19,124824,124825],{},[4113,124826,124829],{"href":124827,"rel":124828},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[27481],"电控组环境搭建大全",{"title":31,"searchDepth":53,"depth":53,"links":124831},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":124817,"description":26998},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":124838,"title":124839,"body":124840,"description":26998,"extension":3817,"meta":125188,"navigation":658,"path":125189,"seo":125190,"stem":125191,"__hash__":125192},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":124841,"toc":125180},[124842,124845,124849,124853,124857,124862,124869,124873,125166,125170,125177],[10,124843,124839],{"id":124844},"_6-拓展功能",[14,124846,124848],{"id":124847},"_61-wine","6.1 Wine",[14,124850,124852],{"id":124851},"_62-android","6.2 Android",[318,124854,124856],{"id":124855},"_621-i卡a卡","6.2.1 I卡、A卡",[211,124858,124859],{},[214,124860,124861],{},"Wayland-Waydroid(体验超级好)",[19,124863,124864,124865],{},"Waydroid 官网与安装指南：",[4113,124866,124867],{"href":124867,"rel":124868},"https:\u002F\u002Fwaydro.id\u002F",[27481],[318,124870,124872],{"id":124871},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[211,124874,124875],{},[214,124876,124877,124878,124880,124881,124885,124887,124890,124895,125092],{},"QEMU-KVM虚拟机 + BlissOS-X86",[57273,124879],{},"BlissOS 官网下载：",[4113,124882,124883],{"href":124883,"rel":124884},"https:\u002F\u002Fblissos.org\u002F",[27481],[57273,124886],{},[5198,124888],{"alt":31,"src":124889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[211,124891,124892],{"start":196},[214,124893,124894],{},"比较推荐的配置",[26,124896,124898],{"className":120330,"code":124897,"language":120332,"meta":31,"style":31},"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",[33,124899,124900,124907,124917,124927,124937,124949,124959,124966,124976,124985,124994,125004,125014,125023,125033,125043,125055,125065,125074,125084],{"__ignoreMap":31},[36,124901,124902,124905],{"class":38,"line":39},[36,124903,124904],{"class":101},"qemu-system-x86_64",[36,124906,28294],{"class":112},[36,124908,124909,124912,124915],{"class":38,"line":53},[36,124910,124911],{"class":112},"        -M",[36,124913,124914],{"class":105}," q35,vmport=off",[36,124916,28294],{"class":112},[36,124918,124919,124922,124925],{"class":38,"line":196},[36,124920,124921],{"class":112},"        -accel",[36,124923,124924],{"class":105}," kvm",[36,124926,28294],{"class":112},[36,124928,124929,124932,124935],{"class":38,"line":642},[36,124930,124931],{"class":112},"        -cpu",[36,124933,124934],{"class":105}," qemu64,+sse3,+sse4.2",[36,124936,28294],{"class":112},[36,124938,124939,124942,124945,124947],{"class":38,"line":655},[36,124940,124941],{"class":112},"        -smp",[36,124943,124944],{"class":105}," 8,cores=",[36,124946,4168],{"class":112},[36,124948,28294],{"class":112},[36,124950,124951,124954,124957],{"class":38,"line":662},[36,124952,124953],{"class":112},"        -m",[36,124955,124956],{"class":105}," 6G",[36,124958,28294],{"class":112},[36,124960,124961,124964],{"class":38,"line":667},[36,124962,124963],{"class":112},"        -usb",[36,124965,28294],{"class":112},[36,124967,124968,124971,124974],{"class":38,"line":679},[36,124969,124970],{"class":112},"        -device",[36,124972,124973],{"class":105}," virtio-tablet",[36,124975,28294],{"class":112},[36,124977,124978,124980,124983],{"class":38,"line":685},[36,124979,124970],{"class":112},[36,124981,124982],{"class":105}," virtio-keyboard",[36,124984,28294],{"class":112},[36,124986,124987,124989,124992],{"class":38,"line":691},[36,124988,124970],{"class":112},[36,124990,124991],{"class":105}," usb-tablet",[36,124993,28294],{"class":112},[36,124995,124996,124999,125002],{"class":38,"line":696},[36,124997,124998],{"class":112},"        -bios",[36,125000,125001],{"class":105}," OVMF-pure-efi64.fd",[36,125003,28294],{"class":112},[36,125005,125006,125009,125012],{"class":38,"line":702},[36,125007,125008],{"class":112},"        -net",[36,125010,125011],{"class":105}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[36,125013,28294],{"class":112},[36,125015,125016,125018,125021],{"class":38,"line":708},[36,125017,125008],{"class":112},[36,125019,125020],{"class":105}," nic,model=virtio",[36,125022,28294],{"class":112},[36,125024,125025,125028,125031],{"class":38,"line":713},[36,125026,125027],{"class":112},"        -audio",[36,125029,125030],{"class":105}," sdl,model=hda",[36,125032,28294],{"class":112},[36,125034,125035,125038,125041],{"class":38,"line":719},[36,125036,125037],{"class":112},"        -display",[36,125039,125040],{"class":105}," sdl,gl=on,show-cursor=on",[36,125042,28294],{"class":112},[36,125044,125045,125047,125050,125053],{"class":38,"line":725},[36,125046,124970],{"class":112},[36,125048,125049],{"class":105}," virtio-vga-gl,xres=1920,yres=",[36,125051,125052],{"class":112},"1080",[36,125054,28294],{"class":112},[36,125056,125057,125060,125063],{"class":38,"line":731},[36,125058,125059],{"class":112},"        -drive",[36,125061,125062],{"class":105}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[36,125064,28294],{"class":112},[36,125066,125067,125069,125072],{"class":38,"line":736},[36,125068,125059],{"class":112},[36,125070,125071],{"class":105}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[36,125073,28294],{"class":112},[36,125075,125076,125079,125082],{"class":38,"line":742},[36,125077,125078],{"class":112},"        -monitor",[36,125080,125081],{"class":105}," stdio",[36,125083,28294],{"class":112},[36,125085,125086,125089],{"class":38,"line":748},[36,125087,125088],{"class":112},"        -serial",[36,125090,125091],{"class":105}," none\n",[211,125093,125094],{"start":655},[214,125095,125096,125097],{},"常用操作：",[211,125098,125099,125102,125158],{},[214,125100,125101],{},"全屏：Ctrl+Alt+F",[214,125103,125104,125105,125110],{},"adb调试",[211,125106,125107],{},[214,125108,125109],{},"使Linux与Android用ADB连接。",[26,125111,125113],{"className":120330,"code":125112,"language":120332,"meta":31,"style":31},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[33,125114,125115,125120,125131,125136,125148,125153],{"__ignoreMap":31},[36,125116,125117],{"class":38,"line":39},[36,125118,125119],{"class":3943},"# 连接安卓\n",[36,125121,125122,125125,125128],{"class":38,"line":53},[36,125123,125124],{"class":101},"adb",[36,125126,125127],{"class":105}," connect",[36,125129,125130],{"class":112}," 127.0.0.1\n",[36,125132,125133],{"class":38,"line":196},[36,125134,125135],{"class":3943},"# 打开shell\n",[36,125137,125138,125140,125142,125145],{"class":38,"line":642},[36,125139,125124],{"class":101},[36,125141,30494],{"class":112},[36,125143,125144],{"class":105}," 127.0.0.1:5555",[36,125146,125147],{"class":105}," shell\n",[36,125149,125150],{"class":38,"line":655},[36,125151,125152],{"class":3943},"# 使用root权限\n",[36,125154,125155],{"class":38,"line":662},[36,125156,125157],{"class":101},"su\n",[214,125159,125160,125161],{},"中文输入法",[211,125162,125163],{},[214,125164,125165],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,125167,125169],{"id":125168},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,125171,125172,125173],{},"rEFInd 官网与文档：",[4113,125174,125175],{"href":125175,"rel":125176},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[27481],[3785,125178,125179],{},"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":31,"searchDepth":53,"depth":53,"links":125181},[125182,125183,125187],{"id":124847,"depth":53,"text":124848},{"id":124851,"depth":53,"text":124852,"children":125184},[125185,125186],{"id":124855,"depth":196,"text":124856},{"id":124871,"depth":196,"text":124872},{"id":125168,"depth":53,"text":125169},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":124839,"description":26998},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":125194,"title":125195,"body":125196,"description":26998,"extension":3817,"meta":128495,"navigation":658,"path":128496,"seo":128497,"stem":128498,"__hash__":128499},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":125197,"toc":128469},[125198,125201,125205,125208,125215,125465,125468,125540,125543,125547,125551,125556,125559,125562,125565,125570,125573,125576,125579,125584,125587,125592,125595,125598,125603,125606,125611,125614,125618,125622,125625,125630,125633,125647,125650,125653,125662,125665,125674,125677,125680,125689,125692,125701,125704,125707,125716,125719,125722,125737,125740,125743,125752,125757,125760,125763,125772,125775,125784,125787,125796,125799,125808,125813,125816,125824,125829,125832,125841,125844,125852,125857,125860,125869,125872,125875,125879,125882,125887,125890,125895,125909,125914,125919,125930,125935,125941,125946,125961,125966,125969,125974,125979,125984,125992,125997,126004,126009,126020,126025,126028,126032,126035,126038,126043,126046,126065,126070,126073,126082,126087,126090,126112,126115,126145,126148,126153,126156,126170,126175,126194,126197,126200,126205,126217,126222,126227,126230,126235,126238,126253,126256,126261,126266,126270,126275,126315,126318,126322,126328,126334,126339,126342,126349,126354,126361,126364,126367,126374,126388,126391,126451,126454,126468,126480,126483,126486,126489,126553,126556,126559,126562,126582,126585,126590,126597,126601,126604,126608,126613,126618,126622,126625,126628,126670,126675,126678,126700,126715,126717,126722,126734,126794,126796,126798,126852,126854,126856,126862,126867,126870,126875,126879,126882,126944,126949,126952,126954,126958,126970,127052,127054,127056,127110,127116,127118,127122,127127,127129,127134,127138,127158,127193,127197,127200,127203,127206,127213,127216,127228,127231,127246,127249,127268,127316,127319,127336,127339,127353,127358,127361,127370,127385,127397,127435,127440,127449,127454,127459,127485,127494,127498,127502,127507,127510,127514,127518,127523,127526,127531,127534,127539,127542,127547,127550,127554,127559,127562,127567,127570,127574,127579,127582,127587,127590,127595,127598,127602,127607,127610,127615,127618,127623,127626,127630,127635,127638,127643,127646,127651,127654,127659,127662,127667,127670,127675,127678,127682,127687,127690,127695,127702,127706,127711,127714,127719,127722,127726,127731,127734,127737,127740,127743,127746,127750,127753,127763,127768,127773,127795,127800,127805,127812,127816,127821,127824,127827,127832,127835,127838,127841,127844,127847,127850,127853,127856,127859,127862,127865,127868,127873,127878,127883,127888,127893,127898,127903,127906,127910,127913,127917,127922,127927,127932,127937,127941,127947,127955,127960,127963,127968,127983,127986,127991,128025,128040,128043,128098,128124,128136,128139,128148,128151,128166,128171,128174,128180,128185,128188,128193,128196,128201,128206,128213,128216,128231,128234,128269,128274,128282,128320,128323,128326,128331,128334,128339,128350,128384,128389,128392,128401,128406,128412,128415,128420,128429,128434,128437,128440,128445,128453,128456,128461,128466],[10,125199,125195],{"id":125200},"_7-其他操作",[14,125202,125204],{"id":125203},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,125206,125207],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,125209,125210,125211,125214],{},"进入工控机的硬盘目录，进入",[33,125212,125213],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[26,125216,125220],{"className":125217,"code":125218,"language":125219,"meta":31,"style":31},"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",[33,125221,125222,125230,125241,125248,125255,125267,125274,125286,125297,125308,125315,125322,125329,125341,125353,125360,125372,125384,125391,125403,125415,125427,125438,125445,125456],{"__ignoreMap":31},[36,125223,125224,125227],{"class":38,"line":39},[36,125225,125226],{"class":54857},"network",[36,125228,125229],{"class":42},": \n",[36,125231,125232,125235,125237,125239],{"class":38,"line":53},[36,125233,125234],{"class":54857},"  version",[36,125236,54994],{"class":42},[36,125238,498],{"class":112},[36,125240,6377],{"class":42},[36,125242,125243,125246],{"class":38,"line":196},[36,125244,125245],{"class":54857},"  wifis",[36,125247,125229],{"class":42},[36,125249,125250,125253],{"class":38,"line":642},[36,125251,125252],{"class":54857},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[36,125254,125229],{"class":42},[36,125256,125257,125260,125262,125265],{"class":38,"line":655},[36,125258,125259],{"class":54857},"      renderer",[36,125261,54994],{"class":42},[36,125263,125264],{"class":105},"NetworkManager",[36,125266,6377],{"class":42},[36,125268,125269,125272],{"class":38,"line":662},[36,125270,125271],{"class":54857},"      match",[36,125273,125229],{"class":42},[36,125275,125276,125279,125281,125284],{"class":38,"line":667},[36,125277,125278],{"class":54857},"        name",[36,125280,54994],{"class":42},[36,125282,125283],{"class":105},"\"wlan0\"",[36,125285,6377],{"class":42},[36,125287,125288,125291,125293,125295],{"class":38,"line":679},[36,125289,125290],{"class":54857},"      dhcp4",[36,125292,54994],{"class":42},[36,125294,5098],{"class":112},[36,125296,6377],{"class":42},[36,125298,125299,125302,125304,125306],{"class":38,"line":685},[36,125300,125301],{"class":54857},"      dhcp6",[36,125303,54994],{"class":42},[36,125305,5098],{"class":112},[36,125307,6377],{"class":42},[36,125309,125310,125313],{"class":38,"line":691},[36,125311,125312],{"class":54857},"      access-points",[36,125314,125229],{"class":42},[36,125316,125317,125320],{"class":38,"line":696},[36,125318,125319],{"class":105},"        \"EMIS_Vinci_Robocon_5G\"",[36,125321,125229],{"class":42},[36,125323,125324,125327],{"class":38,"line":702},[36,125325,125326],{"class":54857},"          auth",[36,125328,125229],{"class":42},[36,125330,125331,125334,125336,125339],{"class":38,"line":708},[36,125332,125333],{"class":54857},"            key-management",[36,125335,54994],{"class":42},[36,125337,125338],{"class":105},"\"psk\"",[36,125340,6377],{"class":42},[36,125342,125343,125346,125348,125351],{"class":38,"line":713},[36,125344,125345],{"class":54857},"            password",[36,125347,54994],{"class":42},[36,125349,125350],{"class":105},"\"vinci666\"",[36,125352,6377],{"class":42},[36,125354,125355,125358],{"class":38,"line":719},[36,125356,125357],{"class":54857},"          networkmanager",[36,125359,125229],{"class":42},[36,125361,125362,125365,125367,125370],{"class":38,"line":725},[36,125363,125364],{"class":54857},"            uuid",[36,125366,54994],{"class":42},[36,125368,125369],{"class":105},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[36,125371,6377],{"class":42},[36,125373,125374,125377,125379,125382],{"class":38,"line":731},[36,125375,125376],{"class":54857},"            name",[36,125378,54994],{"class":42},[36,125380,125381],{"class":105},"\"EMIS_Vinci_Robocon_5G\"",[36,125383,6377],{"class":42},[36,125385,125386,125389],{"class":38,"line":736},[36,125387,125388],{"class":54857},"            passthrough",[36,125390,125229],{"class":42},[36,125392,125393,125396,125398,125401],{"class":38,"line":742},[36,125394,125395],{"class":54857},"              wifi-security.auth-alg",[36,125397,54994],{"class":42},[36,125399,125400],{"class":105},"\"open\"",[36,125402,6377],{"class":42},[36,125404,125405,125408,125410,125413],{"class":38,"line":748},[36,125406,125407],{"class":54857},"              ipv6.addr-gen-mode",[36,125409,54994],{"class":42},[36,125411,125412],{"class":105},"\"default\"",[36,125414,6377],{"class":42},[36,125416,125417,125420,125422,125425],{"class":38,"line":754},[36,125418,125419],{"class":54857},"              ipv6.ip6-privacy",[36,125421,54994],{"class":42},[36,125423,125424],{"class":105},"\"-1\"",[36,125426,6377],{"class":42},[36,125428,125429,125432,125434,125436],{"class":38,"line":760},[36,125430,125431],{"class":54857},"              proxy._",[36,125433,54994],{"class":42},[36,125435,11343],{"class":105},[36,125437,6377],{"class":42},[36,125439,125440,125443],{"class":38,"line":766},[36,125441,125442],{"class":54857},"      networkmanager",[36,125444,125229],{"class":42},[36,125446,125447,125450,125452,125454],{"class":38,"line":772},[36,125448,125449],{"class":54857},"        uuid",[36,125451,54994],{"class":42},[36,125453,125369],{"class":105},[36,125455,6377],{"class":42},[36,125457,125458,125460,125462],{"class":38,"line":778},[36,125459,125278],{"class":54857},[36,125461,54994],{"class":42},[36,125463,125464],{"class":105},"\"EMIS_Vinci_Robocon_5G\"\n",[19,125466,125467],{},"将其改为新wifi的名和密码：",[26,125469,125471],{"className":125217,"code":125470,"language":125219,"meta":31,"style":31},"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",[33,125472,125473,125479,125488,125494,125501,125510,125518,125524,125530],{"__ignoreMap":31},[36,125474,125475,125477],{"class":38,"line":39},[36,125476,125226],{"class":54857},[36,125478,888],{"class":42},[36,125480,125481,125483,125485],{"class":38,"line":53},[36,125482,125234],{"class":54857},[36,125484,54994],{"class":42},[36,125486,125487],{"class":112},"2\n",[36,125489,125490,125492],{"class":38,"line":196},[36,125491,125245],{"class":54857},[36,125493,888],{"class":42},[36,125495,125496,125499],{"class":38,"line":642},[36,125497,125498],{"class":54857},"    wlan0",[36,125500,888],{"class":42},[36,125502,125503,125505,125507],{"class":38,"line":655},[36,125504,125290],{"class":54857},[36,125506,54994],{"class":42},[36,125508,125509],{"class":112},"true\n",[36,125511,125512,125514,125516],{"class":38,"line":662},[36,125513,125301],{"class":54857},[36,125515,54994],{"class":42},[36,125517,125509],{"class":112},[36,125519,125520,125522],{"class":38,"line":667},[36,125521,125312],{"class":54857},[36,125523,888],{"class":42},[36,125525,125526,125528],{"class":38,"line":679},[36,125527,125319],{"class":105},[36,125529,888],{"class":42},[36,125531,125532,125535,125537],{"class":38,"line":685},[36,125533,125534],{"class":54857},"          password",[36,125536,54994],{"class":42},[36,125538,125539],{"class":105},"\"vinci666\"\n",[19,125541,125542],{},"工控机开机即可连上网。",[14,125544,125546],{"id":125545},"_72-ssh远程开发","7.2 SSH远程开发",[318,125548,125550],{"id":125549},"_721-环境准备","7.2.1 环境准备",[19,125552,125553],{},[4027,125554,125555],{},"1.硬件准备",[19,125557,125558],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,125560,125561],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,125563,125564],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,125566,125567],{},[4027,125568,125569],{},"2.设置固定IP",[19,125571,125572],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,125574,125575],{},"1.进入设置界面",[19,125577,125578],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,125580,125581],{},[5198,125582],{"alt":31,"src":125583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,125585,125586],{},"2.配置所连接的网络",[19,125588,125589],{},[5198,125590],{"alt":31,"src":125591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,125593,125594],{},"3.设置固定IP",[19,125596,125597],{},"查看当前IP地址。",[19,125599,125600],{},[5198,125601],{"alt":31,"src":125602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,125604,125605],{},"设置固定IP。",[19,125607,125608],{},[5198,125609],{"alt":31,"src":125610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,125612,125613],{},"至此，IP配置完毕。",[318,125615,125617],{"id":125616},"_722-环境搭建","7.2.2 环境搭建",[19,125619,125620],{},[4027,125621,29367],{},[19,125623,125624],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,125626,125627],{},[4027,125628,125629],{},"实现",[19,125631,125632],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[211,125634,125635,125638,125641,125644],{},[214,125636,125637],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[214,125639,125640],{},"远程主机启动SSH服务；",[214,125642,125643],{},"本地主机登陆远程主机；",[214,125645,125646],{},"实现数据传输。",[19,125648,125649],{},"1.安装SSH客户端与服务端",[19,125651,125652],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[26,125654,125656],{"className":123850,"code":125655,"language":123852,"meta":123853,"style":31}," sudo apt install openssh-server\n",[33,125657,125658],{"__ignoreMap":31},[36,125659,125660],{"class":38,"line":39},[36,125661,125655],{},[19,125663,125664],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[26,125666,125668],{"className":123850,"code":125667,"language":123852,"meta":123853,"style":31},"sudo apt install openssh-client\n",[33,125669,125670],{"__ignoreMap":31},[36,125671,125672],{"class":38,"line":39},[36,125673,125667],{},[19,125675,125676],{},"2.远程主机启动SSH服务",[19,125678,125679],{},"远程主机启动 ssh 服务命令如下：",[26,125681,125683],{"className":123850,"code":125682,"language":123852,"meta":123853,"style":31},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[33,125684,125685],{"__ignoreMap":31},[36,125686,125687],{"class":38,"line":39},[36,125688,125682],{},[19,125690,125691],{},"启动后可使用如下命令查看服务是否正常运行：",[26,125693,125695],{"className":123850,"code":125694,"language":123852,"meta":123853,"style":31},"ps -e | grep ssh\n",[33,125696,125697],{"__ignoreMap":31},[36,125698,125699],{"class":38,"line":39},[36,125700,125694],{},[19,125702,125703],{},"如果启动成功，会包含 sshd 程序。",[19,125705,125706],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[26,125708,125710],{"className":123850,"code":125709,"language":123852,"meta":123853,"style":31},"sudo systemctl enable ssh\n",[33,125711,125712],{"__ignoreMap":31},[36,125713,125714],{"class":38,"line":39},[36,125715,125709],{},[19,125717,125718],{},"3.本地远程登录",[19,125720,125721],{},"登录远程主机可以调用如下命令:",[26,125723,125725],{"className":120330,"code":125724,"language":120332,"meta":31,"style":31},"ssh -X 用户名@ip地址\n",[33,125726,125727],{"__ignoreMap":31},[36,125728,125729,125731,125734],{"class":38,"line":39},[36,125730,124681],{"class":101},[36,125732,125733],{"class":112}," -X",[36,125735,125736],{"class":105}," 用户名@ip地址\n",[19,125738,125739],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,125741,125742],{},"如果退出，可以调用exit命令：",[26,125744,125746],{"className":123850,"code":125745,"language":123852,"meta":123853,"style":31},"exit\n",[33,125747,125748],{"__ignoreMap":31},[36,125749,125750],{"class":38,"line":39},[36,125751,125745],{},[19,125753,125754],{},[4027,125755,125756],{},"4.实现数据传输",[19,125758,125759],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,125761,125762],{},"上传文件指令格式如下：",[26,125764,125766],{"className":123850,"code":125765,"language":123852,"meta":123853,"style":31},"scp 本地文件路径 账号@ip:路径\n",[33,125767,125768],{"__ignoreMap":31},[36,125769,125770],{"class":38,"line":39},[36,125771,125765],{},[19,125773,125774],{},"上传文件夹指令格式如下：",[26,125776,125778],{"className":123850,"code":125777,"language":123852,"meta":123853,"style":31},"scp -r 本地文件夹路径 账号@ip:路径\n",[33,125779,125780],{"__ignoreMap":31},[36,125781,125782],{"class":38,"line":39},[36,125783,125777],{},[19,125785,125786],{},"下载文件指令格式如下：",[26,125788,125790],{"className":123850,"code":125789,"language":123852,"meta":123853,"style":31},"scp 账号@ip:路径 本地文件夹路径\n",[33,125791,125792],{"__ignoreMap":31},[36,125793,125794],{"class":38,"line":39},[36,125795,125789],{},[19,125797,125798],{},"下载文件夹指令格式如下：",[26,125800,125802],{"className":123850,"code":125801,"language":123852,"meta":123853,"style":31},"scp -r 账号@ip:路径 本地文件夹路径\n",[33,125803,125804],{"__ignoreMap":31},[36,125805,125806],{"class":38,"line":39},[36,125807,125801],{},[19,125809,125810],{},[4027,125811,125812],{},"优化",[19,125814,125815],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[211,125817,125818,125821],{},[214,125819,125820],{},"本地生成密钥对；",[214,125822,125823],{},"将公钥上传至远程主机。",[19,125825,125826],{},[4027,125827,125828],{},"1.生成密钥对",[19,125830,125831],{},"本地客户端生成公私钥：（一路回车默认即可）",[26,125833,125835],{"className":123850,"code":125834,"language":123852,"meta":123853,"style":31},"ssh-keygen\n",[33,125836,125837],{"__ignoreMap":31},[36,125838,125839],{"class":38,"line":39},[36,125840,125834],{},[19,125842,125843],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[211,125845,125846,125849],{},[214,125847,125848],{},"id_rsa （私钥）；",[214,125850,125851],{},"id_rsa.pub (公钥)。",[19,125853,125854],{},[4027,125855,125856],{},"2.公钥上传",[19,125858,125859],{},"上传指令如下：",[26,125861,125863],{"className":123850,"code":125862,"language":123852,"meta":123853,"style":31},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[33,125864,125865],{"__ignoreMap":31},[36,125866,125867],{"class":38,"line":39},[36,125868,125862],{},[19,125870,125871],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,125873,125874],{},"以后再远程登录就无需录入密码了。",[318,125876,125878],{"id":125877},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,125880,125881],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,125883,125884],{},[4027,125885,125886],{},"1.准备工作",[19,125888,125889],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,125891,125892],{},[4027,125893,125894],{},"2.为VScode安装远程开发插件",[19,125896,125897,125898,125901,125902,125905,125906,224],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[33,125899,125900],{},"扩展：商店","的搜索栏输入",[33,125903,125904],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[33,125907,125908],{},"安装",[19,125910,125911],{},[5198,125912],{"alt":31,"src":125913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,125915,125916],{},[4027,125917,125918],{},"3.配置远程连接",[19,125920,125921,125922,125925,125926,125929],{},"步骤1：使用快捷键",[33,125923,125924],{},"ctrl + shift + p","打开命令输入窗口，并输入",[33,125927,125928],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,125931,125932],{},[5198,125933],{"alt":31,"src":125934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,125936,125937,125938,224],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[33,125939,125940],{},"Add New SSH Host",[19,125942,125943],{},[5198,125944],{"alt":31,"src":125945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,125947,125948,125949,125952,125953,125956,125957,125960],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[33,125950,125951],{},"ssh +X ubuntu@192.168.43.164","，其中，",[33,125954,125955],{},"ubuntu","需要替换为你的登录用户名，",[33,125958,125959],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,125962,125963],{},[5198,125964],{"alt":31,"src":125965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,125967,125968],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,125970,125971],{},[5198,125972],{"alt":31,"src":125973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,125975,125976],{},[5198,125977],{"alt":31,"src":125978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,125980,125981],{},[4027,125982,125983],{},"4.使用",[19,125985,125986,125987,125925,125989,125991],{},"步骤1：继续使用快捷键",[33,125988,125924],{},[33,125990,125928],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,125993,125994],{},[5198,125995],{"alt":31,"src":125996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,125998,125999,126000,126003],{},"或者，也可以点击侧边栏的",[33,126001,126002],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,126005,126006],{},[5198,126007],{"alt":31,"src":126008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,126010,126011,126012,126015,126016,126019],{},"步骤2：选择菜单栏的",[33,126013,126014],{},"文件","下的",[33,126017,126018],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,126021,126022],{},[5198,126023],{"alt":31,"src":126024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,126026,126027],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,126029,126031],{"id":126030},"_73-远程桌面","7.3 远程桌面",[19,126033,126034],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,126036,126037],{},"我们选择使用VNC来看。",[211,126039,126040],{},[214,126041,126042],{},"安装VNC服务器：",[19,126044,126045],{},"这里以TigerVNC为例进行安装：",[26,126047,126049],{"className":120330,"code":126048,"language":120332,"meta":31,"style":31},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[33,126050,126051],{"__ignoreMap":31},[36,126052,126053,126055,126057,126059,126062],{"class":38,"line":39},[36,126054,102],{"class":101},[36,126056,120351],{"class":105},[36,126058,109],{"class":105},[36,126060,126061],{"class":105}," tigervnc-standalone-server",[36,126063,126064],{"class":105}," tigervnc-common\n",[211,126066,126067],{"start":53},[214,126068,126069],{},"设置VNC密码：",[19,126071,126072],{},"为VNC用户设置密码，运行以下命令：",[26,126074,126076],{"className":120330,"code":126075,"language":120332,"meta":31,"style":31},"vncpasswd\n",[33,126077,126078],{"__ignoreMap":31},[36,126079,126080],{"class":38,"line":39},[36,126081,126075],{"class":101},[211,126083,126084],{"start":196},[214,126085,126086],{},"配置VNC启动脚本:",[19,126088,126089],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[26,126091,126093],{"className":120330,"code":126092,"language":120332,"meta":31,"style":31},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[33,126094,126095,126104],{"__ignoreMap":31},[36,126096,126097,126099,126101],{"class":38,"line":39},[36,126098,104793],{"class":101},[36,126100,32825],{"class":112},[36,126102,126103],{"class":105}," ~\u002F.vnc\n",[36,126105,126106,126109],{"class":38,"line":53},[36,126107,126108],{"class":101},"nano",[36,126110,126111],{"class":105}," ~\u002F.vnc\u002Fxstartup\n",[19,126113,126114],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[26,126116,126118],{"className":120330,"code":126117,"language":120332,"meta":31,"style":31},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[33,126119,126120,126125,126133,126140],{"__ignoreMap":31},[36,126121,126122],{"class":38,"line":39},[36,126123,126124],{"class":3943},"#!\u002Fbin\u002Fsh\n",[36,126126,126127,126130],{"class":38,"line":53},[36,126128,126129],{"class":112},"unset",[36,126131,126132],{"class":105}," SESSION_MANAGER\n",[36,126134,126135,126137],{"class":38,"line":196},[36,126136,126129],{"class":112},[36,126138,126139],{"class":105}," DBUS_SESSION_BUS_ADDRESS\n",[36,126141,126142],{"class":38,"line":642},[36,126143,126144],{"class":101},"gnome-session\n",[19,126146,126147],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[211,126149,126150],{"start":642},[214,126151,126152],{},"给予执行权限：",[19,126154,126155],{},"为xstartup文件设置执行权限：",[26,126157,126159],{"className":120330,"code":126158,"language":120332,"meta":31,"style":31},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[33,126160,126161],{"__ignoreMap":31},[36,126162,126163,126165,126168],{"class":38,"line":39},[36,126164,28227],{"class":101},[36,126166,126167],{"class":105}," +x",[36,126169,126111],{"class":105},[211,126171,126172],{"start":655},[214,126173,126174],{},"启动VNC服务器：",[26,126176,126178],{"className":120330,"code":126177,"language":120332,"meta":31,"style":31},"vncserver -geometry 1920x1080 -localhost=0\n",[33,126179,126180],{"__ignoreMap":31},[36,126181,126182,126185,126188,126191],{"class":38,"line":39},[36,126183,126184],{"class":101},"vncserver",[36,126186,126187],{"class":112}," -geometry",[36,126189,126190],{"class":105}," 1920x1080",[36,126192,126193],{"class":112}," -localhost=0\n",[19,126195,126196],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,126198,126199],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[211,126201,126202],{"start":662},[214,126203,126204],{},"查看已开启的VNC服务器：",[26,126206,126208],{"className":120330,"code":126207,"language":120332,"meta":31,"style":31},"vncserver -list\n",[33,126209,126210],{"__ignoreMap":31},[36,126211,126212,126214],{"class":38,"line":39},[36,126213,126184],{"class":101},[36,126215,126216],{"class":112}," -list\n",[19,126218,126219],{},[5198,126220],{"alt":31,"src":126221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[211,126223,126224],{"start":667},[214,126225,126226],{},"连接到VNC服务器：",[19,126228,126229],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[211,126231,126232],{"start":679},[214,126233,126234],{},"停止VNC服务器：",[19,126236,126237],{},"如果需要停止VNC服务器，可以使用以下命令：",[26,126239,126241],{"className":120330,"code":126240,"language":120332,"meta":31,"style":31},"vncserver -kill :1\n",[33,126242,126243],{"__ignoreMap":31},[36,126244,126245,126247,126250],{"class":38,"line":39},[36,126246,126184],{"class":101},[36,126248,126249],{"class":112}," -kill",[36,126251,126252],{"class":105}," :1\n",[19,126254,126255],{},"将:1替换为你实际使用的显示编号。",[19,126257,126258],{},[5198,126259],{"alt":31,"src":126260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,126262,126263],{},[5198,126264],{"alt":31,"src":126265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,126267,126269],{"id":126268},"_74-usb端口设置","7.4 USB端口设置",[19,126271,126272],{},[4027,126273,126274],{},"首先先配置好权限",[26,126276,126278],{"className":120330,"code":126277,"language":120332,"meta":31,"style":31},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[33,126279,126280,126285,126298,126305,126310],{"__ignoreMap":31},[36,126281,126282],{"class":38,"line":39},[36,126283,126284],{"class":3943},"# 将用户权限提高\n",[36,126286,126287,126289,126291,126293,126296],{"class":38,"line":53},[36,126288,102],{"class":101},[36,126290,30185],{"class":105},[36,126292,30188],{"class":112},[36,126294,126295],{"class":105}," dialout",[36,126297,30193],{"class":42},[36,126299,126300,126302],{"class":38,"line":196},[36,126301,30212],{"class":101},[36,126303,126304],{"class":105}," dialout\n",[36,126306,126307],{"class":38,"line":642},[36,126308,126309],{"class":3943},"# 查看下面命令是否输出dialout（若输出才正常）\n",[36,126311,126312],{"class":38,"line":655},[36,126313,126314],{"class":101},"groups\n",[19,126316,126317],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[318,126319,126321],{"id":126320},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,126323,126324,126327],{},[4027,126325,126326],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,126329,126330,126333],{},[4027,126331,126332],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,126335,126336],{},[4027,126337,126338],{},"流程如下：",[19,126340,126341],{},"（1）.查找设备idVendor和idProduct",[19,126343,126344,126345,126348],{},"接入两个USB设备，在终端调用指令",[33,126346,126347],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,126350,126351],{},[5198,126352],{"alt":31,"src":126353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,126355,126356,126357,126360],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[33,126358,126359],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,126362,126363],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,126365,126366],{},"（2）.编写映射规则",[19,126368,126369,126370,126373],{},"在",[33,126371,126372],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[26,126375,126377],{"className":120330,"code":126376,"language":120332,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[33,126378,126379],{"__ignoreMap":31},[36,126380,126381,126383,126385],{"class":38,"line":39},[36,126382,102],{"class":101},[36,126384,121617],{"class":105},[36,126386,126387],{"class":105}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,126389,126390],{},"输入如下内容：",[26,126392,126394],{"className":120330,"code":126393,"language":120332,"meta":31,"style":31},"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",[33,126395,126396,126426],{"__ignoreMap":31},[36,126397,126398,126401,126403,126406,126409,126412,126415,126417,126420,126423],{"class":38,"line":39},[36,126399,126400],{"class":42},"KERNEL",[36,126402,47],{"class":46},[36,126404,126405],{"class":105},"=\"ttyUSB*\",",[36,126407,126408],{"class":101}," ATTRS",[36,126410,126411],{"class":105},"{idVendor}==",[36,126413,126414],{"class":101},"\"10c4\"",[36,126416,4253],{"class":101},[36,126418,126419],{"class":105}," ATTRS{idProduct}==\"ea60\",",[36,126421,126422],{"class":105}," MODE:=\"0777\",",[36,126424,126425],{"class":105}," SYMLINK+=\"mylidar\"\n",[36,126427,126428,126430,126432,126434,126436,126438,126441,126443,126446,126448],{"class":38,"line":53},[36,126429,126400],{"class":42},[36,126431,47],{"class":46},[36,126433,126405],{"class":105},[36,126435,126408],{"class":101},[36,126437,126411],{"class":105},[36,126439,126440],{"class":101},"\"1a86\"",[36,126442,4253],{"class":101},[36,126444,126445],{"class":105}," ATTRS{idProduct}==\"7523\",",[36,126447,126422],{"class":105},[36,126449,126450],{"class":105}," SYMLINK+=\"mycar\"\n",[19,126452,126453],{},"代码解释：",[4875,126455,126456,126459,126462,126465],{},[214,126457,126458],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[214,126460,126461],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[214,126463,126464],{},"SYMLINK是符号连接，即绑定的别名；",[214,126466,126467],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,126469,126470,126471,126474,126477],{},"***小提示：***",[27175,126472,126473],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[33,126475,126476],{},"\u002Fetc\u002Fudev\u002Frule.d",[27175,126478,126479],{},"目录即可。",[19,126481,126482],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,126484,126485],{},"（3）.使规则生效",[19,126487,126488],{},"在终端下输入如下指令：",[26,126490,126492],{"className":120330,"code":126491,"language":120332,"meta":31,"style":31},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[33,126493,126494,126499,126511,126522,126526,126531,126544],{"__ignoreMap":31},[36,126495,126496],{"class":38,"line":39},[36,126497,126498],{"class":3943},"# Ubuntu用下方命令\n",[36,126500,126501,126503,126505,126508],{"class":38,"line":53},[36,126502,102],{"class":101},[36,126504,123082],{"class":105},[36,126506,126507],{"class":105}," udev",[36,126509,126510],{"class":105}," reload\n",[36,126512,126513,126515,126517,126519],{"class":38,"line":196},[36,126514,102],{"class":101},[36,126516,123082],{"class":105},[36,126518,126507],{"class":105},[36,126520,126521],{"class":105}," restart\n",[36,126523,126524],{"class":38,"line":642},[36,126525,659],{"emptyLinePlaceholder":658},[36,126527,126528],{"class":38,"line":655},[36,126529,126530],{"class":3943},"#Fedora用下方命令\n",[36,126532,126533,126535,126538,126541],{"class":38,"line":662},[36,126534,102],{"class":101},[36,126536,126537],{"class":105}," udevadm",[36,126539,126540],{"class":105}," control",[36,126542,126543],{"class":112}," --reload\n",[36,126545,126546,126548,126550],{"class":38,"line":667},[36,126547,102],{"class":101},[36,126549,126537],{"class":105},[36,126551,126552],{"class":105}," trigger\n",[19,126554,126555],{},"再重新插拔设备即可。",[19,126557,126558],{},"（4）.测试",[19,126560,126561],{},"终端下输入如下指令",[26,126563,126565],{"className":120330,"code":126564,"language":120332,"meta":31,"style":31},"ll \u002Fdev | grep ttyUSB\n",[33,126566,126567],{"__ignoreMap":31},[36,126568,126569,126572,126575,126577,126579],{"class":38,"line":39},[36,126570,126571],{"class":101},"ll",[36,126573,126574],{"class":105}," \u002Fdev",[36,126576,1381],{"class":46},[36,126578,33845],{"class":101},[36,126580,126581],{"class":105}," ttyUSB\n",[19,126583,126584],{},"运行结果如下：",[19,126586,126587],{},[5198,126588],{"alt":31,"src":126589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,126591,126592,126593,126596],{},"也可以多次插拔USB设备，会发现设备端口",[33,126594,126595],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,126598,126599],{},[4027,126600,120998],{},[19,126602,126603],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[318,126605,126607],{"id":126606},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,126609,126610,126612],{},[4027,126611,126326],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,126614,126615,126617],{},[4027,126616,126332],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,126619,126620],{},[4027,126621,126338],{},[19,126623,126624],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,126626,126627],{},"调用如下指令查看第一台雷达的USB信息：",[26,126629,126631],{"className":120330,"code":126630,"language":120332,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[33,126632,126633,126653],{"__ignoreMap":31},[36,126634,126635,126638,126640,126643,126646,126648,126650],{"class":38,"line":39},[36,126636,126637],{"class":101},"udevadm",[36,126639,73376],{"class":105},[36,126641,126642],{"class":112}," --attribute-walk",[36,126644,126645],{"class":112}," --name=\u002Fdev\u002FttyUSB0",[36,126647,1381],{"class":46},[36,126649,33845],{"class":101},[36,126651,126652],{"class":105}," KERNELS\n",[36,126654,126655,126657,126659,126661,126664,126666,126668],{"class":38,"line":53},[36,126656,126637],{"class":101},[36,126658,73376],{"class":105},[36,126660,126642],{"class":112},[36,126662,126663],{"class":112}," --name=\u002Fdev\u002FttyACM0",[36,126665,1381],{"class":46},[36,126667,33845],{"class":101},[36,126669,126652],{"class":105},[19,126671,126672],{},[5198,126673],{"alt":31,"src":126674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,126676,126677],{},"调用如下指令查看第二台雷达的USB信息：",[26,126679,126681],{"className":120330,"code":126680,"language":120332,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[33,126682,126683],{"__ignoreMap":31},[36,126684,126685,126687,126689,126691,126694,126696,126698],{"class":38,"line":39},[36,126686,126637],{"class":101},[36,126688,73376],{"class":105},[36,126690,126642],{"class":112},[36,126692,126693],{"class":112}," --name=\u002Fdev\u002FttyUSB1",[36,126695,1381],{"class":46},[36,126697,33845],{"class":101},[36,126699,126652],{"class":105},[19,126701,126702,126703,126706,126707,126710,126711,126714],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[33,126704,126705],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[33,126708,126709],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[4027,126712,126713],{},"唯一性标识","”。",[19,126716,126366],{},[19,126718,126369,126719,126721],{},[33,126720,126372],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[26,126723,126724],{"className":120330,"code":126376,"language":120332,"meta":31,"style":31},[33,126725,126726],{"__ignoreMap":31},[36,126727,126728,126730,126732],{"class":38,"line":39},[36,126729,102],{"class":101},[36,126731,121617],{"class":105},[36,126733,126387],{"class":105},[26,126735,126737],{"className":120330,"code":126736,"language":120332,"meta":31,"style":31},"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",[33,126738,126739,126768],{"__ignoreMap":31},[36,126740,126741,126743,126745,126747,126750,126752,126755,126758,126760,126763,126765],{"class":38,"line":39},[36,126742,126400],{"class":42},[36,126744,47],{"class":46},[36,126746,126405],{"class":105},[36,126748,126749],{"class":42}," KERNELS",[36,126751,47],{"class":46},[36,126753,126754],{"class":105},"=\"1-1.3:1.0\",",[36,126756,126757],{"class":101}," MODE:",[36,126759,47],{"class":105},[36,126761,126762],{"class":101},"\"0777\"",[36,126764,4253],{"class":101},[36,126766,126767],{"class":105}," SYMLINK+=\"rplidar_front\"\n",[36,126769,126770,126772,126774,126776,126778,126780,126783,126785,126787,126789,126791],{"class":38,"line":53},[36,126771,126400],{"class":42},[36,126773,47],{"class":46},[36,126775,126405],{"class":105},[36,126777,126749],{"class":42},[36,126779,47],{"class":46},[36,126781,126782],{"class":105},"=\"1-1.4:1.0\",",[36,126784,126757],{"class":101},[36,126786,47],{"class":105},[36,126788,126762],{"class":101},[36,126790,4253],{"class":101},[36,126792,126793],{"class":105}," SYMLINK+=\"rplidar_back\"\n",[19,126795,126485],{},[19,126797,126488],{},[26,126799,126800],{"className":120330,"code":126491,"language":120332,"meta":31,"style":31},[33,126801,126802,126806,126816,126826,126830,126834,126844],{"__ignoreMap":31},[36,126803,126804],{"class":38,"line":39},[36,126805,126498],{"class":3943},[36,126807,126808,126810,126812,126814],{"class":38,"line":53},[36,126809,102],{"class":101},[36,126811,123082],{"class":105},[36,126813,126507],{"class":105},[36,126815,126510],{"class":105},[36,126817,126818,126820,126822,126824],{"class":38,"line":196},[36,126819,102],{"class":101},[36,126821,123082],{"class":105},[36,126823,126507],{"class":105},[36,126825,126521],{"class":105},[36,126827,126828],{"class":38,"line":642},[36,126829,659],{"emptyLinePlaceholder":658},[36,126831,126832],{"class":38,"line":655},[36,126833,126530],{"class":3943},[36,126835,126836,126838,126840,126842],{"class":38,"line":662},[36,126837,102],{"class":101},[36,126839,126537],{"class":105},[36,126841,126540],{"class":105},[36,126843,126543],{"class":112},[36,126845,126846,126848,126850],{"class":38,"line":667},[36,126847,102],{"class":101},[36,126849,126537],{"class":105},[36,126851,126552],{"class":105},[19,126853,126555],{},[19,126855,126558],{},[19,126857,126561,126858,126861],{},[33,126859,126860],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,126863,126864],{},[5198,126865],{"alt":31,"src":126866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,126868,126869],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,126871,126872,126874],{},[4027,126873,120998],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[318,126876,126878],{"id":126877},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,126880,126881],{},"（1）.查看所连接的主机USB接口的信息",[26,126883,126885],{"className":120330,"code":126884,"language":120332,"meta":31,"style":31},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[33,126886,126887,126917],{"__ignoreMap":31},[36,126888,126889,126891,126893,126896,126898,126900,126902,126904,126907,126910,126912,126915],{"class":38,"line":39},[36,126890,126637],{"class":101},[36,126892,73376],{"class":105},[36,126894,126895],{"class":112}," -a",[36,126897,32825],{"class":112},[36,126899,32032],{"class":42},[36,126901,126637],{"class":101},[36,126903,73376],{"class":105},[36,126905,126906],{"class":112}," -q",[36,126908,126909],{"class":105}," path",[36,126911,171],{"class":112},[36,126913,126914],{"class":105}," \u002Fdev\u002FttyACM0",[36,126916,922],{"class":42},[36,126918,126919,126921,126923,126925,126927,126929,126931,126933,126935,126937,126939,126942],{"class":38,"line":53},[36,126920,126637],{"class":101},[36,126922,73376],{"class":105},[36,126924,126895],{"class":112},[36,126926,32825],{"class":112},[36,126928,32032],{"class":42},[36,126930,126637],{"class":101},[36,126932,73376],{"class":105},[36,126934,126906],{"class":112},[36,126936,126909],{"class":105},[36,126938,171],{"class":112},[36,126940,126941],{"class":105}," \u002Fdev\u002FttyUSB0",[36,126943,922],{"class":42},[19,126945,126946],{},[5198,126947],{"alt":31,"src":126948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,126950,126951],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,126953,126366],{},[19,126955,126369,126956,126721],{},[33,126957,126372],{},[26,126959,126960],{"className":120330,"code":126376,"language":120332,"meta":31,"style":31},[33,126961,126962],{"__ignoreMap":31},[36,126963,126964,126966,126968],{"class":38,"line":39},[36,126965,102],{"class":101},[36,126967,121617],{"class":105},[36,126969,126387],{"class":105},[26,126971,126973],{"className":120330,"code":126972,"language":120332,"meta":31,"style":31},"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",[33,126974,126975,127003,127029],{"__ignoreMap":31},[36,126976,126977,126979,126981,126984,126986,126988,126990,126992,126995,126998,127000],{"class":38,"line":39},[36,126978,126400],{"class":42},[36,126980,47],{"class":46},[36,126982,126983],{"class":105},"=\"ttyACM*\",",[36,126985,126408],{"class":101},[36,126987,126411],{"class":105},[36,126989,126440],{"class":101},[36,126991,4253],{"class":101},[36,126993,126994],{"class":105}," ATTRS{idProduct}==\"55d4\",",[36,126996,126997],{"class":105}," ATTRS{serial}==\"0001\",",[36,126999,126422],{"class":105},[36,127001,127002],{"class":105}," SYMLINK+=\"ttyACM_MCU\"\n",[36,127004,127005,127007,127009,127011,127013,127015,127017,127019,127021,127024,127026],{"class":38,"line":53},[36,127006,126400],{"class":42},[36,127008,47],{"class":46},[36,127010,126983],{"class":105},[36,127012,126408],{"class":101},[36,127014,126411],{"class":105},[36,127016,126440],{"class":101},[36,127018,4253],{"class":101},[36,127020,126994],{"class":105},[36,127022,127023],{"class":105}," ATTRS{serial}==\"0002\",",[36,127025,126422],{"class":105},[36,127027,127028],{"class":105}," SYMLINK+=\"ttyACM_Lidar\"\n",[36,127030,127031,127033,127035,127037,127039,127041,127043,127045,127047,127049],{"class":38,"line":196},[36,127032,126400],{"class":42},[36,127034,47],{"class":46},[36,127036,126405],{"class":105},[36,127038,126408],{"class":101},[36,127040,126411],{"class":105},[36,127042,126440],{"class":101},[36,127044,4253],{"class":101},[36,127046,126445],{"class":105},[36,127048,126422],{"class":105},[36,127050,127051],{"class":105}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,127053,126485],{},[19,127055,126488],{},[26,127057,127058],{"className":120330,"code":126491,"language":120332,"meta":31,"style":31},[33,127059,127060,127064,127074,127084,127088,127092,127102],{"__ignoreMap":31},[36,127061,127062],{"class":38,"line":39},[36,127063,126498],{"class":3943},[36,127065,127066,127068,127070,127072],{"class":38,"line":53},[36,127067,102],{"class":101},[36,127069,123082],{"class":105},[36,127071,126507],{"class":105},[36,127073,126510],{"class":105},[36,127075,127076,127078,127080,127082],{"class":38,"line":196},[36,127077,102],{"class":101},[36,127079,123082],{"class":105},[36,127081,126507],{"class":105},[36,127083,126521],{"class":105},[36,127085,127086],{"class":38,"line":642},[36,127087,659],{"emptyLinePlaceholder":658},[36,127089,127090],{"class":38,"line":655},[36,127091,126530],{"class":3943},[36,127093,127094,127096,127098,127100],{"class":38,"line":662},[36,127095,102],{"class":101},[36,127097,126537],{"class":105},[36,127099,126540],{"class":105},[36,127101,126543],{"class":112},[36,127103,127104,127106,127108],{"class":38,"line":667},[36,127105,102],{"class":101},[36,127107,126537],{"class":105},[36,127109,126552],{"class":105},[19,127111,127112,127113],{},"再重新插拔设备即可，或者 ",[4027,127114,127115],{},"直接重启系统。",[19,127117,126558],{},[19,127119,126561,127120,126861],{},[33,127121,126860],{},[19,127123,127124],{},[5198,127125],{"alt":31,"src":127126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,127128,126869],{},[19,127130,127131,127133],{},[4027,127132,120998],{}," 一些设备可能没有串口号等。",[318,127135,127137],{"id":127136},"_744-其他注意事项","7.4.4 其他注意事项",[19,127139,127140,127141,127143,127144,127147,127148,22032,127151,127154,127155,127157],{},"并非所有的USB设备端口号都是",[33,127142,126595],{},"的格式，比如Arduino的端口号可能是",[33,127145,127146],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[33,127149,127150],{},"videon",[33,127152,127153],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[33,127156,127150],{},"端口，绑定时需要关联的也是该接口。",[19,127159,127160,127161,127164,127165,127168,127169,127171,127172,127175,127176,127179,127180,127183,127184,127183,127187,127183,127190,224],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[33,127162,127163],{},"KERNEL==\"ttyUSB*\"","修改为",[33,127166,127167],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[33,127170,127163],{},"修改为类似于",[33,127173,127174],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[33,127177,127178],{},"video[0,2,4,6]","表示可以绑定的端口为",[33,127181,127182],{},"video0","或",[33,127185,127186],{},"video2",[33,127188,127189],{},"video4",[33,127191,127192],{},"video6",[14,127194,127196],{"id":127195},"_75-挂载内网网页","7.5 挂载内网网页",[19,127198,127199],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,127201,127202],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,127204,127205],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,127207,127208,127209],{},"Termux 下载地址（F-Droid）：",[4113,127210,127211],{"href":127211,"rel":127212},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[27481],[19,127214,127215],{},"首先打开app后，先更新软件缓存：",[26,127217,127219],{"className":120330,"code":127218,"language":120332,"meta":31,"style":31},"pkg update\n",[33,127220,127221],{"__ignoreMap":31},[36,127222,127223,127226],{"class":38,"line":39},[36,127224,127225],{"class":101},"pkg",[36,127227,29855],{"class":105},[19,127229,127230],{},"然后换源",[26,127232,127234],{"className":120330,"code":127233,"language":120332,"meta":31,"style":31},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[33,127235,127236],{"__ignoreMap":31},[36,127237,127238,127240,127243],{"class":38,"line":39},[36,127239,126108],{"class":101},[36,127241,127242],{"class":42}," $PREFIX",[36,127244,127245],{"class":105},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,127247,127248],{},"将该文件内容替换为下面：",[26,127250,127252],{"className":120330,"code":127251,"language":120332,"meta":31,"style":31},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[33,127253,127254],{"__ignoreMap":31},[36,127255,127256,127259,127262,127265],{"class":38,"line":39},[36,127257,127258],{"class":101},"deb",[36,127260,127261],{"class":105}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[36,127263,127264],{"class":105}," stable",[36,127266,127267],{"class":105}," main\n",[4875,127269,127270,127297],{},[214,127271,127272,127273,127275,127276],{},"如果你使用的是",[33,127274,126108],{},"编辑器：",[4875,127277,127278,127285,127291],{},[214,127279,127280,127281,127284],{},"按 ",[33,127282,127283],{},"Ctrl+O"," 保存文件。",[214,127286,127280,127287,127290],{},[33,127288,127289],{},"Enter"," 确认文件名。",[214,127292,127280,127293,127296],{},[33,127294,127295],{},"Ctrl+X"," 退出编辑器。",[214,127298,127272,127299,127275,127302],{},[33,127300,127301],{},"vim",[4875,127303,127304,127310],{},[214,127305,127280,127306,127309],{},[33,127307,127308],{},"Esc"," 退出编辑模式。",[214,127311,127312,127313,127315],{},"输入 ",[33,127314,122255],{}," 保存并退出。",[19,127317,127318],{},"接下来重新更新软件源：",[26,127320,127322],{"className":120330,"code":127321,"language":120332,"meta":31,"style":31},"pkg update && pkg upgrade\n",[33,127323,127324],{"__ignoreMap":31},[36,127325,127326,127328,127330,127332,127334],{"class":38,"line":39},[36,127327,127225],{"class":101},[36,127329,120381],{"class":105},[36,127331,29803],{"class":42},[36,127333,127225],{"class":101},[36,127335,120367],{"class":105},[19,127337,127338],{},"安装python：",[26,127340,127342],{"className":120330,"code":127341,"language":120332,"meta":31,"style":31},"pkg install python\n",[33,127343,127344],{"__ignoreMap":31},[36,127345,127346,127348,127350],{"class":38,"line":39},[36,127347,127225],{"class":101},[36,127349,109],{"class":105},[36,127351,127352],{"class":105}," python\n",[19,127354,127355,30084],{},[4027,127356,127357],{},"通过Termux访问设备存储",[19,127359,127360],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[26,127362,127364],{"className":120330,"code":127363,"language":120332,"meta":31,"style":31},"termux-setup-storage\n",[33,127365,127366],{"__ignoreMap":31},[36,127367,127368],{"class":38,"line":39},[36,127369,127363],{"class":101},[211,127371,127372],{},[214,127373,127374,30084,127377],{},[4027,127375,127376],{},"进入HTML文件所在的目录",[211,127378,127379],{},[214,127380,127381,127382,127384],{},"使用",[33,127383,104803],{},"命令进入HTML文件所在的目录：",[26,127386,127388],{"className":120330,"code":127387,"language":120332,"meta":31,"style":31},"cd ~\u002Fyour_html_folder\n",[33,127389,127390],{"__ignoreMap":31},[36,127391,127392,127394],{"class":38,"line":39},[36,127393,104803],{"class":112},[36,127395,127396],{"class":105}," ~\u002Fyour_html_folder\n",[211,127398,127399],{"start":53},[214,127400,127401,30084,127404,127409,127426],{},[4027,127402,127403],{},"启动Python HTTP服务器",[211,127405,127406],{},[214,127407,127408],{},"运行以下命令启动一个简单的HTTP服务器：",[26,127410,127412],{"className":120330,"code":127411,"language":120332,"meta":31,"style":31},"python -m http.server 8000\n",[33,127413,127414],{"__ignoreMap":31},[36,127415,127416,127418,127420,127423],{"class":38,"line":39},[36,127417,30],{"class":101},[36,127419,104422],{"class":112},[36,127421,127422],{"class":105}," http.server",[36,127424,127425],{"class":112}," 8000\n",[211,127427,127428],{"start":196},[214,127429,127430,127431,127434],{},"这会在端口",[33,127432,127433],{},"8000","上启动一个Web服务器。",[4875,127436,127437],{},[214,127438,127439],{},"启动服务器后，Termux会显示日志信息，例如：",[26,127441,127443],{"className":123850,"code":127442,"language":123852,"meta":123853,"style":31},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[33,127444,127445],{"__ignoreMap":31},[36,127446,127447],{"class":38,"line":39},[36,127448,127442],{},[4875,127450,127451],{},[214,127452,127453],{},"这表示服务器已成功启动。",[19,127455,127456],{},[4027,127457,127458],{},"在浏览器中访问HTML文件",[211,127460,127461],{},[214,127462,127463,30084,127466,127471],{},[4027,127464,127465],{},"在同一设备上访问",[211,127467,127468],{},[214,127469,127470],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[26,127472,127475],{"className":127473,"code":127474,"language":75218,"meta":31,"style":31},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[33,127476,127477],{"__ignoreMap":31},[36,127478,127479,127482],{"class":38,"line":39},[36,127480,127481],{"class":42},"http:",[36,127483,127484],{"class":3943},"\u002F\u002Flocalhost:8000\n",[4875,127486,127487],{},[214,127488,127489,127490,127493],{},"如果HTML文件中有",[33,127491,127492],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,127495,127497],{"id":127496},"_76-linux重点知识","7.6 Linux重点知识",[318,127499,127501],{"id":127500},"_761-关于点的说明","7.6.1 关于点的说明",[19,127503,127504],{},[5198,127505],{"alt":31,"src":127506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,127508,127509],{},"一点本目录，两点上目录",[318,127511,127513],{"id":127512},"_762-目录","7.6.2 目录",[25619,127515,127517],{"id":127516},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,127519,127520],{},[4027,127521,127522],{},"\u002Fboot:",[19,127524,127525],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,127527,127528],{},[4027,127529,127530],{},"\u002Fetc:",[19,127532,127533],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,127535,127536],{},[4027,127537,127538],{},"\u002Flib：",[19,127540,127541],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,127543,127544],{},[4027,127545,127546],{},"\u002Fsys:",[19,127548,127549],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[25619,127551,127553],{"id":127552},"_7622-指令集合","7.6.2.2 指令集合",[19,127555,127556],{},[4027,127557,127558],{},"\u002Fbin:",[19,127560,127561],{},"为二进制文件的缩写，存放最经常使用的命令",[19,127563,127564],{},[4027,127565,127566],{},"\u002Fsbin:",[19,127568,127569],{},"只有系统管理员才能使用的程序和指令",[25619,127571,127573],{"id":127572},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,127575,127576],{},[4027,127577,127578],{},"\u002Fdev:",[19,127580,127581],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,127583,127584],{},[4027,127585,127586],{},"\u002Fmedia:",[19,127588,127589],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,127591,127592],{},[4027,127593,127594],{},"\u002Fmnt:",[19,127596,127597],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[25619,127599,127601],{"id":127600},"_7624-临时文件","7.6.2.4 临时文件",[19,127603,127604],{},[4027,127605,127606],{},"\u002Frun:",[19,127608,127609],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,127611,127612],{},[4027,127613,127614],{},"\u002Flost+found:",[19,127616,127617],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,127619,127620],{},[4027,127621,127622],{},"\u002Ftmp:",[19,127624,127625],{},"这个目录是用来存放一些临时文件的",[25619,127627,127629],{"id":127628},"_7625-账户","7.6.2.5 账户",[19,127631,127632],{},[4027,127633,127634],{},"\u002Froot：",[19,127636,127637],{},"系统管理员的用户主目录",[19,127639,127640,30084],{},[4027,127641,127642],{},"\u002Fhome",[19,127644,127645],{},"用户的主目录，以用户的账号命名的",[19,127647,127648,30084],{},[4027,127649,127650],{},"\u002Fusr",[19,127652,127653],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,127655,127656],{},[4027,127657,127658],{},"\u002Fusr\u002Fbin：",[19,127660,127661],{},"系统用户使用的应用程序与指令",[19,127663,127664],{},[4027,127665,127666],{},"\u002Fusr\u002Fsbin：",[19,127668,127669],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,127671,127672],{},[4027,127673,127674],{},"\u002Fusr\u002Fsrc：",[19,127676,127677],{},"内核源代码默认的放置目录",[25619,127679,127681],{"id":127680},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,127683,127684],{},[4027,127685,127686],{},"\u002Fvar：",[19,127688,127689],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,127691,127692],{},[4027,127693,127694],{},"\u002Fproc:",[19,127696,127697,127698,127701],{},"管理 ",[4027,127699,127700],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[25619,127703,127705],{"id":127704},"_7627-扩展用的","7.6.2.7 扩展用的",[19,127707,127708],{},[4027,127709,127710],{},"\u002Fopt:",[19,127712,127713],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,127715,127716],{},[4027,127717,127718],{},"\u002Fsrv:",[19,127720,127721],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[318,127723,127725],{"id":127724},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,127727,127728],{},[5198,127729],{"alt":31,"src":127730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,127732,127733],{},"windows-->linux:",[19,127735,127736],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,127738,127739],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,127741,127742],{},"linux传输文件到windows",[19,127744,127745],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[318,127747,127749],{"id":127748},"_764-易忘知识","7.6.4 易忘知识",[19,127751,127752],{},"操作系统内核查看",[26,127754,127755],{"className":120330,"code":124324,"language":120332,"meta":31,"style":31},[33,127756,127757],{"__ignoreMap":31},[36,127758,127759,127761],{"class":38,"line":39},[36,127760,73758],{"class":101},[36,127762,124333],{"class":112},[19,127764,127765],{},[5198,127766],{"alt":31,"src":127767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,127769,127770],{},[5198,127771],{"alt":31,"src":127772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[26,127774,127776],{"className":120330,"code":127775,"language":120332,"meta":31,"style":31},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[33,127777,127778,127790],{"__ignoreMap":31},[36,127779,127780,127782,127785,127788],{"class":38,"line":39},[36,127781,124541],{"class":101},[36,127783,127784],{"class":105}," mvtest",[36,127786,127787],{"class":105}," mvtest2",[36,127789,6377],{"class":42},[36,127791,127792],{"class":38,"line":53},[36,127793,127794],{"class":101},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,127796,127797],{},[5198,127798],{"alt":31,"src":127799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,127801,127802],{},[5198,127803],{"alt":31,"src":127804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,127806,127807,127808,127811],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[33,127809,127810],{},"du -a"," 可以快速查看磁盘使用细节。",[318,127813,127815],{"id":127814},"_765-vim","7.6.5 Vim",[19,127817,127818],{},[5198,127819],{"alt":31,"src":127820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,127822,127823],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,127825,127826],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,127828,127829],{},[4027,127830,127831],{},"1.命令模式：",[19,127833,127834],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,127836,127837],{},"x 删除当前光标所在处的字符",[19,127839,127840],{},"：切换到底线命令模式，以在最底一行输入命令",[19,127842,127843],{},"a 进行插入模式，在光标下一个位置输入文本",[19,127845,127846],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,127848,127849],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,127851,127852],{},"dd 剪切当前行",[19,127854,127855],{},"yy 复制当前行",[19,127857,127858],{},"p 粘贴剪贴板内容到光标下方",[19,127860,127861],{},"P 粘贴剪贴板内容到光标上方",[19,127863,127864],{},"u 撤销上一次操作",[19,127866,127867],{},"ctrl+r 重做上一次操作",[19,127869,127870,127872],{},[4665,127871],{}," 保存文件",[19,127874,127875,127877],{},[4516,127876],{}," 退出Vim编辑器",[19,127879,127880,127882],{},[4516,127881],{},"! 强制退出Vim编辑器，不保存修改",[19,127884,127885],{},[4027,127886,127887],{},"2.输入模式：",[19,127889,127890],{},[5198,127891],{"alt":31,"src":127892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,127894,127895],{},[4027,127896,127897],{},"3.底线命令模式：",[19,127899,127900],{},[5198,127901],{"alt":31,"src":127902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,127904,127905],{},"按下esc可以退出底线命令模式",[318,127907,127909],{"id":127908},"_766-apt","7.6.6 apt",[19,127911,127912],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[318,127914,127916],{"id":127915},"_767-home与root的区别","7.6.7 home与root的区别",[19,127918,127919],{},[5198,127920],{"alt":31,"src":127921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,127923,127924],{},[5198,127925],{"alt":31,"src":127926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,127928,127929],{},[5198,127930],{"alt":31,"src":127931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,127933,127934],{},[5198,127935],{"alt":31,"src":127936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[318,127938,127940],{"id":127939},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,127942,127943],{},[4113,127944,127945],{"href":127945,"rel":127946},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[27481],[211,127948,127949,127952],{},[214,127950,127951],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[214,127953,127954],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,127956,127957],{},[5198,127958],{"alt":31,"src":127959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,127961,127962],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,127964,127965],{},[5198,127966],{"alt":31,"src":127967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[26,127969,127971],{"className":123850,"code":127970,"language":123852,"meta":123853,"style":31},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[33,127972,127973,127978],{"__ignoreMap":31},[36,127974,127975],{"class":38,"line":39},[36,127976,127977],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[36,127979,127980],{"class":38,"line":53},[36,127981,127982],{},".\u002Fpycharm.sh\n",[19,127984,127985],{},"3️⃣创建.desktop文件",[19,127987,127988],{},[4027,127989,127990],{},"原理：",[4875,127992,127993,128003],{},[214,127994,127995,127996,128002],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[4027,127997,127998,128001],{},[33,127999,128000],{},".desktop"," 文件"," 来识别应用。",[214,128004,128005,128007,128008],{},[33,128006,128000],{}," 文件相当于一个“应用注册表”，告诉系统：",[4875,128009,128010,128013,128016,128019,128022],{},[214,128011,128012],{},"应用名字（Name）",[214,128014,128015],{},"图标（Icon）",[214,128017,128018],{},"执行命令（Exec）",[214,128020,128021],{},"分类（Categories）",[214,128023,128024],{},"是否需要终端（Terminal）",[26,128026,128028],{"className":123850,"code":128027,"language":123852,"meta":123853,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[33,128029,128030,128035],{"__ignoreMap":31},[36,128031,128032],{"class":38,"line":39},[36,128033,128034],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[36,128036,128037],{"class":38,"line":53},[36,128038,128039],{},"nano pycharm.desktop\n",[19,128041,128042],{},"nano是一个命令行下的编辑器，也可以使用vim",[26,128044,128046],{"className":123850,"code":128045,"language":123852,"meta":123853,"style":31},"[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",[33,128047,128048,128053,128058,128063,128068,128073,128078,128083,128088,128093],{"__ignoreMap":31},[36,128049,128050],{"class":38,"line":39},[36,128051,128052],{},"[Desktop Entry]\n",[36,128054,128055],{"class":38,"line":53},[36,128056,128057],{},"Version=1.0\n",[36,128059,128060],{"class":38,"line":196},[36,128061,128062],{},"Type=Application\n",[36,128064,128065],{"class":38,"line":642},[36,128066,128067],{},"Name=PyCharm\n",[36,128069,128070],{"class":38,"line":655},[36,128071,128072],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[36,128074,128075],{"class":38,"line":662},[36,128076,128077],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[36,128079,128080],{"class":38,"line":667},[36,128081,128082],{},"Comment=JetBrains PyCharm IDE\n",[36,128084,128085],{"class":38,"line":679},[36,128086,128087],{},"Categories=Development;IDE;\n",[36,128089,128090],{"class":38,"line":685},[36,128091,128092],{},"Terminal=false\n",[36,128094,128095],{"class":38,"line":691},[36,128096,128097],{},"StartupWMClass=jetbrains-pycharm\n",[4875,128099,128100,128106,128112,128118],{},[214,128101,128102,128105],{},[33,128103,128104],{},"Exec"," → 点击图标时执行的命令",[214,128107,128108,128111],{},[33,128109,128110],{},"Icon"," → 显示在菜单和桌面上的图标",[214,128113,128114,128117],{},[33,128115,128116],{},"Terminal=false"," → 不打开终端",[214,128119,128120,128123],{},[33,128121,128122],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[128125,128126,128127],"blockquote",{},[19,128128,128129,128130,128132,128133],{},"可以理解成 ",[33,128131,128000],{}," 文件是 Linux 的 ",[4027,128134,128135],{},"快捷方式配置文件",[19,128137,128138],{},"4️⃣设置可执行权限",[26,128140,128142],{"className":123850,"code":128141,"language":123852,"meta":123853,"style":31},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[33,128143,128144],{"__ignoreMap":31},[36,128145,128146],{"class":38,"line":39},[36,128147,128141],{},[19,128149,128150],{},"5️⃣桌面图标启动的话如下：",[26,128152,128154],{"className":123850,"code":128153,"language":123852,"meta":123853,"style":31},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[33,128155,128156,128161],{"__ignoreMap":31},[36,128157,128158],{"class":38,"line":39},[36,128159,128160],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[36,128162,128163],{"class":38,"line":53},[36,128164,128165],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[211,128167,128168],{"start":196},[214,128169,128170],{},"下载Appimage文件实现软件的安装",[19,128172,128173],{},"1️⃣先下载appimage",[19,128175,128176],{},[4113,128177,128178],{"href":128178,"rel":128179},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[27481],[19,128181,128182],{},[5198,128183],{"alt":31,"src":128184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,128186,128187],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,128189,128190],{},[5198,128191],{"alt":31,"src":128192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,128194,128195],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,128197,128198],{},[5198,128199],{"alt":31,"src":128200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,128202,128203],{},[5198,128204],{"alt":31,"src":128205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,128207,128208,128209,128212],{},"3️⃣给他们放在",[33,128210,128211],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,128214,128215],{},"4️⃣给软件执行权限",[26,128217,128219],{"className":123850,"code":128218,"language":123852,"meta":123853,"style":31},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[33,128220,128221,128226],{"__ignoreMap":31},[36,128222,128223],{"class":38,"line":39},[36,128224,128225],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[36,128227,128228],{"class":38,"line":53},[36,128229,128230],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,128232,128233],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[26,128235,128237],{"className":120330,"code":128236,"language":120332,"meta":31,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[33,128238,128239,128246,128253,128259],{"__ignoreMap":31},[36,128240,128241,128243],{"class":38,"line":39},[36,128242,104803],{"class":112},[36,128244,128245],{"class":105}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[36,128247,128248,128250],{"class":38,"line":53},[36,128249,2097],{"class":101},[36,128251,128252],{"class":105}," .\u002Fqqmusic.desktop\n",[36,128254,128255,128257],{"class":38,"line":196},[36,128256,127301],{"class":101},[36,128258,128252],{"class":105},[36,128260,128261,128263,128265,128267],{"class":38,"line":642},[36,128262,102],{"class":101},[36,128264,28195],{"class":105},[36,128266,126167],{"class":105},[36,128268,128252],{"class":105},[19,128270,128271,128273],{},[33,128272,2097],{},"：一个 Linux 命令，主要功能是：",[4875,128275,128276,128279],{},[214,128277,128278],{},"如果文件不存在，就创建一个新的空文件",[214,128280,128281],{},"如果文件已存在，就更新该文件的最后修改时间",[26,128283,128285],{"className":123850,"code":128284,"language":123852,"meta":123853,"style":31},"[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",[33,128286,128287,128291,128296,128301,128306,128310,128315],{"__ignoreMap":31},[36,128288,128289],{"class":38,"line":39},[36,128290,128052],{},[36,128292,128293],{"class":38,"line":53},[36,128294,128295],{},"Name=QQ音乐\n",[36,128297,128298],{"class":38,"line":196},[36,128299,128300],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[36,128302,128303],{"class":38,"line":642},[36,128304,128305],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[36,128307,128308],{"class":38,"line":655},[36,128309,128062],{},[36,128311,128312],{"class":38,"line":662},[36,128313,128314],{},"Categories=Audio;Music;Player;\n",[36,128316,128317],{"class":38,"line":667},[36,128318,128319],{},"Comment=QQ Music Client for Linux\n",[19,128321,128322],{},"将文件复制进去",[19,128324,128325],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,128327,128328],{},[5198,128329],{"alt":31,"src":128330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,128332,128333],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,128335,128336],{},[5198,128337],{"alt":31,"src":128338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,128340,128341,128342,128345,128346,128349],{},"如果你用的不是KDE，那么也可以直接修改",[33,128343,128344],{},"qqmuic.desktop","：在exec的末尾加上",[33,128347,128348],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[26,128351,128353],{"className":123850,"code":128352,"language":123852,"meta":123853,"style":31},"[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",[33,128354,128355,128359,128363,128368,128372,128376,128380],{"__ignoreMap":31},[36,128356,128357],{"class":38,"line":39},[36,128358,128052],{},[36,128360,128361],{"class":38,"line":53},[36,128362,128295],{},[36,128364,128365],{"class":38,"line":196},[36,128366,128367],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[36,128369,128370],{"class":38,"line":642},[36,128371,128305],{},[36,128373,128374],{"class":38,"line":655},[36,128375,128062],{},[36,128377,128378],{"class":38,"line":662},[36,128379,128314],{},[36,128381,128382],{"class":38,"line":667},[36,128383,128319],{},[19,128385,128386],{},[5198,128387],{"alt":31,"src":128388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,128390,128391],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[26,128393,128395],{"className":123850,"code":128394,"language":123852,"meta":123853,"style":31},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[33,128396,128397],{"__ignoreMap":31},[36,128398,128399],{"class":38,"line":39},[36,128400,128394],{},[211,128402,128403],{"start":642},[214,128404,128405],{},"去Flathub上安装软件",[19,128407,128408],{},[4113,128409,128410],{"href":128410,"rel":128411},"https:\u002F\u002Fflathub.org\u002F",[27481],[19,128413,128414],{},"1️⃣去上面的官网搜索软件+下载软件",[19,128416,128417],{},[5198,128418],{"alt":31,"src":128419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[26,128421,128423],{"className":123850,"code":128422,"language":123852,"meta":123853,"style":31},"flatpak install flathub com.obsproject.Studio\n",[33,128424,128425],{"__ignoreMap":31},[36,128426,128427],{"class":38,"line":39},[36,128428,128422],{},[19,128430,128431],{},[5198,128432],{"alt":31,"src":128433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,128435,128436],{},"2️⃣运行软件",[19,128438,128439],{},"a.官方方式：",[19,128441,128442],{},[5198,128443],{"alt":31,"src":128444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[26,128446,128447],{"className":123850,"code":128422,"language":123852,"meta":123853,"style":31},[33,128448,128449],{"__ignoreMap":31},[36,128450,128451],{"class":38,"line":39},[36,128452,128422],{},[19,128454,128455],{},"b.当普通软件运行：",[19,128457,128458],{},[5198,128459],{"alt":31,"src":128460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,128462,128463],{},[5198,128464],{"alt":31,"src":128465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[3785,128467,128468],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":31,"searchDepth":53,"depth":53,"links":128470},[128471,128472,128477,128478,128484,128485],{"id":125203,"depth":53,"text":125204},{"id":125545,"depth":53,"text":125546,"children":128473},[128474,128475,128476],{"id":125549,"depth":196,"text":125550},{"id":125616,"depth":196,"text":125617},{"id":125877,"depth":196,"text":125878},{"id":126030,"depth":53,"text":126031},{"id":126268,"depth":53,"text":126269,"children":128479},[128480,128481,128482,128483],{"id":126320,"depth":196,"text":126321},{"id":126606,"depth":196,"text":126607},{"id":126877,"depth":196,"text":126878},{"id":127136,"depth":196,"text":127137},{"id":127195,"depth":53,"text":127196},{"id":127496,"depth":53,"text":127497,"children":128486},[128487,128488,128489,128490,128491,128492,128493,128494],{"id":127500,"depth":196,"text":127501},{"id":127512,"depth":196,"text":127513},{"id":127724,"depth":196,"text":127725},{"id":127748,"depth":196,"text":127749},{"id":127814,"depth":196,"text":127815},{"id":127908,"depth":196,"text":127909},{"id":127915,"depth":196,"text":127916},{"id":127939,"depth":196,"text":127940},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":125195,"description":26998},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":128501,"title":128502,"body":128503,"description":26998,"extension":3817,"meta":128507,"navigation":658,"path":128508,"seo":128509,"stem":128510,"__hash__":128511},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":128504,"toc":128505},[],{"title":31,"searchDepth":53,"depth":53,"links":128506},[],{"category":33872},"\u002Fwiki\u002F2025-01-27-linux",{"title":128502,"description":26998},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":128513,"title":128514,"body":128515,"description":128519,"extension":3817,"meta":128910,"navigation":658,"path":128911,"seo":128912,"stem":128913,"__hash__":128914},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":128516,"toc":128908},[128517,128520,128524,128541,128544,128597,128601,128603,128643,128652,128656,128659,128900,128905],[19,128518,128519],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,128521,128523],{"id":128522},"_1ubuntu环境配置","1.Ubuntu环境配置",[211,128525,128526,128529,128532,128535,128538],{},[214,128527,128528],{},"ubuntu环境换源",[214,128530,128531],{},"安装cuda",[214,128533,128534],{},"安装miniconda",[214,128536,128537],{},"安装pytorch",[214,128539,128540],{},"安装genesis",[19,128542,128543],{},"参考链接：",[26,128545,128547],{"className":92,"code":128546,"language":94,"meta":31,"style":31},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[33,128548,128549],{"__ignoreMap":31},[36,128550,128551,128554,128557,128560,128562,128565,128568,128570,128573,128576,128578,128581,128584,128586,128589,128592,128594],{"class":38,"line":39},[36,128552,128553],{"class":101},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[36,128555,128556],{"class":105},"=blogdetail",[36,128558,128559],{"class":42},"&sharetype",[36,128561,47],{"class":46},[36,128563,128564],{"class":105},"blogdetail",[36,128566,128567],{"class":42},"&sharerId",[36,128569,47],{"class":46},[36,128571,128572],{"class":105},"144728092",[36,128574,128575],{"class":42},"&sharerefer",[36,128577,47],{"class":46},[36,128579,128580],{"class":105},"PC",[36,128582,128583],{"class":42},"&sharesource",[36,128585,47],{"class":46},[36,128587,128588],{"class":105},"qq_69379513",[36,128590,128591],{"class":42},"&sharefrom",[36,128593,47],{"class":46},[36,128595,128596],{"class":105},"from_link\n",[10,128598,128600],{"id":128599},"_2genesis-报错issue","2.Genesis 报错issue",[19,128602,128543],{},[26,128604,128605],{"className":92,"code":128546,"language":94,"meta":31,"style":31},[33,128606,128607],{"__ignoreMap":31},[36,128608,128609,128611,128613,128615,128617,128619,128621,128623,128625,128627,128629,128631,128633,128635,128637,128639,128641],{"class":38,"line":39},[36,128610,128553],{"class":101},[36,128612,128556],{"class":105},[36,128614,128559],{"class":42},[36,128616,47],{"class":46},[36,128618,128564],{"class":105},[36,128620,128567],{"class":42},[36,128622,47],{"class":46},[36,128624,128572],{"class":105},[36,128626,128575],{"class":42},[36,128628,47],{"class":46},[36,128630,128580],{"class":105},[36,128632,128583],{"class":42},[36,128634,47],{"class":46},[36,128636,128588],{"class":105},[36,128638,128591],{"class":42},[36,128640,47],{"class":46},[36,128642,128596],{"class":105},[26,128644,128646],{"className":92,"code":128645,"language":94,"meta":31,"style":31},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[33,128647,128648],{"__ignoreMap":31},[36,128649,128650],{"class":38,"line":39},[36,128651,128645],{"class":101},[10,128653,128655],{"id":128654},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,128657,128658],{},"hello_robot.py",[26,128660,128662],{"className":28,"code":128661,"language":30,"meta":31,"style":31},"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",[33,128663,128664,128670,128685,128689,128701,128713,128717,128730,128734,128753,128763,128773,128787,128791,128795,128800,128804,128814,128821,128835,128842,128852,128857,128861,128879,128884,128888,128895],{"__ignoreMap":31},[36,128665,128666,128668],{"class":38,"line":39},[36,128667,611],{"class":46},[36,128669,48863],{"class":42},[36,128671,128672,128675,128678,128680,128682],{"class":38,"line":53},[36,128673,128674],{"class":42},"os.environ[",[36,128676,128677],{"class":105},"'PYOPENGL_PLATFORM'",[36,128679,8140],{"class":42},[36,128681,47],{"class":46},[36,128683,128684],{"class":105}," 'glx'\n",[36,128686,128687],{"class":38,"line":196},[36,128688,659],{"emptyLinePlaceholder":658},[36,128690,128691,128693,128696,128698],{"class":38,"line":642},[36,128692,611],{"class":46},[36,128694,128695],{"class":42}," genesis ",[36,128697,617],{"class":46},[36,128699,128700],{"class":42}," gs\n",[36,128702,128703,128705,128708,128710],{"class":38,"line":655},[36,128704,645],{"class":46},[36,128706,128707],{"class":42}," pynput ",[36,128709,611],{"class":46},[36,128711,128712],{"class":42}," keyboard\n",[36,128714,128715],{"class":38,"line":662},[36,128716,659],{"emptyLinePlaceholder":658},[36,128718,128719,128722,128725,128727],{"class":38,"line":667},[36,128720,128721],{"class":42},"gs.init(",[36,128723,128724],{"class":468},"backend",[36,128726,47],{"class":46},[36,128728,128729],{"class":42},"gs.gpu)\n",[36,128731,128732],{"class":38,"line":679},[36,128733,659],{"emptyLinePlaceholder":658},[36,128735,128736,128739,128741,128744,128747,128749,128751],{"class":38,"line":685},[36,128737,128738],{"class":42},"scene ",[36,128740,47],{"class":46},[36,128742,128743],{"class":42}," gs.Scene(",[36,128745,128746],{"class":468},"show_viewer",[36,128748,47],{"class":46},[36,128750,35066],{"class":112},[36,128752,922],{"class":42},[36,128754,128755,128758,128760],{"class":38,"line":691},[36,128756,128757],{"class":42},"plane ",[36,128759,47],{"class":46},[36,128761,128762],{"class":42}," scene.add_entity(gs.morphs.Plane())\n",[36,128764,128765,128768,128770],{"class":38,"line":696},[36,128766,128767],{"class":42},"franka ",[36,128769,47],{"class":46},[36,128771,128772],{"class":42}," scene.add_entity(\n",[36,128774,128775,128778,128780,128782,128785],{"class":38,"line":702},[36,128776,128777],{"class":42},"    gs.morphs.MJCF(",[36,128779,48912],{"class":468},[36,128781,47],{"class":46},[36,128783,128784],{"class":105},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[36,128786,41607],{"class":42},[36,128788,128789],{"class":38,"line":708},[36,128790,922],{"class":42},[36,128792,128793],{"class":38,"line":713},[36,128794,659],{"emptyLinePlaceholder":658},[36,128796,128797],{"class":38,"line":719},[36,128798,128799],{"class":42},"scene.build()\n",[36,128801,128802],{"class":38,"line":725},[36,128803,659],{"emptyLinePlaceholder":658},[36,128805,128806,128808,128811],{"class":38,"line":731},[36,128807,1820],{"class":46},[36,128809,128810],{"class":101}," on_press",[36,128812,128813],{"class":42},"(key):\n",[36,128815,128816,128819],{"class":38,"line":736},[36,128817,128818],{"class":46},"    try",[36,128820,888],{"class":42},[36,128822,128823,128825,128828,128830,128833],{"class":38,"line":742},[36,128824,995],{"class":46},[36,128826,128827],{"class":42}," key.char ",[36,128829,6652],{"class":46},[36,128831,128832],{"class":105}," 'q'",[36,128834,888],{"class":42},[36,128836,128837,128839],{"class":38,"line":748},[36,128838,19388],{"class":46},[36,128840,128841],{"class":112}," False\n",[36,128843,128844,128847,128850],{"class":38,"line":754},[36,128845,128846],{"class":46},"    except",[36,128848,128849],{"class":112}," AttributeError",[36,128851,888],{"class":42},[36,128853,128854],{"class":38,"line":760},[36,128855,128856],{"class":46},"        pass\n",[36,128858,128859],{"class":38,"line":766},[36,128860,659],{"emptyLinePlaceholder":658},[36,128862,128863,128866,128868,128871,128874,128876],{"class":38,"line":772},[36,128864,128865],{"class":42},"listener ",[36,128867,47],{"class":46},[36,128869,128870],{"class":42}," keyboard.Listener(",[36,128872,128873],{"class":468},"on_press",[36,128875,47],{"class":46},[36,128877,128878],{"class":42},"on_press)\n",[36,128880,128881],{"class":38,"line":778},[36,128882,128883],{"class":42},"listener.start()\n",[36,128885,128886],{"class":38,"line":783},[36,128887,659],{"emptyLinePlaceholder":658},[36,128889,128890,128892],{"class":38,"line":789},[36,128891,112138],{"class":46},[36,128893,128894],{"class":42}," listener.running:\n",[36,128896,128897],{"class":38,"line":795},[36,128898,128899],{"class":42},"    scene.step()\n",[19,128901,128902],{},[5198,128903],{"alt":31,"src":128904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[3785,128906,128907],{},"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":31,"searchDepth":53,"depth":53,"links":128909},[],{"category":27000},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":128514,"description":128519},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":128916,"title":128917,"body":128918,"description":26998,"extension":3817,"meta":128933,"navigation":658,"path":128934,"seo":128935,"stem":128936,"__hash__":128937},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":128919,"toc":128930},[128920,128923,128927],[10,128921,128917],{"id":128922},"_1-基础知识",[14,128924,128926],{"id":128925},"_11-js的组成","1.1 js的组成",[19,128928,128929],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":31,"searchDepth":53,"depth":53,"links":128931},[128932],{"id":128925,"depth":53,"text":128926},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":128917,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":128939,"title":128940,"body":128941,"description":26998,"extension":3817,"meta":129080,"navigation":658,"path":129081,"seo":129082,"stem":129083,"__hash__":129084},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":128942,"toc":129068},[128943,128946,128950,128953,128957,128967,128971,128974,128977,128980,128984,128991,128997,129001,129007,129018,129022,129025,129029,129032,129036,129039,129043,129046,129050,129053,129056,129059,129062,129065],[10,128944,128940],{"id":128945},"_2-vscode必备内容",[14,128947,128949],{"id":128948},"_21-标签分类","2.1 标签分类",[19,128951,128952],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,128954,128956],{"id":128955},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,128958,128959,128960,128962,128963,128966],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[33,128961,4101],{}," 然后按 ",[33,128964,128965],{},"Tab","，快速自动生成基本结构。",[14,128968,128970],{"id":128969},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,128972,128973],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,128975,128976],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,128978,128979],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,128981,128983],{"id":128982},"_24-视图缩放","2.4 视图缩放",[19,128985,128986,128987,128990],{},"缩放视图 ",[33,128988,128989],{},"ctrl+"," 可实现代码增大。",[19,128992,128993,128996],{},[33,128994,128995],{},"ctrl-"," 可实现代码减小。",[14,128998,129000],{"id":128999},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,129002,129003,129004,224],{},"VSCode 新建文件快捷键为 ",[33,129005,129006],{},"ctrl+N",[19,129008,129009,129010,129013,129014,129017],{},"保存快捷键为 ",[33,129011,129012],{},"ctrl+S","，将文本保存为 ",[33,129015,129016],{},".html"," 文件。",[14,129019,129021],{"id":129020},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,129023,129024],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,129026,129028],{"id":129027},"_27-vscode-icons","2.7 vscode-icons",[19,129030,129031],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,129033,129035],{"id":129034},"_28-easy-less","2.8 Easy LESS",[19,129037,129038],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,129040,129042],{"id":129041},"_29-会了吧插件","2.9 会了吧插件",[19,129044,129045],{},"会了吧插件可以展示代码中英语单词的意思。",[14,129047,129049],{"id":129048},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,129051,129052],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,129054,129055],{},"②选定多个相同的单词:ctrl+D",[19,129057,129058],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,129060,129061],{},"④全局替换某些单词:ctrl+h",[19,129063,129064],{},"⑤快速定位到某一行:ctrl+g",[19,129066,129067],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":31,"searchDepth":53,"depth":53,"links":129069},[129070,129071,129072,129073,129074,129075,129076,129077,129078,129079],{"id":128948,"depth":53,"text":128949},{"id":128955,"depth":53,"text":128956},{"id":128969,"depth":53,"text":128970},{"id":128982,"depth":53,"text":128983},{"id":128999,"depth":53,"text":129000},{"id":129020,"depth":53,"text":129021},{"id":129027,"depth":53,"text":129028},{"id":129034,"depth":53,"text":129035},{"id":129041,"depth":53,"text":129042},{"id":129048,"depth":53,"text":129049},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":128940,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":129086,"title":129087,"body":129088,"description":26998,"extension":3817,"meta":129247,"navigation":658,"path":129248,"seo":129249,"stem":129250,"__hash__":129251},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":129089,"toc":129239},[129090,129093,129097,129107,129113,129119,129123,129132,129136,129141,129144,129147,129151,129154,129164,129173,129182,129191,129201,129208,129213,129218,129231],[10,129091,129087],{"id":129092},"_3-html文本与容器标签",[14,129094,129096],{"id":129095},"_31-标题标签","3.1 标题标签",[19,129098,129099,129102,129103,129106],{},[33,129100,129101],{},"\u003Ch1>","我是一级标签",[33,129104,129105],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,129108,129109,129102,129111],{},[33,129110,129101],{},[33,129112,129105],{},[19,129114,126369,129115,129118],{},[33,129116,129117],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,129120,129122],{"id":129121},"_32-段落标签","3.2 段落标签",[19,129124,129125,129128,129129],{},[33,129126,129127],{},"\u003Cp>","....",[33,129130,129131],{},"\u003C\u002Fp>",[14,129133,129135],{"id":129134},"_33-换行标签","3.3 换行标签",[19,129137,129138],{},[33,129139,129140],{},"\u003Cbr \u002F>",[19,129142,129143],{},"具有强制换行的作用",[19,129145,129146],{},"单标签",[14,129148,129150],{"id":129149},"_34-文本格式化标签","3.4 文本格式化标签",[19,129152,129153],{},"提供粗体、斜体和下划线等效果",[19,129155,129156,129157,86093,129160,129163],{},"加粗：",[33,129158,129159],{},"\u003Cstrong>...\u003C\u002Fstrong>",[33,129161,129162],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,129165,129166,129167,86093,129170,129163],{},"斜体：",[33,129168,129169],{},"\u003Cem>...\u003C\u002Fem>",[33,129171,129172],{},"\u003Ci>...\u003C\u002Fi>",[19,129174,129175,129176,86093,129179,129163],{},"删除线：",[33,129177,129178],{},"\u003Cdel>...\u003C\u002Fdel>",[33,129180,129181],{},"\u003Cs>...\u003C\u002Fs>",[19,129183,129184,129185,86093,129188,129163],{},"下划线：",[33,129186,129187],{},"\u003Cins>...\u003C\u002Fins>",[33,129189,129190],{},"\u003Cu>...\u003C\u002Fu>",[14,129192,129194,129195,22032,129198,106189],{"id":129193},"_35-div和span标签","3.5 ",[33,129196,129197],{},"\u003Cdiv>",[33,129199,129200],{},"\u003Cspan>",[19,129202,129203,324,129205,129207],{},[33,129204,129197],{},[33,129206,129200],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,129209,129210],{},[33,129211,129212],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,129214,129215],{},[33,129216,129217],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,129219,129220,129221,129223,129224,129226,129227,129230],{},"两者特点：①",[33,129222,129197],{}," 标签用来布局，但一行通常只放一个 ",[33,129225,129197],{},"。可以理解为一个大盒子，独占一行，在 ",[33,129228,129229],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,129232,80803,129233,129235,129236,129238],{},[33,129234,129200],{}," 标签也可用于布局，一行可以放多个 ",[33,129237,129200],{},"，可理解为小盒子。",{"title":31,"searchDepth":53,"depth":53,"links":129240},[129241,129242,129243,129244,129245],{"id":129095,"depth":53,"text":129096},{"id":129121,"depth":53,"text":129122},{"id":129134,"depth":53,"text":129135},{"id":129149,"depth":53,"text":129150},{"id":129193,"depth":53,"text":129246},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":129087,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":129253,"title":129254,"body":129255,"description":26998,"extension":3817,"meta":129452,"navigation":658,"path":129453,"seo":129454,"stem":129455,"__hash__":129456},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":129256,"toc":129444},[129257,129260,129264,129267,129273,129280,129286,129292,129295,129298,129301,129304,129307,129310,129313,129317,129320,129323,129326,129332,129338,129344,129351,129355,129361,129367,129370,129373,129379,129385,129391,129394,129397,129401,129404,129414,129420,129424,129433,129437,129440],[10,129258,129254],{"id":129259},"_4-html图像与链接",[14,129261,129263],{"id":129262},"_41-图像标签","4.1 图像标签",[19,129265,129266],{},"（1）标签",[19,129268,129269,129272],{},[33,129270,129271],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,129274,129275,129276,129279],{},"src是",[33,129277,129278],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,129281,129282,129283],{},"alt:文本，替换文本。图像不能显示的文字 ",[33,129284,129285],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,129287,129288,129289],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[33,129290,129291],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,129293,129294],{},"width:像素，设置图像的宽度",[19,129296,129297],{},"height:像素，设置图像的高度",[19,129299,129300],{},"border：像素，设置图像的边框粗细",[19,129302,129303],{},"（2）图像标签属性的注意点：",[19,129305,129306],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,129308,129309],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,129311,129312],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,129314,129316],{"id":129315},"_42-路径注意要点","4.2 路径注意要点：",[19,129318,129319],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,129321,129322],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,129324,129325],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,129327,129328,129329],{},"①同一级路径：图像文件位于HTML文件同一级，如",[33,129330,129331],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,129333,129334,129335],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[33,129336,129337],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,129339,129340,129341],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[33,129342,129343],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,129345,129346,129347,4126],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[4113,129348,129349],{"href":129349,"rel":129350},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[27481],[14,129352,129354],{"id":129353},"_43-超链接标签","4.3 超链接标签",[19,129356,129357,129360],{},[33,129358,129359],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,129362,129363,129364],{},"①语法格式：",[33,129365,129366],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,129368,129369],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,129371,129372],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,129374,129375,129376],{},"③链接分类：外部链接：",[33,129377,129378],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,129380,129381,129382],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[33,129383,129384],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,129386,129387,129388],{},"空链接：如果当时没有确定链接目标时，",[33,129389,129390],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,129392,129393],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,129395,129396],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,129398,129400],{"id":129399},"_44-锚点链接","4.4 锚点链接",[19,129402,129403],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,129405,129406,129407,129410,129411],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[33,129408,129409],{},"\u003Ca href=\"#two\">","第二级",[33,129412,129413],{},"\u003C\u002Fa>",[19,129415,129416,129417],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[33,129418,129419],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,129421,129423],{"id":129422},"_45-注释标签","4.5 注释标签",[19,129425,129426,129429,129430],{},[33,129427,129428],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[33,129431,129432],{},"ctrl+\u002F",[14,129434,129436],{"id":129435},"_46-特殊字符","4.6 特殊字符",[19,129438,129439],{},"可以实现添加多个空格",[5198,129441],{"style":129442,"src":129443},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":31,"searchDepth":53,"depth":53,"links":129445},[129446,129447,129448,129449,129450,129451],{"id":129262,"depth":53,"text":129263},{"id":129315,"depth":53,"text":129316},{"id":129353,"depth":53,"text":129354},{"id":129399,"depth":53,"text":129400},{"id":129422,"depth":53,"text":129423},{"id":129435,"depth":53,"text":129436},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":129254,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":129458,"title":129459,"body":129460,"description":26998,"extension":3817,"meta":129753,"navigation":658,"path":129754,"seo":129755,"stem":129756,"__hash__":129757},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":129461,"toc":129744},[129462,129465,129469,129472,129475,129478,129481,129484,129487,129490,129493,129496,129516,129522,129526,129529,129532,129535,129538,129541,129544,129548,129551,129554,129557,129560,129573,129578,129581,129584,129599,129602,129605,129608,129611,129614,129618,129621,129628,129631,129634,129637,129640,129643,129649,129652,129655,129661,129664,129667,129670,129676,129679,129682,129696,129703,129706,129709,129716,129725,129728,129731,129734,129738,129741],[10,129463,129459],{"id":129464},"_5-html表格列表与表单",[14,129466,129468],{"id":129467},"_51-表格标签","5.1 表格标签",[19,129470,129471],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,129473,129474],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,129476,129477],{},"②表格基本语法：",[5198,129479],{"style":129442,"src":129480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,129482,129483],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[5198,129485],{"style":129442,"src":129486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,129488,129489],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[5198,129491],{"style":129442,"src":129492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,129494,129495],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,129497,129498,129501,129502,129504,129505,129508,129509,129511,129512,129515],{},[33,129499,129500],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[33,129503,129500],{},"内部必须拥有",[33,129506,129507],{},"\u003Ctr>","标签，一般位于第一行，",[33,129510,129500],{},"比",[33,129513,129514],{},"\u003Cth>","范围广",[19,129517,129518,129521],{},[33,129519,129520],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,129523,129525],{"id":129524},"_52-合并单元格","5.2 合并单元格",[19,129527,129528],{},"（1）合并单元格方式：",[19,129530,129531],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,129533,129534],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,129536,129537],{},"（2）目标单元格：",[19,129539,129540],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,129542,129543],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,129545,129547],{"id":129546},"_53-列表标签","5.3 列表标签",[19,129549,129550],{},"（1）分类：无序列表、有序列表、自定义列表",[19,129552,129553],{},"①无序列表：",[5198,129555],{"style":129442,"src":129556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,129558,129559],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,129561,129562,129565,129566,129569,129570,129572],{},[33,129563,129564],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[33,129567,129568],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[33,129571,129564],{},"中输入其他标签或文字是不对的",[19,129574,129575,129577],{},[33,129576,129568],{},"之间相当于一个容器，可以容纳所有元素",[19,129579,129580],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,129582,129583],{},"在css中去除前边的小圆点采用如下代码:",[26,129585,129589],{"className":129586,"code":129587,"language":129588,"meta":31,"style":31},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[33,129590,129591],{"__ignoreMap":31},[36,129592,129593,129596],{"class":38,"line":39},[36,129594,129595],{"class":54857},"list-style",[36,129597,129598],{"class":42},": none;\n",[19,129600,129601],{},"②有序列表：",[5198,129603],{"style":129442,"src":129604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,129606,129607],{},"③自定义列表：",[5198,129609],{"style":129442,"src":129610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[5198,129612],{"style":129442,"src":129613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,129615,129617],{"id":129616},"_54-表单标签","5.4 表单标签",[19,129619,129620],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,129622,129623,129624,129627],{},"（1）表单域：包含单元素的区域，",[33,129625,129626],{},"\u003Cform>","标签可以实现信息的收集和传递。",[5198,129629],{"style":129442,"src":129630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,129632,129633],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,129635,129636],{},"表单元素提交必须有name属性",[19,129638,129639],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,129641,129642],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,129644,80780,129645,129648],{},[33,129646,129647],{},"\u003Cinput>","输入表单元素",[5198,129650],{"style":129442,"src":129651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[5198,129653],{"style":129442,"src":129654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,129656,129657,129658],{},"单选按钮：",[33,129659,129660],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[5198,129662],{"style":129442,"src":129663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,129665,129666],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[5198,129668],{"style":129442,"src":129669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,129671,129672,129675],{},[4027,129673,129674],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,129677,129678],{},"②select下拉表单元素：可以节约页面控件",[5198,129680],{"style":129442,"src":129681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,129683,129684,17454,129686,129689,129690,129692,129693,129695],{},[4027,129685,3917],{},[33,129687,129688],{},"\u003Cselect>","中至少包含一对",[33,129691,106209],{},"；在",[33,129694,106209],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,129697,129698,129699,129702],{},"③",[33,129700,129701],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[5198,129704],{"style":129442,"src":129705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,129707,129708],{},"3行20列",[14,129710,129712,129713,106189],{"id":129711},"_55-lable标签","5.5 ",[33,129714,129715],{},"\u003Clable>",[19,129717,129718,129719,129721,129722,129724],{},"它不是表单标签，但常常与表单标签搭配使用，",[33,129720,129715],{},"标签用于绑定一个表单标签，当点击",[33,129723,129715],{},"标签内的文本",[19,129726,129727],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[5198,129729],{"style":129442,"src":129730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[5198,129732],{"style":129442,"src":129733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,129735,129737],{"id":129736},"_56-实例","5.6 实例",[5198,129739],{"style":129442,"src":129740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[3785,129742,129743],{},"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":31,"searchDepth":53,"depth":53,"links":129745},[129746,129747,129748,129749,129750,129752],{"id":129467,"depth":53,"text":129468},{"id":129524,"depth":53,"text":129525},{"id":129546,"depth":53,"text":129547},{"id":129616,"depth":53,"text":129617},{"id":129711,"depth":53,"text":129751},"5.5 \u003Clable>标签",{"id":129736,"depth":53,"text":129737},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":129459,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":129759,"title":129760,"body":129761,"description":26998,"extension":3817,"meta":130310,"navigation":658,"path":130311,"seo":130312,"stem":130313,"__hash__":130314},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":129762,"toc":130285},[129763,129766,129770,129773,129776,129780,129783,129786,129789,129792,129795,129798,129801,129805,129808,129812,129815,129818,129821,129825,129828,129831,129834,129840,129843,129846,129849,129852,129855,129858,129861,129894,129898,129901,129904,129907,129911,129914,129917,129920,129923,129926,129930,129933,129936,129939,129943,129946,129950,129953,129957,129960,129965,129969,129972,129976,129979,129982,129985,129988,130015,130018,130022,130025,130028,130033,130036,130039,130043,130046,130051,130054,130057,130060,130064,130067,130070,130073,130077,130080,130083,130086,130090,130094,130097,130137,130140,130144,130151,130154,130158,130161,130207,130211,130214,130217,130220,130248,130252,130255,130282],[10,129764,129760],{"id":129765},"_6-css语法与文本样式",[14,129767,129769],{"id":129768},"_61-css语法规范","6.1 css语法规范",[19,129771,129772],{},"由两部分组成，选择器及一条或多条声明",[5198,129774],{"style":129442,"src":129775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,129777,129778],{},[4027,129779,3917],{},[19,129781,129782],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,129784,129785],{},"②属性与属性值以“键值对”的形式出现",[19,129787,129788],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,129790,129791],{},"④属性和属性值之间用英文“;”分开",[5198,129793],{"style":129442,"src":129794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[5198,129796],{"style":129442,"src":129797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[5198,129799],{"style":129442,"src":129800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,129802,129804],{"id":129803},"_62-css选择器","6.2 css选择器",[19,129806,129807],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[318,129809,129811],{"id":129810},"_621-标签选择器","6.2.1 标签选择器",[19,129813,129814],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,129816,129817],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[5198,129819],{"style":129442,"src":129820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[318,129822,129824],{"id":129823},"_622-类选择器","6.2.2 类选择器",[19,129826,129827],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,129829,129830],{},"②样例",[5198,129832],{"style":129442,"src":129833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,129835,129836,129837,129839],{},"③ ",[4027,129838,129674],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,129841,129842],{},"可以理解为给这个标签起了个名字，来表示；",[19,129844,129845],{},"长名称或词组可以使用横线来为选择器命名；",[19,129847,129848],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,129850,129851],{},"命名要有意义；",[5198,129853],{"style":129442,"src":129854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,129856,129857],{},"类选择器也可以指定特殊的元素p.center{}",[19,129859,129860],{},"p.center和.center都对",[26,129862,129864],{"className":129586,"code":129863,"language":129588,"meta":31,"style":31},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[33,129865,129866,129871,129880,129890],{"__ignoreMap":31},[36,129867,129868],{"class":38,"line":39},[36,129869,129870],{"class":3943},"\u002F* 类选择器指定特殊元素 *\u002F\n",[36,129872,129873,129875,129878],{"class":38,"line":53},[36,129874,19],{"class":54857},[36,129876,129877],{"class":101},".center",[36,129879,19228],{"class":42},[36,129881,129882,129884,129886,129888],{"class":38,"line":196},[36,129883,74080],{"class":112},[36,129885,54994],{"class":42},[36,129887,55149],{"class":112},[36,129889,5029],{"class":42},[36,129891,129892],{"class":38,"line":642},[36,129893,5300],{"class":42},[318,129895,129897],{"id":129896},"_623-多类名使用","6.2.3 多类名使用",[19,129899,129900],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[5198,129902],{"style":129442,"src":129903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,129905,129906],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[318,129908,129910],{"id":129909},"_624-id选择器","6.2.4 id选择器",[19,129912,129913],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,129915,129916],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[5198,129918],{"style":129442,"src":129919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,129921,129922],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,129924,129925],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[318,129927,129929],{"id":129928},"_625-通配符选择器","6.2.5 通配符选择器",[19,129931,129932],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,129934,129935],{},"* {",[19,129937,129938],{},"color=\"red\"}",[318,129940,129942],{"id":129941},"_626-总结","6.2.6 总结",[5198,129944],{"style":129442,"src":129945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,129947,129949],{"id":129948},"_63-css字体属性","6.3 css字体属性",[19,129951,129952],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[318,129954,129956],{"id":129955},"_631-字体系列","6.3.1 字体系列",[19,129958,129959],{},"font-family: '宋体';",[19,129961,129962,129964],{},[4027,129963,3917],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[318,129966,129968],{"id":129967},"_632-字体大小","6.3.2 字体大小",[19,129970,129971],{},"font-size: 20px",[19,129973,129974,30084],{},[4027,129975,129674],{},[19,129977,129978],{},"①px（像素）大小是网页的最常用单位",[19,129980,129981],{},"②谷歌浏览器默认为16px",[19,129983,129984],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,129986,129987],{},"④可以给body指定整个页面的大小：会自动引用",[26,129989,129991],{"className":129586,"code":129990,"language":129588,"meta":31,"style":31},"body {\n  font-size: 16px;\n}\n",[33,129992,129993,129999,130011],{"__ignoreMap":31},[36,129994,129995,129997],{"class":38,"line":39},[36,129996,55357],{"class":54857},[36,129998,19228],{"class":42},[36,130000,130001,130003,130005,130007,130009],{"class":38,"line":53},[36,130002,74180],{"class":112},[36,130004,54994],{"class":42},[36,130006,4472],{"class":112},[36,130008,55049],{"class":46},[36,130010,5029],{"class":42},[36,130012,130013],{"class":38,"line":196},[36,130014,5300],{"class":42},[19,130016,130017],{},"⑤标题标签比较特殊，需要单独指定大小",[318,130019,130021],{"id":130020},"_633-字体粗细","6.3.3 字体粗细",[19,130023,130024],{},"font-weight: bold;",[19,130026,130027],{},"font-weight: 100；",[19,130029,130030,130032],{},[4027,130031,3917],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,130034,130035],{},"font-weight= 400;",[19,130037,130038],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[318,130040,130042],{"id":130041},"_634-文字样式","6.3.4 文字样式",[19,130044,130045],{},"font-style: normal；",[19,130047,130048,30084],{},[4027,130049,130050],{},"属性值",[19,130052,130053],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,130055,130056],{},"②italic：浏览器会显示斜体的字体样式",[5198,130058],{"style":129442,"src":130059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[318,130061,130063],{"id":130062},"_635-字体符合属性","6.3.5 字体符合属性",[5198,130065],{"style":129442,"src":130066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[5198,130068],{"style":129442,"src":130069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,130071,130072],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,130074,130075,30084],{},[4027,130076,129674],{},[19,130078,130079],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,130081,130082],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,130084,130085],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,130087,130089],{"id":130088},"_64-css-test文本属性","6.4 css test文本属性",[318,130091,130093],{"id":130092},"_641-文本颜色","6.4.1 文本颜色",[19,130095,130096],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[26,130098,130100],{"className":129586,"code":130099,"language":129588,"meta":31,"style":31},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[33,130101,130102,130107,130113,130123,130128,130133],{"__ignoreMap":31},[36,130103,130104],{"class":38,"line":39},[36,130105,130106],{"class":3943},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[36,130108,130109,130111],{"class":38,"line":53},[36,130110,19],{"class":54857},[36,130112,19228],{"class":42},[36,130114,130115,130117,130119,130121],{"class":38,"line":196},[36,130116,74459],{"class":112},[36,130118,54994],{"class":42},[36,130120,60976],{"class":112},[36,130122,5029],{"class":42},[36,130124,130125],{"class":38,"line":642},[36,130126,130127],{"class":3943},"  \u002F* color: #ff0000; *\u002F\n",[36,130129,130130],{"class":38,"line":655},[36,130131,130132],{"class":3943},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[36,130134,130135],{"class":38,"line":662},[36,130136,5300],{"class":42},[5198,130138],{"style":129442,"src":130139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[318,130141,130143],{"id":130142},"_642-对齐文本","6.4.2 对齐文本",[19,130145,130146,130147,130150],{},"text-align属于用于设置元素内文本内容的 ",[4027,130148,130149],{},"水平对齐"," 方式",[19,130152,130153],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[318,130155,130157],{"id":130156},"_643-装饰文本","6.4.3 装饰文本",[19,130159,130160],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[26,130162,130164],{"className":129586,"code":130163,"language":129588,"meta":31,"style":31},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[33,130165,130166,130172,130182,130186,130192,130203],{"__ignoreMap":31},[36,130167,130168,130170],{"class":38,"line":39},[36,130169,4113],{"class":54857},[36,130171,19228],{"class":42},[36,130173,130174,130176,130178,130180],{"class":38,"line":53},[36,130175,74056],{"class":112},[36,130177,54994],{"class":42},[36,130179,58293],{"class":112},[36,130181,5029],{"class":42},[36,130183,130184],{"class":38,"line":196},[36,130185,5300],{"class":42},[36,130187,130188,130190],{"class":38,"line":642},[36,130189,19],{"class":54857},[36,130191,19228],{"class":42},[36,130193,130194,130196,130198,130201],{"class":38,"line":655},[36,130195,74056],{"class":112},[36,130197,54994],{"class":42},[36,130199,130200],{"class":112},"underline",[36,130202,5029],{"class":42},[36,130204,130205],{"class":38,"line":662},[36,130206,5300],{"class":42},[318,130208,130210],{"id":130209},"_644-文本缩进","6.4.4 文本缩进",[19,130212,130213],{},"实现文本的第一行首行缩进自己指定的距离",[19,130215,130216],{},"20px往右边走；-20px往左边走",[19,130218,130219],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[26,130221,130223],{"className":129586,"code":130222,"language":129588,"meta":31,"style":31},"p {\n  text-indent: 2em;\n}\n",[33,130224,130225,130231,130244],{"__ignoreMap":31},[36,130226,130227,130229],{"class":38,"line":39},[36,130228,19],{"class":54857},[36,130230,19228],{"class":42},[36,130232,130233,130236,130238,130240,130242],{"class":38,"line":53},[36,130234,130235],{"class":112},"  text-indent",[36,130237,54994],{"class":42},[36,130239,498],{"class":112},[36,130241,27175],{"class":46},[36,130243,5029],{"class":42},[36,130245,130246],{"class":38,"line":196},[36,130247,5300],{"class":42},[318,130249,130251],{"id":130250},"_645-行间距","6.4.5 行间距",[19,130253,130254],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[26,130256,130258],{"className":129586,"code":130257,"language":129588,"meta":31,"style":31},"p {\n  line-height: 1.6;\n}\n",[33,130259,130260,130266,130278],{"__ignoreMap":31},[36,130261,130262,130264],{"class":38,"line":39},[36,130263,19],{"class":54857},[36,130265,19228],{"class":42},[36,130267,130268,130271,130273,130276],{"class":38,"line":53},[36,130269,130270],{"class":112},"  line-height",[36,130272,54994],{"class":42},[36,130274,130275],{"class":112},"1.6",[36,130277,5029],{"class":42},[36,130279,130280],{"class":38,"line":196},[36,130281,5300],{"class":42},[3785,130283,130284],{},"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":31,"searchDepth":53,"depth":53,"links":130286},[130287,130288,130296,130303],{"id":129768,"depth":53,"text":129769},{"id":129803,"depth":53,"text":129804,"children":130289},[130290,130291,130292,130293,130294,130295],{"id":129810,"depth":196,"text":129811},{"id":129823,"depth":196,"text":129824},{"id":129896,"depth":196,"text":129897},{"id":129909,"depth":196,"text":129910},{"id":129928,"depth":196,"text":129929},{"id":129941,"depth":196,"text":129942},{"id":129948,"depth":53,"text":129949,"children":130297},[130298,130299,130300,130301,130302],{"id":129955,"depth":196,"text":129956},{"id":129967,"depth":196,"text":129968},{"id":130020,"depth":196,"text":130021},{"id":130041,"depth":196,"text":130042},{"id":130062,"depth":196,"text":130063},{"id":130088,"depth":53,"text":130089,"children":130304},[130305,130306,130307,130308,130309],{"id":130092,"depth":196,"text":130093},{"id":130142,"depth":196,"text":130143},{"id":130156,"depth":196,"text":130157},{"id":130209,"depth":196,"text":130210},{"id":130250,"depth":196,"text":130251},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":129760,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":130316,"title":130317,"body":130318,"description":26998,"extension":3817,"meta":130967,"navigation":658,"path":130968,"seo":130969,"stem":130970,"__hash__":130971},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":130319,"toc":130948},[130320,130323,130327,130331,130391,130395,130405,130408,130411,130415,130440,130444,130447,130450,130453,130456,130459,130463,130466,130469,130511,130514,130540,130546,130549,130553,130557,130563,130566,130569,130572,130575,130578,130581,130626,130630,130633,130636,130640,130644,130673,130676,130681,130684,130687,130690,130693,130697,130701,130704,130706,130709,130713,130716,130720,130723,130726,130729,130733,130737,130743,130753,130756,130759,130762,130765,130768,130891,130899,130907,130945],[10,130321,130317],{"id":130322},"_7-css引入方式与选择器进阶",[14,130324,130326],{"id":130325},"_71-css引入方式","7.1 css引入方式",[318,130328,130330],{"id":130329},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[26,130332,130336],{"className":130333,"code":130334,"language":130335,"meta":31,"style":31},"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",[33,130337,130338,130346,130353,130365,130378,130383],{"__ignoreMap":31},[36,130339,130340,130342,130344],{"class":38,"line":39},[36,130341,393],{"class":42},[36,130343,3785],{"class":54857},[36,130345,54864],{"class":42},[36,130347,130348,130351],{"class":38,"line":53},[36,130349,130350],{"class":54857},"  h1",[36,130352,19228],{"class":42},[36,130354,130355,130358,130360,130363],{"class":38,"line":196},[36,130356,130357],{"class":112},"    color",[36,130359,54994],{"class":42},[36,130361,130362],{"class":112},"blue",[36,130364,5029],{"class":42},[36,130366,130367,130370,130372,130374,130376],{"class":38,"line":642},[36,130368,130369],{"class":112},"    font-size",[36,130371,54994],{"class":42},[36,130373,4670],{"class":112},[36,130375,55049],{"class":46},[36,130377,5029],{"class":42},[36,130379,130380],{"class":38,"line":655},[36,130381,130382],{"class":42},"  }\n",[36,130384,130385,130387,130389],{"class":38,"line":662},[36,130386,55342],{"class":42},[36,130388,3785],{"class":54857},[36,130390,54864],{"class":42},[19,130392,130393,30084],{},[4027,130394,129674],{},[19,130396,80780,130397,130400,130401,130404],{},[33,130398,130399],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[33,130402,130403],{},"\u003Chead>","标签中",[19,130406,130407],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,130409,130410],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[318,130412,130414],{"id":130413},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[26,130416,130418],{"className":130333,"code":130417,"language":130335,"meta":31,"style":31},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[33,130419,130420],{"__ignoreMap":31},[36,130421,130422,130424,130426,130428,130430,130433,130436,130438],{"class":38,"line":39},[36,130423,393],{"class":42},[36,130425,19],{"class":54857},[36,130427,66181],{"class":101},[36,130429,47],{"class":42},[36,130431,130432],{"class":105},"\"color: red; font-size: 16px;\"",[36,130434,130435],{"class":42},">这是一个段落\u003C\u002F",[36,130437,19],{"class":54857},[36,130439,54864],{"class":42},[19,130441,130442,30084],{},[4027,130443,129674],{},[19,130445,130446],{},"①style其实就是标签的属性",[19,130448,130449],{},"②在双引号中间，写法要符合css规范",[19,130451,130452],{},"③可以控制当前的标签设置样式",[19,130454,130455],{},"④书写繁琐，简单时才用",[19,130457,130458],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[318,130460,130462],{"id":130461},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,130464,130465],{},"使用最多，单独建一个css文件，然后html引用",[19,130467,130468],{},"①css文件部分： style.css",[26,130470,130472],{"className":129586,"code":130471,"language":129588,"meta":31,"style":31},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[33,130473,130474,130479,130485,130495,130507],{"__ignoreMap":31},[36,130475,130476],{"class":38,"line":39},[36,130477,130478],{"class":3943},"\u002F* style.css *\u002F\n",[36,130480,130481,130483],{"class":38,"line":53},[36,130482,10],{"class":54857},[36,130484,19228],{"class":42},[36,130486,130487,130489,130491,130493],{"class":38,"line":196},[36,130488,74459],{"class":112},[36,130490,54994],{"class":42},[36,130492,130362],{"class":112},[36,130494,5029],{"class":42},[36,130496,130497,130499,130501,130503,130505],{"class":38,"line":642},[36,130498,74180],{"class":112},[36,130500,54994],{"class":42},[36,130502,4670],{"class":112},[36,130504,55049],{"class":46},[36,130506,5029],{"class":42},[36,130508,130509],{"class":38,"line":655},[36,130510,5300],{"class":42},[19,130512,130513],{},"②html部分",[26,130515,130517],{"className":130333,"code":130516,"language":130335,"meta":31,"style":31},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[33,130518,130519],{"__ignoreMap":31},[36,130520,130521,130523,130525,130527,130529,130531,130533,130535,130538],{"class":38,"line":39},[36,130522,393],{"class":42},[36,130524,72560],{"class":54857},[36,130526,72563],{"class":101},[36,130528,47],{"class":42},[36,130530,72568],{"class":105},[36,130532,64612],{"class":101},[36,130534,47],{"class":42},[36,130536,130537],{"class":105},"\"style.css\"",[36,130539,54864],{"class":42},[19,130541,130542,130545],{},[33,130543,130544],{},"\u003Chr>","水平线标签（但是不常用！）",[19,130547,130548],{},"ctrl+0回到页面原来大小",[14,130550,130552],{"id":130551},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[318,130554,130556],{"id":130555},"_721-快速生成html","7.2.1 快速生成html",[19,130558,130559,130560],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[33,130561,130562],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,130564,130565],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,130567,130568],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,130570,130571],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,130573,130574],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,130576,130577],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,130579,130580],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[26,130582,130584],{"className":130333,"code":130583,"language":130335,"meta":31,"style":31},"\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",[33,130585,130586,130591,130596,130601,130606,130611,130616,130621],{"__ignoreMap":31},[36,130587,130588],{"class":38,"line":39},[36,130589,130590],{"class":3943},"\u003C!-- Emmet 语法示例 -->\n",[36,130592,130593],{"class":38,"line":53},[36,130594,130595],{"class":3943},"\u003C!-- div*3        → 生成3个div -->\n",[36,130597,130598],{"class":38,"line":196},[36,130599,130600],{"class":3943},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[36,130602,130603],{"class":38,"line":642},[36,130604,130605],{"class":3943},"\u003C!-- div+p        → 兄弟div和p -->\n",[36,130607,130608],{"class":38,"line":655},[36,130609,130610],{"class":3943},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[36,130612,130613],{"class":38,"line":662},[36,130614,130615],{"class":3943},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[36,130617,130618],{"class":38,"line":667},[36,130619,130620],{"class":3943},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[36,130622,130623],{"class":38,"line":679},[36,130624,130625],{"class":3943},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[318,130627,130629],{"id":130628},"_722-快速生成css","7.2.2 快速生成css",[19,130631,130632],{},"简写开头",[19,130634,130635],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,130637,130639],{"id":130638},"_73-css复合选择器","7.3 css复合选择器",[318,130641,130643],{"id":130642},"_731-后代选择器","7.3.1 后代选择器",[26,130645,130647],{"className":129586,"code":130646,"language":129588,"meta":31,"style":31},".parent .child {\n  color: blue;\n}\n",[33,130648,130649,130659,130669],{"__ignoreMap":31},[36,130650,130651,130654,130657],{"class":38,"line":39},[36,130652,130653],{"class":101},".parent",[36,130655,130656],{"class":101}," .child",[36,130658,19228],{"class":42},[36,130660,130661,130663,130665,130667],{"class":38,"line":53},[36,130662,74459],{"class":112},[36,130664,54994],{"class":42},[36,130666,130362],{"class":112},[36,130668,5029],{"class":42},[36,130670,130671],{"class":38,"line":196},[36,130672,5300],{"class":42},[19,130674,130675],{},"元素1 元素2 {样式声明}",[19,130677,130678],{},[4027,130679,130680],{},"注意点:",[19,130682,130683],{},"①元素1和元素2中间用空格隔开",[19,130685,130686],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,130688,130689],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,130691,130692],{},"④元素1和元素2可以是任意基础选择器",[318,130694,130696],{"id":130695},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,130698,130699],{},[4027,130700,130680],{},[19,130702,130703],{},"①元素1和元素2中间用大于号隔开",[19,130705,130686],{},[19,130707,130708],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[318,130710,130712],{"id":130711},"_733-并集选择器","7.3.3 并集选择器",[19,130714,130715],{},"元素1，元素2 {样式声明}",[19,130717,130718],{},[4027,130719,130680],{},[19,130721,130722],{},"①元素1和元素2中间用逗号隔开",[19,130724,130725],{},"②逗号可以理解为和的意思",[19,130727,130728],{},"③并集选择器通常用于集体声明",[318,130730,130732],{"id":130731},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,130734,130735],{},[4027,130736,130680],{},[19,130738,130739,130740,130742],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[72560,130741],{},"－:visited－:hover－:active。",[19,130744,130745,130746,130749,130750,29354],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[130747,130748],"hover",{}," 、 ",[130751,130752],"first-child",{},[19,130754,130755],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,130757,130758],{},"link对没访问的进行设置",[19,130760,130761],{},"vistied对已访问的进行改变",[19,130763,130764],{},"hover鼠标经过就会变",[19,130766,130767],{},"active常按(点)就会变",[26,130769,130771],{"className":129586,"code":130770,"language":129588,"meta":31,"style":31},"\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",[33,130772,130773,130778,130787,130797,130807,130811,130820,130831,130835,130843,130853,130863,130867,130876,130887],{"__ignoreMap":31},[36,130774,130775],{"class":38,"line":39},[36,130776,130777],{"class":3943},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[36,130779,130780,130782,130785],{"class":38,"line":53},[36,130781,4113],{"class":54857},[36,130783,130784],{"class":101},":link",[36,130786,19228],{"class":42},[36,130788,130789,130791,130793,130795],{"class":38,"line":196},[36,130790,74459],{"class":112},[36,130792,54994],{"class":42},[36,130794,65924],{"class":112},[36,130796,5029],{"class":42},[36,130798,130799,130801,130803,130805],{"class":38,"line":642},[36,130800,74056],{"class":112},[36,130802,54994],{"class":42},[36,130804,58293],{"class":112},[36,130806,5029],{"class":42},[36,130808,130809],{"class":38,"line":655},[36,130810,5300],{"class":42},[36,130812,130813,130815,130818],{"class":38,"line":662},[36,130814,4113],{"class":54857},[36,130816,130817],{"class":101},":visited",[36,130819,19228],{"class":42},[36,130821,130822,130824,130826,130829],{"class":38,"line":667},[36,130823,74459],{"class":112},[36,130825,54994],{"class":42},[36,130827,130828],{"class":112},"purple",[36,130830,5029],{"class":42},[36,130832,130833],{"class":38,"line":679},[36,130834,5300],{"class":42},[36,130836,130837,130839,130841],{"class":38,"line":685},[36,130838,4113],{"class":54857},[36,130840,64495],{"class":101},[36,130842,19228],{"class":42},[36,130844,130845,130847,130849,130851],{"class":38,"line":691},[36,130846,74459],{"class":112},[36,130848,54994],{"class":42},[36,130850,58445],{"class":112},[36,130852,5029],{"class":42},[36,130854,130855,130857,130859,130861],{"class":38,"line":696},[36,130856,74056],{"class":112},[36,130858,54994],{"class":42},[36,130860,130200],{"class":112},[36,130862,5029],{"class":42},[36,130864,130865],{"class":38,"line":702},[36,130866,5300],{"class":42},[36,130868,130869,130871,130874],{"class":38,"line":708},[36,130870,4113],{"class":54857},[36,130872,130873],{"class":101},":active",[36,130875,19228],{"class":42},[36,130877,130878,130880,130882,130885],{"class":38,"line":713},[36,130879,74459],{"class":112},[36,130881,54994],{"class":42},[36,130883,130884],{"class":112},"green",[36,130886,5029],{"class":42},[36,130888,130889],{"class":38,"line":719},[36,130890,5300],{"class":42},[318,130892,130894,130895,130898],{"id":130893},"_735-伪类选择器","7.3.5 ",[130896,130897],"focus",{},"伪类选择器",[19,130900,130901,130903,130904,130906],{},[130896,130902],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[33,130905,129647],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[26,130908,130910],{"className":129586,"code":130909,"language":129588,"meta":31,"style":31},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[33,130911,130912,130920,130931,130941],{"__ignoreMap":31},[36,130913,130914,130916,130918],{"class":38,"line":39},[36,130915,57378],{"class":54857},[36,130917,65455],{"class":101},[36,130919,19228],{"class":42},[36,130921,130922,130925,130927,130929],{"class":38,"line":53},[36,130923,130924],{"class":112},"  border-color",[36,130926,54994],{"class":42},[36,130928,58445],{"class":112},[36,130930,5029],{"class":42},[36,130932,130933,130935,130937,130939],{"class":38,"line":196},[36,130934,74352],{"class":112},[36,130936,54994],{"class":42},[36,130938,58293],{"class":112},[36,130940,5029],{"class":42},[36,130942,130943],{"class":38,"line":642},[36,130944,5300],{"class":42},[3785,130946,130947],{},"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":31,"searchDepth":53,"depth":53,"links":130949},[130950,130955,130959],{"id":130325,"depth":53,"text":130326,"children":130951},[130952,130953,130954],{"id":130329,"depth":196,"text":130330},{"id":130413,"depth":196,"text":130414},{"id":130461,"depth":196,"text":130462},{"id":130551,"depth":53,"text":130552,"children":130956},[130957,130958],{"id":130555,"depth":196,"text":130556},{"id":130628,"depth":196,"text":130629},{"id":130638,"depth":53,"text":130639,"children":130960},[130961,130962,130963,130964,130965],{"id":130642,"depth":196,"text":130643},{"id":130695,"depth":196,"text":130696},{"id":130711,"depth":196,"text":130712},{"id":130731,"depth":196,"text":130732},{"id":130893,"depth":196,"text":130966},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":130317,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":130973,"title":130974,"body":130975,"description":26998,"extension":3817,"meta":132898,"navigation":658,"path":132899,"seo":132900,"stem":132901,"__hash__":132902},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":130976,"toc":132872},[130977,130980,130984,130993,130997,131023,131028,131031,131034,131037,131040,131044,131047,131057,131065,131069,131104,131109,131112,131115,131118,131121,131125,131128,131137,131141,131154,131159,131162,131165,131168,131172,131175,131179,131182,131237,131240,131271,131274,131328,131332,131335,131501,131624,131627,131630,131633,131636,131640,131643,131647,131650,131653,131657,131660,131691,131718,131746,131749,131753,131779,131822,131826,131920,131923,131950,131953,131956,131959,131962,131965,131968,131971,131974,131977,131981,132038,132065,132069,132117,132121,132162,132164,132167,132170,132173,132176,132180,132272,132275,132278,132281,132285,132408,132609,132613,132617,132620,132623,132626,132630,132633,132636,132661,132664,132667,132670,132673,132676,132680,132688,132750,132753,132811,132814,132817,132820,132823,132826,132829,132832,132869],[10,130978,130974],{"id":130979},"_8-css显示模式与背景特性",[14,130981,130983],{"id":130982},"_81-css元素显示模式","8.1 css元素显示模式",[19,130985,130986,130987,130989,130990,130992],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[33,130988,129197],{},"自己占一行，比如一行可以放多个",[33,130991,129200],{},"，HTML 元素一般分为块元素和行内元素两种类型",[318,130994,130996],{"id":130995},"_811-块元素","8.1.1 块元素",[19,130998,130999,131000,131002,131003,4087,131006,4087,131008,4087,131010,4087,131013,4087,131016,131019,131020,131022],{},"常见的块元素有",[33,131001,129101],{},"~",[33,131004,131005],{},"\u003Ch6>",[33,131007,129127],{},[33,131009,129197],{},[33,131011,131012],{},"\u003Cul>",[33,131014,131015],{},"\u003Col>",[33,131017,131018],{},"\u003Cli>","等，其中 ",[33,131021,129197],{}," 标签是最典型的块元素",[19,131024,131025],{},[4027,131026,131027],{},"块级元素的特点：",[19,131029,131030],{},"① 比较霸道，自己独占一行。",[19,131032,131033],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,131035,131036],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,131038,131039],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,131041,131042],{},[4027,131043,3917],{},[19,131045,131046],{},"①文字类的元素内不能使用块级元素",[19,131048,80803,131049,131051,131052,131054,131055],{},[33,131050,129127],{}," 标签主要用于存放文字，因此 ",[33,131053,129127],{}," 里面不能放块级元素，特别是不能放",[33,131056,129197],{},[19,131058,131059,131060,131002,131062,131064],{},"⑥同理， ",[33,131061,129101],{},[33,131063,131005],{},"等都是文字类块级标签，里面也不能放其他块级元素",[318,131066,131068],{"id":131067},"_812-行内元素","8.1.2 行内元素",[19,131070,131071,131072,4087,131074,4087,131077,4087,131080,4087,131083,4087,131086,4087,131089,4087,131092,4087,131095,4087,131098,131100,131101,131103],{},"常见的行内元素有 ",[33,131073,129359],{},[33,131075,131076],{},"\u003Cstrong>",[33,131078,131079],{},"\u003Cb>",[33,131081,131082],{},"\u003Cem>",[33,131084,131085],{},"\u003Ci>",[33,131087,131088],{},"\u003Cdel>",[33,131090,131091],{},"\u003Cs>",[33,131093,131094],{},"\u003Cins>",[33,131096,131097],{},"\u003Cu>",[33,131099,129200],{}," 等，其中 ",[33,131102,129200],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,131105,131106],{},[4027,131107,131108],{},"特点：",[19,131110,131111],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,131113,131114],{},"② 高、宽直接设置是无效的。",[19,131116,131117],{},"③ 默认宽度就是它本身内容的宽度。",[19,131119,131120],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,131122,131123],{},[4027,131124,3917],{},[19,131126,131127],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,131129,131130,131131,131133,131134,131136],{},"②特殊情况链接 ",[33,131132,129359],{}," 里面可以放块级元素，但是给 ",[33,131135,129359],{}," 转换一下块级模式最安全",[318,131138,131140],{"id":131139},"_813-行内块元素","8.1.3 行内块元素",[19,131142,131143,131144,4087,131147,4087,131150,131153],{},"在行内元素中有几个特殊的标签 —— ",[33,131145,131146],{},"\u003Cimg \u002F>",[33,131148,131149],{},"\u003Cinput \u002F>",[33,131151,131152],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,131155,131156],{},[4027,131157,131158],{},"行内块元素的特点：",[19,131160,131161],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,131163,131164],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,131166,131167],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[318,131169,131171],{"id":131170},"_814-总结","8.1.4 总结",[5198,131173],{"style":129442,"src":131174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[318,131176,131178],{"id":131177},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,131180,131181],{},"①转换为块元素：display:block;",[26,131183,131185],{"className":129586,"code":131184,"language":129588,"meta":31,"style":31},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[33,131186,131187,131192,131198,131209,131221,131233],{"__ignoreMap":31},[36,131188,131189],{"class":38,"line":39},[36,131190,131191],{"class":3943},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[36,131193,131194,131196],{"class":38,"line":53},[36,131195,4113],{"class":54857},[36,131197,19228],{"class":42},[36,131199,131200,131203,131205,131207],{"class":38,"line":196},[36,131201,131202],{"class":112},"  display",[36,131204,54994],{"class":42},[36,131206,64424],{"class":112},[36,131208,5029],{"class":42},[36,131210,131211,131213,131215,131217,131219],{"class":38,"line":642},[36,131212,74122],{"class":112},[36,131214,54994],{"class":42},[36,131216,4186],{"class":112},[36,131218,55049],{"class":46},[36,131220,5029],{"class":42},[36,131222,131223,131225,131227,131229,131231],{"class":38,"line":655},[36,131224,74342],{"class":112},[36,131226,54994],{"class":42},[36,131228,4276],{"class":112},[36,131230,55049],{"class":46},[36,131232,5029],{"class":42},[36,131234,131235],{"class":38,"line":662},[36,131236,5300],{"class":42},[19,131238,131239],{},"②转换为行内元素：display:inline;",[26,131241,131243],{"className":129586,"code":131242,"language":129588,"meta":31,"style":31},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[33,131244,131245,131250,131256,131267],{"__ignoreMap":31},[36,131246,131247],{"class":38,"line":39},[36,131248,131249],{"class":3943},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[36,131251,131252,131254],{"class":38,"line":53},[36,131253,55168],{"class":54857},[36,131255,19228],{"class":42},[36,131257,131258,131260,131262,131265],{"class":38,"line":196},[36,131259,131202],{"class":112},[36,131261,54994],{"class":42},[36,131263,131264],{"class":112},"inline",[36,131266,5029],{"class":42},[36,131268,131269],{"class":38,"line":642},[36,131270,5300],{"class":42},[19,131272,131273],{},"③转换为行内块：display:inline-block;",[26,131275,131277],{"className":129586,"code":131276,"language":129588,"meta":31,"style":31},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[33,131278,131279,131284,131290,131300,131312,131324],{"__ignoreMap":31},[36,131280,131281],{"class":38,"line":39},[36,131282,131283],{"class":3943},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[36,131285,131286,131288],{"class":38,"line":53},[36,131287,36],{"class":54857},[36,131289,19228],{"class":42},[36,131291,131292,131294,131296,131298],{"class":38,"line":196},[36,131293,131202],{"class":112},[36,131295,54994],{"class":42},[36,131297,75937],{"class":112},[36,131299,5029],{"class":42},[36,131301,131302,131304,131306,131308,131310],{"class":38,"line":642},[36,131303,74122],{"class":112},[36,131305,54994],{"class":42},[36,131307,4483],{"class":112},[36,131309,55049],{"class":46},[36,131311,5029],{"class":42},[36,131313,131314,131316,131318,131320,131322],{"class":38,"line":655},[36,131315,74342],{"class":112},[36,131317,54994],{"class":42},[36,131319,4820],{"class":112},[36,131321,55049],{"class":46},[36,131323,5029],{"class":42},[36,131325,131326],{"class":38,"line":662},[36,131327,5300],{"class":42},[318,131329,131331],{"id":131330},"_816-小米侧边栏","8.1.6 小米侧边栏",[5198,131333],{"style":129442,"src":131334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[26,131336,131338],{"className":130333,"code":131337,"language":130335,"meta":31,"style":31},"\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",[33,131339,131340,131345,131360,131379,131398,131417,131436,131455,131474,131493],{"__ignoreMap":31},[36,131341,131342],{"class":38,"line":39},[36,131343,131344],{"class":3943},"\u003C!-- 小米侧边栏案例 -->\n",[36,131346,131347,131349,131351,131353,131355,131358],{"class":38,"line":53},[36,131348,393],{"class":42},[36,131350,55168],{"class":54857},[36,131352,57043],{"class":101},[36,131354,47],{"class":42},[36,131356,131357],{"class":105},"\"sidebar\"",[36,131359,54864],{"class":42},[36,131361,131362,131364,131366,131368,131370,131372,131375,131377],{"class":38,"line":196},[36,131363,55701],{"class":42},[36,131365,4113],{"class":54857},[36,131367,64612],{"class":101},[36,131369,47],{"class":42},[36,131371,64617],{"class":105},[36,131373,131374],{"class":42},">手机 电话卡\u003C\u002F",[36,131376,4113],{"class":54857},[36,131378,54864],{"class":42},[36,131380,131381,131383,131385,131387,131389,131391,131394,131396],{"class":38,"line":642},[36,131382,55701],{"class":42},[36,131384,4113],{"class":54857},[36,131386,64612],{"class":101},[36,131388,47],{"class":42},[36,131390,64617],{"class":105},[36,131392,131393],{"class":42},">电视 盒子\u003C\u002F",[36,131395,4113],{"class":54857},[36,131397,54864],{"class":42},[36,131399,131400,131402,131404,131406,131408,131410,131413,131415],{"class":38,"line":655},[36,131401,55701],{"class":42},[36,131403,4113],{"class":54857},[36,131405,64612],{"class":101},[36,131407,47],{"class":42},[36,131409,64617],{"class":105},[36,131411,131412],{"class":42},">笔记本 平板\u003C\u002F",[36,131414,4113],{"class":54857},[36,131416,54864],{"class":42},[36,131418,131419,131421,131423,131425,131427,131429,131432,131434],{"class":38,"line":662},[36,131420,55701],{"class":42},[36,131422,4113],{"class":54857},[36,131424,64612],{"class":101},[36,131426,47],{"class":42},[36,131428,64617],{"class":105},[36,131430,131431],{"class":42},">出行 穿戴\u003C\u002F",[36,131433,4113],{"class":54857},[36,131435,54864],{"class":42},[36,131437,131438,131440,131442,131444,131446,131448,131451,131453],{"class":38,"line":667},[36,131439,55701],{"class":42},[36,131441,4113],{"class":54857},[36,131443,64612],{"class":101},[36,131445,47],{"class":42},[36,131447,64617],{"class":105},[36,131449,131450],{"class":42},">智能 路由器\u003C\u002F",[36,131452,4113],{"class":54857},[36,131454,54864],{"class":42},[36,131456,131457,131459,131461,131463,131465,131467,131470,131472],{"class":38,"line":679},[36,131458,55701],{"class":42},[36,131460,4113],{"class":54857},[36,131462,64612],{"class":101},[36,131464,47],{"class":42},[36,131466,64617],{"class":105},[36,131468,131469],{"class":42},">健康 儿童\u003C\u002F",[36,131471,4113],{"class":54857},[36,131473,54864],{"class":42},[36,131475,131476,131478,131480,131482,131484,131486,131489,131491],{"class":38,"line":685},[36,131477,55701],{"class":42},[36,131479,4113],{"class":54857},[36,131481,64612],{"class":101},[36,131483,47],{"class":42},[36,131485,64617],{"class":105},[36,131487,131488],{"class":42},">耳机 音响\u003C\u002F",[36,131490,4113],{"class":54857},[36,131492,54864],{"class":42},[36,131494,131495,131497,131499],{"class":38,"line":691},[36,131496,55342],{"class":42},[36,131498,55168],{"class":54857},[36,131500,54864],{"class":42},[26,131502,131504],{"className":129586,"code":131503,"language":129588,"meta":31,"style":31},".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",[33,131505,131506,131515,131525,131538,131550,131562,131574,131584,131595,131599,131609,131620],{"__ignoreMap":31},[36,131507,131508,131511,131513],{"class":38,"line":39},[36,131509,131510],{"class":101},".sidebar",[36,131512,5134],{"class":54857},[36,131514,19228],{"class":42},[36,131516,131517,131519,131521,131523],{"class":38,"line":53},[36,131518,131202],{"class":112},[36,131520,54994],{"class":42},[36,131522,64424],{"class":112},[36,131524,5029],{"class":42},[36,131526,131527,131529,131531,131534,131536],{"class":38,"line":196},[36,131528,74122],{"class":112},[36,131530,54994],{"class":42},[36,131532,131533],{"class":112},"234",[36,131535,55049],{"class":46},[36,131537,5029],{"class":42},[36,131539,131540,131542,131544,131546,131548],{"class":38,"line":642},[36,131541,74342],{"class":112},[36,131543,54994],{"class":42},[36,131545,4326],{"class":112},[36,131547,55049],{"class":46},[36,131549,5029],{"class":42},[36,131551,131552,131554,131556,131558,131560],{"class":38,"line":655},[36,131553,130270],{"class":112},[36,131555,54994],{"class":42},[36,131557,4326],{"class":112},[36,131559,55049],{"class":46},[36,131561,5029],{"class":42},[36,131563,131564,131566,131568,131570,131572],{"class":38,"line":662},[36,131565,74377],{"class":112},[36,131567,54994],{"class":42},[36,131569,4820],{"class":112},[36,131571,55049],{"class":46},[36,131573,5029],{"class":42},[36,131575,131576,131578,131580,131582],{"class":38,"line":667},[36,131577,74459],{"class":112},[36,131579,54994],{"class":42},[36,131581,64397],{"class":112},[36,131583,5029],{"class":42},[36,131585,131586,131588,131590,131593],{"class":38,"line":679},[36,131587,74432],{"class":112},[36,131589,54994],{"class":42},[36,131591,131592],{"class":112},"#55585a",[36,131594,5029],{"class":42},[36,131596,131597],{"class":38,"line":685},[36,131598,5300],{"class":42},[36,131600,131601,131603,131605,131607],{"class":38,"line":691},[36,131602,131510],{"class":101},[36,131604,5134],{"class":54857},[36,131606,64495],{"class":101},[36,131608,19228],{"class":42},[36,131610,131611,131613,131615,131618],{"class":38,"line":696},[36,131612,74432],{"class":112},[36,131614,54994],{"class":42},[36,131616,131617],{"class":112},"#ff6700",[36,131619,5029],{"class":42},[36,131621,131622],{"class":38,"line":702},[36,131623,5300],{"class":42},[5198,131625],{"style":129442,"src":131626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,131628,131629],{},"行高=盒子高度：实现文字的垂直居中",[19,131631,131632],{},"原理讲解：",[5198,131634],{"style":129442,"src":131635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,131637,131639],{"id":131638},"_82-css背景","8.2 css背景",[19,131641,131642],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[318,131644,131646],{"id":131645},"_821-背景颜色","8.2.1 背景颜色",[19,131648,131649],{},"background-color:颜色值;",[19,131651,131652],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[318,131654,131656],{"id":131655},"_822-背景图片","8.2.2 背景图片",[19,131658,131659],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[26,131661,131663],{"className":129586,"code":131662,"language":129588,"meta":31,"style":31},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[33,131664,131665,131671,131687],{"__ignoreMap":31},[36,131666,131667,131669],{"class":38,"line":39},[36,131668,55168],{"class":54857},[36,131670,19228],{"class":42},[36,131672,131673,131676,131678,131680,131682,131685],{"class":38,"line":53},[36,131674,131675],{"class":112},"  background-image",[36,131677,54994],{"class":42},[36,131679,65281],{"class":112},[36,131681,495],{"class":42},[36,131683,131684],{"class":468},"images\u002Fbg.png",[36,131686,6422],{"class":42},[36,131688,131689],{"class":38,"line":196},[36,131690,5300],{"class":42},[248,131692,131693,131702],{},[251,131694,131695],{},[254,131696,131697,131700],{},[257,131698,131699],{"align":259},"参数值",[257,131701,263],{"align":259},[265,131703,131704,131711],{},[254,131705,131706,131708],{},[270,131707,58293],{"align":259},[270,131709,131710],{"align":259},"无背景图（默认的）",[254,131712,131713,131715],{},[270,131714,65281],{"align":259},[270,131716,131717],{"align":259},"使用绝对或相对地址指定背景图像",[26,131719,131720],{"className":129586,"code":131662,"language":129588,"meta":31,"style":31},[33,131721,131722,131728,131742],{"__ignoreMap":31},[36,131723,131724,131726],{"class":38,"line":39},[36,131725,55168],{"class":54857},[36,131727,19228],{"class":42},[36,131729,131730,131732,131734,131736,131738,131740],{"class":38,"line":53},[36,131731,131675],{"class":112},[36,131733,54994],{"class":42},[36,131735,65281],{"class":112},[36,131737,495],{"class":42},[36,131739,131684],{"class":468},[36,131741,6422],{"class":42},[36,131743,131744],{"class":38,"line":196},[36,131745,5300],{"class":42},[19,131747,131748],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[318,131750,131752],{"id":131751},"_823-背景平铺","8.2.3 背景平铺",[26,131754,131756],{"className":129586,"code":131755,"language":129588,"meta":31,"style":31},"div {\n  background-repeat: no-repeat;\n}\n",[33,131757,131758,131764,131775],{"__ignoreMap":31},[36,131759,131760,131762],{"class":38,"line":39},[36,131761,55168],{"class":54857},[36,131763,19228],{"class":42},[36,131765,131766,131769,131771,131773],{"class":38,"line":53},[36,131767,131768],{"class":112},"  background-repeat",[36,131770,54994],{"class":42},[36,131772,65291],{"class":112},[36,131774,5029],{"class":42},[36,131776,131777],{"class":38,"line":196},[36,131778,5300],{"class":42},[248,131780,131781,131789],{},[251,131782,131783],{},[254,131784,131785,131787],{},[257,131786,131699],{"align":259},[257,131788,263],{"align":259},[265,131790,131791,131799,131806,131814],{},[254,131792,131793,131796],{},[270,131794,131795],{"align":259},"repeat",[270,131797,131798],{"align":259},"背景图像在纵向和横向上平铺（默认的）",[254,131800,131801,131803],{},[270,131802,65291],{"align":259},[270,131804,131805],{"align":259},"背景图像不平铺",[254,131807,131808,131811],{},[270,131809,131810],{"align":259},"repeat-x",[270,131812,131813],{"align":259},"背景图像在横向上平铺",[254,131815,131816,131819],{},[270,131817,131818],{"align":259},"repeat-y",[270,131820,131821],{"align":259},"背景图像在纵向平铺",[318,131823,131825],{"id":131824},"_824-背景图片位置","8.2.4 背景图片位置",[26,131827,131829],{"className":129586,"code":131828,"language":129588,"meta":31,"style":31},"\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",[33,131830,131831,131836,131842,131856,131860,131865,131871,131887,131891,131896,131902,131916],{"__ignoreMap":31},[36,131832,131833],{"class":38,"line":39},[36,131834,131835],{"class":3943},"\u002F* 方位名词 *\u002F\n",[36,131837,131838,131840],{"class":38,"line":53},[36,131839,55168],{"class":54857},[36,131841,19228],{"class":42},[36,131843,131844,131847,131849,131851,131854],{"class":38,"line":196},[36,131845,131846],{"class":112},"  background-position",[36,131848,54994],{"class":42},[36,131850,55149],{"class":112},[36,131852,131853],{"class":112}," top",[36,131855,5029],{"class":42},[36,131857,131858],{"class":38,"line":642},[36,131859,5300],{"class":42},[36,131861,131862],{"class":38,"line":655},[36,131863,131864],{"class":3943},"\u002F* 精确单位 *\u002F\n",[36,131866,131867,131869],{"class":38,"line":662},[36,131868,55168],{"class":54857},[36,131870,19228],{"class":42},[36,131872,131873,131875,131877,131879,131881,131883,131885],{"class":38,"line":667},[36,131874,131846],{"class":112},[36,131876,54994],{"class":42},[36,131878,1921],{"class":112},[36,131880,55049],{"class":46},[36,131882,61059],{"class":112},[36,131884,55049],{"class":46},[36,131886,5029],{"class":42},[36,131888,131889],{"class":38,"line":679},[36,131890,5300],{"class":42},[36,131892,131893],{"class":38,"line":685},[36,131894,131895],{"class":3943},"\u002F* 混合单位 *\u002F\n",[36,131897,131898,131900],{"class":38,"line":691},[36,131899,55168],{"class":54857},[36,131901,19228],{"class":42},[36,131903,131904,131906,131908,131910,131912,131914],{"class":38,"line":696},[36,131905,131846],{"class":112},[36,131907,54994],{"class":42},[36,131909,1921],{"class":112},[36,131911,55049],{"class":46},[36,131913,20767],{"class":112},[36,131915,5029],{"class":42},[36,131917,131918],{"class":38,"line":702},[36,131919,5300],{"class":42},[19,131921,131922],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[248,131924,131925,131933],{},[251,131926,131927],{},[254,131928,131929,131931],{},[257,131930,131699],{"align":259},[257,131932,29483],{"align":259},[265,131934,131935,131942],{},[254,131936,131937,131939],{},[270,131938,55525],{"align":259},[270,131940,131941],{"align":259},"百分数|由浮点数和单位标识符组成的长度值",[254,131943,131944,131947],{},[270,131945,131946],{"align":259},"position",[270,131948,131949],{"align":259},"top|center|bottom|left|center|right 方位名词",[19,131951,131952],{},"其他说明：",[19,131954,131955],{},"①参数是方位名词",[19,131957,131958],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,131960,131961],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,131963,131964],{},"②参数是精确单位",[19,131966,131967],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,131969,131970],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,131972,131973],{},"③参数是混合单位",[19,131975,131976],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[318,131978,131980],{"id":131979},"_825-背景图片固定","8.2.5 背景图片固定",[26,131982,131984],{"className":129586,"code":131983,"language":129588,"meta":31,"style":31},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[33,131985,131986,131991,131997,132009,132013,132018,132024,132034],{"__ignoreMap":31},[36,131987,131988],{"class":38,"line":39},[36,131989,131990],{"class":3943},"\u002F* 背景滚动（默认） *\u002F\n",[36,131992,131993,131995],{"class":38,"line":53},[36,131994,55168],{"class":54857},[36,131996,19228],{"class":42},[36,131998,131999,132002,132004,132007],{"class":38,"line":196},[36,132000,132001],{"class":112},"  background-attachment",[36,132003,54994],{"class":42},[36,132005,132006],{"class":112},"scroll",[36,132008,5029],{"class":42},[36,132010,132011],{"class":38,"line":642},[36,132012,5300],{"class":42},[36,132014,132015],{"class":38,"line":655},[36,132016,132017],{"class":3943},"\u002F* 背景固定 *\u002F\n",[36,132019,132020,132022],{"class":38,"line":662},[36,132021,55168],{"class":54857},[36,132023,19228],{"class":42},[36,132025,132026,132028,132030,132032],{"class":38,"line":667},[36,132027,132001],{"class":112},[36,132029,54994],{"class":42},[36,132031,89786],{"class":112},[36,132033,5029],{"class":42},[36,132035,132036],{"class":38,"line":679},[36,132037,5300],{"class":42},[248,132039,132040,132049],{},[251,132041,132042],{},[254,132043,132044,132047],{},[257,132045,132046],{"align":259},"参数",[257,132048,263],{"align":259},[265,132050,132051,132058],{},[254,132052,132053,132055],{},[270,132054,132006],{"align":259},[270,132056,132057],{"align":259},"背景图像是随对象内容滚动",[254,132059,132060,132062],{},[270,132061,89786],{"align":259},[270,132063,132064],{"align":259},"背景图像固定",[318,132066,132068],{"id":132067},"_826-背景样式合写","8.2.6 背景样式合写",[26,132070,132072],{"className":129586,"code":132071,"language":129588,"meta":31,"style":31},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[33,132073,132074,132079,132085,132113],{"__ignoreMap":31},[36,132075,132076],{"class":38,"line":39},[36,132077,132078],{"class":3943},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[36,132080,132081,132083],{"class":38,"line":53},[36,132082,55168],{"class":54857},[36,132084,19228],{"class":42},[36,132086,132087,132089,132091,132093,132096,132098,132100,132102,132104,132107,132109,132111],{"class":38,"line":196},[36,132088,74165],{"class":112},[36,132090,54994],{"class":42},[36,132092,64397],{"class":112},[36,132094,132095],{"class":112}," url",[36,132097,495],{"class":42},[36,132099,131684],{"class":468},[36,132101,17373],{"class":42},[36,132103,65291],{"class":112},[36,132105,132106],{"class":112}," fixed",[36,132108,20767],{"class":112},[36,132110,131853],{"class":112},[36,132112,5029],{"class":42},[36,132114,132115],{"class":38,"line":642},[36,132116,5300],{"class":42},[318,132118,132120],{"id":132119},"_827-背景色半透明","8.2.7 背景色半透明",[26,132122,132124],{"className":129586,"code":132123,"language":129588,"meta":31,"style":31},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[33,132125,132126,132132,132158],{"__ignoreMap":31},[36,132127,132128,132130],{"class":38,"line":39},[36,132129,55168],{"class":54857},[36,132131,19228],{"class":42},[36,132133,132134,132136,132138,132140,132142,132144,132146,132148,132150,132152,132154,132156],{"class":38,"line":53},[36,132135,74165],{"class":112},[36,132137,54994],{"class":42},[36,132139,58666],{"class":112},[36,132141,495],{"class":42},[36,132143,1859],{"class":112},[36,132145,478],{"class":42},[36,132147,1859],{"class":112},[36,132149,478],{"class":42},[36,132151,1859],{"class":112},[36,132153,478],{"class":42},[36,132155,104069],{"class":112},[36,132157,6422],{"class":42},[36,132159,132160],{"class":38,"line":196},[36,132161,5300],{"class":42},[19,132163,102944],{},[19,132165,132166],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,132168,132169],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,132171,132172],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,132174,132175],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[318,132177,132179],{"id":132178},"_828-总结","8.2.8 总结",[248,132181,132182,132193],{},[251,132183,132184],{},[254,132185,132186,132189,132191],{},[257,132187,132188],{"align":259},"属性",[257,132190,263],{"align":259},[257,132192,4030],{"align":259},[265,132194,132195,132206,132217,132228,132239,132250,132261],{},[254,132196,132197,132200,132203],{},[270,132198,132199],{"align":259},"background-color",[270,132201,132202],{"align":259},"背景颜色",[270,132204,132205],{"align":259},"预定义的颜色值\u002F十六进制\u002FRGB代码",[254,132207,132208,132211,132214],{},[270,132209,132210],{"align":259},"background-image",[270,132212,132213],{"align":259},"背景图片",[270,132215,132216],{"align":259},"url(图片路径)",[254,132218,132219,132222,132225],{},[270,132220,132221],{"align":259},"background-repeat",[270,132223,132224],{"align":259},"是否平铺",[270,132226,132227],{"align":259},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[254,132229,132230,132233,132236],{},[270,132231,132232],{"align":259},"background-position",[270,132234,132235],{"align":259},"背景位置",[270,132237,132238],{"align":259},"length\u002Fposition 分别是x和y坐标",[254,132240,132241,132244,132247],{},[270,132242,132243],{"align":259},"background-attachment",[270,132245,132246],{"align":259},"背景附着",[270,132248,132249],{"align":259},"scroll(背景滚动) \u002Ffixed (背景固定)",[254,132251,132252,132255,132258],{},[270,132253,132254],{"align":259},"背景简写",[270,132256,132257],{"align":259},"书写更简单",[270,132259,132260],{"align":259},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[254,132262,132263,132266,132269],{},[270,132264,132265],{"align":259},"背景半透明",[270,132267,132268],{"align":259},"背景颜色半透明",[270,132270,132271],{"align":259},"background: rgba(0,0,0.3); 后面必须是4个值",[19,132273,132274],{},"颜色渐变：",[5198,132276],{"style":129442,"src":132277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[5198,132279],{"style":129442,"src":132280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[318,132282,132284],{"id":132283},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[26,132286,132288],{"className":130333,"code":132287,"language":130335,"meta":31,"style":31},"\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",[33,132289,132290,132305,132324,132343,132362,132381,132400],{"__ignoreMap":31},[36,132291,132292,132294,132296,132298,132300,132303],{"class":38,"line":39},[36,132293,393],{"class":42},[36,132295,55168],{"class":54857},[36,132297,57043],{"class":101},[36,132299,47],{"class":42},[36,132301,132302],{"class":105},"\"nav\"",[36,132304,54864],{"class":42},[36,132306,132307,132309,132311,132313,132315,132317,132320,132322],{"class":38,"line":53},[36,132308,55701],{"class":42},[36,132310,4113],{"class":54857},[36,132312,64612],{"class":101},[36,132314,47],{"class":42},[36,132316,64617],{"class":105},[36,132318,132319],{"class":42},">五彩导航1\u003C\u002F",[36,132321,4113],{"class":54857},[36,132323,54864],{"class":42},[36,132325,132326,132328,132330,132332,132334,132336,132339,132341],{"class":38,"line":196},[36,132327,55701],{"class":42},[36,132329,4113],{"class":54857},[36,132331,64612],{"class":101},[36,132333,47],{"class":42},[36,132335,64617],{"class":105},[36,132337,132338],{"class":42},">五彩导航2\u003C\u002F",[36,132340,4113],{"class":54857},[36,132342,54864],{"class":42},[36,132344,132345,132347,132349,132351,132353,132355,132358,132360],{"class":38,"line":642},[36,132346,55701],{"class":42},[36,132348,4113],{"class":54857},[36,132350,64612],{"class":101},[36,132352,47],{"class":42},[36,132354,64617],{"class":105},[36,132356,132357],{"class":42},">五彩导航3\u003C\u002F",[36,132359,4113],{"class":54857},[36,132361,54864],{"class":42},[36,132363,132364,132366,132368,132370,132372,132374,132377,132379],{"class":38,"line":655},[36,132365,55701],{"class":42},[36,132367,4113],{"class":54857},[36,132369,64612],{"class":101},[36,132371,47],{"class":42},[36,132373,64617],{"class":105},[36,132375,132376],{"class":42},">五彩导航4\u003C\u002F",[36,132378,4113],{"class":54857},[36,132380,54864],{"class":42},[36,132382,132383,132385,132387,132389,132391,132393,132396,132398],{"class":38,"line":662},[36,132384,55701],{"class":42},[36,132386,4113],{"class":54857},[36,132388,64612],{"class":101},[36,132390,47],{"class":42},[36,132392,64617],{"class":105},[36,132394,132395],{"class":42},">五彩导航5\u003C\u002F",[36,132397,4113],{"class":54857},[36,132399,54864],{"class":42},[36,132401,132402,132404,132406],{"class":38,"line":667},[36,132403,55342],{"class":42},[36,132405,55168],{"class":54857},[36,132407,54864],{"class":42},[26,132409,132411],{"className":129586,"code":132410,"language":129588,"meta":31,"style":31},".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",[33,132412,132413,132422,132432,132444,132456,132466,132478,132488,132492,132517,132540,132563,132586],{"__ignoreMap":31},[36,132414,132415,132418,132420],{"class":38,"line":39},[36,132416,132417],{"class":101},".nav",[36,132419,5134],{"class":54857},[36,132421,19228],{"class":42},[36,132423,132424,132426,132428,132430],{"class":38,"line":53},[36,132425,131202],{"class":112},[36,132427,54994],{"class":42},[36,132429,75937],{"class":112},[36,132431,5029],{"class":42},[36,132433,132434,132436,132438,132440,132442],{"class":38,"line":196},[36,132435,74122],{"class":112},[36,132437,54994],{"class":42},[36,132439,4687],{"class":112},[36,132441,55049],{"class":46},[36,132443,5029],{"class":42},[36,132445,132446,132448,132450,132452,132454],{"class":38,"line":642},[36,132447,74342],{"class":112},[36,132449,54994],{"class":42},[36,132451,4726],{"class":112},[36,132453,55049],{"class":46},[36,132455,5029],{"class":42},[36,132457,132458,132460,132462,132464],{"class":38,"line":655},[36,132459,74080],{"class":112},[36,132461,54994],{"class":42},[36,132463,55149],{"class":112},[36,132465,5029],{"class":42},[36,132467,132468,132470,132472,132474,132476],{"class":38,"line":662},[36,132469,130270],{"class":112},[36,132471,54994],{"class":42},[36,132473,4726],{"class":112},[36,132475,55049],{"class":46},[36,132477,5029],{"class":42},[36,132479,132480,132482,132484,132486],{"class":38,"line":667},[36,132481,74459],{"class":112},[36,132483,54994],{"class":42},[36,132485,64397],{"class":112},[36,132487,5029],{"class":42},[36,132489,132490],{"class":38,"line":679},[36,132491,5300],{"class":42},[36,132493,132494,132496,132498,132501,132503,132505,132508,132510,132512,132514],{"class":38,"line":685},[36,132495,132417],{"class":101},[36,132497,5134],{"class":54857},[36,132499,132500],{"class":101},":nth-child",[36,132502,495],{"class":42},[36,132504,4092],{"class":112},[36,132506,132507],{"class":42},") { ",[36,132509,132199],{"class":112},[36,132511,54994],{"class":42},[36,132513,131617],{"class":112},[36,132515,132516],{"class":42},"; }\n",[36,132518,132519,132521,132523,132525,132527,132529,132531,132533,132535,132538],{"class":38,"line":691},[36,132520,132417],{"class":101},[36,132522,5134],{"class":54857},[36,132524,132500],{"class":101},[36,132526,495],{"class":42},[36,132528,498],{"class":112},[36,132530,132507],{"class":42},[36,132532,132199],{"class":112},[36,132534,54994],{"class":42},[36,132536,132537],{"class":112},"#ff0000",[36,132539,132516],{"class":42},[36,132541,132542,132544,132546,132548,132550,132552,132554,132556,132558,132561],{"class":38,"line":696},[36,132543,132417],{"class":101},[36,132545,5134],{"class":54857},[36,132547,132500],{"class":101},[36,132549,495],{"class":42},[36,132551,1982],{"class":112},[36,132553,132507],{"class":42},[36,132555,132199],{"class":112},[36,132557,54994],{"class":42},[36,132559,132560],{"class":112},"#00a4ff",[36,132562,132516],{"class":42},[36,132564,132565,132567,132569,132571,132573,132575,132577,132579,132581,132584],{"class":38,"line":702},[36,132566,132417],{"class":101},[36,132568,5134],{"class":54857},[36,132570,132500],{"class":101},[36,132572,495],{"class":42},[36,132574,4168],{"class":112},[36,132576,132507],{"class":42},[36,132578,132199],{"class":112},[36,132580,54994],{"class":42},[36,132582,132583],{"class":112},"#ff00ff",[36,132585,132516],{"class":42},[36,132587,132588,132590,132592,132594,132596,132598,132600,132602,132604,132607],{"class":38,"line":708},[36,132589,132417],{"class":101},[36,132591,5134],{"class":54857},[36,132593,132500],{"class":101},[36,132595,495],{"class":42},[36,132597,4194],{"class":112},[36,132599,132507],{"class":42},[36,132601,132199],{"class":112},[36,132603,54994],{"class":42},[36,132605,132606],{"class":112},"#00ff00",[36,132608,132516],{"class":42},[14,132610,132612],{"id":132611},"_83-css三大特性","8.3 css三大特性",[318,132614,132616],{"id":132615},"_831-层叠性","8.3.1 层叠性",[19,132618,132619],{},"为了解决样式冲突问题",[19,132621,132622],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,132624,132625],{},"   ②样式不冲突，不会层叠",[318,132627,132629],{"id":132628},"_832-继承性","8.3.2 继承性",[19,132631,132632],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,132634,132635],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[26,132637,132639],{"className":129586,"code":132638,"language":129588,"meta":31,"style":31},"p {\n  color: #333;\n}\n",[33,132640,132641,132647,132657],{"__ignoreMap":31},[36,132642,132643,132645],{"class":38,"line":39},[36,132644,19],{"class":54857},[36,132646,19228],{"class":42},[36,132648,132649,132651,132653,132655],{"class":38,"line":53},[36,132650,74459],{"class":112},[36,132652,54994],{"class":42},[36,132654,65924],{"class":112},[36,132656,5029],{"class":42},[36,132658,132659],{"class":38,"line":196},[36,132660,5300],{"class":42},[5198,132662],{"style":129442,"src":132663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,132665,132666],{},"解释：①行高可以跟单位也可以不跟单位",[19,132668,132669],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,132671,132672],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,132674,132675],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[318,132677,132679],{"id":132678},"_833-优先级","8.3.3 优先级",[211,132681,132682,132685],{},[214,132683,132684],{},"选择器相同，则执行层叠性",[214,132686,132687],{},"选择器不同，则根据选择器权重执行",[248,132689,132690,132700],{},[251,132691,132692],{},[254,132693,132694,132697],{},[257,132695,132696],{"align":259},"选择器",[257,132698,132699],{"align":259},"选择器权重",[265,132701,132702,132710,132718,132726,132734,132742],{},[254,132703,132704,132707],{},[270,132705,132706],{"align":259},"继承 或者*",[270,132708,132709],{"align":259},"0，0，0，0",[254,132711,132712,132715],{},[270,132713,132714],{"align":259},"标签选择器",[270,132716,132717],{"align":259},"0，0，0，1",[254,132719,132720,132723],{},[270,132721,132722],{"align":259},"类选择器，伪类选择器",[270,132724,132725],{"align":259},"0，0，1，0",[254,132727,132728,132731],{},[270,132729,132730],{"align":259},"ID选择器",[270,132732,132733],{"align":259},"0，1，0，0",[254,132735,132736,132739],{},[270,132737,132738],{"align":259},"行内样式",[270,132740,132741],{"align":259},"1，0，0，0",[254,132743,132744,132747],{},[270,132745,132746],{"align":259},"！important",[270,132748,132749],{"align":259},"无穷大",[19,132751,132752],{},"! important用法：",[26,132754,132756],{"className":129586,"code":132755,"language":129588,"meta":31,"style":31},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[33,132757,132758,132763,132769,132782,132786,132791,132797,132807],{"__ignoreMap":31},[36,132759,132760],{"class":38,"line":39},[36,132761,132762],{"class":3943},"\u002F* !important 拥有最高优先级 *\u002F\n",[36,132764,132765,132767],{"class":38,"line":53},[36,132766,55168],{"class":54857},[36,132768,19228],{"class":42},[36,132770,132771,132773,132775,132777,132780],{"class":38,"line":196},[36,132772,74459],{"class":112},[36,132774,54994],{"class":42},[36,132776,55202],{"class":112},[36,132778,132779],{"class":46}," !important",[36,132781,5029],{"class":42},[36,132783,132784],{"class":38,"line":642},[36,132785,5300],{"class":42},[36,132787,132788],{"class":38,"line":655},[36,132789,132790],{"class":3943},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[36,132792,132793,132795],{"class":38,"line":662},[36,132794,55168],{"class":54857},[36,132796,19228],{"class":42},[36,132798,132799,132801,132803,132805],{"class":38,"line":667},[36,132800,74459],{"class":112},[36,132802,54994],{"class":42},[36,132804,60976],{"class":112},[36,132806,5029],{"class":42},[36,132808,132809],{"class":38,"line":679},[36,132810,5300],{"class":42},[19,132812,132813],{},"优先级注意点：",[19,132815,132816],{},"①权重是有4组数字组成,但是不会有进位",[19,132818,132819],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,132821,132822],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,132824,132825],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,132827,132828],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,132830,132831],{},"⑥复合选择器",[248,132833,132834,132844],{},[251,132835,132836],{},[254,132837,132838,132841],{},[257,132839,132840],{"align":259},"div ul li",[257,132842,132843],{"align":259},"0,0,0,3",[265,132845,132846,132854,132862],{},[254,132847,132848,132851],{},[270,132849,132850],{"align":259},".nav ul li",[270,132852,132853],{"align":259},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[254,132855,132856,132859],{},[270,132857,132858],{"align":259},"a:hover",[270,132860,132861],{"align":259},"0,0,1,1",[254,132863,132864,132867],{},[270,132865,132866],{"align":259},".nav a",[270,132868,132861],{"align":259},[3785,132870,132871],{},"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":31,"searchDepth":53,"depth":53,"links":132873},[132874,132882,132893],{"id":130982,"depth":53,"text":130983,"children":132875},[132876,132877,132878,132879,132880,132881],{"id":130995,"depth":196,"text":130996},{"id":131067,"depth":196,"text":131068},{"id":131139,"depth":196,"text":131140},{"id":131170,"depth":196,"text":131171},{"id":131177,"depth":196,"text":131178},{"id":131330,"depth":196,"text":131331},{"id":131638,"depth":53,"text":131639,"children":132883},[132884,132885,132886,132887,132888,132889,132890,132891,132892],{"id":131645,"depth":196,"text":131646},{"id":131655,"depth":196,"text":131656},{"id":131751,"depth":196,"text":131752},{"id":131824,"depth":196,"text":131825},{"id":131979,"depth":196,"text":131980},{"id":132067,"depth":196,"text":132068},{"id":132119,"depth":196,"text":132120},{"id":132178,"depth":196,"text":132179},{"id":132283,"depth":196,"text":132284},{"id":132611,"depth":53,"text":132612,"children":132894},[132895,132896,132897],{"id":132615,"depth":196,"text":132616},{"id":132628,"depth":196,"text":132629},{"id":132678,"depth":196,"text":132679},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":130974,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":132904,"title":132905,"body":132906,"description":26998,"extension":3817,"meta":134496,"navigation":658,"path":134497,"seo":134498,"stem":134499,"__hash__":134500},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":132907,"toc":134475},[132908,132911,132915,132918,132921,132924,132927,132930,132933,132936,132940,132948,132985,133021,133024,133038,133043,133077,133080,133173,133178,133181,133211,133214,133219,133227,133231,133238,133284,133328,133333,133336,133339,133342,133345,133348,133351,133353,133356,133360,133365,133409,133414,133417,133420,133457,133462,133465,133468,133471,133474,133506,133509,133512,133515,133547,133550,133553,133556,133560,133563,133595,133598,133602,133622,133625,133633,133636,133640,133645,133648,133680,133685,133688,133726,133730,133735,133738,133741,133772,133775,133792,133797,133849,133909,133914,133968,134006,134010,134014,134017,134021,134029,134032,134034,134045,134050,134098,134132,134135,134138,134141,134144,134188,134191,134194,134197,134200,134203,134206,134250,134253,134256,134259,134262,134265,134268,134274,134277,134321,134324,134327,134330,134333,134336,134380,134383,134385,134388,134392,134396,134434,134438,134441,134444,134448,134456,134460,134463,134466,134469,134472],[10,132909,132905],{"id":132910},"_9-css盒模型浮动与切图",[14,132912,132914],{"id":132913},"_91-盒子模型","9.1 盒子模型",[19,132916,132917],{},"利用盒子来设计网页",[19,132919,132920],{},"盒子包含：边框、外边距、内边距、实际内容",[19,132922,132923],{},"网页布局设置：",[19,132925,132926],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,132928,132929],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,132931,132932],{},"③往盒子里装内容",[5198,132934],{"style":129442,"src":132935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[318,132937,132939],{"id":132938},"_911-边框border","9.1.1 边框（border）",[211,132941,132942,132945],{},[214,132943,132944],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[214,132946,132947],{},"语法",[26,132949,132951],{"className":129586,"code":132950,"language":129588,"meta":31,"style":31},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[33,132952,132953,132958,132964,132981],{"__ignoreMap":31},[36,132954,132955],{"class":38,"line":39},[36,132956,132957],{"class":3943},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[36,132959,132960,132962],{"class":38,"line":53},[36,132961,55168],{"class":54857},[36,132963,19228],{"class":42},[36,132965,132966,132968,132970,132972,132974,132976,132979],{"class":38,"line":196},[36,132967,74450],{"class":112},[36,132969,54994],{"class":42},[36,132971,4092],{"class":112},[36,132973,55049],{"class":46},[36,132975,55078],{"class":112},[36,132977,132978],{"class":112}," #ccc",[36,132980,5029],{"class":42},[36,132982,132983],{"class":38,"line":642},[36,132984,5300],{"class":42},[248,132986,132987,132995],{},[251,132988,132989],{},[254,132990,132991,132993],{},[257,132992,132188],{"align":259},[257,132994,263],{"align":259},[265,132996,132997,133005,133013],{},[254,132998,132999,133002],{},[270,133000,133001],{"align":259},"border-width",[270,133003,133004],{"align":259},"定义边框粗细，单位是px",[254,133006,133007,133010],{},[270,133008,133009],{"align":259},"border-style",[270,133011,133012],{"align":259},"边框的样式",[254,133014,133015,133018],{},[270,133016,133017],{"align":259},"border-color",[270,133019,133020],{"align":259},"边框的颜色",[19,133022,133023],{},"边框样式 border-style 可以设置如下值：",[4875,133025,133026,133029,133032,133035],{},[214,133027,133028],{},"none：没有边框即忽略所有边框的宽度（默认值）",[214,133030,133031],{},"solid：边框为单实线(最为常用的)",[214,133033,133034],{},"dashed：边框为虚线",[214,133036,133037],{},"dotted：边框为点线",[211,133039,133040],{"start":196},[214,133041,133042],{},"边框的合写分写",[26,133044,133045],{"className":129586,"code":132950,"language":129588,"meta":31,"style":31},[33,133046,133047,133051,133057,133073],{"__ignoreMap":31},[36,133048,133049],{"class":38,"line":39},[36,133050,132957],{"class":3943},[36,133052,133053,133055],{"class":38,"line":53},[36,133054,55168],{"class":54857},[36,133056,19228],{"class":42},[36,133058,133059,133061,133063,133065,133067,133069,133071],{"class":38,"line":196},[36,133060,74450],{"class":112},[36,133062,54994],{"class":42},[36,133064,4092],{"class":112},[36,133066,55049],{"class":46},[36,133068,55078],{"class":112},[36,133070,132978],{"class":112},[36,133072,5029],{"class":42},[36,133074,133075],{"class":38,"line":642},[36,133076,5300],{"class":42},[19,133078,133079],{},"边框分开写法：",[26,133081,133083],{"className":129586,"code":133082,"language":129588,"meta":31,"style":31},"\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",[33,133084,133085,133090,133096,133114,133132,133151,133169],{"__ignoreMap":31},[36,133086,133087],{"class":38,"line":39},[36,133088,133089],{"class":3943},"\u002F* 边框分开写法 *\u002F\n",[36,133091,133092,133094],{"class":38,"line":53},[36,133093,55168],{"class":54857},[36,133095,19228],{"class":42},[36,133097,133098,133101,133103,133105,133107,133109,133112],{"class":38,"line":196},[36,133099,133100],{"class":112},"  border-top",[36,133102,54994],{"class":42},[36,133104,4092],{"class":112},[36,133106,55049],{"class":46},[36,133108,55078],{"class":112},[36,133110,133111],{"class":112}," #000",[36,133113,5029],{"class":42},[36,133115,133116,133119,133121,133123,133125,133127,133130],{"class":38,"line":642},[36,133117,133118],{"class":112},"  border-right",[36,133120,54994],{"class":42},[36,133122,498],{"class":112},[36,133124,55049],{"class":46},[36,133126,65796],{"class":112},[36,133128,133129],{"class":112}," #333",[36,133131,5029],{"class":42},[36,133133,133134,133137,133139,133141,133143,133146,133149],{"class":38,"line":655},[36,133135,133136],{"class":112},"  border-bottom",[36,133138,54994],{"class":42},[36,133140,1982],{"class":112},[36,133142,55049],{"class":46},[36,133144,133145],{"class":112}," dotted",[36,133147,133148],{"class":112}," #666",[36,133150,5029],{"class":42},[36,133152,133153,133156,133158,133160,133162,133164,133167],{"class":38,"line":662},[36,133154,133155],{"class":112},"  border-left",[36,133157,54994],{"class":42},[36,133159,4092],{"class":112},[36,133161,55049],{"class":46},[36,133163,55078],{"class":112},[36,133165,133166],{"class":112}," #999",[36,133168,5029],{"class":42},[36,133170,133171],{"class":38,"line":667},[36,133172,5300],{"class":42},[211,133174,133175],{"start":642},[214,133176,133177],{},"表格的细线边框",[19,133179,133180],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[26,133182,133184],{"className":129586,"code":133183,"language":129588,"meta":31,"style":31},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[33,133185,133186,133191,133197,133207],{"__ignoreMap":31},[36,133187,133188],{"class":38,"line":39},[36,133189,133190],{"class":3943},"\u002F* 表格细线边框合并 *\u002F\n",[36,133192,133193,133195],{"class":38,"line":53},[36,133194,248],{"class":54857},[36,133196,19228],{"class":42},[36,133198,133199,133201,133203,133205],{"class":38,"line":196},[36,133200,74132],{"class":112},[36,133202,54994],{"class":42},[36,133204,68590],{"class":112},[36,133206,5029],{"class":42},[36,133208,133209],{"class":38,"line":642},[36,133210,5300],{"class":42},[19,133212,133213],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[211,133215,133216],{"start":655},[214,133217,133218],{},"解决边框额外增加盒子的实际大小的方法：",[4875,133220,133221,133224],{},[214,133222,133223],{},"测量盒子大小的时候,不量边框",[214,133225,133226],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[318,133228,133230],{"id":133229},"_912-内边距","9.1.2 内边距",[211,133232,133233,133236],{},[214,133234,133235],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[214,133237,132947],{},[248,133239,133240,133250],{},[251,133241,133242],{},[254,133243,133244,133247],{},[257,133245,133246],{"align":259},"值的个数",[257,133248,133249],{"align":259},"表达意思",[265,133251,133252,133260,133268,133276],{},[254,133253,133254,133257],{},[270,133255,133256],{"align":259},"padding: 5px;",[270,133258,133259],{"align":259},"1个值，代表上下左右都有5个元素",[254,133261,133262,133265],{},[270,133263,133264],{"align":259},"padding: 5px 10px;",[270,133266,133267],{"align":259},"2个值，代表上下内边距为5像素，左右内边距为10像素",[254,133269,133270,133273],{},[270,133271,133272],{"align":259},"padding: 5px 10px 20px;",[270,133274,133275],{"align":259},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[254,133277,133278,133281],{},[270,133279,133280],{"align":259},"padding: 5px 10px 20px 30px;",[270,133282,133283],{"align":259},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[248,133285,133286,133294],{},[251,133287,133288],{},[254,133289,133290,133292],{},[257,133291,132188],{"align":259},[257,133293,263],{"align":259},[265,133295,133296,133304,133312,133320],{},[254,133297,133298,133301],{},[270,133299,133300],{"align":259},"padding-left",[270,133302,133303],{"align":259},"左内边距",[254,133305,133306,133309],{},[270,133307,133308],{"align":259},"padding-right",[270,133310,133311],{"align":259},"右内边距",[254,133313,133314,133317],{},[270,133315,133316],{"align":259},"padding-top",[270,133318,133319],{"align":259},"上内边距",[254,133321,133322,133325],{},[270,133323,133324],{"align":259},"padding-bottom",[270,133326,133327],{"align":259},"下内边距",[211,133329,133330],{"start":196},[214,133331,133332],{},"内边距会影响盒子的实际大小",[19,133334,133335],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,133337,133338],{},"①内容和边框有了距离，添加了内边距",[19,133340,133341],{},"②padding影响了盒子实际大小",[19,133343,133344],{},"内边距对盒子大小的影响：",[19,133346,133347],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,133349,133350],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,133352,98771],{},[19,133354,133355],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[318,133357,133359],{"id":133358},"_913-外边距","9.1.3 外边距",[211,133361,133362],{},[214,133363,133364],{},"控制盒子与盒子之间的距离",[248,133366,133367,133375],{},[251,133368,133369],{},[254,133370,133371,133373],{},[257,133372,132188],{"align":259},[257,133374,263],{"align":259},[265,133376,133377,133385,133393,133401],{},[254,133378,133379,133382],{},[270,133380,133381],{"align":259},"margin-left",[270,133383,133384],{"align":259},"左外边距",[254,133386,133387,133390],{},[270,133388,133389],{"align":259},"margin-right",[270,133391,133392],{"align":259},"右外边距",[254,133394,133395,133398],{},[270,133396,133397],{"align":259},"margin-top",[270,133399,133400],{"align":259},"上外边距",[254,133402,133403,133406],{},[270,133404,133405],{"align":259},"margin-bottom",[270,133407,133408],{"align":259},"下外边距",[211,133410,133411],{"start":53},[214,133412,133413],{},"外边距可以让块级盒子水平居中的两个条件：",[19,133415,133416],{},"①盒子必须指定了宽度（width）",[19,133418,133419],{},"②盒子左右的外边距都设置为 auto",[26,133421,133423],{"className":129586,"code":133422,"language":129588,"meta":31,"style":31},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,133424,133425,133430,133437,133453],{"__ignoreMap":31},[36,133426,133427],{"class":38,"line":39},[36,133428,133429],{"class":3943},"\u002F* margin 复合写法（同上） *\u002F\n",[36,133431,133432,133435],{"class":38,"line":53},[36,133433,133434],{"class":101},".box",[36,133436,19228],{"class":42},[36,133438,133439,133441,133443,133445,133447,133450],{"class":38,"line":196},[36,133440,74024],{"class":112},[36,133442,54994],{"class":42},[36,133444,1859],{"class":112},[36,133446,55113],{"class":112},[36,133448,133449],{"class":42},";  ",[36,133451,133452],{"class":3943},"\u002F* 块级盒子水平居中 *\u002F\n",[36,133454,133455],{"class":38,"line":642},[36,133456,5300],{"class":42},[211,133458,133459],{"start":196},[214,133460,133461],{},"外边距塌陷问题",[19,133463,133464],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[5198,133466],{"style":129442,"src":133467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,133469,133470],{},"解决方案：",[19,133472,133473],{},"①可以为父亲元素定义上边距",[26,133475,133476],{"className":129586,"code":133422,"language":129588,"meta":31,"style":31},[33,133477,133478,133482,133488,133502],{"__ignoreMap":31},[36,133479,133480],{"class":38,"line":39},[36,133481,133429],{"class":3943},[36,133483,133484,133486],{"class":38,"line":53},[36,133485,133434],{"class":101},[36,133487,19228],{"class":42},[36,133489,133490,133492,133494,133496,133498,133500],{"class":38,"line":196},[36,133491,74024],{"class":112},[36,133493,54994],{"class":42},[36,133495,1859],{"class":112},[36,133497,55113],{"class":112},[36,133499,133449],{"class":42},[36,133501,133452],{"class":3943},[36,133503,133504],{"class":38,"line":642},[36,133505,5300],{"class":42},[19,133507,133508],{},"②可以为父亲元素定义上内边距",[19,133510,133511],{},"③可以为父亲元素添加overflow:hidden",[5198,133513],{"style":129442,"src":133514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[26,133516,133517],{"className":129586,"code":133422,"language":129588,"meta":31,"style":31},[33,133518,133519,133523,133529,133543],{"__ignoreMap":31},[36,133520,133521],{"class":38,"line":39},[36,133522,133429],{"class":3943},[36,133524,133525,133527],{"class":38,"line":53},[36,133526,133434],{"class":101},[36,133528,19228],{"class":42},[36,133530,133531,133533,133535,133537,133539,133541],{"class":38,"line":196},[36,133532,74024],{"class":112},[36,133534,54994],{"class":42},[36,133536,1859],{"class":112},[36,133538,55113],{"class":112},[36,133540,133449],{"class":42},[36,133542,133452],{"class":3943},[36,133544,133545],{"class":38,"line":642},[36,133546,5300],{"class":42},[5198,133548],{"style":129442,"src":133549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,133551,133552],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,133554,133555],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[318,133557,133559],{"id":133558},"_914-清除内外边距","9.1.4 清除内外边距",[19,133561,133562],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[26,133564,133565],{"className":129586,"code":133422,"language":129588,"meta":31,"style":31},[33,133566,133567,133571,133577,133591],{"__ignoreMap":31},[36,133568,133569],{"class":38,"line":39},[36,133570,133429],{"class":3943},[36,133572,133573,133575],{"class":38,"line":53},[36,133574,133434],{"class":101},[36,133576,19228],{"class":42},[36,133578,133579,133581,133583,133585,133587,133589],{"class":38,"line":196},[36,133580,74024],{"class":112},[36,133582,54994],{"class":42},[36,133584,1859],{"class":112},[36,133586,55113],{"class":112},[36,133588,133449],{"class":42},[36,133590,133452],{"class":3943},[36,133592,133593],{"class":38,"line":642},[36,133594,5300],{"class":42},[19,133596,133597],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[318,133599,133601],{"id":133600},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[4875,133603,133604,133607,133610,133613,133616,133619],{},[214,133605,133606],{},"文件→打开 ：可以打开我们要测量的图片",[214,133608,133609],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[214,133611,133612],{},"右击标尺，把里面的单位改为像素",[214,133614,133615],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[214,133617,133618],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[214,133620,133621],{},"用选区拖动 可以测量大小",[5198,133623],{"style":129442,"src":133624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[4875,133626,133627,133630],{},[214,133628,133629],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[214,133631,133632],{},"吸管取色工具",[5198,133634],{"style":129442,"src":133635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[318,133637,133639],{"id":133638},"_916-案例","9.1.6 案例",[211,133641,133642],{},[214,133643,133644],{},"小米商品",[5198,133646],{"style":129442,"src":133647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[26,133649,133650],{"className":129586,"code":133422,"language":129588,"meta":31,"style":31},[33,133651,133652,133656,133662,133676],{"__ignoreMap":31},[36,133653,133654],{"class":38,"line":39},[36,133655,133429],{"class":3943},[36,133657,133658,133660],{"class":38,"line":53},[36,133659,133434],{"class":101},[36,133661,19228],{"class":42},[36,133663,133664,133666,133668,133670,133672,133674],{"class":38,"line":196},[36,133665,74024],{"class":112},[36,133667,54994],{"class":42},[36,133669,1859],{"class":112},[36,133671,55113],{"class":112},[36,133673,133449],{"class":42},[36,133675,133452],{"class":3943},[36,133677,133678],{"class":38,"line":642},[36,133679,5300],{"class":42},[211,133681,133682],{"start":53},[214,133683,133684],{},"快报模块",[5198,133686],{"style":129442,"src":133687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[26,133689,133691],{"className":130333,"code":133690,"language":130335,"meta":31,"style":31},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[33,133692,133693,133698,133713,133718],{"__ignoreMap":31},[36,133694,133695],{"class":38,"line":39},[36,133696,133697],{"class":3943},"\u003C!-- HTML 代码示例 -->\n",[36,133699,133700,133702,133704,133706,133708,133711],{"class":38,"line":53},[36,133701,393],{"class":42},[36,133703,55168],{"class":54857},[36,133705,57043],{"class":101},[36,133707,47],{"class":42},[36,133709,133710],{"class":105},"\"example\"",[36,133712,54864],{"class":42},[36,133714,133715],{"class":38,"line":196},[36,133716,133717],{"class":42},"  示例内容\n",[36,133719,133720,133722,133724],{"class":38,"line":642},[36,133721,55342],{"class":42},[36,133723,55168],{"class":54857},[36,133725,54864],{"class":42},[318,133727,133729],{"id":133728},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[211,133731,133732],{},[214,133733,133734],{},"圆角边框",[19,133736,133737],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[5198,133739],{"style":129442,"src":133740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[26,133742,133744],{"className":129586,"code":133743,"language":129588,"meta":31,"style":31},"div {\n  border: 1px solid #ccc;\n}\n",[33,133745,133746,133752,133768],{"__ignoreMap":31},[36,133747,133748,133750],{"class":38,"line":39},[36,133749,55168],{"class":54857},[36,133751,19228],{"class":42},[36,133753,133754,133756,133758,133760,133762,133764,133766],{"class":38,"line":53},[36,133755,74450],{"class":112},[36,133757,54994],{"class":42},[36,133759,4092],{"class":112},[36,133761,55049],{"class":46},[36,133763,55078],{"class":112},[36,133765,132978],{"class":112},[36,133767,5029],{"class":42},[36,133769,133770],{"class":38,"line":196},[36,133771,5300],{"class":42},[19,133773,133774],{},"解释:",[4875,133776,133777,133780,133783,133786,133789],{},[214,133778,133779],{},"参数值可以为数值或百分比的形式",[214,133781,133782],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[214,133784,133785],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[214,133787,133788],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[214,133790,133791],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[211,133793,133794],{"start":53},[214,133795,133796],{},"盒子阴影",[26,133798,133800],{"className":129586,"code":133799,"language":129588,"meta":31,"style":31},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[33,133801,133802,133808,133845],{"__ignoreMap":31},[36,133803,133804,133806],{"class":38,"line":39},[36,133805,55168],{"class":54857},[36,133807,19228],{"class":42},[36,133809,133810,133813,133815,133817,133819,133821,133823,133825,133827,133829,133831,133833,133835,133837,133839,133841,133843],{"class":38,"line":53},[36,133811,133812],{"class":112},"  box-shadow",[36,133814,54994],{"class":42},[36,133816,1859],{"class":112},[36,133818,18411],{"class":112},[36,133820,55049],{"class":46},[36,133822,5750],{"class":112},[36,133824,55049],{"class":46},[36,133826,82321],{"class":112},[36,133828,495],{"class":42},[36,133830,1859],{"class":112},[36,133832,478],{"class":42},[36,133834,1859],{"class":112},[36,133836,478],{"class":42},[36,133838,1859],{"class":112},[36,133840,478],{"class":42},[36,133842,1463],{"class":112},[36,133844,6422],{"class":42},[36,133846,133847],{"class":38,"line":196},[36,133848,5300],{"class":42},[248,133850,133851,133859],{},[251,133852,133853],{},[254,133854,133855,133857],{},[257,133856,4030],{"align":259},[257,133858,31100],{"align":259},[265,133860,133861,133869,133877,133885,133893,133901],{},[254,133862,133863,133866],{},[270,133864,133865],{"align":259},"h-shadow",[270,133867,133868],{"align":259},"必需,水平阴影的位置,允许负值",[254,133870,133871,133874],{},[270,133872,133873],{"align":259},"v-shadow",[270,133875,133876],{"align":259},"必需,垂直阴影的位置,允许负值",[254,133878,133879,133882],{},[270,133880,133881],{"align":259},"blur",[270,133883,133884],{"align":259},"可选,模糊距离,就是影子的虚实",[254,133886,133887,133890],{},[270,133888,133889],{"align":259},"spread",[270,133891,133892],{"align":259},"可选,阴影尺寸",[254,133894,133895,133898],{},[270,133896,133897],{"align":259},"color",[270,133899,133900],{"align":259},"可选,阴影的颜色",[254,133902,133903,133906],{},[270,133904,133905],{"align":259},"inset",[270,133907,133908],{"align":259},"可选,将外部阴影(outset)改为内部阴影",[211,133910,133911],{"start":196},[214,133912,133913],{},"文字阴影",[26,133915,133917],{"className":129586,"code":133916,"language":129588,"meta":31,"style":31},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[33,133918,133919,133925,133964],{"__ignoreMap":31},[36,133920,133921,133923],{"class":38,"line":39},[36,133922,19],{"class":54857},[36,133924,19228],{"class":42},[36,133926,133927,133930,133932,133934,133936,133938,133940,133942,133944,133946,133948,133950,133952,133954,133956,133958,133960,133962],{"class":38,"line":53},[36,133928,133929],{"class":112},"  text-shadow",[36,133931,54994],{"class":42},[36,133933,4092],{"class":112},[36,133935,55049],{"class":46},[36,133937,28732],{"class":112},[36,133939,55049],{"class":46},[36,133941,18411],{"class":112},[36,133943,55049],{"class":46},[36,133945,82321],{"class":112},[36,133947,495],{"class":42},[36,133949,1859],{"class":112},[36,133951,478],{"class":42},[36,133953,1859],{"class":112},[36,133955,478],{"class":42},[36,133957,1859],{"class":112},[36,133959,478],{"class":42},[36,133961,104069],{"class":112},[36,133963,6422],{"class":42},[36,133965,133966],{"class":38,"line":196},[36,133967,5300],{"class":42},[248,133969,133970,133978],{},[251,133971,133972],{},[254,133973,133974,133976],{},[257,133975,4030],{"align":259},[257,133977,31100],{"align":259},[265,133979,133980,133986,133993,134000],{},[254,133981,133982,133984],{},[270,133983,133865],{"align":259},[270,133985,133868],{"align":259},[254,133987,133988,133990],{},[270,133989,133873],{"align":259},[270,133991,133992],{"align":259},"必需,垂直阴影位置,允许负值",[254,133994,133995,133997],{},[270,133996,133881],{"align":259},[270,133998,133999],{"align":259},"可选,模糊的距离",[254,134001,134002,134004],{},[270,134003,133897],{"align":259},[270,134005,133900],{"align":259},[14,134007,134009],{"id":134008},"_92-浮动","9.2 浮动",[318,134011,134013],{"id":134012},"_921-浮动介绍","9.2.1 浮动介绍",[19,134015,134016],{},"在16.2中详细介绍",[318,134018,134020],{"id":134019},"_922-清除浮动","9.2.2 清除浮动",[211,134022,134023,134026],{},[214,134024,134025],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[214,134027,134028],{},"清除浮动的本质",[19,134030,134031],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,134033,12706],{},[4875,134035,134036,134039,134042],{},[214,134037,134038],{},"如果父盒子本身有高度，则不需要清除浮动",[214,134040,134041],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[214,134043,134044],{},"父级有了高度，就不会影响下面的标准流了",[211,134046,134047],{"start":196},[214,134048,134049],{},"清除浮动样式",[26,134051,134053],{"className":129586,"code":134052,"language":129588,"meta":31,"style":31},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[33,134054,134055,134062,134073,134077,134084,134094],{"__ignoreMap":31},[36,134056,134057,134060],{"class":38,"line":39},[36,134058,134059],{"class":101},".left",[36,134061,19228],{"class":42},[36,134063,134064,134067,134069,134071],{"class":38,"line":53},[36,134065,134066],{"class":112},"  float",[36,134068,54994],{"class":42},[36,134070,259],{"class":112},[36,134072,5029],{"class":42},[36,134074,134075],{"class":38,"line":196},[36,134076,5300],{"class":42},[36,134078,134079,134082],{"class":38,"line":642},[36,134080,134081],{"class":101},".right",[36,134083,19228],{"class":42},[36,134085,134086,134088,134090,134092],{"class":38,"line":655},[36,134087,134066],{"class":112},[36,134089,54994],{"class":42},[36,134091,76076],{"class":112},[36,134093,5029],{"class":42},[36,134095,134096],{"class":38,"line":662},[36,134097,5300],{"class":42},[248,134099,134100,134108],{},[251,134101,134102],{},[254,134103,134104,134106],{},[257,134105,130050],{"align":259},[257,134107,31100],{"align":259},[265,134109,134110,134117,134124],{},[254,134111,134112,134114],{},[270,134113,259],{"align":259},[270,134115,134116],{"align":259},"不允许左侧有浮动元素（清除左侧浮动的影响）",[254,134118,134119,134121],{},[270,134120,76076],{"align":259},[270,134122,134123],{"align":259},"不允许右侧有浮动元素（清除右侧浮动的影响）",[254,134125,134126,134129],{},[270,134127,134128],{"align":259},"both",[270,134130,134131],{"align":259},"同时清除左右侧浮动的影响",[19,134133,134134],{},"法一",[19,134136,134137],{},"额外标签法也称为隔墙法",[19,134139,134140],{},"使用方式：",[19,134142,134143],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[26,134145,134146],{"className":129586,"code":134052,"language":129588,"meta":31,"style":31},[33,134147,134148,134154,134164,134168,134174,134184],{"__ignoreMap":31},[36,134149,134150,134152],{"class":38,"line":39},[36,134151,134059],{"class":101},[36,134153,19228],{"class":42},[36,134155,134156,134158,134160,134162],{"class":38,"line":53},[36,134157,134066],{"class":112},[36,134159,54994],{"class":42},[36,134161,259],{"class":112},[36,134163,5029],{"class":42},[36,134165,134166],{"class":38,"line":196},[36,134167,5300],{"class":42},[36,134169,134170,134172],{"class":38,"line":642},[36,134171,134081],{"class":101},[36,134173,19228],{"class":42},[36,134175,134176,134178,134180,134182],{"class":38,"line":655},[36,134177,134066],{"class":112},[36,134179,54994],{"class":42},[36,134181,76076],{"class":112},[36,134183,5029],{"class":42},[36,134185,134186],{"class":38,"line":662},[36,134187,5300],{"class":42},[19,134189,134190],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,134192,134193],{},"优点： 通俗易懂，书写方便",[19,134195,134196],{},"缺点： 添加许多无意义的标签，结构化较差",[19,134198,134199],{},"注意： 要求这个新的空标签必须是块级元素。",[19,134201,134202],{},"法二",[19,134204,134205],{},"父级添加overflow属性",[26,134207,134208],{"className":129586,"code":134052,"language":129588,"meta":31,"style":31},[33,134209,134210,134216,134226,134230,134236,134246],{"__ignoreMap":31},[36,134211,134212,134214],{"class":38,"line":39},[36,134213,134059],{"class":101},[36,134215,19228],{"class":42},[36,134217,134218,134220,134222,134224],{"class":38,"line":53},[36,134219,134066],{"class":112},[36,134221,54994],{"class":42},[36,134223,259],{"class":112},[36,134225,5029],{"class":42},[36,134227,134228],{"class":38,"line":196},[36,134229,5300],{"class":42},[36,134231,134232,134234],{"class":38,"line":642},[36,134233,134081],{"class":101},[36,134235,19228],{"class":42},[36,134237,134238,134240,134242,134244],{"class":38,"line":655},[36,134239,134066],{"class":112},[36,134241,54994],{"class":42},[36,134243,76076],{"class":112},[36,134245,5029],{"class":42},[36,134247,134248],{"class":38,"line":662},[36,134249,5300],{"class":42},[19,134251,134252],{},"overflow: hidden;",[19,134254,134255],{},"优点：代码简洁",[19,134257,134258],{},"缺点：无法显示溢出的部分",[19,134260,134261],{},"注意：是给父元素添加代码",[19,134263,134264],{},"法三",[19,134266,134267],{},"父级添加after伪元素",[19,134269,134270,134273],{},[134271,134272],"after",{}," 方式是额外标签法的升级版",[19,134275,134276],{},"使用的时候复制就可以",[26,134278,134279],{"className":129586,"code":134052,"language":129588,"meta":31,"style":31},[33,134280,134281,134287,134297,134301,134307,134317],{"__ignoreMap":31},[36,134282,134283,134285],{"class":38,"line":39},[36,134284,134059],{"class":101},[36,134286,19228],{"class":42},[36,134288,134289,134291,134293,134295],{"class":38,"line":53},[36,134290,134066],{"class":112},[36,134292,54994],{"class":42},[36,134294,259],{"class":112},[36,134296,5029],{"class":42},[36,134298,134299],{"class":38,"line":196},[36,134300,5300],{"class":42},[36,134302,134303,134305],{"class":38,"line":642},[36,134304,134081],{"class":101},[36,134306,19228],{"class":42},[36,134308,134309,134311,134313,134315],{"class":38,"line":655},[36,134310,134066],{"class":112},[36,134312,54994],{"class":42},[36,134314,76076],{"class":112},[36,134316,5029],{"class":42},[36,134318,134319],{"class":38,"line":662},[36,134320,5300],{"class":42},[19,134322,134323],{},"优点：没有增加标签，结构更简单",[19,134325,134326],{},"缺点：照顾低版本浏览器",[19,134328,134329],{},"代表网站： 百度、淘宝网、网易等",[19,134331,134332],{},"法四",[19,134334,134335],{},"父级添加双伪元素",[26,134337,134338],{"className":129586,"code":134052,"language":129588,"meta":31,"style":31},[33,134339,134340,134346,134356,134360,134366,134376],{"__ignoreMap":31},[36,134341,134342,134344],{"class":38,"line":39},[36,134343,134059],{"class":101},[36,134345,19228],{"class":42},[36,134347,134348,134350,134352,134354],{"class":38,"line":53},[36,134349,134066],{"class":112},[36,134351,54994],{"class":42},[36,134353,259],{"class":112},[36,134355,5029],{"class":42},[36,134357,134358],{"class":38,"line":196},[36,134359,5300],{"class":42},[36,134361,134362,134364],{"class":38,"line":642},[36,134363,134081],{"class":101},[36,134365,19228],{"class":42},[36,134367,134368,134370,134372,134374],{"class":38,"line":655},[36,134369,134066],{"class":112},[36,134371,54994],{"class":42},[36,134373,76076],{"class":112},[36,134375,5029],{"class":42},[36,134377,134378],{"class":38,"line":662},[36,134379,5300],{"class":42},[19,134381,134382],{},"优点：代码更简洁",[19,134384,134326],{},[19,134386,134387],{},"代表网站：小米、腾讯等",[14,134389,134391],{"id":134390},"_93-ps切图","9.3 PS切图",[318,134393,134395],{"id":134394},"_931-常见图片格式","9.3.1 常见图片格式",[248,134397,134398,134408],{},[251,134399,134400],{},[254,134401,134402,134405],{},[257,134403,134404],{"align":259},"jpg图像格式",[257,134406,134407],{"align":259},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[265,134409,134410,134418,134426],{},[254,134411,134412,134415],{},[270,134413,134414],{"align":259},"gif图像格式",[270,134416,134417],{"align":259},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[254,134419,134420,134423],{},[270,134421,134422],{"align":259},"png图像格式",[270,134424,134425],{"align":259},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[254,134427,134428,134431],{},[270,134429,134430],{"align":259},"PSD图像格式",[270,134432,134433],{"align":259},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[318,134435,134437],{"id":134436},"_932-图层切图","9.3.2 图层切图",[19,134439,134440],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,134442,134443],{},"按住shift选中两个图层->图层菜单->合并图层",[318,134445,134447],{"id":134446},"_933-切片切图","9.3.3 切片切图",[4875,134449,134450,134453],{},[214,134451,134452],{},"利用切片工具手动划出",[214,134454,134455],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[318,134457,134459],{"id":134458},"_934-切图步骤","9.3.4 切图步骤",[19,134461,134462],{},"用切片工具选中：",[5198,134464],{"style":129442,"src":134465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,134467,134468],{},"文件 -> 导出",[5198,134470],{"style":129442,"src":134471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[3785,134473,134474],{},"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":31,"searchDepth":53,"depth":53,"links":134476},[134477,134486,134490],{"id":132913,"depth":53,"text":132914,"children":134478},[134479,134480,134481,134482,134483,134484,134485],{"id":132938,"depth":196,"text":132939},{"id":133229,"depth":196,"text":133230},{"id":133358,"depth":196,"text":133359},{"id":133558,"depth":196,"text":133559},{"id":133600,"depth":196,"text":133601},{"id":133638,"depth":196,"text":133639},{"id":133728,"depth":196,"text":133729},{"id":134008,"depth":53,"text":134009,"children":134487},[134488,134489],{"id":134012,"depth":196,"text":134013},{"id":134019,"depth":196,"text":134020},{"id":134390,"depth":53,"text":134391,"children":134491},[134492,134493,134494,134495],{"id":134394,"depth":196,"text":134395},{"id":134436,"depth":196,"text":134437},{"id":134446,"depth":196,"text":134447},{"id":134458,"depth":196,"text":134459},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":132905,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":134502,"title":134503,"body":134504,"description":26998,"extension":3817,"meta":135145,"navigation":658,"path":135146,"seo":135147,"stem":135148,"__hash__":135149},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":134505,"toc":135133},[134506,134509,134513,134539,134573,134577,134581,134584,134626,134633,134643,134651,134653,134656,134659,134662,134669,134683,134687,134690,134719,134723,134726,134740,134744,134747,134775,134779,134782,134808,134812,134817,134850,134855,134883,134887,134904,134950,134955,134999,135016,135123,135131],[10,134507,134503],{"id":134508},"_10-css规范与学成在线案例",[14,134510,134512],{"id":134511},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[211,134514,134515,134521,134527,134533],{},[214,134516,134517,134520],{},[4027,134518,134519],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[214,134522,134523,134526],{},[4027,134524,134525],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[214,134528,134529,134532],{},[4027,134530,134531],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[214,134534,134535,134538],{},[4027,134536,134537],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[26,134540,134541],{"className":129586,"code":132950,"language":129588,"meta":31,"style":31},[33,134542,134543,134547,134553,134569],{"__ignoreMap":31},[36,134544,134545],{"class":38,"line":39},[36,134546,132957],{"class":3943},[36,134548,134549,134551],{"class":38,"line":53},[36,134550,55168],{"class":54857},[36,134552,19228],{"class":42},[36,134554,134555,134557,134559,134561,134563,134565,134567],{"class":38,"line":196},[36,134556,74450],{"class":112},[36,134558,54994],{"class":42},[36,134560,4092],{"class":112},[36,134562,55049],{"class":46},[36,134564,55078],{"class":112},[36,134566,132978],{"class":112},[36,134568,5029],{"class":42},[36,134570,134571],{"class":38,"line":642},[36,134572,5300],{"class":42},[14,134574,134576],{"id":134575},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[318,134578,134580],{"id":134579},"_1021-header头部制作","10.2.1 header头部制作",[5198,134582],{"style":129442,"src":134583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[4875,134585,134586,134593,134600,134606,134613,134620],{},[214,134587,134588,134589,134592],{},"1号是版心盒子 ",[4027,134590,134591],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[214,134594,134595,134596,134599],{},"版心盒子 里面包含 2号盒子 ",[4027,134597,134598],{},"logo"," 图标",[214,134601,134602,134603,134605],{},"版心盒子 里面包含 3号盒子 ",[4027,134604,57270],{}," 导航栏",[214,134607,134608,134609,134612],{},"版心盒子 里面包含 4号盒子 ",[4027,134610,134611],{},"search"," 搜索框",[214,134614,134615,134616,134619],{},"版心盒子 里面包含 5号盒子 ",[4027,134617,134618],{},"user"," 个人信息",[214,134621,134622,134623],{},"注意，要求里面的 ",[4027,134624,134625],{},"4个子盒子 必须都浮动",[211,134627,134628],{},[214,134629,134630],{},[4027,134631,134632],{},"导航栏注意点:",[19,134634,134635,134636,134639,134640],{},"实际开发中， ",[4027,134637,134638],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[4027,134641,134642],{},"用 li 包含链接(li+a)的做法",[4875,134644,134645,134648],{},[214,134646,134647],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[214,134649,134650],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,134652,12706],{},[19,134654,134655],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,134657,134658],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,134660,134661],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[211,134663,134664],{"start":53},[214,134665,134666],{},[4027,134667,134668],{},"4号盒子search的细节：",[4875,134670,134671,134674,134677],{},[214,134672,134673],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[214,134675,134676],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[214,134678,134679,134682],{},[33,134680,134681],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[318,134684,134686],{"id":134685},"_1022-banner制作","10.2.2 banner制作",[5198,134688],{"style":129442,"src":134689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[4875,134691,134692,134699,134705,134712],{},[214,134693,134694,134695,134698],{},"1号盒子是通栏的大盒子 ",[4027,134696,134697],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[214,134700,134701,134702,134704],{},"2号盒子是版心 ",[4027,134703,4665],{}," ， 要水平居中对齐",[214,134706,134707,134708,134711],{},"3号盒子版心内，左对齐 ",[4027,134709,134710],{},"subnav"," 侧导航栏",[214,134713,134714,134715,134718],{},"4号盒子版心内，右对齐 ",[4027,134716,134717],{},"course"," 课程",[318,134720,134722],{"id":134721},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[5198,134724],{"style":129442,"src":134725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[4875,134727,134728,134731,134734,134737],{},[214,134729,134730],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[214,134732,134733],{},"1号盒子是标题 H3 左侧浮动",[214,134735,134736],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[214,134738,134739],{},"3号盒子 右浮动 mod 修改",[318,134741,134743],{"id":134742},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[5198,134745],{"style":129442,"src":134746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[4875,134748,134749,134755,134762,134769,134772],{},[214,134750,134751,134752,134754],{},"1号盒子为最大的盒子 ",[4027,134753,57271],{}," 版心水平居中对齐",[214,134756,134757,134758,134761],{},"2号盒子为上面部分 ",[4027,134759,134760],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[214,134763,134764,134765,134768],{},"3号盒子为底下部分 ",[4027,134766,134767],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[214,134770,134771],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[214,134773,134774],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[318,134776,134778],{"id":134777},"_1025-底部模块制作","10.2.5 底部模块制作",[5198,134780],{"style":129442,"src":134781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[4875,134783,134784,134791,134794,134801],{},[214,134785,134786,134787,134790],{},"1号盒子通栏大盒子 底部 ",[4027,134788,134789],{},"footer"," 给高度 底色是白色",[214,134792,134793],{},"2号盒子版心水平居中",[214,134795,134796,134797,134800],{},"3号盒子版权 ",[4027,134798,134799],{},"copyright"," 左对齐",[214,134802,134803,134804,134807],{},"4号盒子 链接组 ",[4027,134805,134806],{},"links"," 右对齐",[318,134809,134811],{"id":134810},"_1026-代码模块","10.2.6 代码模块",[211,134813,134814],{},[214,134815,134816],{},"html部分",[26,134818,134820],{"className":130333,"code":134819,"language":130335,"meta":31,"style":31},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[33,134821,134822],{"__ignoreMap":31},[36,134823,134824,134826,134828,134830,134832,134835,134838,134840,134843,134846,134848],{"class":38,"line":39},[36,134825,393],{"class":42},[36,134827,4113],{"class":54857},[36,134829,64612],{"class":101},[36,134831,47],{"class":42},[36,134833,134834],{"class":105},"\"https:\u002F\u002Fexample.com\"",[36,134836,134837],{"class":101}," target",[36,134839,47],{"class":42},[36,134841,134842],{"class":105},"\"_blank\"",[36,134844,134845],{"class":42},">链接文字\u003C\u002F",[36,134847,4113],{"class":54857},[36,134849,54864],{"class":42},[211,134851,134852],{"start":53},[214,134853,134854],{},"css部分",[26,134856,134857],{"className":130333,"code":134819,"language":130335,"meta":31,"style":31},[33,134858,134859],{"__ignoreMap":31},[36,134860,134861,134863,134865,134867,134869,134871,134873,134875,134877,134879,134881],{"class":38,"line":39},[36,134862,393],{"class":42},[36,134864,4113],{"class":54857},[36,134866,64612],{"class":101},[36,134868,47],{"class":42},[36,134870,134834],{"class":105},[36,134872,134837],{"class":101},[36,134874,47],{"class":42},[36,134876,134842],{"class":105},[36,134878,134845],{"class":42},[36,134880,4113],{"class":54857},[36,134882,54864],{"class":42},[318,134884,134886],{"id":134885},"_1027-收获","10.2.7 收获",[211,134888,134889,134892,134895,134898,134901],{},[214,134890,134891],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[214,134893,134894],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[214,134896,134897],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[214,134899,134900],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[214,134902,134903],{},"遗忘代码",[26,134905,134907],{"className":129586,"code":134906,"language":129588,"meta":31,"style":31},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[33,134908,134909,134931,134936,134946],{"__ignoreMap":31},[36,134910,134911,134913,134915,134917,134919,134921,134923,134925,134927,134929],{"class":38,"line":39},[36,134912,55168],{"class":54857},[36,134914,478],{"class":42},[36,134916,19],{"class":54857},[36,134918,478],{"class":42},[36,134920,10],{"class":54857},[36,134922,478],{"class":42},[36,134924,4875],{"class":54857},[36,134926,478],{"class":42},[36,134928,214],{"class":54857},[36,134930,19228],{"class":42},[36,134932,134933],{"class":38,"line":53},[36,134934,134935],{"class":3943},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[36,134937,134938,134940,134942,134944],{"class":38,"line":196},[36,134939,131202],{"class":112},[36,134941,54994],{"class":42},[36,134943,64424],{"class":112},[36,134945,5029],{"class":42},[36,134947,134948],{"class":38,"line":642},[36,134949,5300],{"class":42},[211,134951,134952],{"start":662},[214,134953,134954],{},"html引css的程序",[26,134956,134957],{"className":129586,"code":134906,"language":129588,"meta":31,"style":31},[33,134958,134959,134981,134985,134995],{"__ignoreMap":31},[36,134960,134961,134963,134965,134967,134969,134971,134973,134975,134977,134979],{"class":38,"line":39},[36,134962,55168],{"class":54857},[36,134964,478],{"class":42},[36,134966,19],{"class":54857},[36,134968,478],{"class":42},[36,134970,10],{"class":54857},[36,134972,478],{"class":42},[36,134974,4875],{"class":54857},[36,134976,478],{"class":42},[36,134978,214],{"class":54857},[36,134980,19228],{"class":42},[36,134982,134983],{"class":38,"line":53},[36,134984,134935],{"class":3943},[36,134986,134987,134989,134991,134993],{"class":38,"line":196},[36,134988,131202],{"class":112},[36,134990,54994],{"class":42},[36,134992,64424],{"class":112},[36,134994,5029],{"class":42},[36,134996,134997],{"class":38,"line":642},[36,134998,5300],{"class":42},[211,135000,135001,135004,135007,135010,135013],{"start":667},[214,135002,135003],{},"浮动的盒子不会有外边距合并问题",[214,135005,135006],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[214,135008,135009],{},"ctrl+g快速定位行；shift+alt多个光标",[214,135011,135012],{},"学习上方各个模块的选择器起名方法，以后就这样用",[214,135014,135015],{},"在写选择器时尽量写全一些，例如",[26,135017,135019],{"className":129586,"code":135018,"language":129588,"meta":31,"style":31},"\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",[33,135020,135021,135026,135042,135047,135062,135067,135082,135087,135102,135107],{"__ignoreMap":31},[36,135022,135023],{"class":38,"line":39},[36,135024,135025],{"class":3943},"\u002F* 静态定位（默认） *\u002F\n",[36,135027,135028,135031,135033,135035,135037,135040],{"class":38,"line":53},[36,135029,135030],{"class":101},".static",[36,135032,83361],{"class":42},[36,135034,131946],{"class":112},[36,135036,54994],{"class":42},[36,135038,135039],{"class":112},"static",[36,135041,132516],{"class":42},[36,135043,135044],{"class":38,"line":196},[36,135045,135046],{"class":3943},"\u002F* 相对定位 *\u002F\n",[36,135048,135049,135052,135054,135056,135058,135060],{"class":38,"line":642},[36,135050,135051],{"class":101},".relative",[36,135053,83361],{"class":42},[36,135055,131946],{"class":112},[36,135057,54994],{"class":42},[36,135059,58320],{"class":112},[36,135061,132516],{"class":42},[36,135063,135064],{"class":38,"line":655},[36,135065,135066],{"class":3943},"\u002F* 绝对定位 *\u002F\n",[36,135068,135069,135072,135074,135076,135078,135080],{"class":38,"line":662},[36,135070,135071],{"class":101},".absolute",[36,135073,83361],{"class":42},[36,135075,131946],{"class":112},[36,135077,54994],{"class":42},[36,135079,58387],{"class":112},[36,135081,132516],{"class":42},[36,135083,135084],{"class":38,"line":667},[36,135085,135086],{"class":3943},"\u002F* 固定定位 *\u002F\n",[36,135088,135089,135092,135094,135096,135098,135100],{"class":38,"line":679},[36,135090,135091],{"class":101},".fixed",[36,135093,83361],{"class":42},[36,135095,131946],{"class":112},[36,135097,54994],{"class":42},[36,135099,89786],{"class":112},[36,135101,132516],{"class":42},[36,135103,135104],{"class":38,"line":685},[36,135105,135106],{"class":3943},"\u002F* 粘性定位 *\u002F\n",[36,135108,135109,135112,135114,135116,135118,135121],{"class":38,"line":691},[36,135110,135111],{"class":101},".sticky",[36,135113,83361],{"class":42},[36,135115,131946],{"class":112},[36,135117,54994],{"class":42},[36,135119,135120],{"class":112},"sticky",[36,135122,132516],{"class":42},[211,135124,135125,135128],{"start":702},[214,135126,135127],{},"一定要用好注释",[214,135129,135130],{},"浮动的盒子不会有外边距合并的问题",[3785,135132,134474],{},{"title":31,"searchDepth":53,"depth":53,"links":135134},[135135,135136],{"id":134511,"depth":53,"text":134512},{"id":134575,"depth":53,"text":134576,"children":135137},[135138,135139,135140,135141,135142,135143,135144],{"id":134579,"depth":196,"text":134580},{"id":134685,"depth":196,"text":134686},{"id":134721,"depth":196,"text":134722},{"id":134742,"depth":196,"text":134743},{"id":134777,"depth":196,"text":134778},{"id":134810,"depth":196,"text":134811},{"id":134885,"depth":196,"text":134886},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":134503,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":135151,"title":135152,"body":135153,"description":26998,"extension":3817,"meta":136639,"navigation":658,"path":136640,"seo":136641,"stem":136642,"__hash__":136643},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":135154,"toc":136631},[135155,135158,135162,135166,135177,135181,135198,135242,135275,135278,135295,135298,135301,135345,135349,135353,135356,135359,135363,135366,135377,135440,135481,135484,135499,135553,135561,135564,135575,135629,135655,135658,135671,135725,135757,135811,135834,135888,135891,135894,135901,135955,135976,136030,136033,136036,136121,136129,136186,136209,136213,136216,136234,136238,136257,136311,136349,136353,136356,136359,136381,136385,136393,136396,136401,136412,136415,136419,136433,136477,136480,136484,136487,136492,136518,136523,136600,136603,136607,136610,136613,136616,136619,136622,136625,136628],[10,135156,135152],{"id":135157},"_11-传统布局与定位体系",[14,135159,135161],{"id":135160},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[318,135163,135165],{"id":135164},"_1111-普通流标准流","11.1.1 普通流（标准流）",[4875,135167,135168,135171,135174],{},[214,135169,135170],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[214,135172,135173],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[214,135175,135176],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[318,135178,135180],{"id":135179},"_1112-浮动","11.1.2 浮动",[4875,135182,135183,135186,135189,135192,135195],{},[214,135184,135185],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[214,135187,135188],{},"浮动可以改变元素标签默认的排列方式",[214,135190,135191],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[214,135193,135194],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[214,135196,135197],{},"在使用行内块转换时盒子之间是有空隙的",[26,135199,135200],{"className":129586,"code":134052,"language":129588,"meta":31,"style":31},[33,135201,135202,135208,135218,135222,135228,135238],{"__ignoreMap":31},[36,135203,135204,135206],{"class":38,"line":39},[36,135205,134059],{"class":101},[36,135207,19228],{"class":42},[36,135209,135210,135212,135214,135216],{"class":38,"line":53},[36,135211,134066],{"class":112},[36,135213,54994],{"class":42},[36,135215,259],{"class":112},[36,135217,5029],{"class":42},[36,135219,135220],{"class":38,"line":196},[36,135221,5300],{"class":42},[36,135223,135224,135226],{"class":38,"line":642},[36,135225,134081],{"class":101},[36,135227,19228],{"class":42},[36,135229,135230,135232,135234,135236],{"class":38,"line":655},[36,135231,134066],{"class":112},[36,135233,54994],{"class":42},[36,135235,76076],{"class":112},[36,135237,5029],{"class":42},[36,135239,135240],{"class":38,"line":662},[36,135241,5300],{"class":42},[248,135243,135244,135252],{},[251,135245,135246],{},[254,135247,135248,135250],{},[257,135249,130050],{"align":259},[257,135251,31100],{"align":259},[265,135253,135254,135261,135268],{},[254,135255,135256,135258],{},[270,135257,58293],{"align":259},[270,135259,135260],{"align":259},"元素不浮动（默认值）",[254,135262,135263,135265],{},[270,135264,259],{"align":259},[270,135266,135267],{"align":259},"元素向左浮动",[254,135269,135270,135272],{},[270,135271,76076],{"align":259},[270,135273,135274],{"align":259},"元素向右浮动",[19,135276,135277],{},"浮动重点：",[4875,135279,135280,135283,135286,135289,135292],{},[214,135281,135282],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[214,135284,135285],{},"浮动的元素会一行内显示并且元素顶部对齐",[214,135287,135288],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[214,135290,135291],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[214,135293,135294],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,135296,135297],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,135299,135300],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[26,135302,135303],{"className":129586,"code":134052,"language":129588,"meta":31,"style":31},[33,135304,135305,135311,135321,135325,135331,135341],{"__ignoreMap":31},[36,135306,135307,135309],{"class":38,"line":39},[36,135308,134059],{"class":101},[36,135310,19228],{"class":42},[36,135312,135313,135315,135317,135319],{"class":38,"line":53},[36,135314,134066],{"class":112},[36,135316,54994],{"class":42},[36,135318,259],{"class":112},[36,135320,5029],{"class":42},[36,135322,135323],{"class":38,"line":196},[36,135324,5300],{"class":42},[36,135326,135327,135329],{"class":38,"line":642},[36,135328,134081],{"class":101},[36,135330,19228],{"class":42},[36,135332,135333,135335,135337,135339],{"class":38,"line":655},[36,135334,134066],{"class":112},[36,135336,54994],{"class":42},[36,135338,76076],{"class":112},[36,135340,5029],{"class":42},[36,135342,135343],{"class":38,"line":662},[36,135344,5300],{"class":42},[318,135346,135348],{"id":135347},"_1113-定位","11.1.3 定位",[25619,135350,135352],{"id":135351},"_11131-使用场景","11.1.3.1 使用场景",[19,135354,135355],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,135357,135358],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[25619,135360,135362],{"id":135361},"_11132-定位组成","11.1.3.2 定位组成",[19,135364,135365],{},"定位 = 定位模式 + 边偏移",[211,135367,135368],{},[214,135369,135370,135373,135374],{},[4027,135371,135372],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[4027,135375,135376],{},"定位模式",[26,135378,135380],{"className":129586,"code":135379,"language":129588,"meta":31,"style":31},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[33,135381,135382,135388,135402,135419,135436],{"__ignoreMap":31},[36,135383,135384,135386],{"class":38,"line":39},[36,135385,133434],{"class":101},[36,135387,19228],{"class":42},[36,135389,135390,135393,135395,135397,135399],{"class":38,"line":53},[36,135391,135392],{"class":112},"  position",[36,135394,54994],{"class":42},[36,135396,58320],{"class":112},[36,135398,133449],{"class":42},[36,135400,135401],{"class":3943},"\u002F* 定位模式 *\u002F\n",[36,135403,135404,135407,135409,135411,135413,135416],{"class":38,"line":196},[36,135405,135406],{"class":112},"  top",[36,135408,54994],{"class":42},[36,135410,554],{"class":112},[36,135412,55049],{"class":46},[36,135414,135415],{"class":42},";           ",[36,135417,135418],{"class":3943},"\u002F* 边偏移：上 *\u002F\n",[36,135420,135421,135424,135426,135428,135430,135433],{"class":38,"line":642},[36,135422,135423],{"class":112},"  left",[36,135425,54994],{"class":42},[36,135427,1921],{"class":112},[36,135429,55049],{"class":46},[36,135431,135432],{"class":42},";          ",[36,135434,135435],{"class":3943},"\u002F* 边偏移：左 *\u002F\n",[36,135437,135438],{"class":38,"line":655},[36,135439,5300],{"class":42},[248,135441,135442,135451],{},[251,135443,135444],{},[254,135445,135446,135448],{},[257,135447,4030],{"align":259},[257,135449,135450],{"align":259},"语义",[265,135452,135453,135460,135467,135474],{},[254,135454,135455,135457],{},[270,135456,135039],{"align":259},[270,135458,135459],{"align":259},"静态定位",[254,135461,135462,135464],{},[270,135463,58320],{"align":259},[270,135465,135466],{"align":259},"相对定位",[254,135468,135469,135471],{},[270,135470,58387],{"align":259},[270,135472,135473],{"align":259},"绝对定位",[254,135475,135476,135478],{},[270,135477,89786],{"align":259},[270,135479,135480],{"align":259},"固定定位",[19,135482,135483],{},"（1）静态定位：",[4875,135485,135486,135497],{},[214,135487,135488,135489,135492,135493,135496],{},"静态定位是元素的 ",[4027,135490,135491],{},"默认定位方式"," ， ",[4027,135494,135495],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[214,135498,8877],{},[26,135500,135501],{"className":129586,"code":135379,"language":129588,"meta":31,"style":31},[33,135502,135503,135509,135521,135535,135549],{"__ignoreMap":31},[36,135504,135505,135507],{"class":38,"line":39},[36,135506,133434],{"class":101},[36,135508,19228],{"class":42},[36,135510,135511,135513,135515,135517,135519],{"class":38,"line":53},[36,135512,135392],{"class":112},[36,135514,54994],{"class":42},[36,135516,58320],{"class":112},[36,135518,133449],{"class":42},[36,135520,135401],{"class":3943},[36,135522,135523,135525,135527,135529,135531,135533],{"class":38,"line":196},[36,135524,135406],{"class":112},[36,135526,54994],{"class":42},[36,135528,554],{"class":112},[36,135530,55049],{"class":46},[36,135532,135415],{"class":42},[36,135534,135418],{"class":3943},[36,135536,135537,135539,135541,135543,135545,135547],{"class":38,"line":642},[36,135538,135423],{"class":112},[36,135540,54994],{"class":42},[36,135542,1921],{"class":112},[36,135544,55049],{"class":46},[36,135546,135432],{"class":42},[36,135548,135435],{"class":3943},[36,135550,135551],{"class":38,"line":655},[36,135552,5300],{"class":42},[4875,135554,135555,135558],{},[214,135556,135557],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[214,135559,135560],{},"静态定位在布局时我们几乎不用的",[19,135562,135563],{},"（2）相对定位",[4875,135565,135566,135573],{},[214,135567,135568,135569,135572],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[4027,135570,135571],{},"原来的位置"," 来说的（自恋型）",[214,135574,8877],{},[26,135576,135577],{"className":129586,"code":135379,"language":129588,"meta":31,"style":31},[33,135578,135579,135585,135597,135611,135625],{"__ignoreMap":31},[36,135580,135581,135583],{"class":38,"line":39},[36,135582,133434],{"class":101},[36,135584,19228],{"class":42},[36,135586,135587,135589,135591,135593,135595],{"class":38,"line":53},[36,135588,135392],{"class":112},[36,135590,54994],{"class":42},[36,135592,58320],{"class":112},[36,135594,133449],{"class":42},[36,135596,135401],{"class":3943},[36,135598,135599,135601,135603,135605,135607,135609],{"class":38,"line":196},[36,135600,135406],{"class":112},[36,135602,54994],{"class":42},[36,135604,554],{"class":112},[36,135606,55049],{"class":46},[36,135608,135415],{"class":42},[36,135610,135418],{"class":3943},[36,135612,135613,135615,135617,135619,135621,135623],{"class":38,"line":642},[36,135614,135423],{"class":112},[36,135616,54994],{"class":42},[36,135618,1921],{"class":112},[36,135620,55049],{"class":46},[36,135622,135432],{"class":42},[36,135624,135435],{"class":3943},[36,135626,135627],{"class":38,"line":655},[36,135628,5300],{"class":42},[4875,135630,135631],{},[214,135632,135633,135634,135636,135637,135639,135640,135643,135644,135647,135648,135650,135651,135654],{},"相对定位的特点：",[57273,135635],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[57273,135638],{},"  ② ",[4027,135641,135642],{},"原来"," 在标准流的 ",[4027,135645,135646],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[57273,135649],{},"  ③因此， ",[4027,135652,135653],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,135656,135657],{},"（3）绝对定位",[4875,135659,135660,135669],{},[214,135661,135662,135664,135665,135668],{},[4027,135663,135473],{}," 是元素在移动位置的时候，是相对于它 ",[4027,135666,135667],{},"祖先元素"," 来说的（拼爹型）",[214,135670,8877],{},[26,135672,135673],{"className":129586,"code":135379,"language":129588,"meta":31,"style":31},[33,135674,135675,135681,135693,135707,135721],{"__ignoreMap":31},[36,135676,135677,135679],{"class":38,"line":39},[36,135678,133434],{"class":101},[36,135680,19228],{"class":42},[36,135682,135683,135685,135687,135689,135691],{"class":38,"line":53},[36,135684,135392],{"class":112},[36,135686,54994],{"class":42},[36,135688,58320],{"class":112},[36,135690,133449],{"class":42},[36,135692,135401],{"class":3943},[36,135694,135695,135697,135699,135701,135703,135705],{"class":38,"line":196},[36,135696,135406],{"class":112},[36,135698,54994],{"class":42},[36,135700,554],{"class":112},[36,135702,55049],{"class":46},[36,135704,135415],{"class":42},[36,135706,135418],{"class":3943},[36,135708,135709,135711,135713,135715,135717,135719],{"class":38,"line":642},[36,135710,135423],{"class":112},[36,135712,54994],{"class":42},[36,135714,1921],{"class":112},[36,135716,55049],{"class":46},[36,135718,135432],{"class":42},[36,135720,135435],{"class":3943},[36,135722,135723],{"class":38,"line":655},[36,135724,5300],{"class":42},[4875,135726,135727,135742,135751,135754],{},[214,135728,135729,135730,135732,135733,135735,135736,135738,135739,135741],{},"绝对定位的特点：",[57273,135731],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[57273,135734],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[57273,135737],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[57273,135740],{},"  (4)固定定位",[214,135743,135744,135746,135747,135750],{},[4027,135745,135480],{}," 是元素 ",[4027,135748,135749],{},"固定于浏览器可视区的位置"," 。（认死理型）",[214,135752,135753],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[214,135755,135756],{},"语法:",[26,135758,135759],{"className":129586,"code":135379,"language":129588,"meta":31,"style":31},[33,135760,135761,135767,135779,135793,135807],{"__ignoreMap":31},[36,135762,135763,135765],{"class":38,"line":39},[36,135764,133434],{"class":101},[36,135766,19228],{"class":42},[36,135768,135769,135771,135773,135775,135777],{"class":38,"line":53},[36,135770,135392],{"class":112},[36,135772,54994],{"class":42},[36,135774,58320],{"class":112},[36,135776,133449],{"class":42},[36,135778,135401],{"class":3943},[36,135780,135781,135783,135785,135787,135789,135791],{"class":38,"line":196},[36,135782,135406],{"class":112},[36,135784,54994],{"class":42},[36,135786,554],{"class":112},[36,135788,55049],{"class":46},[36,135790,135415],{"class":42},[36,135792,135418],{"class":3943},[36,135794,135795,135797,135799,135801,135803,135805],{"class":38,"line":642},[36,135796,135423],{"class":112},[36,135798,54994],{"class":42},[36,135800,1921],{"class":112},[36,135802,55049],{"class":46},[36,135804,135432],{"class":42},[36,135806,135435],{"class":3943},[36,135808,135809],{"class":38,"line":655},[36,135810,5300],{"class":42},[4875,135812,135813,135822],{},[214,135814,135815,135816,135818,135819,135821],{},"特点:",[57273,135817],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[57273,135820],{},"  ②固定定位不再占有原先的位置,完全脱标",[214,135823,135824,135825,135827,135828,135830,135831,135833],{},"固定在版心位置的方法:",[57273,135826],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[57273,135829],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[57273,135832],{},"  实例：",[26,135835,135836],{"className":129586,"code":135379,"language":129588,"meta":31,"style":31},[33,135837,135838,135844,135856,135870,135884],{"__ignoreMap":31},[36,135839,135840,135842],{"class":38,"line":39},[36,135841,133434],{"class":101},[36,135843,19228],{"class":42},[36,135845,135846,135848,135850,135852,135854],{"class":38,"line":53},[36,135847,135392],{"class":112},[36,135849,54994],{"class":42},[36,135851,58320],{"class":112},[36,135853,133449],{"class":42},[36,135855,135401],{"class":3943},[36,135857,135858,135860,135862,135864,135866,135868],{"class":38,"line":196},[36,135859,135406],{"class":112},[36,135861,54994],{"class":42},[36,135863,554],{"class":112},[36,135865,55049],{"class":46},[36,135867,135415],{"class":42},[36,135869,135418],{"class":3943},[36,135871,135872,135874,135876,135878,135880,135882],{"class":38,"line":642},[36,135873,135423],{"class":112},[36,135875,54994],{"class":42},[36,135877,1921],{"class":112},[36,135879,55049],{"class":46},[36,135881,135432],{"class":42},[36,135883,135435],{"class":3943},[36,135885,135886],{"class":38,"line":655},[36,135887,5300],{"class":42},[5198,135889],{"style":129442,"src":135890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,135892,135893],{},"(5)粘性定位",[4875,135895,135896,135899],{},[214,135897,135898],{},"粘性定位可以被认为是相对定位和固定定位的混合",[214,135900,8877],{},[26,135902,135903],{"className":129586,"code":135379,"language":129588,"meta":31,"style":31},[33,135904,135905,135911,135923,135937,135951],{"__ignoreMap":31},[36,135906,135907,135909],{"class":38,"line":39},[36,135908,133434],{"class":101},[36,135910,19228],{"class":42},[36,135912,135913,135915,135917,135919,135921],{"class":38,"line":53},[36,135914,135392],{"class":112},[36,135916,54994],{"class":42},[36,135918,58320],{"class":112},[36,135920,133449],{"class":42},[36,135922,135401],{"class":3943},[36,135924,135925,135927,135929,135931,135933,135935],{"class":38,"line":196},[36,135926,135406],{"class":112},[36,135928,54994],{"class":42},[36,135930,554],{"class":112},[36,135932,55049],{"class":46},[36,135934,135415],{"class":42},[36,135936,135418],{"class":3943},[36,135938,135939,135941,135943,135945,135947,135949],{"class":38,"line":642},[36,135940,135423],{"class":112},[36,135942,54994],{"class":42},[36,135944,1921],{"class":112},[36,135946,55049],{"class":46},[36,135948,135432],{"class":42},[36,135950,135435],{"class":3943},[36,135952,135953],{"class":38,"line":655},[36,135954,5300],{"class":42},[4875,135956,135957],{},[214,135958,135959,135960,135962,135963,135965,135966,135968,135969,135972,135973,135975],{},"粘性定位的特点：",[57273,135961],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[57273,135964],{},"  ②粘性定位占有原先的位置（相对定位特点）",[57273,135967],{},"  ③必须添加 top 、left、right、bottom ",[4027,135970,135971],{},"其中一个"," 才有效",[57273,135974],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[26,135977,135978],{"className":129586,"code":135379,"language":129588,"meta":31,"style":31},[33,135979,135980,135986,135998,136012,136026],{"__ignoreMap":31},[36,135981,135982,135984],{"class":38,"line":39},[36,135983,133434],{"class":101},[36,135985,19228],{"class":42},[36,135987,135988,135990,135992,135994,135996],{"class":38,"line":53},[36,135989,135392],{"class":112},[36,135991,54994],{"class":42},[36,135993,58320],{"class":112},[36,135995,133449],{"class":42},[36,135997,135401],{"class":3943},[36,135999,136000,136002,136004,136006,136008,136010],{"class":38,"line":196},[36,136001,135406],{"class":112},[36,136003,54994],{"class":42},[36,136005,554],{"class":112},[36,136007,55049],{"class":46},[36,136009,135415],{"class":42},[36,136011,135418],{"class":3943},[36,136013,136014,136016,136018,136020,136022,136024],{"class":38,"line":642},[36,136015,135423],{"class":112},[36,136017,54994],{"class":42},[36,136019,1921],{"class":112},[36,136021,55049],{"class":46},[36,136023,135432],{"class":42},[36,136025,135435],{"class":3943},[36,136027,136028],{"class":38,"line":655},[36,136029,5300],{"class":42},[5198,136031],{"style":129442,"src":136032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,136034,136035],{},"(6)总结",[248,136037,136038,136053],{},[251,136039,136040],{},[254,136041,136042,136044,136047,136050],{},[257,136043,135376],{"align":259},[257,136045,136046],{"align":259},"是否脱标",[257,136048,136049],{"align":259},"移动位置",[257,136051,136052],{"align":259},"是否常用",[265,136054,136055,136068,136082,136096,136109],{},[254,136056,136057,136060,136062,136065],{},[270,136058,136059],{"align":259},"Static 静态定位",[270,136061,108164],{"align":259},[270,136063,136064],{"align":259},"不能使用边偏移",[270,136066,136067],{"align":259},"很少",[254,136069,136070,136073,136076,136079],{},[270,136071,136072],{"align":259},"Relative 相对定位",[270,136074,136075],{"align":259},"否(占有位置)",[270,136077,136078],{"align":259},"相对于自身位置移动",[270,136080,136081],{"align":259},"基本单独使用",[254,136083,136084,136087,136090,136093],{},[270,136085,136086],{"align":259},"Absolute 绝对定位",[270,136088,136089],{"align":259},"是(不占有位置)",[270,136091,136092],{"align":259},"带有定位的父级",[270,136094,136095],{"align":259},"要和定位父级元素搭配使用",[254,136097,136098,136101,136103,136106],{},[270,136099,136100],{"align":259},"Fixed 固定定位",[270,136102,136089],{"align":259},[270,136104,136105],{"align":259},"浏览器可视区",[270,136107,136108],{"align":259},"单独使用,不需要父级",[254,136110,136111,136114,136116,136118],{},[270,136112,136113],{"align":259},"Sticky 粘性定位",[270,136115,136075],{"align":259},[270,136117,136105],{"align":259},[270,136119,136120],{"align":259},"当前阶段少",[211,136122,136123],{"start":53},[214,136124,136125,136128],{},[4027,136126,136127],{},"边偏移"," 则决定了该元素的最终位置",[248,136130,136131,136142],{},[251,136132,136133],{},[254,136134,136135,136138,136140],{},[257,136136,136137],{"align":259},"边偏移属性",[257,136139,31103],{"align":259},[257,136141,31100],{"align":259},[265,136143,136144,136155,136166,136176],{},[254,136145,136146,136149,136152],{},[270,136147,136148],{"align":259},"top",[270,136150,136151],{"align":259},"top: 80px;",[270,136153,136154],{"align":259},"顶端偏移量，定义元素相对于父元素上边线的距离",[254,136156,136157,136160,136163],{},[270,136158,136159],{"align":259},"bottom",[270,136161,136162],{"align":259},"bottom: 80px ;",[270,136164,136165],{"align":259},"底部偏移量，定义元素相对于其父元素下边线的距离",[254,136167,136168,136170,136173],{},[270,136169,259],{"align":259},[270,136171,136172],{"align":259},"left: 80px ;",[270,136174,136175],{"align":259},"左侧偏移量，定义元素相对于其父元素左边线的距离",[254,136177,136178,136180,136183],{},[270,136179,76076],{"align":259},[270,136181,136182],{"align":259},"right: 80px ;",[270,136184,136185],{"align":259},"右侧偏移量，定义元素相对于其父元素右边线的距离",[4875,136187,136188],{},[214,136189,12706,136190,136192,136193,136195,136196,136198,136199,136202,136203,136205,136206,136208],{},[57273,136191],{},"  ① ",[4027,136194,136127],{}," 需要和 ",[4027,136197,135376],{}," 联合使用， ",[4027,136200,136201],{},"单独使用无效"," ；",[57273,136204],{},"  ②top和bottom不要同时使用",[57273,136207],{},"  ③left和right不要同时使用",[25619,136210,136212],{"id":136211},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,136214,136215],{},"子级是绝对定位的话，父级要用相对定位",[4875,136217,136218,136221,136224,136227],{},[214,136219,136220],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[214,136222,136223],{},"父盒子需要加定位限制子盒子在父盒子内显示",[214,136225,136226],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[214,136228,136229,136230,136233],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[4027,136231,136232],{},"子绝父绝"," 也会遇到",[25619,136235,136237],{"id":136236},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[4875,136239,136240,136255],{},[214,136241,136242,136243,136246,136247,136250,136251,136254],{},"在使用 ",[4027,136244,136245],{},"定位"," 布局时，可能会 ",[4027,136248,136249],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[4027,136252,136253],{},"z-index"," 来控制盒子的前后次序 (z轴)",[214,136256,8877],{},[26,136258,136259],{"className":129586,"code":135379,"language":129588,"meta":31,"style":31},[33,136260,136261,136267,136279,136293,136307],{"__ignoreMap":31},[36,136262,136263,136265],{"class":38,"line":39},[36,136264,133434],{"class":101},[36,136266,19228],{"class":42},[36,136268,136269,136271,136273,136275,136277],{"class":38,"line":53},[36,136270,135392],{"class":112},[36,136272,54994],{"class":42},[36,136274,58320],{"class":112},[36,136276,133449],{"class":42},[36,136278,135401],{"class":3943},[36,136280,136281,136283,136285,136287,136289,136291],{"class":38,"line":196},[36,136282,135406],{"class":112},[36,136284,54994],{"class":42},[36,136286,554],{"class":112},[36,136288,55049],{"class":46},[36,136290,135415],{"class":42},[36,136292,135418],{"class":3943},[36,136294,136295,136297,136299,136301,136303,136305],{"class":38,"line":642},[36,136296,135423],{"class":112},[36,136298,54994],{"class":42},[36,136300,1921],{"class":112},[36,136302,55049],{"class":46},[36,136304,135432],{"class":42},[36,136306,135435],{"class":3943},[36,136308,136309],{"class":38,"line":655},[36,136310,5300],{"class":42},[4875,136312,136313],{},[214,136314,136315,136316,136192,136318,136320,136321,130749,136324,86093,136327,136329,136330,136332,136333,136336,136337,136202,136340,136342,136343,136346,136348],{},"z-index的特性",[57273,136317],{},[4027,136319,130050],{}," ： ",[4027,136322,136323],{},"正整数",[4027,136325,136326],{},"负整数",[4027,136328,1859],{}," ，默认值是 0，数值越大，盒子越靠上；",[57273,136331],{},"  ②如果 ",[4027,136334,136335],{},"属性值相同"," ，则按照书写顺序， ",[4027,136338,136339],{},"后来居上",[57273,136341],{},"  ③数字后面 ",[4027,136344,136345],{},"不能加单位",[57273,136347],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[25619,136350,136352],{"id":136351},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,136354,136355],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,136357,136358],{},"方法:",[4875,136360,136361,136371],{},[214,136362,136363,136364,136367,136368],{},"left: 50%; 让 ",[4027,136365,136366],{},"盒子的左侧"," 移动到 ",[4027,136369,136370],{},"父级元素的水平中心位置",[214,136372,136373,136374,136377,136378],{},"margin-left: -100px; 让盒子 ",[4027,136375,136376],{},"向左"," 移动 ",[4027,136379,136380],{},"自身宽度的一半",[25619,136382,136384],{"id":136383},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[211,136386,136387,136390],{},[214,136388,136389],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[214,136391,136392],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,136394,136395],{},"也就是说绝对定位和固定定位和浮动类似",[211,136397,136398],{"start":196},[214,136399,136400],{},"display 是显示模式， 可以改变显示模式有以下方式:",[4875,136402,136403,136406,136409],{},[214,136404,136405],{},"可以用inline-block 转换为行内块",[214,136407,136408],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[214,136410,136411],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,136413,136414],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[25619,136416,136418],{"id":136417},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[211,136420,136421,136424,136427,136430],{},[214,136422,136423],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[214,136425,136426],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[214,136428,136429],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[214,136431,136432],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[26,136434,136435],{"className":129586,"code":134052,"language":129588,"meta":31,"style":31},[33,136436,136437,136443,136453,136457,136463,136473],{"__ignoreMap":31},[36,136438,136439,136441],{"class":38,"line":39},[36,136440,134059],{"class":101},[36,136442,19228],{"class":42},[36,136444,136445,136447,136449,136451],{"class":38,"line":53},[36,136446,134066],{"class":112},[36,136448,54994],{"class":42},[36,136450,259],{"class":112},[36,136452,5029],{"class":42},[36,136454,136455],{"class":38,"line":196},[36,136456,5300],{"class":42},[36,136458,136459,136461],{"class":38,"line":642},[36,136460,134081],{"class":101},[36,136462,19228],{"class":42},[36,136464,136465,136467,136469,136471],{"class":38,"line":655},[36,136466,134066],{"class":112},[36,136468,54994],{"class":42},[36,136470,76076],{"class":112},[36,136472,5029],{"class":42},[36,136474,136475],{"class":38,"line":662},[36,136476,5300],{"class":42},[5198,136478],{"style":129442,"src":136479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[25619,136481,136483],{"id":136482},"_11138-轮播图","11.1.3.8 轮播图",[5198,136485],{"style":129442,"src":136486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[211,136488,136489],{},[214,136490,136491],{},"制作顺序:",[4875,136493,136494,136497,136500,136509],{},[214,136495,136496],{},"大盒子我们类名为： tb-promo 淘宝广告",[214,136498,136499],{},"里面先放一张图片",[214,136501,136502,136503,136505,136506,136508],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[57273,136504],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[57273,136507],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[214,136510,136511,136512,136514,136515,136517],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[57273,136513],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[57273,136516],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[211,136519,136520],{"start":53},[214,136521,136522],{},"代码模块",[26,136524,136526],{"className":129586,"code":136525,"language":129588,"meta":31,"style":31},"\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",[33,136527,136528,136533,136540,136550,136560,136570,136574,136579,136586,136596],{"__ignoreMap":31},[36,136529,136530],{"class":38,"line":39},[36,136531,136532],{"class":3943},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[36,136534,136535,136538],{"class":38,"line":53},[36,136536,136537],{"class":101},".son",[36,136539,19228],{"class":42},[36,136541,136542,136544,136546,136548],{"class":38,"line":196},[36,136543,135392],{"class":112},[36,136545,54994],{"class":42},[36,136547,58387],{"class":112},[36,136549,5029],{"class":42},[36,136551,136552,136554,136556,136558],{"class":38,"line":642},[36,136553,135406],{"class":112},[36,136555,54994],{"class":42},[36,136557,1859],{"class":112},[36,136559,5029],{"class":42},[36,136561,136562,136564,136566,136568],{"class":38,"line":655},[36,136563,135423],{"class":112},[36,136565,54994],{"class":42},[36,136567,1859],{"class":112},[36,136569,5029],{"class":42},[36,136571,136572],{"class":38,"line":662},[36,136573,5300],{"class":42},[36,136575,136576],{"class":38,"line":667},[36,136577,136578],{"class":3943},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[36,136580,136581,136584],{"class":38,"line":679},[36,136582,136583],{"class":101},".father",[36,136585,19228],{"class":42},[36,136587,136588,136590,136592,136594],{"class":38,"line":685},[36,136589,135392],{"class":112},[36,136591,54994],{"class":42},[36,136593,58320],{"class":112},[36,136595,5029],{"class":42},[36,136597,136598],{"class":38,"line":691},[36,136599,5300],{"class":42},[19,136601,136602],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[318,136604,136606],{"id":136605},"_1114-定位数值的移动","11.1.4 定位数值的移动",[5198,136608],{"style":129442,"src":136609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,136611,136612],{},"✨ 黄金口诀：",[19,136614,136615],{},"\"TOP正下负上，LEFT正右负左\"",[19,136617,136618],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,136620,136621],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,136623,136624],{},"✨ 简单记：",[19,136626,136627],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[3785,136629,136630],{},"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":31,"searchDepth":53,"depth":53,"links":136632},[136633],{"id":135160,"depth":53,"text":135161,"children":136634},[136635,136636,136637,136638],{"id":135164,"depth":196,"text":135165},{"id":135179,"depth":196,"text":135180},{"id":135347,"depth":196,"text":135348},{"id":136605,"depth":196,"text":136606},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":135152,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":136645,"title":136646,"body":136647,"description":26998,"extension":3817,"meta":138070,"navigation":658,"path":138071,"seo":138072,"stem":138073,"__hash__":138074},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":136648,"toc":138049},[136649,136652,136656,136664,136668,136673,136681,136693,136697,136702,136710,136721,136725,136730,136771,136779,136783,136786,136789,136792,136886,136889,136983,136986,137080,137083,137086,137121,137124,137127,137157,137160,137163,137166,137169,137172,137175,137178,137248,137251,137255,137259,137300,137304,137310,137313,137316,137320,137323,137326,137329,137410,137413,137416,137420,137424,137427,137430,137433,137436,137439,137445,137454,137458,137477,137481,137491,137494,137497,137500,137503,137506,137509,137512,137515,137524,137528,137537,137540,137545,137598,137603,137769,137772,137775,137780,137783,137786,137789,137792,137797,137945,137948,137951,137956,137959,137964,137998,138001,138004,138008,138011,138018,138021,138024,138027,138030,138033,138036,138039,138043,138046],[10,136650,136646],{"id":136651},"_12-显示隐藏与图形资源",[14,136653,136655],{"id":136654},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[4875,136657,136658,136661],{},[214,136659,136660],{},"目的:让一个元素在页面中消失或者显示出来",[214,136662,136663],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[318,136665,136667],{"id":136666},"_1211-display-显示","12.1.1 display 显示",[211,136669,136670],{},[214,136671,136672],{},"display 设置或检索对象是否及如何显示",[4875,136674,136675,136678],{},[214,136676,136677],{},"display: none;隐藏对象",[214,136679,136680],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[211,136682,136683,136690],{"start":53},[214,136684,136685,136686,136689],{},"特点： display 隐藏元素后， ",[4027,136687,136688],{},"不再占"," 有原来的位置",[214,136691,136692],{},"在js中使用非常的广泛",[318,136694,136696],{"id":136695},"_1212-visibility可见性","12.1.2 visibility可见性",[211,136698,136699],{},[214,136700,136701],{},"visibility 属性用于指定一个元素应可见还是隐藏",[4875,136703,136704,136707],{},[214,136705,136706],{},"visibility： visible；元素可见",[214,136708,136709],{},"visibility：hidden；元素隐藏",[211,136711,136712,136715,136718],{"start":53},[214,136713,136714],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[214,136716,136717],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[214,136719,136720],{},"隐藏后继续占有原有位置",[318,136722,136724],{"id":136723},"_1213-overflow溢出","12.1.3 overflow溢出",[4875,136726,136727],{},[214,136728,136729],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[248,136731,136732,136740],{},[251,136733,136734],{},[254,136735,136736,136738],{},[257,136737,130050],{"align":259},[257,136739,31100],{"align":259},[265,136741,136742,136750,136757,136764],{},[254,136743,136744,136747],{},[270,136745,136746],{"align":259},"visible",[270,136748,136749],{"align":259},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[254,136751,136752,136754],{},[270,136753,65269],{"align":259},[270,136755,136756],{"align":259},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[254,136758,136759,136761],{},[270,136760,132006],{"align":259},[270,136762,136763],{"align":259},"不管超出内容否，总是显示滚动条",[254,136765,136766,136768],{},[270,136767,76217],{"align":259},[270,136769,136770],{"align":259},"超出自动显示滚动条，不超出不显示滚动条",[4875,136772,136773,136776],{},[214,136774,136775],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[214,136777,136778],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[318,136780,136782],{"id":136781},"_1214-案例收获","12.1.4 案例收获",[5198,136784],{"style":129442,"src":136785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,136787,136788],{},"问题：没做出来动态效果，使用hover没实现",[19,136790,136791],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[26,136793,136794],{"className":129586,"code":135018,"language":129588,"meta":31,"style":31},[33,136795,136796,136800,136814,136818,136832,136836,136850,136854,136868,136872],{"__ignoreMap":31},[36,136797,136798],{"class":38,"line":39},[36,136799,135025],{"class":3943},[36,136801,136802,136804,136806,136808,136810,136812],{"class":38,"line":53},[36,136803,135030],{"class":101},[36,136805,83361],{"class":42},[36,136807,131946],{"class":112},[36,136809,54994],{"class":42},[36,136811,135039],{"class":112},[36,136813,132516],{"class":42},[36,136815,136816],{"class":38,"line":196},[36,136817,135046],{"class":3943},[36,136819,136820,136822,136824,136826,136828,136830],{"class":38,"line":642},[36,136821,135051],{"class":101},[36,136823,83361],{"class":42},[36,136825,131946],{"class":112},[36,136827,54994],{"class":42},[36,136829,58320],{"class":112},[36,136831,132516],{"class":42},[36,136833,136834],{"class":38,"line":655},[36,136835,135066],{"class":3943},[36,136837,136838,136840,136842,136844,136846,136848],{"class":38,"line":662},[36,136839,135071],{"class":101},[36,136841,83361],{"class":42},[36,136843,131946],{"class":112},[36,136845,54994],{"class":42},[36,136847,58387],{"class":112},[36,136849,132516],{"class":42},[36,136851,136852],{"class":38,"line":667},[36,136853,135086],{"class":3943},[36,136855,136856,136858,136860,136862,136864,136866],{"class":38,"line":679},[36,136857,135091],{"class":101},[36,136859,83361],{"class":42},[36,136861,131946],{"class":112},[36,136863,54994],{"class":42},[36,136865,89786],{"class":112},[36,136867,132516],{"class":42},[36,136869,136870],{"class":38,"line":685},[36,136871,135106],{"class":3943},[36,136873,136874,136876,136878,136880,136882,136884],{"class":38,"line":691},[36,136875,135111],{"class":101},[36,136877,83361],{"class":42},[36,136879,131946],{"class":112},[36,136881,54994],{"class":42},[36,136883,135120],{"class":112},[36,136885,132516],{"class":42},[19,136887,136888],{},"完整代码：",[26,136890,136891],{"className":129586,"code":135018,"language":129588,"meta":31,"style":31},[33,136892,136893,136897,136911,136915,136929,136933,136947,136951,136965,136969],{"__ignoreMap":31},[36,136894,136895],{"class":38,"line":39},[36,136896,135025],{"class":3943},[36,136898,136899,136901,136903,136905,136907,136909],{"class":38,"line":53},[36,136900,135030],{"class":101},[36,136902,83361],{"class":42},[36,136904,131946],{"class":112},[36,136906,54994],{"class":42},[36,136908,135039],{"class":112},[36,136910,132516],{"class":42},[36,136912,136913],{"class":38,"line":196},[36,136914,135046],{"class":3943},[36,136916,136917,136919,136921,136923,136925,136927],{"class":38,"line":642},[36,136918,135051],{"class":101},[36,136920,83361],{"class":42},[36,136922,131946],{"class":112},[36,136924,54994],{"class":42},[36,136926,58320],{"class":112},[36,136928,132516],{"class":42},[36,136930,136931],{"class":38,"line":655},[36,136932,135066],{"class":3943},[36,136934,136935,136937,136939,136941,136943,136945],{"class":38,"line":662},[36,136936,135071],{"class":101},[36,136938,83361],{"class":42},[36,136940,131946],{"class":112},[36,136942,54994],{"class":42},[36,136944,58387],{"class":112},[36,136946,132516],{"class":42},[36,136948,136949],{"class":38,"line":667},[36,136950,135086],{"class":3943},[36,136952,136953,136955,136957,136959,136961,136963],{"class":38,"line":679},[36,136954,135091],{"class":101},[36,136956,83361],{"class":42},[36,136958,131946],{"class":112},[36,136960,54994],{"class":42},[36,136962,89786],{"class":112},[36,136964,132516],{"class":42},[36,136966,136967],{"class":38,"line":685},[36,136968,135106],{"class":3943},[36,136970,136971,136973,136975,136977,136979,136981],{"class":38,"line":691},[36,136972,135111],{"class":101},[36,136974,83361],{"class":42},[36,136976,131946],{"class":112},[36,136978,54994],{"class":42},[36,136980,135120],{"class":112},[36,136982,132516],{"class":42},[19,136984,136985],{},"分布思路重点详解：",[26,136987,136988],{"className":129586,"code":135018,"language":129588,"meta":31,"style":31},[33,136989,136990,136994,137008,137012,137026,137030,137044,137048,137062,137066],{"__ignoreMap":31},[36,136991,136992],{"class":38,"line":39},[36,136993,135025],{"class":3943},[36,136995,136996,136998,137000,137002,137004,137006],{"class":38,"line":53},[36,136997,135030],{"class":101},[36,136999,83361],{"class":42},[36,137001,131946],{"class":112},[36,137003,54994],{"class":42},[36,137005,135039],{"class":112},[36,137007,132516],{"class":42},[36,137009,137010],{"class":38,"line":196},[36,137011,135046],{"class":3943},[36,137013,137014,137016,137018,137020,137022,137024],{"class":38,"line":642},[36,137015,135051],{"class":101},[36,137017,83361],{"class":42},[36,137019,131946],{"class":112},[36,137021,54994],{"class":42},[36,137023,58320],{"class":112},[36,137025,132516],{"class":42},[36,137027,137028],{"class":38,"line":655},[36,137029,135066],{"class":3943},[36,137031,137032,137034,137036,137038,137040,137042],{"class":38,"line":662},[36,137033,135071],{"class":101},[36,137035,83361],{"class":42},[36,137037,131946],{"class":112},[36,137039,54994],{"class":42},[36,137041,58387],{"class":112},[36,137043,132516],{"class":42},[36,137045,137046],{"class":38,"line":667},[36,137047,135086],{"class":3943},[36,137049,137050,137052,137054,137056,137058,137060],{"class":38,"line":679},[36,137051,135091],{"class":101},[36,137053,83361],{"class":42},[36,137055,131946],{"class":112},[36,137057,54994],{"class":42},[36,137059,89786],{"class":112},[36,137061,132516],{"class":42},[36,137063,137064],{"class":38,"line":685},[36,137065,135106],{"class":3943},[36,137067,137068,137070,137072,137074,137076,137078],{"class":38,"line":691},[36,137069,135111],{"class":101},[36,137071,83361],{"class":42},[36,137073,131946],{"class":112},[36,137075,54994],{"class":42},[36,137077,135120],{"class":112},[36,137079,132516],{"class":42},[5198,137081],{"style":129442,"src":137082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,137084,137085],{},"图片太大，盒子太小，此时需要修改图片的大小",[26,137087,137089],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[33,137090,137091],{"__ignoreMap":31},[36,137092,137093,137095,137097,137099,137101,137104,137106,137108,137111,137114,137116,137119],{"class":38,"line":39},[36,137094,393],{"class":42},[36,137096,5198],{"class":54857},[36,137098,58795],{"class":101},[36,137100,47],{"class":42},[36,137102,137103],{"class":105},"\"images\u002Fpic.jpg\"",[36,137105,58803],{"class":101},[36,137107,47],{"class":42},[36,137109,137110],{"class":105},"\"描述文字\"",[36,137112,137113],{"class":101}," title",[36,137115,47],{"class":42},[36,137117,137118],{"class":105},"\"悬停提示\"",[36,137120,54864],{"class":42},[5198,137122],{"style":129442,"src":137123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,137125,137126],{},"制造遮罩层",[26,137128,137129],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,137130,137131],{"__ignoreMap":31},[36,137132,137133,137135,137137,137139,137141,137143,137145,137147,137149,137151,137153,137155],{"class":38,"line":39},[36,137134,393],{"class":42},[36,137136,5198],{"class":54857},[36,137138,58795],{"class":101},[36,137140,47],{"class":42},[36,137142,137103],{"class":105},[36,137144,58803],{"class":101},[36,137146,47],{"class":42},[36,137148,137110],{"class":105},[36,137150,137113],{"class":101},[36,137152,47],{"class":42},[36,137154,137118],{"class":105},[36,137156,54864],{"class":42},[19,137158,137159],{},"此时是这样的为标准流",[5198,137161],{"style":129442,"src":137162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,137164,137165],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,137167,137168],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,137170,137171],{},"让他在中间，用center(background-position)",[19,137173,137174],{},"将需要变的尽可能放到一个盒子中",[19,137176,137177],{},"放大盒子上内部盒子发生变化",[26,137179,137181],{"className":129586,"code":137180,"language":129588,"meta":31,"style":31},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[33,137182,137183,137189,137199,137203,137210,137220,137232,137244],{"__ignoreMap":31},[36,137184,137185,137187],{"class":38,"line":39},[36,137186,130653],{"class":101},[36,137188,19228],{"class":42},[36,137190,137191,137193,137195,137197],{"class":38,"line":53},[36,137192,135392],{"class":112},[36,137194,54994],{"class":42},[36,137196,58320],{"class":112},[36,137198,5029],{"class":42},[36,137200,137201],{"class":38,"line":196},[36,137202,5300],{"class":42},[36,137204,137205,137208],{"class":38,"line":642},[36,137206,137207],{"class":101},".child",[36,137209,19228],{"class":42},[36,137211,137212,137214,137216,137218],{"class":38,"line":655},[36,137213,135392],{"class":112},[36,137215,54994],{"class":42},[36,137217,58387],{"class":112},[36,137219,5029],{"class":42},[36,137221,137222,137224,137226,137228,137230],{"class":38,"line":662},[36,137223,135406],{"class":112},[36,137225,54994],{"class":42},[36,137227,4527],{"class":112},[36,137229,4203],{"class":46},[36,137231,5029],{"class":42},[36,137233,137234,137236,137238,137240,137242],{"class":38,"line":667},[36,137235,135423],{"class":112},[36,137237,54994],{"class":42},[36,137239,4527],{"class":112},[36,137241,4203],{"class":46},[36,137243,5029],{"class":42},[36,137245,137246],{"class":38,"line":679},[36,137247,5300],{"class":42},[19,137249,137250],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,137252,137254],{"id":137253},"_122-精灵图","12.2 精灵图",[318,137256,137258],{"id":137257},"_1221-理解","12.2.1 理解",[211,137260,137261,137279],{},[214,137262,137263,137264,135492,137267,137270,137271,137274,137275,137278],{},"目的： ",[4027,137265,137266],{},"为了有效地减少服务器接收和发送请求的次数",[4027,137268,137269],{},"提高"," 页面的 ",[4027,137272,137273],{},"加载速度"," ，出现了 ",[4027,137276,137277],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[214,137280,137281,137282,137284,137285,137287,137288,137290,137291,137293,137294,137296,137297,137299],{},"使用精灵图核心：",[57273,137283],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[57273,137286],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[57273,137289],{},"  ③移动背景图片位置， 此时可以使用 background-position",[57273,137292],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[57273,137295],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[57273,137298],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[318,137301,137303],{"id":137302},"_1222-扒图","12.2.2 扒图",[26,137305,137308],{"className":137306,"code":137307,"language":80},[78],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[33,137309,137307],{"__ignoreMap":31},[5198,137311],{"style":129442,"src":137312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[5198,137314],{"style":129442,"src":137315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[318,137317,137319],{"id":137318},"_1223-精灵图的实现","12.2.3 精灵图的实现",[5198,137321],{"style":129442,"src":137322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,137324,137325],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[5198,137327],{"style":129442,"src":137328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[26,137330,137332],{"className":129586,"code":137331,"language":129588,"meta":31,"style":31},"\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",[33,137333,137334,137339,137346,137358,137370,137389,137406],{"__ignoreMap":31},[36,137335,137336],{"class":38,"line":39},[36,137337,137338],{"class":3943},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[36,137340,137341,137344],{"class":38,"line":53},[36,137342,137343],{"class":101},".icon",[36,137345,19228],{"class":42},[36,137347,137348,137350,137352,137354,137356],{"class":38,"line":196},[36,137349,74122],{"class":112},[36,137351,54994],{"class":42},[36,137353,1921],{"class":112},[36,137355,55049],{"class":46},[36,137357,5029],{"class":42},[36,137359,137360,137362,137364,137366,137368],{"class":38,"line":642},[36,137361,74342],{"class":112},[36,137363,54994],{"class":42},[36,137365,1921],{"class":112},[36,137367,55049],{"class":46},[36,137369,5029],{"class":42},[36,137371,137372,137374,137376,137378,137380,137383,137385,137387],{"class":38,"line":655},[36,137373,74165],{"class":112},[36,137375,54994],{"class":42},[36,137377,65281],{"class":112},[36,137379,495],{"class":42},[36,137381,137382],{"class":468},"sprites.png",[36,137384,17373],{"class":42},[36,137386,65291],{"class":112},[36,137388,5029],{"class":42},[36,137390,137391,137393,137395,137397,137399,137402,137404],{"class":38,"line":662},[36,137392,131846],{"class":112},[36,137394,54994],{"class":42},[36,137396,55320],{"class":112},[36,137398,55049],{"class":46},[36,137400,137401],{"class":112}," -20",[36,137403,55049],{"class":46},[36,137405,5029],{"class":42},[36,137407,137408],{"class":38,"line":667},[36,137409,5300],{"class":42},[5198,137411],{"style":129442,"src":137412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,137414,137415],{},"在前端中坐标轴的正方向是右和下",[14,137417,137419],{"id":137418},"_123-字体图标","12.3 字体图标",[318,137421,137423],{"id":137422},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,137425,137426],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,137428,137429],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,137431,137432],{},"1.图片文件还是比较大的。",[19,137434,137435],{},"2.图片本身放大和缩小会失真。",[19,137437,137438],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,137440,137441,137442,29354],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[4027,137443,137444],{},"字体图标 iconfont",[19,137446,137447,137450,137451,224],{},[4027,137448,137449],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[4027,137452,137453],{},"展示的是图标，本质属于字体",[318,137455,137457],{"id":137456},"_1232-字体图标的优点","12.3.2 字体图标的优点",[4875,137459,137460,137465,137468,137471,137474],{},[214,137461,137462,137464],{},[4027,137463,29490],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[214,137466,137467],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[214,137469,137470],{},"兼容性：几乎支持所有的浏览器，请放心使用",[214,137472,137473],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[214,137475,137476],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[318,137478,137480],{"id":137479},"_1233-字体库下载网站","12.3.3 字体库下载网站",[4875,137482,137483],{},[214,137484,137485,137486],{},"icomoon字体库：",[4113,137487,137490],{"href":137488,"rel":137489},"http:\u002F\u002Ficomoon.io\u002F",[27481],"http:\u002F\u002Ficomoon.io",[19,137492,137493],{},"进去之后点icomoon app",[5198,137495],{"style":129442,"src":137496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,137498,137499],{},"可以对其编辑：",[5198,137501],{"style":129442,"src":137502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,137504,137505],{},"生成字体：",[5198,137507],{"style":129442,"src":137508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,137510,137511],{},"下载：",[5198,137513],{"style":129442,"src":137514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[4875,137516,137517],{},[214,137518,137519,137520],{},"阿里iconfont字体库： ",[4113,137521,137522],{"href":137522,"rel":137523},"http:\u002F\u002Fwww.iconfont.cn\u002F",[27481],[318,137525,137527],{"id":137526},"_1234-字体图标的引入","12.3.4 字体图标的引入",[211,137529,137530],{},[214,137531,137532,137533,137536],{},"把下载包里面的 ",[4027,137534,137535],{},"fonts"," 文件夹放入页面根目录下",[5198,137538],{"style":129442,"src":137539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[211,137541,137542],{"start":53},[214,137543,137544],{},"字体文件格式",[248,137546,137547,137556],{},[251,137548,137549],{},[254,137550,137551,137554],{},[257,137552,137553],{"align":259},"格式",[257,137555,27360],{"align":259},[265,137557,137558,137568,137578,137588],{},[254,137559,137560,137565],{},[270,137561,137562],{"align":259},[4027,137563,137564],{},".ttf",[270,137566,137567],{"align":259},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[254,137569,137570,137575],{},[270,137571,137572],{"align":259},[4027,137573,137574],{},".woff",[270,137576,137577],{"align":259},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[254,137579,137580,137585],{},[270,137581,137582],{"align":259},[4027,137583,137584],{},".eot",[270,137586,137587],{"align":259},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[254,137589,137590,137595],{},[270,137591,137592],{"align":259},[4027,137593,137594],{},"svg",[270,137596,137597],{"align":259},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[211,137599,137600],{"start":196},[214,137601,137602],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[26,137604,137606],{"className":129586,"code":137605,"language":129588,"meta":31,"style":31},"\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",[33,137607,137608,137613,137620,137632,137648,137673,137694,137714,137734,137738,137744,137754,137765],{"__ignoreMap":31},[36,137609,137610],{"class":38,"line":39},[36,137611,137612],{"class":3943},"\u002F* 引入字体图标 *\u002F\n",[36,137614,137615,137618],{"class":38,"line":53},[36,137616,137617],{"class":46},"@font-face",[36,137619,19228],{"class":42},[36,137621,137622,137625,137627,137630],{"class":38,"line":196},[36,137623,137624],{"class":112},"  font-family",[36,137626,54994],{"class":42},[36,137628,137629],{"class":105},"'icomoon'",[36,137631,5029],{"class":42},[36,137633,137634,137637,137639,137641,137643,137646],{"class":38,"line":642},[36,137635,137636],{"class":112},"  src",[36,137638,54994],{"class":42},[36,137640,65281],{"class":112},[36,137642,495],{"class":42},[36,137644,137645],{"class":105},"'fonts\u002Ficomoon.eot'",[36,137647,6422],{"class":42},[36,137649,137650,137652,137654,137656,137658,137661,137663,137666,137668,137671],{"class":38,"line":655},[36,137651,137636],{"class":112},[36,137653,54994],{"class":42},[36,137655,65281],{"class":112},[36,137657,495],{"class":42},[36,137659,137660],{"class":105},"'fonts\u002Ficomoon.eot?#iefix'",[36,137662,17373],{"class":42},[36,137664,137665],{"class":112},"format",[36,137667,495],{"class":42},[36,137669,137670],{"class":105},"'embedded-opentype'",[36,137672,41607],{"class":42},[36,137674,137675,137678,137680,137683,137685,137687,137689,137692],{"class":38,"line":662},[36,137676,137677],{"class":112},"       url",[36,137679,495],{"class":42},[36,137681,137682],{"class":105},"'fonts\u002Ficomoon.woff'",[36,137684,17373],{"class":42},[36,137686,137665],{"class":112},[36,137688,495],{"class":42},[36,137690,137691],{"class":105},"'woff'",[36,137693,41607],{"class":42},[36,137695,137696,137698,137700,137703,137705,137707,137709,137712],{"class":38,"line":667},[36,137697,137677],{"class":112},[36,137699,495],{"class":42},[36,137701,137702],{"class":105},"'fonts\u002Ficomoon.ttf'",[36,137704,17373],{"class":42},[36,137706,137665],{"class":112},[36,137708,495],{"class":42},[36,137710,137711],{"class":105},"'truetype'",[36,137713,41607],{"class":42},[36,137715,137716,137718,137720,137723,137725,137727,137729,137732],{"class":38,"line":679},[36,137717,137677],{"class":112},[36,137719,495],{"class":42},[36,137721,137722],{"class":105},"'fonts\u002Ficomoon.svg#icomoon'",[36,137724,17373],{"class":42},[36,137726,137665],{"class":112},[36,137728,495],{"class":42},[36,137730,137731],{"class":105},"'svg'",[36,137733,6422],{"class":42},[36,137735,137736],{"class":38,"line":685},[36,137737,5300],{"class":42},[36,137739,137740,137742],{"class":38,"line":691},[36,137741,137343],{"class":101},[36,137743,19228],{"class":42},[36,137745,137746,137748,137750,137752],{"class":38,"line":696},[36,137747,137624],{"class":112},[36,137749,54994],{"class":42},[36,137751,137629],{"class":105},[36,137753,5029],{"class":42},[36,137755,137756,137759,137761,137763],{"class":38,"line":702},[36,137757,137758],{"class":112},"  font-style",[36,137760,54994],{"class":42},[36,137762,67396],{"class":112},[36,137764,5029],{"class":42},[36,137766,137767],{"class":38,"line":708},[36,137768,5300],{"class":42},[19,137770,137771],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[5198,137773],{"style":129442,"src":137774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[211,137776,137777],{"start":642},[214,137778,137779],{},"添加字体",[5198,137781],{"style":129442,"src":137782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,137784,137785],{},"复制：",[5198,137787],{"style":129442,"src":137788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,137790,137791],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[211,137793,137794],{"start":655},[214,137795,137796],{},"代码展示：",[26,137798,137799],{"className":129586,"code":137605,"language":129588,"meta":31,"style":31},[33,137800,137801,137805,137811,137821,137835,137857,137875,137893,137911,137915,137921,137931,137941],{"__ignoreMap":31},[36,137802,137803],{"class":38,"line":39},[36,137804,137612],{"class":3943},[36,137806,137807,137809],{"class":38,"line":53},[36,137808,137617],{"class":46},[36,137810,19228],{"class":42},[36,137812,137813,137815,137817,137819],{"class":38,"line":196},[36,137814,137624],{"class":112},[36,137816,54994],{"class":42},[36,137818,137629],{"class":105},[36,137820,5029],{"class":42},[36,137822,137823,137825,137827,137829,137831,137833],{"class":38,"line":642},[36,137824,137636],{"class":112},[36,137826,54994],{"class":42},[36,137828,65281],{"class":112},[36,137830,495],{"class":42},[36,137832,137645],{"class":105},[36,137834,6422],{"class":42},[36,137836,137837,137839,137841,137843,137845,137847,137849,137851,137853,137855],{"class":38,"line":655},[36,137838,137636],{"class":112},[36,137840,54994],{"class":42},[36,137842,65281],{"class":112},[36,137844,495],{"class":42},[36,137846,137660],{"class":105},[36,137848,17373],{"class":42},[36,137850,137665],{"class":112},[36,137852,495],{"class":42},[36,137854,137670],{"class":105},[36,137856,41607],{"class":42},[36,137858,137859,137861,137863,137865,137867,137869,137871,137873],{"class":38,"line":662},[36,137860,137677],{"class":112},[36,137862,495],{"class":42},[36,137864,137682],{"class":105},[36,137866,17373],{"class":42},[36,137868,137665],{"class":112},[36,137870,495],{"class":42},[36,137872,137691],{"class":105},[36,137874,41607],{"class":42},[36,137876,137877,137879,137881,137883,137885,137887,137889,137891],{"class":38,"line":667},[36,137878,137677],{"class":112},[36,137880,495],{"class":42},[36,137882,137702],{"class":105},[36,137884,17373],{"class":42},[36,137886,137665],{"class":112},[36,137888,495],{"class":42},[36,137890,137711],{"class":105},[36,137892,41607],{"class":42},[36,137894,137895,137897,137899,137901,137903,137905,137907,137909],{"class":38,"line":679},[36,137896,137677],{"class":112},[36,137898,495],{"class":42},[36,137900,137722],{"class":105},[36,137902,17373],{"class":42},[36,137904,137665],{"class":112},[36,137906,495],{"class":42},[36,137908,137731],{"class":105},[36,137910,6422],{"class":42},[36,137912,137913],{"class":38,"line":685},[36,137914,5300],{"class":42},[36,137916,137917,137919],{"class":38,"line":691},[36,137918,137343],{"class":101},[36,137920,19228],{"class":42},[36,137922,137923,137925,137927,137929],{"class":38,"line":696},[36,137924,137624],{"class":112},[36,137926,54994],{"class":42},[36,137928,137629],{"class":105},[36,137930,5029],{"class":42},[36,137932,137933,137935,137937,137939],{"class":38,"line":702},[36,137934,137758],{"class":112},[36,137936,54994],{"class":42},[36,137938,67396],{"class":112},[36,137940,5029],{"class":42},[36,137942,137943],{"class":38,"line":708},[36,137944,5300],{"class":42},[5198,137946],{"style":129442,"src":137947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,137949,137950],{},"更加细节展示：",[211,137952,137953],{},[214,137954,137955],{},"html 标签内添加小图标",[5198,137957],{"style":129442,"src":137958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[211,137960,137961],{"start":53},[214,137962,137963],{},"给标签定义字体",[26,137965,137966],{"className":130333,"code":133690,"language":130335,"meta":31,"style":31},[33,137967,137968,137972,137986,137990],{"__ignoreMap":31},[36,137969,137970],{"class":38,"line":39},[36,137971,133697],{"class":3943},[36,137973,137974,137976,137978,137980,137982,137984],{"class":38,"line":53},[36,137975,393],{"class":42},[36,137977,55168],{"class":54857},[36,137979,57043],{"class":101},[36,137981,47],{"class":42},[36,137983,133710],{"class":105},[36,137985,54864],{"class":42},[36,137987,137988],{"class":38,"line":196},[36,137989,133717],{"class":42},[36,137991,137992,137994,137996],{"class":38,"line":642},[36,137993,55342],{"class":42},[36,137995,55168],{"class":54857},[36,137997,54864],{"class":42},[19,137999,138000],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[5198,138002],{"style":129442,"src":138003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[318,138005,138007],{"id":138006},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,138009,138010],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,138012,138013,138014,138017],{},"把压缩包里面的 ",[4027,138015,138016],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,138019,138020],{},"打开网站，点下方：",[5198,138022],{"style":129442,"src":138023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[5198,138025],{"style":129442,"src":138026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[5198,138028],{"style":129442,"src":138029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,138031,138032],{},"点yes重新加载",[19,138034,138035],{},"然后重复之前的操作就可以实现了",[19,138037,138038],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[318,138040,138042],{"id":138041},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[5198,138044],{"style":129442,"src":138045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[3785,138047,138048],{},"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":31,"searchDepth":53,"depth":53,"links":138050},[138051,138057,138062],{"id":136654,"depth":53,"text":136655,"children":138052},[138053,138054,138055,138056],{"id":136666,"depth":196,"text":136667},{"id":136695,"depth":196,"text":136696},{"id":136723,"depth":196,"text":136724},{"id":136781,"depth":196,"text":136782},{"id":137253,"depth":53,"text":137254,"children":138058},[138059,138060,138061],{"id":137257,"depth":196,"text":137258},{"id":137302,"depth":196,"text":137303},{"id":137318,"depth":196,"text":137319},{"id":137418,"depth":53,"text":137419,"children":138063},[138064,138065,138066,138067,138068,138069],{"id":137422,"depth":196,"text":137423},{"id":137456,"depth":196,"text":137457},{"id":137479,"depth":196,"text":137480},{"id":137526,"depth":196,"text":137527},{"id":138006,"depth":196,"text":138007},{"id":138041,"depth":196,"text":138042},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":136646,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":138076,"title":138077,"body":138078,"description":26998,"extension":3817,"meta":139305,"navigation":658,"path":139306,"seo":139307,"stem":139308,"__hash__":139309},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":138079,"toc":139286},[138080,138083,138087,138090,138104,138172,138202,138205,138209,138213,138315,138362,138366,138369,138372,138406,138409,138412,138415,138418,138421,138424,138427,138429,138432,138435,138438,138441,138444,138447,138450,138478,138481,138485,138488,138495,138498,138501,138527,138530,138534,138537,138540,138547,138551,138554,138556,138588,138591,138594,138606,138612,138615,138618,138621,138623,138627,138630,138633,138636,138681,138685,138687,138690,138697,138739,138742,138746,138751,138765,138769,138772,138775,138778,138781,138784,138818,138821,138824,138878,138881,138884,138887,138890,138942,138945,138948,138997,139001,139003,139006,139009,139012,139015,139018,139076,139079,139085,139088,139091,139123,139126,139130,139134,139137,139169,139173,139176,139220,139224,139227,139230,139233,139236,139239,139242,139245,139247,139250,139252,139255,139258,139261,139264,139269,139272,139274,139277,139280,139283],[10,138081,138077],{"id":138082},"_13-界面样式与布局技巧",[14,138084,138086],{"id":138085},"_131-css三角","13.1 css三角",[19,138088,138089],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[4875,138091,138092,138095,138098,138101],{},[214,138093,138094],{},"用css 边框可以模拟三角效果",[214,138096,138097],{},"宽度高度为0",[214,138099,138100],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[214,138102,138103],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[26,138105,138107],{"className":129586,"code":138106,"language":129588,"meta":31,"style":31},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[33,138108,138109,138114,138121,138131,138141,138157,138168],{"__ignoreMap":31},[36,138110,138111],{"class":38,"line":39},[36,138112,138113],{"class":3943},"\u002F* CSS 实现三角形 *\u002F\n",[36,138115,138116,138119],{"class":38,"line":53},[36,138117,138118],{"class":101},".triangle",[36,138120,19228],{"class":42},[36,138122,138123,138125,138127,138129],{"class":38,"line":196},[36,138124,74122],{"class":112},[36,138126,54994],{"class":42},[36,138128,1859],{"class":112},[36,138130,5029],{"class":42},[36,138132,138133,138135,138137,138139],{"class":38,"line":642},[36,138134,74342],{"class":112},[36,138136,54994],{"class":42},[36,138138,1859],{"class":112},[36,138140,5029],{"class":42},[36,138142,138143,138145,138147,138149,138151,138153,138155],{"class":38,"line":655},[36,138144,74450],{"class":112},[36,138146,54994],{"class":42},[36,138148,554],{"class":112},[36,138150,55049],{"class":46},[36,138152,55078],{"class":112},[36,138154,67546],{"class":112},[36,138156,5029],{"class":42},[36,138158,138159,138162,138164,138166],{"class":38,"line":662},[36,138160,138161],{"class":112},"  border-bottom-color",[36,138163,54994],{"class":42},[36,138165,65924],{"class":112},[36,138167,5029],{"class":42},[36,138169,138170],{"class":38,"line":667},[36,138171,5300],{"class":42},[26,138173,138174],{"className":129586,"code":133743,"language":129588,"meta":31,"style":31},[33,138175,138176,138182,138198],{"__ignoreMap":31},[36,138177,138178,138180],{"class":38,"line":39},[36,138179,55168],{"class":54857},[36,138181,19228],{"class":42},[36,138183,138184,138186,138188,138190,138192,138194,138196],{"class":38,"line":53},[36,138185,74450],{"class":112},[36,138187,54994],{"class":42},[36,138189,4092],{"class":112},[36,138191,55049],{"class":46},[36,138193,55078],{"class":112},[36,138195,132978],{"class":112},[36,138197,5029],{"class":42},[36,138199,138200],{"class":38,"line":196},[36,138201,5300],{"class":42},[5198,138203],{"style":129442,"src":138204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,138206,138208],{"id":138207},"_132-css用户界面样式","13.2 css用户界面样式",[318,138210,138212],{"id":138211},"_1321-鼠标样式","13.2.1 鼠标样式",[26,138214,138216],{"className":129586,"code":138215,"language":129588,"meta":31,"style":31},"\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",[33,138217,138218,138223,138242,138260,138279,138296],{"__ignoreMap":31},[36,138219,138220],{"class":38,"line":39},[36,138221,138222],{"class":3943},"\u002F* 鼠标样式 *\u002F\n",[36,138224,138225,138227,138229,138232,138234,138236,138239],{"class":38,"line":53},[36,138226,55168],{"class":54857},[36,138228,83361],{"class":42},[36,138230,138231],{"class":112},"cursor",[36,138233,54994],{"class":42},[36,138235,65585],{"class":112},[36,138237,138238],{"class":42},"; }   ",[36,138240,138241],{"class":3943},"\u002F* 手型 *\u002F\n",[36,138243,138244,138246,138248,138250,138252,138255,138257],{"class":38,"line":196},[36,138245,55168],{"class":54857},[36,138247,83361],{"class":42},[36,138249,138231],{"class":112},[36,138251,54994],{"class":42},[36,138253,138254],{"class":112},"default",[36,138256,138238],{"class":42},[36,138258,138259],{"class":3943},"\u002F* 默认 *\u002F\n",[36,138261,138262,138264,138266,138268,138270,138273,138276],{"class":38,"line":642},[36,138263,55168],{"class":54857},[36,138265,83361],{"class":42},[36,138267,138231],{"class":112},[36,138269,54994],{"class":42},[36,138271,138272],{"class":112},"move",[36,138274,138275],{"class":42},"; }      ",[36,138277,138278],{"class":3943},"\u002F* 移动 *\u002F\n",[36,138280,138281,138283,138285,138287,138289,138291,138293],{"class":38,"line":655},[36,138282,55168],{"class":54857},[36,138284,83361],{"class":42},[36,138286,138231],{"class":112},[36,138288,54994],{"class":42},[36,138290,80],{"class":112},[36,138292,138275],{"class":42},[36,138294,138295],{"class":3943},"\u002F* 文本 *\u002F\n",[36,138297,138298,138300,138302,138304,138306,138309,138312],{"class":38,"line":662},[36,138299,55168],{"class":54857},[36,138301,83361],{"class":42},[36,138303,138231],{"class":112},[36,138305,54994],{"class":42},[36,138307,138308],{"class":112},"not-allowed",[36,138310,138311],{"class":42},"; } ",[36,138313,138314],{"class":3943},"\u002F* 禁止 *\u002F\n",[248,138316,138317,138325],{},[251,138318,138319],{},[254,138320,138321,138323],{},[257,138322,130050],{"align":259},[257,138324,31100],{"align":259},[265,138326,138327,138334,138341,138348,138355],{},[254,138328,138329,138331],{},[270,138330,138254],{"align":259},[270,138332,138333],{"align":259},"小白 默认",[254,138335,138336,138338],{},[270,138337,65585],{"align":259},[270,138339,138340],{"align":259},"小手",[254,138342,138343,138345],{},[270,138344,138272],{"align":259},[270,138346,138347],{"align":259},"移动",[254,138349,138350,138352],{},[270,138351,80],{"align":259},[270,138353,138354],{"align":259},"文本",[254,138356,138357,138359],{},[270,138358,138308],{"align":259},[270,138360,138361],{"align":259},"禁止",[318,138363,138365],{"id":138364},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,138367,138368],{},"去除表单轮廓线",[19,138370,138371],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[26,138373,138374],{"className":129586,"code":132950,"language":129588,"meta":31,"style":31},[33,138375,138376,138380,138386,138402],{"__ignoreMap":31},[36,138377,138378],{"class":38,"line":39},[36,138379,132957],{"class":3943},[36,138381,138382,138384],{"class":38,"line":53},[36,138383,55168],{"class":54857},[36,138385,19228],{"class":42},[36,138387,138388,138390,138392,138394,138396,138398,138400],{"class":38,"line":196},[36,138389,74450],{"class":112},[36,138391,54994],{"class":42},[36,138393,4092],{"class":112},[36,138395,55049],{"class":46},[36,138397,55078],{"class":112},[36,138399,132978],{"class":112},[36,138401,5029],{"class":42},[36,138403,138404],{"class":38,"line":642},[36,138405,5300],{"class":42},[19,138407,138408],{},"文本域：",[5198,138410],{"style":129442,"src":138411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,138413,138414],{},"此时会有一个空白区域",[5198,138416],{"style":129442,"src":138417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,138419,138420],{},"写在同一行就不会出现这个问题",[5198,138422],{"style":129442,"src":138423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,138425,138426],{},"文本域是行内块元素，一定记住！！！",[19,138428,101781],{},[5198,138430],{"style":129442,"src":138431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,138433,138434],{},"文本域尽量放在一行",[19,138436,138437],{},"知识回顾：cols是列，rols是行",[5198,138439],{"style":129442,"src":138440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,138442,138443],{},"它可以进行拖动，显然这是我们不愿意看到的",[5198,138445],{"style":129442,"src":138446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,138448,138449],{},"使用resize进行解决",[26,138451,138453],{"className":129586,"code":138452,"language":129588,"meta":31,"style":31},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[33,138454,138455,138461,138474],{"__ignoreMap":31},[36,138456,138457,138459],{"class":38,"line":39},[36,138458,57378],{"class":54857},[36,138460,19228],{"class":42},[36,138462,138463,138465,138467,138469,138471],{"class":38,"line":53},[36,138464,74352],{"class":112},[36,138466,54994],{"class":42},[36,138468,58293],{"class":112},[36,138470,133449],{"class":42},[36,138472,138473],{"class":3943},"\u002F* 取消表单轮廓线 *\u002F\n",[36,138475,138476],{"class":38,"line":196},[36,138477,5300],{"class":42},[19,138479,138480],{},"此时就无法通过右下方实现拖动了",[318,138482,138484],{"id":138483},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,138486,138487],{},"实现一个盒子中的文字和图片对齐",[19,138489,138490,138491,138494],{},"用于设置一个元素的 ",[4027,138492,138493],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,138496,138497],{},"图片和文字默认是基线对齐",[5198,138499],{"style":129442,"src":138500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[26,138502,138503],{"className":129586,"code":138452,"language":129588,"meta":31,"style":31},[33,138504,138505,138511,138523],{"__ignoreMap":31},[36,138506,138507,138509],{"class":38,"line":39},[36,138508,57378],{"class":54857},[36,138510,19228],{"class":42},[36,138512,138513,138515,138517,138519,138521],{"class":38,"line":53},[36,138514,74352],{"class":112},[36,138516,54994],{"class":42},[36,138518,58293],{"class":112},[36,138520,133449],{"class":42},[36,138522,138473],{"class":3943},[36,138524,138525],{"class":38,"line":196},[36,138526,5300],{"class":42},[5198,138528],{"style":129442,"src":138529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[25619,138531,138533],{"id":138532},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,138535,138536],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[5198,138538],{"style":129442,"src":138539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,138541,138542,138543,138546],{},"此时可以给图片、表单这些行内块元素的 ",[4027,138544,138545],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[25619,138548,138550],{"id":138549},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,138552,138553],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,138555,447],{},[26,138557,138559],{"className":129586,"code":138558,"language":129588,"meta":31,"style":31},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[33,138560,138561,138566,138572,138584],{"__ignoreMap":31},[36,138562,138563],{"class":38,"line":39},[36,138564,138565],{"class":3943},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[36,138567,138568,138570],{"class":38,"line":53},[36,138569,5198],{"class":54857},[36,138571,19228],{"class":42},[36,138573,138574,138577,138579,138582],{"class":38,"line":196},[36,138575,138576],{"class":112},"  vertical-align",[36,138578,54994],{"class":42},[36,138580,138581],{"class":112},"middle",[36,138583,5029],{"class":42},[36,138585,138586],{"class":38,"line":642},[36,138587,5300],{"class":42},[5198,138589],{"style":129442,"src":138590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,138592,138593],{},"主要解决方法有两种：",[211,138595,138596],{},[214,138597,138598,138601,138602,138605],{},[4027,138599,138600],{},"给图片"," 添加 ",[4027,138603,138604],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,138607,138608,138609],{},"2.把图片转换为块级元素 ",[4027,138610,138611],{},"display: block",[19,138613,138614],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,138616,138617],{},"img {",[19,138619,138620],{},"vertical-align:middle;",[19,138622,4815],{},[318,138624,138626],{"id":138625},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,138628,138629],{},"效果：",[5198,138631],{"style":129442,"src":138632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,138634,138635],{},"单行文本溢出显示省略号--必须满足三个条件：",[26,138637,138639],{"className":129586,"code":138638,"language":129588,"meta":31,"style":31},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[33,138640,138641,138646,138652,138662,138667,138677],{"__ignoreMap":31},[36,138642,138643],{"class":38,"line":39},[36,138644,138645],{"class":3943},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[36,138647,138648,138650],{"class":38,"line":53},[36,138649,5198],{"class":54857},[36,138651,19228],{"class":42},[36,138653,138654,138656,138658,138660],{"class":38,"line":196},[36,138655,138576],{"class":112},[36,138657,54994],{"class":42},[36,138659,138581],{"class":112},[36,138661,5029],{"class":42},[36,138663,138664],{"class":38,"line":642},[36,138665,138666],{"class":3943},"  \u002F* 或 *\u002F\n",[36,138668,138669,138671,138673,138675],{"class":38,"line":655},[36,138670,131202],{"class":112},[36,138672,54994],{"class":42},[36,138674,64424],{"class":112},[36,138676,5029],{"class":42},[36,138678,138679],{"class":38,"line":662},[36,138680,5300],{"class":42},[318,138682,138684],{"id":138683},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,138686,138629],{},[5198,138688],{"style":129442,"src":138689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,138691,138692,138693,138696],{},"多行文本溢出显示省略号， ",[4027,138694,138695],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[26,138698,138699],{"className":129586,"code":138638,"language":129588,"meta":31,"style":31},[33,138700,138701,138705,138711,138721,138725,138735],{"__ignoreMap":31},[36,138702,138703],{"class":38,"line":39},[36,138704,138645],{"class":3943},[36,138706,138707,138709],{"class":38,"line":53},[36,138708,5198],{"class":54857},[36,138710,19228],{"class":42},[36,138712,138713,138715,138717,138719],{"class":38,"line":196},[36,138714,138576],{"class":112},[36,138716,54994],{"class":42},[36,138718,138581],{"class":112},[36,138720,5029],{"class":42},[36,138722,138723],{"class":38,"line":642},[36,138724,138666],{"class":3943},[36,138726,138727,138729,138731,138733],{"class":38,"line":655},[36,138728,131202],{"class":112},[36,138730,54994],{"class":42},[36,138732,64424],{"class":112},[36,138734,5029],{"class":42},[36,138736,138737],{"class":38,"line":662},[36,138738,5300],{"class":42},[19,138740,138741],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,138743,138745],{"id":138744},"_133-常见布局技巧","13.3 常见布局技巧",[19,138747,138748],{},[4027,138749,138750],{},"巧妙利用一个技术更快更好的布局：",[211,138752,138753,138756,138759,138762],{},[214,138754,138755],{},"margin负值的运用",[214,138757,138758],{},"文字围绕浮动元素",[214,138760,138761],{},"行内块的巧妙运用",[214,138763,138764],{},"CSS三角强化",[318,138766,138768],{"id":138767},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,138770,138771],{},"应用场景：",[5198,138773],{"style":129442,"src":138774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[5198,138776],{"style":129442,"src":138777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,138779,138780],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,138782,138783],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[26,138785,138786],{"className":129586,"code":132950,"language":129588,"meta":31,"style":31},[33,138787,138788,138792,138798,138814],{"__ignoreMap":31},[36,138789,138790],{"class":38,"line":39},[36,138791,132957],{"class":3943},[36,138793,138794,138796],{"class":38,"line":53},[36,138795,55168],{"class":54857},[36,138797,19228],{"class":42},[36,138799,138800,138802,138804,138806,138808,138810,138812],{"class":38,"line":196},[36,138801,74450],{"class":112},[36,138803,54994],{"class":42},[36,138805,4092],{"class":112},[36,138807,55049],{"class":46},[36,138809,55078],{"class":112},[36,138811,132978],{"class":112},[36,138813,5029],{"class":42},[36,138815,138816],{"class":38,"line":642},[36,138817,5300],{"class":42},[5198,138819],{"style":129442,"src":138820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,138822,138823],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[26,138825,138827],{"className":129586,"code":138826,"language":129588,"meta":31,"style":31},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,138828,138829,138834,138840,138850,138862,138874],{"__ignoreMap":31},[36,138830,138831],{"class":38,"line":39},[36,138832,138833],{"class":3943},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[36,138835,138836,138838],{"class":38,"line":53},[36,138837,133434],{"class":101},[36,138839,19228],{"class":42},[36,138841,138842,138844,138846,138848],{"class":38,"line":196},[36,138843,135392],{"class":112},[36,138845,54994],{"class":42},[36,138847,58320],{"class":112},[36,138849,5029],{"class":42},[36,138851,138852,138854,138856,138858,138860],{"class":38,"line":642},[36,138853,135406],{"class":112},[36,138855,54994],{"class":42},[36,138857,554],{"class":112},[36,138859,55049],{"class":46},[36,138861,5029],{"class":42},[36,138863,138864,138866,138868,138870,138872],{"class":38,"line":655},[36,138865,135423],{"class":112},[36,138867,54994],{"class":42},[36,138869,1921],{"class":112},[36,138871,55049],{"class":46},[36,138873,5029],{"class":42},[36,138875,138876],{"class":38,"line":662},[36,138877,5300],{"class":42},[19,138879,138880],{},"加上上述代码会发现：",[5198,138882],{"style":129442,"src":138883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,138885,138886],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,138888,138889],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[26,138891,138892],{"className":129586,"code":138826,"language":129588,"meta":31,"style":31},[33,138893,138894,138898,138904,138914,138926,138938],{"__ignoreMap":31},[36,138895,138896],{"class":38,"line":39},[36,138897,138833],{"class":3943},[36,138899,138900,138902],{"class":38,"line":53},[36,138901,133434],{"class":101},[36,138903,19228],{"class":42},[36,138905,138906,138908,138910,138912],{"class":38,"line":196},[36,138907,135392],{"class":112},[36,138909,54994],{"class":42},[36,138911,58320],{"class":112},[36,138913,5029],{"class":42},[36,138915,138916,138918,138920,138922,138924],{"class":38,"line":642},[36,138917,135406],{"class":112},[36,138919,54994],{"class":42},[36,138921,554],{"class":112},[36,138923,55049],{"class":46},[36,138925,5029],{"class":42},[36,138927,138928,138930,138932,138934,138936],{"class":38,"line":655},[36,138929,135423],{"class":112},[36,138931,54994],{"class":42},[36,138933,1921],{"class":112},[36,138935,55049],{"class":46},[36,138937,5029],{"class":42},[36,138939,138940],{"class":38,"line":662},[36,138941,5300],{"class":42},[19,138943,138944],{},"解决方式2：",[19,138946,138947],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[26,138949,138951],{"className":129586,"code":138950,"language":129588,"meta":31,"style":31},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,138952,138953,138959,138969,138981,138993],{"__ignoreMap":31},[36,138954,138955,138957],{"class":38,"line":39},[36,138956,55168],{"class":54857},[36,138958,19228],{"class":42},[36,138960,138961,138963,138965,138967],{"class":38,"line":53},[36,138962,135392],{"class":112},[36,138964,54994],{"class":42},[36,138966,58320],{"class":112},[36,138968,5029],{"class":42},[36,138970,138971,138973,138975,138977,138979],{"class":38,"line":196},[36,138972,135406],{"class":112},[36,138974,54994],{"class":42},[36,138976,554],{"class":112},[36,138978,55049],{"class":46},[36,138980,5029],{"class":42},[36,138982,138983,138985,138987,138989,138991],{"class":38,"line":642},[36,138984,135423],{"class":112},[36,138986,54994],{"class":42},[36,138988,1921],{"class":112},[36,138990,55049],{"class":46},[36,138992,5029],{"class":42},[36,138994,138995],{"class":38,"line":655},[36,138996,5300],{"class":42},[318,138998,139000],{"id":138999},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,139002,138771],{},[5198,139004],{"style":129442,"src":139005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,139007,139008],{},"实现结构图：",[5198,139010],{"style":129442,"src":139011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,139013,139014],{},"巧妙运用浮动元素不会压住文字的特性",[19,139016,139017],{},"代码显示：",[26,139019,139021],{"className":129586,"code":139020,"language":129588,"meta":31,"style":31},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,139022,139023,139029,139039,139043,139048,139052,139058,139072],{"__ignoreMap":31},[36,139024,139025,139027],{"class":38,"line":39},[36,139026,133434],{"class":101},[36,139028,19228],{"class":42},[36,139030,139031,139033,139035,139037],{"class":38,"line":53},[36,139032,134066],{"class":112},[36,139034,54994],{"class":42},[36,139036,259],{"class":112},[36,139038,5029],{"class":42},[36,139040,139041],{"class":38,"line":196},[36,139042,5300],{"class":42},[36,139044,139045],{"class":38,"line":642},[36,139046,139047],{"class":42},"```Css\n",[36,139049,139050],{"class":38,"line":655},[36,139051,133429],{"class":3943},[36,139053,139054,139056],{"class":38,"line":662},[36,139055,133434],{"class":101},[36,139057,19228],{"class":42},[36,139059,139060,139062,139064,139066,139068,139070],{"class":38,"line":667},[36,139061,74024],{"class":112},[36,139063,54994],{"class":42},[36,139065,1859],{"class":112},[36,139067,55113],{"class":112},[36,139069,133449],{"class":42},[36,139071,133452],{"class":3943},[36,139073,139074],{"class":38,"line":679},[36,139075,5300],{"class":42},[19,139077,139078],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[26,139080,139083],{"className":139081,"code":139082,"language":80},[78],"\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",[33,139084,139082],{"__ignoreMap":31},[5198,139086],{"style":129442,"src":139087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,139089,139090],{},"最终展示结果：",[26,139092,139093],{"className":129586,"code":133422,"language":129588,"meta":31,"style":31},[33,139094,139095,139099,139105,139119],{"__ignoreMap":31},[36,139096,139097],{"class":38,"line":39},[36,139098,133429],{"class":3943},[36,139100,139101,139103],{"class":38,"line":53},[36,139102,133434],{"class":101},[36,139104,19228],{"class":42},[36,139106,139107,139109,139111,139113,139115,139117],{"class":38,"line":196},[36,139108,74024],{"class":112},[36,139110,54994],{"class":42},[36,139112,1859],{"class":112},[36,139114,55113],{"class":112},[36,139116,133449],{"class":42},[36,139118,133452],{"class":3943},[36,139120,139121],{"class":38,"line":642},[36,139122,5300],{"class":42},[5198,139124],{"style":129442,"src":139125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,139127,139129],{"id":139128},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[318,139131,139133],{"id":139132},"_1341-原理","13.4.1 原理",[5198,139135],{"style":129442,"src":139136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[26,139138,139139],{"className":129586,"code":133422,"language":129588,"meta":31,"style":31},[33,139140,139141,139145,139151,139165],{"__ignoreMap":31},[36,139142,139143],{"class":38,"line":39},[36,139144,133429],{"class":3943},[36,139146,139147,139149],{"class":38,"line":53},[36,139148,133434],{"class":101},[36,139150,19228],{"class":42},[36,139152,139153,139155,139157,139159,139161,139163],{"class":38,"line":196},[36,139154,74024],{"class":112},[36,139156,54994],{"class":42},[36,139158,1859],{"class":112},[36,139160,55113],{"class":112},[36,139162,133449],{"class":42},[36,139164,133452],{"class":3943},[36,139166,139167],{"class":38,"line":642},[36,139168,5300],{"class":42},[318,139170,139172],{"id":139171},"_1342-实例","13.4.2 实例",[5198,139174],{"style":129442,"src":139175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[26,139177,139178],{"className":129586,"code":134052,"language":129588,"meta":31,"style":31},[33,139179,139180,139186,139196,139200,139206,139216],{"__ignoreMap":31},[36,139181,139182,139184],{"class":38,"line":39},[36,139183,134059],{"class":101},[36,139185,19228],{"class":42},[36,139187,139188,139190,139192,139194],{"class":38,"line":53},[36,139189,134066],{"class":112},[36,139191,54994],{"class":42},[36,139193,259],{"class":112},[36,139195,5029],{"class":42},[36,139197,139198],{"class":38,"line":196},[36,139199,5300],{"class":42},[36,139201,139202,139204],{"class":38,"line":642},[36,139203,134081],{"class":101},[36,139205,19228],{"class":42},[36,139207,139208,139210,139212,139214],{"class":38,"line":655},[36,139209,134066],{"class":112},[36,139211,54994],{"class":42},[36,139213,76076],{"class":112},[36,139215,5029],{"class":42},[36,139217,139218],{"class":38,"line":662},[36,139219,5300],{"class":42},[14,139221,139223],{"id":139222},"_135-css的初始化","13.5 css的初始化",[19,139225,139226],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,139228,139229],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,139231,139232],{},"每个网页都必须首先进行 CSS初始化。",[19,139234,139235],{},"这里我们以 京东CSS初始化代码为例。",[19,139237,139238],{},"在网页右键查看网页源代码",[19,139240,139241],{},"找到css的link引入语句",[19,139243,139244],{},"然后ctrl+f 输入body",[19,139246,80780],{},[5198,139248],{"style":129442,"src":139249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,139251,80803],{},[5198,139253],{"style":129442,"src":139254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,139256,139257],{},"③打开了网页上传压缩的代码",[5198,139259],{"style":129442,"src":139260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,139262,139263],{},"④从body前可以查看这个网页的初始化代码",[19,139265,139266],{},[4027,139267,139268],{},"Unicode编码字体：",[19,139270,139271],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,139273,86761],{},[19,139275,139276],{},"黑体 \\9ED1\\4F53",[19,139278,139279],{},"宋体 \\5B8B\\4F53",[19,139281,139282],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[3785,139284,139285],{},"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":31,"searchDepth":53,"depth":53,"links":139287},[139288,139289,139296,139300,139304],{"id":138085,"depth":53,"text":138086},{"id":138207,"depth":53,"text":138208,"children":139290},[139291,139292,139293,139294,139295],{"id":138211,"depth":196,"text":138212},{"id":138364,"depth":196,"text":138365},{"id":138483,"depth":196,"text":138484},{"id":138625,"depth":196,"text":138626},{"id":138683,"depth":196,"text":138684},{"id":138744,"depth":53,"text":138745,"children":139297},[139298,139299],{"id":138767,"depth":196,"text":138768},{"id":138999,"depth":196,"text":139000},{"id":139128,"depth":53,"text":139129,"children":139301},[139302,139303],{"id":139132,"depth":196,"text":139133},{"id":139171,"depth":196,"text":139172},{"id":139222,"depth":53,"text":139223},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":138077,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":139311,"title":139312,"body":139313,"description":26998,"extension":3817,"meta":140999,"navigation":658,"path":141000,"seo":141001,"stem":141002,"__hash__":141003},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":139314,"toc":140988},[139315,139318,139322,139326,139329,139336,139339,139342,139380,139383,139385,139399,139403,139412,139416,139421,139424,139427,139430,139465,139470,139473,139503,139506,139511,139514,139517,139547,139550,139604,139607,139611,139616,139628,139631,139635,139665,139668,139673,139676,139706,139709,139713,139730,139734,139738,139741,139774,139777,139781,139784,139787,139790,139793,139796,139907,139910,139913,139916,140018,140021,140025,140029,140033,140036,140076,140079,140081,140097,140101,140104,140109,140190,140193,140196,140322,140327,140330,140338,140341,140346,140431,140434,140438,140441,140444,140448,140468,140473,140557,140560,140565,140568,140571,140649,140652,140655,140658,140661,140664,140669,140672,140675,140747,140750,140755,140758,140855,140858,140864,140867,140870,140873,140876,140879,140882,140885,140888,140892,140897,140900,140933,140938,140941,140982,140985],[10,139316,139312],{"id":139317},"_14-html5与css3新特性",[14,139319,139321],{"id":139320},"_141-html5的新特性","14.1 HTML5的新特性",[318,139323,139325],{"id":139324},"_1411-基本标签","14.1.1 基本标签",[19,139327,139328],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,139330,139331,139332,139335],{},"这些新特性都有兼容性问题，基本是 ",[4027,139333,139334],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,139337,139338],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,139340,139341],{},"现在使用的是新特性：",[4875,139343,139344,139350,139356,139362,139368,139374],{},[214,139345,139346,139349],{},[33,139347,139348],{},"\u003Cheader>"," 头部标签",[214,139351,139352,139355],{},[33,139353,139354],{},"\u003Cnav>"," 导航标签",[214,139357,139358,139361],{},[33,139359,139360],{},"\u003Carticle>"," 内容标签",[214,139363,139364,139367],{},[33,139365,139366],{},"\u003Csection>"," 定义文档某个区域",[214,139369,139370,139373],{},[33,139371,139372],{},"\u003Caside>"," 侧边栏标签",[214,139375,139376,139379],{},[33,139377,139378],{},"\u003Cfooter>"," 尾部标签",[5198,139381],{"style":129442,"src":139382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,139384,3917],{},[4875,139386,139387,139390,139393,139396],{},[214,139388,139389],{},"这种语义化标准主要是针对搜索引擎的",[214,139391,139392],{},"这些标签页面中可以经常使用",[214,139394,139395],{},"在IE9中，需要把这些元素转换为块级元素",[214,139397,139398],{},"移动端更喜欢使用这些标签",[318,139400,139402],{"id":139401},"_1412-多媒体标签","14.1.2 多媒体标签",[19,139404,139405,139406,139408,139409,139411],{},"音频 ",[4027,139407,31785],{}," 和视频 ",[4027,139410,31794],{}," 两个标签",[25619,139413,139415],{"id":139414},"_14121-视频标签-video","14.1.2.1 视频标签- video",[211,139417,139418],{},[214,139419,139420],{},"支持格式：",[5198,139422],{"style":129442,"src":139423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,139425,139426],{},"尽量使用MP4，兼容性好",[19,139428,139429],{},"用MP4就可以",[26,139431,139433],{"className":130333,"code":139432,"language":130335,"meta":31,"style":31},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[33,139434,139435],{"__ignoreMap":31},[36,139436,139437,139439,139441,139443,139445,139448,139450,139453,139456,139459,139461,139463],{"class":38,"line":39},[36,139438,393],{"class":42},[36,139440,31794],{"class":54857},[36,139442,58795],{"class":101},[36,139444,47],{"class":42},[36,139446,139447],{"class":105},"\"movie.mp4\"",[36,139449,95975],{"class":101},[36,139451,139452],{"class":101}," autoplay",[36,139454,139455],{"class":101}," muted",[36,139457,139458],{"class":101}," loop",[36,139460,58870],{"class":42},[36,139462,31794],{"class":54857},[36,139464,54864],{"class":42},[211,139466,139467],{"start":53},[214,139468,139469],{},"兼容写法",[19,139471,139472],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[26,139474,139475],{"className":130333,"code":139432,"language":130335,"meta":31,"style":31},[33,139476,139477],{"__ignoreMap":31},[36,139478,139479,139481,139483,139485,139487,139489,139491,139493,139495,139497,139499,139501],{"class":38,"line":39},[36,139480,393],{"class":42},[36,139482,31794],{"class":54857},[36,139484,58795],{"class":101},[36,139486,47],{"class":42},[36,139488,139447],{"class":105},[36,139490,95975],{"class":101},[36,139492,139452],{"class":101},[36,139494,139455],{"class":101},[36,139496,139458],{"class":101},[36,139498,58870],{"class":42},[36,139500,31794],{"class":54857},[36,139502,54864],{"class":42},[19,139504,139505],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[211,139507,139508],{"start":196},[214,139509,139510],{},"video常用属性",[5198,139512],{"style":129442,"src":139513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,139515,139516],{},"poster属性后面是跟的等待加载图片的地址",[26,139518,139519],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,139520,139521],{"__ignoreMap":31},[36,139522,139523,139525,139527,139529,139531,139533,139535,139537,139539,139541,139543,139545],{"class":38,"line":39},[36,139524,393],{"class":42},[36,139526,5198],{"class":54857},[36,139528,58795],{"class":101},[36,139530,47],{"class":42},[36,139532,137103],{"class":105},[36,139534,58803],{"class":101},[36,139536,47],{"class":42},[36,139538,137110],{"class":105},[36,139540,137113],{"class":101},[36,139542,47],{"class":42},[36,139544,137118],{"class":105},[36,139546,54864],{"class":42},[19,139548,139549],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[26,139551,139553],{"className":129586,"code":139552,"language":129588,"meta":31,"style":31},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[33,139554,139555,139560,139566,139590,139595,139600],{"__ignoreMap":31},[36,139556,139557],{"class":38,"line":39},[36,139558,139559],{"class":3943},"\u002F* 2D 位移 *\u002F\n",[36,139561,139562,139564],{"class":38,"line":53},[36,139563,55168],{"class":54857},[36,139565,19228],{"class":42},[36,139567,139568,139571,139573,139576,139578,139580,139582,139584,139586,139588],{"class":38,"line":196},[36,139569,139570],{"class":112},"  transform",[36,139572,54994],{"class":42},[36,139574,139575],{"class":112},"translate",[36,139577,495],{"class":42},[36,139579,4186],{"class":112},[36,139581,55049],{"class":46},[36,139583,478],{"class":42},[36,139585,4527],{"class":112},[36,139587,55049],{"class":46},[36,139589,6422],{"class":42},[36,139591,139592],{"class":38,"line":642},[36,139593,139594],{"class":3943},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[36,139596,139597],{"class":38,"line":655},[36,139598,139599],{"class":3943},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[36,139601,139602],{"class":38,"line":662},[36,139603,5300],{"class":42},[19,139605,139606],{},"muted:自动静音属性",[25619,139608,139610],{"id":139609},"_14122-音频标签audio","14.1.2.2 音频标签audio",[211,139612,139613],{},[214,139614,139615],{},"基本使用",[19,139617,139618,139619,139624,139625],{},"当前 ",[4027,139620,139621],{},[33,139622,139623],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[4027,139626,139627],{},"mp3格式",[5198,139629],{"style":129442,"src":139630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[211,139632,139633],{"start":53},[214,139634,139469],{},[26,139636,139637],{"className":130333,"code":139432,"language":130335,"meta":31,"style":31},[33,139638,139639],{"__ignoreMap":31},[36,139640,139641,139643,139645,139647,139649,139651,139653,139655,139657,139659,139661,139663],{"class":38,"line":39},[36,139642,393],{"class":42},[36,139644,31794],{"class":54857},[36,139646,58795],{"class":101},[36,139648,47],{"class":42},[36,139650,139447],{"class":105},[36,139652,95975],{"class":101},[36,139654,139452],{"class":101},[36,139656,139455],{"class":101},[36,139658,139458],{"class":101},[36,139660,58870],{"class":42},[36,139662,31794],{"class":54857},[36,139664,54864],{"class":42},[19,139666,139667],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[211,139669,139670],{"start":196},[214,139671,139672],{},"常用属性",[5198,139674],{"style":129442,"src":139675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[26,139677,139678],{"className":130333,"code":139432,"language":130335,"meta":31,"style":31},[33,139679,139680],{"__ignoreMap":31},[36,139681,139682,139684,139686,139688,139690,139692,139694,139696,139698,139700,139702,139704],{"class":38,"line":39},[36,139683,393],{"class":42},[36,139685,31794],{"class":54857},[36,139687,58795],{"class":101},[36,139689,47],{"class":42},[36,139691,139447],{"class":105},[36,139693,95975],{"class":101},[36,139695,139452],{"class":101},[36,139697,139455],{"class":101},[36,139699,139458],{"class":101},[36,139701,58870],{"class":42},[36,139703,31794],{"class":54857},[36,139705,54864],{"class":42},[19,139707,139708],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[25619,139710,139712],{"id":139711},"_14123-总结","14.1.2.3 总结",[4875,139714,139715,139718,139721,139724,139727],{},[214,139716,139717],{},"音频标签和视频标签使用方式基本一致",[214,139719,139720],{},"浏览器支持情况不同",[214,139722,139723],{},"谷歌浏览器把音频和视频自动播放禁止了",[214,139725,139726],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[214,139728,139729],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[318,139731,139733],{"id":139732},"_1413-表单元素","14.1.3 表单元素",[25619,139735,139737],{"id":139736},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[5198,139739],{"style":129442,"src":139740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[26,139742,139744],{"className":130333,"code":139743,"language":130335,"meta":31,"style":31},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[33,139745,139746],{"__ignoreMap":31},[36,139747,139748,139750,139752,139754,139756,139758,139760,139762,139765,139767,139769,139772],{"class":38,"line":39},[36,139749,393],{"class":42},[36,139751,57378],{"class":54857},[36,139753,57381],{"class":101},[36,139755,47],{"class":42},[36,139757,66254],{"class":105},[36,139759,18576],{"class":101},[36,139761,47],{"class":42},[36,139763,139764],{"class":105},"\"username\"",[36,139766,64575],{"class":101},[36,139768,47],{"class":42},[36,139770,139771],{"class":105},"\"请输入用户名\"",[36,139773,54864],{"class":42},[5198,139775],{"style":129442,"src":139776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[25619,139778,139780],{"id":139779},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[5198,139782],{"style":129442,"src":139783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,139785,139786],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,139788,139789],{},"快捷操作：",[5198,139791],{"style":129442,"src":139792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,139794,139795],{},"例子1：",[26,139797,139799],{"className":130333,"code":139798,"language":130335,"meta":31,"style":31},"\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",[33,139800,139801,139824,139851,139880,139899],{"__ignoreMap":31},[36,139802,139803,139805,139807,139809,139811,139814,139817,139819,139822],{"class":38,"line":39},[36,139804,393],{"class":42},[36,139806,70180],{"class":54857},[36,139808,70183],{"class":101},[36,139810,47],{"class":42},[36,139812,139813],{"class":105},"\"\u002Fsubmit\"",[36,139815,139816],{"class":101}," method",[36,139818,47],{"class":42},[36,139820,139821],{"class":105},"\"post\"",[36,139823,54864],{"class":42},[36,139825,139826,139828,139830,139832,139834,139836,139838,139840,139842,139844,139846,139849],{"class":38,"line":53},[36,139827,55701],{"class":42},[36,139829,57378],{"class":54857},[36,139831,57381],{"class":101},[36,139833,47],{"class":42},[36,139835,66254],{"class":105},[36,139837,18576],{"class":101},[36,139839,47],{"class":42},[36,139841,139764],{"class":105},[36,139843,64575],{"class":101},[36,139845,47],{"class":42},[36,139847,139848],{"class":105},"\"用户名\"",[36,139850,54864],{"class":42},[36,139852,139853,139855,139857,139859,139861,139864,139866,139868,139871,139873,139875,139878],{"class":38,"line":196},[36,139854,55701],{"class":42},[36,139856,57378],{"class":54857},[36,139858,57381],{"class":101},[36,139860,47],{"class":42},[36,139862,139863],{"class":105},"\"password\"",[36,139865,18576],{"class":101},[36,139867,47],{"class":42},[36,139869,139870],{"class":105},"\"pwd\"",[36,139872,64575],{"class":101},[36,139874,47],{"class":42},[36,139876,139877],{"class":105},"\"密码\"",[36,139879,54864],{"class":42},[36,139881,139882,139884,139886,139888,139890,139892,139895,139897],{"class":38,"line":642},[36,139883,55701],{"class":42},[36,139885,57444],{"class":54857},[36,139887,57381],{"class":101},[36,139889,47],{"class":42},[36,139891,70203],{"class":105},[36,139893,139894],{"class":42},">提交\u003C\u002F",[36,139896,57444],{"class":54857},[36,139898,54864],{"class":42},[36,139900,139901,139903,139905],{"class":38,"line":655},[36,139902,55342],{"class":42},[36,139904,70180],{"class":54857},[36,139906,54864],{"class":42},[5198,139908],{"style":129442,"src":139909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,139911,139912],{},"value是表单域的内容",[19,139914,139915],{},"例子2：",[26,139917,139918],{"className":130333,"code":139798,"language":130335,"meta":31,"style":31},[33,139919,139920,139940,139966,139992,140010],{"__ignoreMap":31},[36,139921,139922,139924,139926,139928,139930,139932,139934,139936,139938],{"class":38,"line":39},[36,139923,393],{"class":42},[36,139925,70180],{"class":54857},[36,139927,70183],{"class":101},[36,139929,47],{"class":42},[36,139931,139813],{"class":105},[36,139933,139816],{"class":101},[36,139935,47],{"class":42},[36,139937,139821],{"class":105},[36,139939,54864],{"class":42},[36,139941,139942,139944,139946,139948,139950,139952,139954,139956,139958,139960,139962,139964],{"class":38,"line":53},[36,139943,55701],{"class":42},[36,139945,57378],{"class":54857},[36,139947,57381],{"class":101},[36,139949,47],{"class":42},[36,139951,66254],{"class":105},[36,139953,18576],{"class":101},[36,139955,47],{"class":42},[36,139957,139764],{"class":105},[36,139959,64575],{"class":101},[36,139961,47],{"class":42},[36,139963,139848],{"class":105},[36,139965,54864],{"class":42},[36,139967,139968,139970,139972,139974,139976,139978,139980,139982,139984,139986,139988,139990],{"class":38,"line":196},[36,139969,55701],{"class":42},[36,139971,57378],{"class":54857},[36,139973,57381],{"class":101},[36,139975,47],{"class":42},[36,139977,139863],{"class":105},[36,139979,18576],{"class":101},[36,139981,47],{"class":42},[36,139983,139870],{"class":105},[36,139985,64575],{"class":101},[36,139987,47],{"class":42},[36,139989,139877],{"class":105},[36,139991,54864],{"class":42},[36,139993,139994,139996,139998,140000,140002,140004,140006,140008],{"class":38,"line":642},[36,139995,55701],{"class":42},[36,139997,57444],{"class":54857},[36,139999,57381],{"class":101},[36,140001,47],{"class":42},[36,140003,70203],{"class":105},[36,140005,139894],{"class":42},[36,140007,57444],{"class":54857},[36,140009,54864],{"class":42},[36,140011,140012,140014,140016],{"class":38,"line":655},[36,140013,55342],{"class":42},[36,140015,70180],{"class":54857},[36,140017,54864],{"class":42},[5198,140019],{"style":129442,"src":140020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,140022,140024],{"id":140023},"_142-css新特性","14.2 CSS新特性",[318,140026,140028],{"id":140027},"_1421-新增选择器","14.2.1 新增选择器",[25619,140030,140032],{"id":140031},"_14211-属性选择器","14.2.1.1 属性选择器",[5198,140034],{"style":129442,"src":140035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[26,140037,140039],{"className":129586,"code":140038,"language":129588,"meta":31,"style":31},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[33,140040,140041,140056,140072],{"__ignoreMap":31},[36,140042,140043,140045,140047,140049,140051,140053],{"class":38,"line":39},[36,140044,57378],{"class":54857},[36,140046,4760],{"class":42},[36,140048,106600],{"class":101},[36,140050,47],{"class":46},[36,140052,66254],{"class":105},[36,140054,140055],{"class":42},"] {\n",[36,140057,140058,140060,140062,140064,140066,140068,140070],{"class":38,"line":53},[36,140059,74450],{"class":112},[36,140061,54994],{"class":42},[36,140063,4092],{"class":112},[36,140065,55049],{"class":46},[36,140067,55078],{"class":112},[36,140069,133166],{"class":112},[36,140071,5029],{"class":42},[36,140073,140074],{"class":38,"line":196},[36,140075,5300],{"class":42},[5198,140077],{"style":129442,"src":140078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,140080,3917],{},[4875,140082,140083,140086,140089,140092],{},[214,140084,140085],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[214,140087,140088],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[214,140090,140091],{},"属性选择器也可以选择出来自定义的属性",[214,140093,140094,140096],{},[4027,140095,12706],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[25619,140098,140100],{"id":140099},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[5198,140102],{"style":129442,"src":140103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[211,140105,140106],{},[214,140107,140108],{},"fist-child",[26,140110,140112],{"className":129586,"code":140111,"language":129588,"meta":31,"style":31},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[33,140113,140114,140119,140134,140154,140172],{"__ignoreMap":31},[36,140115,140116],{"class":38,"line":39},[36,140117,140118],{"class":3943},"\u002F* 属性选择器 *\u002F\n",[36,140120,140121,140123,140125,140127,140129,140131],{"class":38,"line":53},[36,140122,57378],{"class":54857},[36,140124,4760],{"class":42},[36,140126,106600],{"class":101},[36,140128,47],{"class":46},[36,140130,66254],{"class":105},[36,140132,140133],{"class":42},"] { }\n",[36,140135,140136,140138,140140,140142,140145,140148,140151],{"class":38,"line":196},[36,140137,57378],{"class":54857},[36,140139,4760],{"class":42},[36,140141,832],{"class":101},[36,140143,140144],{"class":46},"^=",[36,140146,140147],{"class":105},"\"icon\"",[36,140149,140150],{"class":42},"] { }  ",[36,140152,140153],{"class":3943},"\u002F* 以 icon 开头 *\u002F\n",[36,140155,140156,140158,140160,140162,140165,140167,140169],{"class":38,"line":642},[36,140157,57378],{"class":54857},[36,140159,4760],{"class":42},[36,140161,832],{"class":101},[36,140163,140164],{"class":46},"$=",[36,140166,140147],{"class":105},[36,140168,140150],{"class":42},[36,140170,140171],{"class":3943},"\u002F* 以 icon 结尾 *\u002F\n",[36,140173,140174,140176,140178,140180,140183,140185,140187],{"class":38,"line":655},[36,140175,57378],{"class":54857},[36,140177,4760],{"class":42},[36,140179,832],{"class":101},[36,140181,140182],{"class":46},"*=",[36,140184,140147],{"class":105},[36,140186,140150],{"class":42},[36,140188,140189],{"class":3943},"\u002F* 包含 icon *\u002F\n",[19,140191,140192],{},"ul的第一个儿子文本为红色",[19,140194,140195],{},"一定要在冒号前加空格，不然就是选中所有的了",[26,140197,140199],{"className":129586,"code":140198,"language":129588,"meta":31,"style":31},".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",[33,140200,140201,140207,140217,140221,140225,140230,140243,140256,140272,140289,140306],{"__ignoreMap":31},[36,140202,140203,140205],{"class":38,"line":39},[36,140204,129877],{"class":101},[36,140206,19228],{"class":42},[36,140208,140209,140211,140213,140215],{"class":38,"line":53},[36,140210,74459],{"class":112},[36,140212,54994],{"class":42},[36,140214,60976],{"class":112},[36,140216,5029],{"class":42},[36,140218,140219],{"class":38,"line":196},[36,140220,5300],{"class":42},[36,140222,140223],{"class":38,"line":642},[36,140224,139047],{"class":42},[36,140226,140227],{"class":38,"line":655},[36,140228,140229],{"class":3943},"\u002F* 结构伪类选择器 *\u002F\n",[36,140231,140232,140234,140237,140240],{"class":38,"line":662},[36,140233,214],{"class":54857},[36,140235,140236],{"class":101},":first-child",[36,140238,140239],{"class":42}," { }           ",[36,140241,140242],{"class":3943},"\u002F* 第一个 *\u002F\n",[36,140244,140245,140247,140250,140253],{"class":38,"line":667},[36,140246,214],{"class":54857},[36,140248,140249],{"class":101},":last-child",[36,140251,140252],{"class":42}," { }            ",[36,140254,140255],{"class":3943},"\u002F* 最后一个 *\u002F\n",[36,140257,140258,140260,140262,140264,140266,140269],{"class":38,"line":679},[36,140259,214],{"class":54857},[36,140261,132500],{"class":101},[36,140263,495],{"class":42},[36,140265,498],{"class":112},[36,140267,140268],{"class":42},") { }          ",[36,140270,140271],{"class":3943},"\u002F* 第2个 *\u002F\n",[36,140273,140274,140276,140278,140280,140283,140286],{"class":38,"line":685},[36,140275,214],{"class":54857},[36,140277,132500],{"class":101},[36,140279,495],{"class":42},[36,140281,140282],{"class":112},"2n",[36,140284,140285],{"class":42},") { }         ",[36,140287,140288],{"class":3943},"\u002F* 偶数 *\u002F\n",[36,140290,140291,140293,140295,140297,140300,140303],{"class":38,"line":691},[36,140292,214],{"class":54857},[36,140294,132500],{"class":101},[36,140296,495],{"class":42},[36,140298,140299],{"class":112},"2n+1",[36,140301,140302],{"class":42},") { }       ",[36,140304,140305],{"class":3943},"\u002F* 奇数 *\u002F\n",[36,140307,140308,140310,140312,140314,140317,140319],{"class":38,"line":696},[36,140309,214],{"class":54857},[36,140311,132500],{"class":101},[36,140313,495],{"class":42},[36,140315,140316],{"class":112},"-n+3",[36,140318,140302],{"class":42},[36,140320,140321],{"class":3943},"\u002F* 前3个 *\u002F\n",[55168,140323,140326],{"className":140324},[140325],"example","\n  示例内容\n",[19,140328,140329],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[4875,140331,140332],{},[214,140333,140334,140337],{},[33,140335,140336],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,140339,140340],{},"也就是说它选择的是熊大",[211,140342,140343],{"start":662},[214,140344,140345],{},"权重",[26,140347,140349],{"className":129586,"code":140348,"language":129588,"meta":31,"style":31},"\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",[33,140350,140351,140355,140365,140375,140389,140403,140417],{"__ignoreMap":31},[36,140352,140353],{"class":38,"line":39},[36,140354,140229],{"class":3943},[36,140356,140357,140359,140361,140363],{"class":38,"line":53},[36,140358,214],{"class":54857},[36,140360,140236],{"class":101},[36,140362,140239],{"class":42},[36,140364,140242],{"class":3943},[36,140366,140367,140369,140371,140373],{"class":38,"line":196},[36,140368,214],{"class":54857},[36,140370,140249],{"class":101},[36,140372,140252],{"class":42},[36,140374,140255],{"class":3943},[36,140376,140377,140379,140381,140383,140385,140387],{"class":38,"line":642},[36,140378,214],{"class":54857},[36,140380,132500],{"class":101},[36,140382,495],{"class":42},[36,140384,498],{"class":112},[36,140386,140268],{"class":42},[36,140388,140271],{"class":3943},[36,140390,140391,140393,140395,140397,140399,140401],{"class":38,"line":655},[36,140392,214],{"class":54857},[36,140394,132500],{"class":101},[36,140396,495],{"class":42},[36,140398,140282],{"class":112},[36,140400,140285],{"class":42},[36,140402,140288],{"class":3943},[36,140404,140405,140407,140409,140411,140413,140415],{"class":38,"line":662},[36,140406,214],{"class":54857},[36,140408,132500],{"class":101},[36,140410,495],{"class":42},[36,140412,140299],{"class":112},[36,140414,140302],{"class":42},[36,140416,140305],{"class":3943},[36,140418,140419,140421,140423,140425,140427,140429],{"class":38,"line":667},[36,140420,214],{"class":54857},[36,140422,132500],{"class":101},[36,140424,495],{"class":42},[36,140426,140316],{"class":112},[36,140428,140302],{"class":42},[36,140430,140321],{"class":3943},[19,140432,140433],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[25619,140435,140437],{"id":140436},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,140439,140440],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[5198,140442],{"style":129442,"src":140443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[211,140445,140446],{},[214,140447,3917],{},[4875,140449,140450,140453,140456,140459,140462,140465],{},[214,140451,140452],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[214,140454,140455],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[214,140457,140458],{},"语法： element::before {}",[214,140460,140461],{},"before 和 after 必须有 content 属性",[214,140463,140464],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[214,140466,140467],{},"伪元素选择器和标签选择器一样，权重为 1",[211,140469,140470],{"start":53},[214,140471,140472],{},"实例",[26,140474,140475],{"className":129586,"code":140348,"language":129588,"meta":31,"style":31},[33,140476,140477,140481,140491,140501,140515,140529,140543],{"__ignoreMap":31},[36,140478,140479],{"class":38,"line":39},[36,140480,140229],{"class":3943},[36,140482,140483,140485,140487,140489],{"class":38,"line":53},[36,140484,214],{"class":54857},[36,140486,140236],{"class":101},[36,140488,140239],{"class":42},[36,140490,140242],{"class":3943},[36,140492,140493,140495,140497,140499],{"class":38,"line":196},[36,140494,214],{"class":54857},[36,140496,140249],{"class":101},[36,140498,140252],{"class":42},[36,140500,140255],{"class":3943},[36,140502,140503,140505,140507,140509,140511,140513],{"class":38,"line":642},[36,140504,214],{"class":54857},[36,140506,132500],{"class":101},[36,140508,495],{"class":42},[36,140510,498],{"class":112},[36,140512,140268],{"class":42},[36,140514,140271],{"class":3943},[36,140516,140517,140519,140521,140523,140525,140527],{"class":38,"line":655},[36,140518,214],{"class":54857},[36,140520,132500],{"class":101},[36,140522,495],{"class":42},[36,140524,140282],{"class":112},[36,140526,140285],{"class":42},[36,140528,140288],{"class":3943},[36,140530,140531,140533,140535,140537,140539,140541],{"class":38,"line":662},[36,140532,214],{"class":54857},[36,140534,132500],{"class":101},[36,140536,495],{"class":42},[36,140538,140299],{"class":112},[36,140540,140302],{"class":42},[36,140542,140305],{"class":3943},[36,140544,140545,140547,140549,140551,140553,140555],{"class":38,"line":667},[36,140546,214],{"class":54857},[36,140548,132500],{"class":101},[36,140550,495],{"class":42},[36,140552,140316],{"class":112},[36,140554,140302],{"class":42},[36,140556,140321],{"class":3943},[5198,140558],{"style":129442,"src":140559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[211,140561,140562],{"start":196},[214,140563,140564],{},"使用场景1",[5198,140566],{"style":129442,"src":140567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,140569,140570],{},"不需要再加盒子来整红色那部分了",[26,140572,140574],{"className":129586,"code":140573,"language":129588,"meta":31,"style":31},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[33,140575,140576,140581,140590,140601,140611,140615,140624,140635,140645],{"__ignoreMap":31},[36,140577,140578],{"class":38,"line":39},[36,140579,140580],{"class":3943},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[36,140582,140583,140585,140588],{"class":38,"line":53},[36,140584,55168],{"class":54857},[36,140586,140587],{"class":101},"::before",[36,140589,19228],{"class":42},[36,140591,140592,140595,140597,140599],{"class":38,"line":196},[36,140593,140594],{"class":112},"  content",[36,140596,54994],{"class":42},[36,140598,11343],{"class":105},[36,140600,5029],{"class":42},[36,140602,140603,140605,140607,140609],{"class":38,"line":642},[36,140604,131202],{"class":112},[36,140606,54994],{"class":42},[36,140608,64424],{"class":112},[36,140610,5029],{"class":42},[36,140612,140613],{"class":38,"line":655},[36,140614,5300],{"class":42},[36,140616,140617,140619,140622],{"class":38,"line":662},[36,140618,55168],{"class":54857},[36,140620,140621],{"class":101},"::after",[36,140623,19228],{"class":42},[36,140625,140626,140628,140630,140633],{"class":38,"line":667},[36,140627,140594],{"class":112},[36,140629,54994],{"class":42},[36,140631,140632],{"class":105},"\"→\"",[36,140634,5029],{"class":42},[36,140636,140637,140639,140641,140643],{"class":38,"line":679},[36,140638,74459],{"class":112},[36,140640,54994],{"class":42},[36,140642,65625],{"class":112},[36,140644,5029],{"class":42},[36,140646,140647],{"class":38,"line":685},[36,140648,5300],{"class":42},[5198,140650],{"style":129442,"src":140651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,140653,140654],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[5198,140656],{"style":129442,"src":140657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,140659,140660],{},"但是在引用时需要先转义一下",[19,140662,140663],{},"content='\\e930'",[211,140665,140666],{"start":642},[214,140667,140668],{},"使用场景2",[19,140670,140671],{},"仿土豆效果",[19,140673,140674],{},"通过使用伪元素选择器可以减少body中盒子的数量",[26,140676,140677],{"className":129586,"code":140573,"language":129588,"meta":31,"style":31},[33,140678,140679,140683,140691,140701,140711,140715,140723,140733,140743],{"__ignoreMap":31},[36,140680,140681],{"class":38,"line":39},[36,140682,140580],{"class":3943},[36,140684,140685,140687,140689],{"class":38,"line":53},[36,140686,55168],{"class":54857},[36,140688,140587],{"class":101},[36,140690,19228],{"class":42},[36,140692,140693,140695,140697,140699],{"class":38,"line":196},[36,140694,140594],{"class":112},[36,140696,54994],{"class":42},[36,140698,11343],{"class":105},[36,140700,5029],{"class":42},[36,140702,140703,140705,140707,140709],{"class":38,"line":642},[36,140704,131202],{"class":112},[36,140706,54994],{"class":42},[36,140708,64424],{"class":112},[36,140710,5029],{"class":42},[36,140712,140713],{"class":38,"line":655},[36,140714,5300],{"class":42},[36,140716,140717,140719,140721],{"class":38,"line":662},[36,140718,55168],{"class":54857},[36,140720,140621],{"class":101},[36,140722,19228],{"class":42},[36,140724,140725,140727,140729,140731],{"class":38,"line":667},[36,140726,140594],{"class":112},[36,140728,54994],{"class":42},[36,140730,140632],{"class":105},[36,140732,5029],{"class":42},[36,140734,140735,140737,140739,140741],{"class":38,"line":679},[36,140736,74459],{"class":112},[36,140738,54994],{"class":42},[36,140740,65625],{"class":112},[36,140742,5029],{"class":42},[36,140744,140745],{"class":38,"line":685},[36,140746,5300],{"class":42},[5198,140748],{"style":129442,"src":140749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[211,140751,140752],{"start":655},[214,140753,140754],{},"使用场景3",[19,140756,140757],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[26,140759,140761],{"className":129586,"code":140760,"language":129588,"meta":31,"style":31},".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",[33,140762,140763,140769,140779,140783,140787,140791,140799,140809,140819,140823,140831,140841,140851],{"__ignoreMap":31},[36,140764,140765,140767],{"class":38,"line":39},[36,140766,133434],{"class":101},[36,140768,19228],{"class":42},[36,140770,140771,140773,140775,140777],{"class":38,"line":53},[36,140772,134066],{"class":112},[36,140774,54994],{"class":42},[36,140776,259],{"class":112},[36,140778,5029],{"class":42},[36,140780,140781],{"class":38,"line":196},[36,140782,5300],{"class":42},[36,140784,140785],{"class":38,"line":642},[36,140786,139047],{"class":42},[36,140788,140789],{"class":38,"line":655},[36,140790,140580],{"class":3943},[36,140792,140793,140795,140797],{"class":38,"line":662},[36,140794,55168],{"class":54857},[36,140796,140587],{"class":101},[36,140798,19228],{"class":42},[36,140800,140801,140803,140805,140807],{"class":38,"line":667},[36,140802,140594],{"class":112},[36,140804,54994],{"class":42},[36,140806,11343],{"class":105},[36,140808,5029],{"class":42},[36,140810,140811,140813,140815,140817],{"class":38,"line":679},[36,140812,131202],{"class":112},[36,140814,54994],{"class":42},[36,140816,64424],{"class":112},[36,140818,5029],{"class":42},[36,140820,140821],{"class":38,"line":685},[36,140822,5300],{"class":42},[36,140824,140825,140827,140829],{"class":38,"line":691},[36,140826,55168],{"class":54857},[36,140828,140621],{"class":101},[36,140830,19228],{"class":42},[36,140832,140833,140835,140837,140839],{"class":38,"line":696},[36,140834,140594],{"class":112},[36,140836,54994],{"class":42},[36,140838,140632],{"class":105},[36,140840,5029],{"class":42},[36,140842,140843,140845,140847,140849],{"class":38,"line":702},[36,140844,74459],{"class":112},[36,140846,54994],{"class":42},[36,140848,65625],{"class":112},[36,140850,5029],{"class":42},[36,140852,140853],{"class":38,"line":708},[36,140854,5300],{"class":42},[19,140856,140857],{},"div {\nmargin: 0 auto;\n}",[26,140859,140862],{"className":140860,"code":140861,"language":80},[78],"\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",[33,140863,140861],{"__ignoreMap":31},[19,140865,140866],{},"如果想让多个元素都发生变化",[19,140868,140869],{},"不能如下操作：",[19,140871,140872],{},"transition: width 2s ease 0.5s;",[19,140874,140875],{},"transition: height 2s ease 0.5s;不对！！！",[19,140877,140878],{},"上方会样式冲突，导致不显示任何过渡效果",[19,140880,140881],{},"使用如下：加逗号隔开",[19,140883,140884],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,140886,140887],{},"transition all 2s ease;",[318,140889,140891],{"id":140890},"_1426-过渡练习","14.2.6 过渡练习",[211,140893,140894],{},[214,140895,140896],{},"进度条",[5198,140898],{"style":129442,"src":140899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[26,140901,140903],{"className":129586,"code":140902,"language":129588,"meta":31,"style":31},"div {\n  transition: all 0.3s ease;\n}\n",[33,140904,140905,140911,140929],{"__ignoreMap":31},[36,140906,140907,140909],{"class":38,"line":39},[36,140908,55168],{"class":54857},[36,140910,19228],{"class":42},[36,140912,140913,140916,140918,140920,140923,140925,140927],{"class":38,"line":53},[36,140914,140915],{"class":112},"  transition",[36,140917,54994],{"class":42},[36,140919,31732],{"class":112},[36,140921,140922],{"class":112}," 0.3",[36,140924,4566],{"class":46},[36,140926,82234],{"class":112},[36,140928,5029],{"class":42},[36,140930,140931],{"class":38,"line":196},[36,140932,5300],{"class":42},[211,140934,140935],{"start":53},[214,140936,140937],{},"小米logo",[19,140939,140940],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[26,140942,140944],{"className":129586,"code":140943,"language":129588,"meta":31,"style":31},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[33,140945,140946,140951,140957,140973,140978],{"__ignoreMap":31},[36,140947,140948],{"class":38,"line":39},[36,140949,140950],{"class":3943},"\u002F* CSS3 过渡 *\u002F\n",[36,140952,140953,140955],{"class":38,"line":53},[36,140954,55168],{"class":54857},[36,140956,19228],{"class":42},[36,140958,140959,140961,140963,140965,140967,140969,140971],{"class":38,"line":196},[36,140960,140915],{"class":112},[36,140962,54994],{"class":42},[36,140964,31732],{"class":112},[36,140966,140922],{"class":112},[36,140968,4566],{"class":46},[36,140970,82234],{"class":112},[36,140972,5029],{"class":42},[36,140974,140975],{"class":38,"line":642},[36,140976,140977],{"class":3943},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[36,140979,140980],{"class":38,"line":655},[36,140981,5300],{"class":42},[19,140983,140984],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[3785,140986,140987],{},"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":31,"searchDepth":53,"depth":53,"links":140989},[140990,140995],{"id":139320,"depth":53,"text":139321,"children":140991},[140992,140993,140994],{"id":139324,"depth":196,"text":139325},{"id":139401,"depth":196,"text":139402},{"id":139732,"depth":196,"text":139733},{"id":140023,"depth":53,"text":140024,"children":140996},[140997,140998],{"id":140027,"depth":196,"text":140028},{"id":140890,"depth":196,"text":140891},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":139312,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":141005,"title":141006,"body":141007,"description":26998,"extension":3817,"meta":142751,"navigation":658,"path":142752,"seo":142753,"stem":142754,"__hash__":142755},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":141008,"toc":142732},[141009,141012,141016,141019,141025,141031,141035,141037,141040,141043,141046,141049,141052,141055,141058,141062,141066,141069,141072,141075,141079,141082,141085,141090,141093,141096,141099,141103,141106,141115,141118,141121,141125,141128,141131,141136,141143,141157,141165,141172,141177,141180,141183,141186,141193,141197,141203,141209,141212,141215,141220,141226,141228,141236,141241,141244,141250,141252,141257,141262,141265,141267,141272,141275,141280,141285,141319,141323,141327,141330,141334,141337,141423,141426,141463,141466,141502,141506,141511,141524,141578,141580,141608,141610,141638,141644,141658,141660,141704,141706,141750,141753,141760,141771,141773,141800,141802,141828,141835,141851,141853,141947,141949,142043,142050,142053,142058,142064,142138,142141,142143,142179,142181,142217,142220,142227,142246,142249,142252,142254,142279,142281,142305,142308,142311,142341,142345,142348,142411,142413,142479,142481,142545,142548,142580,142582,142608,142610,142636,142639,142670,142672,142698,142700,142726,142729],[10,141010,141006],{"id":141011},"_15-品优购项目上篇-搭建与公共模块",[14,141013,141015],{"id":141014},"_151-项目规划","15.1 项目规划",[5198,141017],{"style":129442,"src":141018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,141020,141021,141024],{},[4027,141022,141023],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,141026,141027,141030],{},[4027,141028,141029],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,141032,141034],{"id":141033},"_152-项目介绍","15.2 项目介绍",[19,141036,141023],{},[5198,141038],{"style":129442,"src":141039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,141041,141042],{},"主页：",[5198,141044],{"style":129442,"src":141045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,141047,141048],{},"列表页：",[5198,141050],{"style":129442,"src":141051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,141053,141054],{},"注册页：",[5198,141056],{"style":129442,"src":141057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,141059,141061],{"id":141060},"_153-项目搭建工作","15.3 项目搭建工作",[318,141063,141065],{"id":141064},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[5198,141067],{"style":129442,"src":141068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,141070,141071],{},"经常更换的图片要放到upload文件夹中",[19,141073,141074],{},"不经常换的放到images文件夹中",[318,141076,141078],{"id":141077},"_1532-创建文件如下","15.3.2 创建文件如下",[5198,141080],{"style":129442,"src":141081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[5198,141083],{"style":129442,"src":141084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,141086,141087],{},[4027,141088,141089],{},"初始化样式：",[19,141091,141092],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,141094,141095],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,141097,141098],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[318,141100,141102],{"id":141101},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,141104,141105],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,141107,141108,141109,141114],{},"这里最典型的应用就是 ",[4027,141110,141111],{},[33,141112,141113],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[5198,141116],{"style":129442,"src":141117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,141119,141120],{},"通过link方法来引入",[318,141122,141124],{"id":141123},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[5198,141126],{"style":129442,"src":141127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,141129,141130],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[211,141132,141133],{},[214,141134,141135],{},"制作favicon图标",[19,141137,141138,141139,141142],{},"①把品优购图标切成 ",[33,141140,141141],{},"png"," 图片",[19,141144,141145,141146,141148,141149,141152,141153],{},"②把 ",[33,141147,141141],{}," 图片转换为 ",[33,141150,141151],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[4113,141154,141155],{"href":141155,"rel":141156},"http:\u002F\u002Fwww.bitbug.net\u002F",[27481],[211,141158,141159,141162],{"start":53},[214,141160,141161],{},"favicon图标放到网站根目录下",[214,141163,141164],{},"HTML页面引入favicon",[19,141166,141167,141168,141171],{},"在html 页面里面的 ",[33,141169,141170],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,141173,141174],{},[33,141175,141176],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,141178,141179],{},"复制这行代码或者在生成这个的网站进行复制",[5198,141181],{"style":129442,"src":141182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,141184,141185],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,141187,141188,141189],{},"例如:",[4113,141190,141191],{"href":141191,"rel":141192},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[27481],[318,141194,141196],{"id":141195},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,141198,141199,141202],{},[4027,141200,141201],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,141204,141205,141208],{},[4027,141206,141207],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,141210,141211],{},"页面必须有三个标签用来符合 SEO 优化",[5198,141213],{"style":129442,"src":141214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[211,141216,141217],{},[214,141218,141219],{},"title网站标题",[19,141221,141222,141225],{},[4027,141223,141224],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,141227,72345],{},[4875,141229,141230,141233],{},[214,141231,141232],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[214,141234,141235],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[211,141237,141238],{"start":53},[214,141239,141240],{},"description网站描述",[19,141242,141243],{},"简要说明我们网站主要是做什么的",[19,141245,141246,141249],{},[4027,141247,141248],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,141251,72345],{},[19,141253,141254],{},[33,141255,141256],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[211,141258,141259],{"start":196},[214,141260,141261],{},"keywords关键词",[19,141263,141264],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,141266,72345],{},[19,141268,141269],{},[33,141270,141271],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,141273,141274],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,141276,141277],{},[4027,141278,141279],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[211,141281,141282],{"start":642},[214,141283,141284],{},"代码总结",[26,141286,141287],{"className":130333,"code":133690,"language":130335,"meta":31,"style":31},[33,141288,141289,141293,141307,141311],{"__ignoreMap":31},[36,141290,141291],{"class":38,"line":39},[36,141292,133697],{"class":3943},[36,141294,141295,141297,141299,141301,141303,141305],{"class":38,"line":53},[36,141296,393],{"class":42},[36,141298,55168],{"class":54857},[36,141300,57043],{"class":101},[36,141302,47],{"class":42},[36,141304,133710],{"class":105},[36,141306,54864],{"class":42},[36,141308,141309],{"class":38,"line":196},[36,141310,133717],{"class":42},[36,141312,141313,141315,141317],{"class":38,"line":642},[36,141314,55342],{"class":42},[36,141316,55168],{"class":54857},[36,141318,54864],{"class":42},[14,141320,141322],{"id":141321},"_154-项目公共部分制作","15.4 项目公共部分制作",[318,141324,141326],{"id":141325},"_1541-常用模块类命名","15.4.1 常用模块类命名",[5198,141328],{"style":129442,"src":141329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[318,141331,141333],{"id":141332},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,141335,141336],{},"布局思路：",[4875,141338,141339,141342,141345,141367,141400],{},[214,141340,141341],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[214,141343,141344],{},"里面包含版心的盒子",[214,141346,141347,141348],{},"版心盒子里面包含 1 号左侧盒子左浮动",[4875,141349,141350,141358,141364],{},[214,141351,141352,141353,25121,141355,141357],{},"1 号盒子 里面包含一个",[33,141354,4875],{},[33,141356,4875],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[214,141359,141360,141361,141363],{},"里面的内容是水平排列，所以需要给",[33,141362,214],{},"设置浮动",[214,141365,141366],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[214,141368,141369,141370],{},"版心盒子里面包含 2 号右侧盒子右浮动",[4875,141371,141372,141386,141391],{},[214,141373,141374,141375,25121,141377,141379,141380,141382,141383,141385],{},"2 号盒子 里面包含一个",[33,141376,4875],{},[33,141378,4875],{},"包裹",[33,141381,214],{},"，中间的",[33,141384,4790],{},"可以用样式去设置，也可以用字符 |",[214,141387,141388,141389,141363],{},"里面内容水平排列，给",[33,141390,214],{},[214,141392,141393,141394,141396,141397,141399],{},"找到里面所有偶数的 ",[33,141395,214],{}," 设置样式（偶数的 ",[33,141398,214],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[214,141401,141402,141403],{},"需要用到字体图标",[4875,141404,141405,141411,141414,141417,141420],{},[214,141406,141407,141408],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[33,141409,141410],{},"arrow-icon",[214,141412,141413],{},"先要引入字体图片的资源",[214,141415,141416],{},"在样式里面利用 font-face 来进行声明",[214,141418,141419],{},"在伪元素的 content属性设置 图标的编码",[214,141421,141422],{},"给伪元素设置font-family属性",[19,141424,141425],{},"结构实例代码：",[26,141427,141429],{"className":129586,"code":141428,"language":129588,"meta":31,"style":31},"div::before {\n  content: \"\";\n  display: block;\n}\n",[33,141430,141431,141439,141449,141459],{"__ignoreMap":31},[36,141432,141433,141435,141437],{"class":38,"line":39},[36,141434,55168],{"class":54857},[36,141436,140587],{"class":101},[36,141438,19228],{"class":42},[36,141440,141441,141443,141445,141447],{"class":38,"line":53},[36,141442,140594],{"class":112},[36,141444,54994],{"class":42},[36,141446,11343],{"class":105},[36,141448,5029],{"class":42},[36,141450,141451,141453,141455,141457],{"class":38,"line":196},[36,141452,131202],{"class":112},[36,141454,54994],{"class":42},[36,141456,64424],{"class":112},[36,141458,5029],{"class":42},[36,141460,141461],{"class":38,"line":642},[36,141462,5300],{"class":42},[19,141464,141465],{},"样式实例代码：",[26,141467,141468],{"className":129586,"code":141428,"language":129588,"meta":31,"style":31},[33,141469,141470,141478,141488,141498],{"__ignoreMap":31},[36,141471,141472,141474,141476],{"class":38,"line":39},[36,141473,55168],{"class":54857},[36,141475,140587],{"class":101},[36,141477,19228],{"class":42},[36,141479,141480,141482,141484,141486],{"class":38,"line":53},[36,141481,140594],{"class":112},[36,141483,54994],{"class":42},[36,141485,11343],{"class":105},[36,141487,5029],{"class":42},[36,141489,141490,141492,141494,141496],{"class":38,"line":196},[36,141491,131202],{"class":112},[36,141493,54994],{"class":42},[36,141495,64424],{"class":112},[36,141497,5029],{"class":42},[36,141499,141500],{"class":38,"line":642},[36,141501,5300],{"class":42},[318,141503,141505],{"id":141504},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[4875,141507,141508],{},[214,141509,141510],{},"header 盒子必须要有高度",[19,141512,141513,141514,141516,141517],{},"1 号盒子是 ",[33,141515,134598],{}," 标志定位，在正常开发过程中， ",[4027,141518,141519,141520,141523],{},"logo的布局其实是有讲究的，需要进行 ",[33,141521,141522],{},"logoSEO","的优化 （★★★）",[4875,141525,141526,141534,141542,141569],{},[214,141527,141528,141530,141531,141533],{},[33,141529,134598],{}," 里面首先放一个 ",[33,141532,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[214,141535,141536,141538,141539,141541],{},[33,141537,10],{}," 里面再放一个链接，可以返回首页的，把 ",[33,141540,134598],{}," 的背景图片给链接即可",[214,141543,141544,141545],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[4875,141546,141547,141562],{},[214,141548,141549,141550,141553,141554,141557,141558,141561],{},"方法1：",[33,141551,141552],{},"text-indent"," 移到盒子外面（",[33,141555,141556],{},"text-indent: -9999px",") ，然后 ",[33,141559,141560],{},"overflow:hidden"," ，淘宝的做法",[214,141563,141564,141565,141568],{},"方法2：直接给 ",[33,141566,141567],{},"font-size: 0;"," 就看不到文字了，京东的做法",[214,141570,141571,141572,141574,141575,141577],{},"最后给链接一个 ",[33,141573,54964],{}," 属性，这样鼠标放到 ",[33,141576,134598],{}," 上就可以看到提示文字了",[19,141579,141425],{},[26,141581,141582],{"className":130333,"code":134819,"language":130335,"meta":31,"style":31},[33,141583,141584],{"__ignoreMap":31},[36,141585,141586,141588,141590,141592,141594,141596,141598,141600,141602,141604,141606],{"class":38,"line":39},[36,141587,393],{"class":42},[36,141589,4113],{"class":54857},[36,141591,64612],{"class":101},[36,141593,47],{"class":42},[36,141595,134834],{"class":105},[36,141597,134837],{"class":101},[36,141599,47],{"class":42},[36,141601,134842],{"class":105},[36,141603,134845],{"class":42},[36,141605,4113],{"class":54857},[36,141607,54864],{"class":42},[19,141609,141465],{},[26,141611,141612],{"className":130333,"code":134819,"language":130335,"meta":31,"style":31},[33,141613,141614],{"__ignoreMap":31},[36,141615,141616,141618,141620,141622,141624,141626,141628,141630,141632,141634,141636],{"class":38,"line":39},[36,141617,393],{"class":42},[36,141619,4113],{"class":54857},[36,141621,64612],{"class":101},[36,141623,47],{"class":42},[36,141625,134834],{"class":105},[36,141627,134837],{"class":101},[36,141629,47],{"class":42},[36,141631,134842],{"class":105},[36,141633,134845],{"class":42},[36,141635,4113],{"class":54857},[36,141637,54864],{"class":42},[19,141639,141640,141641,141643],{},"2 号盒子是 ",[33,141642,134611],{}," 搜索模块定位",[4875,141645,141646,141649,141652,141655],{},[214,141647,141648],{},"search盒子利用定位的方式放在对应的位置",[214,141650,141651],{},"search盒子设置绝对定位，header盒子设置相对定位",[214,141653,141654],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[214,141656,141657],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,141659,141425],{},[26,141661,141662],{"className":129586,"code":134906,"language":129588,"meta":31,"style":31},[33,141663,141664,141686,141690,141700],{"__ignoreMap":31},[36,141665,141666,141668,141670,141672,141674,141676,141678,141680,141682,141684],{"class":38,"line":39},[36,141667,55168],{"class":54857},[36,141669,478],{"class":42},[36,141671,19],{"class":54857},[36,141673,478],{"class":42},[36,141675,10],{"class":54857},[36,141677,478],{"class":42},[36,141679,4875],{"class":54857},[36,141681,478],{"class":42},[36,141683,214],{"class":54857},[36,141685,19228],{"class":42},[36,141687,141688],{"class":38,"line":53},[36,141689,134935],{"class":3943},[36,141691,141692,141694,141696,141698],{"class":38,"line":196},[36,141693,131202],{"class":112},[36,141695,54994],{"class":42},[36,141697,64424],{"class":112},[36,141699,5029],{"class":42},[36,141701,141702],{"class":38,"line":642},[36,141703,5300],{"class":42},[19,141705,141465],{},[26,141707,141708],{"className":129586,"code":134906,"language":129588,"meta":31,"style":31},[33,141709,141710,141732,141736,141746],{"__ignoreMap":31},[36,141711,141712,141714,141716,141718,141720,141722,141724,141726,141728,141730],{"class":38,"line":39},[36,141713,55168],{"class":54857},[36,141715,478],{"class":42},[36,141717,19],{"class":54857},[36,141719,478],{"class":42},[36,141721,10],{"class":54857},[36,141723,478],{"class":42},[36,141725,4875],{"class":54857},[36,141727,478],{"class":42},[36,141729,214],{"class":54857},[36,141731,19228],{"class":42},[36,141733,141734],{"class":38,"line":53},[36,141735,134935],{"class":3943},[36,141737,141738,141740,141742,141744],{"class":38,"line":196},[36,141739,131202],{"class":112},[36,141741,54994],{"class":42},[36,141743,64424],{"class":112},[36,141745,5029],{"class":42},[36,141747,141748],{"class":38,"line":642},[36,141749,5300],{"class":42},[19,141751,141752],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,141754,141755,141756,141759],{},"3 号盒子是 ",[33,141757,141758],{},"hotwords"," 热词模块定位",[4875,141761,141762,141765,141768],{},[214,141763,141764],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[214,141766,141767],{},"给里面所有的a标签设置 左右10px的外边距",[214,141769,141770],{},"给第一个a标签设置文字变红色（#c81623）",[19,141772,141425],{},[26,141774,141776],{"className":129586,"code":141775,"language":129588,"meta":31,"style":31},"div {\n  margin: 0 auto;\n}\n",[33,141777,141778,141784,141796],{"__ignoreMap":31},[36,141779,141780,141782],{"class":38,"line":39},[36,141781,55168],{"class":54857},[36,141783,19228],{"class":42},[36,141785,141786,141788,141790,141792,141794],{"class":38,"line":53},[36,141787,74024],{"class":112},[36,141789,54994],{"class":42},[36,141791,1859],{"class":112},[36,141793,55113],{"class":112},[36,141795,5029],{"class":42},[36,141797,141798],{"class":38,"line":196},[36,141799,5300],{"class":42},[19,141801,141465],{},[26,141803,141804],{"className":129586,"code":141775,"language":129588,"meta":31,"style":31},[33,141805,141806,141812,141824],{"__ignoreMap":31},[36,141807,141808,141810],{"class":38,"line":39},[36,141809,55168],{"class":54857},[36,141811,19228],{"class":42},[36,141813,141814,141816,141818,141820,141822],{"class":38,"line":53},[36,141815,74024],{"class":112},[36,141817,54994],{"class":42},[36,141819,1859],{"class":112},[36,141821,55113],{"class":112},[36,141823,5029],{"class":42},[36,141825,141826],{"class":38,"line":196},[36,141827,5300],{"class":42},[19,141829,141830,141831,141834],{},"4 号盒子是 ",[33,141832,141833],{},"shopcar"," 购物车模块",[4875,141836,141837,141842,141845,141848],{},[214,141838,126369,141839,141841],{},[33,141840,141833],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[214,141843,141844],{},"count 统计部分用绝对定位做",[214,141846,141847],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[214,141849,141850],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,141852,141425],{},[26,141854,141855],{"className":129586,"code":135018,"language":129588,"meta":31,"style":31},[33,141856,141857,141861,141875,141879,141893,141897,141911,141915,141929,141933],{"__ignoreMap":31},[36,141858,141859],{"class":38,"line":39},[36,141860,135025],{"class":3943},[36,141862,141863,141865,141867,141869,141871,141873],{"class":38,"line":53},[36,141864,135030],{"class":101},[36,141866,83361],{"class":42},[36,141868,131946],{"class":112},[36,141870,54994],{"class":42},[36,141872,135039],{"class":112},[36,141874,132516],{"class":42},[36,141876,141877],{"class":38,"line":196},[36,141878,135046],{"class":3943},[36,141880,141881,141883,141885,141887,141889,141891],{"class":38,"line":642},[36,141882,135051],{"class":101},[36,141884,83361],{"class":42},[36,141886,131946],{"class":112},[36,141888,54994],{"class":42},[36,141890,58320],{"class":112},[36,141892,132516],{"class":42},[36,141894,141895],{"class":38,"line":655},[36,141896,135066],{"class":3943},[36,141898,141899,141901,141903,141905,141907,141909],{"class":38,"line":662},[36,141900,135071],{"class":101},[36,141902,83361],{"class":42},[36,141904,131946],{"class":112},[36,141906,54994],{"class":42},[36,141908,58387],{"class":112},[36,141910,132516],{"class":42},[36,141912,141913],{"class":38,"line":667},[36,141914,135086],{"class":3943},[36,141916,141917,141919,141921,141923,141925,141927],{"class":38,"line":679},[36,141918,135091],{"class":101},[36,141920,83361],{"class":42},[36,141922,131946],{"class":112},[36,141924,54994],{"class":42},[36,141926,89786],{"class":112},[36,141928,132516],{"class":42},[36,141930,141931],{"class":38,"line":685},[36,141932,135106],{"class":3943},[36,141934,141935,141937,141939,141941,141943,141945],{"class":38,"line":691},[36,141936,135111],{"class":101},[36,141938,83361],{"class":42},[36,141940,131946],{"class":112},[36,141942,54994],{"class":42},[36,141944,135120],{"class":112},[36,141946,132516],{"class":42},[19,141948,141465],{},[26,141950,141951],{"className":129586,"code":135018,"language":129588,"meta":31,"style":31},[33,141952,141953,141957,141971,141975,141989,141993,142007,142011,142025,142029],{"__ignoreMap":31},[36,141954,141955],{"class":38,"line":39},[36,141956,135025],{"class":3943},[36,141958,141959,141961,141963,141965,141967,141969],{"class":38,"line":53},[36,141960,135030],{"class":101},[36,141962,83361],{"class":42},[36,141964,131946],{"class":112},[36,141966,54994],{"class":42},[36,141968,135039],{"class":112},[36,141970,132516],{"class":42},[36,141972,141973],{"class":38,"line":196},[36,141974,135046],{"class":3943},[36,141976,141977,141979,141981,141983,141985,141987],{"class":38,"line":642},[36,141978,135051],{"class":101},[36,141980,83361],{"class":42},[36,141982,131946],{"class":112},[36,141984,54994],{"class":42},[36,141986,58320],{"class":112},[36,141988,132516],{"class":42},[36,141990,141991],{"class":38,"line":655},[36,141992,135066],{"class":3943},[36,141994,141995,141997,141999,142001,142003,142005],{"class":38,"line":662},[36,141996,135071],{"class":101},[36,141998,83361],{"class":42},[36,142000,131946],{"class":112},[36,142002,54994],{"class":42},[36,142004,58387],{"class":112},[36,142006,132516],{"class":42},[36,142008,142009],{"class":38,"line":667},[36,142010,135086],{"class":3943},[36,142012,142013,142015,142017,142019,142021,142023],{"class":38,"line":679},[36,142014,135091],{"class":101},[36,142016,83361],{"class":42},[36,142018,131946],{"class":112},[36,142020,54994],{"class":42},[36,142022,89786],{"class":112},[36,142024,132516],{"class":42},[36,142026,142027],{"class":38,"line":685},[36,142028,135106],{"class":3943},[36,142030,142031,142033,142035,142037,142039,142041],{"class":38,"line":691},[36,142032,135111],{"class":101},[36,142034,83361],{"class":42},[36,142036,131946],{"class":112},[36,142038,54994],{"class":42},[36,142040,135120],{"class":112},[36,142042,132516],{"class":42},[318,142044,142046,142047,142049],{"id":142045},"_1544-nav导航模块制作","15.4.4 ",[33,142048,57270],{},"导航模块制作",[5198,142051],{"style":129442,"src":142052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,142054,142055,142057],{},[33,142056,57270],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,142059,142060,142061],{},"1 号盒子左侧浮动，",[33,142062,142063],{},"dropdown",[4875,142065,142066,142076,142084,142090,142098,142108,142116,142127],{},[214,142067,142068,142069,324,142072,142075],{},"1号盒子有讲究，根据相关性 里面包含 ",[33,142070,142071],{},".dt",[33,142073,142074],{},".dd"," 两个盒子",[214,142077,142078,142080,142081,142083],{},[33,142079,142071],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[33,142082,142074],{}," 挤到下面去了",[214,142085,142086,142087,142089],{},"给 ",[33,142088,142074],{}," 盒子设置宽度 和 高度，以及背景颜色",[214,142091,142086,142092,142094,142095,123271],{},[33,142093,142074],{}," 盒子里面定义 无序列表 （",[33,142096,142097],{},"ul > li > a",[214,142099,142100,142101,142103,142104,142107],{},"每个 ",[33,142102,214],{}," 都有一个高度（",[33,142105,142106],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[214,142109,142086,142110,142112,142113,123271],{},[33,142111,214],{}," 里面的a设置文字大小（",[33,142114,142115],{},"14px",[214,142117,142086,142118,142120,142121,142123,142124,142126],{},[33,142119,214],{}," 设置 ",[33,142122,130747],{},"，当鼠标移入的时候，让",[33,142125,214],{},"的背景变成白色，让里面的文字变成红色",[214,142128,142129,142131,142132,142134,142135,142137],{},[33,142130,214],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[33,142133,214],{},"的右侧，那么给",[33,142136,214],{},"设置相对定位",[19,142139,142140],{},"一定要注意相关性",[19,142142,141425],{},[26,142144,142145],{"className":129586,"code":141428,"language":129588,"meta":31,"style":31},[33,142146,142147,142155,142165,142175],{"__ignoreMap":31},[36,142148,142149,142151,142153],{"class":38,"line":39},[36,142150,55168],{"class":54857},[36,142152,140587],{"class":101},[36,142154,19228],{"class":42},[36,142156,142157,142159,142161,142163],{"class":38,"line":53},[36,142158,140594],{"class":112},[36,142160,54994],{"class":42},[36,142162,11343],{"class":105},[36,142164,5029],{"class":42},[36,142166,142167,142169,142171,142173],{"class":38,"line":196},[36,142168,131202],{"class":112},[36,142170,54994],{"class":42},[36,142172,64424],{"class":112},[36,142174,5029],{"class":42},[36,142176,142177],{"class":38,"line":642},[36,142178,5300],{"class":42},[19,142180,141465],{},[26,142182,142183],{"className":129586,"code":141428,"language":129588,"meta":31,"style":31},[33,142184,142185,142193,142203,142213],{"__ignoreMap":31},[36,142186,142187,142189,142191],{"class":38,"line":39},[36,142188,55168],{"class":54857},[36,142190,140587],{"class":101},[36,142192,19228],{"class":42},[36,142194,142195,142197,142199,142201],{"class":38,"line":53},[36,142196,140594],{"class":112},[36,142198,54994],{"class":42},[36,142200,11343],{"class":105},[36,142202,5029],{"class":42},[36,142204,142205,142207,142209,142211],{"class":38,"line":196},[36,142206,131202],{"class":112},[36,142208,54994],{"class":42},[36,142210,64424],{"class":112},[36,142212,5029],{"class":42},[36,142214,142215],{"class":38,"line":642},[36,142216,5300],{"class":42},[19,142218,142219],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,142221,142222,142223,142226],{},"2 号盒子左侧浮动，",[33,142224,142225],{},"navitems"," 导航栏组",[4875,142228,142229,142234,142243],{},[214,142230,142231,142232],{},"里面结构是 ",[33,142233,142097],{},[214,142235,142236,142237,142239,142240,142242],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[33,142238,4113],{},"左右的",[33,142241,34478],{},"把两侧撑开",[214,142244,142245],{},"让文字垂直居中（行高等于高度）",[5198,142247],{"style":129442,"src":142248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,142250,142251],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,142253,141425],{},[26,142255,142257],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},".box {\n  float: left;\n}\n",[33,142258,142259,142265,142275],{"__ignoreMap":31},[36,142260,142261,142263],{"class":38,"line":39},[36,142262,133434],{"class":101},[36,142264,19228],{"class":42},[36,142266,142267,142269,142271,142273],{"class":38,"line":53},[36,142268,134066],{"class":112},[36,142270,54994],{"class":42},[36,142272,259],{"class":112},[36,142274,5029],{"class":42},[36,142276,142277],{"class":38,"line":196},[36,142278,5300],{"class":42},[19,142280,141465],{},[26,142282,142283],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},[33,142284,142285,142291,142301],{"__ignoreMap":31},[36,142286,142287,142289],{"class":38,"line":39},[36,142288,133434],{"class":101},[36,142290,19228],{"class":42},[36,142292,142293,142295,142297,142299],{"class":38,"line":53},[36,142294,134066],{"class":112},[36,142296,54994],{"class":42},[36,142298,259],{"class":112},[36,142300,5029],{"class":42},[36,142302,142303],{"class":38,"line":196},[36,142304,5300],{"class":42},[19,142306,142307],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[5198,142309],{"style":129442,"src":142310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[26,142312,142313],{"className":129586,"code":133743,"language":129588,"meta":31,"style":31},[33,142314,142315,142321,142337],{"__ignoreMap":31},[36,142316,142317,142319],{"class":38,"line":39},[36,142318,55168],{"class":54857},[36,142320,19228],{"class":42},[36,142322,142323,142325,142327,142329,142331,142333,142335],{"class":38,"line":53},[36,142324,74450],{"class":112},[36,142326,54994],{"class":42},[36,142328,4092],{"class":112},[36,142330,55049],{"class":46},[36,142332,55078],{"class":112},[36,142334,132978],{"class":112},[36,142336,5029],{"class":42},[36,142338,142339],{"class":38,"line":196},[36,142340,5300],{"class":42},[318,142342,142344],{"id":142343},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[5198,142346],{"style":129442,"src":142347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[4875,142349,142350,142355,142360],{},[214,142351,142352,142354],{},[33,142353,134789],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[214,142356,142357,142359],{},[33,142358,134789],{}," 里面有一个大的版心",[214,142361,142362,142363,142366,142367],{},"版心里面包含 1 号盒子，",[33,142364,142365],{},"mod_service"," 是服务模块，mod 是模块的意思",[4875,142368,142369,142374,142387,142403,142408],{},[214,142370,142086,142371,142373],{},[33,142372,142365],{}," 设置高度（80px）和下边框",[214,142375,142376,142377,142380,142381,142383,142384,142386],{},"在里面定义 ",[33,142378,142379],{},"ul > li"," ,每个",[33,142382,214],{}," 宽度是300px 高度是 50px，给每个",[33,142385,214],{},"设置35px的左内边距",[214,142388,142389,142390,142392,142393,142395,142396,142398,142399,22032,142401,123271],{},"在每个",[33,142391,214],{},"里面，放一个 ",[33,142394,26531],{},"（里面放图标），一个",[33,142397,55168],{},"（里面放",[33,142400,55168],{},[33,142402,19],{},[214,142404,142086,142405,142407],{},[33,142406,26531],{},"设置浮动，让h5与这个div左右排列",[214,142409,142410],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,142412,141425],{},[26,142414,142416],{"className":129586,"code":142415,"language":129588,"meta":31,"style":31},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[33,142417,142418,142424,142436,142448,142475],{"__ignoreMap":31},[36,142419,142420,142422],{"class":38,"line":39},[36,142421,137343],{"class":101},[36,142423,19228],{"class":42},[36,142425,142426,142428,142430,142432,142434],{"class":38,"line":53},[36,142427,74122],{"class":112},[36,142429,54994],{"class":42},[36,142431,1921],{"class":112},[36,142433,55049],{"class":46},[36,142435,5029],{"class":42},[36,142437,142438,142440,142442,142444,142446],{"class":38,"line":196},[36,142439,74342],{"class":112},[36,142441,54994],{"class":42},[36,142443,1921],{"class":112},[36,142445,55049],{"class":46},[36,142447,5029],{"class":42},[36,142449,142450,142452,142454,142456,142458,142460,142462,142464,142467,142469,142471,142473],{"class":38,"line":642},[36,142451,74165],{"class":112},[36,142453,54994],{"class":42},[36,142455,65281],{"class":112},[36,142457,495],{"class":42},[36,142459,137382],{"class":468},[36,142461,17373],{"class":42},[36,142463,65291],{"class":112},[36,142465,142466],{"class":112}," -10",[36,142468,55049],{"class":46},[36,142470,137401],{"class":112},[36,142472,55049],{"class":46},[36,142474,5029],{"class":42},[36,142476,142477],{"class":38,"line":655},[36,142478,5300],{"class":42},[19,142480,141465],{},[26,142482,142483],{"className":129586,"code":142415,"language":129588,"meta":31,"style":31},[33,142484,142485,142491,142503,142515,142541],{"__ignoreMap":31},[36,142486,142487,142489],{"class":38,"line":39},[36,142488,137343],{"class":101},[36,142490,19228],{"class":42},[36,142492,142493,142495,142497,142499,142501],{"class":38,"line":53},[36,142494,74122],{"class":112},[36,142496,54994],{"class":42},[36,142498,1921],{"class":112},[36,142500,55049],{"class":46},[36,142502,5029],{"class":42},[36,142504,142505,142507,142509,142511,142513],{"class":38,"line":196},[36,142506,74342],{"class":112},[36,142508,54994],{"class":42},[36,142510,1921],{"class":112},[36,142512,55049],{"class":46},[36,142514,5029],{"class":42},[36,142516,142517,142519,142521,142523,142525,142527,142529,142531,142533,142535,142537,142539],{"class":38,"line":642},[36,142518,74165],{"class":112},[36,142520,54994],{"class":42},[36,142522,65281],{"class":112},[36,142524,495],{"class":42},[36,142526,137382],{"class":468},[36,142528,17373],{"class":42},[36,142530,65291],{"class":112},[36,142532,142466],{"class":112},[36,142534,55049],{"class":46},[36,142536,137401],{"class":112},[36,142538,55049],{"class":46},[36,142540,5029],{"class":42},[36,142542,142543],{"class":38,"line":655},[36,142544,5300],{"class":42},[19,142546,142547],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[4875,142549,142550,142553,142559,142565,142577],{},[214,142551,142552],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[214,142554,142555,142556,123271],{},"里面的布局利用 自定义列表来实现（",[33,142557,142558],{},"dl > dt + dd",[214,142560,142086,142561,142564],{},[33,142562,142563],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[214,142566,142086,142567,142570,142571,22032,142573,142576],{},[33,142568,142569],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[33,142572,142569],{},[33,142574,142575],{},"dd","之间有些距离",[214,142578,142579],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,142581,141425],{},[26,142583,142584],{"className":129586,"code":141775,"language":129588,"meta":31,"style":31},[33,142585,142586,142592,142604],{"__ignoreMap":31},[36,142587,142588,142590],{"class":38,"line":39},[36,142589,55168],{"class":54857},[36,142591,19228],{"class":42},[36,142593,142594,142596,142598,142600,142602],{"class":38,"line":53},[36,142595,74024],{"class":112},[36,142597,54994],{"class":42},[36,142599,1859],{"class":112},[36,142601,55113],{"class":112},[36,142603,5029],{"class":42},[36,142605,142606],{"class":38,"line":196},[36,142607,5300],{"class":42},[19,142609,141465],{},[26,142611,142612],{"className":129586,"code":141775,"language":129588,"meta":31,"style":31},[33,142613,142614,142620,142632],{"__ignoreMap":31},[36,142615,142616,142618],{"class":38,"line":39},[36,142617,55168],{"class":54857},[36,142619,19228],{"class":42},[36,142621,142622,142624,142626,142628,142630],{"class":38,"line":53},[36,142623,74024],{"class":112},[36,142625,54994],{"class":42},[36,142627,1859],{"class":112},[36,142629,55113],{"class":112},[36,142631,5029],{"class":42},[36,142633,142634],{"class":38,"line":196},[36,142635,5300],{"class":42},[19,142637,142638],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[4875,142640,142641,142650,142653,142664],{},[214,142642,142643,142644,142646,142647,142649],{},"分为上下两块，上面是 ",[33,142645,134806],{}," 友情链接，下面是 ",[33,142648,134799],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[214,142651,142652],{},"把内容分别复制到相应模块中",[214,142654,142086,142655,142657,142658,142660,142661,142663],{},[33,142656,134806],{}," 设置 15px 的下外边距，给",[33,142659,134806],{}," 里面 的 ",[33,142662,4113],{}," 标签设置 左右 3px 的外边距",[214,142665,142666,142667,142669],{},"给",[33,142668,134799],{}," 设置 20px 的行高",[19,142671,141425],{},[26,142673,142674],{"className":129586,"code":141775,"language":129588,"meta":31,"style":31},[33,142675,142676,142682,142694],{"__ignoreMap":31},[36,142677,142678,142680],{"class":38,"line":39},[36,142679,55168],{"class":54857},[36,142681,19228],{"class":42},[36,142683,142684,142686,142688,142690,142692],{"class":38,"line":53},[36,142685,74024],{"class":112},[36,142687,54994],{"class":42},[36,142689,1859],{"class":112},[36,142691,55113],{"class":112},[36,142693,5029],{"class":42},[36,142695,142696],{"class":38,"line":196},[36,142697,5300],{"class":42},[19,142699,141465],{},[26,142701,142702],{"className":129586,"code":141775,"language":129588,"meta":31,"style":31},[33,142703,142704,142710,142722],{"__ignoreMap":31},[36,142705,142706,142708],{"class":38,"line":39},[36,142707,55168],{"class":54857},[36,142709,19228],{"class":42},[36,142711,142712,142714,142716,142718,142720],{"class":38,"line":53},[36,142713,74024],{"class":112},[36,142715,54994],{"class":42},[36,142717,1859],{"class":112},[36,142719,55113],{"class":112},[36,142721,5029],{"class":42},[36,142723,142724],{"class":38,"line":196},[36,142725,5300],{"class":42},[19,142727,142728],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[3785,142730,142731],{},"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":31,"searchDepth":53,"depth":53,"links":142733},[142734,142735,142736,142743],{"id":141014,"depth":53,"text":141015},{"id":141033,"depth":53,"text":141034},{"id":141060,"depth":53,"text":141061,"children":142737},[142738,142739,142740,142741,142742],{"id":141064,"depth":196,"text":141065},{"id":141077,"depth":196,"text":141078},{"id":141101,"depth":196,"text":141102},{"id":141123,"depth":196,"text":141124},{"id":141195,"depth":196,"text":141196},{"id":141321,"depth":53,"text":141322,"children":142744},[142745,142746,142747,142748,142750],{"id":141325,"depth":196,"text":141326},{"id":141332,"depth":196,"text":141333},{"id":141504,"depth":196,"text":141505},{"id":142045,"depth":196,"text":142749},"15.4.4 nav导航模块制作",{"id":142343,"depth":196,"text":142344},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":141006,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":142757,"title":142758,"body":142759,"description":26998,"extension":3817,"meta":145161,"navigation":658,"path":145162,"seo":145163,"stem":145164,"__hash__":145165},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":142760,"toc":145138},[142761,142764,142768,142772,142784,142787,142790,142793,142804,142806,142830,142832,142856,142861,142864,142866,142902,142904,142940,142943,142948,142951,142954,142957,142987,142994,142997,143007,143009,143043,143046,143080,143086,143103,143105,143141,143143,143179,143184,143209,143211,143237,143239,143263,143270,143273,143337,143339,143381,143383,143423,143430,143435,143437,143467,143469,143499,143503,143506,143513,143525,143527,143553,143555,143579,143582,143584,143608,143614,143624,143626,143656,143658,143688,143695,143736,143738,143774,143776,143812,143816,143819,143822,143825,143831,143836,143839,143862,143865,143889,143892,143916,143921,143924,143927,143930,143933,143936,144010,144012,144042,144044,144074,144077,144080,144112,144116,144120,144134,144143,144146,144151,144153,144247,144249,144343,144366,144368,144392,144394,144418,144425,144428,144438,144440,144464,144469,144477,144479,144509,144514,144554,144556,144582,144584,144610,144614,144617,144622,144625,144629,144637,144644,144652,144654,144684,144686,144716,144724,144727,144730,144732,144762,144764,144794,144797,144802,144804,144828,144830,144854,144857,144942,144944,144968,144970,144994,144998,145000,145024,145026,145060,145064,145078,145081,145086,145089,145094,145097,145127,145135],[10,142762,142758],{"id":142763},"_16-品优购项目下篇-主体与页面开发",[14,142765,142767],{"id":142766},"_161-项目主体模块制作","16.1 项目主体模块制作",[318,142769,142771],{"id":142770},"_1611-首页制作","16.1.1 首页制作",[19,142773,142774,142776,142777,142779,142780,142783],{},[4027,142775,105569],{}," 主体模块是 ",[4027,142778,77612],{}," 里面专有的，注意需要新的样式文件 ",[4027,142781,142782],{},"index.css，"," 就不要写在common.css中了",[5198,142785],{"style":129442,"src":142786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[5198,142788],{"style":129442,"src":142789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,142791,142792],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[4875,142794,142795,142798,142801],{},[214,142796,142797],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[214,142799,142800],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[214,142802,142803],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,142805,141425],{},[26,142807,142808],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},[33,142809,142810,142816,142826],{"__ignoreMap":31},[36,142811,142812,142814],{"class":38,"line":39},[36,142813,133434],{"class":101},[36,142815,19228],{"class":42},[36,142817,142818,142820,142822,142824],{"class":38,"line":53},[36,142819,134066],{"class":112},[36,142821,54994],{"class":42},[36,142823,259],{"class":112},[36,142825,5029],{"class":42},[36,142827,142828],{"class":38,"line":196},[36,142829,5300],{"class":42},[19,142831,141465],{},[26,142833,142834],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},[33,142835,142836,142842,142852],{"__ignoreMap":31},[36,142837,142838,142840],{"class":38,"line":39},[36,142839,133434],{"class":101},[36,142841,19228],{"class":42},[36,142843,142844,142846,142848,142850],{"class":38,"line":53},[36,142845,134066],{"class":112},[36,142847,54994],{"class":42},[36,142849,259],{"class":112},[36,142851,5029],{"class":42},[36,142853,142854],{"class":38,"line":196},[36,142855,5300],{"class":42},[211,142857,142858],{},[214,142859,142860],{},"左侧focus模块制作",[5198,142862],{"style":129442,"src":142863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,142865,141425],{},[26,142867,142868],{"className":129586,"code":130909,"language":129588,"meta":31,"style":31},[33,142869,142870,142878,142888,142898],{"__ignoreMap":31},[36,142871,142872,142874,142876],{"class":38,"line":39},[36,142873,57378],{"class":54857},[36,142875,65455],{"class":101},[36,142877,19228],{"class":42},[36,142879,142880,142882,142884,142886],{"class":38,"line":53},[36,142881,130924],{"class":112},[36,142883,54994],{"class":42},[36,142885,58445],{"class":112},[36,142887,5029],{"class":42},[36,142889,142890,142892,142894,142896],{"class":38,"line":196},[36,142891,74352],{"class":112},[36,142893,54994],{"class":42},[36,142895,58293],{"class":112},[36,142897,5029],{"class":42},[36,142899,142900],{"class":38,"line":642},[36,142901,5300],{"class":42},[19,142903,141465],{},[26,142905,142906],{"className":129586,"code":130909,"language":129588,"meta":31,"style":31},[33,142907,142908,142916,142926,142936],{"__ignoreMap":31},[36,142909,142910,142912,142914],{"class":38,"line":39},[36,142911,57378],{"class":54857},[36,142913,65455],{"class":101},[36,142915,19228],{"class":42},[36,142917,142918,142920,142922,142924],{"class":38,"line":53},[36,142919,130924],{"class":112},[36,142921,54994],{"class":42},[36,142923,58445],{"class":112},[36,142925,5029],{"class":42},[36,142927,142928,142930,142932,142934],{"class":38,"line":196},[36,142929,74352],{"class":112},[36,142931,54994],{"class":42},[36,142933,58293],{"class":112},[36,142935,5029],{"class":42},[36,142937,142938],{"class":38,"line":642},[36,142939,5300],{"class":42},[19,142941,142942],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[211,142944,142945],{"start":53},[214,142946,142947],{},"右侧newsflash模块制作",[5198,142949],{"style":129442,"src":142950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,142952,142953],{},"右侧的模块 分为上中下三个盒子",[19,142955,142956],{},"结构代码：",[26,142958,142959],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,142960,142961],{"__ignoreMap":31},[36,142962,142963,142965,142967,142969,142971,142973,142975,142977,142979,142981,142983,142985],{"class":38,"line":39},[36,142964,393],{"class":42},[36,142966,5198],{"class":54857},[36,142968,58795],{"class":101},[36,142970,47],{"class":42},[36,142972,137103],{"class":105},[36,142974,58803],{"class":101},[36,142976,47],{"class":42},[36,142978,137110],{"class":105},[36,142980,137113],{"class":101},[36,142982,47],{"class":42},[36,142984,137118],{"class":105},[36,142986,54864],{"class":42},[19,142988,142989,142990,142993],{},"1 号盒子为 ",[33,142991,142992],{},"news"," 新闻模块 高度为 165px",[5198,142995],{"style":129442,"src":142996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,142998,142999,143000,143003,143004],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[33,143001,143002],{},"news-hd","，下面是 ",[33,143005,143006],{},"news-bd",[19,143008,142956],{},[26,143010,143011],{"className":130333,"code":133690,"language":130335,"meta":31,"style":31},[33,143012,143013,143017,143031,143035],{"__ignoreMap":31},[36,143014,143015],{"class":38,"line":39},[36,143016,133697],{"class":3943},[36,143018,143019,143021,143023,143025,143027,143029],{"class":38,"line":53},[36,143020,393],{"class":42},[36,143022,55168],{"class":54857},[36,143024,57043],{"class":101},[36,143026,47],{"class":42},[36,143028,133710],{"class":105},[36,143030,54864],{"class":42},[36,143032,143033],{"class":38,"line":196},[36,143034,133717],{"class":42},[36,143036,143037,143039,143041],{"class":38,"line":642},[36,143038,55342],{"class":42},[36,143040,55168],{"class":54857},[36,143042,54864],{"class":42},[19,143044,143045],{},"样式代码：",[26,143047,143048],{"className":130333,"code":133690,"language":130335,"meta":31,"style":31},[33,143049,143050,143054,143068,143072],{"__ignoreMap":31},[36,143051,143052],{"class":38,"line":39},[36,143053,133697],{"class":3943},[36,143055,143056,143058,143060,143062,143064,143066],{"class":38,"line":53},[36,143057,393],{"class":42},[36,143059,55168],{"class":54857},[36,143061,57043],{"class":101},[36,143063,47],{"class":42},[36,143065,133710],{"class":105},[36,143067,54864],{"class":42},[36,143069,143070],{"class":38,"line":196},[36,143071,133717],{"class":42},[36,143073,143074,143076,143078],{"class":38,"line":642},[36,143075,55342],{"class":42},[36,143077,55168],{"class":54857},[36,143079,54864],{"class":42},[19,143081,143082,143083,143085],{},"上面是",[33,143084,143002],{},"，设置高度是 33px，设置下边框",[4875,143087,143088,143094],{},[214,143089,143090,143091,143093],{},"里面放一个",[33,143092,26531],{}," 标题",[214,143095,143096,143097,143099,143100,143102],{},"放一个a",[33,143098,106189],{},"，内容是 更多，然后让 ",[33,143101,4113],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,143104,142956],{},[26,143106,143107],{"className":129586,"code":141428,"language":129588,"meta":31,"style":31},[33,143108,143109,143117,143127,143137],{"__ignoreMap":31},[36,143110,143111,143113,143115],{"class":38,"line":39},[36,143112,55168],{"class":54857},[36,143114,140587],{"class":101},[36,143116,19228],{"class":42},[36,143118,143119,143121,143123,143125],{"class":38,"line":53},[36,143120,140594],{"class":112},[36,143122,54994],{"class":42},[36,143124,11343],{"class":105},[36,143126,5029],{"class":42},[36,143128,143129,143131,143133,143135],{"class":38,"line":196},[36,143130,131202],{"class":112},[36,143132,54994],{"class":42},[36,143134,64424],{"class":112},[36,143136,5029],{"class":42},[36,143138,143139],{"class":38,"line":642},[36,143140,5300],{"class":42},[19,143142,143045],{},[26,143144,143145],{"className":129586,"code":141428,"language":129588,"meta":31,"style":31},[33,143146,143147,143155,143165,143175],{"__ignoreMap":31},[36,143148,143149,143151,143153],{"class":38,"line":39},[36,143150,55168],{"class":54857},[36,143152,140587],{"class":101},[36,143154,19228],{"class":42},[36,143156,143157,143159,143161,143163],{"class":38,"line":53},[36,143158,140594],{"class":112},[36,143160,54994],{"class":42},[36,143162,11343],{"class":105},[36,143164,5029],{"class":42},[36,143166,143167,143169,143171,143173],{"class":38,"line":196},[36,143168,131202],{"class":112},[36,143170,54994],{"class":42},[36,143172,64424],{"class":112},[36,143174,5029],{"class":42},[36,143176,143177],{"class":38,"line":642},[36,143178,5300],{"class":42},[19,143180,143181,143182],{},"下面是",[33,143183,143006],{},[4875,143185,143186,143194],{},[214,143187,143188,143189,324,143191,143193],{},"里面包含 ",[33,143190,4875],{},[33,143192,214],{}," 还有链接",[214,143195,142666,143196,143198,143199,143201,143202,143205,143206],{},[33,143197,214],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[33,143200,134252],{}," 2.设置 ",[33,143203,143204],{},"white-space: nowrap;"," 3. 设置 ",[33,143207,143208],{},"text-overflow: ellipsis;",[19,143210,142956],{},[26,143212,143214],{"className":129586,"code":143213,"language":129588,"meta":31,"style":31},"div {\n  overflow: hidden;\n}\n",[33,143215,143216,143222,143233],{"__ignoreMap":31},[36,143217,143218,143220],{"class":38,"line":39},[36,143219,55168],{"class":54857},[36,143221,19228],{"class":42},[36,143223,143224,143227,143229,143231],{"class":38,"line":53},[36,143225,143226],{"class":112},"  overflow",[36,143228,54994],{"class":42},[36,143230,65269],{"class":112},[36,143232,5029],{"class":42},[36,143234,143235],{"class":38,"line":196},[36,143236,5300],{"class":42},[19,143238,143045],{},[26,143240,143241],{"className":129586,"code":143213,"language":129588,"meta":31,"style":31},[33,143242,143243,143249,143259],{"__ignoreMap":31},[36,143244,143245,143247],{"class":38,"line":39},[36,143246,55168],{"class":54857},[36,143248,19228],{"class":42},[36,143250,143251,143253,143255,143257],{"class":38,"line":53},[36,143252,143226],{"class":112},[36,143254,54994],{"class":42},[36,143256,65269],{"class":112},[36,143258,5029],{"class":42},[36,143260,143261],{"class":38,"line":196},[36,143262,5300],{"class":42},[19,143264,143265,143266,143269],{},"2 号盒子为 ",[33,143267,143268],{},"lifeservice"," 生活服务模块 高度为 209px",[5198,143271],{"style":129442,"src":143272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[4875,143274,143275,143278,143288,143312,143323],{},[214,143276,143277],{},"设置边框（左右下边框）",[214,143279,143280,143281,143284,143285,143287],{},"里面的内容 是 ",[33,143282,143283],{},"ul > 12*li","，给",[33,143286,214],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[214,143289,143290,143291],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[4875,143292,143293,143298,143307],{},[214,143294,143295,143297],{},[33,143296,143268],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[214,143299,143300,143301,143303,143304,143306],{},"可以让 ",[33,143302,143268],{}," 里面的 ",[33,143305,4875],{}," 宽度为 252，就可以装的下 4 个 小 li",[214,143308,143309,143311],{},[33,143310,143268],{}," 盒子 overflow 隐藏多余的部分就可以了",[214,143313,3433,143314,143316,143317,143319,143320,143322],{},[33,143315,214],{}," 里面放一个 ",[33,143318,4316],{},"（里面放图标），下面的文本用 ",[33,143321,19],{}," 标签包裹",[214,143324,142086,143325,143327,143328,143330,143331,142120,143333,143336],{},[33,143326,4316],{}," 设置 24px宽和28px的高（注意 ",[33,143329,4316],{}," 是行内元素， 转成行内块），给 ",[33,143332,214],{},[33,143334,143335],{},"text-align:center"," 让里面内容居中显示",[19,143338,142956],{},[26,143340,143342],{"className":129586,"code":143341,"language":129588,"meta":31,"style":31},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[33,143343,143344,143362,143367,143377],{"__ignoreMap":31},[36,143345,143346,143348,143350,143352,143354,143356,143358,143360],{"class":38,"line":39},[36,143347,36],{"class":54857},[36,143349,478],{"class":42},[36,143351,4113],{"class":54857},[36,143353,478],{"class":42},[36,143355,27175],{"class":54857},[36,143357,478],{"class":42},[36,143359,4027],{"class":54857},[36,143361,19228],{"class":42},[36,143363,143364],{"class":38,"line":53},[36,143365,143366],{"class":3943},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[36,143368,143369,143371,143373,143375],{"class":38,"line":196},[36,143370,131202],{"class":112},[36,143372,54994],{"class":42},[36,143374,131264],{"class":112},[36,143376,5029],{"class":42},[36,143378,143379],{"class":38,"line":642},[36,143380,5300],{"class":42},[19,143382,143045],{},[26,143384,143385],{"className":129586,"code":143341,"language":129588,"meta":31,"style":31},[33,143386,143387,143405,143409,143419],{"__ignoreMap":31},[36,143388,143389,143391,143393,143395,143397,143399,143401,143403],{"class":38,"line":39},[36,143390,36],{"class":54857},[36,143392,478],{"class":42},[36,143394,4113],{"class":54857},[36,143396,478],{"class":42},[36,143398,27175],{"class":54857},[36,143400,478],{"class":42},[36,143402,4027],{"class":54857},[36,143404,19228],{"class":42},[36,143406,143407],{"class":38,"line":53},[36,143408,143366],{"class":3943},[36,143410,143411,143413,143415,143417],{"class":38,"line":196},[36,143412,131202],{"class":112},[36,143414,54994],{"class":42},[36,143416,131264],{"class":112},[36,143418,5029],{"class":42},[36,143420,143421],{"class":38,"line":642},[36,143422,5300],{"class":42},[19,143424,143425,143426,143429],{},"3 号盒子为 ",[33,143427,143428],{},"bargain"," 特价商品",[4875,143431,143432],{},[214,143433,143434],{},"这个比较简单，直接插入一张图片即可",[19,143436,142956],{},[26,143438,143439],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,143440,143441],{"__ignoreMap":31},[36,143442,143443,143445,143447,143449,143451,143453,143455,143457,143459,143461,143463,143465],{"class":38,"line":39},[36,143444,393],{"class":42},[36,143446,5198],{"class":54857},[36,143448,58795],{"class":101},[36,143450,47],{"class":42},[36,143452,137103],{"class":105},[36,143454,58803],{"class":101},[36,143456,47],{"class":42},[36,143458,137110],{"class":105},[36,143460,137113],{"class":101},[36,143462,47],{"class":42},[36,143464,137118],{"class":105},[36,143466,54864],{"class":42},[19,143468,143045],{},[26,143470,143471],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,143472,143473],{"__ignoreMap":31},[36,143474,143475,143477,143479,143481,143483,143485,143487,143489,143491,143493,143495,143497],{"class":38,"line":39},[36,143476,393],{"class":42},[36,143478,5198],{"class":54857},[36,143480,58795],{"class":101},[36,143482,47],{"class":42},[36,143484,137103],{"class":105},[36,143486,58803],{"class":101},[36,143488,47],{"class":42},[36,143490,137110],{"class":105},[36,143492,137113],{"class":101},[36,143494,47],{"class":42},[36,143496,137118],{"class":105},[36,143498,54864],{"class":42},[318,143500,143502],{"id":143501},"_1612-推荐模块制作","16.1.2 推荐模块制作",[5198,143504],{"style":129442,"src":143505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,143507,143508,143509,143512],{},"大盒子 ",[33,143510,143511],{},"recom"," 推荐模块 recommend",[4875,143514,143515],{},[214,143516,143517,143518,143520,143521,143524],{},"给这个 ",[33,143519,143511],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[33,143522,143523],{},"#ebebeb","），设置距离上边 12px",[19,143526,142956],{},[26,143528,143530],{"className":129586,"code":143529,"language":129588,"meta":31,"style":31},"div {\n  background-color: #f0f0f0;\n}\n",[33,143531,143532,143538,143549],{"__ignoreMap":31},[36,143533,143534,143536],{"class":38,"line":39},[36,143535,55168],{"class":54857},[36,143537,19228],{"class":42},[36,143539,143540,143542,143544,143547],{"class":38,"line":53},[36,143541,74432],{"class":112},[36,143543,54994],{"class":42},[36,143545,143546],{"class":112},"#f0f0f0",[36,143548,5029],{"class":42},[36,143550,143551],{"class":38,"line":196},[36,143552,5300],{"class":42},[19,143554,143045],{},[26,143556,143557],{"className":129586,"code":143529,"language":129588,"meta":31,"style":31},[33,143558,143559,143565,143575],{"__ignoreMap":31},[36,143560,143561,143563],{"class":38,"line":39},[36,143562,55168],{"class":54857},[36,143564,19228],{"class":42},[36,143566,143567,143569,143571,143573],{"class":38,"line":53},[36,143568,74432],{"class":112},[36,143570,54994],{"class":42},[36,143572,143546],{"class":112},[36,143574,5029],{"class":42},[36,143576,143577],{"class":38,"line":196},[36,143578,5300],{"class":42},[19,143580,143581],{},"里面包含 2 个盒子， 浮动即可",[19,143583,142956],{},[26,143585,143586],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},[33,143587,143588,143594,143604],{"__ignoreMap":31},[36,143589,143590,143592],{"class":38,"line":39},[36,143591,133434],{"class":101},[36,143593,19228],{"class":42},[36,143595,143596,143598,143600,143602],{"class":38,"line":53},[36,143597,134066],{"class":112},[36,143599,54994],{"class":42},[36,143601,259],{"class":112},[36,143603,5029],{"class":42},[36,143605,143606],{"class":38,"line":196},[36,143607,5300],{"class":42},[19,143609,143610,143611],{},"1 号盒子 ",[33,143612,143613],{},"recom_hd",[4875,143615,143616,143619],{},[214,143617,143618],{},"设置宽度205px，高度163px",[214,143620,143090,143621,143623],{},[33,143622,5198],{},"标签，插入图片即可",[19,143625,142956],{},[26,143627,143628],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,143629,143630],{"__ignoreMap":31},[36,143631,143632,143634,143636,143638,143640,143642,143644,143646,143648,143650,143652,143654],{"class":38,"line":39},[36,143633,393],{"class":42},[36,143635,5198],{"class":54857},[36,143637,58795],{"class":101},[36,143639,47],{"class":42},[36,143641,137103],{"class":105},[36,143643,58803],{"class":101},[36,143645,47],{"class":42},[36,143647,137110],{"class":105},[36,143649,137113],{"class":101},[36,143651,47],{"class":42},[36,143653,137118],{"class":105},[36,143655,54864],{"class":42},[19,143657,143045],{},[26,143659,143660],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,143661,143662],{"__ignoreMap":31},[36,143663,143664,143666,143668,143670,143672,143674,143676,143678,143680,143682,143684,143686],{"class":38,"line":39},[36,143665,393],{"class":42},[36,143667,5198],{"class":54857},[36,143669,58795],{"class":101},[36,143671,47],{"class":42},[36,143673,137103],{"class":105},[36,143675,58803],{"class":101},[36,143677,47],{"class":42},[36,143679,137110],{"class":105},[36,143681,137113],{"class":101},[36,143683,47],{"class":42},[36,143685,137118],{"class":105},[36,143687,54864],{"class":42},[19,143689,143690,143691,143694],{},"2 号盒子 ",[33,143692,143693],{},"recom_bd"," ，注意里面的小竖线",[4875,143696,143697,143708,143711,143716,143721],{},[214,143698,143699,143700,143702,143703,143705,143706],{},"右侧结构里面放 ",[33,143701,4875],{}," 包含 4个 ",[33,143704,214],{},"，每个li里面包含一个",[33,143707,5198],{},[214,143709,143710],{},"直接利用切片工具把里面的内容当成一张图片",[214,143712,142086,143713,143715],{},[33,143714,214],{}," 设置浮动",[214,143717,142086,143718,143720],{},[33,143719,5198],{}," 设置宽高，宽度 248px，高度 163px",[214,143722,143723,143724,143284,143727,143729,143730,143732,143733],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[33,143725,143726],{},"top 10px",[33,143728,214],{},"设置相对定位（注意，最后一个",[33,143731,214],{},"不用设置伪元素），可以利用 ",[33,143734,143735],{},"nth-child(-n+3){...}",[19,143737,142956],{},[26,143739,143740],{"className":129586,"code":141428,"language":129588,"meta":31,"style":31},[33,143741,143742,143750,143760,143770],{"__ignoreMap":31},[36,143743,143744,143746,143748],{"class":38,"line":39},[36,143745,55168],{"class":54857},[36,143747,140587],{"class":101},[36,143749,19228],{"class":42},[36,143751,143752,143754,143756,143758],{"class":38,"line":53},[36,143753,140594],{"class":112},[36,143755,54994],{"class":42},[36,143757,11343],{"class":105},[36,143759,5029],{"class":42},[36,143761,143762,143764,143766,143768],{"class":38,"line":196},[36,143763,131202],{"class":112},[36,143765,54994],{"class":42},[36,143767,64424],{"class":112},[36,143769,5029],{"class":42},[36,143771,143772],{"class":38,"line":642},[36,143773,5300],{"class":42},[19,143775,143045],{},[26,143777,143778],{"className":129586,"code":141428,"language":129588,"meta":31,"style":31},[33,143779,143780,143788,143798,143808],{"__ignoreMap":31},[36,143781,143782,143784,143786],{"class":38,"line":39},[36,143783,55168],{"class":54857},[36,143785,140587],{"class":101},[36,143787,19228],{"class":42},[36,143789,143790,143792,143794,143796],{"class":38,"line":53},[36,143791,140594],{"class":112},[36,143793,54994],{"class":42},[36,143795,11343],{"class":105},[36,143797,5029],{"class":42},[36,143799,143800,143802,143804,143806],{"class":38,"line":196},[36,143801,131202],{"class":112},[36,143803,54994],{"class":42},[36,143805,64424],{"class":112},[36,143807,5029],{"class":42},[36,143809,143810],{"class":38,"line":642},[36,143811,5300],{"class":42},[318,143813,143815],{"id":143814},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[5198,143817],{"style":129442,"src":143818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,143820,143821],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,143823,143824],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,143826,143827,143830],{},[33,143828,143829],{},"box_hd"," 制作",[19,143832,143610,143833,143835],{},[33,143834,143829],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[5198,143837],{"style":129442,"src":143838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[4875,143840,143841,143846,143851,143854],{},[214,143842,143843,143845],{},[33,143844,143829],{}," 给 30px 的高度，2个像素的下边框",[214,143847,143848,143849],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[33,143850,142097],{},[214,143852,143853],{},"左侧盒左浮动，右侧盒子右浮动",[214,143855,143856,143858,143859,143861],{},[33,143857,4113],{},"标签之间的距离用左右的",[33,143860,34478],{},"撑开即可",[19,143863,143864],{},"结构代码",[26,143866,143867],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},[33,143868,143869,143875,143885],{"__ignoreMap":31},[36,143870,143871,143873],{"class":38,"line":39},[36,143872,133434],{"class":101},[36,143874,19228],{"class":42},[36,143876,143877,143879,143881,143883],{"class":38,"line":53},[36,143878,134066],{"class":112},[36,143880,54994],{"class":42},[36,143882,259],{"class":112},[36,143884,5029],{"class":42},[36,143886,143887],{"class":38,"line":196},[36,143888,5300],{"class":42},[19,143890,143891],{},"样式代码",[26,143893,143894],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},[33,143895,143896,143902,143912],{"__ignoreMap":31},[36,143897,143898,143900],{"class":38,"line":39},[36,143899,133434],{"class":101},[36,143901,19228],{"class":42},[36,143903,143904,143906,143908,143910],{"class":38,"line":53},[36,143905,134066],{"class":112},[36,143907,54994],{"class":42},[36,143909,259],{"class":112},[36,143911,5029],{"class":42},[36,143913,143914],{"class":38,"line":196},[36,143915,5300],{"class":42},[19,143917,143918,143830],{},[33,143919,143920],{},"box_bd",[19,143922,143923],{},"2 号盒子 box_bd，不要给高度",[5198,143925],{"style":129442,"src":143926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,143928,143929],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,143931,143932],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,143934,143935],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[4875,143937,143938,143950,143966],{},[214,143939,143940,143942,143943,143946,143947,143949],{},[33,143941,143920],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[33,143944,143945],{},"tab_content","，在",[33,143948,143945],{}," 里面包裹tab选项卡对应的内容",[214,143951,143952,143953,143956,143957,143959,143960,143962,143963,143965],{},"内容被一个大盒子包裹（",[33,143954,143955],{},"tab_list_item","），里面是 ",[33,143958,4875],{}," 包裹 5个 ",[33,143961,214],{},"，每个",[33,143964,214],{},"设置对应的宽度，然后设置浮动",[214,143967,143968,143969,143971,143972,143974,143975],{},"而这5个",[33,143970,214],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[33,143973,214],{},"设置",[4875,143976,143977,143995,143998],{},[214,143978,143979,143980,143982,143983,143985,143986,143988,143989,143991,143992,143994],{},"第一个小 ",[33,143981,214],{}," 分为上下结构，上面是 ",[33,143984,4875],{}," 包裹 ",[33,143987,214],{}," ，",[33,143990,214],{},"里面包裹 ",[33,143993,4113],{},"，下面插入一张图片",[214,143996,143997],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[214,143999,144000,144001,144003,144004,144006,144007,144009],{},"后面的小 ",[33,144002,214],{}," 里面先放一个",[33,144005,4113],{},"标签，然后在",[33,144008,4113],{},"标签里面插入图片即可",[19,144011,143864],{},[26,144013,144014],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,144015,144016],{"__ignoreMap":31},[36,144017,144018,144020,144022,144024,144026,144028,144030,144032,144034,144036,144038,144040],{"class":38,"line":39},[36,144019,393],{"class":42},[36,144021,5198],{"class":54857},[36,144023,58795],{"class":101},[36,144025,47],{"class":42},[36,144027,137103],{"class":105},[36,144029,58803],{"class":101},[36,144031,47],{"class":42},[36,144033,137110],{"class":105},[36,144035,137113],{"class":101},[36,144037,47],{"class":42},[36,144039,137118],{"class":105},[36,144041,54864],{"class":42},[19,144043,143891],{},[26,144045,144046],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,144047,144048],{"__ignoreMap":31},[36,144049,144050,144052,144054,144056,144058,144060,144062,144064,144066,144068,144070,144072],{"class":38,"line":39},[36,144051,393],{"class":42},[36,144053,5198],{"class":54857},[36,144055,58795],{"class":101},[36,144057,47],{"class":42},[36,144059,137103],{"class":105},[36,144061,58803],{"class":101},[36,144063,47],{"class":42},[36,144065,137110],{"class":105},[36,144067,137113],{"class":101},[36,144069,47],{"class":42},[36,144071,137118],{"class":105},[36,144073,54864],{"class":42},[19,144075,144076],{},"tab栏切换需求！！！！！！介绍：",[5198,144078],{"style":129442,"src":144079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[4875,144081,144082,144090,144096,144099],{},[214,144083,144084,144087,144088],{},[33,144085,144086],{},"tab","栏的布局是 ",[33,144089,142097],{},[214,144091,144092,144093,144095],{},"有多少个",[33,144094,144086],{},"选项卡，那么对应就有多少个内容",[214,144097,144098],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[214,144100,144101,144102,144105,144106,144108,144109,144111],{},"等后面我们学习了",[33,144103,144104],{},"js","之后，我们就会配合",[33,144107,144104],{},"来实现，",[33,144110,144086],{},"栏的切换",[14,144113,144115],{"id":144114},"_162-列表制作","16.2 列表制作",[318,144117,144119],{"id":144118},"_1621-准备工作","16.2.1 准备工作",[4875,144121,144122,144125,144128,144131],{},[214,144123,144124],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[214,144126,144127],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[214,144129,144130],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[214,144132,144133],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[318,144135,144137,144138,324,144140,144142],{"id":144136},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[33,144139,134591],{},[33,144141,57270],{}," 修改",[5198,144144],{"style":129442,"src":144145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[4875,144147,144148],{},[214,144149,144150],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,144152,142956],{},[26,144154,144155],{"className":129586,"code":135018,"language":129588,"meta":31,"style":31},[33,144156,144157,144161,144175,144179,144193,144197,144211,144215,144229,144233],{"__ignoreMap":31},[36,144158,144159],{"class":38,"line":39},[36,144160,135025],{"class":3943},[36,144162,144163,144165,144167,144169,144171,144173],{"class":38,"line":53},[36,144164,135030],{"class":101},[36,144166,83361],{"class":42},[36,144168,131946],{"class":112},[36,144170,54994],{"class":42},[36,144172,135039],{"class":112},[36,144174,132516],{"class":42},[36,144176,144177],{"class":38,"line":196},[36,144178,135046],{"class":3943},[36,144180,144181,144183,144185,144187,144189,144191],{"class":38,"line":642},[36,144182,135051],{"class":101},[36,144184,83361],{"class":42},[36,144186,131946],{"class":112},[36,144188,54994],{"class":42},[36,144190,58320],{"class":112},[36,144192,132516],{"class":42},[36,144194,144195],{"class":38,"line":655},[36,144196,135066],{"class":3943},[36,144198,144199,144201,144203,144205,144207,144209],{"class":38,"line":662},[36,144200,135071],{"class":101},[36,144202,83361],{"class":42},[36,144204,131946],{"class":112},[36,144206,54994],{"class":42},[36,144208,58387],{"class":112},[36,144210,132516],{"class":42},[36,144212,144213],{"class":38,"line":667},[36,144214,135086],{"class":3943},[36,144216,144217,144219,144221,144223,144225,144227],{"class":38,"line":679},[36,144218,135091],{"class":101},[36,144220,83361],{"class":42},[36,144222,131946],{"class":112},[36,144224,54994],{"class":42},[36,144226,89786],{"class":112},[36,144228,132516],{"class":42},[36,144230,144231],{"class":38,"line":685},[36,144232,135106],{"class":3943},[36,144234,144235,144237,144239,144241,144243,144245],{"class":38,"line":691},[36,144236,135111],{"class":101},[36,144238,83361],{"class":42},[36,144240,131946],{"class":112},[36,144242,54994],{"class":42},[36,144244,135120],{"class":112},[36,144246,132516],{"class":42},[19,144248,143045],{},[26,144250,144251],{"className":129586,"code":135018,"language":129588,"meta":31,"style":31},[33,144252,144253,144257,144271,144275,144289,144293,144307,144311,144325,144329],{"__ignoreMap":31},[36,144254,144255],{"class":38,"line":39},[36,144256,135025],{"class":3943},[36,144258,144259,144261,144263,144265,144267,144269],{"class":38,"line":53},[36,144260,135030],{"class":101},[36,144262,83361],{"class":42},[36,144264,131946],{"class":112},[36,144266,54994],{"class":42},[36,144268,135039],{"class":112},[36,144270,132516],{"class":42},[36,144272,144273],{"class":38,"line":196},[36,144274,135046],{"class":3943},[36,144276,144277,144279,144281,144283,144285,144287],{"class":38,"line":642},[36,144278,135051],{"class":101},[36,144280,83361],{"class":42},[36,144282,131946],{"class":112},[36,144284,54994],{"class":42},[36,144286,58320],{"class":112},[36,144288,132516],{"class":42},[36,144290,144291],{"class":38,"line":655},[36,144292,135066],{"class":3943},[36,144294,144295,144297,144299,144301,144303,144305],{"class":38,"line":662},[36,144296,135071],{"class":101},[36,144298,83361],{"class":42},[36,144300,131946],{"class":112},[36,144302,54994],{"class":42},[36,144304,58387],{"class":112},[36,144306,132516],{"class":42},[36,144308,144309],{"class":38,"line":667},[36,144310,135086],{"class":3943},[36,144312,144313,144315,144317,144319,144321,144323],{"class":38,"line":679},[36,144314,135091],{"class":101},[36,144316,83361],{"class":42},[36,144318,131946],{"class":112},[36,144320,54994],{"class":42},[36,144322,89786],{"class":112},[36,144324,132516],{"class":42},[36,144326,144327],{"class":38,"line":685},[36,144328,135106],{"class":3943},[36,144330,144331,144333,144335,144337,144339,144341],{"class":38,"line":691},[36,144332,135111],{"class":101},[36,144334,83361],{"class":42},[36,144336,131946],{"class":112},[36,144338,54994],{"class":42},[36,144340,135120],{"class":112},[36,144342,132516],{"class":42},[4875,144344,144345,144356],{},[214,144346,144347,144348,144351,144352,324,144354],{},"1 号盒子左侧浮动 ",[33,144349,144350],{},"sk_list"," 里面包含 ",[33,144353,4875],{},[33,144355,214],{},[214,144357,144358,144359,144351,144362,324,144364],{},"2 号盒子左侧浮动 ",[33,144360,144361],{},"sk_con",[33,144363,4875],{},[33,144365,214],{},[19,144367,142956],{},[26,144369,144370],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},[33,144371,144372,144378,144388],{"__ignoreMap":31},[36,144373,144374,144376],{"class":38,"line":39},[36,144375,133434],{"class":101},[36,144377,19228],{"class":42},[36,144379,144380,144382,144384,144386],{"class":38,"line":53},[36,144381,134066],{"class":112},[36,144383,54994],{"class":42},[36,144385,259],{"class":112},[36,144387,5029],{"class":42},[36,144389,144390],{"class":38,"line":196},[36,144391,5300],{"class":42},[19,144393,143045],{},[26,144395,144396],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},[33,144397,144398,144404,144414],{"__ignoreMap":31},[36,144399,144400,144402],{"class":38,"line":39},[36,144401,133434],{"class":101},[36,144403,19228],{"class":42},[36,144405,144406,144408,144410,144412],{"class":38,"line":53},[36,144407,134066],{"class":112},[36,144409,54994],{"class":42},[36,144411,259],{"class":112},[36,144413,5029],{"class":42},[36,144415,144416],{"class":38,"line":196},[36,144417,5300],{"class":42},[318,144419,144421,144422],{"id":144420},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[33,144423,144424],{},"sk_container",[5198,144426],{"style":129442,"src":144427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[4875,144429,144430,144435],{},[214,144431,143610,144432,144434],{},[33,144433,144424],{}," 给宽度 1200，不要给高度",[214,144436,144437],{},"一定不要忘记清除浮动",[19,144439,142956],{},[26,144441,144442],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},[33,144443,144444,144450,144460],{"__ignoreMap":31},[36,144445,144446,144448],{"class":38,"line":39},[36,144447,133434],{"class":101},[36,144449,19228],{"class":42},[36,144451,144452,144454,144456,144458],{"class":38,"line":53},[36,144453,134066],{"class":112},[36,144455,54994],{"class":42},[36,144457,259],{"class":112},[36,144459,5029],{"class":42},[36,144461,144462],{"class":38,"line":196},[36,144463,5300],{"class":42},[211,144465,144466],{},[214,144467,144468],{},"sk_hd制作",[4875,144470,144471],{},[214,144472,143690,144473,144476],{},[33,144474,144475],{},"sk_hd"," ，插入图片即可",[19,144478,142956],{},[26,144480,144481],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,144482,144483],{"__ignoreMap":31},[36,144484,144485,144487,144489,144491,144493,144495,144497,144499,144501,144503,144505,144507],{"class":38,"line":39},[36,144486,393],{"class":42},[36,144488,5198],{"class":54857},[36,144490,58795],{"class":101},[36,144492,47],{"class":42},[36,144494,137103],{"class":105},[36,144496,58803],{"class":101},[36,144498,47],{"class":42},[36,144500,137110],{"class":105},[36,144502,137113],{"class":101},[36,144504,47],{"class":42},[36,144506,137118],{"class":105},[36,144508,54864],{"class":42},[211,144510,144511],{"start":53},[214,144512,144513],{},"sk_bd制作",[4875,144515,144516],{},[214,144517,144518,144519,144522,144523,324,144525,144527],{},"3 号盒子 ",[33,144520,144521],{},"sk_bd"," ，里面包含很多的 ",[33,144524,4875],{},[33,144526,214],{},[4875,144528,144529,144538],{},[214,144530,144531,144532,144534,144535,144537],{},"当鼠标移入到 ",[33,144533,214],{}," 上面的时候显示红色的边框，在这里先给 ",[33,144536,214],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[214,144539,144540,144541,144543,144544,144546,144547,144550,144551,144553],{},"由于给每个 ",[33,144542,214],{}," 都设置了外边距，导致一行的最后一个 ",[33,144545,214],{}," 掉了下来，在这里我们利用 ",[33,144548,144549],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[33,144552,214],{},"，去掉外边距就好了",[19,144555,142956],{},[26,144557,144558],{"className":129586,"code":141775,"language":129588,"meta":31,"style":31},[33,144559,144560,144566,144578],{"__ignoreMap":31},[36,144561,144562,144564],{"class":38,"line":39},[36,144563,55168],{"class":54857},[36,144565,19228],{"class":42},[36,144567,144568,144570,144572,144574,144576],{"class":38,"line":53},[36,144569,74024],{"class":112},[36,144571,54994],{"class":42},[36,144573,1859],{"class":112},[36,144575,55113],{"class":112},[36,144577,5029],{"class":42},[36,144579,144580],{"class":38,"line":196},[36,144581,5300],{"class":42},[19,144583,143045],{},[26,144585,144586],{"className":129586,"code":141775,"language":129588,"meta":31,"style":31},[33,144587,144588,144594,144606],{"__ignoreMap":31},[36,144589,144590,144592],{"class":38,"line":39},[36,144591,55168],{"class":54857},[36,144593,19228],{"class":42},[36,144595,144596,144598,144600,144602,144604],{"class":38,"line":53},[36,144597,74024],{"class":112},[36,144599,54994],{"class":42},[36,144601,1859],{"class":112},[36,144603,55113],{"class":112},[36,144605,5029],{"class":42},[36,144607,144608],{"class":38,"line":196},[36,144609,5300],{"class":42},[14,144611,144613],{"id":144612},"_163-注册页面制作","16.3 注册页面制作",[5198,144615],{"style":129442,"src":144616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,144618,144619,144621],{},[4027,144620,12706],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[5198,144623],{"style":129442,"src":144624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[318,144626,144628],{"id":144627},"_1631-准备工作","16.3.1 准备工作",[4875,144630,144631,144634],{},[214,144632,144633],{},"创建register.html，引入 base.css，引入favicon图标",[214,144635,144636],{},"创建register.css ，在html页面进行引入",[318,144638,144640,144641,144643],{"id":144639},"_1632-header-头部实现","16.3.2 ",[33,144642,134591],{}," 头部实现",[4875,144645,144646,144649],{},[214,144647,144648],{},"整个内容用 版心 进行包裹",[214,144650,144651],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,144653,142956],{},[26,144655,144656],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,144657,144658],{"__ignoreMap":31},[36,144659,144660,144662,144664,144666,144668,144670,144672,144674,144676,144678,144680,144682],{"class":38,"line":39},[36,144661,393],{"class":42},[36,144663,5198],{"class":54857},[36,144665,58795],{"class":101},[36,144667,47],{"class":42},[36,144669,137103],{"class":105},[36,144671,58803],{"class":101},[36,144673,47],{"class":42},[36,144675,137110],{"class":105},[36,144677,137113],{"class":101},[36,144679,47],{"class":42},[36,144681,137118],{"class":105},[36,144683,54864],{"class":42},[19,144685,143045],{},[26,144687,144688],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,144689,144690],{"__ignoreMap":31},[36,144691,144692,144694,144696,144698,144700,144702,144704,144706,144708,144710,144712,144714],{"class":38,"line":39},[36,144693,393],{"class":42},[36,144695,5198],{"class":54857},[36,144697,58795],{"class":101},[36,144699,47],{"class":42},[36,144701,137103],{"class":105},[36,144703,58803],{"class":101},[36,144705,47],{"class":42},[36,144707,137110],{"class":105},[36,144709,137113],{"class":101},[36,144711,47],{"class":42},[36,144713,137118],{"class":105},[36,144715,54864],{"class":42},[318,144717,144719,144720,144723],{"id":144718},"_1633-registerarea-主体模块实现","16.3.3 ",[33,144721,144722],{},"registerarea"," 主体模块实现",[5198,144725],{"style":129442,"src":144726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,144728,144729],{},"整个大盒子 高度为 522px，设置4个边框",[19,144731,142956],{},[26,144733,144734],{"className":129586,"code":133743,"language":129588,"meta":31,"style":31},[33,144735,144736,144742,144758],{"__ignoreMap":31},[36,144737,144738,144740],{"class":38,"line":39},[36,144739,55168],{"class":54857},[36,144741,19228],{"class":42},[36,144743,144744,144746,144748,144750,144752,144754,144756],{"class":38,"line":53},[36,144745,74450],{"class":112},[36,144747,54994],{"class":42},[36,144749,4092],{"class":112},[36,144751,55049],{"class":46},[36,144753,55078],{"class":112},[36,144755,132978],{"class":112},[36,144757,5029],{"class":42},[36,144759,144760],{"class":38,"line":196},[36,144761,5300],{"class":42},[19,144763,143045],{},[26,144765,144766],{"className":129586,"code":133743,"language":129588,"meta":31,"style":31},[33,144767,144768,144774,144790],{"__ignoreMap":31},[36,144769,144770,144772],{"class":38,"line":39},[36,144771,55168],{"class":54857},[36,144773,19228],{"class":42},[36,144775,144776,144778,144780,144782,144784,144786,144788],{"class":38,"line":53},[36,144777,74450],{"class":112},[36,144779,54994],{"class":42},[36,144781,4092],{"class":112},[36,144783,55049],{"class":46},[36,144785,55078],{"class":112},[36,144787,132978],{"class":112},[36,144789,5029],{"class":42},[36,144791,144792],{"class":38,"line":196},[36,144793,5300],{"class":42},[19,144795,144796],{},"1号盒子 是一个 h3 标签，放标题",[4875,144798,144799],{},[214,144800,144801],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,144803,142956],{},[26,144805,144806],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},[33,144807,144808,144814,144824],{"__ignoreMap":31},[36,144809,144810,144812],{"class":38,"line":39},[36,144811,133434],{"class":101},[36,144813,19228],{"class":42},[36,144815,144816,144818,144820,144822],{"class":38,"line":53},[36,144817,134066],{"class":112},[36,144819,54994],{"class":42},[36,144821,259],{"class":112},[36,144823,5029],{"class":42},[36,144825,144826],{"class":38,"line":196},[36,144827,5300],{"class":42},[19,144829,143045],{},[26,144831,144832],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},[33,144833,144834,144840,144850],{"__ignoreMap":31},[36,144835,144836,144838],{"class":38,"line":39},[36,144837,133434],{"class":101},[36,144839,19228],{"class":42},[36,144841,144842,144844,144846,144848],{"class":38,"line":53},[36,144843,134066],{"class":112},[36,144845,54994],{"class":42},[36,144847,259],{"class":112},[36,144849,5029],{"class":42},[36,144851,144852],{"class":38,"line":196},[36,144853,5300],{"class":42},[19,144855,144856],{},"2号盒子 里面放注册的内容",[4875,144858,144859,144862,144871,144885,144898,144901,144904,144922,144936],{},[214,144860,144861],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[214,144863,144864,144865,144867,144868,144870],{},"里面的内容利用 ",[33,144866,4875],{}," 包含 ",[33,144869,214],{}," 来实现的（不需要用表格）",[214,144872,142100,144873,144875,144876,144878,144879,144881,144882,144884],{},[33,144874,214],{}," 里面，左侧放 ",[33,144877,37168],{}," 标签， 中间放",[33,144880,57378],{}," 标签， 右侧放 ",[33,144883,36],{}," 提示信息",[214,144886,144887,144888,144890,144891,144893,144894,144897],{},"左侧 ",[33,144889,37168],{},"里面的文字都是右对齐，我们可以给",[33,144892,37168],{},"设置一个宽度（88px），然后利用",[33,144895,144896],{},"text-align"," 来设置右对齐",[214,144899,144900],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[214,144902,144903],{},"右侧 span修饰一下文字颜色",[214,144905,144906,144907],{},"提示信息的样式优化",[4875,144908,144909,144912,144915],{},[214,144910,144911],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[214,144913,144914],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[214,144916,144917,144918,144921],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[33,144919,144920],{},"vertical-algin"," 来设置 图片与文字对齐方式",[214,144923,144924,144925],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[4875,144926,144927,144933],{},[214,144928,144929,144930,144932],{},"设置 ",[33,144931,27175],{}," 的 左右 12px 的内边距，设置一下文字颜色",[214,144934,144935],{},"分别设置 背景颜色",[214,144937,144938,144939,144941],{},"同意协议 和 完成注册 都是用 ",[33,144940,214],{}," 进行包裹",[19,144943,142956],{},[26,144945,144946],{"className":129586,"code":143529,"language":129588,"meta":31,"style":31},[33,144947,144948,144954,144964],{"__ignoreMap":31},[36,144949,144950,144952],{"class":38,"line":39},[36,144951,55168],{"class":54857},[36,144953,19228],{"class":42},[36,144955,144956,144958,144960,144962],{"class":38,"line":53},[36,144957,74432],{"class":112},[36,144959,54994],{"class":42},[36,144961,143546],{"class":112},[36,144963,5029],{"class":42},[36,144965,144966],{"class":38,"line":196},[36,144967,5300],{"class":42},[19,144969,143045],{},[26,144971,144972],{"className":129586,"code":143529,"language":129588,"meta":31,"style":31},[33,144973,144974,144980,144990],{"__ignoreMap":31},[36,144975,144976,144978],{"class":38,"line":39},[36,144977,55168],{"class":54857},[36,144979,19228],{"class":42},[36,144981,144982,144984,144986,144988],{"class":38,"line":53},[36,144983,74432],{"class":112},[36,144985,54994],{"class":42},[36,144987,143546],{"class":112},[36,144989,5029],{"class":42},[36,144991,144992],{"class":38,"line":196},[36,144993,5300],{"class":42},[318,144995,144997],{"id":144996},"_1634-底部实现","16.3.4 底部实现",[19,144999,142956],{},[26,145001,145002],{"className":129586,"code":143529,"language":129588,"meta":31,"style":31},[33,145003,145004,145010,145020],{"__ignoreMap":31},[36,145005,145006,145008],{"class":38,"line":39},[36,145007,55168],{"class":54857},[36,145009,19228],{"class":42},[36,145011,145012,145014,145016,145018],{"class":38,"line":53},[36,145013,74432],{"class":112},[36,145015,54994],{"class":42},[36,145017,143546],{"class":112},[36,145019,5029],{"class":42},[36,145021,145022],{"class":38,"line":196},[36,145023,5300],{"class":42},[19,145025,143045],{},[26,145027,145028],{"className":130333,"code":133690,"language":130335,"meta":31,"style":31},[33,145029,145030,145034,145048,145052],{"__ignoreMap":31},[36,145031,145032],{"class":38,"line":39},[36,145033,133697],{"class":3943},[36,145035,145036,145038,145040,145042,145044,145046],{"class":38,"line":53},[36,145037,393],{"class":42},[36,145039,55168],{"class":54857},[36,145041,57043],{"class":101},[36,145043,47],{"class":42},[36,145045,133710],{"class":105},[36,145047,54864],{"class":42},[36,145049,145050],{"class":38,"line":196},[36,145051,133717],{"class":42},[36,145053,145054,145056,145058],{"class":38,"line":642},[36,145055,55342],{"class":42},[36,145057,55168],{"class":54857},[36,145059,54864],{"class":42},[14,145061,145063],{"id":145062},"_164-项目总结","16.4 项目总结",[211,145065,145066,145069,145072,145075],{},[214,145067,145068],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[214,145070,145071],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[214,145073,145074],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[214,145076,145077],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[5198,145079],{"style":129442,"src":145080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[211,145082,145083],{"start":655},[214,145084,145085],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[5198,145087],{"style":129442,"src":145088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[211,145090,145091],{"start":662},[214,145092,145093],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[5198,145095],{"style":129442,"src":145096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[26,145098,145099],{"className":130333,"code":139743,"language":130335,"meta":31,"style":31},[33,145100,145101],{"__ignoreMap":31},[36,145102,145103,145105,145107,145109,145111,145113,145115,145117,145119,145121,145123,145125],{"class":38,"line":39},[36,145104,393],{"class":42},[36,145106,57378],{"class":54857},[36,145108,57381],{"class":101},[36,145110,47],{"class":42},[36,145112,66254],{"class":105},[36,145114,18576],{"class":101},[36,145116,47],{"class":42},[36,145118,139764],{"class":105},[36,145120,64575],{"class":101},[36,145122,47],{"class":42},[36,145124,139771],{"class":105},[36,145126,54864],{"class":42},[211,145128,145129,145132],{"start":667},[214,145130,145131],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[214,145133,145134],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[3785,145136,145137],{},"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":31,"searchDepth":53,"depth":53,"links":145139},[145140,145145,145152,145160],{"id":142766,"depth":53,"text":142767,"children":145141},[145142,145143,145144],{"id":142770,"depth":196,"text":142771},{"id":143501,"depth":196,"text":143502},{"id":143814,"depth":196,"text":143815},{"id":144114,"depth":53,"text":144115,"children":145146},[145147,145148,145150],{"id":144118,"depth":196,"text":144119},{"id":144136,"depth":196,"text":145149},"16.2.2 列表页 header 和 nav 修改",{"id":144420,"depth":196,"text":145151},"16.2.3 列表页主体 sk_container",{"id":144612,"depth":53,"text":144613,"children":145153},[145154,145155,145157,145159],{"id":144627,"depth":196,"text":144628},{"id":144639,"depth":196,"text":145156},"16.3.2 header 头部实现",{"id":144718,"depth":196,"text":145158},"16.3.3 registerarea 主体模块实现",{"id":144996,"depth":196,"text":144997},{"id":145062,"depth":53,"text":145063},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":142758,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":145167,"title":145168,"body":145169,"description":26998,"extension":3817,"meta":145277,"navigation":658,"path":145278,"seo":145279,"stem":145280,"__hash__":145281},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":145170,"toc":145272},[145171,145174,145178,145181,145184,145193,145202,145206,145211,145218,145236,145239,145242,145245,145248,145251,145254,145257,145260,145263,145266,145269],[10,145172,145168],{"id":145173},"_17-web服务器与网站发布",[14,145175,145177],{"id":145176},"_171-web服务器","17.1 Web服务器",[19,145179,145180],{},"把自己网站上传到服务器上，可以让其他人访问",[5198,145182],{"style":129442,"src":145183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,145185,145186,145189,145190],{},[4027,145187,145188],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[4027,145191,145192],{},"Web 服务器等",[19,145194,145195,145196,324,145199,29354],{},"根据服务器在网络中所在的位置不同，又可分为 ",[4027,145197,145198],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[4027,145200,145201],{},"远程服务器",[318,145203,145205],{"id":145204},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,145207,145208],{},[4027,145209,145210],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,145212,145213,145214],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[4113,145215,145216],{"href":145216,"rel":145217},"http:\u002F\u002Ffree.3v.do\u002F",[27481],[4875,145219,145220,145223,145226,145233],{},[214,145221,145222],{},"去免费空间网站注册账号。",[214,145224,145225],{},"记录下主机名、用户名、密码、域名。",[214,145227,145228,145229,145232],{},"利用 ",[33,145230,145231],{},"utftp"," 软件 上传网站到远程服务器",[214,145234,145235],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,145237,145238],{},"使用软件上传，对上传软件文件进行解压",[5198,145240],{"style":129442,"src":145241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[5198,145243],{"style":129442,"src":145244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,145246,145247],{},"输入刚刚申请的服务器账号信息：",[5198,145249],{"style":129442,"src":145250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[5198,145252],{"style":129442,"src":145253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[5198,145255],{"style":129442,"src":145256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[5198,145258],{"style":129442,"src":145259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,145261,145262],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[5198,145264],{"style":129442,"src":145265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,145267,145268],{},"浏览器输入域名即可访问",[19,145270,145271],{},"首页一定必须是index",{"title":31,"searchDepth":53,"depth":53,"links":145273},[145274],{"id":145176,"depth":53,"text":145177,"children":145275},[145276],{"id":145204,"depth":196,"text":145205},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":145168,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":145283,"title":145284,"body":145285,"description":26998,"extension":3817,"meta":146212,"navigation":658,"path":146213,"seo":146214,"stem":146215,"__hash__":146216},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":145286,"toc":146195},[145287,145290,145294,145297,145300,145311,145314,145318,145322,145327,145330,145333,145336,145339,145343,145369,145373,145377,145380,145383,145387,145420,145424,145427,145430,145494,145498,145502,145505,145508,145511,145515,145560,145564,145567,145597,145601,145605,145608,145611,145615,145618,145687,145690,145798,145800,145806,145810,145813,145816,145912,145915,145919,145943,145947,145950,145954,145957,145961,145964,145967,145970,145973,145977,145980,145983,145987,145991,145994,145997,146000,146003,146007,146010,146014,146017,146020,146065,146069,146073,146076,146079,146082,146114,146118,146121,146155,146159,146162,146192],[10,145288,145284],{"id":145289},"_18-2d动画与3d转换",[14,145291,145293],{"id":145292},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,145295,145296],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,145298,145299],{},"转换（transform）你可以简单理解为变形",[4875,145301,145302,145305,145308],{},[214,145303,145304],{},"移动：translate",[214,145306,145307],{},"旋转：rotate",[214,145309,145310],{},"缩放：scale",[5198,145312],{"style":129442,"src":145313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[318,145315,145317],{"id":145316},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[25619,145319,145321],{"id":145320},"_18111-translate介绍","18.1.1.1 translate介绍",[19,145323,145324,145325],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[4027,145326,136245],{},[5198,145328],{"style":129442,"src":145329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,145331,145332],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,145334,145335],{},"对于行内元素无效",[19,145337,145338],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[25619,145340,145342],{"id":145341},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[26,145344,145345],{"className":129586,"code":141775,"language":129588,"meta":31,"style":31},[33,145346,145347,145353,145365],{"__ignoreMap":31},[36,145348,145349,145351],{"class":38,"line":39},[36,145350,55168],{"class":54857},[36,145352,19228],{"class":42},[36,145354,145355,145357,145359,145361,145363],{"class":38,"line":53},[36,145356,74024],{"class":112},[36,145358,54994],{"class":42},[36,145360,1859],{"class":112},[36,145362,55113],{"class":112},[36,145364,5029],{"class":42},[36,145366,145367],{"class":38,"line":196},[36,145368,5300],{"class":42},[318,145370,145372],{"id":145371},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[25619,145374,145376],{"id":145375},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,145378,145379],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[5198,145381],{"style":129442,"src":145382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[25619,145384,145386],{"id":145385},"_18122-旋转效果","18.1.2.2 旋转效果",[26,145388,145390],{"className":129586,"code":145389,"language":129588,"meta":31,"style":31},"div {\n  transform: rotate(45deg);\n}\n",[33,145391,145392,145398,145416],{"__ignoreMap":31},[36,145393,145394,145396],{"class":38,"line":39},[36,145395,55168],{"class":54857},[36,145397,19228],{"class":42},[36,145399,145400,145402,145404,145407,145409,145411,145414],{"class":38,"line":53},[36,145401,139570],{"class":112},[36,145403,54994],{"class":42},[36,145405,145406],{"class":112},"rotate",[36,145408,495],{"class":42},[36,145410,4402],{"class":112},[36,145412,145413],{"class":46},"deg",[36,145415,6422],{"class":42},[36,145417,145418],{"class":38,"line":196},[36,145419,5300],{"class":42},[25619,145421,145423],{"id":145422},"_18123-三角做法","18.1.2.3 三角做法",[19,145425,145426],{},"该下标当经过最外层大盒子时会实现向上反转",[5198,145428],{"style":129442,"src":145429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[26,145431,145432],{"className":129586,"code":138106,"language":129588,"meta":31,"style":31},[33,145433,145434,145438,145444,145454,145464,145480,145490],{"__ignoreMap":31},[36,145435,145436],{"class":38,"line":39},[36,145437,138113],{"class":3943},[36,145439,145440,145442],{"class":38,"line":53},[36,145441,138118],{"class":101},[36,145443,19228],{"class":42},[36,145445,145446,145448,145450,145452],{"class":38,"line":196},[36,145447,74122],{"class":112},[36,145449,54994],{"class":42},[36,145451,1859],{"class":112},[36,145453,5029],{"class":42},[36,145455,145456,145458,145460,145462],{"class":38,"line":642},[36,145457,74342],{"class":112},[36,145459,54994],{"class":42},[36,145461,1859],{"class":112},[36,145463,5029],{"class":42},[36,145465,145466,145468,145470,145472,145474,145476,145478],{"class":38,"line":655},[36,145467,74450],{"class":112},[36,145469,54994],{"class":42},[36,145471,554],{"class":112},[36,145473,55049],{"class":46},[36,145475,55078],{"class":112},[36,145477,67546],{"class":112},[36,145479,5029],{"class":42},[36,145481,145482,145484,145486,145488],{"class":38,"line":662},[36,145483,138161],{"class":112},[36,145485,54994],{"class":42},[36,145487,65924],{"class":112},[36,145489,5029],{"class":42},[36,145491,145492],{"class":38,"line":667},[36,145493,5300],{"class":42},[318,145495,145497],{"id":145496},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[25619,145499,145501],{"id":145500},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,145503,145504],{},"设置中心点",[5198,145506],{"style":129442,"src":145507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,145509,145510],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[25619,145512,145514],{"id":145513},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[26,145516,145518],{"className":129586,"code":145517,"language":129588,"meta":31,"style":31},"\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",[33,145519,145520,145525,145531,145546,145551,145556],{"__ignoreMap":31},[36,145521,145522],{"class":38,"line":39},[36,145523,145524],{"class":3943},"\u002F* 转换中心点 *\u002F\n",[36,145526,145527,145529],{"class":38,"line":53},[36,145528,55168],{"class":54857},[36,145530,19228],{"class":42},[36,145532,145533,145536,145538,145540,145542,145544],{"class":38,"line":196},[36,145534,145535],{"class":112},"  transform-origin",[36,145537,54994],{"class":42},[36,145539,55149],{"class":112},[36,145541,20767],{"class":112},[36,145543,133449],{"class":42},[36,145545,138259],{"class":3943},[36,145547,145548],{"class":38,"line":642},[36,145549,145550],{"class":3943},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[36,145552,145553],{"class":38,"line":655},[36,145554,145555],{"class":3943},"  \u002F* transform-origin: left top; *\u002F\n",[36,145557,145558],{"class":38,"line":662},[36,145559,5300],{"class":42},[25619,145561,145563],{"id":145562},"_18133-旋转案例","18.1.3.3 旋转案例",[5198,145565],{"style":129442,"src":145566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[26,145568,145569],{"className":129586,"code":145389,"language":129588,"meta":31,"style":31},[33,145570,145571,145577,145593],{"__ignoreMap":31},[36,145572,145573,145575],{"class":38,"line":39},[36,145574,55168],{"class":54857},[36,145576,19228],{"class":42},[36,145578,145579,145581,145583,145585,145587,145589,145591],{"class":38,"line":53},[36,145580,139570],{"class":112},[36,145582,54994],{"class":42},[36,145584,145406],{"class":112},[36,145586,495],{"class":42},[36,145588,4402],{"class":112},[36,145590,145413],{"class":46},[36,145592,6422],{"class":42},[36,145594,145595],{"class":38,"line":196},[36,145596,5300],{"class":42},[318,145598,145600],{"id":145599},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[25619,145602,145604],{"id":145603},"_18141-scale介绍","18.1.4.1 scale介绍",[19,145606,145607],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[5198,145609],{"style":129442,"src":145610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[25619,145612,145614],{"id":145613},"_18142-分页按钮","18.1.4.2 分页按钮",[5198,145616],{"style":129442,"src":145617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[26,145619,145621],{"className":129586,"code":145620,"language":129588,"meta":31,"style":31},"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",[33,145622,145623,145629,145645,145649,145653,145658,145664,145678,145683],{"__ignoreMap":31},[36,145624,145625,145627],{"class":38,"line":39},[36,145626,55168],{"class":54857},[36,145628,19228],{"class":42},[36,145630,145631,145633,145635,145638,145640,145643],{"class":38,"line":53},[36,145632,139570],{"class":112},[36,145634,54994],{"class":42},[36,145636,145637],{"class":112},"scale",[36,145639,495],{"class":42},[36,145641,145642],{"class":112},"1.2",[36,145644,6422],{"class":42},[36,145646,145647],{"class":38,"line":196},[36,145648,5300],{"class":42},[36,145650,145651],{"class":38,"line":642},[36,145652,139047],{"class":42},[36,145654,145655],{"class":38,"line":655},[36,145656,145657],{"class":3943},"\u002F* 2D 缩放 *\u002F\n",[36,145659,145660,145662],{"class":38,"line":662},[36,145661,55168],{"class":54857},[36,145663,19228],{"class":42},[36,145665,145666,145668,145670,145672,145674,145676],{"class":38,"line":667},[36,145667,139570],{"class":112},[36,145669,54994],{"class":42},[36,145671,145637],{"class":112},[36,145673,495],{"class":42},[36,145675,145642],{"class":112},[36,145677,6422],{"class":42},[36,145679,145680],{"class":38,"line":679},[36,145681,145682],{"class":3943},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[36,145684,145685],{"class":38,"line":685},[36,145686,5300],{"class":42},[19,145688,145689],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[26,145691,145693],{"className":129586,"code":145692,"language":129588,"meta":31,"style":31},"\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",[33,145694,145695,145700,145710,145731,145752,145756,145761,145767,145794],{"__ignoreMap":31},[36,145696,145697],{"class":38,"line":39},[36,145698,145699],{"class":3943},"\u002F* 定义动画 *\u002F\n",[36,145701,145702,145705,145708],{"class":38,"line":53},[36,145703,145704],{"class":46},"@keyframes",[36,145706,145707],{"class":468}," move",[36,145709,19228],{"class":42},[36,145711,145712,145715,145717,145719,145721,145724,145726,145728],{"class":38,"line":196},[36,145713,145714],{"class":101},"  0%",[36,145716,83361],{"class":42},[36,145718,51691],{"class":112},[36,145720,54994],{"class":42},[36,145722,145723],{"class":112},"translateX",[36,145725,495],{"class":42},[36,145727,1859],{"class":112},[36,145729,145730],{"class":42},"); }\n",[36,145732,145733,145736,145738,145740,145742,145744,145746,145748,145750],{"class":38,"line":642},[36,145734,145735],{"class":101},"  100%",[36,145737,83361],{"class":42},[36,145739,51691],{"class":112},[36,145741,54994],{"class":42},[36,145743,145723],{"class":112},[36,145745,495],{"class":42},[36,145747,4186],{"class":112},[36,145749,55049],{"class":46},[36,145751,145730],{"class":42},[36,145753,145754],{"class":38,"line":655},[36,145755,5300],{"class":42},[36,145757,145758],{"class":38,"line":662},[36,145759,145760],{"class":3943},"\u002F* 调用动画 *\u002F\n",[36,145762,145763,145765],{"class":38,"line":667},[36,145764,55168],{"class":54857},[36,145766,19228],{"class":42},[36,145768,145769,145772,145774,145776,145778,145780,145782,145784,145786,145789,145792],{"class":38,"line":679},[36,145770,145771],{"class":112},"  animation",[36,145773,54994],{"class":42},[36,145775,138272],{"class":112},[36,145777,28732],{"class":112},[36,145779,4566],{"class":46},[36,145781,82234],{"class":112},[36,145783,1004],{"class":112},[36,145785,4566],{"class":46},[36,145787,145788],{"class":112}," infinite",[36,145790,145791],{"class":112}," alternate",[36,145793,5029],{"class":42},[36,145795,145796],{"class":38,"line":685},[36,145797,5300],{"class":42},[19,145799,145689],{},[26,145801,145804],{"className":145802,"code":145803,"language":80},[78],"\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",[33,145805,145803],{"__ignoreMap":31},[25619,145807,145809],{"id":145808},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,145811,145812],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[5198,145814],{"style":129442,"src":145815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[26,145817,145818],{"className":129586,"code":145692,"language":129588,"meta":31,"style":31},[33,145819,145820,145824,145832,145850,145870,145874,145878,145884,145908],{"__ignoreMap":31},[36,145821,145822],{"class":38,"line":39},[36,145823,145699],{"class":3943},[36,145825,145826,145828,145830],{"class":38,"line":53},[36,145827,145704],{"class":46},[36,145829,145707],{"class":468},[36,145831,19228],{"class":42},[36,145833,145834,145836,145838,145840,145842,145844,145846,145848],{"class":38,"line":196},[36,145835,145714],{"class":101},[36,145837,83361],{"class":42},[36,145839,51691],{"class":112},[36,145841,54994],{"class":42},[36,145843,145723],{"class":112},[36,145845,495],{"class":42},[36,145847,1859],{"class":112},[36,145849,145730],{"class":42},[36,145851,145852,145854,145856,145858,145860,145862,145864,145866,145868],{"class":38,"line":642},[36,145853,145735],{"class":101},[36,145855,83361],{"class":42},[36,145857,51691],{"class":112},[36,145859,54994],{"class":42},[36,145861,145723],{"class":112},[36,145863,495],{"class":42},[36,145865,4186],{"class":112},[36,145867,55049],{"class":46},[36,145869,145730],{"class":42},[36,145871,145872],{"class":38,"line":655},[36,145873,5300],{"class":42},[36,145875,145876],{"class":38,"line":662},[36,145877,145760],{"class":3943},[36,145879,145880,145882],{"class":38,"line":667},[36,145881,55168],{"class":54857},[36,145883,19228],{"class":42},[36,145885,145886,145888,145890,145892,145894,145896,145898,145900,145902,145904,145906],{"class":38,"line":679},[36,145887,145771],{"class":112},[36,145889,54994],{"class":42},[36,145891,138272],{"class":112},[36,145893,28732],{"class":112},[36,145895,4566],{"class":46},[36,145897,82234],{"class":112},[36,145899,1004],{"class":112},[36,145901,4566],{"class":46},[36,145903,145788],{"class":112},[36,145905,145791],{"class":112},[36,145907,5029],{"class":42},[36,145909,145910],{"class":38,"line":685},[36,145911,5300],{"class":42},[19,145913,145914],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[318,145916,145918],{"id":145917},"_1823-知识点回顾","18.2.3 知识点回顾",[26,145920,145921],{"className":129586,"code":131755,"language":129588,"meta":31,"style":31},[33,145922,145923,145929,145939],{"__ignoreMap":31},[36,145924,145925,145927],{"class":38,"line":39},[36,145926,55168],{"class":54857},[36,145928,19228],{"class":42},[36,145930,145931,145933,145935,145937],{"class":38,"line":53},[36,145932,131768],{"class":112},[36,145934,54994],{"class":42},[36,145936,65291],{"class":112},[36,145938,5029],{"class":42},[36,145940,145941],{"class":38,"line":196},[36,145942,5300],{"class":42},[14,145944,145946],{"id":145945},"_183-3d-转换","18.3 3D 转换",[19,145948,145949],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[318,145951,145953],{"id":145952},"_1831-坐标轴认识","18.3.1 坐标轴认识",[5198,145955],{"style":129442,"src":145956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[318,145958,145960],{"id":145959},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[5198,145962],{"style":129442,"src":145963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,145965,145966],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,145968,145969],{},"translate3d的效果需要搭配透视perspective来使用",[5198,145971],{"style":129442,"src":145972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[318,145974,145976],{"id":145975},"_1833-透视-perspective","18.3.3 透视 perspective",[5198,145978],{"style":129442,"src":145979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,145981,145982],{},"透视写在父盒子上，单位为像素",[318,145984,145986],{"id":145985},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[25619,145988,145990],{"id":145989},"_18341-分开解释","18.3.4.1 分开解释",[5198,145992],{"style":129442,"src":145993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[5198,145995],{"style":129442,"src":145996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[5198,145998],{"style":129442,"src":145999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,146001,146002],{},"总结来说就是左手原则",[25619,146004,146006],{"id":146005},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[5198,146008],{"style":129442,"src":146009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[318,146011,146013],{"id":146012},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[5198,146015],{"style":129442,"src":146016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[5198,146018],{"style":129442,"src":146019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[26,146021,146023],{"className":129586,"code":146022,"language":129588,"meta":31,"style":31},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[33,146024,146025,146031,146044,146061],{"__ignoreMap":31},[36,146026,146027,146029],{"class":38,"line":39},[36,146028,55168],{"class":54857},[36,146030,19228],{"class":42},[36,146032,146033,146036,146038,146040,146042],{"class":38,"line":53},[36,146034,146035],{"class":112},"  perspective",[36,146037,54994],{"class":42},[36,146039,68629],{"class":112},[36,146041,55049],{"class":46},[36,146043,5029],{"class":42},[36,146045,146046,146048,146050,146053,146055,146057,146059],{"class":38,"line":196},[36,146047,139570],{"class":112},[36,146049,54994],{"class":42},[36,146051,146052],{"class":112},"rotateX",[36,146054,495],{"class":42},[36,146056,4402],{"class":112},[36,146058,145413],{"class":46},[36,146060,6422],{"class":42},[36,146062,146063],{"class":38,"line":642},[36,146064,5300],{"class":42},[318,146066,146068],{"id":146067},"_1836-案例","18.3.6 案例",[25619,146070,146072],{"id":146071},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[5198,146074],{"style":129442,"src":146075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[5198,146077],{"style":129442,"src":146078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[5198,146080],{"style":129442,"src":146081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[26,146083,146085],{"className":129586,"code":146084,"language":129588,"meta":31,"style":31},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[33,146086,146087,146092,146098,146110],{"__ignoreMap":31},[36,146088,146089],{"class":38,"line":39},[36,146090,146091],{"class":3943},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[36,146093,146094,146096],{"class":38,"line":53},[36,146095,136583],{"class":101},[36,146097,19228],{"class":42},[36,146099,146100,146102,146104,146106,146108],{"class":38,"line":196},[36,146101,146035],{"class":112},[36,146103,54994],{"class":42},[36,146105,68629],{"class":112},[36,146107,55049],{"class":46},[36,146109,5029],{"class":42},[36,146111,146112],{"class":38,"line":642},[36,146113,5300],{"class":42},[25619,146115,146117],{"id":146116},"_18362-3d导航栏","18.3.6.2 3D导航栏",[5198,146119],{"style":129442,"src":146120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[26,146122,146123],{"className":130333,"code":133690,"language":130335,"meta":31,"style":31},[33,146124,146125,146129,146143,146147],{"__ignoreMap":31},[36,146126,146127],{"class":38,"line":39},[36,146128,133697],{"class":3943},[36,146130,146131,146133,146135,146137,146139,146141],{"class":38,"line":53},[36,146132,393],{"class":42},[36,146134,55168],{"class":54857},[36,146136,57043],{"class":101},[36,146138,47],{"class":42},[36,146140,133710],{"class":105},[36,146142,54864],{"class":42},[36,146144,146145],{"class":38,"line":196},[36,146146,133717],{"class":42},[36,146148,146149,146151,146153],{"class":38,"line":642},[36,146150,55342],{"class":42},[36,146152,55168],{"class":54857},[36,146154,54864],{"class":42},[25619,146156,146158],{"id":146157},"_18363-旋转木马","18.3.6.3 旋转木马",[5198,146160],{"style":129442,"src":146161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[26,146163,146164],{"className":129586,"code":145389,"language":129588,"meta":31,"style":31},[33,146165,146166,146172,146188],{"__ignoreMap":31},[36,146167,146168,146170],{"class":38,"line":39},[36,146169,55168],{"class":54857},[36,146171,19228],{"class":42},[36,146173,146174,146176,146178,146180,146182,146184,146186],{"class":38,"line":53},[36,146175,139570],{"class":112},[36,146177,54994],{"class":42},[36,146179,145406],{"class":112},[36,146181,495],{"class":42},[36,146183,4402],{"class":112},[36,146185,145413],{"class":46},[36,146187,6422],{"class":42},[36,146189,146190],{"class":38,"line":196},[36,146191,5300],{"class":42},[3785,146193,146194],{},"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":31,"searchDepth":53,"depth":53,"links":146196},[146197,146204],{"id":145292,"depth":53,"text":145293,"children":146198},[146199,146200,146201,146202,146203],{"id":145316,"depth":196,"text":145317},{"id":145371,"depth":196,"text":145372},{"id":145496,"depth":196,"text":145497},{"id":145599,"depth":196,"text":145600},{"id":145917,"depth":196,"text":145918},{"id":145945,"depth":53,"text":145946,"children":146205},[146206,146207,146208,146209,146210,146211],{"id":145952,"depth":196,"text":145953},{"id":145959,"depth":196,"text":145960},{"id":145975,"depth":196,"text":145976},{"id":145985,"depth":196,"text":145986},{"id":146012,"depth":196,"text":146013},{"id":146067,"depth":196,"text":146068},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":145284,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":146218,"title":146219,"body":146220,"description":26998,"extension":3817,"meta":146423,"navigation":658,"path":146424,"seo":146425,"stem":146426,"__hash__":146427},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":146221,"toc":146412},[146222,146225,146229,146232,146235,146239,146242,146245,146248,146252,146255,146259,146262,146266,146269,146273,146287,146291,146316,146319,146322,146339,146343,146347,146350,146353,146357,146360,146363,146381,146385,146388,146402,146406,146409],[10,146223,146219],{"id":146224},"_19-移动端基础-前缀现状与视口",[14,146226,146228],{"id":146227},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[5198,146230],{"style":129442,"src":146231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,146233,146234],{},"意思就是加个前缀，增加兼容性",[14,146236,146238],{"id":146237},"_192-移动端现状认识","19.2 移动端现状认识",[5198,146240],{"style":129442,"src":146241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,146243,146244],{},"调试方法：",[5198,146246],{"style":129442,"src":146247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,146249,146251],{"id":146250},"_193-视口","19.3 视口",[19,146253,146254],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[318,146256,146258],{"id":146257},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[5198,146260],{"style":129442,"src":146261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[318,146263,146265],{"id":146264},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[5198,146267],{"style":129442,"src":146268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[318,146270,146272],{"id":146271},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[4875,146274,146275,146278,146281,146284],{},[214,146276,146277],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[214,146279,146280],{},"理想视口，对设备来讲，是最理想的视口尺寸",[214,146282,146283],{},"需要手动添写meta视口标签通知浏览器操作",[214,146285,146286],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[318,146288,146290],{"id":146289},"_1934-meta视口标签","19.3.4 meta视口标签",[26,146292,146294],{"className":130333,"code":146293,"language":130335,"meta":31,"style":31},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[33,146295,146296],{"__ignoreMap":31},[36,146297,146298,146300,146302,146304,146306,146308,146310,146312,146314],{"class":38,"line":39},[36,146299,393],{"class":42},[36,146301,54901],{"class":54857},[36,146303,18576],{"class":101},[36,146305,47],{"class":42},[36,146307,54948],{"class":105},[36,146309,54928],{"class":101},[36,146311,47],{"class":42},[36,146313,54955],{"class":105},[36,146315,54864],{"class":42},[5198,146317],{"style":129442,"src":146318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,146320,146321],{},"标准视口设置：",[211,146323,146324,146327,146330,146333,146336],{},[214,146325,146326],{},"视口宽度和设备保持一致",[214,146328,146329],{},"视口的默认缩放比例1.0",[214,146331,146332],{},"不允许用户自行缩放",[214,146334,146335],{},"最大允许的缩放比例1.0",[214,146337,146338],{},"最小允许的缩放比例1.0",[318,146340,146342],{"id":146341},"_1935-二倍图","19.3.5 二倍图",[25619,146344,146346],{"id":146345},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[5198,146348],{"style":129442,"src":146349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[5198,146351],{"style":129442,"src":146352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[25619,146354,146356],{"id":146355},"_19352-多倍图","19.3.5.2 多倍图",[5198,146358],{"style":129442,"src":146359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,146361,146362],{},"二倍图法，代码如下：",[26,146364,146366],{"className":129586,"code":146365,"language":129588,"meta":31,"style":31},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[33,146367,146368,146373],{"__ignoreMap":31},[36,146369,146370],{"class":38,"line":39},[36,146371,146372],{"class":3943},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[36,146374,146375,146378],{"class":38,"line":53},[36,146376,146377],{"class":54857},"background-size",[36,146379,146380],{"class":42},": 50% 50%;\n",[25619,146382,146384],{"id":146383},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[5198,146386],{"style":129442,"src":146387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[211,146389,146390,146393,146396,146399],{},[214,146391,146392],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[214,146394,146395],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[214,146397,146398],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[214,146400,146401],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[25619,146403,146405],{"id":146404},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[5198,146407],{"style":129442,"src":146408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[3785,146410,146411],{},"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":31,"searchDepth":53,"depth":53,"links":146413},[146414,146415,146416],{"id":146227,"depth":53,"text":146228},{"id":146237,"depth":53,"text":146238},{"id":146250,"depth":53,"text":146251,"children":146417},[146418,146419,146420,146421,146422],{"id":146257,"depth":196,"text":146258},{"id":146264,"depth":196,"text":146265},{"id":146271,"depth":196,"text":146272},{"id":146289,"depth":196,"text":146290},{"id":146341,"depth":196,"text":146342},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":146219,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":146429,"title":146430,"body":146431,"description":26998,"extension":3817,"meta":147308,"navigation":658,"path":147309,"seo":147310,"stem":147311,"__hash__":147312},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":146432,"toc":147292},[146433,146436,146440,146447,146450,146457,146460,146465,146468,146472,146476,146483,146486,146489,146493,146496,146499,146502,146505,146508,146512,146515,146519,146521,146524,146527,146530,146533,146535,146538,146540,146570,146572,146602,146606,146609,146613,146616,146633,146636,146639,146715,146717,146720,146723,146726,146729,146731,146734,146737,146741,146763,146766,146769,146773,146776,146782,146785,146789,146792,146795,146799,146802,146805,146808,146812,146815,146818,146821,146824,146828,146831,146835,146842,146845,146848,146851,146854,146864,146867,146870,146877,146880,146884,146887,146890,146894,146897,146900,146903,146948,146951,146954,146957,146959,147088,147090,147128,147131,147134,147136,147254,147256,147290],[10,146434,146430],{"id":146435},"_20-移动端布局实战上篇",[14,146437,146439],{"id":146438},"_201-移动端主流方案","20.1 移动端主流方案",[211,146441,146442],{},[214,146443,146444],{},[4027,146445,146446],{},"单独移动端页面（主流）",[5198,146448],{"style":129442,"src":146449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[211,146451,146452],{"start":53},[214,146453,146454],{},[4027,146455,146456],{},"响应式兼容PC移动端",[5198,146458],{"style":129442,"src":146459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[211,146461,146462],{"start":196},[214,146463,146464],{},"两种页面选型布局方式",[5198,146466],{"style":129442,"src":146467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,146469,146471],{"id":146470},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[318,146473,146475],{"id":146474},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,146477,146478,146479],{},"官网地址： ",[4113,146480,146481],{"href":146481,"rel":146482},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[27481],[5198,146484],{"style":129442,"src":146485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[5198,146487],{"style":129442,"src":146488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[318,146490,146492],{"id":146491},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[5198,146494],{"style":129442,"src":146495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[5198,146497],{"style":129442,"src":146498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,146500,146501],{},"去除高亮：",[19,146503,146504],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,146506,146507],{},"-webkit- tap-highlight-color: transparent;",[14,146509,146511],{"id":146510},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[5198,146513],{"style":129442,"src":146514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,146516,146518],{"id":146517},"_204-流式布局案例","20.4 流式布局案例",[19,146520,3917],{},[19,146522,146523],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,146525,146526],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,146528,146529],{},"图片格式：",[5198,146531],{"style":129442,"src":146532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,146534,138629],{},[5198,146536],{"style":129442,"src":146537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,146539,142956],{},[26,146541,146542],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,146543,146544],{"__ignoreMap":31},[36,146545,146546,146548,146550,146552,146554,146556,146558,146560,146562,146564,146566,146568],{"class":38,"line":39},[36,146547,393],{"class":42},[36,146549,5198],{"class":54857},[36,146551,58795],{"class":101},[36,146553,47],{"class":42},[36,146555,137103],{"class":105},[36,146557,58803],{"class":101},[36,146559,47],{"class":42},[36,146561,137110],{"class":105},[36,146563,137113],{"class":101},[36,146565,47],{"class":42},[36,146567,137118],{"class":105},[36,146569,54864],{"class":42},[19,146571,143045],{},[26,146573,146574],{"className":130333,"code":137088,"language":130335,"meta":31,"style":31},[33,146575,146576],{"__ignoreMap":31},[36,146577,146578,146580,146582,146584,146586,146588,146590,146592,146594,146596,146598,146600],{"class":38,"line":39},[36,146579,393],{"class":42},[36,146581,5198],{"class":54857},[36,146583,58795],{"class":101},[36,146585,47],{"class":42},[36,146587,137103],{"class":105},[36,146589,58803],{"class":101},[36,146591,47],{"class":42},[36,146593,137110],{"class":105},[36,146595,137113],{"class":101},[36,146597,47],{"class":42},[36,146599,137118],{"class":105},[36,146601,54864],{"class":42},[14,146603,146605],{"id":146604},"_205-flex布局","20.5 flex布局",[5198,146607],{"style":129442,"src":146608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[318,146610,146612],{"id":146611},"_2051-布局原理","20.5.1 布局原理",[19,146614,146615],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[4875,146617,146618,146621,146624,146627,146630],{},[214,146619,146620],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[214,146622,146623],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[214,146625,146626],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[214,146628,146629],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[214,146631,146632],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,146634,146635],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,146637,146638],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[26,146640,146642],{"className":129586,"code":146641,"language":129588,"meta":31,"style":31},"\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",[33,146643,146644,146649,146656,146666,146678,146689,146700,146711],{"__ignoreMap":31},[36,146645,146646],{"class":38,"line":39},[36,146647,146648],{"class":3943},"\u002F* Flex 弹性布局 *\u002F\n",[36,146650,146651,146654],{"class":38,"line":53},[36,146652,146653],{"class":101},".container",[36,146655,19228],{"class":42},[36,146657,146658,146660,146662,146664],{"class":38,"line":196},[36,146659,131202],{"class":112},[36,146661,54994],{"class":42},[36,146663,55034],{"class":112},[36,146665,5029],{"class":42},[36,146667,146668,146671,146673,146676],{"class":38,"line":642},[36,146669,146670],{"class":112},"  flex-direction",[36,146672,54994],{"class":42},[36,146674,146675],{"class":112},"row",[36,146677,5029],{"class":42},[36,146679,146680,146683,146685,146687],{"class":38,"line":655},[36,146681,146682],{"class":112},"  justify-content",[36,146684,54994],{"class":42},[36,146686,55225],{"class":112},[36,146688,5029],{"class":42},[36,146690,146691,146694,146696,146698],{"class":38,"line":662},[36,146692,146693],{"class":112},"  align-items",[36,146695,54994],{"class":42},[36,146697,55149],{"class":112},[36,146699,5029],{"class":42},[36,146701,146702,146705,146707,146709],{"class":38,"line":667},[36,146703,146704],{"class":112},"  flex-wrap",[36,146706,54994],{"class":42},[36,146708,82164],{"class":112},[36,146710,5029],{"class":42},[36,146712,146713],{"class":38,"line":679},[36,146714,5300],{"class":42},[19,146716,74007],{},[19,146718,146719],{},".form-item .male-label {",[19,146721,146722],{},"   margin-right: 20px;",[19,146724,146725],{},"   display: inline-flex;",[19,146727,146728],{},"   align-items: center;",[19,146730,4815],{},[5198,146732],{"style":129442,"src":146733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[5198,146735],{"style":129442,"src":146736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[318,146738,146740],{"id":146739},"_2052-常见父项属性","20.5.2 常见父项属性",[211,146742,146743,146746,146749,146752,146755,146758,146761],{},[214,146744,146745],{},"flex-direction：设置主轴的方向",[214,146747,146748],{},"justify-content：设置主轴上的子元素排列方式",[214,146750,146751],{},"flex-wrap：设置子元素是否换行",[214,146753,146754],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[214,146756,146757],{},"align-items：设置侧轴上的子元素排列方式（单行）",[214,146759,146760],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[214,146762,146745],{},[5198,146764],{"style":129442,"src":146765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[5198,146767],{"style":129442,"src":146768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[211,146770,146771],{"start":53},[214,146772,146748],{},[5198,146774],{"style":129442,"src":146775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,146777,146778,146781],{},[33,146779,146780],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,146783,146784],{},"跟着主轴走",[211,146786,146787],{"start":196},[214,146788,146751],{},[5198,146790],{"style":129442,"src":146791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,146793,146794],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[211,146796,146797],{"start":642},[214,146798,146754],{},[5198,146800],{"style":129442,"src":146801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,146803,146804],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,146806,146807],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[211,146809,146810],{"start":655},[214,146811,146757],{},[5198,146813],{"style":129442,"src":146814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,146816,146817],{},"align-items与align-content之间的区别：",[19,146819,146820],{},"单找items，多找content",[5198,146822],{"style":129442,"src":146823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[211,146825,146826],{"start":662},[214,146827,146760],{},[5198,146829],{"style":129442,"src":146830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[318,146832,146834],{"id":146833},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[211,146836,146837],{},[214,146838,146839],{},[4027,146840,146841],{},"flex 属性",[19,146843,146844],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[5198,146846],{"style":129442,"src":146847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,146849,146850],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,146852,146853],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[211,146855,146856],{"start":53},[214,146857,146858,17454,146861],{},[4027,146859,146860],{},"align-self",[4027,146862,146863],{},"控制子项自己在侧轴上的排列方式",[5198,146865],{"style":129442,"src":146866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,146868,146869],{},"单个子盒子在父盒子侧轴上的排列方式",[211,146871,146872],{"start":196},[214,146873,146874,146876],{},[4027,146875,98848],{}," 属性定义项目的排列顺序",[5198,146878],{"style":129442,"src":146879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[318,146881,146883],{"id":146882},"_2054-背景线性渐变","20.5.4 背景线性渐变",[5198,146885],{"style":129442,"src":146886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,146888,146889],{},"必须要添加浏览器的私有前缀",[318,146891,146893],{"id":146892},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,146895,146896],{},"学到最重要的知识：",[19,146898,146899],{},"flex处理这样的布局思路",[5198,146901],{"style":129442,"src":146902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[26,146904,146906],{"className":129586,"code":146905,"language":129588,"meta":31,"style":31},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[33,146907,146908,146914,146924,146934,146944],{"__ignoreMap":31},[36,146909,146910,146912],{"class":38,"line":39},[36,146911,146653],{"class":101},[36,146913,19228],{"class":42},[36,146915,146916,146918,146920,146922],{"class":38,"line":53},[36,146917,131202],{"class":112},[36,146919,54994],{"class":42},[36,146921,55034],{"class":112},[36,146923,5029],{"class":42},[36,146925,146926,146928,146930,146932],{"class":38,"line":196},[36,146927,146682],{"class":112},[36,146929,54994],{"class":42},[36,146931,55149],{"class":112},[36,146933,5029],{"class":42},[36,146935,146936,146938,146940,146942],{"class":38,"line":642},[36,146937,146693],{"class":112},[36,146939,54994],{"class":42},[36,146941,55149],{"class":112},[36,146943,5029],{"class":42},[36,146945,146946],{"class":38,"line":655},[36,146947,5300],{"class":42},[19,146949,146950],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,146952,146953],{},"使用属性选择器",[5198,146955],{"style":129442,"src":146956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,146958,72444],{},[26,146960,146962],{"className":130333,"code":146961,"language":130335,"meta":31,"style":31},"\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",[33,146963,146964,146969,146983,146988,147008,147013,147032,147037,147056,147061,147080],{"__ignoreMap":31},[36,146965,146966],{"class":38,"line":39},[36,146967,146968],{"class":3943},"\u003C!-- 携程网移动端案例结构 -->\n",[36,146970,146971,146973,146975,146977,146979,146981],{"class":38,"line":53},[36,146972,393],{"class":42},[36,146974,55168],{"class":54857},[36,146976,57043],{"class":101},[36,146978,47],{"class":42},[36,146980,95875],{"class":105},[36,146982,54864],{"class":42},[36,146984,146985],{"class":38,"line":196},[36,146986,146987],{"class":3943},"  \u003C!-- 搜索栏 -->\n",[36,146989,146990,146992,146994,146996,146998,147001,147004,147006],{"class":38,"line":642},[36,146991,55701],{"class":42},[36,146993,55168],{"class":54857},[36,146995,57043],{"class":101},[36,146997,47],{"class":42},[36,146999,147000],{"class":105},"\"search-index\"",[36,147002,147003],{"class":42},">...\u003C\u002F",[36,147005,55168],{"class":54857},[36,147007,54864],{"class":42},[36,147009,147010],{"class":38,"line":655},[36,147011,147012],{"class":3943},"  \u003C!-- 焦点图 -->\n",[36,147014,147015,147017,147019,147021,147023,147026,147028,147030],{"class":38,"line":662},[36,147016,55701],{"class":42},[36,147018,55168],{"class":54857},[36,147020,57043],{"class":101},[36,147022,47],{"class":42},[36,147024,147025],{"class":105},"\"focus\"",[36,147027,147003],{"class":42},[36,147029,55168],{"class":54857},[36,147031,54864],{"class":42},[36,147033,147034],{"class":38,"line":667},[36,147035,147036],{"class":3943},"  \u003C!-- 主导航 -->\n",[36,147038,147039,147041,147043,147045,147047,147050,147052,147054],{"class":38,"line":679},[36,147040,55701],{"class":42},[36,147042,55168],{"class":54857},[36,147044,57043],{"class":101},[36,147046,47],{"class":42},[36,147048,147049],{"class":105},"\"local-nav\"",[36,147051,147003],{"class":42},[36,147053,55168],{"class":54857},[36,147055,54864],{"class":42},[36,147057,147058],{"class":38,"line":685},[36,147059,147060],{"class":3943},"  \u003C!-- 子导航 -->\n",[36,147062,147063,147065,147067,147069,147071,147074,147076,147078],{"class":38,"line":691},[36,147064,55701],{"class":42},[36,147066,55168],{"class":54857},[36,147068,57043],{"class":101},[36,147070,47],{"class":42},[36,147072,147073],{"class":105},"\"nav-common\"",[36,147075,147003],{"class":42},[36,147077,55168],{"class":54857},[36,147079,54864],{"class":42},[36,147081,147082,147084,147086],{"class":38,"line":696},[36,147083,55342],{"class":42},[36,147085,55168],{"class":54857},[36,147087,54864],{"class":42},[19,147089,74007],{},[26,147091,147092],{"className":129586,"code":140038,"language":129588,"meta":31,"style":31},[33,147093,147094,147108,147124],{"__ignoreMap":31},[36,147095,147096,147098,147100,147102,147104,147106],{"class":38,"line":39},[36,147097,57378],{"class":54857},[36,147099,4760],{"class":42},[36,147101,106600],{"class":101},[36,147103,47],{"class":46},[36,147105,66254],{"class":105},[36,147107,140055],{"class":42},[36,147109,147110,147112,147114,147116,147118,147120,147122],{"class":38,"line":53},[36,147111,74450],{"class":112},[36,147113,54994],{"class":42},[36,147115,4092],{"class":112},[36,147117,55049],{"class":46},[36,147119,55078],{"class":112},[36,147121,133166],{"class":112},[36,147123,5029],{"class":42},[36,147125,147126],{"class":38,"line":196},[36,147127,5300],{"class":42},[19,147129,147130],{},"总代码和效果展示：",[5198,147132],{"style":129442,"src":147133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,147135,72444],{},[26,147137,147138],{"className":130333,"code":146961,"language":130335,"meta":31,"style":31},[33,147139,147140,147144,147158,147162,147180,147184,147202,147206,147224,147228,147246],{"__ignoreMap":31},[36,147141,147142],{"class":38,"line":39},[36,147143,146968],{"class":3943},[36,147145,147146,147148,147150,147152,147154,147156],{"class":38,"line":53},[36,147147,393],{"class":42},[36,147149,55168],{"class":54857},[36,147151,57043],{"class":101},[36,147153,47],{"class":42},[36,147155,95875],{"class":105},[36,147157,54864],{"class":42},[36,147159,147160],{"class":38,"line":196},[36,147161,146987],{"class":3943},[36,147163,147164,147166,147168,147170,147172,147174,147176,147178],{"class":38,"line":642},[36,147165,55701],{"class":42},[36,147167,55168],{"class":54857},[36,147169,57043],{"class":101},[36,147171,47],{"class":42},[36,147173,147000],{"class":105},[36,147175,147003],{"class":42},[36,147177,55168],{"class":54857},[36,147179,54864],{"class":42},[36,147181,147182],{"class":38,"line":655},[36,147183,147012],{"class":3943},[36,147185,147186,147188,147190,147192,147194,147196,147198,147200],{"class":38,"line":662},[36,147187,55701],{"class":42},[36,147189,55168],{"class":54857},[36,147191,57043],{"class":101},[36,147193,47],{"class":42},[36,147195,147025],{"class":105},[36,147197,147003],{"class":42},[36,147199,55168],{"class":54857},[36,147201,54864],{"class":42},[36,147203,147204],{"class":38,"line":667},[36,147205,147036],{"class":3943},[36,147207,147208,147210,147212,147214,147216,147218,147220,147222],{"class":38,"line":679},[36,147209,55701],{"class":42},[36,147211,55168],{"class":54857},[36,147213,57043],{"class":101},[36,147215,47],{"class":42},[36,147217,147049],{"class":105},[36,147219,147003],{"class":42},[36,147221,55168],{"class":54857},[36,147223,54864],{"class":42},[36,147225,147226],{"class":38,"line":685},[36,147227,147060],{"class":3943},[36,147229,147230,147232,147234,147236,147238,147240,147242,147244],{"class":38,"line":691},[36,147231,55701],{"class":42},[36,147233,55168],{"class":54857},[36,147235,57043],{"class":101},[36,147237,47],{"class":42},[36,147239,147073],{"class":105},[36,147241,147003],{"class":42},[36,147243,55168],{"class":54857},[36,147245,54864],{"class":42},[36,147247,147248,147250,147252],{"class":38,"line":696},[36,147249,55342],{"class":42},[36,147251,55168],{"class":54857},[36,147253,54864],{"class":42},[19,147255,74007],{},[26,147257,147258],{"className":130333,"code":133690,"language":130335,"meta":31,"style":31},[33,147259,147260,147264,147278,147282],{"__ignoreMap":31},[36,147261,147262],{"class":38,"line":39},[36,147263,133697],{"class":3943},[36,147265,147266,147268,147270,147272,147274,147276],{"class":38,"line":53},[36,147267,393],{"class":42},[36,147269,55168],{"class":54857},[36,147271,57043],{"class":101},[36,147273,47],{"class":42},[36,147275,133710],{"class":105},[36,147277,54864],{"class":42},[36,147279,147280],{"class":38,"line":196},[36,147281,133717],{"class":42},[36,147283,147284,147286,147288],{"class":38,"line":642},[36,147285,55342],{"class":42},[36,147287,55168],{"class":54857},[36,147289,54864],{"class":42},[3785,147291,140987],{},{"title":31,"searchDepth":53,"depth":53,"links":147293},[147294,147295,147299,147300,147301],{"id":146438,"depth":53,"text":146439},{"id":146470,"depth":53,"text":146471,"children":147296},[147297,147298],{"id":146474,"depth":196,"text":146475},{"id":146491,"depth":196,"text":146492},{"id":146510,"depth":53,"text":146511},{"id":146517,"depth":53,"text":146518},{"id":146604,"depth":53,"text":146605,"children":147302},[147303,147304,147305,147306,147307],{"id":146611,"depth":196,"text":146612},{"id":146739,"depth":196,"text":146740},{"id":146833,"depth":196,"text":146834},{"id":146882,"depth":196,"text":146883},{"id":146892,"depth":196,"text":146893},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":146430,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":147314,"title":147315,"body":147316,"description":26998,"extension":3817,"meta":148543,"navigation":658,"path":148544,"seo":148545,"stem":148546,"__hash__":148547},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":147317,"toc":148521},[147318,147321,147325,147329,147332,147335,147339,147344,147347,147350,147353,147356,147359,147416,147419,147424,147427,147430,147434,147445,147449,147452,147455,147462,147467,147471,147474,147480,147483,147487,147490,147497,147500,147503,147510,147513,147520,147523,147526,147533,147536,147539,147541,147558,147562,147565,147568,147571,147575,147578,147581,147584,147587,147590,147593,147595,147598,147601,147663,147666,147776,147783,147789,147792,147795,147799,147802,147806,147811,147814,147821,147824,147830,147835,147838,147841,147844,147847,147850,147853,147856,147859,147915,147917,147943,147947,147950,147953,147956,147964,147967,147970,147974,148030,148033,148037,148043,148054,148057,148062,148065,148068,148074,148077,148080,148083,148086,148089,148092,148095,148098,148123,148129,148132,148135,148138,148141,148144,148147,148152,148155,148158,148161,148169,148172,148179,148182,148185,148187,148211,148213,148216,148219,148222,148225,148228,148231,148234,148268,148271,148274,148308,148315,148318,148321,148324,148327,148330,148333,148340,148343,148346,148349,148352,148359,148362,148365,148372,148375,148378,148382,148385,148388,148391,148394,148397,148400,148403,148406,148408,148432,148434,148458,148462,148473,148476,148479,148482,148485,148488,148491,148494,148497,148500,148503,148506,148509,148512,148515,148518],[10,147319,147315],{"id":147320},"_21-移动端布局实战下篇",[14,147322,147324],{"id":147323},"_211-rem适配布局","21.1 rem适配布局",[318,147326,147328],{"id":147327},"_2111-rem单位","21.1.1 rem单位",[5198,147330],{"style":129442,"src":147331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,147333,147334],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[318,147336,147338],{"id":147337},"_2112-媒体查询","21.1.2 媒体查询",[211,147340,147341],{},[214,147342,147343],{},"参数介绍",[5198,147345],{"style":129442,"src":147346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[5198,147348],{"style":129442,"src":147349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[5198,147351],{"style":129442,"src":147352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[5198,147354],{"style":129442,"src":147355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[5198,147357],{"style":129442,"src":147358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[26,147360,147362],{"className":129586,"code":147361,"language":129588,"meta":31,"style":31},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[33,147363,147364,147369,147388,147395,147408,147412],{"__ignoreMap":31},[36,147365,147366],{"class":38,"line":39},[36,147367,147368],{"class":3943},"\u002F* 媒体查询 *\u002F\n",[36,147370,147371,147374,147376,147379,147381,147384,147386],{"class":38,"line":53},[36,147372,147373],{"class":46},"@media",[36,147375,5386],{"class":42},[36,147377,147378],{"class":112},"max-width",[36,147380,54994],{"class":42},[36,147382,147383],{"class":112},"768",[36,147385,55049],{"class":46},[36,147387,16102],{"class":42},[36,147389,147390,147393],{"class":38,"line":196},[36,147391,147392],{"class":101},"  .container",[36,147394,19228],{"class":42},[36,147396,147397,147400,147402,147404,147406],{"class":38,"line":642},[36,147398,147399],{"class":112},"    width",[36,147401,54994],{"class":42},[36,147403,4186],{"class":112},[36,147405,4203],{"class":46},[36,147407,5029],{"class":42},[36,147409,147410],{"class":38,"line":655},[36,147411,130382],{"class":42},[36,147413,147414],{"class":38,"line":662},[36,147415,5300],{"class":42},[19,147417,147418],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[211,147420,147421],{"start":53},[214,147422,147423],{},"引入资源",[5198,147425],{"style":129442,"src":147426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,147428,147429],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[318,147431,147433],{"id":147432},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[4875,147435,147436,147439,147442],{},[214,147437,147438],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[214,147440,147441],{},"媒体查询可以根据不同设备宽度来修改样式",[214,147443,147444],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,147446,147448],{"id":147447},"_212-less基础","21.2 Less基础",[19,147450,147451],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,147453,147454],{},"Less可以解决该问题，它是css的扩展语言",[19,147456,147457,147458],{},"Less中文网址： ",[4113,147459,147460],{"href":147460,"rel":147461},"http:\u002F\u002Flesscss.cn\u002F",[27481],[19,147463,147464],{},[4027,147465,147466],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[318,147468,147470],{"id":147469},"_2121-less安装","21.2.1 less安装",[19,147472,147473],{},"如果使用vscode，则无需进行下方安装步骤",[19,147475,147476],{},[4113,147477,147478],{"href":147478,"rel":147479},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[27481],[5198,147481],{"style":129442,"src":147482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[318,147484,147486],{"id":147485},"_2122-less使用","21.2.2 less使用",[19,147488,147489],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[211,147491,147492],{},[214,147493,147494],{},[4027,147495,147496],{},"Less 变量",[5198,147498],{"style":129442,"src":147499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[5198,147501],{"style":129442,"src":147502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[211,147504,147505],{"start":53},[214,147506,147507],{},[4027,147508,147509],{},"Less 编译",[5198,147511],{"style":129442,"src":147512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[211,147514,147515],{"start":196},[214,147516,147517],{},[4027,147518,147519],{},"Less 嵌套",[5198,147521],{"style":129442,"src":147522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[5198,147524],{"style":129442,"src":147525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[211,147527,147528],{"start":642},[214,147529,147530],{},[4027,147531,147532],{},"Less 运算",[5198,147534],{"style":129442,"src":147535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,147537,147538],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,147540,3917],{},[4875,147542,147543,147546,147549,147552,147555],{},[214,147544,147545],{},"乘号（*）和除号（\u002F）的写法",[214,147547,147548],{},"运算符中间左右有个空格隔开 1px + 5",[214,147550,147551],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[214,147553,147554],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[214,147556,147557],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,147559,147561],{"id":147560},"_213-rem-适配方案","21.3 rem 适配方案",[19,147563,147564],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,147566,147567],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[5198,147569],{"style":129442,"src":147570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[318,147572,147574],{"id":147573},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,147576,147577],{},"rem + 媒体查询 + less 技术",[5198,147579],{"style":129442,"src":147580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,147582,147583],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,147585,147586],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[5198,147588],{"style":129442,"src":147589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,147591,147592],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,147594,447],{},[5198,147596],{"style":129442,"src":147597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,147599,147600],{},"index.html:",[26,147602,147604],{"className":129586,"code":147603,"language":129588,"meta":31,"style":31},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[33,147605,147606,147611,147617,147633,147637,147643,147659],{"__ignoreMap":31},[36,147607,147608],{"class":38,"line":39},[36,147609,147610],{"class":3943},"\u002F* rem 适配方案 *\u002F\n",[36,147612,147613,147615],{"class":38,"line":53},[36,147614,54192],{"class":54857},[36,147616,19228],{"class":42},[36,147618,147619,147621,147623,147626,147628,147630],{"class":38,"line":196},[36,147620,74180],{"class":112},[36,147622,54994],{"class":42},[36,147624,147625],{"class":112},"62.5",[36,147627,4203],{"class":46},[36,147629,133449],{"class":42},[36,147631,147632],{"class":3943},"\u002F* 1rem = 10px *\u002F\n",[36,147634,147635],{"class":38,"line":642},[36,147636,5300],{"class":42},[36,147638,147639,147641],{"class":38,"line":655},[36,147640,133434],{"class":101},[36,147642,19228],{"class":42},[36,147644,147645,147647,147649,147651,147654,147656],{"class":38,"line":662},[36,147646,74122],{"class":112},[36,147648,54994],{"class":42},[36,147650,554],{"class":112},[36,147652,147653],{"class":46},"rem",[36,147655,133449],{"class":42},[36,147657,147658],{"class":3943},"\u002F* 100px *\u002F\n",[36,147660,147661],{"class":38,"line":667},[36,147662,5300],{"class":42},[19,147664,147665],{},"common.less",[26,147667,147669],{"className":129586,"code":147668,"language":129588,"meta":31,"style":31},"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",[33,147670,147671,147677,147692,147696,147702,147716,147720,147724,147728,147734,147748,147752,147758,147772],{"__ignoreMap":31},[36,147672,147673,147675],{"class":38,"line":39},[36,147674,54192],{"class":54857},[36,147676,19228],{"class":42},[36,147678,147679,147681,147683,147685,147687,147689],{"class":38,"line":53},[36,147680,74180],{"class":112},[36,147682,54994],{"class":42},[36,147684,147625],{"class":112},[36,147686,4203],{"class":46},[36,147688,29680],{"class":42},[36,147690,147691],{"class":3943},"\u002F* 10px *\u002F\n",[36,147693,147694],{"class":38,"line":196},[36,147695,5300],{"class":42},[36,147697,147698,147700],{"class":38,"line":642},[36,147699,55168],{"class":54857},[36,147701,19228],{"class":42},[36,147703,147704,147706,147708,147710,147712,147714],{"class":38,"line":655},[36,147705,74122],{"class":112},[36,147707,54994],{"class":42},[36,147709,554],{"class":112},[36,147711,147653],{"class":46},[36,147713,29680],{"class":42},[36,147715,147658],{"class":3943},[36,147717,147718],{"class":38,"line":662},[36,147719,5300],{"class":42},[36,147721,147722],{"class":38,"line":667},[36,147723,139047],{"class":42},[36,147725,147726],{"class":38,"line":679},[36,147727,147610],{"class":3943},[36,147729,147730,147732],{"class":38,"line":685},[36,147731,54192],{"class":54857},[36,147733,19228],{"class":42},[36,147735,147736,147738,147740,147742,147744,147746],{"class":38,"line":691},[36,147737,74180],{"class":112},[36,147739,54994],{"class":42},[36,147741,147625],{"class":112},[36,147743,4203],{"class":46},[36,147745,133449],{"class":42},[36,147747,147632],{"class":3943},[36,147749,147750],{"class":38,"line":696},[36,147751,5300],{"class":42},[36,147753,147754,147756],{"class":38,"line":702},[36,147755,133434],{"class":101},[36,147757,19228],{"class":42},[36,147759,147760,147762,147764,147766,147768,147770],{"class":38,"line":708},[36,147761,74122],{"class":112},[36,147763,54994],{"class":42},[36,147765,554],{"class":112},[36,147767,147653],{"class":46},[36,147769,133449],{"class":42},[36,147771,147658],{"class":3943},[36,147773,147774],{"class":38,"line":713},[36,147775,5300],{"class":42},[19,147777,147778,147779,147782],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[27175,147780,147781],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[26,147784,147787],{"className":147785,"code":147786,"language":80},[78],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[33,147788,147786],{"__ignoreMap":31},[19,147790,147791],{},"less保存时会自动变成.css文件",[19,147793,147794],{},"好好搞懂上述代码写法",[318,147796,147798],{"id":147797},"_2132-样式导入样式","21.3.2 样式导入样式",[5198,147800],{"style":129442,"src":147801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[318,147803,147805],{"id":147804},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[211,147807,147808],{},[214,147809,147810],{},"准备工作",[5198,147812],{"style":129442,"src":147813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,147815,147816,147817],{},"github地址：",[4113,147818,147819],{"href":147819,"rel":147820},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[27481],[19,147822,147823],{},"下载之后，将index.js文件拖到项目中就可以了",[19,147825,147826,147827],{},"js文件引入到index.html中使用的是",[33,147828,147829],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[211,147831,147832],{"start":53},[214,147833,147834],{},"vscode插件",[5198,147836],{"style":129442,"src":147837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,147839,147840],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,147842,147843],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[5198,147845],{"style":129442,"src":147846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,147848,147849],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[5198,147851],{"style":129442,"src":147852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,147854,147855],{},"修改成75就可以，alt+z为快捷键",[19,147857,147858],{},"index.css：",[26,147860,147861],{"className":129586,"code":147603,"language":129588,"meta":31,"style":31},[33,147862,147863,147867,147873,147887,147891,147897,147911],{"__ignoreMap":31},[36,147864,147865],{"class":38,"line":39},[36,147866,147610],{"class":3943},[36,147868,147869,147871],{"class":38,"line":53},[36,147870,54192],{"class":54857},[36,147872,19228],{"class":42},[36,147874,147875,147877,147879,147881,147883,147885],{"class":38,"line":196},[36,147876,74180],{"class":112},[36,147878,54994],{"class":42},[36,147880,147625],{"class":112},[36,147882,4203],{"class":46},[36,147884,133449],{"class":42},[36,147886,147632],{"class":3943},[36,147888,147889],{"class":38,"line":642},[36,147890,5300],{"class":42},[36,147892,147893,147895],{"class":38,"line":655},[36,147894,133434],{"class":101},[36,147896,19228],{"class":42},[36,147898,147899,147901,147903,147905,147907,147909],{"class":38,"line":662},[36,147900,74122],{"class":112},[36,147902,54994],{"class":42},[36,147904,554],{"class":112},[36,147906,147653],{"class":46},[36,147908,133449],{"class":42},[36,147910,147658],{"class":3943},[36,147912,147913],{"class":38,"line":667},[36,147914,5300],{"class":42},[19,147916,147600],{},[26,147918,147919],{"className":129586,"code":129990,"language":129588,"meta":31,"style":31},[33,147920,147921,147927,147939],{"__ignoreMap":31},[36,147922,147923,147925],{"class":38,"line":39},[36,147924,55357],{"class":54857},[36,147926,19228],{"class":42},[36,147928,147929,147931,147933,147935,147937],{"class":38,"line":53},[36,147930,74180],{"class":112},[36,147932,54994],{"class":42},[36,147934,4472],{"class":112},[36,147936,55049],{"class":46},[36,147938,5029],{"class":42},[36,147940,147941],{"class":38,"line":196},[36,147942,5300],{"class":42},[14,147944,147946],{"id":147945},"_214-响应式开发","21.4 响应式开发",[19,147948,147949],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[5198,147951],{"style":129442,"src":147952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,147954,147955],{},"做法：",[4875,147957,147958,147961],{},[214,147959,147960],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[214,147962,147963],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[5198,147965],{"style":129442,"src":147966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,147968,147969],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[318,147971,147973],{"id":147972},"_2141-简单代码示范","21.4.1 简单代码示范",[26,147975,147976],{"className":129586,"code":147603,"language":129588,"meta":31,"style":31},[33,147977,147978,147982,147988,148002,148006,148012,148026],{"__ignoreMap":31},[36,147979,147980],{"class":38,"line":39},[36,147981,147610],{"class":3943},[36,147983,147984,147986],{"class":38,"line":53},[36,147985,54192],{"class":54857},[36,147987,19228],{"class":42},[36,147989,147990,147992,147994,147996,147998,148000],{"class":38,"line":196},[36,147991,74180],{"class":112},[36,147993,54994],{"class":42},[36,147995,147625],{"class":112},[36,147997,4203],{"class":46},[36,147999,133449],{"class":42},[36,148001,147632],{"class":3943},[36,148003,148004],{"class":38,"line":642},[36,148005,5300],{"class":42},[36,148007,148008,148010],{"class":38,"line":655},[36,148009,133434],{"class":101},[36,148011,19228],{"class":42},[36,148013,148014,148016,148018,148020,148022,148024],{"class":38,"line":662},[36,148015,74122],{"class":112},[36,148017,54994],{"class":42},[36,148019,554],{"class":112},[36,148021,147653],{"class":46},[36,148023,133449],{"class":42},[36,148025,147658],{"class":3943},[36,148027,148028],{"class":38,"line":667},[36,148029,5300],{"class":42},[19,148031,148032],{},"父盒子一般命名为container",[318,148034,148036],{"id":148035},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,148038,148039,148040],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[4027,148041,148042],{},"使得 Web 开发更加快捷",[4875,148044,148045],{},[214,148046,148047,148048],{},"官网：",[4027,148049,148050],{},[4113,148051,148052],{"href":148052,"rel":148053},"http:\u002F\u002Fgetbootstrap.com\u002F",[27481],[19,148055,148056],{},"可以直接去官网拿现成的东西",[211,148058,148059],{},[214,148060,148061],{},"Bootstrap的使用",[19,148063,148064],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,148066,148067],{},"Bootstrap 使用四步曲：",[19,148069,148070,148073],{},[4027,148071,148072],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[5198,148075],{"style":129442,"src":148076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,148078,148079],{},"打开Bootstrap官网，然后下载",[5198,148081],{"style":129442,"src":148082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[5198,148084],{"style":129442,"src":148085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,148087,148088],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,148090,148091],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,148093,148094],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[5198,148096],{"style":129442,"src":148097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[26,148099,148101],{"className":129586,"code":148100,"language":129588,"meta":31,"style":31},".center {\n  color: red;\n}\n",[33,148102,148103,148109,148119],{"__ignoreMap":31},[36,148104,148105,148107],{"class":38,"line":39},[36,148106,129877],{"class":101},[36,148108,19228],{"class":42},[36,148110,148111,148113,148115,148117],{"class":38,"line":53},[36,148112,74459],{"class":112},[36,148114,54994],{"class":42},[36,148116,60976],{"class":112},[36,148118,5029],{"class":42},[36,148120,148121],{"class":38,"line":196},[36,148122,5300],{"class":42},[19,148124,148125,148128],{},[33,148126,148127],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[5198,148130],{"style":129442,"src":148131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[5198,148133],{"style":129442,"src":148134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[5198,148136],{"style":129442,"src":148137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,148139,148140],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[5198,148142],{"style":129442,"src":148143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,148145,148146],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[211,148148,148149],{"start":53},[214,148150,148151],{},"布局容器",[5198,148153],{"style":129442,"src":148154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,148156,148157],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,148159,148160],{},"container-fluid用于移动式布局比较方便",[211,148162,148163],{"start":196},[214,148164,148165,148166],{},"bootstrap ",[4027,148167,148168],{},"栅格系统原理",[5198,148170],{"style":129442,"src":148171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[211,148173,148174],{"start":642},[214,148175,148176],{},[4027,148177,148178],{},"栅格选项参数",[5198,148180],{"style":129442,"src":148181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,148183,148184],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,148186,447],{},[26,148188,148189],{"className":129586,"code":148100,"language":129588,"meta":31,"style":31},[33,148190,148191,148197,148207],{"__ignoreMap":31},[36,148192,148193,148195],{"class":38,"line":39},[36,148194,129877],{"class":101},[36,148196,19228],{"class":42},[36,148198,148199,148201,148203,148205],{"class":38,"line":53},[36,148200,74459],{"class":112},[36,148202,54994],{"class":42},[36,148204,60976],{"class":112},[36,148206,5029],{"class":42},[36,148208,148209],{"class":38,"line":196},[36,148210,5300],{"class":42},[19,148212,138629],{},[5198,148214],{"style":129442,"src":148215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,148217,148218],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,148220,148221],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,148223,148224],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,148226,148227],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,148229,148230],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,148232,148233],{},"汇总展示说明：",[26,148235,148236],{"className":130333,"code":133690,"language":130335,"meta":31,"style":31},[33,148237,148238,148242,148256,148260],{"__ignoreMap":31},[36,148239,148240],{"class":38,"line":39},[36,148241,133697],{"class":3943},[36,148243,148244,148246,148248,148250,148252,148254],{"class":38,"line":53},[36,148245,393],{"class":42},[36,148247,55168],{"class":54857},[36,148249,57043],{"class":101},[36,148251,47],{"class":42},[36,148253,133710],{"class":105},[36,148255,54864],{"class":42},[36,148257,148258],{"class":38,"line":196},[36,148259,133717],{"class":42},[36,148261,148262,148264,148266],{"class":38,"line":642},[36,148263,55342],{"class":42},[36,148265,55168],{"class":54857},[36,148267,54864],{"class":42},[5198,148269],{"style":129442,"src":148270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,148272,148273],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[26,148275,148276],{"className":130333,"code":133690,"language":130335,"meta":31,"style":31},[33,148277,148278,148282,148296,148300],{"__ignoreMap":31},[36,148279,148280],{"class":38,"line":39},[36,148281,133697],{"class":3943},[36,148283,148284,148286,148288,148290,148292,148294],{"class":38,"line":53},[36,148285,393],{"class":42},[36,148287,55168],{"class":54857},[36,148289,57043],{"class":101},[36,148291,47],{"class":42},[36,148293,133710],{"class":105},[36,148295,54864],{"class":42},[36,148297,148298],{"class":38,"line":196},[36,148299,133717],{"class":42},[36,148301,148302,148304,148306],{"class":38,"line":642},[36,148303,55342],{"class":42},[36,148305,55168],{"class":54857},[36,148307,54864],{"class":42},[211,148309,148310],{"start":655},[214,148311,148312],{},[4027,148313,148314],{},"列嵌套",[5198,148316],{"style":129442,"src":148317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,148319,148320],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,148322,148323],{},"没加row内部这样：",[5198,148325],{"style":129442,"src":148326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,148328,148329],{},"加上row之后内部为：",[5198,148331],{"style":129442,"src":148332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[211,148334,148335],{"start":662},[214,148336,148337],{},[4027,148338,148339],{},"列偏移",[5198,148341],{"style":129442,"src":148342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,148344,148345],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,148347,148348],{},"要加偏移量，即偏移份数",[19,148350,148351],{},"偏移的份数=12-两个盒子的份数",[211,148353,148354],{"start":667},[214,148355,148356],{},[4027,148357,148358],{},"列排序",[5198,148360],{"style":129442,"src":148361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,148363,148364],{},"pull拉左；push推右",[211,148366,148367],{"start":679},[214,148368,148369],{},[4027,148370,148371],{},"响应式工具",[5198,148373],{"style":129442,"src":148374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,148376,148377],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[318,148379,148381],{"id":148380},"_2143-响应式小项目","21.4.3 响应式小项目",[19,148383,148384],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,148386,148387],{},"ul {",[19,148389,148390],{},"list-style: none;",[19,148392,148393],{},"margin:0;",[19,148395,148396],{},"padding:0; }",[5198,148398],{"style":129442,"src":148399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[5198,148401],{"style":129442,"src":148402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,148404,148405],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,148407,72444],{},[26,148409,148410],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},[33,148411,148412,148418,148428],{"__ignoreMap":31},[36,148413,148414,148416],{"class":38,"line":39},[36,148415,133434],{"class":101},[36,148417,19228],{"class":42},[36,148419,148420,148422,148424,148426],{"class":38,"line":53},[36,148421,134066],{"class":112},[36,148423,54994],{"class":42},[36,148425,259],{"class":112},[36,148427,5029],{"class":42},[36,148429,148430],{"class":38,"line":196},[36,148431,5300],{"class":42},[19,148433,74007],{},[26,148435,148436],{"className":129586,"code":142256,"language":129588,"meta":31,"style":31},[33,148437,148438,148444,148454],{"__ignoreMap":31},[36,148439,148440,148442],{"class":38,"line":39},[36,148441,133434],{"class":101},[36,148443,19228],{"class":42},[36,148445,148446,148448,148450,148452],{"class":38,"line":53},[36,148447,134066],{"class":112},[36,148449,54994],{"class":42},[36,148451,259],{"class":112},[36,148453,5029],{"class":42},[36,148455,148456],{"class":38,"line":196},[36,148457,5300],{"class":42},[14,148459,148461],{"id":148460},"_215-swiper-插件使用","21.5 swiper 插件使用",[4875,148463,148464,148467,148470],{},[214,148465,148466],{},"下载需要的css和js文件html页面中 引入相关文件",[214,148468,148469],{},"官网找到类似案例，复制html结构，css样式 js 语法",[214,148471,148472],{},"根据需求定制修改模块",[5198,148474],{"style":129442,"src":148475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,148477,148478],{},"解压后将这两部分放到项目中",[5198,148480],{"style":129442,"src":148481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,148483,148484],{},"这个插件可以帮助我们实现轮播图效果",[19,148486,148487],{},"用法：",[5198,148489],{"style":129442,"src":148490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,148492,148493],{},"找到自己喜欢的",[5198,148495],{"style":129442,"src":148496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,148498,148499],{},"右键，查看网页源代码",[5198,148501],{"style":129442,"src":148502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,148504,148505],{},"复制人家的结构内容",[19,148507,148508],{},"然后去看API文档：",[5198,148510],{"style":129442,"src":148511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,148513,148514],{},"可以看看如何修改样式",[19,148516,148517],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[3785,148519,148520],{},"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":31,"searchDepth":53,"depth":53,"links":148522},[148523,148528,148532,148537,148542],{"id":147323,"depth":53,"text":147324,"children":148524},[148525,148526,148527],{"id":147327,"depth":196,"text":147328},{"id":147337,"depth":196,"text":147338},{"id":147432,"depth":196,"text":147433},{"id":147447,"depth":53,"text":147448,"children":148529},[148530,148531],{"id":147469,"depth":196,"text":147470},{"id":147485,"depth":196,"text":147486},{"id":147560,"depth":53,"text":147561,"children":148533},[148534,148535,148536],{"id":147573,"depth":196,"text":147574},{"id":147797,"depth":196,"text":147798},{"id":147804,"depth":196,"text":147805},{"id":147945,"depth":53,"text":147946,"children":148538},[148539,148540,148541],{"id":147972,"depth":196,"text":147973},{"id":148035,"depth":196,"text":148036},{"id":148380,"depth":196,"text":148381},{"id":148460,"depth":53,"text":148461},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":147315,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":148549,"title":148550,"body":148551,"description":26998,"extension":3817,"meta":148771,"navigation":658,"path":148772,"seo":148773,"stem":148774,"__hash__":148775},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":148552,"toc":148767},[148553,148556,148560,148563,148578,148583,148586,148591,148626,148631,148643,148648,148661,148666,148683,148688,148708,148713,148731,148734,148737,148740,148743,148747,148750,148753,148756,148759,148762,148765],[10,148554,148550],{"id":148555},"_22-代码提交与新型相对单位",[14,148557,148559],{"id":148558},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,148561,148562],{},"法1：",[211,148564,148565,148572,148575],{},[214,148566,148567,148568],{},"登录网站注册：",[4113,148569,148570],{"href":148570,"rel":148571},"https:\u002F\u002Fgitee.com\u002F",[27481],[214,148573,148574],{},"码云创建新的仓库",[214,148576,148577],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[4875,148579,148580],{},[214,148581,148582],{},"在网站根目录右键-- Git Bash Here",[5198,148584],{"style":129442,"src":148585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[4875,148587,148588],{},[214,148589,148590],{},"如果是第一次利用git提交，请配置好全局选项",[26,148592,148594],{"className":120330,"code":148593,"language":120332,"meta":31,"style":31},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[33,148595,148596,148612],{"__ignoreMap":31},[36,148597,148598,148601,148603,148606,148609],{"class":38,"line":39},[36,148599,148600],{"class":101},"git",[36,148602,122753],{"class":105},[36,148604,148605],{"class":112}," --global",[36,148607,148608],{"class":105}," user.name",[36,148610,148611],{"class":105}," \"你的名字\"\n",[36,148613,148614,148616,148618,148620,148623],{"class":38,"line":53},[36,148615,148600],{"class":101},[36,148617,122753],{"class":105},[36,148619,148605],{"class":112},[36,148621,148622],{"class":105}," user.email",[36,148624,148625],{"class":105}," \"你的邮箱\"\n",[4875,148627,148628],{},[214,148629,148630],{},"初始化仓库",[26,148632,148634],{"className":120330,"code":148633,"language":120332,"meta":31,"style":31},"git init\n",[33,148635,148636],{"__ignoreMap":31},[36,148637,148638,148640],{"class":38,"line":39},[36,148639,148600],{"class":101},[36,148641,148642],{"class":105}," init\n",[4875,148644,148645],{},[214,148646,148647],{},"把本地文件放到暂存区",[26,148649,148651],{"className":120330,"code":148650,"language":120332,"meta":31,"style":31},"git add .\n",[33,148652,148653],{"__ignoreMap":31},[36,148654,148655,148657,148659],{"class":38,"line":39},[36,148656,148600],{"class":101},[36,148658,8903],{"class":105},[36,148660,32351],{"class":105},[4875,148662,148663],{},[214,148664,148665],{},"把本地文件放到本地仓库里面",[26,148667,148669],{"className":120330,"code":148668,"language":120332,"meta":31,"style":31},"git commit -m \"first commit\"\n",[33,148670,148671],{"__ignoreMap":31},[36,148672,148673,148675,148678,148680],{"class":38,"line":39},[36,148674,148600],{"class":101},[36,148676,148677],{"class":105}," commit",[36,148679,104422],{"class":112},[36,148681,148682],{"class":105}," \"first commit\"\n",[4875,148684,148685],{},[214,148686,148687],{},"链接远程仓库",[26,148689,148691],{"className":120330,"code":148690,"language":120332,"meta":31,"style":31},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[33,148692,148693],{"__ignoreMap":31},[36,148694,148695,148697,148700,148702,148705],{"class":38,"line":39},[36,148696,148600],{"class":101},[36,148698,148699],{"class":105}," remote",[36,148701,8903],{"class":105},[36,148703,148704],{"class":105}," origin",[36,148706,148707],{"class":105}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[4875,148709,148710],{},[214,148711,148712],{},"把本地仓库的文件推送到远程仓库 push",[26,148714,148716],{"className":120330,"code":148715,"language":120332,"meta":31,"style":31},"git push -u origin master\n",[33,148717,148718],{"__ignoreMap":31},[36,148719,148720,148722,148724,148726,148728],{"class":38,"line":39},[36,148721,148600],{"class":101},[36,148723,32626],{"class":105},[36,148725,31901],{"class":112},[36,148727,148704],{"class":105},[36,148729,148730],{"class":105}," master\n",[5198,148732],{"style":129442,"src":148733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,148735,148736],{},"上方方法暂未实现，后边学完git后在整",[19,148738,148739],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[5198,148741],{"style":129442,"src":148742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,148744,148746],{"id":148745},"_222-新型相对单位","22.2 新型相对单位",[5198,148748],{"style":129442,"src":148749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[5198,148751],{"style":129442,"src":148752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,148754,148755],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,148757,148758],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[5198,148760],{"style":129442,"src":148761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,148763,148764],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[3785,148766,27574],{},{"title":31,"searchDepth":53,"depth":53,"links":148768},[148769,148770],{"id":148558,"depth":53,"text":148559},{"id":148745,"depth":53,"text":148746},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":148550,"description":26998},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":148777,"title":148778,"body":148779,"description":148783,"extension":3817,"meta":148784,"navigation":658,"path":148785,"seo":148786,"stem":148787,"__hash__":148788},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":148780,"toc":148781},[],{"title":31,"searchDepth":53,"depth":53,"links":148782},[],"自己正经开始学编程的第一门语言！",{"category":96391},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":148778,"description":148783},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":148790,"title":148791,"body":148792,"description":26998,"extension":3817,"meta":149939,"navigation":658,"path":149940,"seo":149941,"stem":149942,"__hash__":149943},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":148793,"toc":149915},[148794,148797,148801,148804,148807,148832,148835,148841,148845,148848,148875,148878,148918,148921,148933,148936,148942,148946,148950,148977,148994,149001,149005,149008,149034,149037,149041,149044,149084,149087,149104,149110,149114,149119,149163,149166,149184,149187,149255,149259,149266,149269,149284,149287,149296,149299,149310,149313,149322,149325,149342,149345,149360,149364,149368,149371,149373,149393,149397,149400,149403,149414,149417,149423,149427,149433,149460,149463,149475,149478,149489,149492,149498,149502,149508,149558,149561,149603,149606,149639,149642,149676,149680,149683,149703,149706,149742,149745,149758,149762,149766,149772,149775,149788,149792,149795,149801,149804,149808,149811,149814,149863,149867,149883,149889,149896,149902,149912],[10,148795,148791],{"id":148796},"_1-python环境与第一个程序",[14,148798,148800],{"id":148799},"_11-什么是python","1.1 什么是Python",[19,148802,148803],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,148805,148806],{},"理解 Python 时抓住三个关键词：",[211,148808,148809,148812,148815],{},[214,148810,148811],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[214,148813,148814],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[214,148816,148817,148818,4087,148821,4087,148824,4087,148827,4087,148829,224],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[33,148819,148820],{},"os",[33,148822,148823],{},"sys",[33,148825,148826],{},"json",[33,148828,61415],{},[33,148830,148831],{},"datetime",[19,148833,148834],{},"Python 程序的运行链路：",[26,148836,148839],{"className":148837,"code":148838,"language":80,"meta":31},[78],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[33,148840,148838],{"__ignoreMap":31},[14,148842,148844],{"id":148843},"_12-python解释器","1.2 Python解释器",[19,148846,148847],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[26,148849,148851],{"className":92,"code":148850,"language":94,"meta":31,"style":31},"python --version\npython3 --version\npython\npython3\n",[33,148852,148853,148859,148865,148870],{"__ignoreMap":31},[36,148854,148855,148857],{"class":38,"line":39},[36,148856,30],{"class":101},[36,148858,29906],{"class":112},[36,148860,148861,148863],{"class":38,"line":53},[36,148862,104419],{"class":101},[36,148864,29906],{"class":112},[36,148866,148867],{"class":38,"line":196},[36,148868,148869],{"class":101},"python\n",[36,148871,148872],{"class":38,"line":642},[36,148873,148874],{"class":101},"python3\n",[19,148876,148877],{},"进入交互模式后，可以直接输入表达式：",[26,148879,148881],{"className":28,"code":148880,"language":30,"meta":31,"style":31},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[33,148882,148883,148894,148899,148913],{"__ignoreMap":31},[36,148884,148885,148888,148890,148892],{"class":38,"line":39},[36,148886,148887],{"class":46},">>>",[36,148889,28732],{"class":112},[36,148891,49124],{"class":46},[36,148893,51280],{"class":112},[36,148895,148896],{"class":38,"line":53},[36,148897,148898],{"class":112},"3\n",[36,148900,148901,148903,148906,148908,148911],{"class":38,"line":196},[36,148902,148887],{"class":46},[36,148904,148905],{"class":112}," print",[36,148907,495],{"class":42},[36,148909,148910],{"class":105},"\"hello python\"",[36,148912,922],{"class":42},[36,148914,148915],{"class":38,"line":642},[36,148916,148917],{"class":42},"hello python\n",[19,148919,148920],{},"退出交互模式：",[26,148922,148924],{"className":28,"code":148923,"language":30,"meta":31,"style":31},"exit()\n",[33,148925,148926],{"__ignoreMap":31},[36,148927,148928,148931],{"class":38,"line":39},[36,148929,148930],{"class":112},"exit",[36,148932,903],{"class":42},[19,148934,148935],{},"或使用快捷键：",[26,148937,148940],{"className":148938,"code":148939,"language":80,"meta":31},[78],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[33,148941,148939],{"__ignoreMap":31},[14,148943,148945],{"id":148944},"_13-安装python","1.3 安装Python",[318,148947,148949],{"id":148948},"_131-windows安装","1.3.1 Windows安装",[211,148951,148952,148959,148962,148968,148974],{},[214,148953,148954,148955],{},"打开 Python 官网：",[4113,148956,148957],{"href":148957,"rel":148958},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[27481],[214,148960,148961],{},"下载 Windows Installer。",[214,148963,148964,148965,224],{},"安装时勾选 ",[33,148966,148967],{},"Add Python to PATH",[214,148969,148970,148971,224],{},"点击 ",[33,148972,148973],{},"Install Now",[214,148975,148976],{},"安装完成后打开命令提示符验证：",[26,148978,148980],{"className":92,"code":148979,"language":94,"meta":31,"style":31},"python --version\npip --version\n",[33,148981,148982,148988],{"__ignoreMap":31},[36,148983,148984,148986],{"class":38,"line":39},[36,148985,30],{"class":101},[36,148987,29906],{"class":112},[36,148989,148990,148992],{"class":38,"line":53},[36,148991,141],{"class":101},[36,148993,29906],{"class":112},[19,148995,148996,148997,149000],{},"如果提示 ",[33,148998,148999],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[318,149002,149004],{"id":149003},"_132-macos安装","1.3.2 macOS安装",[19,149006,149007],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[26,149009,149011],{"className":92,"code":149010,"language":94,"meta":31,"style":31},"brew install python\npython3 --version\npip3 --version\n",[33,149012,149013,149022,149028],{"__ignoreMap":31},[36,149014,149015,149018,149020],{"class":38,"line":39},[36,149016,149017],{"class":101},"brew",[36,149019,109],{"class":105},[36,149021,127352],{"class":105},[36,149023,149024,149026],{"class":38,"line":53},[36,149025,104419],{"class":101},[36,149027,29906],{"class":112},[36,149029,149030,149032],{"class":38,"line":196},[36,149031,122734],{"class":101},[36,149033,29906],{"class":112},[19,149035,149036],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[318,149038,149040],{"id":149039},"_133-linux安装","1.3.3 Linux安装",[19,149042,149043],{},"Ubuntu\u002FDebian：",[26,149045,149047],{"className":92,"code":149046,"language":94,"meta":31,"style":31},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[33,149048,149049,149057,149072,149078],{"__ignoreMap":31},[36,149050,149051,149053,149055],{"class":38,"line":39},[36,149052,102],{"class":101},[36,149054,120351],{"class":105},[36,149056,29855],{"class":105},[36,149058,149059,149061,149063,149065,149067,149069],{"class":38,"line":53},[36,149060,102],{"class":101},[36,149062,120351],{"class":105},[36,149064,109],{"class":105},[36,149066,116],{"class":105},[36,149068,119],{"class":105},[36,149070,149071],{"class":105}," python3-venv\n",[36,149073,149074,149076],{"class":38,"line":196},[36,149075,104419],{"class":101},[36,149077,29906],{"class":112},[36,149079,149080,149082],{"class":38,"line":642},[36,149081,122734],{"class":101},[36,149083,29906],{"class":112},[19,149085,149086],{},"Fedora：",[26,149088,149090],{"className":92,"code":149089,"language":94,"meta":31,"style":31},"sudo dnf install python3 python3-pip\n",[33,149091,149092],{"__ignoreMap":31},[36,149093,149094,149096,149098,149100,149102],{"class":38,"line":39},[36,149095,102],{"class":101},[36,149097,106],{"class":105},[36,149099,109],{"class":105},[36,149101,116],{"class":105},[36,149103,122799],{"class":105},[19,149105,149106,149107,149109],{},"Linux 上通常使用 ",[33,149108,104419],{}," 命令，避免和系统旧版本 Python 冲突。",[14,149111,149113],{"id":149112},"_14-pip包管理器","1.4 pip包管理器",[19,149115,149116,149118],{},[33,149117,141],{}," 用来安装第三方库。",[26,149120,149122],{"className":92,"code":149121,"language":94,"meta":31,"style":31},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[33,149123,149124,149133,149142,149150,149156],{"__ignoreMap":31},[36,149125,149126,149128,149130],{"class":38,"line":39},[36,149127,141],{"class":101},[36,149129,109],{"class":105},[36,149131,149132],{"class":105}," requests\n",[36,149134,149135,149137,149140],{"class":38,"line":53},[36,149136,141],{"class":101},[36,149138,149139],{"class":105}," uninstall",[36,149141,149132],{"class":105},[36,149143,149144,149146,149148],{"class":38,"line":196},[36,149145,141],{"class":101},[36,149147,120608],{"class":105},[36,149149,149132],{"class":105},[36,149151,149152,149154],{"class":38,"line":642},[36,149153,141],{"class":101},[36,149155,121989],{"class":105},[36,149157,149158,149160],{"class":38,"line":655},[36,149159,141],{"class":101},[36,149161,149162],{"class":105}," freeze\n",[19,149164,149165],{},"国内网络较慢时可以临时使用镜像：",[26,149167,149169],{"className":92,"code":149168,"language":94,"meta":31,"style":31},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[33,149170,149171],{"__ignoreMap":31},[36,149172,149173,149175,149177,149180,149182],{"class":38,"line":39},[36,149174,141],{"class":101},[36,149176,109],{"class":105},[36,149178,149179],{"class":105}," requests",[36,149181,30041],{"class":112},[36,149183,122762],{"class":105},[19,149185,149186],{},"常见第三方库：",[248,149188,149189,149198],{},[251,149190,149191],{},[254,149192,149193,149196],{},[257,149194,149195],{},"库",[257,149197,263],{},[265,149199,149200,149208,149215,149223,149231,149239,149247],{},[254,149201,149202,149205],{},[270,149203,149204],{},"requests",[270,149206,149207],{},"网络请求",[254,149209,149210,149212],{},[270,149211,104174],{},[270,149213,149214],{},"数值计算",[254,149216,149217,149220],{},[270,149218,149219],{},"pandas",[270,149221,149222],{},"表格数据处理",[254,149224,149225,149228],{},[270,149226,149227],{},"matplotlib",[270,149229,149230],{},"绘图",[254,149232,149233,149236],{},[270,149234,149235],{},"pyecharts",[270,149237,149238],{},"ECharts 图表",[254,149240,149241,149244],{},[270,149242,149243],{},"flask",[270,149245,149246],{},"Web 后端",[254,149248,149249,149252],{},[270,149250,149251],{},"pytest",[270,149253,149254],{},"自动化测试",[14,149256,149258],{"id":149257},"_15-虚拟环境","1.5 虚拟环境",[19,149260,149261,149262,149265],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[33,149263,149264],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,149267,149268],{},"创建虚拟环境：",[26,149270,149272],{"className":92,"code":149271,"language":94,"meta":31,"style":31},"python -m venv .venv\n",[33,149273,149274],{"__ignoreMap":31},[36,149275,149276,149278,149280,149282],{"class":38,"line":39},[36,149277,30],{"class":101},[36,149279,104422],{"class":112},[36,149281,104425],{"class":105},[36,149283,104428],{"class":105},[19,149285,149286],{},"Windows 激活：",[26,149288,149290],{"className":92,"code":149289,"language":94,"meta":31,"style":31},".venv\\Scripts\\activate\n",[33,149291,149292],{"__ignoreMap":31},[36,149293,149294],{"class":38,"line":39},[36,149295,149289],{"class":101},[19,149297,149298],{},"macOS\u002FLinux 激活：",[26,149300,149302],{"className":92,"code":149301,"language":94,"meta":31,"style":31},"source .venv\u002Fbin\u002Factivate\n",[33,149303,149304],{"__ignoreMap":31},[36,149305,149306,149308],{"class":38,"line":39},[36,149307,104433],{"class":112},[36,149309,104436],{"class":105},[19,149311,149312],{},"退出虚拟环境：",[26,149314,149316],{"className":92,"code":149315,"language":94,"meta":31,"style":31},"deactivate\n",[33,149317,149318],{"__ignoreMap":31},[36,149319,149320],{"class":38,"line":39},[36,149321,149315],{"class":101},[19,149323,149324],{},"保存依赖：",[26,149326,149328],{"className":92,"code":149327,"language":94,"meta":31,"style":31},"pip freeze > requirements.txt\n",[33,149329,149330],{"__ignoreMap":31},[36,149331,149332,149334,149337,149339],{"class":38,"line":39},[36,149333,141],{"class":101},[36,149335,149336],{"class":105}," freeze",[36,149338,29835],{"class":46},[36,149340,149341],{"class":105}," requirements.txt\n",[19,149343,149344],{},"安装依赖：",[26,149346,149348],{"className":92,"code":149347,"language":94,"meta":31,"style":31},"pip install -r requirements.txt\n",[33,149349,149350],{"__ignoreMap":31},[36,149351,149352,149354,149356,149358],{"class":38,"line":39},[36,149353,141],{"class":101},[36,149355,109],{"class":105},[36,149357,122673],{"class":112},[36,149359,149341],{"class":105},[14,149361,149363],{"id":149362},"_16-开发工具","1.6 开发工具",[318,149365,149367],{"id":149366},"_161-pycharm","1.6.1 PyCharm",[19,149369,149370],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,149372,125096],{},[211,149374,149375,149378,149381,149387,149390],{},[214,149376,149377],{},"New Project：创建项目。",[214,149379,149380],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[214,149382,149383,149384,129017],{},"New Python File：创建 ",[33,149385,149386],{},".py",[214,149388,149389],{},"Run：运行当前文件。",[214,149391,149392],{},"Debug：断点调试。",[318,149394,149396],{"id":149395},"_162-vs-code","1.6.2 VS Code",[19,149398,149399],{},"VS Code 轻量，适合后续多语言开发。",[19,149401,149402],{},"建议安装插件：",[211,149404,149405,149408,149411],{},[214,149406,149407],{},"Python。",[214,149409,149410],{},"Pylance。",[214,149412,149413],{},"Jupyter。",[19,149415,149416],{},"选择解释器：",[26,149418,149421],{"className":149419,"code":149420,"language":80,"meta":31},[78],"Ctrl + Shift + P -> Python: Select Interpreter\n",[33,149422,149420],{"__ignoreMap":31},[14,149424,149426],{"id":149425},"_17-第一个python程序","1.7 第一个Python程序",[19,149428,149429,149430,28234],{},"创建文件 ",[33,149431,149432],{},"hello.py",[26,149434,149436],{"className":28,"code":149435,"language":30,"meta":31,"style":31},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[33,149437,149438,149449],{"__ignoreMap":31},[36,149439,149440,149442,149444,149447],{"class":38,"line":39},[36,149441,3486],{"class":112},[36,149443,495],{"class":42},[36,149445,149446],{"class":105},"\"Hello World\"",[36,149448,922],{"class":42},[36,149450,149451,149453,149455,149458],{"class":38,"line":53},[36,149452,3486],{"class":112},[36,149454,495],{"class":42},[36,149456,149457],{"class":105},"\"你好，Python\"",[36,149459,922],{"class":42},[19,149461,149462],{},"在终端运行：",[26,149464,149466],{"className":92,"code":149465,"language":94,"meta":31,"style":31},"python hello.py\n",[33,149467,149468],{"__ignoreMap":31},[36,149469,149470,149472],{"class":38,"line":39},[36,149471,30],{"class":101},[36,149473,149474],{"class":105}," hello.py\n",[19,149476,149477],{},"或：",[26,149479,149481],{"className":92,"code":149480,"language":94,"meta":31,"style":31},"python3 hello.py\n",[33,149482,149483],{"__ignoreMap":31},[36,149484,149485,149487],{"class":38,"line":39},[36,149486,104419],{"class":101},[36,149488,149474],{"class":105},[19,149490,149491],{},"输出：",[26,149493,149496],{"className":149494,"code":149495,"language":80,"meta":31},[78],"Hello World\n你好，Python\n",[33,149497,149495],{"__ignoreMap":31},[14,149499,149501],{"id":149500},"_18-print函数","1.8 print函数",[19,149503,149504,149507],{},[33,149505,149506],{},"print()"," 用来输出内容。",[26,149509,149511],{"className":28,"code":149510,"language":30,"meta":31,"style":31},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[33,149512,149513,149523,149533,149543],{"__ignoreMap":31},[36,149514,149515,149517,149519,149521],{"class":38,"line":39},[36,149516,3486],{"class":112},[36,149518,495],{"class":42},[36,149520,9537],{"class":105},[36,149522,922],{"class":42},[36,149524,149525,149527,149529,149531],{"class":38,"line":53},[36,149526,3486],{"class":112},[36,149528,495],{"class":42},[36,149530,4186],{"class":112},[36,149532,922],{"class":42},[36,149534,149535,149537,149539,149541],{"class":38,"line":196},[36,149536,3486],{"class":112},[36,149538,495],{"class":42},[36,149540,3934],{"class":112},[36,149542,922],{"class":42},[36,149544,149545,149547,149549,149552,149554,149556],{"class":38,"line":642},[36,149546,3486],{"class":112},[36,149548,495],{"class":42},[36,149550,149551],{"class":105},"\"年龄:\"",[36,149553,478],{"class":42},[36,149555,4521],{"class":112},[36,149557,922],{"class":42},[19,149559,149560],{},"多个内容用逗号隔开，默认中间加空格：",[26,149562,149564],{"className":28,"code":149563,"language":30,"meta":31,"style":31},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[33,149565,149566,149576,149586],{"__ignoreMap":31},[36,149567,149568,149571,149573],{"class":38,"line":39},[36,149569,149570],{"class":42},"name ",[36,149572,47],{"class":46},[36,149574,149575],{"class":105}," \"张三\"\n",[36,149577,149578,149581,149583],{"class":38,"line":53},[36,149579,149580],{"class":42},"age ",[36,149582,47],{"class":46},[36,149584,149585],{"class":112}," 18\n",[36,149587,149588,149590,149592,149595,149598,149600],{"class":38,"line":196},[36,149589,3486],{"class":112},[36,149591,495],{"class":42},[36,149593,149594],{"class":105},"\"姓名:\"",[36,149596,149597],{"class":42},", name, ",[36,149599,149551],{"class":105},[36,149601,149602],{"class":42},", age)\n",[19,149604,149605],{},"修改分隔符：",[26,149607,149609],{"className":28,"code":149608,"language":30,"meta":31,"style":31},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[33,149610,149611],{"__ignoreMap":31},[36,149612,149613,149615,149617,149620,149622,149624,149626,149628,149630,149633,149635,149637],{"class":38,"line":39},[36,149614,3486],{"class":112},[36,149616,495],{"class":42},[36,149618,149619],{"class":105},"\"2024\"",[36,149621,478],{"class":42},[36,149623,57873],{"class":105},[36,149625,478],{"class":42},[36,149627,57873],{"class":105},[36,149629,478],{"class":42},[36,149631,149632],{"class":468},"sep",[36,149634,47],{"class":46},[36,149636,36066],{"class":105},[36,149638,922],{"class":42},[19,149640,149641],{},"修改结尾符：",[26,149643,149645],{"className":28,"code":149644,"language":30,"meta":31,"style":31},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[33,149646,149647,149665],{"__ignoreMap":31},[36,149648,149649,149651,149653,149655,149657,149659,149661,149663],{"class":38,"line":39},[36,149650,3486],{"class":112},[36,149652,495],{"class":42},[36,149654,9537],{"class":105},[36,149656,478],{"class":42},[36,149658,49359],{"class":468},[36,149660,47],{"class":46},[36,149662,8056],{"class":105},[36,149664,922],{"class":42},[36,149666,149667,149669,149671,149674],{"class":38,"line":53},[36,149668,3486],{"class":112},[36,149670,495],{"class":42},[36,149672,149673],{"class":105},"\"python\"",[36,149675,922],{"class":42},[14,149677,149679],{"id":149678},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,149681,149682],{},"交互运行适合临时验证：",[26,149684,149686],{"className":28,"code":149685,"language":30,"meta":31,"style":31},">>> 10 * 3\n30\n",[33,149687,149688,149698],{"__ignoreMap":31},[36,149689,149690,149692,149694,149696],{"class":38,"line":39},[36,149691,148887],{"class":46},[36,149693,5750],{"class":112},[36,149695,1325],{"class":46},[36,149697,123070],{"class":112},[36,149699,149700],{"class":38,"line":53},[36,149701,149702],{"class":112},"30\n",[19,149704,149705],{},"脚本运行适合保存程序：",[26,149707,149709],{"className":28,"code":149708,"language":30,"meta":31,"style":31},"price = 8\ncount = 5\nprint(price * count)\n",[33,149710,149711,149721,149730],{"__ignoreMap":31},[36,149712,149713,149716,149718],{"class":38,"line":39},[36,149714,149715],{"class":42},"price ",[36,149717,47],{"class":46},[36,149719,149720],{"class":112}," 8\n",[36,149722,149723,149726,149728],{"class":38,"line":53},[36,149724,149725],{"class":42},"count ",[36,149727,47],{"class":46},[36,149729,586],{"class":112},[36,149731,149732,149734,149737,149739],{"class":38,"line":196},[36,149733,3486],{"class":112},[36,149735,149736],{"class":42},"(price ",[36,149738,1372],{"class":46},[36,149740,149741],{"class":42}," count)\n",[19,149743,149744],{},"实际学习中推荐：",[211,149746,149747,149750,149755],{},[214,149748,149749],{},"临时试一个语法，用交互模式。",[214,149751,149752,149753,129017],{},"写完整练习，用 ",[33,149754,149386],{},[214,149756,149757],{},"写项目，用独立目录和虚拟环境。",[14,149759,149761],{"id":149760},"_110-常见错误","1.10 常见错误",[318,149763,149765],{"id":149764},"_1101-命令找不到","1.10.1 命令找不到",[26,149767,149770],{"className":149768,"code":149769,"language":80,"meta":31},[78],"python: command not found\n",[33,149771,149769],{"__ignoreMap":31},[19,149773,149774],{},"原因：",[211,149776,149777,149780,149783],{},[214,149778,149779],{},"没安装 Python。",[214,149781,149782],{},"PATH 没配置。",[214,149784,149785,149786,224],{},"Linux\u002FmacOS 应该使用 ",[33,149787,104419],{},[318,149789,149791],{"id":149790},"_1102-文件名冲突","1.10.2 文件名冲突",[19,149793,149794],{},"不要把文件命名为：",[26,149796,149799],{"className":149797,"code":149798,"language":80,"meta":31},[78],"random.py\njson.py\ntime.py\nrequests.py\n",[33,149800,149798],{"__ignoreMap":31},[19,149802,149803],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[318,149805,149807],{"id":149806},"_1103-中文乱码","1.10.3 中文乱码",[19,149809,149810],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,149812,149813],{},"如果读写文件出现乱码，要明确指定编码：",[26,149815,149817],{"className":28,"code":149816,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[33,149818,149819,149853],{"__ignoreMap":31},[36,149820,149821,149823,149826,149828,149831,149833,149836,149838,149841,149843,149846,149848,149850],{"class":38,"line":39},[36,149822,111308],{"class":46},[36,149824,149825],{"class":112}," open",[36,149827,495],{"class":42},[36,149829,149830],{"class":105},"\"data.txt\"",[36,149832,478],{"class":42},[36,149834,149835],{"class":105},"\"r\"",[36,149837,478],{"class":42},[36,149839,149840],{"class":468},"encoding",[36,149842,47],{"class":46},[36,149844,149845],{"class":105},"\"utf-8\"",[36,149847,17373],{"class":42},[36,149849,617],{"class":46},[36,149851,149852],{"class":42}," f:\n",[36,149854,149855,149858,149860],{"class":38,"line":53},[36,149856,149857],{"class":42},"    content ",[36,149859,47],{"class":46},[36,149861,149862],{"class":42}," f.read()\n",[14,149864,149866],{"id":149865},"_111-本章练习","1.11 本章练习",[211,149868,149869,149872,149878],{},[214,149870,149871],{},"安装 Python，并在终端输出版本号。",[214,149873,149874,149875,149877],{},"新建 ",[33,149876,149432],{},"，输出自己的姓名、年龄、学习目标。",[214,149879,107857,149880,149882],{},[33,149881,149506],{}," 输出下面格式：",[26,149884,149887],{"className":149885,"code":149886,"language":80,"meta":31},[78],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[33,149888,149886],{"__ignoreMap":31},[211,149890,149891],{"start":642},[214,149892,107857,149893,149895],{},[33,149894,149632],{}," 输出日期：",[26,149897,149900],{"className":149898,"code":149899,"language":80,"meta":31},[78],"2024-10-10\n",[33,149901,149899],{"__ignoreMap":31},[211,149903,149904],{"start":655},[214,149905,107857,149906,149908,149909,149911],{},[33,149907,49359],{}," 让两次 ",[33,149910,149506],{}," 输出在同一行。",[3785,149913,149914],{},"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":31,"searchDepth":53,"depth":53,"links":149916},[149917,149918,149919,149924,149925,149926,149930,149931,149932,149933,149938],{"id":148799,"depth":53,"text":148800},{"id":148843,"depth":53,"text":148844},{"id":148944,"depth":53,"text":148945,"children":149920},[149921,149922,149923],{"id":148948,"depth":196,"text":148949},{"id":149003,"depth":196,"text":149004},{"id":149039,"depth":196,"text":149040},{"id":149112,"depth":53,"text":149113},{"id":149257,"depth":53,"text":149258},{"id":149362,"depth":53,"text":149363,"children":149927},[149928,149929],{"id":149366,"depth":196,"text":149367},{"id":149395,"depth":196,"text":149396},{"id":149425,"depth":53,"text":149426},{"id":149500,"depth":53,"text":149501},{"id":149678,"depth":53,"text":149679},{"id":149760,"depth":53,"text":149761,"children":149934},[149935,149936,149937],{"id":149764,"depth":196,"text":149765},{"id":149790,"depth":196,"text":149791},{"id":149806,"depth":196,"text":149807},{"id":149865,"depth":53,"text":149866},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":148791,"description":26998},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":149945,"title":149946,"body":149947,"description":26998,"extension":3817,"meta":152351,"navigation":658,"path":152352,"seo":152353,"stem":152354,"__hash__":152355},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":149948,"toc":152336},[149949,149952,149956,149959,149962,149979,149982,150024,150027,150031,150034,150037,150074,150077,150111,150114,150206,150210,150224,150227,150254,150257,150261,150364,150371,150374,150391,150395,150402,150591,150594,150667,150671,150674,150758,150761,150793,150797,151001,151004,151008,151014,151116,151119,151375,151379,151382,151385,151399,151401,151587,151591,151953,151959,151963,151966,152090,152093,152272,152275,152279,152312,152316,152333],[10,149950,149946],{"id":149951},"_10-json与pyecharts折线图",[14,149953,149955],{"id":149954},"_101-数据可视化","10.1 数据可视化",[19,149957,149958],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,149960,149961],{},"常见图表：",[211,149963,149964,149967,149970,149973,149976],{},[214,149965,149966],{},"折线图：看趋势。",[214,149968,149969],{},"柱状图：看分类对比。",[214,149971,149972],{},"饼图：看占比。",[214,149974,149975],{},"地图：看地域分布。",[214,149977,149978],{},"散点图：看两个变量之间的关系。",[19,149980,149981],{},"Python 可视化常用库：",[248,149983,149984,149992],{},[251,149985,149986],{},[254,149987,149988,149990],{},[257,149989,149195],{},[257,149991,27360],{},[265,149993,149994,150001,150009,150016],{},[254,149995,149996,149998],{},[270,149997,149227],{},[270,149999,150000],{},"基础、经典、可定制",[254,150002,150003,150006],{},[270,150004,150005],{},"seaborn",[270,150007,150008],{},"统计图表更美观",[254,150010,150011,150013],{},[270,150012,149235],{},[270,150014,150015],{},"生成交互式网页图表",[254,150017,150018,150021],{},[270,150019,150020],{},"plotly",[270,150022,150023],{},"交互图表能力强",[19,150025,150026],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,150028,150030],{"id":150029},"_102-json回顾","10.2 JSON回顾",[19,150032,150033],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,150035,150036],{},"Python 字典：",[26,150038,150040],{"className":28,"code":150039,"language":30,"meta":31,"style":31},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[33,150041,150042,150050,150061,150070],{"__ignoreMap":31},[36,150043,150044,150046,150048],{"class":38,"line":39},[36,150045,105170],{"class":42},[36,150047,47],{"class":46},[36,150049,19228],{"class":42},[36,150051,150052,150055,150057,150059],{"class":38,"line":53},[36,150053,150054],{"class":105},"    \"name\"",[36,150056,54994],{"class":42},[36,150058,72824],{"class":105},[36,150060,35056],{"class":42},[36,150062,150063,150066,150068],{"class":38,"line":196},[36,150064,150065],{"class":105},"    \"value\"",[36,150067,54994],{"class":42},[36,150069,101006],{"class":112},[36,150071,150072],{"class":38,"line":642},[36,150073,5300],{"class":42},[19,150075,150076],{},"JSON 字符串：",[26,150078,150081],{"className":150079,"code":150080,"language":148826,"meta":31,"style":31},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[33,150082,150083,150087,150098,150107],{"__ignoreMap":31},[36,150084,150085],{"class":38,"line":39},[36,150086,5281],{"class":42},[36,150088,150089,150092,150094,150096],{"class":38,"line":53},[36,150090,150091],{"class":112},"  \"name\"",[36,150093,54994],{"class":42},[36,150095,72824],{"class":105},[36,150097,35056],{"class":42},[36,150099,150100,150103,150105],{"class":38,"line":196},[36,150101,150102],{"class":112},"  \"value\"",[36,150104,54994],{"class":42},[36,150106,101006],{"class":112},[36,150108,150109],{"class":38,"line":642},[36,150110,5300],{"class":42},[19,150112,150113],{},"Python 与 JSON 的转换：",[26,150115,150117],{"className":28,"code":150116,"language":30,"meta":31,"style":31},"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",[33,150118,150119,150126,150130,150155,150159,150178,150185,150189,150199],{"__ignoreMap":31},[36,150120,150121,150123],{"class":38,"line":39},[36,150122,611],{"class":46},[36,150124,150125],{"class":42}," json\n",[36,150127,150128],{"class":38,"line":53},[36,150129,659],{"emptyLinePlaceholder":658},[36,150131,150132,150134,150136,150138,150140,150142,150144,150146,150149,150151,150153],{"class":38,"line":196},[36,150133,105170],{"class":42},[36,150135,47],{"class":46},[36,150137,859],{"class":42},[36,150139,66234],{"class":105},[36,150141,54994],{"class":42},[36,150143,72824],{"class":105},[36,150145,478],{"class":42},[36,150147,150148],{"class":105},"\"value\"",[36,150150,54994],{"class":42},[36,150152,4186],{"class":112},[36,150154,5300],{"class":42},[36,150156,150157],{"class":38,"line":642},[36,150158,659],{"emptyLinePlaceholder":658},[36,150160,150161,150164,150166,150169,150172,150174,150176],{"class":38,"line":655},[36,150162,150163],{"class":42},"json_text ",[36,150165,47],{"class":46},[36,150167,150168],{"class":42}," json.dumps(data, ",[36,150170,150171],{"class":468},"ensure_ascii",[36,150173,47],{"class":46},[36,150175,37547],{"class":112},[36,150177,922],{"class":42},[36,150179,150180,150182],{"class":38,"line":662},[36,150181,3486],{"class":112},[36,150183,150184],{"class":42},"(json_text)\n",[36,150186,150187],{"class":38,"line":667},[36,150188,659],{"emptyLinePlaceholder":658},[36,150190,150191,150194,150196],{"class":38,"line":679},[36,150192,150193],{"class":42},"new_data ",[36,150195,47],{"class":46},[36,150197,150198],{"class":42}," json.loads(json_text)\n",[36,150200,150201,150203],{"class":38,"line":685},[36,150202,3486],{"class":112},[36,150204,150205],{"class":42},"(new_data)\n",[14,150207,150209],{"id":150208},"_103-安装pyecharts","10.3 安装pyecharts",[26,150211,150213],{"className":92,"code":150212,"language":94,"meta":31,"style":31},"pip install pyecharts\n",[33,150214,150215],{"__ignoreMap":31},[36,150216,150217,150219,150221],{"class":38,"line":39},[36,150218,141],{"class":101},[36,150220,109],{"class":105},[36,150222,150223],{"class":105}," pyecharts\n",[19,150225,150226],{},"验证：",[26,150228,150230],{"className":28,"code":150229,"language":30,"meta":31,"style":31},"import pyecharts\n\nprint(pyecharts.__version__)\n",[33,150231,150232,150238,150242],{"__ignoreMap":31},[36,150233,150234,150236],{"class":38,"line":39},[36,150235,611],{"class":46},[36,150237,150223],{"class":42},[36,150239,150240],{"class":38,"line":53},[36,150241,659],{"emptyLinePlaceholder":658},[36,150243,150244,150246,150249,150252],{"class":38,"line":196},[36,150245,3486],{"class":112},[36,150247,150248],{"class":42},"(pyecharts.",[36,150250,150251],{"class":112},"__version__",[36,150253,922],{"class":42},[19,150255,150256],{},"如果使用虚拟环境，要先激活环境再安装。",[14,150258,150260],{"id":150259},"_104-第一个折线图","10.4 第一个折线图",[26,150262,150264],{"className":28,"code":150263,"language":30,"meta":31,"style":31},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[33,150265,150266,150278,150282,150292,150322,150354],{"__ignoreMap":31},[36,150267,150268,150270,150273,150275],{"class":38,"line":39},[36,150269,645],{"class":46},[36,150271,150272],{"class":42}," pyecharts.charts ",[36,150274,611],{"class":46},[36,150276,150277],{"class":42}," Line\n",[36,150279,150280],{"class":38,"line":53},[36,150281,659],{"emptyLinePlaceholder":658},[36,150283,150284,150287,150289],{"class":38,"line":196},[36,150285,150286],{"class":42},"line ",[36,150288,47],{"class":46},[36,150290,150291],{"class":42}," Line()\n",[36,150293,150294,150297,150300,150302,150305,150307,150310,150312,150315,150317,150320],{"class":38,"line":642},[36,150295,150296],{"class":42},"line.add_xaxis([",[36,150298,150299],{"class":105},"\"周一\"",[36,150301,478],{"class":42},[36,150303,150304],{"class":105},"\"周二\"",[36,150306,478],{"class":42},[36,150308,150309],{"class":105},"\"周三\"",[36,150311,478],{"class":42},[36,150313,150314],{"class":105},"\"周四\"",[36,150316,478],{"class":42},[36,150318,150319],{"class":105},"\"周五\"",[36,150321,8353],{"class":42},[36,150323,150324,150327,150330,150332,150334,150336,150338,150340,150342,150344,150347,150349,150352],{"class":38,"line":655},[36,150325,150326],{"class":42},"line.add_yaxis(",[36,150328,150329],{"class":105},"\"销售额\"",[36,150331,81072],{"class":42},[36,150333,4186],{"class":112},[36,150335,478],{"class":42},[36,150337,4687],{"class":112},[36,150339,478],{"class":42},[36,150341,4732],{"class":112},[36,150343,478],{"class":42},[36,150345,150346],{"class":112},"150",[36,150348,478],{"class":42},[36,150350,150351],{"class":112},"180",[36,150353,8353],{"class":42},[36,150355,150356,150359,150362],{"class":38,"line":662},[36,150357,150358],{"class":42},"line.render(",[36,150360,150361],{"class":105},"\"line.html\"",[36,150363,922],{"class":42},[19,150365,150366,150367,150370],{},"运行后会生成 ",[33,150368,150369],{},"line.html","，用浏览器打开即可看到图表。",[19,150372,150373],{},"核心步骤：",[211,150375,150376,150379,150382,150385,150388],{},[214,150377,150378],{},"导入图表类。",[214,150380,150381],{},"创建图表对象。",[214,150383,150384],{},"添加 x 轴数据。",[214,150386,150387],{},"添加 y 轴数据。",[214,150389,150390],{},"渲染为 HTML。",[14,150392,150394],{"id":150393},"_105-全局配置","10.5 全局配置",[19,150396,150397,150398,150401],{},"常用配置在 ",[33,150399,150400],{},"pyecharts.options"," 中。",[26,150403,150405],{"className":28,"code":150404,"language":30,"meta":31,"style":31},"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",[33,150406,150407,150424,150434,150438,150446,150470,150498,150503,150522,150541,150559,150579,150583],{"__ignoreMap":31},[36,150408,150409,150411,150414,150416,150419,150421],{"class":38,"line":39},[36,150410,645],{"class":46},[36,150412,150413],{"class":42}," pyecharts ",[36,150415,611],{"class":46},[36,150417,150418],{"class":42}," options ",[36,150420,617],{"class":46},[36,150422,150423],{"class":42}," opts\n",[36,150425,150426,150428,150430,150432],{"class":38,"line":53},[36,150427,645],{"class":46},[36,150429,150272],{"class":42},[36,150431,611],{"class":46},[36,150433,150277],{"class":42},[36,150435,150436],{"class":38,"line":196},[36,150437,659],{"emptyLinePlaceholder":658},[36,150439,150440,150442,150444],{"class":38,"line":642},[36,150441,150286],{"class":42},[36,150443,47],{"class":46},[36,150445,150291],{"class":42},[36,150447,150448,150450,150452,150454,150456,150458,150460,150462,150464,150466,150468],{"class":38,"line":655},[36,150449,150296],{"class":42},[36,150451,150299],{"class":105},[36,150453,478],{"class":42},[36,150455,150304],{"class":105},[36,150457,478],{"class":42},[36,150459,150309],{"class":105},[36,150461,478],{"class":42},[36,150463,150314],{"class":105},[36,150465,478],{"class":42},[36,150467,150319],{"class":105},[36,150469,8353],{"class":42},[36,150471,150472,150474,150476,150478,150480,150482,150484,150486,150488,150490,150492,150494,150496],{"class":38,"line":662},[36,150473,150326],{"class":42},[36,150475,150329],{"class":105},[36,150477,81072],{"class":42},[36,150479,4186],{"class":112},[36,150481,478],{"class":42},[36,150483,4687],{"class":112},[36,150485,478],{"class":42},[36,150487,4732],{"class":112},[36,150489,478],{"class":42},[36,150491,150346],{"class":112},[36,150493,478],{"class":42},[36,150495,150351],{"class":112},[36,150497,8353],{"class":42},[36,150499,150500],{"class":38,"line":667},[36,150501,150502],{"class":42},"line.set_global_opts(\n",[36,150504,150505,150508,150510,150513,150515,150517,150520],{"class":38,"line":679},[36,150506,150507],{"class":468},"    title_opts",[36,150509,47],{"class":46},[36,150511,150512],{"class":42},"opts.TitleOpts(",[36,150514,54964],{"class":468},[36,150516,47],{"class":46},[36,150518,150519],{"class":105},"\"一周销售额\"",[36,150521,41607],{"class":42},[36,150523,150524,150527,150529,150532,150534,150536,150539],{"class":38,"line":685},[36,150525,150526],{"class":468},"    xaxis_opts",[36,150528,47],{"class":46},[36,150530,150531],{"class":42},"opts.AxisOpts(",[36,150533,83364],{"class":468},[36,150535,47],{"class":46},[36,150537,150538],{"class":105},"\"日期\"",[36,150540,41607],{"class":42},[36,150542,150543,150546,150548,150550,150552,150554,150557],{"class":38,"line":691},[36,150544,150545],{"class":468},"    yaxis_opts",[36,150547,47],{"class":46},[36,150549,150531],{"class":42},[36,150551,83364],{"class":468},[36,150553,47],{"class":46},[36,150555,150556],{"class":105},"\"金额\"",[36,150558,41607],{"class":42},[36,150560,150561,150564,150566,150569,150572,150574,150577],{"class":38,"line":696},[36,150562,150563],{"class":468},"    tooltip_opts",[36,150565,47],{"class":46},[36,150567,150568],{"class":42},"opts.TooltipOpts(",[36,150570,150571],{"class":468},"trigger",[36,150573,47],{"class":46},[36,150575,150576],{"class":105},"\"axis\"",[36,150578,41607],{"class":42},[36,150580,150581],{"class":38,"line":702},[36,150582,922],{"class":42},[36,150584,150585,150587,150589],{"class":38,"line":708},[36,150586,150358],{"class":42},[36,150588,150361],{"class":105},[36,150590,922],{"class":42},[19,150592,150593],{},"常见全局配置：",[248,150595,150596,150605],{},[251,150597,150598],{},[254,150599,150600,150603],{},[257,150601,150602],{},"配置",[257,150604,263],{},[265,150606,150607,150617,150627,150637,150647,150657],{},[254,150608,150609,150614],{},[270,150610,150611],{},[33,150612,150613],{},"TitleOpts",[270,150615,150616],{},"标题",[254,150618,150619,150624],{},[270,150620,150621],{},[33,150622,150623],{},"LegendOpts",[270,150625,150626],{},"图例",[254,150628,150629,150634],{},[270,150630,150631],{},[33,150632,150633],{},"TooltipOpts",[270,150635,150636],{},"提示框",[254,150638,150639,150644],{},[270,150640,150641],{},[33,150642,150643],{},"AxisOpts",[270,150645,150646],{},"坐标轴",[254,150648,150649,150654],{},[270,150650,150651],{},[33,150652,150653],{},"VisualMapOpts",[270,150655,150656],{},"视觉映射",[254,150658,150659,150664],{},[270,150660,150661],{},[33,150662,150663],{},"DataZoomOpts",[270,150665,150666],{},"区域缩放",[14,150668,150670],{"id":150669},"_106-系列配置","10.6 系列配置",[19,150672,150673],{},"系列配置作用于某一组数据。",[26,150675,150677],{"className":28,"code":150676,"language":30,"meta":31,"style":31},"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",[33,150678,150679,150684,150695,150724,150735,150754],{"__ignoreMap":31},[36,150680,150681],{"class":38,"line":39},[36,150682,150683],{"class":42},"line.add_yaxis(\n",[36,150685,150686,150689,150691,150693],{"class":38,"line":53},[36,150687,150688],{"class":468},"    series_name",[36,150690,47],{"class":46},[36,150692,150329],{"class":105},[36,150694,35056],{"class":42},[36,150696,150697,150700,150702,150704,150706,150708,150710,150712,150714,150716,150718,150720,150722],{"class":38,"line":196},[36,150698,150699],{"class":468},"    y_axis",[36,150701,47],{"class":46},[36,150703,4760],{"class":42},[36,150705,4186],{"class":112},[36,150707,478],{"class":42},[36,150709,4687],{"class":112},[36,150711,478],{"class":42},[36,150713,4732],{"class":112},[36,150715,478],{"class":42},[36,150717,150346],{"class":112},[36,150719,478],{"class":42},[36,150721,150351],{"class":112},[36,150723,91389],{"class":42},[36,150725,150726,150729,150731,150733],{"class":38,"line":642},[36,150727,150728],{"class":468},"    is_smooth",[36,150730,47],{"class":46},[36,150732,35066],{"class":112},[36,150734,35056],{"class":42},[36,150736,150737,150740,150742,150745,150748,150750,150752],{"class":38,"line":655},[36,150738,150739],{"class":468},"    label_opts",[36,150741,47],{"class":46},[36,150743,150744],{"class":42},"opts.LabelOpts(",[36,150746,150747],{"class":468},"is_show",[36,150749,47],{"class":46},[36,150751,35066],{"class":112},[36,150753,41607],{"class":42},[36,150755,150756],{"class":38,"line":662},[36,150757,922],{"class":42},[19,150759,150760],{},"常用参数：",[211,150762,150763,150769,150775,150781,150787],{},[214,150764,150765,150768],{},[33,150766,150767],{},"series_name","：系列名称。",[214,150770,150771,150774],{},[33,150772,150773],{},"y_axis","：y 轴数据。",[214,150776,150777,150780],{},[33,150778,150779],{},"is_smooth","：是否平滑曲线。",[214,150782,150783,150786],{},[33,150784,150785],{},"label_opts","：标签配置。",[214,150788,150789,150792],{},[33,150790,150791],{},"symbol_size","：标记点大小。",[14,150794,150796],{"id":150795},"_107-多条折线","10.7 多条折线",[26,150798,150800],{"className":28,"code":150799,"language":30,"meta":31,"style":31},"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",[33,150801,150802,150816,150826,150830,150859,150863,150871,150876,150914,150951,150955,150972,150988,150992],{"__ignoreMap":31},[36,150803,150804,150806,150808,150810,150812,150814],{"class":38,"line":39},[36,150805,645],{"class":46},[36,150807,150413],{"class":42},[36,150809,611],{"class":46},[36,150811,150418],{"class":42},[36,150813,617],{"class":46},[36,150815,150423],{"class":42},[36,150817,150818,150820,150822,150824],{"class":38,"line":53},[36,150819,645],{"class":46},[36,150821,150272],{"class":42},[36,150823,611],{"class":46},[36,150825,150277],{"class":42},[36,150827,150828],{"class":38,"line":196},[36,150829,659],{"emptyLinePlaceholder":658},[36,150831,150832,150835,150837,150839,150841,150843,150845,150847,150849,150851,150853,150855,150857],{"class":38,"line":642},[36,150833,150834],{"class":42},"dates ",[36,150836,47],{"class":46},[36,150838,55783],{"class":42},[36,150840,150299],{"class":105},[36,150842,478],{"class":42},[36,150844,150304],{"class":105},[36,150846,478],{"class":42},[36,150848,150309],{"class":105},[36,150850,478],{"class":42},[36,150852,150314],{"class":105},[36,150854,478],{"class":42},[36,150856,150319],{"class":105},[36,150858,36806],{"class":42},[36,150860,150861],{"class":38,"line":655},[36,150862,659],{"emptyLinePlaceholder":658},[36,150864,150865,150867,150869],{"class":38,"line":662},[36,150866,150286],{"class":42},[36,150868,47],{"class":46},[36,150870,150291],{"class":42},[36,150872,150873],{"class":38,"line":667},[36,150874,150875],{"class":42},"line.add_xaxis(dates)\n",[36,150877,150878,150880,150883,150885,150887,150889,150892,150894,150896,150898,150900,150902,150904,150906,150908,150910,150912],{"class":38,"line":679},[36,150879,150326],{"class":42},[36,150881,150882],{"class":105},"\"线上销售\"",[36,150884,81072],{"class":42},[36,150886,4186],{"class":112},[36,150888,478],{"class":42},[36,150890,150891],{"class":112},"130",[36,150893,478],{"class":42},[36,150895,4687],{"class":112},[36,150897,478],{"class":42},[36,150899,24670],{"class":112},[36,150901,478],{"class":42},[36,150903,5445],{"class":112},[36,150905,2000],{"class":42},[36,150907,150779],{"class":468},[36,150909,47],{"class":46},[36,150911,35066],{"class":112},[36,150913,922],{"class":42},[36,150915,150916,150918,150921,150923,150925,150927,150929,150931,150933,150935,150937,150939,150941,150943,150945,150947,150949],{"class":38,"line":685},[36,150917,150326],{"class":42},[36,150919,150920],{"class":105},"\"线下销售\"",[36,150922,81072],{"class":42},[36,150924,4483],{"class":112},[36,150926,478],{"class":42},[36,150928,4732],{"class":112},[36,150930,478],{"class":42},[36,150932,4186],{"class":112},[36,150934,478],{"class":42},[36,150936,4687],{"class":112},[36,150938,478],{"class":42},[36,150940,150346],{"class":112},[36,150942,2000],{"class":42},[36,150944,150779],{"class":468},[36,150946,47],{"class":46},[36,150948,35066],{"class":112},[36,150950,922],{"class":42},[36,150952,150953],{"class":38,"line":691},[36,150954,150502],{"class":42},[36,150956,150957,150959,150961,150963,150965,150967,150970],{"class":38,"line":696},[36,150958,150507],{"class":468},[36,150960,47],{"class":46},[36,150962,150512],{"class":42},[36,150964,54964],{"class":468},[36,150966,47],{"class":46},[36,150968,150969],{"class":105},"\"线上线下销售趋势\"",[36,150971,41607],{"class":42},[36,150973,150974,150976,150978,150980,150982,150984,150986],{"class":38,"line":702},[36,150975,150563],{"class":468},[36,150977,47],{"class":46},[36,150979,150568],{"class":42},[36,150981,150571],{"class":468},[36,150983,47],{"class":46},[36,150985,150576],{"class":105},[36,150987,41607],{"class":42},[36,150989,150990],{"class":38,"line":708},[36,150991,922],{"class":42},[36,150993,150994,150996,150999],{"class":38,"line":713},[36,150995,150358],{"class":42},[36,150997,150998],{"class":105},"\"sales.html\"",[36,151000,922],{"class":42},[19,151002,151003],{},"多条折线适合比较不同指标或不同地区。",[14,151005,151007],{"id":151006},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,151009,151010,151011,28234],{},"假设 ",[33,151012,151013],{},"sales.json",[26,151015,151017],{"className":150079,"code":151016,"language":148826,"meta":31,"style":31},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[33,151018,151019,151024,151056,151084,151112],{"__ignoreMap":31},[36,151020,151021],{"class":38,"line":39},[36,151022,151023],{"class":42},"[\n",[36,151025,151026,151029,151032,151034,151036,151038,151041,151043,151045,151047,151050,151052,151054],{"class":38,"line":53},[36,151027,151028],{"class":42},"  {",[36,151030,151031],{"class":112},"\"date\"",[36,151033,54994],{"class":42},[36,151035,150299],{"class":105},[36,151037,478],{"class":42},[36,151039,151040],{"class":112},"\"online\"",[36,151042,54994],{"class":42},[36,151044,4186],{"class":112},[36,151046,478],{"class":42},[36,151048,151049],{"class":112},"\"offline\"",[36,151051,54994],{"class":42},[36,151053,4483],{"class":112},[36,151055,8626],{"class":42},[36,151057,151058,151060,151062,151064,151066,151068,151070,151072,151074,151076,151078,151080,151082],{"class":38,"line":196},[36,151059,151028],{"class":42},[36,151061,151031],{"class":112},[36,151063,54994],{"class":42},[36,151065,150304],{"class":105},[36,151067,478],{"class":42},[36,151069,151040],{"class":112},[36,151071,54994],{"class":42},[36,151073,150891],{"class":112},[36,151075,478],{"class":42},[36,151077,151049],{"class":112},[36,151079,54994],{"class":42},[36,151081,4732],{"class":112},[36,151083,8626],{"class":42},[36,151085,151086,151088,151090,151092,151094,151096,151098,151100,151102,151104,151106,151108,151110],{"class":38,"line":642},[36,151087,151028],{"class":42},[36,151089,151031],{"class":112},[36,151091,54994],{"class":42},[36,151093,150309],{"class":105},[36,151095,478],{"class":42},[36,151097,151040],{"class":112},[36,151099,54994],{"class":42},[36,151101,4687],{"class":112},[36,151103,478],{"class":42},[36,151105,151049],{"class":112},[36,151107,54994],{"class":42},[36,151109,4186],{"class":112},[36,151111,5300],{"class":42},[36,151113,151114],{"class":38,"line":655},[36,151115,36806],{"class":42},[19,151117,151118],{},"读取并绘图：",[26,151120,151122],{"className":28,"code":151121,"language":30,"meta":31,"style":31},"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",[33,151123,151124,151130,151144,151154,151158,151190,151203,151207,151215,151224,151233,151237,151249,151258,151267,151276,151280,151288,151292,151309,151326,151330,151347,151363,151367],{"__ignoreMap":31},[36,151125,151126,151128],{"class":38,"line":39},[36,151127,611],{"class":46},[36,151129,150125],{"class":42},[36,151131,151132,151134,151136,151138,151140,151142],{"class":38,"line":53},[36,151133,645],{"class":46},[36,151135,150413],{"class":42},[36,151137,611],{"class":46},[36,151139,150418],{"class":42},[36,151141,617],{"class":46},[36,151143,150423],{"class":42},[36,151145,151146,151148,151150,151152],{"class":38,"line":196},[36,151147,645],{"class":46},[36,151149,150272],{"class":42},[36,151151,611],{"class":46},[36,151153,150277],{"class":42},[36,151155,151156],{"class":38,"line":642},[36,151157,659],{"emptyLinePlaceholder":658},[36,151159,151160,151162,151164,151166,151169,151171,151173,151175,151177,151179,151181,151183,151185,151188],{"class":38,"line":655},[36,151161,111308],{"class":46},[36,151163,149825],{"class":112},[36,151165,495],{"class":42},[36,151167,151168],{"class":105},"\"sales.json\"",[36,151170,478],{"class":42},[36,151172,149835],{"class":105},[36,151174,478],{"class":42},[36,151176,149840],{"class":468},[36,151178,47],{"class":46},[36,151180,149845],{"class":105},[36,151182,17373],{"class":42},[36,151184,617],{"class":46},[36,151186,151187],{"class":468}," file",[36,151189,888],{"class":42},[36,151191,151192,151194,151196,151199,151201],{"class":38,"line":662},[36,151193,104938],{"class":42},[36,151195,47],{"class":46},[36,151197,151198],{"class":42}," json.load(",[36,151200,48912],{"class":468},[36,151202,922],{"class":42},[36,151204,151205],{"class":38,"line":667},[36,151206,659],{"emptyLinePlaceholder":658},[36,151208,151209,151211,151213],{"class":38,"line":679},[36,151210,150834],{"class":42},[36,151212,47],{"class":46},[36,151214,55395],{"class":42},[36,151216,151217,151220,151222],{"class":38,"line":685},[36,151218,151219],{"class":42},"online_sales ",[36,151221,47],{"class":46},[36,151223,55395],{"class":42},[36,151225,151226,151229,151231],{"class":38,"line":691},[36,151227,151228],{"class":42},"offline_sales ",[36,151230,47],{"class":46},[36,151232,55395],{"class":42},[36,151234,151235],{"class":38,"line":696},[36,151236,659],{"emptyLinePlaceholder":658},[36,151238,151239,151241,151244,151246],{"class":38,"line":702},[36,151240,3120],{"class":46},[36,151242,151243],{"class":42}," item ",[36,151245,1619],{"class":46},[36,151247,151248],{"class":42}," data:\n",[36,151250,151251,151254,151256],{"class":38,"line":708},[36,151252,151253],{"class":42},"    dates.append(item[",[36,151255,151031],{"class":105},[36,151257,8353],{"class":42},[36,151259,151260,151263,151265],{"class":38,"line":713},[36,151261,151262],{"class":42},"    online_sales.append(item[",[36,151264,151040],{"class":105},[36,151266,8353],{"class":42},[36,151268,151269,151272,151274],{"class":38,"line":719},[36,151270,151271],{"class":42},"    offline_sales.append(item[",[36,151273,151049],{"class":105},[36,151275,8353],{"class":42},[36,151277,151278],{"class":38,"line":725},[36,151279,659],{"emptyLinePlaceholder":658},[36,151281,151282,151284,151286],{"class":38,"line":731},[36,151283,150286],{"class":42},[36,151285,47],{"class":46},[36,151287,150291],{"class":42},[36,151289,151290],{"class":38,"line":736},[36,151291,150875],{"class":42},[36,151293,151294,151296,151298,151301,151303,151305,151307],{"class":38,"line":742},[36,151295,150326],{"class":42},[36,151297,150882],{"class":105},[36,151299,151300],{"class":42},", online_sales, ",[36,151302,150779],{"class":468},[36,151304,47],{"class":46},[36,151306,35066],{"class":112},[36,151308,922],{"class":42},[36,151310,151311,151313,151315,151318,151320,151322,151324],{"class":38,"line":748},[36,151312,150326],{"class":42},[36,151314,150920],{"class":105},[36,151316,151317],{"class":42},", offline_sales, ",[36,151319,150779],{"class":468},[36,151321,47],{"class":46},[36,151323,35066],{"class":112},[36,151325,922],{"class":42},[36,151327,151328],{"class":38,"line":754},[36,151329,150502],{"class":42},[36,151331,151332,151334,151336,151338,151340,151342,151345],{"class":38,"line":760},[36,151333,150507],{"class":468},[36,151335,47],{"class":46},[36,151337,150512],{"class":42},[36,151339,54964],{"class":468},[36,151341,47],{"class":46},[36,151343,151344],{"class":105},"\"销售趋势\"",[36,151346,41607],{"class":42},[36,151348,151349,151351,151353,151355,151357,151359,151361],{"class":38,"line":766},[36,151350,150563],{"class":468},[36,151352,47],{"class":46},[36,151354,150568],{"class":42},[36,151356,150571],{"class":468},[36,151358,47],{"class":46},[36,151360,150576],{"class":105},[36,151362,41607],{"class":42},[36,151364,151365],{"class":38,"line":772},[36,151366,922],{"class":42},[36,151368,151369,151371,151373],{"class":38,"line":778},[36,151370,150358],{"class":42},[36,151372,150998],{"class":105},[36,151374,922],{"class":42},[14,151376,151378],{"id":151377},"_109-数据清洗","10.9 数据清洗",[19,151380,151381],{},"真实数据经常不整齐，需要清洗。",[19,151383,151384],{},"常见问题：",[211,151386,151387,151390,151393,151396],{},[214,151388,151389],{},"数字是字符串。",[214,151391,151392],{},"字段缺失。",[214,151394,151395],{},"空值。",[214,151397,151398],{},"日期格式不统一。",[19,151400,18791],{},[26,151402,151404],{"className":28,"code":151403,"language":30,"meta":31,"style":31},"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",[33,151405,151406,151415,151438,151458,151479,151483,151487,151495,151504,151508,151519,151533,151542,151547,151551,151559,151569,151573,151580],{"__ignoreMap":31},[36,151407,151408,151411,151413],{"class":38,"line":39},[36,151409,151410],{"class":42},"raw_data ",[36,151412,47],{"class":46},[36,151414,59003],{"class":42},[36,151416,151417,151420,151422,151424,151426,151428,151431,151433,151436],{"class":38,"line":53},[36,151418,151419],{"class":42},"    {",[36,151421,151031],{"class":105},[36,151423,54994],{"class":42},[36,151425,150299],{"class":105},[36,151427,478],{"class":42},[36,151429,151430],{"class":105},"\"sales\"",[36,151432,54994],{"class":42},[36,151434,151435],{"class":105},"\"100\"",[36,151437,8626],{"class":42},[36,151439,151440,151442,151444,151446,151448,151450,151452,151454,151456],{"class":38,"line":196},[36,151441,151419],{"class":42},[36,151443,151031],{"class":105},[36,151445,54994],{"class":42},[36,151447,150304],{"class":105},[36,151449,478],{"class":42},[36,151451,151430],{"class":105},[36,151453,54994],{"class":42},[36,151455,11343],{"class":105},[36,151457,8626],{"class":42},[36,151459,151460,151462,151464,151466,151468,151470,151472,151474,151477],{"class":38,"line":642},[36,151461,151419],{"class":42},[36,151463,151031],{"class":105},[36,151465,54994],{"class":42},[36,151467,150309],{"class":105},[36,151469,478],{"class":42},[36,151471,151430],{"class":105},[36,151473,54994],{"class":42},[36,151475,151476],{"class":105},"\"120\"",[36,151478,8626],{"class":42},[36,151480,151481],{"class":38,"line":655},[36,151482,36806],{"class":42},[36,151484,151485],{"class":38,"line":662},[36,151486,659],{"emptyLinePlaceholder":658},[36,151488,151489,151491,151493],{"class":38,"line":667},[36,151490,150834],{"class":42},[36,151492,47],{"class":46},[36,151494,55395],{"class":42},[36,151496,151497,151500,151502],{"class":38,"line":679},[36,151498,151499],{"class":42},"sales ",[36,151501,47],{"class":46},[36,151503,55395],{"class":42},[36,151505,151506],{"class":38,"line":685},[36,151507,659],{"emptyLinePlaceholder":658},[36,151509,151510,151512,151514,151516],{"class":38,"line":691},[36,151511,3120],{"class":46},[36,151513,151243],{"class":42},[36,151515,1619],{"class":46},[36,151517,151518],{"class":42}," raw_data:\n",[36,151520,151521,151524,151526,151529,151531],{"class":38,"line":696},[36,151522,151523],{"class":42},"    value ",[36,151525,47],{"class":46},[36,151527,151528],{"class":42}," item.get(",[36,151530,151430],{"class":105},[36,151532,922],{"class":42},[36,151534,151535,151537,151539],{"class":38,"line":702},[36,151536,3752],{"class":46},[36,151538,42489],{"class":46},[36,151540,151541],{"class":42}," value:\n",[36,151543,151544],{"class":38,"line":708},[36,151545,151546],{"class":46},"        continue\n",[36,151548,151549],{"class":38,"line":713},[36,151550,659],{"emptyLinePlaceholder":658},[36,151552,151553,151555,151557],{"class":38,"line":719},[36,151554,151253],{"class":42},[36,151556,151031],{"class":105},[36,151558,8353],{"class":42},[36,151560,151561,151564,151566],{"class":38,"line":725},[36,151562,151563],{"class":42},"    sales.append(",[36,151565,1378],{"class":112},[36,151567,151568],{"class":42},"(value))\n",[36,151570,151571],{"class":38,"line":731},[36,151572,659],{"emptyLinePlaceholder":658},[36,151574,151575,151577],{"class":38,"line":736},[36,151576,3486],{"class":112},[36,151578,151579],{"class":42},"(dates)\n",[36,151581,151582,151584],{"class":38,"line":742},[36,151583,3486],{"class":112},[36,151585,151586],{"class":42},"(sales)\n",[14,151588,151590],{"id":151589},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[26,151592,151594],{"className":28,"code":151593,"language":30,"meta":31,"style":31},"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",[33,151595,151596,151610,151620,151624,151632,151653,151675,151697,151719,151741,151745,151749,151771,151792,151796,151804,151808,151812,151822,151831,151841,151857,151861,151865,151882,151898,151914,151930,151940,151944],{"__ignoreMap":31},[36,151597,151598,151600,151602,151604,151606,151608],{"class":38,"line":39},[36,151599,645],{"class":46},[36,151601,150413],{"class":42},[36,151603,611],{"class":46},[36,151605,150418],{"class":42},[36,151607,617],{"class":46},[36,151609,150423],{"class":42},[36,151611,151612,151614,151616,151618],{"class":38,"line":53},[36,151613,645],{"class":46},[36,151615,150272],{"class":42},[36,151617,611],{"class":46},[36,151619,150277],{"class":42},[36,151621,151622],{"class":38,"line":196},[36,151623,659],{"emptyLinePlaceholder":658},[36,151625,151626,151628,151630],{"class":38,"line":642},[36,151627,151499],{"class":42},[36,151629,47],{"class":46},[36,151631,59003],{"class":42},[36,151633,151634,151636,151638,151640,151643,151645,151647,151649,151651],{"class":38,"line":655},[36,151635,151419],{"class":42},[36,151637,151031],{"class":105},[36,151639,54994],{"class":42},[36,151641,151642],{"class":105},"\"2024-10-01\"",[36,151644,478],{"class":42},[36,151646,87638],{"class":105},[36,151648,54994],{"class":42},[36,151650,95575],{"class":112},[36,151652,8626],{"class":42},[36,151654,151655,151657,151659,151661,151664,151666,151668,151670,151673],{"class":38,"line":662},[36,151656,151419],{"class":42},[36,151658,151031],{"class":105},[36,151660,54994],{"class":42},[36,151662,151663],{"class":105},"\"2024-10-02\"",[36,151665,478],{"class":42},[36,151667,87638],{"class":105},[36,151669,54994],{"class":42},[36,151671,151672],{"class":112},"1800",[36,151674,8626],{"class":42},[36,151676,151677,151679,151681,151683,151686,151688,151690,151692,151695],{"class":38,"line":667},[36,151678,151419],{"class":42},[36,151680,151031],{"class":105},[36,151682,54994],{"class":42},[36,151684,151685],{"class":105},"\"2024-10-03\"",[36,151687,478],{"class":42},[36,151689,87638],{"class":105},[36,151691,54994],{"class":42},[36,151693,151694],{"class":112},"1500",[36,151696,8626],{"class":42},[36,151698,151699,151701,151703,151705,151708,151710,151712,151714,151717],{"class":38,"line":679},[36,151700,151419],{"class":42},[36,151702,151031],{"class":105},[36,151704,54994],{"class":42},[36,151706,151707],{"class":105},"\"2024-10-04\"",[36,151709,478],{"class":42},[36,151711,87638],{"class":105},[36,151713,54994],{"class":42},[36,151715,151716],{"class":112},"2100",[36,151718,8626],{"class":42},[36,151720,151721,151723,151725,151727,151730,151732,151734,151736,151739],{"class":38,"line":685},[36,151722,151419],{"class":42},[36,151724,151031],{"class":105},[36,151726,54994],{"class":42},[36,151728,151729],{"class":105},"\"2024-10-05\"",[36,151731,478],{"class":42},[36,151733,87638],{"class":105},[36,151735,54994],{"class":42},[36,151737,151738],{"class":112},"2600",[36,151740,8626],{"class":42},[36,151742,151743],{"class":38,"line":691},[36,151744,36806],{"class":42},[36,151746,151747],{"class":38,"line":696},[36,151748,659],{"emptyLinePlaceholder":658},[36,151750,151751,151753,151755,151758,151760,151762,151764,151766,151768],{"class":38,"line":702},[36,151752,150834],{"class":42},[36,151754,47],{"class":46},[36,151756,151757],{"class":42}," [item[",[36,151759,151031],{"class":105},[36,151761,8140],{"class":42},[36,151763,3120],{"class":46},[36,151765,151243],{"class":42},[36,151767,1619],{"class":46},[36,151769,151770],{"class":42}," sales]\n",[36,151772,151773,151776,151778,151780,151782,151784,151786,151788,151790],{"class":38,"line":708},[36,151774,151775],{"class":42},"amounts ",[36,151777,47],{"class":46},[36,151779,151757],{"class":42},[36,151781,87638],{"class":105},[36,151783,8140],{"class":42},[36,151785,3120],{"class":46},[36,151787,151243],{"class":42},[36,151789,1619],{"class":46},[36,151791,151770],{"class":42},[36,151793,151794],{"class":38,"line":713},[36,151795,659],{"emptyLinePlaceholder":658},[36,151797,151798,151800,151802],{"class":38,"line":719},[36,151799,150286],{"class":42},[36,151801,47],{"class":46},[36,151803,150291],{"class":42},[36,151805,151806],{"class":38,"line":725},[36,151807,150875],{"class":42},[36,151809,151810],{"class":38,"line":731},[36,151811,150683],{"class":42},[36,151813,151814,151816,151818,151820],{"class":38,"line":736},[36,151815,150688],{"class":468},[36,151817,47],{"class":46},[36,151819,150329],{"class":105},[36,151821,35056],{"class":42},[36,151823,151824,151826,151828],{"class":38,"line":742},[36,151825,150699],{"class":468},[36,151827,47],{"class":46},[36,151829,151830],{"class":42},"amounts,\n",[36,151832,151833,151835,151837,151839],{"class":38,"line":748},[36,151834,150728],{"class":468},[36,151836,47],{"class":46},[36,151838,35066],{"class":112},[36,151840,35056],{"class":42},[36,151842,151843,151845,151847,151849,151851,151853,151855],{"class":38,"line":754},[36,151844,150739],{"class":468},[36,151846,47],{"class":46},[36,151848,150744],{"class":42},[36,151850,150747],{"class":468},[36,151852,47],{"class":46},[36,151854,35066],{"class":112},[36,151856,41607],{"class":42},[36,151858,151859],{"class":38,"line":760},[36,151860,922],{"class":42},[36,151862,151863],{"class":38,"line":766},[36,151864,150502],{"class":42},[36,151866,151867,151869,151871,151873,151875,151877,151880],{"class":38,"line":772},[36,151868,150507],{"class":468},[36,151870,47],{"class":46},[36,151872,150512],{"class":42},[36,151874,54964],{"class":468},[36,151876,47],{"class":46},[36,151878,151879],{"class":105},"\"每日销售额\"",[36,151881,41607],{"class":42},[36,151883,151884,151886,151888,151890,151892,151894,151896],{"class":38,"line":778},[36,151885,150526],{"class":468},[36,151887,47],{"class":46},[36,151889,150531],{"class":42},[36,151891,83364],{"class":468},[36,151893,47],{"class":46},[36,151895,150538],{"class":105},[36,151897,41607],{"class":42},[36,151899,151900,151902,151904,151906,151908,151910,151912],{"class":38,"line":783},[36,151901,150545],{"class":468},[36,151903,47],{"class":46},[36,151905,150531],{"class":42},[36,151907,83364],{"class":468},[36,151909,47],{"class":46},[36,151911,150556],{"class":105},[36,151913,41607],{"class":42},[36,151915,151916,151918,151920,151922,151924,151926,151928],{"class":38,"line":789},[36,151917,150563],{"class":468},[36,151919,47],{"class":46},[36,151921,150568],{"class":42},[36,151923,150571],{"class":468},[36,151925,47],{"class":46},[36,151927,150576],{"class":105},[36,151929,41607],{"class":42},[36,151931,151932,151935,151937],{"class":38,"line":795},[36,151933,151934],{"class":468},"    datazoom_opts",[36,151936,47],{"class":46},[36,151938,151939],{"class":42},"[opts.DataZoomOpts()],\n",[36,151941,151942],{"class":38,"line":801},[36,151943,922],{"class":42},[36,151945,151946,151948,151951],{"class":38,"line":807},[36,151947,150358],{"class":42},[36,151949,151950],{"class":105},"\"daily_sales.html\"",[36,151952,922],{"class":42},[19,151954,151955,151958],{},[33,151956,151957],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,151960,151962],{"id":151961},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,151964,151965],{},"如果数据结构如下：",[26,151967,151969],{"className":28,"code":151968,"language":30,"meta":31,"style":31},"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",[33,151970,151971,151979,151987,152009,152030,152035,152042,152062,152082,152086],{"__ignoreMap":31},[36,151972,151973,151975,151977],{"class":38,"line":39},[36,151974,105170],{"class":42},[36,151976,47],{"class":46},[36,151978,19228],{"class":42},[36,151980,151981,151984],{"class":38,"line":53},[36,151982,151983],{"class":105},"    \"北京\"",[36,151985,151986],{"class":42},": [\n",[36,151988,151989,151991,151993,151995,151998,152000,152003,152005,152007],{"class":38,"line":196},[36,151990,8613],{"class":42},[36,151992,151031],{"class":105},[36,151994,54994],{"class":42},[36,151996,151997],{"class":105},"\"2024-01-01\"",[36,151999,478],{"class":42},[36,152001,152002],{"class":105},"\"confirm\"",[36,152004,54994],{"class":42},[36,152006,554],{"class":112},[36,152008,8626],{"class":42},[36,152010,152011,152013,152015,152017,152020,152022,152024,152026,152028],{"class":38,"line":642},[36,152012,8613],{"class":42},[36,152014,151031],{"class":105},[36,152016,54994],{"class":42},[36,152018,152019],{"class":105},"\"2024-01-02\"",[36,152021,478],{"class":42},[36,152023,152002],{"class":105},[36,152025,54994],{"class":42},[36,152027,4371],{"class":112},[36,152029,8626],{"class":42},[36,152031,152032],{"class":38,"line":655},[36,152033,152034],{"class":42},"    ],\n",[36,152036,152037,152040],{"class":38,"line":662},[36,152038,152039],{"class":105},"    \"上海\"",[36,152041,151986],{"class":42},[36,152043,152044,152046,152048,152050,152052,152054,152056,152058,152060],{"class":38,"line":667},[36,152045,8613],{"class":42},[36,152047,151031],{"class":105},[36,152049,54994],{"class":42},[36,152051,151997],{"class":105},[36,152053,478],{"class":42},[36,152055,152002],{"class":105},[36,152057,54994],{"class":42},[36,152059,4270],{"class":112},[36,152061,8626],{"class":42},[36,152063,152064,152066,152068,152070,152072,152074,152076,152078,152080],{"class":38,"line":679},[36,152065,8613],{"class":42},[36,152067,151031],{"class":105},[36,152069,54994],{"class":42},[36,152071,152019],{"class":105},[36,152073,478],{"class":42},[36,152075,152002],{"class":105},[36,152077,54994],{"class":42},[36,152079,4396],{"class":112},[36,152081,8626],{"class":42},[36,152083,152084],{"class":38,"line":685},[36,152085,152034],{"class":42},[36,152087,152088],{"class":38,"line":691},[36,152089,5300],{"class":42},[19,152091,152092],{},"绘制多地区趋势：",[26,152094,152096],{"className":28,"code":152095,"language":30,"meta":31,"style":31},"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",[33,152097,152098,152112,152122,152126,152151,152155,152163,152167,152171,152183,152205,152218,152222,152226,152243,152259,152263],{"__ignoreMap":31},[36,152099,152100,152102,152104,152106,152108,152110],{"class":38,"line":39},[36,152101,645],{"class":46},[36,152103,150413],{"class":42},[36,152105,611],{"class":46},[36,152107,150418],{"class":42},[36,152109,617],{"class":46},[36,152111,150423],{"class":42},[36,152113,152114,152116,152118,152120],{"class":38,"line":53},[36,152115,645],{"class":46},[36,152117,150272],{"class":42},[36,152119,611],{"class":46},[36,152121,150277],{"class":42},[36,152123,152124],{"class":38,"line":196},[36,152125,659],{"emptyLinePlaceholder":658},[36,152127,152128,152130,152132,152134,152136,152138,152140,152142,152144,152147,152149],{"class":38,"line":642},[36,152129,150834],{"class":42},[36,152131,47],{"class":46},[36,152133,151757],{"class":42},[36,152135,151031],{"class":105},[36,152137,8140],{"class":42},[36,152139,3120],{"class":46},[36,152141,151243],{"class":42},[36,152143,1619],{"class":46},[36,152145,152146],{"class":42}," data[",[36,152148,72824],{"class":105},[36,152150,81081],{"class":42},[36,152152,152153],{"class":38,"line":655},[36,152154,659],{"emptyLinePlaceholder":658},[36,152156,152157,152159,152161],{"class":38,"line":662},[36,152158,150286],{"class":42},[36,152160,47],{"class":46},[36,152162,150291],{"class":42},[36,152164,152165],{"class":38,"line":667},[36,152166,150875],{"class":42},[36,152168,152169],{"class":38,"line":679},[36,152170,659],{"emptyLinePlaceholder":658},[36,152172,152173,152175,152178,152180],{"class":38,"line":685},[36,152174,3120],{"class":46},[36,152176,152177],{"class":42}," city, records ",[36,152179,1619],{"class":46},[36,152181,152182],{"class":42}," data.items():\n",[36,152184,152185,152188,152190,152192,152194,152196,152198,152200,152202],{"class":38,"line":691},[36,152186,152187],{"class":42},"    values ",[36,152189,47],{"class":46},[36,152191,151757],{"class":42},[36,152193,152002],{"class":105},[36,152195,8140],{"class":42},[36,152197,3120],{"class":46},[36,152199,151243],{"class":42},[36,152201,1619],{"class":46},[36,152203,152204],{"class":42}," records]\n",[36,152206,152207,152210,152212,152214,152216],{"class":38,"line":696},[36,152208,152209],{"class":42},"    line.add_yaxis(city, values, ",[36,152211,150779],{"class":468},[36,152213,47],{"class":46},[36,152215,35066],{"class":112},[36,152217,922],{"class":42},[36,152219,152220],{"class":38,"line":702},[36,152221,659],{"emptyLinePlaceholder":658},[36,152223,152224],{"class":38,"line":708},[36,152225,150502],{"class":42},[36,152227,152228,152230,152232,152234,152236,152238,152241],{"class":38,"line":713},[36,152229,150507],{"class":468},[36,152231,47],{"class":46},[36,152233,150512],{"class":42},[36,152235,54964],{"class":468},[36,152237,47],{"class":46},[36,152239,152240],{"class":105},"\"多地区趋势图\"",[36,152242,41607],{"class":42},[36,152244,152245,152247,152249,152251,152253,152255,152257],{"class":38,"line":719},[36,152246,150563],{"class":468},[36,152248,47],{"class":46},[36,152250,150568],{"class":42},[36,152252,150571],{"class":468},[36,152254,47],{"class":46},[36,152256,150576],{"class":105},[36,152258,41607],{"class":42},[36,152260,152261],{"class":38,"line":725},[36,152262,922],{"class":42},[36,152264,152265,152267,152270],{"class":38,"line":731},[36,152266,150358],{"class":42},[36,152268,152269],{"class":105},"\"trend.html\"",[36,152271,922],{"class":42},[19,152273,152274],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,152276,152278],{"id":152277},"_1012-易错点","10.12 易错点",[211,152280,152281,152287,152293,152303,152309],{},[214,152282,152283,152286],{},[33,152284,152285],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[214,152288,152289,152292],{},[33,152290,152291],{},"render()"," 生成的是 HTML，不是图片。",[214,152294,152295,152296,152299,152300,224],{},"JSON 字符串用 ",[33,152297,152298],{},"json.loads()","，JSON 文件用 ",[33,152301,152302],{},"json.load()",[214,152304,152305,152306,224],{},"中文 JSON 保存时加 ",[33,152307,152308],{},"ensure_ascii=False",[214,152310,152311],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,152313,152315],{"id":152314},"_1013-本章练习","10.13 本章练习",[211,152317,152318,152321,152324,152327,152330],{},[214,152319,152320],{},"安装 pyecharts 并生成第一个折线图。",[214,152322,152323],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[214,152325,152326],{},"绘制两条折线，对比线上和线下销售额。",[214,152328,152329],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[214,152331,152332],{},"对含有空值的销售数据进行清洗后再绘图。",[3785,152334,152335],{},"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":31,"searchDepth":53,"depth":53,"links":152337},[152338,152339,152340,152341,152342,152343,152344,152345,152346,152347,152348,152349,152350],{"id":149954,"depth":53,"text":149955},{"id":150029,"depth":53,"text":150030},{"id":150208,"depth":53,"text":150209},{"id":150259,"depth":53,"text":150260},{"id":150393,"depth":53,"text":150394},{"id":150669,"depth":53,"text":150670},{"id":150795,"depth":53,"text":150796},{"id":151006,"depth":53,"text":151007},{"id":151377,"depth":53,"text":151378},{"id":151589,"depth":53,"text":151590},{"id":151961,"depth":53,"text":151962},{"id":152277,"depth":53,"text":152278},{"id":152314,"depth":53,"text":152315},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":149946,"description":26998},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":152357,"title":152358,"body":152359,"description":26998,"extension":3817,"meta":154719,"navigation":658,"path":154720,"seo":154721,"stem":154722,"__hash__":154723},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":152360,"toc":154696},[152361,152364,152368,152371,152374,152450,152453,152544,152547,152551,152554,152598,152611,152615,152618,152685,152688,152692,152695,152779,152787,152791,152796,152937,152940,152951,152957,152963,153077,153081,153084,153087,153340,153343,153347,153350,153454,153457,153461,153612,153616,153623,153736,153740,153743,153849,153852,153856,153859,153890,153893,153998,154001,154005,154009,154019,154087,154091,154098,154162,154165,154169,154175,154271,154280,154284,154608,154617,154621,154649,154653,154693],[10,152362,152358],{"id":152363},"_11-面向对象基础",[14,152365,152367],{"id":152366},"_111-什么是面向对象","11.1 什么是面向对象",[19,152369,152370],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,152372,152373],{},"面向过程：",[26,152375,152377],{"className":28,"code":152376,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[33,152378,152379,152388,152396,152400,152410,152441,152445],{"__ignoreMap":31},[36,152380,152381,152383,152385],{"class":38,"line":39},[36,152382,149570],{"class":42},[36,152384,47],{"class":46},[36,152386,152387],{"class":105}," \"小明\"\n",[36,152389,152390,152392,152394],{"class":38,"line":53},[36,152391,149580],{"class":42},[36,152393,47],{"class":46},[36,152395,149585],{"class":112},[36,152397,152398],{"class":38,"line":196},[36,152399,659],{"emptyLinePlaceholder":658},[36,152401,152402,152404,152407],{"class":38,"line":642},[36,152403,1820],{"class":46},[36,152405,152406],{"class":101}," introduce",[36,152408,152409],{"class":42},"(name, age):\n",[36,152411,152412,152414,152416,152418,152421,152423,152425,152427,152430,152432,152434,152436,152439],{"class":38,"line":655},[36,152413,1867],{"class":112},[36,152415,495],{"class":42},[36,152417,3937],{"class":46},[36,152419,152420],{"class":105},"\"我叫",[36,152422,4766],{"class":112},[36,152424,83364],{"class":42},[36,152426,4815],{"class":112},[36,152428,152429],{"class":105},"，今年",[36,152431,4766],{"class":112},[36,152433,73775],{"class":42},[36,152435,4815],{"class":112},[36,152437,152438],{"class":105},"岁\"",[36,152440,922],{"class":42},[36,152442,152443],{"class":38,"line":662},[36,152444,659],{"emptyLinePlaceholder":658},[36,152446,152447],{"class":38,"line":667},[36,152448,152449],{"class":42},"introduce(name, age)\n",[19,152451,152452],{},"面向对象：",[26,152454,152456],{"className":28,"code":152455,"language":30,"meta":31,"style":31},"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",[33,152457,152458,152466,152474,152503,152507,152511,152521,152530,152539],{"__ignoreMap":31},[36,152459,152460,152462,152464],{"class":38,"line":39},[36,152461,832],{"class":46},[36,152463,11589],{"class":101},[36,152465,888],{"class":42},[36,152467,152468,152470,152472],{"class":38,"line":53},[36,152469,876],{"class":46},[36,152471,152406],{"class":101},[36,152473,34406],{"class":42},[36,152475,152476,152478,152480,152482,152484,152487,152489,152491,152493,152495,152497,152499,152501],{"class":38,"line":196},[36,152477,1960],{"class":112},[36,152479,495],{"class":42},[36,152481,3937],{"class":46},[36,152483,152420],{"class":105},[36,152485,152486],{"class":112},"{self",[36,152488,83855],{"class":42},[36,152490,4815],{"class":112},[36,152492,152429],{"class":105},[36,152494,152486],{"class":112},[36,152496,83867],{"class":42},[36,152498,4815],{"class":112},[36,152500,152438],{"class":105},[36,152502,922],{"class":42},[36,152504,152505],{"class":38,"line":642},[36,152506,659],{"emptyLinePlaceholder":658},[36,152508,152509],{"class":38,"line":655},[36,152510,659],{"emptyLinePlaceholder":658},[36,152512,152513,152516,152518],{"class":38,"line":662},[36,152514,152515],{"class":42},"student ",[36,152517,47],{"class":46},[36,152519,152520],{"class":42}," Student()\n",[36,152522,152523,152526,152528],{"class":38,"line":667},[36,152524,152525],{"class":42},"student.name ",[36,152527,47],{"class":46},[36,152529,152387],{"class":105},[36,152531,152532,152535,152537],{"class":38,"line":679},[36,152533,152534],{"class":42},"student.age ",[36,152536,47],{"class":46},[36,152538,149585],{"class":112},[36,152540,152541],{"class":38,"line":685},[36,152542,152543],{"class":42},"student.introduce()\n",[19,152545,152546],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,152548,152550],{"id":152549},"_112-类和对象","11.2 类和对象",[19,152552,152553],{},"类是模板，对象是根据模板创建出来的具体实例。",[26,152555,152557],{"className":28,"code":152556,"language":30,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[33,152558,152559,152567,152572,152576,152580,152589],{"__ignoreMap":31},[36,152560,152561,152563,152565],{"class":38,"line":39},[36,152562,832],{"class":46},[36,152564,11589],{"class":101},[36,152566,888],{"class":42},[36,152568,152569],{"class":38,"line":53},[36,152570,152571],{"class":46},"    pass\n",[36,152573,152574],{"class":38,"line":196},[36,152575,659],{"emptyLinePlaceholder":658},[36,152577,152578],{"class":38,"line":642},[36,152579,659],{"emptyLinePlaceholder":658},[36,152581,152582,152585,152587],{"class":38,"line":655},[36,152583,152584],{"class":42},"student1 ",[36,152586,47],{"class":46},[36,152588,152520],{"class":42},[36,152590,152591,152594,152596],{"class":38,"line":662},[36,152592,152593],{"class":42},"student2 ",[36,152595,47],{"class":46},[36,152597,152520],{"class":42},[19,152599,152600,152603,152604,324,152607,152610],{},[33,152601,152602],{},"Student"," 是类，",[33,152605,152606],{},"student1",[33,152608,152609],{},"student2"," 是对象。",[14,152612,152614],{"id":152613},"_113-属性","11.3 属性",[19,152616,152617],{},"属性是对象保存的数据。",[26,152619,152621],{"className":28,"code":152620,"language":30,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[33,152622,152623,152631,152635,152639,152643,152651,152659,152667,152671,152678],{"__ignoreMap":31},[36,152624,152625,152627,152629],{"class":38,"line":39},[36,152626,832],{"class":46},[36,152628,11589],{"class":101},[36,152630,888],{"class":42},[36,152632,152633],{"class":38,"line":53},[36,152634,152571],{"class":46},[36,152636,152637],{"class":38,"line":196},[36,152638,659],{"emptyLinePlaceholder":658},[36,152640,152641],{"class":38,"line":642},[36,152642,659],{"emptyLinePlaceholder":658},[36,152644,152645,152647,152649],{"class":38,"line":655},[36,152646,152515],{"class":42},[36,152648,47],{"class":46},[36,152650,152520],{"class":42},[36,152652,152653,152655,152657],{"class":38,"line":662},[36,152654,152525],{"class":42},[36,152656,47],{"class":46},[36,152658,152387],{"class":105},[36,152660,152661,152663,152665],{"class":38,"line":667},[36,152662,152534],{"class":42},[36,152664,47],{"class":46},[36,152666,149585],{"class":112},[36,152668,152669],{"class":38,"line":679},[36,152670,659],{"emptyLinePlaceholder":658},[36,152672,152673,152675],{"class":38,"line":685},[36,152674,3486],{"class":112},[36,152676,152677],{"class":42},"(student.name)\n",[36,152679,152680,152682],{"class":38,"line":691},[36,152681,3486],{"class":112},[36,152683,152684],{"class":42},"(student.age)\n",[19,152686,152687],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,152689,152691],{"id":152690},"_114-方法","11.4 方法",[19,152693,152694],{},"类中的函数叫方法。",[26,152696,152697],{"className":28,"code":152455,"language":30,"meta":31,"style":31},[33,152698,152699,152707,152715,152743,152747,152751,152759,152767,152775],{"__ignoreMap":31},[36,152700,152701,152703,152705],{"class":38,"line":39},[36,152702,832],{"class":46},[36,152704,11589],{"class":101},[36,152706,888],{"class":42},[36,152708,152709,152711,152713],{"class":38,"line":53},[36,152710,876],{"class":46},[36,152712,152406],{"class":101},[36,152714,34406],{"class":42},[36,152716,152717,152719,152721,152723,152725,152727,152729,152731,152733,152735,152737,152739,152741],{"class":38,"line":196},[36,152718,1960],{"class":112},[36,152720,495],{"class":42},[36,152722,3937],{"class":46},[36,152724,152420],{"class":105},[36,152726,152486],{"class":112},[36,152728,83855],{"class":42},[36,152730,4815],{"class":112},[36,152732,152429],{"class":105},[36,152734,152486],{"class":112},[36,152736,83867],{"class":42},[36,152738,4815],{"class":112},[36,152740,152438],{"class":105},[36,152742,922],{"class":42},[36,152744,152745],{"class":38,"line":642},[36,152746,659],{"emptyLinePlaceholder":658},[36,152748,152749],{"class":38,"line":655},[36,152750,659],{"emptyLinePlaceholder":658},[36,152752,152753,152755,152757],{"class":38,"line":662},[36,152754,152515],{"class":42},[36,152756,47],{"class":46},[36,152758,152520],{"class":42},[36,152760,152761,152763,152765],{"class":38,"line":667},[36,152762,152525],{"class":42},[36,152764,47],{"class":46},[36,152766,152387],{"class":105},[36,152768,152769,152771,152773],{"class":38,"line":679},[36,152770,152534],{"class":42},[36,152772,47],{"class":46},[36,152774,149585],{"class":112},[36,152776,152777],{"class":38,"line":685},[36,152778,152543],{"class":42},[19,152780,152781,152783,152784,152786],{},[33,152782,457],{}," 表示当前对象。调用方法时不需要手动传入 ",[33,152785,457],{},"，Python 会自动传。",[14,152788,152790],{"id":152789},"_115-构造方法__init__","11.5 构造方法__init__",[19,152792,152793,152795],{},[33,152794,900],{}," 在对象创建时自动执行，用于初始化属性。",[26,152797,152799],{"className":28,"code":152798,"language":30,"meta":31,"style":31},"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",[33,152800,152801,152809,152818,152830,152842,152853,152857,152865,152903,152907,152911,152933],{"__ignoreMap":31},[36,152802,152803,152805,152807],{"class":38,"line":39},[36,152804,832],{"class":46},[36,152806,11589],{"class":101},[36,152808,888],{"class":42},[36,152810,152811,152813,152815],{"class":38,"line":53},[36,152812,876],{"class":46},[36,152814,879],{"class":112},[36,152816,152817],{"class":42},"(self, name, age, score):\n",[36,152819,152820,152822,152825,152827],{"class":38,"line":196},[36,152821,909],{"class":112},[36,152823,152824],{"class":42},".name ",[36,152826,47],{"class":46},[36,152828,152829],{"class":42}," name\n",[36,152831,152832,152834,152837,152839],{"class":38,"line":642},[36,152833,909],{"class":112},[36,152835,152836],{"class":42},".age ",[36,152838,47],{"class":46},[36,152840,152841],{"class":42}," age\n",[36,152843,152844,152846,152849,152851],{"class":38,"line":655},[36,152845,909],{"class":112},[36,152847,152848],{"class":42},".score ",[36,152850,47],{"class":46},[36,152852,5314],{"class":42},[36,152854,152855],{"class":38,"line":662},[36,152856,659],{"emptyLinePlaceholder":658},[36,152858,152859,152861,152863],{"class":38,"line":667},[36,152860,876],{"class":46},[36,152862,152406],{"class":101},[36,152864,34406],{"class":42},[36,152866,152867,152869,152871,152873,152875,152877,152879,152881,152883,152885,152887,152889,152892,152894,152897,152899,152901],{"class":38,"line":679},[36,152868,1960],{"class":112},[36,152870,495],{"class":42},[36,152872,3937],{"class":46},[36,152874,152420],{"class":105},[36,152876,152486],{"class":112},[36,152878,83855],{"class":42},[36,152880,4815],{"class":112},[36,152882,152429],{"class":105},[36,152884,152486],{"class":112},[36,152886,83867],{"class":42},[36,152888,4815],{"class":112},[36,152890,152891],{"class":105},"岁，成绩",[36,152893,152486],{"class":112},[36,152895,152896],{"class":42},".score",[36,152898,4815],{"class":112},[36,152900,4126],{"class":105},[36,152902,922],{"class":42},[36,152904,152905],{"class":38,"line":685},[36,152906,659],{"emptyLinePlaceholder":658},[36,152908,152909],{"class":38,"line":691},[36,152910,659],{"emptyLinePlaceholder":658},[36,152912,152913,152915,152917,152920,152923,152925,152927,152929,152931],{"class":38,"line":696},[36,152914,152515],{"class":42},[36,152916,47],{"class":46},[36,152918,152919],{"class":42}," Student(",[36,152921,152922],{"class":105},"\"小明\"",[36,152924,478],{"class":42},[36,152926,4521],{"class":112},[36,152928,478],{"class":42},[36,152930,4858],{"class":112},[36,152932,922],{"class":42},[36,152934,152935],{"class":38,"line":702},[36,152936,152543],{"class":42},[19,152938,152939],{},"构造方法的好处：",[211,152941,152942,152945,152948],{},[214,152943,152944],{},"创建对象时必须提供必要数据。",[214,152946,152947],{},"属性初始化集中，不容易漏。",[214,152949,152950],{},"对象状态更完整。",[14,152952,152954,152955],{"id":152953},"_116-str","11.6 ",[4027,152956,5038],{},[19,152958,152959,152960,224],{},"直接打印对象时，默认输出不直观。可以定义 ",[33,152961,152962],{},"__str__",[26,152964,152966],{"className":28,"code":152965,"language":30,"meta":31,"style":31},"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",[33,152967,152968,152976,152985,152995,153005,153009,153018,153046,153050,153054,153070],{"__ignoreMap":31},[36,152969,152970,152972,152974],{"class":38,"line":39},[36,152971,832],{"class":46},[36,152973,11589],{"class":101},[36,152975,888],{"class":42},[36,152977,152978,152980,152982],{"class":38,"line":53},[36,152979,876],{"class":46},[36,152981,879],{"class":112},[36,152983,152984],{"class":42},"(self, name, age):\n",[36,152986,152987,152989,152991,152993],{"class":38,"line":196},[36,152988,909],{"class":112},[36,152990,152824],{"class":42},[36,152992,47],{"class":46},[36,152994,152829],{"class":42},[36,152996,152997,152999,153001,153003],{"class":38,"line":642},[36,152998,909],{"class":112},[36,153000,152836],{"class":42},[36,153002,47],{"class":46},[36,153004,152841],{"class":42},[36,153006,153007],{"class":38,"line":655},[36,153008,659],{"emptyLinePlaceholder":658},[36,153010,153011,153013,153016],{"class":38,"line":662},[36,153012,876],{"class":46},[36,153014,153015],{"class":112}," __str__",[36,153017,34406],{"class":42},[36,153019,153020,153022,153025,153028,153030,153032,153034,153037,153039,153041,153043],{"class":38,"line":667},[36,153021,1239],{"class":46},[36,153023,153024],{"class":46}," f",[36,153026,153027],{"class":105},"\"Student(name=",[36,153029,152486],{"class":112},[36,153031,83855],{"class":42},[36,153033,4815],{"class":112},[36,153035,153036],{"class":105},", age=",[36,153038,152486],{"class":112},[36,153040,83867],{"class":42},[36,153042,4815],{"class":112},[36,153044,153045],{"class":105},")\"\n",[36,153047,153048],{"class":38,"line":679},[36,153049,659],{"emptyLinePlaceholder":658},[36,153051,153052],{"class":38,"line":685},[36,153053,659],{"emptyLinePlaceholder":658},[36,153055,153056,153058,153060,153062,153064,153066,153068],{"class":38,"line":691},[36,153057,152515],{"class":42},[36,153059,47],{"class":46},[36,153061,152919],{"class":42},[36,153063,152922],{"class":105},[36,153065,478],{"class":42},[36,153067,4521],{"class":112},[36,153069,922],{"class":42},[36,153071,153072,153074],{"class":38,"line":696},[36,153073,3486],{"class":112},[36,153075,153076],{"class":42},"(student)\n",[14,153078,153080],{"id":153079},"_117-封装","11.7 封装",[19,153082,153083],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,153085,153086],{},"Python 中以双下划线开头的属性通常视为私有属性。",[26,153088,153090],{"className":28,"code":153089,"language":30,"meta":31,"style":31},"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",[33,153091,153092,153101,153110,153122,153134,153138,153147,153156,153160,153170,153183,153194,153199,153210,153214,153223,153235,153246,153250,153263,153274,153278,153289,153293,153297,153315,153324,153333],{"__ignoreMap":31},[36,153093,153094,153096,153099],{"class":38,"line":39},[36,153095,832],{"class":46},[36,153097,153098],{"class":101}," Account",[36,153100,888],{"class":42},[36,153102,153103,153105,153107],{"class":38,"line":53},[36,153104,876],{"class":46},[36,153106,879],{"class":112},[36,153108,153109],{"class":42},"(self, owner, balance):\n",[36,153111,153112,153114,153117,153119],{"class":38,"line":196},[36,153113,909],{"class":112},[36,153115,153116],{"class":42},".owner ",[36,153118,47],{"class":46},[36,153120,153121],{"class":42}," owner\n",[36,153123,153124,153126,153129,153131],{"class":38,"line":642},[36,153125,909],{"class":112},[36,153127,153128],{"class":42},".__balance ",[36,153130,47],{"class":46},[36,153132,153133],{"class":42}," balance\n",[36,153135,153136],{"class":38,"line":655},[36,153137,659],{"emptyLinePlaceholder":658},[36,153139,153140,153142,153145],{"class":38,"line":662},[36,153141,876],{"class":46},[36,153143,153144],{"class":101}," get_balance",[36,153146,34406],{"class":42},[36,153148,153149,153151,153153],{"class":38,"line":667},[36,153150,1239],{"class":46},[36,153152,406],{"class":112},[36,153154,153155],{"class":42},".__balance\n",[36,153157,153158],{"class":38,"line":679},[36,153159,659],{"emptyLinePlaceholder":658},[36,153161,153162,153164,153167],{"class":38,"line":685},[36,153163,876],{"class":46},[36,153165,153166],{"class":101}," deposit",[36,153168,153169],{"class":42},"(self, money):\n",[36,153171,153172,153174,153177,153179,153181],{"class":38,"line":691},[36,153173,995],{"class":46},[36,153175,153176],{"class":42}," money ",[36,153178,5323],{"class":46},[36,153180,1004],{"class":112},[36,153182,888],{"class":42},[36,153184,153185,153187,153189,153192],{"class":38,"line":696},[36,153186,38210],{"class":112},[36,153188,495],{"class":42},[36,153190,153191],{"class":105},"\"存款金额必须大于0\"",[36,153193,922],{"class":42},[36,153195,153196],{"class":38,"line":702},[36,153197,153198],{"class":46},"            return\n",[36,153200,153201,153203,153205,153207],{"class":38,"line":708},[36,153202,909],{"class":112},[36,153204,153128],{"class":42},[36,153206,1658],{"class":46},[36,153208,153209],{"class":42}," money\n",[36,153211,153212],{"class":38,"line":713},[36,153213,659],{"emptyLinePlaceholder":658},[36,153215,153216,153218,153221],{"class":38,"line":719},[36,153217,876],{"class":46},[36,153219,153220],{"class":101}," withdraw",[36,153222,153169],{"class":42},[36,153224,153225,153227,153229,153231,153233],{"class":38,"line":725},[36,153226,995],{"class":46},[36,153228,153176],{"class":42},[36,153230,5323],{"class":46},[36,153232,1004],{"class":112},[36,153234,888],{"class":42},[36,153236,153237,153239,153241,153244],{"class":38,"line":731},[36,153238,38210],{"class":112},[36,153240,495],{"class":42},[36,153242,153243],{"class":105},"\"取款金额必须大于0\"",[36,153245,922],{"class":42},[36,153247,153248],{"class":38,"line":736},[36,153249,153198],{"class":46},[36,153251,153252,153254,153256,153258,153260],{"class":38,"line":742},[36,153253,995],{"class":46},[36,153255,153176],{"class":42},[36,153257,4829],{"class":46},[36,153259,406],{"class":112},[36,153261,153262],{"class":42},".__balance:\n",[36,153264,153265,153267,153269,153272],{"class":38,"line":748},[36,153266,38210],{"class":112},[36,153268,495],{"class":42},[36,153270,153271],{"class":105},"\"余额不足\"",[36,153273,922],{"class":42},[36,153275,153276],{"class":38,"line":754},[36,153277,153198],{"class":46},[36,153279,153280,153282,153284,153287],{"class":38,"line":760},[36,153281,909],{"class":112},[36,153283,153128],{"class":42},[36,153285,153286],{"class":46},"-=",[36,153288,153209],{"class":42},[36,153290,153291],{"class":38,"line":766},[36,153292,659],{"emptyLinePlaceholder":658},[36,153294,153295],{"class":38,"line":772},[36,153296,659],{"emptyLinePlaceholder":658},[36,153298,153299,153302,153304,153307,153309,153311,153313],{"class":38,"line":778},[36,153300,153301],{"class":42},"account ",[36,153303,47],{"class":46},[36,153305,153306],{"class":42}," Account(",[36,153308,152922],{"class":105},[36,153310,478],{"class":42},[36,153312,3727],{"class":112},[36,153314,922],{"class":42},[36,153316,153317,153320,153322],{"class":38,"line":783},[36,153318,153319],{"class":42},"account.deposit(",[36,153321,5445],{"class":112},[36,153323,922],{"class":42},[36,153325,153326,153329,153331],{"class":38,"line":789},[36,153327,153328],{"class":42},"account.withdraw(",[36,153330,4186],{"class":112},[36,153332,922],{"class":42},[36,153334,153335,153337],{"class":38,"line":795},[36,153336,3486],{"class":112},[36,153338,153339],{"class":42},"(account.get_balance())\n",[19,153341,153342],{},"封装的意义是避免外部随意修改内部状态。",[14,153344,153346],{"id":153345},"_118-继承","11.8 继承",[19,153348,153349],{},"继承可以让子类复用父类的属性和方法。",[26,153351,153353],{"className":28,"code":153352,"language":30,"meta":31,"style":31},"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",[33,153354,153355,153364,153373,153384,153388,153392,153406,153415,153426,153430,153434,153444,153449],{"__ignoreMap":31},[36,153356,153357,153359,153362],{"class":38,"line":39},[36,153358,832],{"class":46},[36,153360,153361],{"class":101}," Animal",[36,153363,888],{"class":42},[36,153365,153366,153368,153371],{"class":38,"line":53},[36,153367,876],{"class":46},[36,153369,153370],{"class":101}," eat",[36,153372,34406],{"class":42},[36,153374,153375,153377,153379,153382],{"class":38,"line":196},[36,153376,1960],{"class":112},[36,153378,495],{"class":42},[36,153380,153381],{"class":105},"\"吃东西\"",[36,153383,922],{"class":42},[36,153385,153386],{"class":38,"line":642},[36,153387,659],{"emptyLinePlaceholder":658},[36,153389,153390],{"class":38,"line":655},[36,153391,659],{"emptyLinePlaceholder":658},[36,153393,153394,153396,153399,153401,153404],{"class":38,"line":662},[36,153395,832],{"class":46},[36,153397,153398],{"class":101}," Dog",[36,153400,495],{"class":42},[36,153402,153403],{"class":101},"Animal",[36,153405,848],{"class":42},[36,153407,153408,153410,153413],{"class":38,"line":667},[36,153409,876],{"class":46},[36,153411,153412],{"class":101}," bark",[36,153414,34406],{"class":42},[36,153416,153417,153419,153421,153424],{"class":38,"line":679},[36,153418,1960],{"class":112},[36,153420,495],{"class":42},[36,153422,153423],{"class":105},"\"汪汪\"",[36,153425,922],{"class":42},[36,153427,153428],{"class":38,"line":685},[36,153429,659],{"emptyLinePlaceholder":658},[36,153431,153432],{"class":38,"line":691},[36,153433,659],{"emptyLinePlaceholder":658},[36,153435,153436,153439,153441],{"class":38,"line":696},[36,153437,153438],{"class":42},"dog ",[36,153440,47],{"class":46},[36,153442,153443],{"class":42}," Dog()\n",[36,153445,153446],{"class":38,"line":702},[36,153447,153448],{"class":42},"dog.eat()\n",[36,153450,153451],{"class":38,"line":708},[36,153452,153453],{"class":42},"dog.bark()\n",[19,153455,153456],{},"子类可以扩展新方法，也可以重写父类方法。",[14,153458,153460],{"id":153459},"_119-方法重写","11.9 方法重写",[26,153462,153464],{"className":28,"code":153463,"language":30,"meta":31,"style":31},"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",[33,153465,153466,153474,153483,153494,153498,153502,153514,153522,153532,153536,153540,153553,153561,153572,153576,153580,153588,153598,153602,153607],{"__ignoreMap":31},[36,153467,153468,153470,153472],{"class":38,"line":39},[36,153469,832],{"class":46},[36,153471,153361],{"class":101},[36,153473,888],{"class":42},[36,153475,153476,153478,153481],{"class":38,"line":53},[36,153477,876],{"class":46},[36,153479,153480],{"class":101}," speak",[36,153482,34406],{"class":42},[36,153484,153485,153487,153489,153492],{"class":38,"line":196},[36,153486,1960],{"class":112},[36,153488,495],{"class":42},[36,153490,153491],{"class":105},"\"动物叫\"",[36,153493,922],{"class":42},[36,153495,153496],{"class":38,"line":642},[36,153497,659],{"emptyLinePlaceholder":658},[36,153499,153500],{"class":38,"line":655},[36,153501,659],{"emptyLinePlaceholder":658},[36,153503,153504,153506,153508,153510,153512],{"class":38,"line":662},[36,153505,832],{"class":46},[36,153507,153398],{"class":101},[36,153509,495],{"class":42},[36,153511,153403],{"class":101},[36,153513,848],{"class":42},[36,153515,153516,153518,153520],{"class":38,"line":667},[36,153517,876],{"class":46},[36,153519,153480],{"class":101},[36,153521,34406],{"class":42},[36,153523,153524,153526,153528,153530],{"class":38,"line":679},[36,153525,1960],{"class":112},[36,153527,495],{"class":42},[36,153529,153423],{"class":105},[36,153531,922],{"class":42},[36,153533,153534],{"class":38,"line":685},[36,153535,659],{"emptyLinePlaceholder":658},[36,153537,153538],{"class":38,"line":691},[36,153539,659],{"emptyLinePlaceholder":658},[36,153541,153542,153544,153547,153549,153551],{"class":38,"line":696},[36,153543,832],{"class":46},[36,153545,153546],{"class":101}," Cat",[36,153548,495],{"class":42},[36,153550,153403],{"class":101},[36,153552,848],{"class":42},[36,153554,153555,153557,153559],{"class":38,"line":702},[36,153556,876],{"class":46},[36,153558,153480],{"class":101},[36,153560,34406],{"class":42},[36,153562,153563,153565,153567,153570],{"class":38,"line":708},[36,153564,1960],{"class":112},[36,153566,495],{"class":42},[36,153568,153569],{"class":105},"\"喵喵\"",[36,153571,922],{"class":42},[36,153573,153574],{"class":38,"line":713},[36,153575,659],{"emptyLinePlaceholder":658},[36,153577,153578],{"class":38,"line":719},[36,153579,659],{"emptyLinePlaceholder":658},[36,153581,153582,153584,153586],{"class":38,"line":725},[36,153583,153438],{"class":42},[36,153585,47],{"class":46},[36,153587,153443],{"class":42},[36,153589,153590,153593,153595],{"class":38,"line":731},[36,153591,153592],{"class":42},"cat ",[36,153594,47],{"class":46},[36,153596,153597],{"class":42}," Cat()\n",[36,153599,153600],{"class":38,"line":736},[36,153601,659],{"emptyLinePlaceholder":658},[36,153603,153604],{"class":38,"line":742},[36,153605,153606],{"class":42},"dog.speak()\n",[36,153608,153609],{"class":38,"line":748},[36,153610,153611],{"class":42},"cat.speak()\n",[14,153613,153615],{"id":153614},"_1110-super","11.10 super",[19,153617,153618,153619,153622],{},"子类可以通过 ",[33,153620,153621],{},"super()"," 调用父类方法。",[26,153624,153626],{"className":28,"code":153625,"language":30,"meta":31,"style":31},"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",[33,153627,153628,153636,153645,153655,153659,153663,153675,153684,153695,153705,153709,153713,153729],{"__ignoreMap":31},[36,153629,153630,153632,153634],{"class":38,"line":39},[36,153631,832],{"class":46},[36,153633,19225],{"class":101},[36,153635,888],{"class":42},[36,153637,153638,153640,153642],{"class":38,"line":53},[36,153639,876],{"class":46},[36,153641,879],{"class":112},[36,153643,153644],{"class":42},"(self, name):\n",[36,153646,153647,153649,153651,153653],{"class":38,"line":196},[36,153648,909],{"class":112},[36,153650,152824],{"class":42},[36,153652,47],{"class":46},[36,153654,152829],{"class":42},[36,153656,153657],{"class":38,"line":642},[36,153658,659],{"emptyLinePlaceholder":658},[36,153660,153661],{"class":38,"line":655},[36,153662,659],{"emptyLinePlaceholder":658},[36,153664,153665,153667,153669,153671,153673],{"class":38,"line":662},[36,153666,832],{"class":46},[36,153668,11589],{"class":101},[36,153670,495],{"class":42},[36,153672,22668],{"class":101},[36,153674,848],{"class":42},[36,153676,153677,153679,153681],{"class":38,"line":667},[36,153678,876],{"class":46},[36,153680,879],{"class":112},[36,153682,153683],{"class":42},"(self, name, score):\n",[36,153685,153686,153688,153690,153692],{"class":38,"line":679},[36,153687,894],{"class":112},[36,153689,897],{"class":42},[36,153691,900],{"class":112},[36,153693,153694],{"class":42},"(name)\n",[36,153696,153697,153699,153701,153703],{"class":38,"line":685},[36,153698,909],{"class":112},[36,153700,152848],{"class":42},[36,153702,47],{"class":46},[36,153704,5314],{"class":42},[36,153706,153707],{"class":38,"line":691},[36,153708,659],{"emptyLinePlaceholder":658},[36,153710,153711],{"class":38,"line":696},[36,153712,659],{"emptyLinePlaceholder":658},[36,153714,153715,153717,153719,153721,153723,153725,153727],{"class":38,"line":702},[36,153716,152515],{"class":42},[36,153718,47],{"class":46},[36,153720,152919],{"class":42},[36,153722,152922],{"class":105},[36,153724,478],{"class":42},[36,153726,4858],{"class":112},[36,153728,922],{"class":42},[36,153730,153731,153733],{"class":38,"line":708},[36,153732,3486],{"class":112},[36,153734,153735],{"class":42},"(student.name, student.score)\n",[14,153737,153739],{"id":153738},"_1111-多态","11.11 多态",[19,153741,153742],{},"多态指不同对象响应同一个方法，表现出不同结果。",[26,153744,153746],{"className":28,"code":153745,"language":30,"meta":31,"style":31},"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",[33,153747,153748,153756,153764,153774,153778,153782,153790,153798,153808,153812,153816,153826,153831,153835,153839,153844],{"__ignoreMap":31},[36,153749,153750,153752,153754],{"class":38,"line":39},[36,153751,832],{"class":46},[36,153753,153398],{"class":101},[36,153755,888],{"class":42},[36,153757,153758,153760,153762],{"class":38,"line":53},[36,153759,876],{"class":46},[36,153761,153480],{"class":101},[36,153763,34406],{"class":42},[36,153765,153766,153768,153770,153772],{"class":38,"line":196},[36,153767,1960],{"class":112},[36,153769,495],{"class":42},[36,153771,153423],{"class":105},[36,153773,922],{"class":42},[36,153775,153776],{"class":38,"line":642},[36,153777,659],{"emptyLinePlaceholder":658},[36,153779,153780],{"class":38,"line":655},[36,153781,659],{"emptyLinePlaceholder":658},[36,153783,153784,153786,153788],{"class":38,"line":662},[36,153785,832],{"class":46},[36,153787,153546],{"class":101},[36,153789,888],{"class":42},[36,153791,153792,153794,153796],{"class":38,"line":667},[36,153793,876],{"class":46},[36,153795,153480],{"class":101},[36,153797,34406],{"class":42},[36,153799,153800,153802,153804,153806],{"class":38,"line":679},[36,153801,1960],{"class":112},[36,153803,495],{"class":42},[36,153805,153569],{"class":105},[36,153807,922],{"class":42},[36,153809,153810],{"class":38,"line":685},[36,153811,659],{"emptyLinePlaceholder":658},[36,153813,153814],{"class":38,"line":691},[36,153815,659],{"emptyLinePlaceholder":658},[36,153817,153818,153820,153823],{"class":38,"line":696},[36,153819,1820],{"class":46},[36,153821,153822],{"class":101}," make_sound",[36,153824,153825],{"class":42},"(animal):\n",[36,153827,153828],{"class":38,"line":702},[36,153829,153830],{"class":42},"    animal.speak()\n",[36,153832,153833],{"class":38,"line":708},[36,153834,659],{"emptyLinePlaceholder":658},[36,153836,153837],{"class":38,"line":713},[36,153838,659],{"emptyLinePlaceholder":658},[36,153840,153841],{"class":38,"line":719},[36,153842,153843],{"class":42},"make_sound(Dog())\n",[36,153845,153846],{"class":38,"line":725},[36,153847,153848],{"class":42},"make_sound(Cat())\n",[19,153850,153851],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,153853,153855],{"id":153854},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,153857,153858],{},"实例属性属于对象：",[26,153860,153862],{"className":28,"code":153861,"language":30,"meta":31,"style":31},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[33,153863,153864,153872,153880],{"__ignoreMap":31},[36,153865,153866,153868,153870],{"class":38,"line":39},[36,153867,832],{"class":46},[36,153869,11589],{"class":101},[36,153871,888],{"class":42},[36,153873,153874,153876,153878],{"class":38,"line":53},[36,153875,876],{"class":46},[36,153877,879],{"class":112},[36,153879,153644],{"class":42},[36,153881,153882,153884,153886,153888],{"class":38,"line":196},[36,153883,909],{"class":112},[36,153885,152824],{"class":42},[36,153887,47],{"class":46},[36,153889,152829],{"class":42},[19,153891,153892],{},"类属性属于类，所有对象共享：",[26,153894,153896],{"className":28,"code":153895,"language":30,"meta":31,"style":31},"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",[33,153897,153898,153906,153916,153920,153928,153938,153942,153946,153959,153973,153977,153984,153991],{"__ignoreMap":31},[36,153899,153900,153902,153904],{"class":38,"line":39},[36,153901,832],{"class":46},[36,153903,11589],{"class":101},[36,153905,888],{"class":42},[36,153907,153908,153911,153913],{"class":38,"line":53},[36,153909,153910],{"class":42},"    school ",[36,153912,47],{"class":46},[36,153914,153915],{"class":105}," \"黑马学校\"\n",[36,153917,153918],{"class":38,"line":196},[36,153919,659],{"emptyLinePlaceholder":658},[36,153921,153922,153924,153926],{"class":38,"line":642},[36,153923,876],{"class":46},[36,153925,879],{"class":112},[36,153927,153644],{"class":42},[36,153929,153930,153932,153934,153936],{"class":38,"line":655},[36,153931,909],{"class":112},[36,153933,152824],{"class":42},[36,153935,47],{"class":46},[36,153937,152829],{"class":42},[36,153939,153940],{"class":38,"line":662},[36,153941,659],{"emptyLinePlaceholder":658},[36,153943,153944],{"class":38,"line":667},[36,153945,659],{"emptyLinePlaceholder":658},[36,153947,153948,153951,153953,153955,153957],{"class":38,"line":679},[36,153949,153950],{"class":42},"s1 ",[36,153952,47],{"class":46},[36,153954,152919],{"class":42},[36,153956,152922],{"class":105},[36,153958,922],{"class":42},[36,153960,153961,153964,153966,153968,153971],{"class":38,"line":685},[36,153962,153963],{"class":42},"s2 ",[36,153965,47],{"class":46},[36,153967,152919],{"class":42},[36,153969,153970],{"class":105},"\"小红\"",[36,153972,922],{"class":42},[36,153974,153975],{"class":38,"line":691},[36,153976,659],{"emptyLinePlaceholder":658},[36,153978,153979,153981],{"class":38,"line":696},[36,153980,3486],{"class":112},[36,153982,153983],{"class":42},"(s1.school)\n",[36,153985,153986,153988],{"class":38,"line":702},[36,153987,3486],{"class":112},[36,153989,153990],{"class":42},"(s2.school)\n",[36,153992,153993,153995],{"class":38,"line":708},[36,153994,3486],{"class":112},[36,153996,153997],{"class":42},"(Student.school)\n",[19,153999,154000],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,154002,154004],{"id":154003},"_1113-类方法和静态方法","11.13 类方法和静态方法",[318,154006,154008],{"id":154007},"_11131-类方法","11.13.1 类方法",[19,154010,154011,154012,154015,154016,224],{},"类方法使用 ",[33,154013,154014],{},"@classmethod","，第一个参数通常是 ",[33,154017,154018],{},"cls",[26,154020,154022],{"className":28,"code":154021,"language":30,"meta":31,"style":31},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[33,154023,154024,154032,154040,154044,154052,154062,154072,154076,154080],{"__ignoreMap":31},[36,154025,154026,154028,154030],{"class":38,"line":39},[36,154027,832],{"class":46},[36,154029,11589],{"class":101},[36,154031,888],{"class":42},[36,154033,154034,154036,154038],{"class":38,"line":53},[36,154035,153910],{"class":42},[36,154037,47],{"class":46},[36,154039,153915],{"class":105},[36,154041,154042],{"class":38,"line":196},[36,154043,659],{"emptyLinePlaceholder":658},[36,154045,154046,154049],{"class":38,"line":642},[36,154047,154048],{"class":101},"    @",[36,154050,154051],{"class":112},"classmethod\n",[36,154053,154054,154056,154059],{"class":38,"line":655},[36,154055,876],{"class":46},[36,154057,154058],{"class":101}," get_school",[36,154060,154061],{"class":42},"(cls):\n",[36,154063,154064,154066,154069],{"class":38,"line":662},[36,154065,1239],{"class":46},[36,154067,154068],{"class":112}," cls",[36,154070,154071],{"class":42},".school\n",[36,154073,154074],{"class":38,"line":667},[36,154075,659],{"emptyLinePlaceholder":658},[36,154077,154078],{"class":38,"line":679},[36,154079,659],{"emptyLinePlaceholder":658},[36,154081,154082,154084],{"class":38,"line":685},[36,154083,3486],{"class":112},[36,154085,154086],{"class":42},"(Student.get_school())\n",[318,154088,154090],{"id":154089},"_11132-静态方法","11.13.2 静态方法",[19,154092,154093,154094,154097],{},"静态方法使用 ",[33,154095,154096],{},"@staticmethod","，不需要访问实例和类。",[26,154099,154101],{"className":28,"code":154100,"language":30,"meta":31,"style":31},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[33,154102,154103,154112,154119,154128,154139,154143,154147],{"__ignoreMap":31},[36,154104,154105,154107,154110],{"class":38,"line":39},[36,154106,832],{"class":46},[36,154108,154109],{"class":101}," MathUtils",[36,154111,888],{"class":42},[36,154113,154114,154116],{"class":38,"line":53},[36,154115,154048],{"class":101},[36,154117,154118],{"class":112},"staticmethod\n",[36,154120,154121,154123,154125],{"class":38,"line":196},[36,154122,876],{"class":46},[36,154124,8903],{"class":101},[36,154126,154127],{"class":42},"(a, b):\n",[36,154129,154130,154132,154134,154136],{"class":38,"line":642},[36,154131,1239],{"class":46},[36,154133,14530],{"class":42},[36,154135,4354],{"class":46},[36,154137,154138],{"class":42}," b\n",[36,154140,154141],{"class":38,"line":655},[36,154142,659],{"emptyLinePlaceholder":658},[36,154144,154145],{"class":38,"line":662},[36,154146,659],{"emptyLinePlaceholder":658},[36,154148,154149,154151,154154,154156,154158,154160],{"class":38,"line":667},[36,154150,3486],{"class":112},[36,154152,154153],{"class":42},"(MathUtils.add(",[36,154155,4092],{"class":112},[36,154157,478],{"class":42},[36,154159,498],{"class":112},[36,154161,2005],{"class":42},[19,154163,154164],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,154166,154168],{"id":154167},"_1114-dataclass","11.14 dataclass",[19,154170,154171,154174],{},[33,154172,154173],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[26,154176,154178],{"className":28,"code":154177,"language":30,"meta":31,"style":31},"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",[33,154179,154180,154192,154196,154200,154205,154213,154221,154229,154237,154241,154245,154265],{"__ignoreMap":31},[36,154181,154182,154184,154187,154189],{"class":38,"line":39},[36,154183,645],{"class":46},[36,154185,154186],{"class":42}," dataclasses ",[36,154188,611],{"class":46},[36,154190,154191],{"class":42}," dataclass\n",[36,154193,154194],{"class":38,"line":53},[36,154195,659],{"emptyLinePlaceholder":658},[36,154197,154198],{"class":38,"line":196},[36,154199,659],{"emptyLinePlaceholder":658},[36,154201,154202],{"class":38,"line":642},[36,154203,154204],{"class":101},"@dataclass\n",[36,154206,154207,154209,154211],{"class":38,"line":655},[36,154208,832],{"class":46},[36,154210,11589],{"class":101},[36,154212,888],{"class":42},[36,154214,154215,154218],{"class":38,"line":662},[36,154216,154217],{"class":42},"    name: ",[36,154219,154220],{"class":112},"str\n",[36,154222,154223,154226],{"class":38,"line":667},[36,154224,154225],{"class":42},"    age: ",[36,154227,154228],{"class":112},"int\n",[36,154230,154231,154234],{"class":38,"line":679},[36,154232,154233],{"class":42},"    score: ",[36,154235,154236],{"class":112},"float\n",[36,154238,154239],{"class":38,"line":685},[36,154240,659],{"emptyLinePlaceholder":658},[36,154242,154243],{"class":38,"line":691},[36,154244,659],{"emptyLinePlaceholder":658},[36,154246,154247,154249,154251,154253,154255,154257,154259,154261,154263],{"class":38,"line":696},[36,154248,152515],{"class":42},[36,154250,47],{"class":46},[36,154252,152919],{"class":42},[36,154254,152922],{"class":105},[36,154256,478],{"class":42},[36,154258,4521],{"class":112},[36,154260,478],{"class":42},[36,154262,4858],{"class":112},[36,154264,922],{"class":42},[36,154266,154267,154269],{"class":38,"line":702},[36,154268,3486],{"class":112},[36,154270,153076],{"class":42},[19,154272,154273,154274,4087,154276,154279],{},"它会自动生成 ",[33,154275,900],{},[33,154277,154278],{},"__repr__"," 等方法。适合数据模型类。",[14,154281,154283],{"id":154282},"_1115-小案例学生类","11.15 小案例：学生类",[26,154285,154287],{"className":28,"code":154286,"language":30,"meta":31,"style":31},"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",[33,154288,154289,154297,154306,154318,154328,154338,154348,154352,154361,154374,154378,154387,154393,154405,154417,154429,154441,154445,154449,154455,154465,154474,154484,154492,154500,154509,154513,154517,154525,154561,154565,154569,154594,154601],{"__ignoreMap":31},[36,154290,154291,154293,154295],{"class":38,"line":39},[36,154292,832],{"class":46},[36,154294,11589],{"class":101},[36,154296,888],{"class":42},[36,154298,154299,154301,154303],{"class":38,"line":53},[36,154300,876],{"class":46},[36,154302,879],{"class":112},[36,154304,154305],{"class":42},"(self, student_id, name, age, score):\n",[36,154307,154308,154310,154313,154315],{"class":38,"line":196},[36,154309,909],{"class":112},[36,154311,154312],{"class":42},".student_id ",[36,154314,47],{"class":46},[36,154316,154317],{"class":42}," student_id\n",[36,154319,154320,154322,154324,154326],{"class":38,"line":642},[36,154321,909],{"class":112},[36,154323,152824],{"class":42},[36,154325,47],{"class":46},[36,154327,152829],{"class":42},[36,154329,154330,154332,154334,154336],{"class":38,"line":655},[36,154331,909],{"class":112},[36,154333,152836],{"class":42},[36,154335,47],{"class":46},[36,154337,152841],{"class":42},[36,154339,154340,154342,154344,154346],{"class":38,"line":662},[36,154341,909],{"class":112},[36,154343,152848],{"class":42},[36,154345,47],{"class":46},[36,154347,5314],{"class":42},[36,154349,154350],{"class":38,"line":667},[36,154351,659],{"emptyLinePlaceholder":658},[36,154353,154354,154356,154359],{"class":38,"line":679},[36,154355,876],{"class":46},[36,154357,154358],{"class":101}," is_passed",[36,154360,34406],{"class":42},[36,154362,154363,154365,154367,154369,154371],{"class":38,"line":685},[36,154364,1239],{"class":46},[36,154366,406],{"class":112},[36,154368,152848],{"class":42},[36,154370,412],{"class":46},[36,154372,154373],{"class":112}," 60\n",[36,154375,154376],{"class":38,"line":691},[36,154377,659],{"emptyLinePlaceholder":658},[36,154379,154380,154382,154385],{"class":38,"line":696},[36,154381,876],{"class":46},[36,154383,154384],{"class":101}," to_dict",[36,154386,34406],{"class":42},[36,154388,154389,154391],{"class":38,"line":702},[36,154390,1239],{"class":46},[36,154392,19228],{"class":42},[36,154394,154395,154398,154400,154402],{"class":38,"line":708},[36,154396,154397],{"class":105},"            \"student_id\"",[36,154399,54994],{"class":42},[36,154401,457],{"class":112},[36,154403,154404],{"class":42},".student_id,\n",[36,154406,154407,154410,154412,154414],{"class":38,"line":713},[36,154408,154409],{"class":105},"            \"name\"",[36,154411,54994],{"class":42},[36,154413,457],{"class":112},[36,154415,154416],{"class":42},".name,\n",[36,154418,154419,154422,154424,154426],{"class":38,"line":719},[36,154420,154421],{"class":105},"            \"age\"",[36,154423,54994],{"class":42},[36,154425,457],{"class":112},[36,154427,154428],{"class":42},".age,\n",[36,154430,154431,154434,154436,154438],{"class":38,"line":725},[36,154432,154433],{"class":105},"            \"score\"",[36,154435,54994],{"class":42},[36,154437,457],{"class":112},[36,154439,154440],{"class":42},".score,\n",[36,154442,154443],{"class":38,"line":731},[36,154444,6239],{"class":42},[36,154446,154447],{"class":38,"line":736},[36,154448,659],{"emptyLinePlaceholder":658},[36,154450,154451,154453],{"class":38,"line":742},[36,154452,154048],{"class":101},[36,154454,154051],{"class":112},[36,154456,154457,154459,154462],{"class":38,"line":748},[36,154458,876],{"class":46},[36,154460,154461],{"class":101}," from_dict",[36,154463,154464],{"class":42},"(cls, data):\n",[36,154466,154467,154469,154471],{"class":38,"line":754},[36,154468,1239],{"class":46},[36,154470,154068],{"class":112},[36,154472,154473],{"class":42},"(\n",[36,154475,154476,154479,154482],{"class":38,"line":760},[36,154477,154478],{"class":42},"            data[",[36,154480,154481],{"class":105},"\"student_id\"",[36,154483,91389],{"class":42},[36,154485,154486,154488,154490],{"class":38,"line":766},[36,154487,154478],{"class":42},[36,154489,66234],{"class":105},[36,154491,91389],{"class":42},[36,154493,154494,154496,154498],{"class":38,"line":772},[36,154495,154478],{"class":42},[36,154497,72679],{"class":105},[36,154499,91389],{"class":42},[36,154501,154502,154504,154507],{"class":38,"line":778},[36,154503,154478],{"class":42},[36,154505,154506],{"class":105},"\"score\"",[36,154508,91389],{"class":42},[36,154510,154511],{"class":38,"line":783},[36,154512,41686],{"class":42},[36,154514,154515],{"class":38,"line":789},[36,154516,659],{"emptyLinePlaceholder":658},[36,154518,154519,154521,154523],{"class":38,"line":795},[36,154520,876],{"class":46},[36,154522,153015],{"class":112},[36,154524,34406],{"class":42},[36,154526,154527,154529,154531,154533,154535,154538,154540,154543,154545,154547,154549,154551,154553,154555,154557,154559],{"class":38,"line":801},[36,154528,1239],{"class":46},[36,154530,153024],{"class":46},[36,154532,4126],{"class":105},[36,154534,152486],{"class":112},[36,154536,154537],{"class":42},".student_id",[36,154539,4815],{"class":112},[36,154541,154542],{"class":112}," {self",[36,154544,83855],{"class":42},[36,154546,4815],{"class":112},[36,154548,154542],{"class":112},[36,154550,83867],{"class":42},[36,154552,4815],{"class":112},[36,154554,154542],{"class":112},[36,154556,152896],{"class":42},[36,154558,4815],{"class":112},[36,154560,28747],{"class":105},[36,154562,154563],{"class":38,"line":807},[36,154564,659],{"emptyLinePlaceholder":658},[36,154566,154567],{"class":38,"line":813},[36,154568,659],{"emptyLinePlaceholder":658},[36,154570,154571,154573,154575,154577,154580,154582,154584,154586,154588,154590,154592],{"class":38,"line":819},[36,154572,152515],{"class":42},[36,154574,47],{"class":46},[36,154576,152919],{"class":42},[36,154578,154579],{"class":105},"\"001\"",[36,154581,478],{"class":42},[36,154583,152922],{"class":105},[36,154585,478],{"class":42},[36,154587,4521],{"class":112},[36,154589,478],{"class":42},[36,154591,4858],{"class":112},[36,154593,922],{"class":42},[36,154595,154596,154598],{"class":38,"line":824},[36,154597,3486],{"class":112},[36,154599,154600],{"class":42},"(student.is_passed())\n",[36,154602,154603,154605],{"class":38,"line":829},[36,154604,3486],{"class":112},[36,154606,154607],{"class":42},"(student.to_dict())\n",[19,154609,154610,324,154613,154616],{},[33,154611,154612],{},"to_dict()",[33,154614,154615],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,154618,154620],{"id":154619},"_1116-易错点","11.16 易错点",[211,154622,154623,154629,154635,154640,154643,154646],{},[214,154624,154625,154626,224],{},"类名推荐使用大驼峰，如 ",[33,154627,154628],{},"StudentManager",[214,154630,154631,154632,154634],{},"方法第一个参数必须写 ",[33,154633,457],{},"，调用时不用传。",[214,154636,154637,154639],{},[33,154638,900],{}," 不是普通方法，它在创建对象时自动执行。",[214,154641,154642],{},"私有属性不是绝对安全，只是约定和名称改写。",[214,154644,154645],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[214,154647,154648],{},"类中方法太多时，说明职责可能过重。",[14,154650,154652],{"id":154651},"_1117-本章练习","11.17 本章练习",[211,154654,154655,154661,154667,154672,154685],{},[214,154656,154657,154658,154660],{},"定义 ",[33,154659,152602],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[214,154662,154657,154663,154666],{},[33,154664,154665],{},"Account"," 类，实现存款、取款、查询余额。",[214,154668,154657,154669,154671],{},[33,154670,20849],{}," 类，计算圆的周长和面积。",[214,154673,154657,154674,4087,154677,154680,154681,154684],{},[33,154675,154676],{},"Dog",[33,154678,154679],{},"Cat"," 类，并用同一个函数调用它们的 ",[33,154682,154683],{},"speak()"," 方法。",[214,154686,107857,154687,154689,154690,224],{},[33,154688,154173],{}," 定义一个商品类 ",[33,154691,154692],{},"Product",[3785,154694,154695],{},"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":31,"searchDepth":53,"depth":53,"links":154697},[154698,154699,154700,154701,154702,154703,154705,154706,154707,154708,154709,154710,154711,154715,154716,154717,154718],{"id":152366,"depth":53,"text":152367},{"id":152549,"depth":53,"text":152550},{"id":152613,"depth":53,"text":152614},{"id":152690,"depth":53,"text":152691},{"id":152789,"depth":53,"text":152790},{"id":152953,"depth":53,"text":154704},"11.6 str",{"id":153079,"depth":53,"text":153080},{"id":153345,"depth":53,"text":153346},{"id":153459,"depth":53,"text":153460},{"id":153614,"depth":53,"text":153615},{"id":153738,"depth":53,"text":153739},{"id":153854,"depth":53,"text":153855},{"id":154003,"depth":53,"text":154004,"children":154712},[154713,154714],{"id":154007,"depth":196,"text":154008},{"id":154089,"depth":196,"text":154090},{"id":154167,"depth":53,"text":154168},{"id":154282,"depth":53,"text":154283},{"id":154619,"depth":53,"text":154620},{"id":154651,"depth":53,"text":154652},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":152358,"description":26998},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":154725,"title":154726,"body":154727,"description":26998,"extension":3817,"meta":158040,"navigation":658,"path":158041,"seo":158042,"stem":158043,"__hash__":158044},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":154728,"toc":158016},[154729,154732,154736,154739,154742,154771,154774,154782,154786,154790,154793,154816,154819,154825,154829,156275,156278,156299,156303,156306,156318,156321,156505,156508,156634,156637,156641,156645,156781,156785,156871,156875,156957,156961,156998,157002,157191,157195,157198,157428,157432,157435,157616,157619,157623,157626,157632,157635,157661,157665,157668,157682,157685,157710,157713,157727,157730,157747,157750,157767,157770,157787,157791,157817,157821,157844,157848,157851,157853,157859,157861,157882,157885,157891,157897,157901,157904,157980,157983,157987,158013],[10,154730,154726],{"id":154731},"_12-综合案例与复习路线",[14,154733,154735],{"id":154734},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,154737,154738],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,154740,154741],{},"一个合格的入门综合项目最好覆盖：",[211,154743,154744,154747,154750,154753,154756,154759,154762,154765,154768],{},[214,154745,154746],{},"输入输出。",[214,154748,154749],{},"判断和循环。",[214,154751,154752],{},"函数拆分。",[214,154754,154755],{},"列表、字典等容器。",[214,154757,154758],{},"文件持久化。",[214,154760,154761],{},"异常处理。",[214,154763,154764],{},"模块拆分。",[214,154766,154767],{},"可选：面向对象。",[214,154769,154770],{},"可选：数据可视化。",[19,154772,154773],{},"本章整理两个方向：",[211,154775,154776,154779],{},[214,154777,154778],{},"学生管理系统。",[214,154780,154781],{},"销售数据统计和可视化。",[14,154783,154785],{"id":154784},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[318,154787,154789],{"id":154788},"_1221-需求","12.2.1 需求",[19,154791,154792],{},"实现一个命令行学生管理系统：",[211,154794,154795,154798,154801,154804,154807,154810,154813],{},[214,154796,154797],{},"添加学生。",[214,154799,154800],{},"删除学生。",[214,154802,154803],{},"修改学生。",[214,154805,154806],{},"查询学生。",[214,154808,154809],{},"显示所有学生。",[214,154811,154812],{},"保存到 JSON 文件。",[214,154814,154815],{},"程序启动时自动读取 JSON 文件。",[19,154817,154818],{},"学生字段：",[26,154820,154823],{"className":154821,"code":154822,"language":80,"meta":31},[78],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[33,154824,154822],{"__ignoreMap":31},[14,154826,154828],{"id":154827},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[26,154830,154832],{"className":28,"code":154831,"language":30,"meta":31,"style":31},"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",[33,154833,154834,154840,154850,154854,154868,154872,154876,154885,154897,154903,154907,154913,154944,154954,154961,154972,154978,154982,154986,154996,155027,155053,155057,155061,155070,155081,155092,155103,155114,155125,155136,155147,155151,155155,155165,155177,155193,155200,155207,155211,155215,155225,155233,155240,155253,155263,155274,155278,155282,155291,155299,155305,155317,155325,155336,155340,155344,155353,155369,155373,155380,155391,155396,155400,155416,155431,155446,155450,155455,155463,155471,155479,155487,155491,155496,155507,155511,155515,155524,155539,155549,155553,155565,155576,155580,155584,155589,155593,155604,155608,155612,155621,155636,155644,155648,155660,155670,155674,155678,155693,155706,155719,155723,155736,155748,155760,155764,155768,155779,155783,155787,155796,155811,155819,155823,155835,155845,155849,155853,155858,155862,155866,155876,155882,155904,155923,155942,155961,155966,155970,155974,155983,155991,156002,156006,156010,156036,156046,156051,156055,156059,156067,156077,156081,156089,156094,156110,156114,156128,156133,156147,156152,156165,156170,156183,156188,156201,156206,156219,156230,156234,156240,156251,156255,156259,156271],{"__ignoreMap":31},[36,154835,154836,154838],{"class":38,"line":39},[36,154837,611],{"class":46},[36,154839,150125],{"class":42},[36,154841,154842,154844,154846,154848],{"class":38,"line":53},[36,154843,645],{"class":46},[36,154845,111786],{"class":42},[36,154847,611],{"class":46},[36,154849,111791],{"class":42},[36,154851,154852],{"class":38,"line":196},[36,154853,659],{"emptyLinePlaceholder":658},[36,154855,154856,154859,154861,154863,154866],{"class":38,"line":642},[36,154857,154858],{"class":112},"DATA_FILE",[36,154860,673],{"class":46},[36,154862,112020],{"class":42},[36,154864,154865],{"class":105},"\"students.json\"",[36,154867,922],{"class":42},[36,154869,154870],{"class":38,"line":655},[36,154871,659],{"emptyLinePlaceholder":658},[36,154873,154874],{"class":38,"line":662},[36,154875,659],{"emptyLinePlaceholder":658},[36,154877,154878,154880,154883],{"class":38,"line":667},[36,154879,1820],{"class":46},[36,154881,154882],{"class":101}," load_students",[36,154884,35540],{"class":42},[36,154886,154887,154889,154891,154894],{"class":38,"line":679},[36,154888,3752],{"class":46},[36,154890,42489],{"class":46},[36,154892,154893],{"class":112}," DATA_FILE",[36,154895,154896],{"class":42},".exists():\n",[36,154898,154899,154901],{"class":38,"line":685},[36,154900,1239],{"class":46},[36,154902,55395],{"class":42},[36,154904,154905],{"class":38,"line":691},[36,154906,659],{"emptyLinePlaceholder":658},[36,154908,154909,154911],{"class":38,"line":696},[36,154910,128818],{"class":46},[36,154912,888],{"class":42},[36,154914,154915,154918,154920,154922,154924,154926,154928,154930,154932,154934,154936,154938,154940,154942],{"class":38,"line":702},[36,154916,154917],{"class":46},"        with",[36,154919,149825],{"class":112},[36,154921,495],{"class":42},[36,154923,154858],{"class":112},[36,154925,478],{"class":42},[36,154927,149835],{"class":105},[36,154929,478],{"class":42},[36,154931,149840],{"class":468},[36,154933,47],{"class":46},[36,154935,149845],{"class":105},[36,154937,17373],{"class":42},[36,154939,617],{"class":46},[36,154941,151187],{"class":468},[36,154943,888],{"class":42},[36,154945,154946,154948,154950,154952],{"class":38,"line":708},[36,154947,19388],{"class":46},[36,154949,151198],{"class":42},[36,154951,48912],{"class":468},[36,154953,922],{"class":42},[36,154955,154956,154958],{"class":38,"line":713},[36,154957,128846],{"class":46},[36,154959,154960],{"class":42}," json.JSONDecodeError:\n",[36,154962,154963,154965,154967,154970],{"class":38,"line":719},[36,154964,1960],{"class":112},[36,154966,495],{"class":42},[36,154968,154969],{"class":105},"\"数据文件格式错误，已使用空数据启动\"",[36,154971,922],{"class":42},[36,154973,154974,154976],{"class":38,"line":725},[36,154975,1239],{"class":46},[36,154977,55395],{"class":42},[36,154979,154980],{"class":38,"line":731},[36,154981,659],{"emptyLinePlaceholder":658},[36,154983,154984],{"class":38,"line":736},[36,154985,659],{"emptyLinePlaceholder":658},[36,154987,154988,154990,154993],{"class":38,"line":742},[36,154989,1820],{"class":46},[36,154991,154992],{"class":101}," save_students",[36,154994,154995],{"class":42},"(students):\n",[36,154997,154998,155000,155002,155004,155006,155008,155011,155013,155015,155017,155019,155021,155023,155025],{"class":38,"line":748},[36,154999,37738],{"class":46},[36,155001,149825],{"class":112},[36,155003,495],{"class":42},[36,155005,154858],{"class":112},[36,155007,478],{"class":42},[36,155009,155010],{"class":105},"\"w\"",[36,155012,478],{"class":42},[36,155014,149840],{"class":468},[36,155016,47],{"class":46},[36,155018,149845],{"class":105},[36,155020,17373],{"class":42},[36,155022,617],{"class":46},[36,155024,151187],{"class":468},[36,155026,888],{"class":42},[36,155028,155029,155032,155034,155036,155038,155040,155042,155044,155047,155049,155051],{"class":38,"line":754},[36,155030,155031],{"class":42},"        json.dump(students, ",[36,155033,48912],{"class":468},[36,155035,478],{"class":42},[36,155037,150171],{"class":468},[36,155039,47],{"class":46},[36,155041,37547],{"class":112},[36,155043,478],{"class":42},[36,155045,155046],{"class":468},"indent",[36,155048,47],{"class":46},[36,155050,498],{"class":112},[36,155052,922],{"class":42},[36,155054,155055],{"class":38,"line":760},[36,155056,659],{"emptyLinePlaceholder":658},[36,155058,155059],{"class":38,"line":766},[36,155060,659],{"emptyLinePlaceholder":658},[36,155062,155063,155065,155068],{"class":38,"line":772},[36,155064,1820],{"class":46},[36,155066,155067],{"class":101}," show_menu",[36,155069,35540],{"class":42},[36,155071,155072,155074,155076,155079],{"class":38,"line":778},[36,155073,1867],{"class":112},[36,155075,495],{"class":42},[36,155077,155078],{"class":105},"\"====== 学生管理系统 ======\"",[36,155080,922],{"class":42},[36,155082,155083,155085,155087,155090],{"class":38,"line":783},[36,155084,1867],{"class":112},[36,155086,495],{"class":42},[36,155088,155089],{"class":105},"\"1. 添加学生\"",[36,155091,922],{"class":42},[36,155093,155094,155096,155098,155101],{"class":38,"line":789},[36,155095,1867],{"class":112},[36,155097,495],{"class":42},[36,155099,155100],{"class":105},"\"2. 删除学生\"",[36,155102,922],{"class":42},[36,155104,155105,155107,155109,155112],{"class":38,"line":795},[36,155106,1867],{"class":112},[36,155108,495],{"class":42},[36,155110,155111],{"class":105},"\"3. 修改学生\"",[36,155113,922],{"class":42},[36,155115,155116,155118,155120,155123],{"class":38,"line":801},[36,155117,1867],{"class":112},[36,155119,495],{"class":42},[36,155121,155122],{"class":105},"\"4. 查询学生\"",[36,155124,922],{"class":42},[36,155126,155127,155129,155131,155134],{"class":38,"line":807},[36,155128,1867],{"class":112},[36,155130,495],{"class":42},[36,155132,155133],{"class":105},"\"5. 显示所有学生\"",[36,155135,922],{"class":42},[36,155137,155138,155140,155142,155145],{"class":38,"line":813},[36,155139,1867],{"class":112},[36,155141,495],{"class":42},[36,155143,155144],{"class":105},"\"0. 退出系统\"",[36,155146,922],{"class":42},[36,155148,155149],{"class":38,"line":819},[36,155150,659],{"emptyLinePlaceholder":658},[36,155152,155153],{"class":38,"line":824},[36,155154,659],{"emptyLinePlaceholder":658},[36,155156,155157,155159,155162],{"class":38,"line":829},[36,155158,1820],{"class":46},[36,155160,155161],{"class":101}," find_student",[36,155163,155164],{"class":42},"(students, student_id):\n",[36,155166,155167,155169,155172,155174],{"class":38,"line":851},[36,155168,1909],{"class":46},[36,155170,155171],{"class":42}," student ",[36,155173,1619],{"class":46},[36,155175,155176],{"class":42}," students:\n",[36,155178,155179,155181,155184,155186,155188,155190],{"class":38,"line":868},[36,155180,995],{"class":46},[36,155182,155183],{"class":42}," student[",[36,155185,154481],{"class":105},[36,155187,8140],{"class":42},[36,155189,6652],{"class":46},[36,155191,155192],{"class":42}," student_id:\n",[36,155194,155195,155197],{"class":38,"line":873},[36,155196,19388],{"class":46},[36,155198,155199],{"class":42}," student\n",[36,155201,155202,155204],{"class":38,"line":891},[36,155203,7788],{"class":46},[36,155205,155206],{"class":112}," None\n",[36,155208,155209],{"class":38,"line":906},[36,155210,659],{"emptyLinePlaceholder":658},[36,155212,155213],{"class":38,"line":925},[36,155214,659],{"emptyLinePlaceholder":658},[36,155216,155217,155219,155222],{"class":38,"line":943},[36,155218,1820],{"class":46},[36,155220,155221],{"class":101}," input_int",[36,155223,155224],{"class":42},"(prompt):\n",[36,155226,155227,155229,155231],{"class":38,"line":948},[36,155228,5963],{"class":46},[36,155230,98843],{"class":112},[36,155232,888],{"class":42},[36,155234,155235,155238],{"class":38,"line":971},[36,155236,155237],{"class":46},"        try",[36,155239,888],{"class":42},[36,155241,155242,155244,155246,155248,155250],{"class":38,"line":992},[36,155243,19388],{"class":46},[36,155245,6094],{"class":112},[36,155247,495],{"class":42},[36,155249,57378],{"class":112},[36,155251,155252],{"class":42},"(prompt))\n",[36,155254,155255,155258,155261],{"class":38,"line":1020},[36,155256,155257],{"class":46},"        except",[36,155259,155260],{"class":112}," ValueError",[36,155262,888],{"class":42},[36,155264,155265,155267,155269,155272],{"class":38,"line":1036},[36,155266,38210],{"class":112},[36,155268,495],{"class":42},[36,155270,155271],{"class":105},"\"请输入整数\"",[36,155273,922],{"class":42},[36,155275,155276],{"class":38,"line":1041},[36,155277,659],{"emptyLinePlaceholder":658},[36,155279,155280],{"class":38,"line":1052},[36,155281,659],{"emptyLinePlaceholder":658},[36,155283,155284,155286,155289],{"class":38,"line":1065},[36,155285,1820],{"class":46},[36,155287,155288],{"class":101}," input_float",[36,155290,155224],{"class":42},[36,155292,155293,155295,155297],{"class":38,"line":1077},[36,155294,5963],{"class":46},[36,155296,98843],{"class":112},[36,155298,888],{"class":42},[36,155300,155301,155303],{"class":38,"line":1082},[36,155302,155237],{"class":46},[36,155304,888],{"class":42},[36,155306,155307,155309,155311,155313,155315],{"class":38,"line":1125},[36,155308,19388],{"class":46},[36,155310,1341],{"class":112},[36,155312,495],{"class":42},[36,155314,57378],{"class":112},[36,155316,155252],{"class":42},[36,155318,155319,155321,155323],{"class":38,"line":1164},[36,155320,155257],{"class":46},[36,155322,155260],{"class":112},[36,155324,888],{"class":42},[36,155326,155327,155329,155331,155334],{"class":38,"line":1169},[36,155328,38210],{"class":112},[36,155330,495],{"class":42},[36,155332,155333],{"class":105},"\"请输入数字\"",[36,155335,922],{"class":42},[36,155337,155338],{"class":38,"line":1180},[36,155339,659],{"emptyLinePlaceholder":658},[36,155341,155342],{"class":38,"line":1198},[36,155343,659],{"emptyLinePlaceholder":658},[36,155345,155346,155348,155351],{"class":38,"line":1215},[36,155347,1820],{"class":46},[36,155349,155350],{"class":101}," add_student",[36,155352,154995],{"class":42},[36,155354,155355,155358,155360,155362,155364,155367],{"class":38,"line":1236},[36,155356,155357],{"class":42},"    student_id ",[36,155359,47],{"class":46},[36,155361,64160],{"class":112},[36,155363,495],{"class":42},[36,155365,155366],{"class":105},"\"请输入学号:\"",[36,155368,922],{"class":42},[36,155370,155371],{"class":38,"line":1245},[36,155372,659],{"emptyLinePlaceholder":658},[36,155374,155375,155377],{"class":38,"line":1250},[36,155376,3752],{"class":46},[36,155378,155379],{"class":42}," find_student(students, student_id):\n",[36,155381,155382,155384,155386,155389],{"class":38,"line":1265},[36,155383,1960],{"class":112},[36,155385,495],{"class":42},[36,155387,155388],{"class":105},"\"学号已存在\"",[36,155390,922],{"class":42},[36,155392,155393],{"class":38,"line":1281},[36,155394,155395],{"class":46},"        return\n",[36,155397,155398],{"class":38,"line":1297},[36,155399,659],{"emptyLinePlaceholder":658},[36,155401,155402,155405,155407,155409,155411,155414],{"class":38,"line":1314},[36,155403,155404],{"class":42},"    name ",[36,155406,47],{"class":46},[36,155408,64160],{"class":112},[36,155410,495],{"class":42},[36,155412,155413],{"class":105},"\"请输入姓名:\"",[36,155415,922],{"class":42},[36,155417,155418,155421,155423,155426,155429],{"class":38,"line":1336},[36,155419,155420],{"class":42},"    age ",[36,155422,47],{"class":46},[36,155424,155425],{"class":42}," input_int(",[36,155427,155428],{"class":105},"\"请输入年龄:\"",[36,155430,922],{"class":42},[36,155432,155433,155436,155438,155441,155444],{"class":38,"line":1356},[36,155434,155435],{"class":42},"    score ",[36,155437,47],{"class":46},[36,155439,155440],{"class":42}," input_float(",[36,155442,155443],{"class":105},"\"请输入成绩:\"",[36,155445,922],{"class":42},[36,155447,155448],{"class":38,"line":1361},[36,155449,659],{"emptyLinePlaceholder":658},[36,155451,155452],{"class":38,"line":1407},[36,155453,155454],{"class":42},"    students.append({\n",[36,155456,155457,155460],{"class":38,"line":1423},[36,155458,155459],{"class":105},"        \"student_id\"",[36,155461,155462],{"class":42},": student_id,\n",[36,155464,155465,155468],{"class":38,"line":1439},[36,155466,155467],{"class":105},"        \"name\"",[36,155469,155470],{"class":42},": name,\n",[36,155472,155473,155476],{"class":38,"line":1444},[36,155474,155475],{"class":105},"        \"age\"",[36,155477,155478],{"class":42},": age,\n",[36,155480,155481,155484],{"class":38,"line":1486},[36,155482,155483],{"class":105},"        \"score\"",[36,155485,155486],{"class":42},": score,\n",[36,155488,155489],{"class":38,"line":1499},[36,155490,37021],{"class":42},[36,155492,155493],{"class":38,"line":1513},[36,155494,155495],{"class":42},"    save_students(students)\n",[36,155497,155498,155500,155502,155505],{"class":38,"line":1518},[36,155499,1867],{"class":112},[36,155501,495],{"class":42},[36,155503,155504],{"class":105},"\"添加成功\"",[36,155506,922],{"class":42},[36,155508,155509],{"class":38,"line":1529},[36,155510,659],{"emptyLinePlaceholder":658},[36,155512,155513],{"class":38,"line":1539},[36,155514,659],{"emptyLinePlaceholder":658},[36,155516,155517,155519,155522],{"class":38,"line":1544},[36,155518,1820],{"class":46},[36,155520,155521],{"class":101}," delete_student",[36,155523,154995],{"class":42},[36,155525,155526,155528,155530,155532,155534,155537],{"class":38,"line":1555},[36,155527,155357],{"class":42},[36,155529,47],{"class":46},[36,155531,64160],{"class":112},[36,155533,495],{"class":42},[36,155535,155536],{"class":105},"\"请输入要删除的学号:\"",[36,155538,922],{"class":42},[36,155540,155541,155544,155546],{"class":38,"line":1572},[36,155542,155543],{"class":42},"    student ",[36,155545,47],{"class":46},[36,155547,155548],{"class":42}," find_student(students, student_id)\n",[36,155550,155551],{"class":38,"line":1592},[36,155552,659],{"emptyLinePlaceholder":658},[36,155554,155555,155557,155559,155561,155563],{"class":38,"line":1597},[36,155556,3752],{"class":46},[36,155558,155171],{"class":42},[36,155560,42486],{"class":46},[36,155562,1384],{"class":112},[36,155564,888],{"class":42},[36,155566,155567,155569,155571,155574],{"class":38,"line":1610},[36,155568,1960],{"class":112},[36,155570,495],{"class":42},[36,155572,155573],{"class":105},"\"学生不存在\"",[36,155575,922],{"class":42},[36,155577,155578],{"class":38,"line":1632},[36,155579,155395],{"class":46},[36,155581,155582],{"class":38,"line":1646},[36,155583,659],{"emptyLinePlaceholder":658},[36,155585,155586],{"class":38,"line":1651},[36,155587,155588],{"class":42},"    students.remove(student)\n",[36,155590,155591],{"class":38,"line":1664},[36,155592,155495],{"class":42},[36,155594,155595,155597,155599,155602],{"class":38,"line":1669},[36,155596,1867],{"class":112},[36,155598,495],{"class":42},[36,155600,155601],{"class":105},"\"删除成功\"",[36,155603,922],{"class":42},[36,155605,155606],{"class":38,"line":1681},[36,155607,659],{"emptyLinePlaceholder":658},[36,155609,155610],{"class":38,"line":1694},[36,155611,659],{"emptyLinePlaceholder":658},[36,155613,155614,155616,155619],{"class":38,"line":1699},[36,155615,1820],{"class":46},[36,155617,155618],{"class":101}," update_student",[36,155620,154995],{"class":42},[36,155622,155623,155625,155627,155629,155631,155634],{"class":38,"line":1714},[36,155624,155357],{"class":42},[36,155626,47],{"class":46},[36,155628,64160],{"class":112},[36,155630,495],{"class":42},[36,155632,155633],{"class":105},"\"请输入要修改的学号:\"",[36,155635,922],{"class":42},[36,155637,155638,155640,155642],{"class":38,"line":1729},[36,155639,155543],{"class":42},[36,155641,47],{"class":46},[36,155643,155548],{"class":42},[36,155645,155646],{"class":38,"line":1746},[36,155647,659],{"emptyLinePlaceholder":658},[36,155649,155650,155652,155654,155656,155658],{"class":38,"line":1751},[36,155651,3752],{"class":46},[36,155653,155171],{"class":42},[36,155655,42486],{"class":46},[36,155657,1384],{"class":112},[36,155659,888],{"class":42},[36,155661,155662,155664,155666,155668],{"class":38,"line":1765},[36,155663,1960],{"class":112},[36,155665,495],{"class":42},[36,155667,155573],{"class":105},[36,155669,922],{"class":42},[36,155671,155672],{"class":38,"line":1783},[36,155673,155395],{"class":46},[36,155675,155676],{"class":38,"line":1799},[36,155677,659],{"emptyLinePlaceholder":658},[36,155679,155680,155682,155684,155686,155688,155691],{"class":38,"line":1807},[36,155681,155404],{"class":42},[36,155683,47],{"class":46},[36,155685,64160],{"class":112},[36,155687,495],{"class":42},[36,155689,155690],{"class":105},"\"请输入新姓名:\"",[36,155692,922],{"class":42},[36,155694,155695,155697,155699,155701,155704],{"class":38,"line":1812},[36,155696,155420],{"class":42},[36,155698,47],{"class":46},[36,155700,155425],{"class":42},[36,155702,155703],{"class":105},"\"请输入新年龄:\"",[36,155705,922],{"class":42},[36,155707,155708,155710,155712,155714,155717],{"class":38,"line":1817},[36,155709,155435],{"class":42},[36,155711,47],{"class":46},[36,155713,155440],{"class":42},[36,155715,155716],{"class":105},"\"请输入新成绩:\"",[36,155718,922],{"class":42},[36,155720,155721],{"class":38,"line":1833},[36,155722,659],{"emptyLinePlaceholder":658},[36,155724,155725,155728,155730,155732,155734],{"class":38,"line":1844},[36,155726,155727],{"class":42},"    student[",[36,155729,66234],{"class":105},[36,155731,8140],{"class":42},[36,155733,47],{"class":46},[36,155735,152829],{"class":42},[36,155737,155738,155740,155742,155744,155746],{"class":38,"line":1864},[36,155739,155727],{"class":42},[36,155741,72679],{"class":105},[36,155743,8140],{"class":42},[36,155745,47],{"class":46},[36,155747,152841],{"class":42},[36,155749,155750,155752,155754,155756,155758],{"class":38,"line":1878},[36,155751,155727],{"class":42},[36,155753,154506],{"class":105},[36,155755,8140],{"class":42},[36,155757,47],{"class":46},[36,155759,5314],{"class":42},[36,155761,155762],{"class":38,"line":1891},[36,155763,659],{"emptyLinePlaceholder":658},[36,155765,155766],{"class":38,"line":1896},[36,155767,155495],{"class":42},[36,155769,155770,155772,155774,155777],{"class":38,"line":1906},[36,155771,1867],{"class":112},[36,155773,495],{"class":42},[36,155775,155776],{"class":105},"\"修改成功\"",[36,155778,922],{"class":42},[36,155780,155781],{"class":38,"line":1926},[36,155782,659],{"emptyLinePlaceholder":658},[36,155784,155785],{"class":38,"line":1936},[36,155786,659],{"emptyLinePlaceholder":658},[36,155788,155789,155791,155794],{"class":38,"line":1946},[36,155790,1820],{"class":46},[36,155792,155793],{"class":101}," query_student",[36,155795,154995],{"class":42},[36,155797,155798,155800,155802,155804,155806,155809],{"class":38,"line":1957},[36,155799,155357],{"class":42},[36,155801,47],{"class":46},[36,155803,64160],{"class":112},[36,155805,495],{"class":42},[36,155807,155808],{"class":105},"\"请输入要查询的学号:\"",[36,155810,922],{"class":42},[36,155812,155813,155815,155817],{"class":38,"line":2008},[36,155814,155543],{"class":42},[36,155816,47],{"class":46},[36,155818,155548],{"class":42},[36,155820,155821],{"class":38,"line":2022},[36,155822,659],{"emptyLinePlaceholder":658},[36,155824,155825,155827,155829,155831,155833],{"class":38,"line":2028},[36,155826,3752],{"class":46},[36,155828,155171],{"class":42},[36,155830,42486],{"class":46},[36,155832,1384],{"class":112},[36,155834,888],{"class":42},[36,155836,155837,155839,155841,155843],{"class":38,"line":2033},[36,155838,1960],{"class":112},[36,155840,495],{"class":42},[36,155842,155573],{"class":105},[36,155844,922],{"class":42},[36,155846,155847],{"class":38,"line":2054},[36,155848,155395],{"class":46},[36,155850,155851],{"class":38,"line":2059},[36,155852,659],{"emptyLinePlaceholder":658},[36,155854,155855],{"class":38,"line":2064},[36,155856,155857],{"class":42},"    print_student(student)\n",[36,155859,155860],{"class":38,"line":2081},[36,155861,659],{"emptyLinePlaceholder":658},[36,155863,155864],{"class":38,"line":36396},[36,155865,659],{"emptyLinePlaceholder":658},[36,155867,155868,155870,155873],{"class":38,"line":36402},[36,155869,1820],{"class":46},[36,155871,155872],{"class":101}," print_student",[36,155874,155875],{"class":42},"(student):\n",[36,155877,155878,155880],{"class":38,"line":36411},[36,155879,1867],{"class":112},[36,155881,154473],{"class":42},[36,155883,155884,155887,155889,155891,155894,155897,155899,155902],{"class":38,"line":36417},[36,155885,155886],{"class":46},"        f",[36,155888,4126],{"class":105},[36,155890,4766],{"class":112},[36,155892,155893],{"class":42},"student[",[36,155895,155896],{"class":105},"'student_id'",[36,155898,4809],{"class":42},[36,155900,155901],{"class":112},"}\\t",[36,155903,28747],{"class":105},[36,155905,155906,155908,155910,155912,155914,155917,155919,155921],{"class":38,"line":36426},[36,155907,155886],{"class":46},[36,155909,4126],{"class":105},[36,155911,4766],{"class":112},[36,155913,155893],{"class":42},[36,155915,155916],{"class":105},"'name'",[36,155918,4809],{"class":42},[36,155920,155901],{"class":112},[36,155922,28747],{"class":105},[36,155924,155925,155927,155929,155931,155933,155936,155938,155940],{"class":38,"line":36432},[36,155926,155886],{"class":46},[36,155928,4126],{"class":105},[36,155930,4766],{"class":112},[36,155932,155893],{"class":42},[36,155934,155935],{"class":105},"'age'",[36,155937,4809],{"class":42},[36,155939,155901],{"class":112},[36,155941,28747],{"class":105},[36,155943,155944,155946,155948,155950,155952,155955,155957,155959],{"class":38,"line":36438},[36,155945,155886],{"class":46},[36,155947,4126],{"class":105},[36,155949,4766],{"class":112},[36,155951,155893],{"class":42},[36,155953,155954],{"class":105},"'score'",[36,155956,4809],{"class":42},[36,155958,4815],{"class":112},[36,155960,28747],{"class":105},[36,155962,155963],{"class":38,"line":36447},[36,155964,155965],{"class":42},"    )\n",[36,155967,155968],{"class":38,"line":36453},[36,155969,659],{"emptyLinePlaceholder":658},[36,155971,155972],{"class":38,"line":36464},[36,155973,659],{"emptyLinePlaceholder":658},[36,155975,155976,155978,155981],{"class":38,"line":36470},[36,155977,1820],{"class":46},[36,155979,155980],{"class":101}," show_all_students",[36,155982,154995],{"class":42},[36,155984,155985,155987,155989],{"class":38,"line":36489},[36,155986,3752],{"class":46},[36,155988,42489],{"class":46},[36,155990,155176],{"class":42},[36,155992,155993,155995,155997,156000],{"class":38,"line":36495},[36,155994,1960],{"class":112},[36,155996,495],{"class":42},[36,155998,155999],{"class":105},"\"暂无学生\"",[36,156001,922],{"class":42},[36,156003,156004],{"class":38,"line":36506},[36,156005,155395],{"class":46},[36,156007,156008],{"class":38,"line":36512},[36,156009,659],{"emptyLinePlaceholder":658},[36,156011,156012,156014,156016,156019,156021,156024,156026,156029,156031,156034],{"class":38,"line":36532},[36,156013,1867],{"class":112},[36,156015,495],{"class":42},[36,156017,156018],{"class":105},"\"学号",[36,156020,4969],{"class":112},[36,156022,156023],{"class":105},"姓名",[36,156025,4969],{"class":112},[36,156027,156028],{"class":105},"年龄",[36,156030,4969],{"class":112},[36,156032,156033],{"class":105},"成绩\"",[36,156035,922],{"class":42},[36,156037,156038,156040,156042,156044],{"class":38,"line":36548},[36,156039,1909],{"class":46},[36,156041,155171],{"class":42},[36,156043,1619],{"class":46},[36,156045,155176],{"class":42},[36,156047,156048],{"class":38,"line":36554},[36,156049,156050],{"class":42},"        print_student(student)\n",[36,156052,156053],{"class":38,"line":36568},[36,156054,659],{"emptyLinePlaceholder":658},[36,156056,156057],{"class":38,"line":36574},[36,156058,659],{"emptyLinePlaceholder":658},[36,156060,156061,156063,156065],{"class":38,"line":36580},[36,156062,1820],{"class":46},[36,156064,1823],{"class":101},[36,156066,35540],{"class":42},[36,156068,156069,156072,156074],{"class":38,"line":36591},[36,156070,156071],{"class":42},"    students ",[36,156073,47],{"class":46},[36,156075,156076],{"class":42}," load_students()\n",[36,156078,156079],{"class":38,"line":36597},[36,156080,659],{"emptyLinePlaceholder":658},[36,156082,156083,156085,156087],{"class":38,"line":36603},[36,156084,5963],{"class":46},[36,156086,98843],{"class":112},[36,156088,888],{"class":42},[36,156090,156091],{"class":38,"line":36613},[36,156092,156093],{"class":42},"        show_menu()\n",[36,156095,156096,156099,156101,156103,156105,156108],{"class":38,"line":36619},[36,156097,156098],{"class":42},"        choice ",[36,156100,47],{"class":46},[36,156102,64160],{"class":112},[36,156104,495],{"class":42},[36,156106,156107],{"class":105},"\"请输入操作:\"",[36,156109,922],{"class":42},[36,156111,156112],{"class":38,"line":36630},[36,156113,659],{"emptyLinePlaceholder":658},[36,156115,156116,156118,156121,156123,156126],{"class":38,"line":36636},[36,156117,995],{"class":46},[36,156119,156120],{"class":42}," choice ",[36,156122,6652],{"class":46},[36,156124,156125],{"class":105}," \"1\"",[36,156127,888],{"class":42},[36,156129,156130],{"class":38,"line":36646},[36,156131,156132],{"class":42},"            add_student(students)\n",[36,156134,156135,156138,156140,156142,156145],{"class":38,"line":36651},[36,156136,156137],{"class":46},"        elif",[36,156139,156120],{"class":42},[36,156141,6652],{"class":46},[36,156143,156144],{"class":105}," \"2\"",[36,156146,888],{"class":42},[36,156148,156149],{"class":38,"line":36657},[36,156150,156151],{"class":42},"            delete_student(students)\n",[36,156153,156154,156156,156158,156160,156163],{"class":38,"line":36706},[36,156155,156137],{"class":46},[36,156157,156120],{"class":42},[36,156159,6652],{"class":46},[36,156161,156162],{"class":105}," \"3\"",[36,156164,888],{"class":42},[36,156166,156167],{"class":38,"line":36753},[36,156168,156169],{"class":42},"            update_student(students)\n",[36,156171,156172,156174,156176,156178,156181],{"class":38,"line":36758},[36,156173,156137],{"class":46},[36,156175,156120],{"class":42},[36,156177,6652],{"class":46},[36,156179,156180],{"class":105}," \"4\"",[36,156182,888],{"class":42},[36,156184,156185],{"class":38,"line":36764},[36,156186,156187],{"class":42},"            query_student(students)\n",[36,156189,156190,156192,156194,156196,156199],{"class":38,"line":36783},[36,156191,156137],{"class":46},[36,156193,156120],{"class":42},[36,156195,6652],{"class":46},[36,156197,156198],{"class":105}," \"5\"",[36,156200,888],{"class":42},[36,156202,156203],{"class":38,"line":36789},[36,156204,156205],{"class":42},"            show_all_students(students)\n",[36,156207,156208,156210,156212,156214,156217],{"class":38,"line":36809},[36,156209,156137],{"class":46},[36,156211,156120],{"class":42},[36,156213,6652],{"class":46},[36,156215,156216],{"class":105}," \"0\"",[36,156218,888],{"class":42},[36,156220,156221,156223,156225,156228],{"class":38,"line":36815},[36,156222,38210],{"class":112},[36,156224,495],{"class":42},[36,156226,156227],{"class":105},"\"退出系统\"",[36,156229,922],{"class":42},[36,156231,156232],{"class":38,"line":36821},[36,156233,2025],{"class":46},[36,156235,156236,156238],{"class":38,"line":36831},[36,156237,6244],{"class":46},[36,156239,888],{"class":42},[36,156241,156242,156244,156246,156249],{"class":38,"line":36836},[36,156243,38210],{"class":112},[36,156245,495],{"class":42},[36,156247,156248],{"class":105},"\"输入错误\"",[36,156250,922],{"class":42},[36,156252,156253],{"class":38,"line":36842},[36,156254,659],{"emptyLinePlaceholder":658},[36,156256,156257],{"class":38,"line":36858},[36,156258,659],{"emptyLinePlaceholder":658},[36,156260,156261,156263,156265,156267,156269],{"class":38,"line":36903},[36,156262,2067],{"class":46},[36,156264,2070],{"class":112},[36,156266,2073],{"class":46},[36,156268,2076],{"class":105},[36,156270,888],{"class":42},[36,156272,156273],{"class":38,"line":36909},[36,156274,2084],{"class":42},[19,156276,156277],{},"这个项目串联了：",[211,156279,156280,156283,156286,156289,156292,156294],{},[214,156281,156282],{},"菜单循环。",[214,156284,156285],{},"函数封装。",[214,156287,156288],{},"列表字典。",[214,156290,156291],{},"JSON 读写。",[214,156293,154761],{},[214,156295,156296,224],{},[33,156297,156298],{},"if __name__ == \"__main__\"",[14,156300,156302],{"id":156301},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,156304,156305],{},"可以进一步拆成两个类：",[211,156307,156308,156313],{},[214,156309,156310,156312],{},[33,156311,152602],{},"：表示单个学生。",[214,156314,156315,156317],{},[33,156316,154628],{},"：负责学生增删改查和文件保存。",[19,156319,156320],{},"示意代码：",[26,156322,156324],{"className":28,"code":156323,"language":30,"meta":31,"style":31},"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",[33,156325,156326,156336,156340,156344,156348,156356,156363,156369,156375,156381,156385,156393,156399,156409,156419,156429,156439,156443,156447,156453,156461,156469,156477,156485,156493,156501],{"__ignoreMap":31},[36,156327,156328,156330,156332,156334],{"class":38,"line":39},[36,156329,645],{"class":46},[36,156331,154186],{"class":42},[36,156333,611],{"class":46},[36,156335,154191],{"class":42},[36,156337,156338],{"class":38,"line":53},[36,156339,659],{"emptyLinePlaceholder":658},[36,156341,156342],{"class":38,"line":196},[36,156343,659],{"emptyLinePlaceholder":658},[36,156345,156346],{"class":38,"line":642},[36,156347,154204],{"class":101},[36,156349,156350,156352,156354],{"class":38,"line":655},[36,156351,832],{"class":46},[36,156353,11589],{"class":101},[36,156355,888],{"class":42},[36,156357,156358,156361],{"class":38,"line":662},[36,156359,156360],{"class":42},"    student_id: ",[36,156362,154220],{"class":112},[36,156364,156365,156367],{"class":38,"line":667},[36,156366,154217],{"class":42},[36,156368,154220],{"class":112},[36,156370,156371,156373],{"class":38,"line":679},[36,156372,154225],{"class":42},[36,156374,154228],{"class":112},[36,156376,156377,156379],{"class":38,"line":685},[36,156378,154233],{"class":42},[36,156380,154236],{"class":112},[36,156382,156383],{"class":38,"line":691},[36,156384,659],{"emptyLinePlaceholder":658},[36,156386,156387,156389,156391],{"class":38,"line":696},[36,156388,876],{"class":46},[36,156390,154384],{"class":101},[36,156392,34406],{"class":42},[36,156394,156395,156397],{"class":38,"line":702},[36,156396,1239],{"class":46},[36,156398,19228],{"class":42},[36,156400,156401,156403,156405,156407],{"class":38,"line":708},[36,156402,154397],{"class":105},[36,156404,54994],{"class":42},[36,156406,457],{"class":112},[36,156408,154404],{"class":42},[36,156410,156411,156413,156415,156417],{"class":38,"line":713},[36,156412,154409],{"class":105},[36,156414,54994],{"class":42},[36,156416,457],{"class":112},[36,156418,154416],{"class":42},[36,156420,156421,156423,156425,156427],{"class":38,"line":719},[36,156422,154421],{"class":105},[36,156424,54994],{"class":42},[36,156426,457],{"class":112},[36,156428,154428],{"class":42},[36,156430,156431,156433,156435,156437],{"class":38,"line":725},[36,156432,154433],{"class":105},[36,156434,54994],{"class":42},[36,156436,457],{"class":112},[36,156438,154440],{"class":42},[36,156440,156441],{"class":38,"line":731},[36,156442,6239],{"class":42},[36,156444,156445],{"class":38,"line":736},[36,156446,659],{"emptyLinePlaceholder":658},[36,156448,156449,156451],{"class":38,"line":742},[36,156450,154048],{"class":101},[36,156452,154051],{"class":112},[36,156454,156455,156457,156459],{"class":38,"line":748},[36,156456,876],{"class":46},[36,156458,154461],{"class":101},[36,156460,154464],{"class":42},[36,156462,156463,156465,156467],{"class":38,"line":754},[36,156464,1239],{"class":46},[36,156466,154068],{"class":112},[36,156468,154473],{"class":42},[36,156470,156471,156473,156475],{"class":38,"line":760},[36,156472,154478],{"class":42},[36,156474,154481],{"class":105},[36,156476,91389],{"class":42},[36,156478,156479,156481,156483],{"class":38,"line":766},[36,156480,154478],{"class":42},[36,156482,66234],{"class":105},[36,156484,91389],{"class":42},[36,156486,156487,156489,156491],{"class":38,"line":772},[36,156488,154478],{"class":42},[36,156490,72679],{"class":105},[36,156492,91389],{"class":42},[36,156494,156495,156497,156499],{"class":38,"line":778},[36,156496,154478],{"class":42},[36,156498,154506],{"class":105},[36,156500,91389],{"class":42},[36,156502,156503],{"class":38,"line":783},[36,156504,41686],{"class":42},[19,156506,156507],{},"管理器示意：",[26,156509,156511],{"className":28,"code":156510,"language":30,"meta":31,"style":31},"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",[33,156512,156513,156522,156530,156541,156545,156555,156568,156579,156586,156592,156596,156605,156614,156620,156627],{"__ignoreMap":31},[36,156514,156515,156517,156520],{"class":38,"line":39},[36,156516,832],{"class":46},[36,156518,156519],{"class":101}," StudentManager",[36,156521,888],{"class":42},[36,156523,156524,156526,156528],{"class":38,"line":53},[36,156525,876],{"class":46},[36,156527,879],{"class":112},[36,156529,34406],{"class":42},[36,156531,156532,156534,156537,156539],{"class":38,"line":196},[36,156533,909],{"class":112},[36,156535,156536],{"class":42},".students ",[36,156538,47],{"class":46},[36,156540,55395],{"class":42},[36,156542,156543],{"class":38,"line":642},[36,156544,659],{"emptyLinePlaceholder":658},[36,156546,156547,156549,156552],{"class":38,"line":655},[36,156548,876],{"class":46},[36,156550,156551],{"class":101}," find_by_id",[36,156553,156554],{"class":42},"(self, student_id):\n",[36,156556,156557,156559,156561,156563,156565],{"class":38,"line":662},[36,156558,1613],{"class":46},[36,156560,155171],{"class":42},[36,156562,1619],{"class":46},[36,156564,406],{"class":112},[36,156566,156567],{"class":42},".students:\n",[36,156569,156570,156572,156575,156577],{"class":38,"line":667},[36,156571,8338],{"class":46},[36,156573,156574],{"class":42}," student.student_id ",[36,156576,6652],{"class":46},[36,156578,155192],{"class":42},[36,156580,156581,156584],{"class":38,"line":679},[36,156582,156583],{"class":46},"                return",[36,156585,155199],{"class":42},[36,156587,156588,156590],{"class":38,"line":685},[36,156589,1239],{"class":46},[36,156591,155206],{"class":112},[36,156593,156594],{"class":38,"line":691},[36,156595,659],{"emptyLinePlaceholder":658},[36,156597,156598,156600,156602],{"class":38,"line":696},[36,156599,876],{"class":46},[36,156601,8903],{"class":101},[36,156603,156604],{"class":42},"(self, student):\n",[36,156606,156607,156609,156611],{"class":38,"line":702},[36,156608,995],{"class":46},[36,156610,406],{"class":112},[36,156612,156613],{"class":42},".find_by_id(student.student_id):\n",[36,156615,156616,156618],{"class":38,"line":708},[36,156617,19388],{"class":46},[36,156619,128841],{"class":112},[36,156621,156622,156624],{"class":38,"line":713},[36,156623,909],{"class":112},[36,156625,156626],{"class":42},".students.append(student)\n",[36,156628,156629,156631],{"class":38,"line":719},[36,156630,1239],{"class":46},[36,156632,156633],{"class":112}," True\n",[19,156635,156636],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,156638,156640],{"id":156639},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[318,156642,156644],{"id":156643},"_1251-数据结构","12.5.1 数据结构",[26,156646,156648],{"className":28,"code":156647,"language":30,"meta":31,"style":31},"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",[33,156649,156650,156658,156689,156719,156748,156777],{"__ignoreMap":31},[36,156651,156652,156654,156656],{"class":38,"line":39},[36,156653,151499],{"class":42},[36,156655,47],{"class":46},[36,156657,59003],{"class":42},[36,156659,156660,156662,156664,156666,156668,156670,156673,156675,156678,156680,156682,156684,156687],{"class":38,"line":53},[36,156661,151419],{"class":42},[36,156663,151031],{"class":105},[36,156665,54994],{"class":42},[36,156667,151642],{"class":105},[36,156669,478],{"class":42},[36,156671,156672],{"class":105},"\"category\"",[36,156674,54994],{"class":42},[36,156676,156677],{"class":105},"\"手机\"",[36,156679,478],{"class":42},[36,156681,87638],{"class":105},[36,156683,54994],{"class":42},[36,156685,156686],{"class":112},"12000",[36,156688,8626],{"class":42},[36,156690,156691,156693,156695,156697,156699,156701,156703,156705,156708,156710,156712,156714,156717],{"class":38,"line":196},[36,156692,151419],{"class":42},[36,156694,151031],{"class":105},[36,156696,54994],{"class":42},[36,156698,151642],{"class":105},[36,156700,478],{"class":42},[36,156702,156672],{"class":105},[36,156704,54994],{"class":42},[36,156706,156707],{"class":105},"\"电脑\"",[36,156709,478],{"class":42},[36,156711,87638],{"class":105},[36,156713,54994],{"class":42},[36,156715,156716],{"class":112},"18000",[36,156718,8626],{"class":42},[36,156720,156721,156723,156725,156727,156729,156731,156733,156735,156737,156739,156741,156743,156746],{"class":38,"line":642},[36,156722,151419],{"class":42},[36,156724,151031],{"class":105},[36,156726,54994],{"class":42},[36,156728,151663],{"class":105},[36,156730,478],{"class":42},[36,156732,156672],{"class":105},[36,156734,54994],{"class":42},[36,156736,156677],{"class":105},[36,156738,478],{"class":42},[36,156740,87638],{"class":105},[36,156742,54994],{"class":42},[36,156744,156745],{"class":112},"15000",[36,156747,8626],{"class":42},[36,156749,156750,156752,156754,156756,156758,156760,156762,156764,156766,156768,156770,156772,156775],{"class":38,"line":655},[36,156751,151419],{"class":42},[36,156753,151031],{"class":105},[36,156755,54994],{"class":42},[36,156757,151663],{"class":105},[36,156759,478],{"class":42},[36,156761,156672],{"class":105},[36,156763,54994],{"class":42},[36,156765,156707],{"class":105},[36,156767,478],{"class":42},[36,156769,87638],{"class":105},[36,156771,54994],{"class":42},[36,156773,156774],{"class":112},"16000",[36,156776,8626],{"class":42},[36,156778,156779],{"class":38,"line":662},[36,156780,36806],{"class":42},[318,156782,156784],{"id":156783},"_1252-按日期统计","12.5.2 按日期统计",[26,156786,156788],{"className":28,"code":156787,"language":30,"meta":31,"style":31},"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",[33,156789,156790,156799,156803,156814,156828,156841,156860,156864],{"__ignoreMap":31},[36,156791,156792,156795,156797],{"class":38,"line":39},[36,156793,156794],{"class":42},"daily_total ",[36,156796,47],{"class":46},[36,156798,91421],{"class":42},[36,156800,156801],{"class":38,"line":53},[36,156802,659],{"emptyLinePlaceholder":658},[36,156804,156805,156807,156809,156811],{"class":38,"line":196},[36,156806,3120],{"class":46},[36,156808,151243],{"class":42},[36,156810,1619],{"class":46},[36,156812,156813],{"class":42}," sales:\n",[36,156815,156816,156819,156821,156824,156826],{"class":38,"line":642},[36,156817,156818],{"class":42},"    date ",[36,156820,47],{"class":46},[36,156822,156823],{"class":42}," item[",[36,156825,151031],{"class":105},[36,156827,36806],{"class":42},[36,156829,156830,156833,156835,156837,156839],{"class":38,"line":655},[36,156831,156832],{"class":42},"    amount ",[36,156834,47],{"class":46},[36,156836,156823],{"class":42},[36,156838,87638],{"class":105},[36,156840,36806],{"class":42},[36,156842,156843,156846,156848,156851,156853,156855,156857],{"class":38,"line":662},[36,156844,156845],{"class":42},"    daily_total[date] ",[36,156847,47],{"class":46},[36,156849,156850],{"class":42}," daily_total.get(date, ",[36,156852,1859],{"class":112},[36,156854,17373],{"class":42},[36,156856,4354],{"class":46},[36,156858,156859],{"class":42}," amount\n",[36,156861,156862],{"class":38,"line":667},[36,156863,659],{"emptyLinePlaceholder":658},[36,156865,156866,156868],{"class":38,"line":679},[36,156867,3486],{"class":112},[36,156869,156870],{"class":42},"(daily_total)\n",[318,156872,156874],{"id":156873},"_1253-按类别统计","12.5.3 按类别统计",[26,156876,156878],{"className":28,"code":156877,"language":30,"meta":31,"style":31},"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",[33,156879,156880,156889,156893,156903,156916,156928,156946,156950],{"__ignoreMap":31},[36,156881,156882,156885,156887],{"class":38,"line":39},[36,156883,156884],{"class":42},"category_total ",[36,156886,47],{"class":46},[36,156888,91421],{"class":42},[36,156890,156891],{"class":38,"line":53},[36,156892,659],{"emptyLinePlaceholder":658},[36,156894,156895,156897,156899,156901],{"class":38,"line":196},[36,156896,3120],{"class":46},[36,156898,151243],{"class":42},[36,156900,1619],{"class":46},[36,156902,156813],{"class":42},[36,156904,156905,156908,156910,156912,156914],{"class":38,"line":642},[36,156906,156907],{"class":42},"    category ",[36,156909,47],{"class":46},[36,156911,156823],{"class":42},[36,156913,156672],{"class":105},[36,156915,36806],{"class":42},[36,156917,156918,156920,156922,156924,156926],{"class":38,"line":655},[36,156919,156832],{"class":42},[36,156921,47],{"class":46},[36,156923,156823],{"class":42},[36,156925,87638],{"class":105},[36,156927,36806],{"class":42},[36,156929,156930,156933,156935,156938,156940,156942,156944],{"class":38,"line":662},[36,156931,156932],{"class":42},"    category_total[category] ",[36,156934,47],{"class":46},[36,156936,156937],{"class":42}," category_total.get(category, ",[36,156939,1859],{"class":112},[36,156941,17373],{"class":42},[36,156943,4354],{"class":46},[36,156945,156859],{"class":42},[36,156947,156948],{"class":38,"line":667},[36,156949,659],{"emptyLinePlaceholder":658},[36,156951,156952,156954],{"class":38,"line":679},[36,156953,3486],{"class":112},[36,156955,156956],{"class":42},"(category_total)\n",[318,156958,156960],{"id":156959},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[26,156962,156964],{"className":28,"code":156963,"language":30,"meta":31,"style":31},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[33,156965,156966,156991],{"__ignoreMap":31},[36,156967,156968,156971,156973,156975,156978,156981,156984,156987,156989],{"class":38,"line":39},[36,156969,156970],{"class":42},"top_date, top_amount ",[36,156972,47],{"class":46},[36,156974,9644],{"class":112},[36,156976,156977],{"class":42},"(daily_total.items(), ",[36,156979,156980],{"class":468},"key",[36,156982,156983],{"class":46},"=lambda",[36,156985,156986],{"class":42}," item: item[",[36,156988,4092],{"class":112},[36,156990,8353],{"class":42},[36,156992,156993,156995],{"class":38,"line":53},[36,156994,3486],{"class":112},[36,156996,156997],{"class":42},"(top_date, top_amount)\n",[14,156999,157001],{"id":157000},"_126-绘制柱状图","12.6 绘制柱状图",[26,157003,157005],{"className":28,"code":157004,"language":30,"meta":31,"style":31},"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",[33,157006,157007,157021,157032,157036,157044,157056,157068,157079,157083,157087,157097,157108,157122,157127,157144,157161,157177,157181],{"__ignoreMap":31},[36,157008,157009,157011,157013,157015,157017,157019],{"class":38,"line":39},[36,157010,645],{"class":46},[36,157012,150413],{"class":42},[36,157014,611],{"class":46},[36,157016,150418],{"class":42},[36,157018,617],{"class":46},[36,157020,150423],{"class":42},[36,157022,157023,157025,157027,157029],{"class":38,"line":53},[36,157024,645],{"class":46},[36,157026,150272],{"class":42},[36,157028,611],{"class":46},[36,157030,157031],{"class":42}," Bar\n",[36,157033,157034],{"class":38,"line":196},[36,157035,659],{"emptyLinePlaceholder":658},[36,157037,157038,157040,157042],{"class":38,"line":642},[36,157039,156884],{"class":42},[36,157041,47],{"class":46},[36,157043,19228],{"class":42},[36,157045,157046,157049,157051,157054],{"class":38,"line":655},[36,157047,157048],{"class":105},"    \"手机\"",[36,157050,54994],{"class":42},[36,157052,157053],{"class":112},"27000",[36,157055,35056],{"class":42},[36,157057,157058,157061,157063,157066],{"class":38,"line":662},[36,157059,157060],{"class":105},"    \"电脑\"",[36,157062,54994],{"class":42},[36,157064,157065],{"class":112},"34000",[36,157067,35056],{"class":42},[36,157069,157070,157073,157075,157077],{"class":38,"line":667},[36,157071,157072],{"class":105},"    \"耳机\"",[36,157074,54994],{"class":42},[36,157076,127433],{"class":112},[36,157078,35056],{"class":42},[36,157080,157081],{"class":38,"line":679},[36,157082,5300],{"class":42},[36,157084,157085],{"class":38,"line":685},[36,157086,659],{"emptyLinePlaceholder":658},[36,157088,157089,157092,157094],{"class":38,"line":691},[36,157090,157091],{"class":42},"bar ",[36,157093,47],{"class":46},[36,157095,157096],{"class":42}," Bar()\n",[36,157098,157099,157102,157105],{"class":38,"line":696},[36,157100,157101],{"class":42},"bar.add_xaxis(",[36,157103,157104],{"class":112},"list",[36,157106,157107],{"class":42},"(category_total.keys()))\n",[36,157109,157110,157113,157115,157117,157119],{"class":38,"line":702},[36,157111,157112],{"class":42},"bar.add_yaxis(",[36,157114,150329],{"class":105},[36,157116,478],{"class":42},[36,157118,157104],{"class":112},[36,157120,157121],{"class":42},"(category_total.values()))\n",[36,157123,157124],{"class":38,"line":708},[36,157125,157126],{"class":42},"bar.set_global_opts(\n",[36,157128,157129,157131,157133,157135,157137,157139,157142],{"class":38,"line":713},[36,157130,150507],{"class":468},[36,157132,47],{"class":46},[36,157134,150512],{"class":42},[36,157136,54964],{"class":468},[36,157138,47],{"class":46},[36,157140,157141],{"class":105},"\"品类销售额\"",[36,157143,41607],{"class":42},[36,157145,157146,157148,157150,157152,157154,157156,157159],{"class":38,"line":719},[36,157147,150526],{"class":468},[36,157149,47],{"class":46},[36,157151,150531],{"class":42},[36,157153,83364],{"class":468},[36,157155,47],{"class":46},[36,157157,157158],{"class":105},"\"品类\"",[36,157160,41607],{"class":42},[36,157162,157163,157165,157167,157169,157171,157173,157175],{"class":38,"line":725},[36,157164,150545],{"class":468},[36,157166,47],{"class":46},[36,157168,150531],{"class":42},[36,157170,83364],{"class":468},[36,157172,47],{"class":46},[36,157174,150329],{"class":105},[36,157176,41607],{"class":42},[36,157178,157179],{"class":38,"line":731},[36,157180,922],{"class":42},[36,157182,157183,157186,157189],{"class":38,"line":736},[36,157184,157185],{"class":42},"bar.render(",[36,157187,157188],{"class":105},"\"category_sales.html\"",[36,157190,922],{"class":42},[14,157192,157194],{"id":157193},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,157196,157197],{},"时间线适合展示不同日期、月份、年份的数据变化。",[26,157199,157201],{"className":28,"code":157200,"language":30,"meta":31,"style":31},"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",[33,157202,157203,157217,157228,157232,157240,157264,157287,157312,157316,157320,157330,157334,157345,157354,157364,157378,157409,157414,157418],{"__ignoreMap":31},[36,157204,157205,157207,157209,157211,157213,157215],{"class":38,"line":39},[36,157206,645],{"class":46},[36,157208,150413],{"class":42},[36,157210,611],{"class":46},[36,157212,150418],{"class":42},[36,157214,617],{"class":46},[36,157216,150423],{"class":42},[36,157218,157219,157221,157223,157225],{"class":38,"line":53},[36,157220,645],{"class":46},[36,157222,150272],{"class":42},[36,157224,611],{"class":46},[36,157226,157227],{"class":42}," Bar, Timeline\n",[36,157229,157230],{"class":38,"line":196},[36,157231,659],{"emptyLinePlaceholder":658},[36,157233,157234,157236,157238],{"class":38,"line":642},[36,157235,105170],{"class":42},[36,157237,47],{"class":46},[36,157239,19228],{"class":42},[36,157241,157242,157245,157248,157250,157252,157254,157256,157258,157260,157262],{"class":38,"line":655},[36,157243,157244],{"class":105},"    \"2024-10-01\"",[36,157246,157247],{"class":42},": {",[36,157249,156677],{"class":105},[36,157251,54994],{"class":42},[36,157253,156686],{"class":112},[36,157255,478],{"class":42},[36,157257,156707],{"class":105},[36,157259,54994],{"class":42},[36,157261,156716],{"class":112},[36,157263,8626],{"class":42},[36,157265,157266,157269,157271,157273,157275,157277,157279,157281,157283,157285],{"class":38,"line":662},[36,157267,157268],{"class":105},"    \"2024-10-02\"",[36,157270,157247],{"class":42},[36,157272,156677],{"class":105},[36,157274,54994],{"class":42},[36,157276,156745],{"class":112},[36,157278,478],{"class":42},[36,157280,156707],{"class":105},[36,157282,54994],{"class":42},[36,157284,156774],{"class":112},[36,157286,8626],{"class":42},[36,157288,157289,157292,157294,157296,157298,157301,157303,157305,157307,157310],{"class":38,"line":667},[36,157290,157291],{"class":105},"    \"2024-10-03\"",[36,157293,157247],{"class":42},[36,157295,156677],{"class":105},[36,157297,54994],{"class":42},[36,157299,157300],{"class":112},"17000",[36,157302,478],{"class":42},[36,157304,156707],{"class":105},[36,157306,54994],{"class":42},[36,157308,157309],{"class":112},"19000",[36,157311,8626],{"class":42},[36,157313,157314],{"class":38,"line":679},[36,157315,5300],{"class":42},[36,157317,157318],{"class":38,"line":685},[36,157319,659],{"emptyLinePlaceholder":658},[36,157321,157322,157325,157327],{"class":38,"line":691},[36,157323,157324],{"class":42},"timeline ",[36,157326,47],{"class":46},[36,157328,157329],{"class":42}," Timeline()\n",[36,157331,157332],{"class":38,"line":696},[36,157333,659],{"emptyLinePlaceholder":658},[36,157335,157336,157338,157341,157343],{"class":38,"line":702},[36,157337,3120],{"class":46},[36,157339,157340],{"class":42}," date, category_data ",[36,157342,1619],{"class":46},[36,157344,152182],{"class":42},[36,157346,157347,157350,157352],{"class":38,"line":708},[36,157348,157349],{"class":42},"    bar ",[36,157351,47],{"class":46},[36,157353,157096],{"class":42},[36,157355,157356,157359,157361],{"class":38,"line":713},[36,157357,157358],{"class":42},"    bar.add_xaxis(",[36,157360,157104],{"class":112},[36,157362,157363],{"class":42},"(category_data.keys()))\n",[36,157365,157366,157369,157371,157373,157375],{"class":38,"line":719},[36,157367,157368],{"class":42},"    bar.add_yaxis(",[36,157370,150329],{"class":105},[36,157372,478],{"class":42},[36,157374,157104],{"class":112},[36,157376,157377],{"class":42},"(category_data.values()))\n",[36,157379,157380,157383,157386,157388,157390,157392,157394,157396,157398,157400,157402,157404,157407],{"class":38,"line":725},[36,157381,157382],{"class":42},"    bar.set_global_opts(",[36,157384,157385],{"class":468},"title_opts",[36,157387,47],{"class":46},[36,157389,150512],{"class":42},[36,157391,54964],{"class":468},[36,157393,47],{"class":46},[36,157395,3937],{"class":46},[36,157397,4126],{"class":105},[36,157399,4766],{"class":112},[36,157401,77480],{"class":42},[36,157403,4815],{"class":112},[36,157405,157406],{"class":105},"销售额\"",[36,157408,2005],{"class":42},[36,157410,157411],{"class":38,"line":731},[36,157412,157413],{"class":42},"    timeline.add(bar, date)\n",[36,157415,157416],{"class":38,"line":736},[36,157417,659],{"emptyLinePlaceholder":658},[36,157419,157420,157423,157426],{"class":38,"line":742},[36,157421,157422],{"class":42},"timeline.render(",[36,157424,157425],{"class":105},"\"timeline_sales.html\"",[36,157427,922],{"class":42},[14,157429,157431],{"id":157430},"_128-绘制地图","12.8 绘制地图",[19,157433,157434],{},"地图适合展示地区数据。",[26,157436,157438],{"className":28,"code":157437,"language":30,"meta":31,"style":31},"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",[33,157439,157440,157454,157465,157469,157477,157490,157502,157515,157528,157532,157536,157546,157561,157566,157583,157602,157606],{"__ignoreMap":31},[36,157441,157442,157444,157446,157448,157450,157452],{"class":38,"line":39},[36,157443,645],{"class":46},[36,157445,150413],{"class":42},[36,157447,611],{"class":46},[36,157449,150418],{"class":42},[36,157451,617],{"class":46},[36,157453,150423],{"class":42},[36,157455,157456,157458,157460,157462],{"class":38,"line":53},[36,157457,645],{"class":46},[36,157459,150272],{"class":42},[36,157461,611],{"class":46},[36,157463,157464],{"class":42}," Map\n",[36,157466,157467],{"class":38,"line":196},[36,157468,659],{"emptyLinePlaceholder":658},[36,157470,157471,157473,157475],{"class":38,"line":642},[36,157472,105170],{"class":42},[36,157474,47],{"class":46},[36,157476,59003],{"class":42},[36,157478,157479,157482,157484,157486,157488],{"class":38,"line":655},[36,157480,157481],{"class":42},"    (",[36,157483,72824],{"class":105},[36,157485,478],{"class":42},[36,157487,4687],{"class":112},[36,157489,41607],{"class":42},[36,157491,157492,157494,157496,157498,157500],{"class":38,"line":662},[36,157493,157481],{"class":42},[36,157495,72844],{"class":105},[36,157497,478],{"class":42},[36,157499,150346],{"class":112},[36,157501,41607],{"class":42},[36,157503,157504,157506,157509,157511,157513],{"class":38,"line":667},[36,157505,157481],{"class":42},[36,157507,157508],{"class":105},"\"广东\"",[36,157510,478],{"class":42},[36,157512,5445],{"class":112},[36,157514,41607],{"class":42},[36,157516,157517,157519,157522,157524,157526],{"class":38,"line":679},[36,157518,157481],{"class":42},[36,157520,157521],{"class":105},"\"浙江\"",[36,157523,478],{"class":42},[36,157525,150351],{"class":112},[36,157527,41607],{"class":42},[36,157529,157530],{"class":38,"line":685},[36,157531,36806],{"class":42},[36,157533,157534],{"class":38,"line":691},[36,157535,659],{"emptyLinePlaceholder":658},[36,157537,157538,157541,157543],{"class":38,"line":696},[36,157539,157540],{"class":42},"map_chart ",[36,157542,47],{"class":46},[36,157544,157545],{"class":42}," Map()\n",[36,157547,157548,157551,157553,157556,157559],{"class":38,"line":702},[36,157549,157550],{"class":42},"map_chart.add(",[36,157552,150329],{"class":105},[36,157554,157555],{"class":42},", data, ",[36,157557,157558],{"class":105},"\"china\"",[36,157560,922],{"class":42},[36,157562,157563],{"class":38,"line":708},[36,157564,157565],{"class":42},"map_chart.set_global_opts(\n",[36,157567,157568,157570,157572,157574,157576,157578,157581],{"class":38,"line":713},[36,157569,150507],{"class":468},[36,157571,47],{"class":46},[36,157573,150512],{"class":42},[36,157575,54964],{"class":468},[36,157577,47],{"class":46},[36,157579,157580],{"class":105},"\"地区销售额\"",[36,157582,41607],{"class":42},[36,157584,157585,157588,157590,157593,157596,157598,157600],{"class":38,"line":719},[36,157586,157587],{"class":468},"    visualmap_opts",[36,157589,47],{"class":46},[36,157591,157592],{"class":42},"opts.VisualMapOpts(",[36,157594,157595],{"class":468},"max_",[36,157597,47],{"class":46},[36,157599,5445],{"class":112},[36,157601,41607],{"class":42},[36,157603,157604],{"class":38,"line":725},[36,157605,922],{"class":42},[36,157607,157608,157611,157614],{"class":38,"line":731},[36,157609,157610],{"class":42},"map_chart.render(",[36,157612,157613],{"class":105},"\"map_sales.html\"",[36,157615,922],{"class":42},[19,157617,157618],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,157620,157622],{"id":157621},"_129-项目拆分建议","12.9 项目拆分建议",[19,157624,157625],{},"当代码超过一个文件时，可以这样组织：",[26,157627,157630],{"className":157628,"code":157629,"language":80,"meta":31},[78],"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",[33,157631,157629],{"__ignoreMap":31},[19,157633,157634],{},"职责：",[211,157636,157637,157643,157649,157655],{},[214,157638,157639,157642],{},[33,157640,157641],{},"main.py","：程序入口。",[214,157644,157645,157648],{},[33,157646,157647],{},"file_utils.py","：读写 JSON。",[214,157650,157651,157654],{},[33,157652,157653],{},"sales_service.py","：统计销售数据。",[214,157656,157657,157660],{},[33,157658,157659],{},"chart_builder.py","：生成图表。",[14,157662,157664],{"id":157663},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,157666,157667],{},"语法基础：",[211,157669,157670,157673,157676,157679],{},[214,157671,157672],{},"会写变量、注释、输入输出。",[214,157674,157675],{},"会使用 int、float、str、bool。",[214,157677,157678],{},"会做类型转换。",[214,157680,157681],{},"会使用 f-string 格式化输出。",[19,157683,157684],{},"流程控制：",[211,157686,157687,157693,157699,157707],{},[214,157688,157689,157690,224],{},"会写 ",[33,157691,157692],{},"if elif else",[214,157694,157689,157695,324,157697,224],{},[33,157696,112138],{},[33,157698,3120],{},[214,157700,157701,157702,324,157704,224],{},"理解 ",[33,157703,5765],{},[33,157705,157706],{},"continue",[214,157708,157709],{},"能写嵌套循环。",[19,157711,157712],{},"函数：",[211,157714,157715,157718,157721,157724],{},[214,157716,157717],{},"会定义和调用函数。",[214,157719,157720],{},"理解参数和返回值。",[214,157722,157723],{},"知道局部变量和全局变量。",[214,157725,157726],{},"会使用默认参数、关键字参数、不定长参数。",[19,157728,157729],{},"容器：",[211,157731,157732,157735,157738,157741,157744],{},[214,157733,157734],{},"会使用列表增删改查。",[214,157736,157737],{},"会遍历列表、字典。",[214,157739,157740],{},"会使用切片。",[214,157742,157743],{},"会用集合去重。",[214,157745,157746],{},"会处理列表嵌套字典。",[19,157748,157749],{},"文件和模块：",[211,157751,157752,157755,157758,157761,157764],{},[214,157753,157754],{},"会读写文本文件。",[214,157756,157757],{},"会读写 JSON。",[214,157759,157760],{},"会捕获常见异常。",[214,157762,157763],{},"会导入模块和第三方包。",[214,157765,157766],{},"会创建简单包结构。",[19,157768,157769],{},"项目能力：",[211,157771,157772,157775,157778,157781,157784],{},[214,157773,157774],{},"能把代码拆成函数。",[214,157776,157777],{},"能把数据保存到文件。",[214,157779,157780],{},"能处理用户输入错误。",[214,157782,157783],{},"能写一个完整菜单程序。",[214,157785,157786],{},"能用 pyecharts 生成图表。",[14,157788,157790],{"id":157789},"_1211-推荐练习顺序","12.11 推荐练习顺序",[211,157792,157793,157796,157799,157802,157805,157808,157811,157814],{},[214,157794,157795],{},"猜数字游戏。",[214,157797,157798],{},"ATM 菜单程序。",[214,157800,157801],{},"学生成绩统计。",[214,157803,157804],{},"学生管理系统函数版。",[214,157806,157807],{},"学生管理系统文件持久化版。",[214,157809,157810],{},"学生管理系统面向对象版。",[214,157812,157813],{},"销售数据统计。",[214,157815,157816],{},"销售数据可视化。",[14,157818,157820],{"id":157819},"_1212-常见学习误区","12.12 常见学习误区",[211,157822,157823,157826,157829,157832,157835,157838,157841],{},[214,157824,157825],{},"只看视频不敲代码。",[214,157827,157828],{},"一报错就复制错误去搜，不先读报错位置。",[214,157830,157831],{},"变量名随便写，后续自己看不懂。",[214,157833,157834],{},"所有代码都写在一个文件一个函数里。",[214,157836,157837],{},"不保存练习代码，复习时没有材料。",[214,157839,157840],{},"还没掌握列表字典就急着学框架。",[214,157842,157843],{},"不会读官方文档，只依赖教程。",[14,157845,157847],{"id":157846},"_1213-如何读报错","12.13 如何读报错",[19,157849,157850],{},"报错通常从下往上看最后几行。",[19,157852,18791],{},[26,157854,157857],{"className":157855,"code":157856,"language":80,"meta":31},[78],"ValueError: invalid literal for int() with base 10: 'abc'\n",[33,157858,157856],{"__ignoreMap":31},[19,157860,28215],{},[211,157862,157863,157869,157879],{},[214,157864,157865,157866,224],{},"异常类型是 ",[33,157867,157868],{},"ValueError",[214,157870,110824,157871,157874,157875,157878],{},[33,157872,157873],{},"int()"," 无法把 ",[33,157876,157877],{},"'abc'"," 转成整数。",[214,157880,157881],{},"应该检查输入内容或增加异常处理。",[19,157883,157884],{},"再看文件名和行号：",[26,157886,157889],{"className":157887,"code":157888,"language":80,"meta":31},[78],"File \"main.py\", line 10, in \u003Cmodule>\n",[33,157890,157888],{"__ignoreMap":31},[19,157892,157893,157894,157896],{},"表示错误发生在 ",[33,157895,157641],{}," 第 10 行。",[14,157898,157900],{"id":157899},"_1214-后续学习方向","12.14 后续学习方向",[19,157902,157903],{},"Python 基础完成后，可以按兴趣选择方向：",[211,157905,157906,157918,157927,157939,157950,157959,157969],{},[214,157907,157908,157909,4087,157912,4087,157915,224],{},"自动化办公：",[33,157910,157911],{},"openpyxl",[33,157913,157914],{},"python-docx",[33,157916,157917],{},"pdfplumber",[214,157919,157920,157921,4087,157923,4087,157925,224],{},"数据分析：",[33,157922,104174],{},[33,157924,149219],{},[33,157926,149227],{},[214,157928,157929,157930,4087,157933,4087,157936,224],{},"Web 后端：",[33,157931,157932],{},"Flask",[33,157934,157935],{},"FastAPI",[33,157937,157938],{},"Django",[214,157940,157941,157942,4087,157944,4087,157947,224],{},"爬虫：",[33,157943,149204],{},[33,157945,157946],{},"BeautifulSoup",[33,157948,157949],{},"Scrapy",[214,157951,157952,157953,4087,157955,157958],{},"测试开发：",[33,157954,149251],{},[33,157956,157957],{},"selenium","、接口测试。",[214,157960,157961,157962,4087,157964,4087,157966,224],{},"人工智能：",[33,157963,104174],{},[33,157965,149219],{},[33,157967,157968],{},"pytorch",[214,157970,157971,157972,4087,157974,4087,157977,224],{},"运维脚本：",[33,157973,148820],{},[33,157975,157976],{},"subprocess",[33,157978,157979],{},"paramiko",[19,157981,157982],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,157984,157986],{"id":157985},"_1215-结课练习","12.15 结课练习",[211,157988,157989,157992,157995,157998,158001,158004,158007,158010],{},[214,157990,157991],{},"完成函数版学生管理系统。",[214,157993,157994],{},"给学生管理系统增加 JSON 持久化。",[214,157996,157997],{},"给学生管理系统增加异常处理。",[214,157999,158000],{},"把学生管理系统改成面向对象版。",[214,158002,158003],{},"使用 pyecharts 绘制学生成绩柱状图。",[214,158005,158006],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[214,158008,158009],{},"按品类统计销售额并绘制柱状图。",[214,158011,158012],{},"写一份自己的 Python 学习路线图。",[3785,158014,158015],{},"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":31,"searchDepth":53,"depth":53,"links":158017},[158018,158019,158022,158023,158024,158030,158031,158032,158033,158034,158035,158036,158037,158038,158039],{"id":154734,"depth":53,"text":154735},{"id":154784,"depth":53,"text":154785,"children":158020},[158021],{"id":154788,"depth":196,"text":154789},{"id":154827,"depth":53,"text":154828},{"id":156301,"depth":53,"text":156302},{"id":156639,"depth":53,"text":156640,"children":158025},[158026,158027,158028,158029],{"id":156643,"depth":196,"text":156644},{"id":156783,"depth":196,"text":156784},{"id":156873,"depth":196,"text":156874},{"id":156959,"depth":196,"text":156960},{"id":157000,"depth":53,"text":157001},{"id":157193,"depth":53,"text":157194},{"id":157430,"depth":53,"text":157431},{"id":157621,"depth":53,"text":157622},{"id":157663,"depth":53,"text":157664},{"id":157789,"depth":53,"text":157790},{"id":157819,"depth":53,"text":157820},{"id":157846,"depth":53,"text":157847},{"id":157899,"depth":53,"text":157900},{"id":157985,"depth":53,"text":157986},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":154726,"description":26998},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":158046,"title":158047,"body":158048,"description":26998,"extension":3817,"meta":160517,"navigation":658,"path":160518,"seo":160519,"stem":160520,"__hash__":160521},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":158049,"toc":160492},[158050,158053,158057,158060,158063,158083,158086,158109,158112,158115,158137,158140,158162,158166,158169,158209,158212,158333,158337,158340,158380,158383,158407,158410,158414,158417,158431,158464,158467,158502,158505,158528,158531,158564,158567,158569,158575,158650,158653,158659,158676,158716,158720,158723,158769,158771,158809,158812,158847,158850,158885,158888,158920,158923,158942,158946,158950,159063,159065,159140,159144,159190,159193,159219,159228,159232,159235,159298,159306,159334,159338,159378,159443,159447,159450,159489,159492,159537,159540,159601,159605,159632,159635,159663,159666,159670,159674,159739,159742,159780,159783,159815,159819,159918,159922,159925,159998,160001,160049,160053,160059,160099,160102,160149,160152,160201,160205,160207,160221,160223,160404,160408,160435,160455,160462,160466,160483,160489],[10,158051,158047],{"id":158052},"_2-基础语法变量与字符串",[14,158054,158056],{"id":158055},"_21-注释","2.1 注释",[19,158058,158059],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,158061,158062],{},"单行注释：",[26,158064,158066],{"className":28,"code":158065,"language":30,"meta":31,"style":31},"# 这是单行注释\nprint(\"hello\")\n",[33,158067,158068,158073],{"__ignoreMap":31},[36,158069,158070],{"class":38,"line":39},[36,158071,158072],{"class":3943},"# 这是单行注释\n",[36,158074,158075,158077,158079,158081],{"class":38,"line":53},[36,158076,3486],{"class":112},[36,158078,495],{"class":42},[36,158080,9537],{"class":105},[36,158082,922],{"class":42},[19,158084,158085],{},"多行说明常用三引号：",[26,158087,158089],{"className":28,"code":158088,"language":30,"meta":31,"style":31},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[33,158090,158091,158095,158100,158105],{"__ignoreMap":31},[36,158092,158093],{"class":38,"line":39},[36,158094,816],{"class":105},[36,158096,158097],{"class":38,"line":53},[36,158098,158099],{"class":105},"这是多行说明。\n",[36,158101,158102],{"class":38,"line":196},[36,158103,158104],{"class":105},"常用于文件顶部说明、函数说明等。\n",[36,158106,158107],{"class":38,"line":642},[36,158108,816],{"class":105},[19,158110,158111],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,158113,158114],{},"不好：",[26,158116,158118],{"className":28,"code":158117,"language":30,"meta":31,"style":31},"# age 加 1\nage = age + 1\n",[33,158119,158120,158125],{"__ignoreMap":31},[36,158121,158122],{"class":38,"line":39},[36,158123,158124],{"class":3943},"# age 加 1\n",[36,158126,158127,158129,158131,158133,158135],{"class":38,"line":53},[36,158128,149580],{"class":42},[36,158130,47],{"class":46},[36,158132,19363],{"class":42},[36,158134,4354],{"class":46},[36,158136,1661],{"class":112},[19,158138,158139],{},"较好：",[26,158141,158143],{"className":28,"code":158142,"language":30,"meta":31,"style":31},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[33,158144,158145,158150],{"__ignoreMap":31},[36,158146,158147],{"class":38,"line":39},[36,158148,158149],{"class":3943},"# 用户过完生日后，年龄增加一岁\n",[36,158151,158152,158154,158156,158158,158160],{"class":38,"line":53},[36,158153,149580],{"class":42},[36,158155,47],{"class":46},[36,158157,19363],{"class":42},[36,158159,4354],{"class":46},[36,158161,1661],{"class":112},[14,158163,158165],{"id":158164},"_22-字面量","2.2 字面量",[19,158167,158168],{},"字面量就是代码中直接写出来的数据。",[26,158170,158172],{"className":28,"code":158171,"language":30,"meta":31,"style":31},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[33,158173,158174,158181,158188,158195,158202],{"__ignoreMap":31},[36,158175,158176,158178],{"class":38,"line":39},[36,158177,4186],{"class":112},[36,158179,158180],{"class":3943},"          # 整数\n",[36,158182,158183,158185],{"class":38,"line":53},[36,158184,3934],{"class":112},[36,158186,158187],{"class":3943},"         # 小数\n",[36,158189,158190,158192],{"class":38,"line":196},[36,158191,9537],{"class":105},[36,158193,158194],{"class":3943},"      # 字符串\n",[36,158196,158197,158199],{"class":38,"line":642},[36,158198,35066],{"class":112},[36,158200,158201],{"class":3943},"         # 布尔值\n",[36,158203,158204,158206],{"class":38,"line":655},[36,158205,885],{"class":112},[36,158207,158208],{"class":3943},"         # 空值\n",[19,158210,158211],{},"常见字面量类型：",[248,158213,158214,158224],{},[251,158215,158216],{},[254,158217,158218,158220,158222],{},[257,158219,27357],{},[257,158221,31103],{},[257,158223,29483],{},[265,158225,158226,158237,158248,158259,158271,158283,158295,158308,158320],{},[254,158227,158228,158230,158234],{},[270,158229,1378],{},[270,158231,158232],{},[33,158233,4186],{},[270,158235,158236],{},"整数",[254,158238,158239,158241,158245],{},[270,158240,1260],{},[270,158242,158243],{},[33,158244,3934],{},[270,158246,158247],{},"浮点数",[254,158249,158250,158252,158256],{},[270,158251,5038],{},[270,158253,158254],{},[33,158255,9537],{},[270,158257,158258],{},"字符串",[254,158260,158261,158263,158269],{},[270,158262,5090],{},[270,158264,158265,4087,158267],{},[33,158266,35066],{},[33,158268,37547],{},[270,158270,69570],{},[254,158272,158273,158276,158280],{},[270,158274,158275],{},"NoneType",[270,158277,158278],{},[33,158279,885],{},[270,158281,158282],{},"空值",[254,158284,158285,158287,158292],{},[270,158286,157104],{},[270,158288,158289],{},[33,158290,158291],{},"[1, 2, 3]",[270,158293,158294],{},"列表",[254,158296,158297,158300,158305],{},[270,158298,158299],{},"tuple",[270,158301,158302],{},[33,158303,158304],{},"(1, 2, 3)",[270,158306,158307],{},"元组",[254,158309,158310,158312,158317],{},[270,158311,1394],{},[270,158313,158314],{},[33,158315,158316],{},"{\"name\": \"张三\"}",[270,158318,158319],{},"字典",[254,158321,158322,158325,158330],{},[270,158323,158324],{},"set",[270,158326,158327],{},[33,158328,158329],{},"{1, 2, 3}",[270,158331,158332],{},"集合",[14,158334,158336],{"id":158335},"_23-变量","2.3 变量",[19,158338,158339],{},"变量是保存数据的名字。",[26,158341,158343],{"className":28,"code":158342,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[33,158344,158345,158353,158361,158371],{"__ignoreMap":31},[36,158346,158347,158349,158351],{"class":38,"line":39},[36,158348,149570],{"class":42},[36,158350,47],{"class":46},[36,158352,152387],{"class":105},[36,158354,158355,158357,158359],{"class":38,"line":53},[36,158356,149580],{"class":42},[36,158358,47],{"class":46},[36,158360,149585],{"class":112},[36,158362,158363,158366,158368],{"class":38,"line":196},[36,158364,158365],{"class":42},"height ",[36,158367,47],{"class":46},[36,158369,158370],{"class":112}," 1.75\n",[36,158372,158373,158376,158378],{"class":38,"line":642},[36,158374,158375],{"class":42},"is_student ",[36,158377,47],{"class":46},[36,158379,156633],{"class":112},[19,158381,158382],{},"Python 的变量不需要提前声明类型：",[26,158384,158386],{"className":28,"code":158385,"language":30,"meta":31,"style":31},"score = 100\nscore = \"满分\"\n",[33,158387,158388,158398],{"__ignoreMap":31},[36,158389,158390,158393,158395],{"class":38,"line":39},[36,158391,158392],{"class":42},"score ",[36,158394,47],{"class":46},[36,158396,158397],{"class":112}," 100\n",[36,158399,158400,158402,158404],{"class":38,"line":53},[36,158401,158392],{"class":42},[36,158403,47],{"class":46},[36,158405,158406],{"class":105}," \"满分\"\n",[19,158408,158409],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,158411,158413],{"id":158412},"_24-变量命名规则","2.4 变量命名规则",[19,158415,158416],{},"硬性规则：",[211,158418,158419,158422,158425,158428],{},[214,158420,158421],{},"只能由字母、数字、下划线组成。",[214,158423,158424],{},"不能以数字开头。",[214,158426,158427],{},"不能使用 Python 关键字。",[214,158429,158430],{},"区分大小写。",[26,158432,158434],{"className":28,"code":158433,"language":30,"meta":31,"style":31},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[33,158435,158436,158445,158454],{"__ignoreMap":31},[36,158437,158438,158441,158443],{"class":38,"line":39},[36,158439,158440],{"class":42},"user_name ",[36,158442,47],{"class":46},[36,158444,149575],{"class":105},[36,158446,158447,158450,158452],{"class":38,"line":53},[36,158448,158449],{"class":42},"age2 ",[36,158451,47],{"class":46},[36,158453,149585],{"class":112},[36,158455,158456,158459,158461],{"class":38,"line":196},[36,158457,158458],{"class":42},"_token ",[36,158460,47],{"class":46},[36,158462,158463],{"class":105}," \"abc\"\n",[19,158465,158466],{},"错误写法：",[26,158468,158470],{"className":28,"code":158469,"language":30,"meta":31,"style":31},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[33,158471,158472,158481,158493],{"__ignoreMap":31},[36,158473,158474,158477,158479],{"class":38,"line":39},[36,158475,158476],{"class":80957},"2age",[36,158478,673],{"class":46},[36,158480,149585],{"class":112},[36,158482,158483,158485,158487,158489,158491],{"class":38,"line":53},[36,158484,134618],{"class":42},[36,158486,1308],{"class":46},[36,158488,149570],{"class":42},[36,158490,47],{"class":46},[36,158492,149575],{"class":105},[36,158494,158495,158497,158499],{"class":38,"line":196},[36,158496,832],{"class":46},[36,158498,673],{"class":46},[36,158500,158501],{"class":105}," \"一班\"\n",[19,158503,158504],{},"查看关键字：",[26,158506,158508],{"className":28,"code":158507,"language":30,"meta":31,"style":31},"import keyword\n\nprint(keyword.kwlist)\n",[33,158509,158510,158517,158521],{"__ignoreMap":31},[36,158511,158512,158514],{"class":38,"line":39},[36,158513,611],{"class":46},[36,158515,158516],{"class":42}," keyword\n",[36,158518,158519],{"class":38,"line":53},[36,158520,659],{"emptyLinePlaceholder":658},[36,158522,158523,158525],{"class":38,"line":196},[36,158524,3486],{"class":112},[36,158526,158527],{"class":42},"(keyword.kwlist)\n",[19,158529,158530],{},"推荐命名风格：",[26,158532,158534],{"className":28,"code":158533,"language":30,"meta":31,"style":31},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[33,158535,158536,158545,158555],{"__ignoreMap":31},[36,158537,158538,158541,158543],{"class":38,"line":39},[36,158539,158540],{"class":42},"student_name ",[36,158542,47],{"class":46},[36,158544,152387],{"class":105},[36,158546,158547,158550,158552],{"class":38,"line":53},[36,158548,158549],{"class":42},"total_price ",[36,158551,47],{"class":46},[36,158553,158554],{"class":112}," 99.8\n",[36,158556,158557,158560,158562],{"class":38,"line":196},[36,158558,158559],{"class":42},"is_finished ",[36,158561,47],{"class":46},[36,158563,128841],{"class":112},[19,158565,158566],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,158568,54289],{"id":54288},[19,158570,107857,158571,158574],{},[33,158572,158573],{},"type()"," 查看数据类型：",[26,158576,158578],{"className":28,"code":158577,"language":30,"meta":31,"style":31},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[33,158579,158580,158594,158608,158622,158636],{"__ignoreMap":31},[36,158581,158582,158584,158586,158588,158590,158592],{"class":38,"line":39},[36,158583,3486],{"class":112},[36,158585,495],{"class":42},[36,158587,106600],{"class":112},[36,158589,495],{"class":42},[36,158591,4186],{"class":112},[36,158593,2005],{"class":42},[36,158595,158596,158598,158600,158602,158604,158606],{"class":38,"line":53},[36,158597,3486],{"class":112},[36,158599,495],{"class":42},[36,158601,106600],{"class":112},[36,158603,495],{"class":42},[36,158605,3934],{"class":112},[36,158607,2005],{"class":42},[36,158609,158610,158612,158614,158616,158618,158620],{"class":38,"line":196},[36,158611,3486],{"class":112},[36,158613,495],{"class":42},[36,158615,106600],{"class":112},[36,158617,495],{"class":42},[36,158619,9537],{"class":105},[36,158621,2005],{"class":42},[36,158623,158624,158626,158628,158630,158632,158634],{"class":38,"line":642},[36,158625,3486],{"class":112},[36,158627,495],{"class":42},[36,158629,106600],{"class":112},[36,158631,495],{"class":42},[36,158633,35066],{"class":112},[36,158635,2005],{"class":42},[36,158637,158638,158640,158642,158644,158646,158648],{"class":38,"line":655},[36,158639,3486],{"class":112},[36,158641,495],{"class":42},[36,158643,106600],{"class":112},[36,158645,495],{"class":42},[36,158647,885],{"class":112},[36,158649,2005],{"class":42},[19,158651,158652],{},"输出类似：",[26,158654,158657],{"className":158655,"code":158656,"language":80,"meta":31},[78],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[33,158658,158656],{"__ignoreMap":31},[19,158660,12706,158661,110762,158663,158665,158666,158668,158669,25121,158671,158668,158673,158675],{},[33,158662,5090],{},[33,158664,1378],{}," 的子类，",[33,158667,35066],{}," 可以当作 ",[33,158670,4092],{},[33,158672,37547],{},[33,158674,1859],{},"，但业务代码中不要滥用。",[26,158677,158679],{"className":28,"code":158678,"language":30,"meta":31,"style":31},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[33,158680,158681,158699],{"__ignoreMap":31},[36,158682,158683,158685,158687,158689,158691,158693,158696],{"class":38,"line":39},[36,158684,3486],{"class":112},[36,158686,495],{"class":42},[36,158688,35066],{"class":112},[36,158690,49124],{"class":46},[36,158692,28732],{"class":112},[36,158694,158695],{"class":42},")   ",[36,158697,158698],{"class":3943},"# 2\n",[36,158700,158701,158703,158705,158707,158709,158711,158713],{"class":38,"line":53},[36,158702,3486],{"class":112},[36,158704,495],{"class":42},[36,158706,37547],{"class":112},[36,158708,49124],{"class":46},[36,158710,28732],{"class":112},[36,158712,49366],{"class":42},[36,158714,158715],{"class":3943},"# 1\n",[14,158717,158719],{"id":158718},"_26-类型转换","2.6 类型转换",[19,158721,158722],{},"常用转换函数：",[26,158724,158726],{"className":28,"code":158725,"language":30,"meta":31,"style":31},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[33,158727,158728,158738,158749,158759],{"__ignoreMap":31},[36,158729,158730,158732,158734,158736],{"class":38,"line":39},[36,158731,1378],{"class":112},[36,158733,495],{"class":42},[36,158735,57873],{"class":105},[36,158737,922],{"class":42},[36,158739,158740,158742,158744,158747],{"class":38,"line":53},[36,158741,1260],{"class":112},[36,158743,495],{"class":42},[36,158745,158746],{"class":105},"\"3.14\"",[36,158748,922],{"class":42},[36,158750,158751,158753,158755,158757],{"class":38,"line":196},[36,158752,5038],{"class":112},[36,158754,495],{"class":42},[36,158756,4186],{"class":112},[36,158758,922],{"class":42},[36,158760,158761,158763,158765,158767],{"class":38,"line":642},[36,158762,5090],{"class":112},[36,158764,495],{"class":42},[36,158766,4092],{"class":112},[36,158768,922],{"class":42},[19,158770,18791],{},[26,158772,158774],{"className":28,"code":158773,"language":30,"meta":31,"style":31},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[33,158775,158776,158785,158796],{"__ignoreMap":31},[36,158777,158778,158780,158782],{"class":38,"line":39},[36,158779,149580],{"class":42},[36,158781,47],{"class":46},[36,158783,158784],{"class":105}," \"18\"\n",[36,158786,158787,158789,158791,158793],{"class":38,"line":53},[36,158788,149580],{"class":42},[36,158790,47],{"class":46},[36,158792,6094],{"class":112},[36,158794,158795],{"class":42},"(age)\n",[36,158797,158798,158800,158803,158805,158807],{"class":38,"line":196},[36,158799,3486],{"class":112},[36,158801,158802],{"class":42},"(age ",[36,158804,4354],{"class":46},[36,158806,28732],{"class":112},[36,158808,922],{"class":42},[19,158810,158811],{},"输入得到的内容永远是字符串：",[26,158813,158815],{"className":28,"code":158814,"language":30,"meta":31,"style":31},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[33,158816,158817,158833],{"__ignoreMap":31},[36,158818,158819,158822,158824,158826,158828,158831],{"class":38,"line":39},[36,158820,158821],{"class":42},"num ",[36,158823,47],{"class":46},[36,158825,64160],{"class":112},[36,158827,495],{"class":42},[36,158829,158830],{"class":105},"\"请输入数字:\"",[36,158832,922],{"class":42},[36,158834,158835,158837,158839,158841,158844],{"class":38,"line":53},[36,158836,3486],{"class":112},[36,158838,495],{"class":42},[36,158840,106600],{"class":112},[36,158842,158843],{"class":42},"(num))  ",[36,158845,158846],{"class":3943},"# str\n",[19,158848,158849],{},"如果要做数学运算，必须转换：",[26,158851,158853],{"className":28,"code":158852,"language":30,"meta":31,"style":31},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[33,158854,158855,158873],{"__ignoreMap":31},[36,158856,158857,158859,158861,158863,158865,158867,158869,158871],{"class":38,"line":39},[36,158858,158821],{"class":42},[36,158860,47],{"class":46},[36,158862,6094],{"class":112},[36,158864,495],{"class":42},[36,158866,57378],{"class":112},[36,158868,495],{"class":42},[36,158870,158830],{"class":105},[36,158872,2005],{"class":42},[36,158874,158875,158877,158879,158881,158883],{"class":38,"line":53},[36,158876,3486],{"class":112},[36,158878,49177],{"class":42},[36,158880,4354],{"class":46},[36,158882,5750],{"class":112},[36,158884,922],{"class":42},[19,158886,158887],{},"常见错误：",[26,158889,158891],{"className":28,"code":158890,"language":30,"meta":31,"style":31},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[33,158892,158893,158906],{"__ignoreMap":31},[36,158894,158895,158897,158899,158901,158903],{"class":38,"line":39},[36,158896,1378],{"class":112},[36,158898,495],{"class":42},[36,158900,158746],{"class":105},[36,158902,158695],{"class":42},[36,158904,158905],{"class":3943},"# 错误\n",[36,158907,158908,158910,158912,158915,158918],{"class":38,"line":53},[36,158909,1378],{"class":112},[36,158911,495],{"class":42},[36,158913,158914],{"class":105},"\"abc\"",[36,158916,158917],{"class":42},")    ",[36,158919,158905],{"class":3943},[19,158921,158922],{},"正确写法：",[26,158924,158926],{"className":28,"code":158925,"language":30,"meta":31,"style":31},"num = float(\"3.14\")\n",[33,158927,158928],{"__ignoreMap":31},[36,158929,158930,158932,158934,158936,158938,158940],{"class":38,"line":39},[36,158931,158821],{"class":42},[36,158933,47],{"class":46},[36,158935,1341],{"class":112},[36,158937,495],{"class":42},[36,158939,158746],{"class":105},[36,158941,922],{"class":42},[14,158943,158945],{"id":158944},"_27-运算符","2.7 运算符",[318,158947,158949],{"id":158948},"_271-算术运算符","2.7.1 算术运算符",[248,158951,158952,158963],{},[251,158953,158954],{},[254,158955,158956,158959,158961],{},[257,158957,158958],{},"运算符",[257,158960,29483],{},[257,158962,31103],{},[265,158964,158965,158979,158993,159007,159021,159035,159049],{},[254,158966,158967,158971,158974],{},[270,158968,158969],{},[33,158970,4354],{},[270,158972,158973],{},"加法",[270,158975,158976],{},[33,158977,158978],{},"1 + 2",[254,158980,158981,158985,158988],{},[270,158982,158983],{},[33,158984,1308],{},[270,158986,158987],{},"减法",[270,158989,158990],{},[33,158991,158992],{},"5 - 3",[254,158994,158995,158999,159002],{},[270,158996,158997],{},[33,158998,1372],{},[270,159000,159001],{},"乘法",[270,159003,159004],{},[33,159005,159006],{},"2 * 3",[254,159008,159009,159013,159016],{},[270,159010,159011],{},[33,159012,4455],{},[270,159014,159015],{},"除法，结果是浮点数",[270,159017,159018],{},[33,159019,159020],{},"5 \u002F 2",[254,159022,159023,159027,159030],{},[270,159024,159025],{},[33,159026,36889],{},[270,159028,159029],{},"整除",[270,159031,159032],{},[33,159033,159034],{},"5 \u002F\u002F 2",[254,159036,159037,159041,159044],{},[270,159038,159039],{},[33,159040,4203],{},[270,159042,159043],{},"取余",[270,159045,159046],{},[33,159047,159048],{},"5 % 2",[254,159050,159051,159055,159058],{},[270,159052,159053],{},[33,159054,14322],{},[270,159056,159057],{},"幂运算",[270,159059,159060],{},[33,159061,159062],{},"2 ** 3",[19,159064,18791],{},[26,159066,159068],{"className":28,"code":159067,"language":30,"meta":31,"style":31},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[33,159069,159070,159088,159105,159122],{"__ignoreMap":31},[36,159071,159072,159074,159076,159078,159081,159083,159085],{"class":38,"line":39},[36,159073,3486],{"class":112},[36,159075,495],{"class":42},[36,159077,4194],{"class":112},[36,159079,159080],{"class":46}," \u002F",[36,159082,18411],{"class":112},[36,159084,158695],{"class":42},[36,159086,159087],{"class":3943},"# 2.5\n",[36,159089,159090,159092,159094,159096,159099,159101,159103],{"class":38,"line":53},[36,159091,3486],{"class":112},[36,159093,495],{"class":42},[36,159095,4194],{"class":112},[36,159097,159098],{"class":46}," \u002F\u002F",[36,159100,18411],{"class":112},[36,159102,49366],{"class":42},[36,159104,158698],{"class":3943},[36,159106,159107,159109,159111,159113,159116,159118,159120],{"class":38,"line":196},[36,159108,3486],{"class":112},[36,159110,495],{"class":42},[36,159112,4194],{"class":112},[36,159114,159115],{"class":46}," %",[36,159117,18411],{"class":112},[36,159119,158695],{"class":42},[36,159121,158715],{"class":3943},[36,159123,159124,159126,159128,159130,159133,159135,159137],{"class":38,"line":642},[36,159125,3486],{"class":112},[36,159127,495],{"class":42},[36,159129,498],{"class":112},[36,159131,159132],{"class":46}," **",[36,159134,81624],{"class":112},[36,159136,49366],{"class":42},[36,159138,159139],{"class":3943},"# 8\n",[318,159141,159143],{"id":159142},"_272-赋值运算符","2.7.2 赋值运算符",[26,159145,159147],{"className":28,"code":159146,"language":30,"meta":31,"style":31},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[33,159148,159149,159157,159165,159173,159181],{"__ignoreMap":31},[36,159150,159151,159153,159155],{"class":38,"line":39},[36,159152,158821],{"class":42},[36,159154,47],{"class":46},[36,159156,61983],{"class":112},[36,159158,159159,159161,159163],{"class":38,"line":53},[36,159160,158821],{"class":42},[36,159162,1658],{"class":46},[36,159164,586],{"class":112},[36,159166,159167,159169,159171],{"class":38,"line":196},[36,159168,158821],{"class":42},[36,159170,153286],{"class":46},[36,159172,51280],{"class":112},[36,159174,159175,159177,159179],{"class":38,"line":642},[36,159176,158821],{"class":42},[36,159178,140182],{"class":46},[36,159180,123070],{"class":112},[36,159182,159183,159185,159188],{"class":38,"line":655},[36,159184,158821],{"class":42},[36,159186,159187],{"class":46},"\u002F=",[36,159189,51280],{"class":112},[19,159191,159192],{},"等价关系：",[26,159194,159196],{"className":28,"code":159195,"language":30,"meta":31,"style":31},"num += 1\nnum = num + 1\n",[33,159197,159198,159206],{"__ignoreMap":31},[36,159199,159200,159202,159204],{"class":38,"line":39},[36,159201,158821],{"class":42},[36,159203,1658],{"class":46},[36,159205,1661],{"class":112},[36,159207,159208,159210,159212,159215,159217],{"class":38,"line":53},[36,159209,158821],{"class":42},[36,159211,47],{"class":46},[36,159213,159214],{"class":42}," num ",[36,159216,4354],{"class":46},[36,159218,1661],{"class":112},[19,159220,159221,159222,324,159225,224],{},"Python 没有 ",[33,159223,159224],{},"num++",[33,159226,159227],{},"num--",[318,159229,159231],{"id":159230},"_273-比较运算符","2.7.3 比较运算符",[19,159233,159234],{},"比较运算结果是布尔值。",[26,159236,159238],{"className":28,"code":159237,"language":30,"meta":31,"style":31},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[33,159239,159240,159254,159269,159283],{"__ignoreMap":31},[36,159241,159242,159244,159246,159248,159250,159252],{"class":38,"line":39},[36,159243,3486],{"class":112},[36,159245,495],{"class":42},[36,159247,554],{"class":112},[36,159249,29835],{"class":46},[36,159251,5860],{"class":112},[36,159253,922],{"class":42},[36,159255,159256,159258,159260,159262,159265,159267],{"class":38,"line":53},[36,159257,3486],{"class":112},[36,159259,495],{"class":42},[36,159261,554],{"class":112},[36,159263,159264],{"class":46}," >=",[36,159266,5750],{"class":112},[36,159268,922],{"class":42},[36,159270,159271,159273,159275,159277,159279,159281],{"class":38,"line":196},[36,159272,3486],{"class":112},[36,159274,495],{"class":42},[36,159276,554],{"class":112},[36,159278,2073],{"class":46},[36,159280,5795],{"class":112},[36,159282,922],{"class":42},[36,159284,159285,159287,159289,159291,159294,159296],{"class":38,"line":642},[36,159286,3486],{"class":112},[36,159288,495],{"class":42},[36,159290,554],{"class":112},[36,159292,159293],{"class":46}," !=",[36,159295,5795],{"class":112},[36,159297,922],{"class":42},[19,159299,159300,159301,159303,159304,224],{},"注意：判断相等用 ",[33,159302,6652],{},"，赋值用 ",[33,159305,47],{},[26,159307,159309],{"className":28,"code":159308,"language":30,"meta":31,"style":31},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[33,159310,159311,159323],{"__ignoreMap":31},[36,159312,159313,159315,159317,159320],{"class":38,"line":39},[36,159314,149580],{"class":42},[36,159316,47],{"class":46},[36,159318,159319],{"class":112}," 18",[36,159321,159322],{"class":3943},"       # 赋值\n",[36,159324,159325,159327,159329,159331],{"class":38,"line":53},[36,159326,149580],{"class":42},[36,159328,6652],{"class":46},[36,159330,159319],{"class":112},[36,159332,159333],{"class":3943},"      # 判断是否相等\n",[318,159335,159337],{"id":159336},"_274-逻辑运算符","2.7.4 逻辑运算符",[248,159339,159340,159348],{},[251,159341,159342],{},[254,159343,159344,159346],{},[257,159345,158958],{},[257,159347,29483],{},[265,159349,159350,159359,159368],{},[254,159351,159352,159356],{},[270,159353,159354],{},[33,159355,34066],{},[270,159357,159358],{},"并且",[254,159360,159361,159365],{},[270,159362,159363],{},[33,159364,2016],{},[270,159366,159367],{},"或者",[254,159369,159370,159375],{},[270,159371,159372],{},[33,159373,159374],{},"not",[270,159376,159377],{},"取反",[26,159379,159381],{"className":28,"code":159380,"language":30,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[33,159382,159383,159391,159400,159404,159419,159433],{"__ignoreMap":31},[36,159384,159385,159387,159389],{"class":38,"line":39},[36,159386,149580],{"class":42},[36,159388,47],{"class":46},[36,159390,91618],{"class":112},[36,159392,159393,159396,159398],{"class":38,"line":53},[36,159394,159395],{"class":42},"has_ticket ",[36,159397,47],{"class":46},[36,159399,156633],{"class":112},[36,159401,159402],{"class":38,"line":196},[36,159403,659],{"emptyLinePlaceholder":658},[36,159405,159406,159408,159410,159412,159414,159416],{"class":38,"line":642},[36,159407,3486],{"class":112},[36,159409,158802],{"class":42},[36,159411,412],{"class":46},[36,159413,159319],{"class":112},[36,159415,123463],{"class":46},[36,159417,159418],{"class":42}," has_ticket)\n",[36,159420,159421,159423,159425,159427,159429,159431],{"class":38,"line":655},[36,159422,3486],{"class":112},[36,159424,158802],{"class":42},[36,159426,393],{"class":46},[36,159428,159319],{"class":112},[36,159430,1007],{"class":46},[36,159432,159418],{"class":42},[36,159434,159435,159437,159439,159441],{"class":38,"line":662},[36,159436,3486],{"class":112},[36,159438,495],{"class":42},[36,159440,159374],{"class":46},[36,159442,159418],{"class":42},[14,159444,159446],{"id":159445},"_28-字符串定义","2.8 字符串定义",[19,159448,159449],{},"三种常见写法：",[26,159451,159453],{"className":28,"code":159452,"language":30,"meta":31,"style":31},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[33,159454,159455,159465,159474,159484],{"__ignoreMap":31},[36,159456,159457,159460,159462],{"class":38,"line":39},[36,159458,159459],{"class":42},"name1 ",[36,159461,47],{"class":46},[36,159463,159464],{"class":105}," '小明'\n",[36,159466,159467,159470,159472],{"class":38,"line":53},[36,159468,159469],{"class":42},"name2 ",[36,159471,47],{"class":46},[36,159473,152387],{"class":105},[36,159475,159476,159479,159481],{"class":38,"line":196},[36,159477,159478],{"class":42},"text ",[36,159480,47],{"class":46},[36,159482,159483],{"class":105}," \"\"\"这是多行字符串\n",[36,159485,159486],{"class":38,"line":642},[36,159487,159488],{"class":105},"可以换行\"\"\"\n",[19,159490,159491],{},"字符串中包含引号：",[26,159493,159495],{"className":28,"code":159494,"language":30,"meta":31,"style":31},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[33,159496,159497,159507,159517],{"__ignoreMap":31},[36,159498,159499,159502,159504],{"class":38,"line":39},[36,159500,159501],{"class":42},"msg ",[36,159503,47],{"class":46},[36,159505,159506],{"class":105}," \"他说:'你好'\"\n",[36,159508,159509,159512,159514],{"class":38,"line":53},[36,159510,159511],{"class":42},"msg2 ",[36,159513,47],{"class":46},[36,159515,159516],{"class":105}," '他说:\"你好\"'\n",[36,159518,159519,159522,159524,159527,159530,159533,159535],{"class":38,"line":196},[36,159520,159521],{"class":42},"msg3 ",[36,159523,47],{"class":46},[36,159525,159526],{"class":105}," \"他说:",[36,159528,159529],{"class":112},"\\\"",[36,159531,159532],{"class":105},"你好",[36,159534,159529],{"class":112},[36,159536,28747],{"class":105},[19,159538,159539],{},"常见转义字符：",[248,159541,159542,159551],{},[251,159543,159544],{},[254,159545,159546,159549],{},[257,159547,159548],{},"写法",[257,159550,343],{},[265,159552,159553,159563,159572,159582,159591],{},[254,159554,159555,159560],{},[270,159556,159557],{},[33,159558,159559],{},"\\n",[270,159561,159562],{},"换行",[254,159564,159565,159569],{},[270,159566,159567],{},[33,159568,4969],{},[270,159570,159571],{},"制表符",[254,159573,159574,159579],{},[270,159575,159576],{},[33,159577,159578],{},"\\\\",[270,159580,159581],{},"反斜杠",[254,159583,159584,159588],{},[270,159585,159586],{},[33,159587,159529],{},[270,159589,159590],{},"双引号",[254,159592,159593,159598],{},[270,159594,159595],{},[33,159596,159597],{},"\\'",[270,159599,159600],{},"单引号",[14,159602,159604],{"id":159603},"_29-字符串拼接","2.9 字符串拼接",[26,159606,159608],{"className":28,"code":159607,"language":30,"meta":31,"style":31},"name = \"小明\"\nprint(\"你好，\" + name)\n",[33,159609,159610,159618],{"__ignoreMap":31},[36,159611,159612,159614,159616],{"class":38,"line":39},[36,159613,149570],{"class":42},[36,159615,47],{"class":46},[36,159617,152387],{"class":105},[36,159619,159620,159622,159624,159627,159629],{"class":38,"line":53},[36,159621,3486],{"class":112},[36,159623,495],{"class":42},[36,159625,159626],{"class":105},"\"你好，\"",[36,159628,49124],{"class":46},[36,159630,159631],{"class":42}," name)\n",[19,159633,159634],{},"字符串只能和字符串拼接：",[26,159636,159638],{"className":28,"code":159637,"language":30,"meta":31,"style":31},"age = 18\nprint(\"年龄:\" + str(age))\n",[33,159639,159640,159648],{"__ignoreMap":31},[36,159641,159642,159644,159646],{"class":38,"line":39},[36,159643,149580],{"class":42},[36,159645,47],{"class":46},[36,159647,149585],{"class":112},[36,159649,159650,159652,159654,159656,159658,159660],{"class":38,"line":53},[36,159651,3486],{"class":112},[36,159653,495],{"class":42},[36,159655,149551],{"class":105},[36,159657,49124],{"class":46},[36,159659,77473],{"class":112},[36,159661,159662],{"class":42},"(age))\n",[19,159664,159665],{},"更推荐使用格式化字符串。",[14,159667,159669],{"id":159668},"_210-字符串格式化","2.10 字符串格式化",[318,159671,159673],{"id":159672},"_2101-百分号格式化","2.10.1 百分号格式化",[26,159675,159677],{"className":28,"code":159676,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[33,159678,159679,159687,159695,159704,159708],{"__ignoreMap":31},[36,159680,159681,159683,159685],{"class":38,"line":39},[36,159682,149570],{"class":42},[36,159684,47],{"class":46},[36,159686,152387],{"class":105},[36,159688,159689,159691,159693],{"class":38,"line":53},[36,159690,149580],{"class":42},[36,159692,47],{"class":46},[36,159694,149585],{"class":112},[36,159696,159697,159699,159701],{"class":38,"line":196},[36,159698,158392],{"class":42},[36,159700,47],{"class":46},[36,159702,159703],{"class":112}," 95.5\n",[36,159705,159706],{"class":38,"line":642},[36,159707,659],{"emptyLinePlaceholder":658},[36,159709,159710,159712,159714,159717,159720,159723,159726,159729,159732,159734,159736],{"class":38,"line":655},[36,159711,3486],{"class":112},[36,159713,495],{"class":42},[36,159715,159716],{"class":105},"\"姓名:",[36,159718,159719],{"class":112},"%s",[36,159721,159722],{"class":105}," 年龄:",[36,159724,159725],{"class":112},"%d",[36,159727,159728],{"class":105}," 分数:",[36,159730,159731],{"class":112},"%.1f",[36,159733,4126],{"class":105},[36,159735,159115],{"class":46},[36,159737,159738],{"class":42}," (name, age, score))\n",[19,159740,159741],{},"常用占位符：",[248,159743,159744,159753],{},[251,159745,159746],{},[254,159747,159748,159751],{},[257,159749,159750],{},"占位符",[257,159752,29483],{},[265,159754,159755,159763,159771],{},[254,159756,159757,159761],{},[270,159758,159759],{},[33,159760,159719],{},[270,159762,158258],{},[254,159764,159765,159769],{},[270,159766,159767],{},[33,159768,159725],{},[270,159770,158236],{},[254,159772,159773,159778],{},[270,159774,159775],{},[33,159776,159777],{},"%f",[270,159779,158247],{},[19,159781,159782],{},"精度控制：",[26,159784,159786],{"className":28,"code":159785,"language":30,"meta":31,"style":31},"price = 12.3456\nprint(\"%.2f\" % price)\n",[33,159787,159788,159797],{"__ignoreMap":31},[36,159789,159790,159792,159794],{"class":38,"line":39},[36,159791,149715],{"class":42},[36,159793,47],{"class":46},[36,159795,159796],{"class":112}," 12.3456\n",[36,159798,159799,159801,159803,159805,159808,159810,159812],{"class":38,"line":53},[36,159800,3486],{"class":112},[36,159802,495],{"class":42},[36,159804,4126],{"class":105},[36,159806,159807],{"class":112},"%.2f",[36,159809,4126],{"class":105},[36,159811,159115],{"class":46},[36,159813,159814],{"class":42}," price)\n",[318,159816,159818],{"id":159817},"_2102-format方法","2.10.2 format方法",[26,159820,159822],{"className":28,"code":159821,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[33,159823,159824,159832,159840,159844,159863,159883],{"__ignoreMap":31},[36,159825,159826,159828,159830],{"class":38,"line":39},[36,159827,149570],{"class":42},[36,159829,47],{"class":46},[36,159831,152387],{"class":105},[36,159833,159834,159836,159838],{"class":38,"line":53},[36,159835,149580],{"class":42},[36,159837,47],{"class":46},[36,159839,149585],{"class":112},[36,159841,159842],{"class":38,"line":196},[36,159843,659],{"emptyLinePlaceholder":658},[36,159845,159846,159848,159850,159852,159854,159856,159858,159860],{"class":38,"line":642},[36,159847,3486],{"class":112},[36,159849,495],{"class":42},[36,159851,159716],{"class":105},[36,159853,3649],{"class":112},[36,159855,159722],{"class":105},[36,159857,3649],{"class":112},[36,159859,4126],{"class":105},[36,159861,159862],{"class":42},".format(name, age))\n",[36,159864,159865,159867,159869,159871,159874,159876,159879,159881],{"class":38,"line":655},[36,159866,3486],{"class":112},[36,159868,495],{"class":42},[36,159870,159716],{"class":105},[36,159872,159873],{"class":112},"{0}",[36,159875,159722],{"class":105},[36,159877,159878],{"class":112},"{1}",[36,159880,4126],{"class":105},[36,159882,159862],{"class":42},[36,159884,159885,159887,159889,159891,159894,159896,159899,159901,159904,159906,159908,159911,159913,159915],{"class":38,"line":662},[36,159886,3486],{"class":112},[36,159888,495],{"class":42},[36,159890,159716],{"class":105},[36,159892,159893],{"class":112},"{name}",[36,159895,159722],{"class":105},[36,159897,159898],{"class":112},"{age}",[36,159900,4126],{"class":105},[36,159902,159903],{"class":42},".format(",[36,159905,83364],{"class":468},[36,159907,47],{"class":46},[36,159909,159910],{"class":42},"name, ",[36,159912,73775],{"class":468},[36,159914,47],{"class":46},[36,159916,159917],{"class":42},"age))\n",[318,159919,159921],{"id":159920},"_2103-f-string","2.10.3 f-string",[19,159923,159924],{},"推荐写法：",[26,159926,159928],{"className":28,"code":159927,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[33,159929,159930,159938,159946,159954,159958],{"__ignoreMap":31},[36,159931,159932,159934,159936],{"class":38,"line":39},[36,159933,149570],{"class":42},[36,159935,47],{"class":46},[36,159937,152387],{"class":105},[36,159939,159940,159942,159944],{"class":38,"line":53},[36,159941,149580],{"class":42},[36,159943,47],{"class":46},[36,159945,149585],{"class":112},[36,159947,159948,159950,159952],{"class":38,"line":196},[36,159949,158392],{"class":42},[36,159951,47],{"class":46},[36,159953,159703],{"class":112},[36,159955,159956],{"class":38,"line":642},[36,159957,659],{"emptyLinePlaceholder":658},[36,159959,159960,159962,159964,159966,159968,159970,159972,159974,159976,159978,159980,159982,159984,159986,159989,159992,159994,159996],{"class":38,"line":655},[36,159961,3486],{"class":112},[36,159963,495],{"class":42},[36,159965,3937],{"class":46},[36,159967,159716],{"class":105},[36,159969,4766],{"class":112},[36,159971,83364],{"class":42},[36,159973,4815],{"class":112},[36,159975,159722],{"class":105},[36,159977,4766],{"class":112},[36,159979,73775],{"class":42},[36,159981,4815],{"class":112},[36,159983,159728],{"class":105},[36,159985,4766],{"class":112},[36,159987,159988],{"class":42},"score",[36,159990,159991],{"class":46},":.1f",[36,159993,4815],{"class":112},[36,159995,4126],{"class":105},[36,159997,922],{"class":42},[19,159999,160000],{},"表达式也可以放进去：",[26,160002,160004],{"className":28,"code":160003,"language":30,"meta":31,"style":31},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[33,160005,160006,160014,160022],{"__ignoreMap":31},[36,160007,160008,160010,160012],{"class":38,"line":39},[36,160009,149715],{"class":42},[36,160011,47],{"class":46},[36,160013,149720],{"class":112},[36,160015,160016,160018,160020],{"class":38,"line":53},[36,160017,149725],{"class":42},[36,160019,47],{"class":46},[36,160021,586],{"class":112},[36,160023,160024,160026,160028,160030,160033,160035,160037,160039,160042,160044,160047],{"class":38,"line":196},[36,160025,3486],{"class":112},[36,160027,495],{"class":42},[36,160029,3937],{"class":46},[36,160031,160032],{"class":105},"\"总价:",[36,160034,4766],{"class":112},[36,160036,149715],{"class":42},[36,160038,1372],{"class":46},[36,160040,160041],{"class":42}," count",[36,160043,4815],{"class":112},[36,160045,160046],{"class":105},"元\"",[36,160048,922],{"class":42},[14,160050,160052],{"id":160051},"_211-input输入","2.11 input输入",[19,160054,160055,160058],{},[33,160056,160057],{},"input()"," 会暂停程序，等待用户输入。",[26,160060,160062],{"className":28,"code":160061,"language":30,"meta":31,"style":31},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[33,160063,160064,160078],{"__ignoreMap":31},[36,160065,160066,160068,160070,160072,160074,160076],{"class":38,"line":39},[36,160067,149570],{"class":42},[36,160069,47],{"class":46},[36,160071,64160],{"class":112},[36,160073,495],{"class":42},[36,160075,155413],{"class":105},[36,160077,922],{"class":42},[36,160079,160080,160082,160084,160086,160089,160091,160093,160095,160097],{"class":38,"line":53},[36,160081,3486],{"class":112},[36,160083,495],{"class":42},[36,160085,3937],{"class":46},[36,160087,160088],{"class":105},"\"你好，",[36,160090,4766],{"class":112},[36,160092,83364],{"class":42},[36,160094,4815],{"class":112},[36,160096,4126],{"class":105},[36,160098,922],{"class":42},[19,160100,160101],{},"输入整数：",[26,160103,160105],{"className":28,"code":160104,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[33,160106,160107,160125],{"__ignoreMap":31},[36,160108,160109,160111,160113,160115,160117,160119,160121,160123],{"class":38,"line":39},[36,160110,149580],{"class":42},[36,160112,47],{"class":46},[36,160114,6094],{"class":112},[36,160116,495],{"class":42},[36,160118,57378],{"class":112},[36,160120,495],{"class":42},[36,160122,155428],{"class":105},[36,160124,2005],{"class":42},[36,160126,160127,160129,160131,160133,160136,160138,160140,160142,160145,160147],{"class":38,"line":53},[36,160128,3486],{"class":112},[36,160130,495],{"class":42},[36,160132,3937],{"class":46},[36,160134,160135],{"class":105},"\"明年你",[36,160137,4766],{"class":112},[36,160139,149580],{"class":42},[36,160141,4354],{"class":46},[36,160143,160144],{"class":112}," 1}",[36,160146,152438],{"class":105},[36,160148,922],{"class":42},[19,160150,160151],{},"输入小数：",[26,160153,160155],{"className":28,"code":160154,"language":30,"meta":31,"style":31},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[33,160156,160157,160176],{"__ignoreMap":31},[36,160158,160159,160161,160163,160165,160167,160169,160171,160174],{"class":38,"line":39},[36,160160,158365],{"class":42},[36,160162,47],{"class":46},[36,160164,1341],{"class":112},[36,160166,495],{"class":42},[36,160168,57378],{"class":112},[36,160170,495],{"class":42},[36,160172,160173],{"class":105},"\"请输入身高:\"",[36,160175,2005],{"class":42},[36,160177,160178,160180,160182,160184,160187,160189,160191,160194,160196,160199],{"class":38,"line":53},[36,160179,3486],{"class":112},[36,160181,495],{"class":42},[36,160183,3937],{"class":46},[36,160185,160186],{"class":105},"\"身高:",[36,160188,4766],{"class":112},[36,160190,28597],{"class":42},[36,160192,160193],{"class":46},":.2f",[36,160195,4815],{"class":112},[36,160197,160198],{"class":105},"米\"",[36,160200,922],{"class":42},[14,160202,160204],{"id":160203},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,160206,126326],{},[211,160208,160209,160212,160215,160218],{},[214,160210,160211],{},"输入商品单价。",[214,160213,160214],{},"输入购买数量。",[214,160216,160217],{},"输入折扣，例如 0.8 表示八折。",[214,160219,160220],{},"输出最终金额，保留两位小数。",[19,160222,13696],{},[26,160224,160226],{"className":28,"code":160225,"language":30,"meta":31,"style":31},"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",[33,160227,160228,160247,160266,160286,160290,160310,160314,160337,160358,160380],{"__ignoreMap":31},[36,160229,160230,160232,160234,160236,160238,160240,160242,160245],{"class":38,"line":39},[36,160231,149715],{"class":42},[36,160233,47],{"class":46},[36,160235,1341],{"class":112},[36,160237,495],{"class":42},[36,160239,57378],{"class":112},[36,160241,495],{"class":42},[36,160243,160244],{"class":105},"\"请输入商品单价:\"",[36,160246,2005],{"class":42},[36,160248,160249,160251,160253,160255,160257,160259,160261,160264],{"class":38,"line":53},[36,160250,149725],{"class":42},[36,160252,47],{"class":46},[36,160254,6094],{"class":112},[36,160256,495],{"class":42},[36,160258,57378],{"class":112},[36,160260,495],{"class":42},[36,160262,160263],{"class":105},"\"请输入购买数量:\"",[36,160265,2005],{"class":42},[36,160267,160268,160271,160273,160275,160277,160279,160281,160284],{"class":38,"line":196},[36,160269,160270],{"class":42},"discount ",[36,160272,47],{"class":46},[36,160274,1341],{"class":112},[36,160276,495],{"class":42},[36,160278,57378],{"class":112},[36,160280,495],{"class":42},[36,160282,160283],{"class":105},"\"请输入折扣:\"",[36,160285,2005],{"class":42},[36,160287,160288],{"class":38,"line":642},[36,160289,659],{"emptyLinePlaceholder":658},[36,160291,160292,160295,160297,160300,160302,160305,160307],{"class":38,"line":655},[36,160293,160294],{"class":42},"total ",[36,160296,47],{"class":46},[36,160298,160299],{"class":42}," price ",[36,160301,1372],{"class":46},[36,160303,160304],{"class":42}," count ",[36,160306,1372],{"class":46},[36,160308,160309],{"class":42}," discount\n",[36,160311,160312],{"class":38,"line":662},[36,160313,659],{"emptyLinePlaceholder":658},[36,160315,160316,160318,160320,160322,160325,160327,160329,160331,160333,160335],{"class":38,"line":667},[36,160317,3486],{"class":112},[36,160319,495],{"class":42},[36,160321,3937],{"class":46},[36,160323,160324],{"class":105},"\"商品单价:",[36,160326,4766],{"class":112},[36,160328,83369],{"class":42},[36,160330,160193],{"class":46},[36,160332,4815],{"class":112},[36,160334,4126],{"class":105},[36,160336,922],{"class":42},[36,160338,160339,160341,160343,160345,160348,160350,160352,160354,160356],{"class":38,"line":679},[36,160340,3486],{"class":112},[36,160342,495],{"class":42},[36,160344,3937],{"class":46},[36,160346,160347],{"class":105},"\"购买数量:",[36,160349,4766],{"class":112},[36,160351,87988],{"class":42},[36,160353,4815],{"class":112},[36,160355,4126],{"class":105},[36,160357,922],{"class":42},[36,160359,160360,160362,160364,160366,160369,160371,160374,160376,160378],{"class":38,"line":685},[36,160361,3486],{"class":112},[36,160363,495],{"class":42},[36,160365,3937],{"class":46},[36,160367,160368],{"class":105},"\"折扣:",[36,160370,4766],{"class":112},[36,160372,160373],{"class":42},"discount",[36,160375,4815],{"class":112},[36,160377,4126],{"class":105},[36,160379,922],{"class":42},[36,160381,160382,160384,160386,160388,160391,160393,160396,160398,160400,160402],{"class":38,"line":691},[36,160383,3486],{"class":112},[36,160385,495],{"class":42},[36,160387,3937],{"class":46},[36,160389,160390],{"class":105},"\"应付金额:",[36,160392,4766],{"class":112},[36,160394,160395],{"class":42},"total",[36,160397,160193],{"class":46},[36,160399,4815],{"class":112},[36,160401,160046],{"class":105},[36,160403,922],{"class":42},[14,160405,160407],{"id":160406},"_213-易错点","2.13 易错点",[211,160409,160410,160415,160421,160429,160432],{},[214,160411,160412,160414],{},[33,160413,160057],{}," 的结果是字符串，做运算前要转换。",[214,160416,160417,160418,224],{},"字符串拼接时，数字要先 ",[33,160419,160420],{},"str()",[214,160422,160423,160425,160426,160428],{},[33,160424,47],{}," 是赋值，",[33,160427,6652],{}," 是比较。",[214,160430,160431],{},"Python 没有自增自减运算符。",[214,160433,160434],{},"浮点数计算可能有精度误差：",[26,160436,160438],{"className":28,"code":160437,"language":30,"meta":31,"style":31},"print(0.1 + 0.2)\n",[33,160439,160440],{"__ignoreMap":31},[36,160441,160442,160444,160446,160448,160450,160453],{"class":38,"line":39},[36,160443,3486],{"class":112},[36,160445,495],{"class":42},[36,160447,1463],{"class":112},[36,160449,49124],{"class":46},[36,160451,160452],{"class":112}," 0.2",[36,160454,922],{"class":42},[19,160456,160457,160458,160461],{},"金额计算如果要求严格，可以后续学习 ",[33,160459,160460],{},"decimal"," 模块。",[14,160463,160465],{"id":160464},"_214-本章练习","2.14 本章练习",[211,160467,160468,160471,160474,160477,160480],{},[214,160469,160470],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[214,160472,160473],{},"输入圆的半径，计算面积，保留两位小数。",[214,160475,160476],{},"输入工资和奖金，计算总收入。",[214,160478,160479],{},"输入摄氏温度，转换为华氏温度。",[214,160481,160482],{},"写一个 BMI 计算程序：",[26,160484,160487],{"className":160485,"code":160486,"language":80,"meta":31},[78],"BMI = 体重kg \u002F 身高m ** 2\n",[33,160488,160486],{"__ignoreMap":31},[3785,160490,160491],{},"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":31,"searchDepth":53,"depth":53,"links":160493},[160494,160495,160496,160497,160498,160499,160500,160506,160507,160508,160513,160514,160515,160516],{"id":158055,"depth":53,"text":158056},{"id":158164,"depth":53,"text":158165},{"id":158335,"depth":53,"text":158336},{"id":158412,"depth":53,"text":158413},{"id":54288,"depth":53,"text":54289},{"id":158718,"depth":53,"text":158719},{"id":158944,"depth":53,"text":158945,"children":160501},[160502,160503,160504,160505],{"id":158948,"depth":196,"text":158949},{"id":159142,"depth":196,"text":159143},{"id":159230,"depth":196,"text":159231},{"id":159336,"depth":196,"text":159337},{"id":159445,"depth":53,"text":159446},{"id":159603,"depth":53,"text":159604},{"id":159668,"depth":53,"text":159669,"children":160509},[160510,160511,160512],{"id":159672,"depth":196,"text":159673},{"id":159817,"depth":196,"text":159818},{"id":159920,"depth":196,"text":159921},{"id":160051,"depth":53,"text":160052},{"id":160203,"depth":53,"text":160204},{"id":160406,"depth":53,"text":160407},{"id":160464,"depth":53,"text":160465},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":158047,"description":26998},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":160523,"title":160524,"body":160525,"description":26998,"extension":3817,"meta":162161,"navigation":658,"path":162162,"seo":162163,"stem":162164,"__hash__":162165},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":160526,"toc":162142},[160527,160530,160534,160537,160552,160555,160583,160587,160637,160639,160655,160658,160684,160687,160691,160758,160761,160777,160781,160784,160902,160905,160912,160961,160967,160971,160974,161087,161090,161094,161098,161101,161151,161155,161158,161208,161212,161215,161253,161257,161260,161306,161309,161344,161348,161353,161356,161402,161404,161471,161475,161481,161592,161601,161605,161607,161618,161620,161786,161790,161792,161806,161808,162022,162026,162045,162062,162065,162111,162115,162139],[10,160528,160524],{"id":160529},"_3-判断语句",[14,160531,160533],{"id":160532},"_31-布尔值","3.1 布尔值",[19,160535,160536],{},"判断语句依赖布尔值：",[26,160538,160540],{"className":28,"code":160539,"language":30,"meta":31,"style":31},"True\nFalse\n",[33,160541,160542,160547],{"__ignoreMap":31},[36,160543,160544],{"class":38,"line":39},[36,160545,160546],{"class":112},"True\n",[36,160548,160549],{"class":38,"line":53},[36,160550,160551],{"class":112},"False\n",[19,160553,160554],{},"比较表达式会产生布尔值：",[26,160556,160558],{"className":28,"code":160557,"language":30,"meta":31,"style":31},"age = 18\nprint(age >= 18)  # True\n",[33,160559,160560,160568],{"__ignoreMap":31},[36,160561,160562,160564,160566],{"class":38,"line":39},[36,160563,149580],{"class":42},[36,160565,47],{"class":46},[36,160567,149585],{"class":112},[36,160569,160570,160572,160574,160576,160578,160580],{"class":38,"line":53},[36,160571,3486],{"class":112},[36,160573,158802],{"class":42},[36,160575,412],{"class":46},[36,160577,159319],{"class":112},[36,160579,49366],{"class":42},[36,160581,160582],{"class":3943},"# True\n",[14,160584,160586],{"id":160585},"_32-if基础语法","3.2 if基础语法",[26,160588,160590],{"className":28,"code":160589,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[33,160591,160592,160610,160614,160626],{"__ignoreMap":31},[36,160593,160594,160596,160598,160600,160602,160604,160606,160608],{"class":38,"line":39},[36,160595,149580],{"class":42},[36,160597,47],{"class":46},[36,160599,6094],{"class":112},[36,160601,495],{"class":42},[36,160603,57378],{"class":112},[36,160605,495],{"class":42},[36,160607,155428],{"class":105},[36,160609,2005],{"class":42},[36,160611,160612],{"class":38,"line":53},[36,160613,659],{"emptyLinePlaceholder":658},[36,160615,160616,160618,160620,160622,160624],{"class":38,"line":196},[36,160617,2067],{"class":46},[36,160619,19363],{"class":42},[36,160621,412],{"class":46},[36,160623,159319],{"class":112},[36,160625,888],{"class":42},[36,160627,160628,160630,160632,160635],{"class":38,"line":642},[36,160629,1867],{"class":112},[36,160631,495],{"class":42},[36,160633,160634],{"class":105},"\"可以进入网吧\"",[36,160636,922],{"class":42},[19,160638,12706],{},[211,160640,160641,160646,160649,160652],{},[214,160642,160643,160645],{},[33,160644,2067],{}," 后面是条件表达式。",[214,160647,160648],{},"条件后面必须写冒号。",[214,160650,160651],{},"条件成立时执行缩进代码块。",[214,160653,160654],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,160656,160657],{},"错误示例：",[26,160659,160661],{"className":28,"code":160660,"language":30,"meta":31,"style":31},"if age >= 18\n    print(\"可以进入\")\n",[33,160662,160663,160673],{"__ignoreMap":31},[36,160664,160665,160667,160669,160671],{"class":38,"line":39},[36,160666,2067],{"class":46},[36,160668,19363],{"class":42},[36,160670,412],{"class":46},[36,160672,149585],{"class":112},[36,160674,160675,160677,160679,160682],{"class":38,"line":53},[36,160676,1867],{"class":112},[36,160678,495],{"class":42},[36,160680,160681],{"class":105},"\"可以进入\"",[36,160683,922],{"class":42},[19,160685,160686],{},"缺少冒号。",[14,160688,160690],{"id":160689},"_33-if-else","3.3 if else",[26,160692,160694],{"className":28,"code":160693,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[33,160695,160696,160714,160718,160730,160741,160747],{"__ignoreMap":31},[36,160697,160698,160700,160702,160704,160706,160708,160710,160712],{"class":38,"line":39},[36,160699,149580],{"class":42},[36,160701,47],{"class":46},[36,160703,6094],{"class":112},[36,160705,495],{"class":42},[36,160707,57378],{"class":112},[36,160709,495],{"class":42},[36,160711,155428],{"class":105},[36,160713,2005],{"class":42},[36,160715,160716],{"class":38,"line":53},[36,160717,659],{"emptyLinePlaceholder":658},[36,160719,160720,160722,160724,160726,160728],{"class":38,"line":196},[36,160721,2067],{"class":46},[36,160723,19363],{"class":42},[36,160725,412],{"class":46},[36,160727,159319],{"class":112},[36,160729,888],{"class":42},[36,160731,160732,160734,160736,160739],{"class":38,"line":642},[36,160733,1867],{"class":112},[36,160735,495],{"class":42},[36,160737,160738],{"class":105},"\"成年人\"",[36,160740,922],{"class":42},[36,160742,160743,160745],{"class":38,"line":655},[36,160744,5425],{"class":46},[36,160746,888],{"class":42},[36,160748,160749,160751,160753,160756],{"class":38,"line":662},[36,160750,1867],{"class":112},[36,160752,495],{"class":42},[36,160754,160755],{"class":105},"\"未成年人\"",[36,160757,922],{"class":42},[19,160759,160760],{},"执行逻辑：",[211,160762,160763,160769,160774],{},[214,160764,160765,160766,160768],{},"条件成立，执行 ",[33,160767,2067],{}," 代码块。",[214,160770,160771,160772,160768],{},"条件不成立，执行 ",[33,160773,5425],{},[214,160775,160776],{},"两个代码块只会执行其中一个。",[14,160778,160780],{"id":160779},"_34-if-elif-else","3.4 if elif else",[19,160782,160783],{},"多条件判断：",[26,160785,160787],{"className":28,"code":160786,"language":30,"meta":31,"style":31},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[33,160788,160789,160807,160811,160825,160836,160850,160861,160874,160885,160891],{"__ignoreMap":31},[36,160790,160791,160793,160795,160797,160799,160801,160803,160805],{"class":38,"line":39},[36,160792,158392],{"class":42},[36,160794,47],{"class":46},[36,160796,6094],{"class":112},[36,160798,495],{"class":42},[36,160800,57378],{"class":112},[36,160802,495],{"class":42},[36,160804,155443],{"class":105},[36,160806,2005],{"class":42},[36,160808,160809],{"class":38,"line":53},[36,160810,659],{"emptyLinePlaceholder":658},[36,160812,160813,160815,160818,160820,160823],{"class":38,"line":196},[36,160814,2067],{"class":46},[36,160816,160817],{"class":42}," score ",[36,160819,412],{"class":46},[36,160821,160822],{"class":112}," 90",[36,160824,888],{"class":42},[36,160826,160827,160829,160831,160834],{"class":38,"line":642},[36,160828,1867],{"class":112},[36,160830,495],{"class":42},[36,160832,160833],{"class":105},"\"优秀\"",[36,160835,922],{"class":42},[36,160837,160838,160841,160843,160845,160848],{"class":38,"line":655},[36,160839,160840],{"class":46},"elif",[36,160842,160817],{"class":42},[36,160844,412],{"class":46},[36,160846,160847],{"class":112}," 80",[36,160849,888],{"class":42},[36,160851,160852,160854,160856,160859],{"class":38,"line":662},[36,160853,1867],{"class":112},[36,160855,495],{"class":42},[36,160857,160858],{"class":105},"\"良好\"",[36,160860,922],{"class":42},[36,160862,160863,160865,160867,160869,160872],{"class":38,"line":667},[36,160864,160840],{"class":46},[36,160866,160817],{"class":42},[36,160868,412],{"class":46},[36,160870,160871],{"class":112}," 60",[36,160873,888],{"class":42},[36,160875,160876,160878,160880,160883],{"class":38,"line":679},[36,160877,1867],{"class":112},[36,160879,495],{"class":42},[36,160881,160882],{"class":105},"\"及格\"",[36,160884,922],{"class":42},[36,160886,160887,160889],{"class":38,"line":685},[36,160888,5425],{"class":46},[36,160890,888],{"class":42},[36,160892,160893,160895,160897,160900],{"class":38,"line":691},[36,160894,1867],{"class":112},[36,160896,495],{"class":42},[36,160898,160899],{"class":105},"\"不及格\"",[36,160901,922],{"class":42},[19,160903,160904],{},"注意判断顺序很重要。",[19,160906,160907,160908,160911],{},"如果把 ",[33,160909,160910],{},"score >= 60"," 放在最前面：",[26,160913,160915],{"className":28,"code":160914,"language":30,"meta":31,"style":31},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[33,160916,160917,160929,160939,160951],{"__ignoreMap":31},[36,160918,160919,160921,160923,160925,160927],{"class":38,"line":39},[36,160920,2067],{"class":46},[36,160922,160817],{"class":42},[36,160924,412],{"class":46},[36,160926,160871],{"class":112},[36,160928,888],{"class":42},[36,160930,160931,160933,160935,160937],{"class":38,"line":53},[36,160932,1867],{"class":112},[36,160934,495],{"class":42},[36,160936,160882],{"class":105},[36,160938,922],{"class":42},[36,160940,160941,160943,160945,160947,160949],{"class":38,"line":196},[36,160942,160840],{"class":46},[36,160944,160817],{"class":42},[36,160946,412],{"class":46},[36,160948,160822],{"class":112},[36,160950,888],{"class":42},[36,160952,160953,160955,160957,160959],{"class":38,"line":642},[36,160954,1867],{"class":112},[36,160956,495],{"class":42},[36,160958,160833],{"class":105},[36,160960,922],{"class":42},[19,160962,160963,160964,160966],{},"成绩 95 会先满足 ",[33,160965,160910],{},"，后面的优秀分支就不会执行。",[14,160968,160970],{"id":160969},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,160972,160973],{},"嵌套判断就是在一个判断内部再写判断。",[26,160975,160977],{"className":28,"code":160976,"language":30,"meta":31,"style":31},"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",[33,160978,160979,160997,161012,161016,161028,161042,161052,161059,161070,161076],{"__ignoreMap":31},[36,160980,160981,160983,160985,160987,160989,160991,160993,160995],{"class":38,"line":39},[36,160982,149580],{"class":42},[36,160984,47],{"class":46},[36,160986,6094],{"class":112},[36,160988,495],{"class":42},[36,160990,57378],{"class":112},[36,160992,495],{"class":42},[36,160994,155428],{"class":105},[36,160996,2005],{"class":42},[36,160998,160999,161001,161003,161005,161007,161010],{"class":38,"line":53},[36,161000,159395],{"class":42},[36,161002,47],{"class":46},[36,161004,64160],{"class":112},[36,161006,495],{"class":42},[36,161008,161009],{"class":105},"\"是否有票(y\u002Fn):\"",[36,161011,922],{"class":42},[36,161013,161014],{"class":38,"line":196},[36,161015,659],{"emptyLinePlaceholder":658},[36,161017,161018,161020,161022,161024,161026],{"class":38,"line":642},[36,161019,2067],{"class":46},[36,161021,19363],{"class":42},[36,161023,412],{"class":46},[36,161025,159319],{"class":112},[36,161027,888],{"class":42},[36,161029,161030,161032,161035,161037,161040],{"class":38,"line":655},[36,161031,3752],{"class":46},[36,161033,161034],{"class":42}," has_ticket ",[36,161036,6652],{"class":46},[36,161038,161039],{"class":105}," \"y\"",[36,161041,888],{"class":42},[36,161043,161044,161046,161048,161050],{"class":38,"line":662},[36,161045,1960],{"class":112},[36,161047,495],{"class":42},[36,161049,160681],{"class":105},[36,161051,922],{"class":42},[36,161053,161054,161057],{"class":38,"line":667},[36,161055,161056],{"class":46},"    else",[36,161058,888],{"class":42},[36,161060,161061,161063,161065,161068],{"class":38,"line":679},[36,161062,1960],{"class":112},[36,161064,495],{"class":42},[36,161066,161067],{"class":105},"\"请先买票\"",[36,161069,922],{"class":42},[36,161071,161072,161074],{"class":38,"line":685},[36,161073,5425],{"class":46},[36,161075,888],{"class":42},[36,161077,161078,161080,161082,161085],{"class":38,"line":691},[36,161079,1867],{"class":112},[36,161081,495],{"class":42},[36,161083,161084],{"class":105},"\"未成年人禁止进入\"",[36,161086,922],{"class":42},[19,161088,161089],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,161091,161093],{"id":161092},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[318,161095,161097],{"id":161096},"_361-and","3.6.1 and",[19,161099,161100],{},"两个条件都成立才成立。",[26,161102,161104],{"className":28,"code":161103,"language":30,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[33,161105,161106,161114,161122,161126,161141],{"__ignoreMap":31},[36,161107,161108,161110,161112],{"class":38,"line":39},[36,161109,149580],{"class":42},[36,161111,47],{"class":46},[36,161113,91618],{"class":112},[36,161115,161116,161118,161120],{"class":38,"line":53},[36,161117,159395],{"class":42},[36,161119,47],{"class":46},[36,161121,156633],{"class":112},[36,161123,161124],{"class":38,"line":196},[36,161125,659],{"emptyLinePlaceholder":658},[36,161127,161128,161130,161132,161134,161136,161138],{"class":38,"line":642},[36,161129,2067],{"class":46},[36,161131,19363],{"class":42},[36,161133,412],{"class":46},[36,161135,159319],{"class":112},[36,161137,123463],{"class":46},[36,161139,161140],{"class":42}," has_ticket:\n",[36,161142,161143,161145,161147,161149],{"class":38,"line":655},[36,161144,1867],{"class":112},[36,161146,495],{"class":42},[36,161148,160681],{"class":105},[36,161150,922],{"class":42},[318,161152,161154],{"id":161153},"_362-or","3.6.2 or",[19,161156,161157],{},"只要一个条件成立就成立。",[26,161159,161161],{"className":28,"code":161160,"language":30,"meta":31,"style":31},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[33,161162,161163,161172,161181,161185,161197],{"__ignoreMap":31},[36,161164,161165,161168,161170],{"class":38,"line":39},[36,161166,161167],{"class":42},"is_vip ",[36,161169,47],{"class":46},[36,161171,128841],{"class":112},[36,161173,161174,161177,161179],{"class":38,"line":53},[36,161175,161176],{"class":42},"coupon ",[36,161178,47],{"class":46},[36,161180,156633],{"class":112},[36,161182,161183],{"class":38,"line":196},[36,161184,659],{"emptyLinePlaceholder":658},[36,161186,161187,161189,161192,161194],{"class":38,"line":642},[36,161188,2067],{"class":46},[36,161190,161191],{"class":42}," is_vip ",[36,161193,2016],{"class":46},[36,161195,161196],{"class":42}," coupon:\n",[36,161198,161199,161201,161203,161206],{"class":38,"line":655},[36,161200,1867],{"class":112},[36,161202,495],{"class":42},[36,161204,161205],{"class":105},"\"可以享受优惠\"",[36,161207,922],{"class":42},[318,161209,161211],{"id":161210},"_363-not","3.6.3 not",[19,161213,161214],{},"取反。",[26,161216,161218],{"className":28,"code":161217,"language":30,"meta":31,"style":31},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[33,161219,161220,161229,161233,161242],{"__ignoreMap":31},[36,161221,161222,161225,161227],{"class":38,"line":39},[36,161223,161224],{"class":42},"is_closed ",[36,161226,47],{"class":46},[36,161228,128841],{"class":112},[36,161230,161231],{"class":38,"line":53},[36,161232,659],{"emptyLinePlaceholder":658},[36,161234,161235,161237,161239],{"class":38,"line":196},[36,161236,2067],{"class":46},[36,161238,42489],{"class":46},[36,161240,161241],{"class":42}," is_closed:\n",[36,161243,161244,161246,161248,161251],{"class":38,"line":642},[36,161245,1867],{"class":112},[36,161247,495],{"class":42},[36,161249,161250],{"class":105},"\"店铺营业中\"",[36,161252,922],{"class":42},[14,161254,161256],{"id":161255},"_37-链式比较","3.7 链式比较",[19,161258,161259],{},"Python 支持链式比较：",[26,161261,161263],{"className":28,"code":161262,"language":30,"meta":31,"style":31},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[33,161264,161265,161274,161278,161295],{"__ignoreMap":31},[36,161266,161267,161269,161271],{"class":38,"line":39},[36,161268,158392],{"class":42},[36,161270,47],{"class":46},[36,161272,161273],{"class":112}," 85\n",[36,161275,161276],{"class":38,"line":53},[36,161277,659],{"emptyLinePlaceholder":658},[36,161279,161280,161282,161284,161287,161289,161291,161293],{"class":38,"line":196},[36,161281,2067],{"class":46},[36,161283,1004],{"class":112},[36,161285,161286],{"class":46}," \u003C=",[36,161288,160817],{"class":42},[36,161290,5323],{"class":46},[36,161292,9447],{"class":112},[36,161294,888],{"class":42},[36,161296,161297,161299,161301,161304],{"class":38,"line":642},[36,161298,1867],{"class":112},[36,161300,495],{"class":42},[36,161302,161303],{"class":105},"\"成绩合法\"",[36,161305,922],{"class":42},[19,161307,161308],{},"等价于：",[26,161310,161312],{"className":28,"code":161311,"language":30,"meta":31,"style":31},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[33,161313,161314,161334],{"__ignoreMap":31},[36,161315,161316,161318,161320,161322,161324,161326,161328,161330,161332],{"class":38,"line":39},[36,161317,2067],{"class":46},[36,161319,160817],{"class":42},[36,161321,412],{"class":46},[36,161323,1004],{"class":112},[36,161325,123463],{"class":46},[36,161327,160817],{"class":42},[36,161329,5323],{"class":46},[36,161331,9447],{"class":112},[36,161333,888],{"class":42},[36,161335,161336,161338,161340,161342],{"class":38,"line":53},[36,161337,1867],{"class":112},[36,161339,495],{"class":42},[36,161341,161303],{"class":105},[36,161343,922],{"class":42},[14,161345,161347],{"id":161346},"_38-真值和假值","3.8 真值和假值",[19,161349,3433,161350,161352],{},[33,161351,2067],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,161354,161355],{},"假值：",[26,161357,161359],{"className":28,"code":161358,"language":30,"meta":31,"style":31},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[33,161360,161361,161365,161370,161374,161378,161383,161387,161391,161396],{"__ignoreMap":31},[36,161362,161363],{"class":38,"line":39},[36,161364,160551],{"class":112},[36,161366,161367],{"class":38,"line":53},[36,161368,161369],{"class":112},"None\n",[36,161371,161372],{"class":38,"line":196},[36,161373,6787],{"class":112},[36,161375,161376],{"class":38,"line":642},[36,161377,35928],{"class":112},[36,161379,161380],{"class":38,"line":655},[36,161381,161382],{"class":105},"\"\"\n",[36,161384,161385],{"class":38,"line":662},[36,161386,35943],{"class":42},[36,161388,161389],{"class":38,"line":667},[36,161390,903],{"class":42},[36,161392,161393],{"class":38,"line":679},[36,161394,161395],{"class":42},"{}\n",[36,161397,161398,161400],{"class":38,"line":685},[36,161399,158324],{"class":112},[36,161401,903],{"class":42},[19,161403,18791],{},[26,161405,161407],{"className":28,"code":161406,"language":30,"meta":31,"style":31},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[33,161408,161409,161423,161427,161434,161454,161460],{"__ignoreMap":31},[36,161410,161411,161413,161415,161417,161419,161421],{"class":38,"line":39},[36,161412,149570],{"class":42},[36,161414,47],{"class":46},[36,161416,64160],{"class":112},[36,161418,495],{"class":42},[36,161420,155413],{"class":105},[36,161422,922],{"class":42},[36,161424,161425],{"class":38,"line":53},[36,161426,659],{"emptyLinePlaceholder":658},[36,161428,161429,161431],{"class":38,"line":196},[36,161430,2067],{"class":46},[36,161432,161433],{"class":42}," name:\n",[36,161435,161436,161438,161440,161442,161444,161446,161448,161450,161452],{"class":38,"line":642},[36,161437,1867],{"class":112},[36,161439,495],{"class":42},[36,161441,3937],{"class":46},[36,161443,160088],{"class":105},[36,161445,4766],{"class":112},[36,161447,83364],{"class":42},[36,161449,4815],{"class":112},[36,161451,4126],{"class":105},[36,161453,922],{"class":42},[36,161455,161456,161458],{"class":38,"line":655},[36,161457,5425],{"class":46},[36,161459,888],{"class":42},[36,161461,161462,161464,161466,161469],{"class":38,"line":662},[36,161463,1867],{"class":112},[36,161465,495],{"class":42},[36,161467,161468],{"class":105},"\"姓名不能为空\"",[36,161470,922],{"class":42},[14,161472,161474],{"id":161473},"_39-match语句","3.9 match语句",[19,161476,161477,161478,161480],{},"Python 3.10 开始支持 ",[33,161479,74819],{},"。它适合处理固定选项。",[26,161482,161484],{"className":28,"code":161483,"language":30,"meta":31,"style":31},"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",[33,161485,161486,161502,161506,161513,161523,161534,161543,161554,161563,161574,161581],{"__ignoreMap":31},[36,161487,161488,161491,161493,161495,161497,161500],{"class":38,"line":39},[36,161489,161490],{"class":42},"command ",[36,161492,47],{"class":46},[36,161494,64160],{"class":112},[36,161496,495],{"class":42},[36,161498,161499],{"class":105},"\"请输入命令:\"",[36,161501,922],{"class":42},[36,161503,161504],{"class":38,"line":53},[36,161505,659],{"emptyLinePlaceholder":658},[36,161507,161508,161510],{"class":38,"line":196},[36,161509,74819],{"class":46},[36,161511,161512],{"class":42}," command:\n",[36,161514,161515,161518,161521],{"class":38,"line":642},[36,161516,161517],{"class":46},"    case",[36,161519,161520],{"class":105}," \"start\"",[36,161522,888],{"class":42},[36,161524,161525,161527,161529,161532],{"class":38,"line":655},[36,161526,1960],{"class":112},[36,161528,495],{"class":42},[36,161530,161531],{"class":105},"\"启动\"",[36,161533,922],{"class":42},[36,161535,161536,161538,161541],{"class":38,"line":662},[36,161537,161517],{"class":46},[36,161539,161540],{"class":105}," \"stop\"",[36,161542,888],{"class":42},[36,161544,161545,161547,161549,161552],{"class":38,"line":667},[36,161546,1960],{"class":112},[36,161548,495],{"class":42},[36,161550,161551],{"class":105},"\"停止\"",[36,161553,922],{"class":42},[36,161555,161556,161558,161561],{"class":38,"line":679},[36,161557,161517],{"class":46},[36,161559,161560],{"class":105}," \"restart\"",[36,161562,888],{"class":42},[36,161564,161565,161567,161569,161572],{"class":38,"line":685},[36,161566,1960],{"class":112},[36,161568,495],{"class":42},[36,161570,161571],{"class":105},"\"重启\"",[36,161573,922],{"class":42},[36,161575,161576,161578],{"class":38,"line":691},[36,161577,161517],{"class":46},[36,161579,161580],{"class":42}," _:\n",[36,161582,161583,161585,161587,161590],{"class":38,"line":696},[36,161584,1960],{"class":112},[36,161586,495],{"class":42},[36,161588,161589],{"class":105},"\"未知命令\"",[36,161591,922],{"class":42},[19,161593,161594,161595,161597,161598,161600],{},"入门阶段掌握 ",[33,161596,157692],{}," 更重要，",[33,161599,74819],{}," 可以作为补充。",[14,161602,161604],{"id":161603},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,161606,126326],{},[211,161608,161609,161612,161615],{},[214,161610,161611],{},"输入成绩。",[214,161613,161614],{},"判断成绩是否合法。",[214,161616,161617],{},"输出等级。",[19,161619,13696],{},[26,161621,161623],{"className":28,"code":161622,"language":30,"meta":31,"style":31},"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",[33,161624,161625,161643,161647,161665,161676,161688,161699,161711,161722,161735,161746,161758,161769,161775],{"__ignoreMap":31},[36,161626,161627,161629,161631,161633,161635,161637,161639,161641],{"class":38,"line":39},[36,161628,158392],{"class":42},[36,161630,47],{"class":46},[36,161632,1341],{"class":112},[36,161634,495],{"class":42},[36,161636,57378],{"class":112},[36,161638,495],{"class":42},[36,161640,155443],{"class":105},[36,161642,2005],{"class":42},[36,161644,161645],{"class":38,"line":53},[36,161646,659],{"emptyLinePlaceholder":658},[36,161648,161649,161651,161653,161655,161657,161659,161661,161663],{"class":38,"line":196},[36,161650,2067],{"class":46},[36,161652,42489],{"class":46},[36,161654,1004],{"class":112},[36,161656,161286],{"class":46},[36,161658,160817],{"class":42},[36,161660,5323],{"class":46},[36,161662,9447],{"class":112},[36,161664,888],{"class":42},[36,161666,161667,161669,161671,161674],{"class":38,"line":642},[36,161668,1867],{"class":112},[36,161670,495],{"class":42},[36,161672,161673],{"class":105},"\"成绩不合法\"",[36,161675,922],{"class":42},[36,161677,161678,161680,161682,161684,161686],{"class":38,"line":655},[36,161679,160840],{"class":46},[36,161681,160817],{"class":42},[36,161683,412],{"class":46},[36,161685,160822],{"class":112},[36,161687,888],{"class":42},[36,161689,161690,161692,161694,161697],{"class":38,"line":662},[36,161691,1867],{"class":112},[36,161693,495],{"class":42},[36,161695,161696],{"class":105},"\"等级:A\"",[36,161698,922],{"class":42},[36,161700,161701,161703,161705,161707,161709],{"class":38,"line":667},[36,161702,160840],{"class":46},[36,161704,160817],{"class":42},[36,161706,412],{"class":46},[36,161708,160847],{"class":112},[36,161710,888],{"class":42},[36,161712,161713,161715,161717,161720],{"class":38,"line":679},[36,161714,1867],{"class":112},[36,161716,495],{"class":42},[36,161718,161719],{"class":105},"\"等级:B\"",[36,161721,922],{"class":42},[36,161723,161724,161726,161728,161730,161733],{"class":38,"line":685},[36,161725,160840],{"class":46},[36,161727,160817],{"class":42},[36,161729,412],{"class":46},[36,161731,161732],{"class":112}," 70",[36,161734,888],{"class":42},[36,161736,161737,161739,161741,161744],{"class":38,"line":691},[36,161738,1867],{"class":112},[36,161740,495],{"class":42},[36,161742,161743],{"class":105},"\"等级:C\"",[36,161745,922],{"class":42},[36,161747,161748,161750,161752,161754,161756],{"class":38,"line":696},[36,161749,160840],{"class":46},[36,161751,160817],{"class":42},[36,161753,412],{"class":46},[36,161755,160871],{"class":112},[36,161757,888],{"class":42},[36,161759,161760,161762,161764,161767],{"class":38,"line":702},[36,161761,1867],{"class":112},[36,161763,495],{"class":42},[36,161765,161766],{"class":105},"\"等级:D\"",[36,161768,922],{"class":42},[36,161770,161771,161773],{"class":38,"line":708},[36,161772,5425],{"class":46},[36,161774,888],{"class":42},[36,161776,161777,161779,161781,161784],{"class":38,"line":713},[36,161778,1867],{"class":112},[36,161780,495],{"class":42},[36,161782,161783],{"class":105},"\"等级:E\"",[36,161785,922],{"class":42},[14,161787,161789],{"id":161788},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,161791,126326],{},[211,161793,161794,161797,161800,161803],{},[214,161795,161796],{},"输入消费金额。",[214,161798,161799],{},"输入会员等级，普通、银卡、金卡。",[214,161801,161802],{},"普通不打折，银卡 9 折，金卡 8 折。",[214,161804,161805],{},"满 500 再减 50。",[19,161807,13696],{},[26,161809,161811],{"className":28,"code":161810,"language":30,"meta":31,"style":31},"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",[33,161812,161813,161833,161849,161853,161861,161865,161879,161889,161902,161911,161924,161932,161938,161949,161953,161967,161971,161985,161995,161999],{"__ignoreMap":31},[36,161814,161815,161818,161820,161822,161824,161826,161828,161831],{"class":38,"line":39},[36,161816,161817],{"class":42},"amount ",[36,161819,47],{"class":46},[36,161821,1341],{"class":112},[36,161823,495],{"class":42},[36,161825,57378],{"class":112},[36,161827,495],{"class":42},[36,161829,161830],{"class":105},"\"请输入消费金额:\"",[36,161832,2005],{"class":42},[36,161834,161835,161838,161840,161842,161844,161847],{"class":38,"line":53},[36,161836,161837],{"class":42},"level ",[36,161839,47],{"class":46},[36,161841,64160],{"class":112},[36,161843,495],{"class":42},[36,161845,161846],{"class":105},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[36,161848,922],{"class":42},[36,161850,161851],{"class":38,"line":196},[36,161852,659],{"emptyLinePlaceholder":658},[36,161854,161855,161857,161859],{"class":38,"line":642},[36,161856,160270],{"class":42},[36,161858,47],{"class":46},[36,161860,1661],{"class":112},[36,161862,161863],{"class":38,"line":655},[36,161864,659],{"emptyLinePlaceholder":658},[36,161866,161867,161869,161872,161874,161877],{"class":38,"line":662},[36,161868,2067],{"class":46},[36,161870,161871],{"class":42}," level ",[36,161873,6652],{"class":46},[36,161875,161876],{"class":105}," \"银卡\"",[36,161878,888],{"class":42},[36,161880,161881,161884,161886],{"class":38,"line":667},[36,161882,161883],{"class":42},"    discount ",[36,161885,47],{"class":46},[36,161887,161888],{"class":112}," 0.9\n",[36,161890,161891,161893,161895,161897,161900],{"class":38,"line":679},[36,161892,160840],{"class":46},[36,161894,161871],{"class":42},[36,161896,6652],{"class":46},[36,161898,161899],{"class":105}," \"金卡\"",[36,161901,888],{"class":42},[36,161903,161904,161906,161908],{"class":38,"line":685},[36,161905,161883],{"class":42},[36,161907,47],{"class":46},[36,161909,161910],{"class":112}," 0.8\n",[36,161912,161913,161915,161917,161919,161922],{"class":38,"line":691},[36,161914,160840],{"class":46},[36,161916,161871],{"class":42},[36,161918,6652],{"class":46},[36,161920,161921],{"class":105}," \"普通\"",[36,161923,888],{"class":42},[36,161925,161926,161928,161930],{"class":38,"line":696},[36,161927,161883],{"class":42},[36,161929,47],{"class":46},[36,161931,1661],{"class":112},[36,161933,161934,161936],{"class":38,"line":702},[36,161935,5425],{"class":46},[36,161937,888],{"class":42},[36,161939,161940,161942,161944,161947],{"class":38,"line":708},[36,161941,1867],{"class":112},[36,161943,495],{"class":42},[36,161945,161946],{"class":105},"\"会员等级输入错误，按普通会员计算\"",[36,161948,922],{"class":42},[36,161950,161951],{"class":38,"line":713},[36,161952,659],{"emptyLinePlaceholder":658},[36,161954,161955,161958,161960,161963,161965],{"class":38,"line":719},[36,161956,161957],{"class":42},"pay ",[36,161959,47],{"class":46},[36,161961,161962],{"class":42}," amount ",[36,161964,1372],{"class":46},[36,161966,160309],{"class":42},[36,161968,161969],{"class":38,"line":725},[36,161970,659],{"emptyLinePlaceholder":658},[36,161972,161973,161975,161978,161980,161983],{"class":38,"line":731},[36,161974,2067],{"class":46},[36,161976,161977],{"class":42}," pay ",[36,161979,412],{"class":46},[36,161981,161982],{"class":112}," 500",[36,161984,888],{"class":42},[36,161986,161987,161990,161992],{"class":38,"line":736},[36,161988,161989],{"class":42},"    pay ",[36,161991,153286],{"class":46},[36,161993,161994],{"class":112}," 50\n",[36,161996,161997],{"class":38,"line":742},[36,161998,659],{"emptyLinePlaceholder":658},[36,162000,162001,162003,162005,162007,162009,162011,162014,162016,162018,162020],{"class":38,"line":748},[36,162002,3486],{"class":112},[36,162004,495],{"class":42},[36,162006,3937],{"class":46},[36,162008,160390],{"class":105},[36,162010,4766],{"class":112},[36,162012,162013],{"class":42},"pay",[36,162015,160193],{"class":46},[36,162017,4815],{"class":112},[36,162019,160046],{"class":105},[36,162021,922],{"class":42},[14,162023,162025],{"id":162024},"_312-易错点","3.12 易错点",[211,162027,162028,162031,162034,162037,162042],{},[214,162029,162030],{},"冒号不能漏。",[214,162032,162033],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[214,162035,162036],{},"多分支判断要注意顺序。",[214,162038,162039,162040,224],{},"判断相等用 ",[33,162041,6652],{},[214,162043,162044],{},"字符串比较区分大小写：",[26,162046,162048],{"className":28,"code":162047,"language":30,"meta":31,"style":31},"\"Y\" == \"y\"  # False\n",[33,162049,162050],{"__ignoreMap":31},[36,162051,162052,162055,162057,162059],{"class":38,"line":39},[36,162053,162054],{"class":105},"\"Y\"",[36,162056,2073],{"class":46},[36,162058,161039],{"class":105},[36,162060,162061],{"class":3943},"  # False\n",[19,162063,162064],{},"可转换后再判断：",[26,162066,162068],{"className":28,"code":162067,"language":30,"meta":31,"style":31},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[33,162069,162070,162087,162100],{"__ignoreMap":31},[36,162071,162072,162075,162077,162079,162081,162084],{"class":38,"line":39},[36,162073,162074],{"class":42},"answer ",[36,162076,47],{"class":46},[36,162078,64160],{"class":112},[36,162080,495],{"class":42},[36,162082,162083],{"class":105},"\"是否继续(y\u002Fn):\"",[36,162085,162086],{"class":42},").lower()\n",[36,162088,162089,162091,162094,162096,162098],{"class":38,"line":53},[36,162090,2067],{"class":46},[36,162092,162093],{"class":42}," answer ",[36,162095,6652],{"class":46},[36,162097,161039],{"class":105},[36,162099,888],{"class":42},[36,162101,162102,162104,162106,162109],{"class":38,"line":196},[36,162103,1867],{"class":112},[36,162105,495],{"class":42},[36,162107,162108],{"class":105},"\"继续\"",[36,162110,922],{"class":42},[14,162112,162114],{"id":162113},"_313-本章练习","3.13 本章练习",[211,162116,162117,162120,162123,162126,162136],{},[214,162118,162119],{},"输入年龄，判断是否成年。",[214,162121,162122],{},"输入年份，判断是否为闰年。",[214,162124,162125],{},"输入三个数字，输出最大值。",[214,162127,162128,162129,162132,162133,162135],{},"写登录判断：用户名是 ",[33,162130,162131],{},"admin"," 且密码是 ",[33,162134,18740],{}," 才登录成功。",[214,162137,162138],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[3785,162140,162141],{},"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":31,"searchDepth":53,"depth":53,"links":162143},[162144,162145,162146,162147,162148,162149,162154,162155,162156,162157,162158,162159,162160],{"id":160532,"depth":53,"text":160533},{"id":160585,"depth":53,"text":160586},{"id":160689,"depth":53,"text":160690},{"id":160779,"depth":53,"text":160780},{"id":160969,"depth":53,"text":160970},{"id":161092,"depth":53,"text":161093,"children":162150},[162151,162152,162153],{"id":161096,"depth":196,"text":161097},{"id":161153,"depth":196,"text":161154},{"id":161210,"depth":196,"text":161211},{"id":161255,"depth":53,"text":161256},{"id":161346,"depth":53,"text":161347},{"id":161473,"depth":53,"text":161474},{"id":161603,"depth":53,"text":161604},{"id":161788,"depth":53,"text":161789},{"id":162024,"depth":53,"text":162025},{"id":162113,"depth":53,"text":162114},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":160524,"description":26998},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":162167,"title":162168,"body":162169,"description":26998,"extension":3817,"meta":163938,"navigation":658,"path":163939,"seo":163940,"stem":163941,"__hash__":163942},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":162170,"toc":163918},[162171,162174,162178,162184,162187,162204,162208,162210,162227,162229,162274,162276,162293,162297,162300,162366,162369,162387,162391,162552,162561,162565,162569,162574,162621,162623,162629,162633,162638,162685,162687,162693,162697,162702,162738,162741,162788,162792,162798,162856,162861,162892,162897,162901,162956,162959,163031,163034,163093,163097,163100,163175,163178,163182,163288,163291,163317,163321,163333,163402,163405,163497,163501,163503,163514,163516,163646,163650,163852,163860,163864,163894,163898,163915],[10,162172,162168],{"id":162173},"_4-循环语句",[14,162175,162177],{"id":162176},"_41-为什么需要循环","4.1 为什么需要循环",[19,162179,162180,162181,162183],{},"如果要输出 1 到 100，不应该写 100 行 ",[33,162182,149506],{},"，而应该用循环。",[19,162185,162186],{},"循环适合处理重复任务：",[211,162188,162189,162192,162195,162198,162201],{},[214,162190,162191],{},"重复输出。",[214,162193,162194],{},"重复输入。",[214,162196,162197],{},"遍历数据。",[214,162199,162200],{},"持续执行菜单。",[214,162202,162203],{},"批量处理文件或数据。",[14,162205,162207],{"id":162206},"_42-while循环","4.2 while循环",[19,162209,8877],{},[26,162211,162213],{"className":28,"code":162212,"language":30,"meta":31,"style":31},"while 条件:\n    循环体\n",[33,162214,162215,162222],{"__ignoreMap":31},[36,162216,162217,162219],{"class":38,"line":39},[36,162218,112138],{"class":46},[36,162220,162221],{"class":42}," 条件:\n",[36,162223,162224],{"class":38,"line":53},[36,162225,162226],{"class":42},"    循环体\n",[19,162228,18791],{},[26,162230,162232],{"className":28,"code":162231,"language":30,"meta":31,"style":31},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[33,162233,162234,162242,162246,162258,162265],{"__ignoreMap":31},[36,162235,162236,162238,162240],{"class":38,"line":39},[36,162237,103696],{"class":42},[36,162239,47],{"class":46},[36,162241,1661],{"class":112},[36,162243,162244],{"class":38,"line":53},[36,162245,659],{"emptyLinePlaceholder":658},[36,162247,162248,162250,162252,162254,162256],{"class":38,"line":196},[36,162249,112138],{"class":46},[36,162251,13119],{"class":42},[36,162253,5323],{"class":46},[36,162255,5860],{"class":112},[36,162257,888],{"class":42},[36,162259,162260,162262],{"class":38,"line":642},[36,162261,1867],{"class":112},[36,162263,162264],{"class":42},"(i)\n",[36,162266,162267,162270,162272],{"class":38,"line":655},[36,162268,162269],{"class":42},"    i ",[36,162271,1658],{"class":46},[36,162273,1661],{"class":112},[19,162275,84483],{},[211,162277,162278,162284,162287,162290],{},[214,162279,162280,162281,224],{},"判断条件 ",[33,162282,162283],{},"i \u003C= 5",[214,162285,162286],{},"条件成立，执行循环体。",[214,162288,162289],{},"执行完后回到条件判断。",[214,162291,162292],{},"条件不成立，退出循环。",[14,162294,162296],{"id":162295},"_43-while累加","4.3 while累加",[19,162298,162299],{},"计算 1 到 100 的和：",[26,162301,162303],{"className":28,"code":162302,"language":30,"meta":31,"style":31},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[33,162304,162305,162313,162321,162325,162337,162347,162355,162359],{"__ignoreMap":31},[36,162306,162307,162309,162311],{"class":38,"line":39},[36,162308,103696],{"class":42},[36,162310,47],{"class":46},[36,162312,1661],{"class":112},[36,162314,162315,162317,162319],{"class":38,"line":53},[36,162316,160294],{"class":42},[36,162318,47],{"class":46},[36,162320,1074],{"class":112},[36,162322,162323],{"class":38,"line":196},[36,162324,659],{"emptyLinePlaceholder":658},[36,162326,162327,162329,162331,162333,162335],{"class":38,"line":642},[36,162328,112138],{"class":46},[36,162330,13119],{"class":42},[36,162332,5323],{"class":46},[36,162334,9447],{"class":112},[36,162336,888],{"class":42},[36,162338,162339,162342,162344],{"class":38,"line":655},[36,162340,162341],{"class":42},"    total ",[36,162343,1658],{"class":46},[36,162345,162346],{"class":42}," i\n",[36,162348,162349,162351,162353],{"class":38,"line":662},[36,162350,162269],{"class":42},[36,162352,1658],{"class":46},[36,162354,1661],{"class":112},[36,162356,162357],{"class":38,"line":667},[36,162358,659],{"emptyLinePlaceholder":658},[36,162360,162361,162363],{"class":38,"line":679},[36,162362,3486],{"class":112},[36,162364,162365],{"class":42},"(total)\n",[19,162367,162368],{},"核心思想：",[211,162370,162371,162376,162381],{},[214,162372,162373,162375],{},[33,162374,4316],{}," 控制循环次数。",[214,162377,162378,162380],{},[33,162379,160395],{}," 保存累加结果。",[214,162382,162383,162384,162386],{},"每轮循环都要更新 ",[33,162385,4316],{},"，否则可能死循环。",[14,162388,162390],{"id":162389},"_44-while猜数字","4.4 while猜数字",[26,162392,162394],{"className":28,"code":162393,"language":30,"meta":31,"style":31},"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",[33,162395,162396,162402,162406,162423,162431,162435,162443,162463,162472,162476,162488,162499,162509,162520,162526,162548],{"__ignoreMap":31},[36,162397,162398,162400],{"class":38,"line":39},[36,162399,611],{"class":46},[36,162401,48886],{"class":42},[36,162403,162404],{"class":38,"line":53},[36,162405,659],{"emptyLinePlaceholder":658},[36,162407,162408,162410,162412,162415,162417,162419,162421],{"class":38,"line":196},[36,162409,162074],{"class":42},[36,162411,47],{"class":46},[36,162413,162414],{"class":42}," random.randint(",[36,162416,4092],{"class":112},[36,162418,478],{"class":42},[36,162420,4186],{"class":112},[36,162422,922],{"class":42},[36,162424,162425,162427,162429],{"class":38,"line":642},[36,162426,149725],{"class":42},[36,162428,47],{"class":46},[36,162430,1074],{"class":112},[36,162432,162433],{"class":38,"line":655},[36,162434,659],{"emptyLinePlaceholder":658},[36,162436,162437,162439,162441],{"class":38,"line":662},[36,162438,112138],{"class":46},[36,162440,98843],{"class":112},[36,162442,888],{"class":42},[36,162444,162445,162448,162450,162452,162454,162456,162458,162461],{"class":38,"line":667},[36,162446,162447],{"class":42},"    guess ",[36,162449,47],{"class":46},[36,162451,6094],{"class":112},[36,162453,495],{"class":42},[36,162455,57378],{"class":112},[36,162457,495],{"class":42},[36,162459,162460],{"class":105},"\"请输入1到100之间的数字:\"",[36,162462,2005],{"class":42},[36,162464,162465,162468,162470],{"class":38,"line":679},[36,162466,162467],{"class":42},"    count ",[36,162469,1658],{"class":46},[36,162471,1661],{"class":112},[36,162473,162474],{"class":38,"line":685},[36,162475,659],{"emptyLinePlaceholder":658},[36,162477,162478,162480,162483,162485],{"class":38,"line":691},[36,162479,3752],{"class":46},[36,162481,162482],{"class":42}," guess ",[36,162484,4829],{"class":46},[36,162486,162487],{"class":42}," answer:\n",[36,162489,162490,162492,162494,162497],{"class":38,"line":696},[36,162491,1960],{"class":112},[36,162493,495],{"class":42},[36,162495,162496],{"class":105},"\"猜大了\"",[36,162498,922],{"class":42},[36,162500,162501,162503,162505,162507],{"class":38,"line":702},[36,162502,42851],{"class":46},[36,162504,162482],{"class":42},[36,162506,393],{"class":46},[36,162508,162487],{"class":42},[36,162510,162511,162513,162515,162518],{"class":38,"line":708},[36,162512,1960],{"class":112},[36,162514,495],{"class":42},[36,162516,162517],{"class":105},"\"猜小了\"",[36,162519,922],{"class":42},[36,162521,162522,162524],{"class":38,"line":713},[36,162523,161056],{"class":46},[36,162525,888],{"class":42},[36,162527,162528,162530,162532,162534,162537,162539,162541,162543,162546],{"class":38,"line":719},[36,162529,1960],{"class":112},[36,162531,495],{"class":42},[36,162533,3937],{"class":46},[36,162535,162536],{"class":105},"\"猜对了，一共猜了",[36,162538,4766],{"class":112},[36,162540,87988],{"class":42},[36,162542,4815],{"class":112},[36,162544,162545],{"class":105},"次\"",[36,162547,922],{"class":42},[36,162549,162550],{"class":38,"line":725},[36,162551,35215],{"class":46},[19,162553,162554,162557,162558,162560],{},[33,162555,162556],{},"while True"," 表示无限循环，通常配合 ",[33,162559,5765],{}," 使用。",[14,162562,162564],{"id":162563},"_45-break和continue","4.5 break和continue",[318,162566,162568],{"id":162567},"_451-break","4.5.1 break",[19,162570,162571,162573],{},[33,162572,5765],{}," 直接结束整个循环。",[26,162575,162577],{"className":28,"code":162576,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[33,162578,162579,162599,162611,162615],{"__ignoreMap":31},[36,162580,162581,162583,162585,162587,162589,162591,162593,162595,162597],{"class":38,"line":39},[36,162582,3120],{"class":46},[36,162584,13119],{"class":42},[36,162586,1619],{"class":46},[36,162588,1622],{"class":112},[36,162590,495],{"class":42},[36,162592,4092],{"class":112},[36,162594,478],{"class":42},[36,162596,4219],{"class":112},[36,162598,848],{"class":42},[36,162600,162601,162603,162605,162607,162609],{"class":38,"line":53},[36,162602,3752],{"class":46},[36,162604,13119],{"class":42},[36,162606,6652],{"class":46},[36,162608,81624],{"class":112},[36,162610,888],{"class":42},[36,162612,162613],{"class":38,"line":196},[36,162614,35215],{"class":46},[36,162616,162617,162619],{"class":38,"line":642},[36,162618,1867],{"class":112},[36,162620,162264],{"class":42},[19,162622,149491],{},[26,162624,162627],{"className":162625,"code":162626,"language":80,"meta":31},[78],"1\n2\n",[33,162628,162626],{"__ignoreMap":31},[318,162630,162632],{"id":162631},"_452-continue","4.5.2 continue",[19,162634,162635,162637],{},[33,162636,157706],{}," 跳过本轮剩余代码，进入下一轮循环。",[26,162639,162641],{"className":28,"code":162640,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[33,162642,162643,162663,162675,162679],{"__ignoreMap":31},[36,162644,162645,162647,162649,162651,162653,162655,162657,162659,162661],{"class":38,"line":39},[36,162646,3120],{"class":46},[36,162648,13119],{"class":42},[36,162650,1619],{"class":46},[36,162652,1622],{"class":112},[36,162654,495],{"class":42},[36,162656,4092],{"class":112},[36,162658,478],{"class":42},[36,162660,4219],{"class":112},[36,162662,848],{"class":42},[36,162664,162665,162667,162669,162671,162673],{"class":38,"line":53},[36,162666,3752],{"class":46},[36,162668,13119],{"class":42},[36,162670,6652],{"class":46},[36,162672,81624],{"class":112},[36,162674,888],{"class":42},[36,162676,162677],{"class":38,"line":196},[36,162678,151546],{"class":46},[36,162680,162681,162683],{"class":38,"line":642},[36,162682,1867],{"class":112},[36,162684,162264],{"class":42},[19,162686,149491],{},[26,162688,162691],{"className":162689,"code":162690,"language":80,"meta":31},[78],"1\n2\n4\n5\n",[33,162692,162690],{"__ignoreMap":31},[14,162694,162696],{"id":162695},"_46-for循环","4.6 for循环",[19,162698,162699,162701],{},[33,162700,3120],{}," 常用于遍历序列。",[26,162703,162705],{"className":28,"code":162704,"language":30,"meta":31,"style":31},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[33,162706,162707,162716,162720,162731],{"__ignoreMap":31},[36,162708,162709,162711,162713],{"class":38,"line":39},[36,162710,149570],{"class":42},[36,162712,47],{"class":46},[36,162714,162715],{"class":105}," \"python\"\n",[36,162717,162718],{"class":38,"line":53},[36,162719,659],{"emptyLinePlaceholder":658},[36,162721,162722,162724,162727,162729],{"class":38,"line":196},[36,162723,3120],{"class":46},[36,162725,162726],{"class":42}," ch ",[36,162728,1619],{"class":46},[36,162730,161433],{"class":42},[36,162732,162733,162735],{"class":38,"line":642},[36,162734,1867],{"class":112},[36,162736,162737],{"class":42},"(ch)\n",[19,162739,162740],{},"遍历列表：",[26,162742,162744],{"className":28,"code":162743,"language":30,"meta":31,"style":31},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[33,162745,162746,162768,162772,162782],{"__ignoreMap":31},[36,162747,162748,162751,162753,162755,162757,162759,162761,162763,162766],{"class":38,"line":39},[36,162749,162750],{"class":42},"students ",[36,162752,47],{"class":46},[36,162754,55783],{"class":42},[36,162756,152922],{"class":105},[36,162758,478],{"class":42},[36,162760,153970],{"class":105},[36,162762,478],{"class":42},[36,162764,162765],{"class":105},"\"小刚\"",[36,162767,36806],{"class":42},[36,162769,162770],{"class":38,"line":53},[36,162771,659],{"emptyLinePlaceholder":658},[36,162773,162774,162776,162778,162780],{"class":38,"line":196},[36,162775,3120],{"class":46},[36,162777,155171],{"class":42},[36,162779,1619],{"class":46},[36,162781,155176],{"class":42},[36,162783,162784,162786],{"class":38,"line":642},[36,162785,1867],{"class":112},[36,162787,153076],{"class":42},[14,162789,162791],{"id":162790},"_47-range函数","4.7 range函数",[19,162793,162794,162797],{},[33,162795,162796],{},"range()"," 用于生成整数序列。",[26,162799,162801],{"className":28,"code":162800,"language":30,"meta":31,"style":31},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[33,162802,162803,162817,162835],{"__ignoreMap":31},[36,162804,162805,162807,162809,162811,162814],{"class":38,"line":39},[36,162806,36976],{"class":112},[36,162808,495],{"class":42},[36,162810,4194],{"class":112},[36,162812,162813],{"class":42},")          ",[36,162815,162816],{"class":3943},"# 0,1,2,3,4\n",[36,162818,162819,162821,162823,162825,162827,162829,162832],{"class":38,"line":53},[36,162820,36976],{"class":112},[36,162822,495],{"class":42},[36,162824,4092],{"class":112},[36,162826,478],{"class":42},[36,162828,4194],{"class":112},[36,162830,162831],{"class":42},")       ",[36,162833,162834],{"class":3943},"# 1,2,3,4\n",[36,162836,162837,162839,162841,162843,162845,162847,162849,162851,162853],{"class":38,"line":196},[36,162838,36976],{"class":112},[36,162840,495],{"class":42},[36,162842,4092],{"class":112},[36,162844,478],{"class":42},[36,162846,554],{"class":112},[36,162848,478],{"class":42},[36,162850,498],{"class":112},[36,162852,158695],{"class":42},[36,162854,162855],{"class":3943},"# 1,3,5,7,9\n",[19,162857,162858,162859,28234],{},"配合 ",[33,162860,3120],{},[26,162862,162864],{"className":28,"code":162863,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    print(i)\n",[33,162865,162866,162886],{"__ignoreMap":31},[36,162867,162868,162870,162872,162874,162876,162878,162880,162882,162884],{"class":38,"line":39},[36,162869,3120],{"class":46},[36,162871,13119],{"class":42},[36,162873,1619],{"class":46},[36,162875,1622],{"class":112},[36,162877,495],{"class":42},[36,162879,4092],{"class":112},[36,162881,478],{"class":42},[36,162883,4219],{"class":112},[36,162885,848],{"class":42},[36,162887,162888,162890],{"class":38,"line":53},[36,162889,1867],{"class":112},[36,162891,162264],{"class":42},[19,162893,12706,162894,162896],{},[33,162895,36976],{}," 的结束值不包含在内。",[14,162898,162900],{"id":162899},"_48-for循环求和","4.8 for循环求和",[26,162902,162904],{"className":28,"code":162903,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[33,162905,162906,162914,162918,162938,162946,162950],{"__ignoreMap":31},[36,162907,162908,162910,162912],{"class":38,"line":39},[36,162909,160294],{"class":42},[36,162911,47],{"class":46},[36,162913,1074],{"class":112},[36,162915,162916],{"class":38,"line":53},[36,162917,659],{"emptyLinePlaceholder":658},[36,162919,162920,162922,162924,162926,162928,162930,162932,162934,162936],{"class":38,"line":196},[36,162921,3120],{"class":46},[36,162923,13119],{"class":42},[36,162925,1619],{"class":46},[36,162927,1622],{"class":112},[36,162929,495],{"class":42},[36,162931,4092],{"class":112},[36,162933,478],{"class":42},[36,162935,4212],{"class":112},[36,162937,848],{"class":42},[36,162939,162940,162942,162944],{"class":38,"line":642},[36,162941,162341],{"class":42},[36,162943,1658],{"class":46},[36,162945,162346],{"class":42},[36,162947,162948],{"class":38,"line":655},[36,162949,659],{"emptyLinePlaceholder":658},[36,162951,162952,162954],{"class":38,"line":662},[36,162953,3486],{"class":112},[36,162955,162365],{"class":42},[19,162957,162958],{},"求偶数和：",[26,162960,162962],{"className":28,"code":162961,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[33,162963,162964,162972,162976,162996,163012,163021,163025],{"__ignoreMap":31},[36,162965,162966,162968,162970],{"class":38,"line":39},[36,162967,160294],{"class":42},[36,162969,47],{"class":46},[36,162971,1074],{"class":112},[36,162973,162974],{"class":38,"line":53},[36,162975,659],{"emptyLinePlaceholder":658},[36,162977,162978,162980,162982,162984,162986,162988,162990,162992,162994],{"class":38,"line":196},[36,162979,3120],{"class":46},[36,162981,13119],{"class":42},[36,162983,1619],{"class":46},[36,162985,1622],{"class":112},[36,162987,495],{"class":42},[36,162989,4092],{"class":112},[36,162991,478],{"class":42},[36,162993,4212],{"class":112},[36,162995,848],{"class":42},[36,162997,162998,163000,163002,163004,163006,163008,163010],{"class":38,"line":642},[36,162999,3752],{"class":46},[36,163001,13119],{"class":42},[36,163003,4203],{"class":46},[36,163005,18411],{"class":112},[36,163007,2073],{"class":46},[36,163009,1004],{"class":112},[36,163011,888],{"class":42},[36,163013,163014,163017,163019],{"class":38,"line":655},[36,163015,163016],{"class":42},"        total ",[36,163018,1658],{"class":46},[36,163020,162346],{"class":42},[36,163022,163023],{"class":38,"line":662},[36,163024,659],{"emptyLinePlaceholder":658},[36,163026,163027,163029],{"class":38,"line":667},[36,163028,3486],{"class":112},[36,163030,162365],{"class":42},[19,163032,163033],{},"也可以：",[26,163035,163037],{"className":28,"code":163036,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[33,163038,163039,163047,163051,163075,163083,163087],{"__ignoreMap":31},[36,163040,163041,163043,163045],{"class":38,"line":39},[36,163042,160294],{"class":42},[36,163044,47],{"class":46},[36,163046,1074],{"class":112},[36,163048,163049],{"class":38,"line":53},[36,163050,659],{"emptyLinePlaceholder":658},[36,163052,163053,163055,163057,163059,163061,163063,163065,163067,163069,163071,163073],{"class":38,"line":196},[36,163054,3120],{"class":46},[36,163056,13119],{"class":42},[36,163058,1619],{"class":46},[36,163060,1622],{"class":112},[36,163062,495],{"class":42},[36,163064,498],{"class":112},[36,163066,478],{"class":42},[36,163068,4212],{"class":112},[36,163070,478],{"class":42},[36,163072,498],{"class":112},[36,163074,848],{"class":42},[36,163076,163077,163079,163081],{"class":38,"line":642},[36,163078,162341],{"class":42},[36,163080,1658],{"class":46},[36,163082,162346],{"class":42},[36,163084,163085],{"class":38,"line":655},[36,163086,659],{"emptyLinePlaceholder":658},[36,163088,163089,163091],{"class":38,"line":662},[36,163090,3486],{"class":112},[36,163092,162365],{"class":42},[14,163094,163096],{"id":163095},"_49-循环嵌套","4.9 循环嵌套",[19,163098,163099],{},"嵌套循环就是循环里面再写循环。",[26,163101,163103],{"className":28,"code":163102,"language":30,"meta":31,"style":31},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[33,163104,163105,163125,163145],{"__ignoreMap":31},[36,163106,163107,163109,163111,163113,163115,163117,163119,163121,163123],{"class":38,"line":39},[36,163108,3120],{"class":46},[36,163110,13119],{"class":42},[36,163112,1619],{"class":46},[36,163114,1622],{"class":112},[36,163116,495],{"class":42},[36,163118,4092],{"class":112},[36,163120,478],{"class":42},[36,163122,4168],{"class":112},[36,163124,848],{"class":42},[36,163126,163127,163129,163131,163133,163135,163137,163139,163141,163143],{"class":38,"line":53},[36,163128,1909],{"class":46},[36,163130,13180],{"class":42},[36,163132,1619],{"class":46},[36,163134,1622],{"class":112},[36,163136,495],{"class":42},[36,163138,4092],{"class":112},[36,163140,478],{"class":42},[36,163142,4168],{"class":112},[36,163144,848],{"class":42},[36,163146,163147,163149,163151,163153,163156,163158,163160,163162,163165,163167,163169,163171,163173],{"class":38,"line":196},[36,163148,1960],{"class":112},[36,163150,495],{"class":42},[36,163152,3937],{"class":46},[36,163154,163155],{"class":105},"\"i=",[36,163157,4766],{"class":112},[36,163159,4316],{"class":42},[36,163161,4815],{"class":112},[36,163163,163164],{"class":105},", j=",[36,163166,4766],{"class":112},[36,163168,4340],{"class":42},[36,163170,4815],{"class":112},[36,163172,4126],{"class":105},[36,163174,922],{"class":42},[19,163176,163177],{},"外层循环执行一次，内层循环执行完整一轮。",[14,163179,163181],{"id":163180},"_410-九九乘法表","4.10 九九乘法表",[26,163183,163185],{"className":28,"code":163184,"language":30,"meta":31,"style":31},"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",[33,163186,163187,163207,163230,163282],{"__ignoreMap":31},[36,163188,163189,163191,163193,163195,163197,163199,163201,163203,163205],{"class":38,"line":39},[36,163190,3120],{"class":46},[36,163192,13119],{"class":42},[36,163194,1619],{"class":46},[36,163196,1622],{"class":112},[36,163198,495],{"class":42},[36,163200,4092],{"class":112},[36,163202,478],{"class":42},[36,163204,554],{"class":112},[36,163206,848],{"class":42},[36,163208,163209,163211,163213,163215,163217,163219,163221,163224,163226,163228],{"class":38,"line":53},[36,163210,1909],{"class":46},[36,163212,13180],{"class":42},[36,163214,1619],{"class":46},[36,163216,1622],{"class":112},[36,163218,495],{"class":42},[36,163220,4092],{"class":112},[36,163222,163223],{"class":42},", i ",[36,163225,4354],{"class":46},[36,163227,28732],{"class":112},[36,163229,848],{"class":42},[36,163231,163232,163234,163236,163238,163240,163242,163244,163246,163248,163250,163252,163254,163256,163258,163260,163262,163264,163266,163268,163270,163272,163274,163276,163278,163280],{"class":38,"line":196},[36,163233,1960],{"class":112},[36,163235,495],{"class":42},[36,163237,3937],{"class":46},[36,163239,4126],{"class":105},[36,163241,4766],{"class":112},[36,163243,4340],{"class":42},[36,163245,4815],{"class":112},[36,163247,1372],{"class":105},[36,163249,4766],{"class":112},[36,163251,4316],{"class":42},[36,163253,4815],{"class":112},[36,163255,47],{"class":105},[36,163257,4766],{"class":112},[36,163259,103696],{"class":42},[36,163261,1372],{"class":46},[36,163263,7109],{"class":42},[36,163265,4815],{"class":112},[36,163267,4126],{"class":105},[36,163269,478],{"class":42},[36,163271,49359],{"class":468},[36,163273,47],{"class":46},[36,163275,4126],{"class":105},[36,163277,4969],{"class":112},[36,163279,4126],{"class":105},[36,163281,922],{"class":42},[36,163283,163284,163286],{"class":38,"line":642},[36,163285,1867],{"class":112},[36,163287,903],{"class":42},[19,163289,163290],{},"关键点：",[211,163292,163293,163299,163305,163311],{},[214,163294,163295,163296,163298],{},"外层 ",[33,163297,4316],{}," 控制行。",[214,163300,163301,163302,163304],{},"内层 ",[33,163303,4340],{}," 控制列。",[214,163306,163307,163308,163310],{},"每行结束后用 ",[33,163309,149506],{}," 换行。",[214,163312,163313,163316],{},[33,163314,163315],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,163318,163320],{"id":163319},"_411-循环else","4.11 循环else",[19,163322,163323,163324,163326,163327,163329,163330,163332],{},"Python 的循环可以带 ",[33,163325,5425],{},"。当循环正常结束时执行 ",[33,163328,5425],{},"，如果被 ",[33,163331,5765],{}," 打断，则不执行。",[26,163334,163336],{"className":28,"code":163335,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[33,163337,163338,163358,163370,163381,163385,163391],{"__ignoreMap":31},[36,163339,163340,163342,163344,163346,163348,163350,163352,163354,163356],{"class":38,"line":39},[36,163341,3120],{"class":46},[36,163343,13119],{"class":42},[36,163345,1619],{"class":46},[36,163347,1622],{"class":112},[36,163349,495],{"class":42},[36,163351,4092],{"class":112},[36,163353,478],{"class":42},[36,163355,4219],{"class":112},[36,163357,848],{"class":42},[36,163359,163360,163362,163364,163366,163368],{"class":38,"line":53},[36,163361,3752],{"class":46},[36,163363,13119],{"class":42},[36,163365,6652],{"class":46},[36,163367,5750],{"class":112},[36,163369,888],{"class":42},[36,163371,163372,163374,163376,163379],{"class":38,"line":196},[36,163373,1960],{"class":112},[36,163375,495],{"class":42},[36,163377,163378],{"class":105},"\"找到了\"",[36,163380,922],{"class":42},[36,163382,163383],{"class":38,"line":642},[36,163384,35215],{"class":46},[36,163386,163387,163389],{"class":38,"line":655},[36,163388,5425],{"class":46},[36,163390,888],{"class":42},[36,163392,163393,163395,163397,163400],{"class":38,"line":662},[36,163394,1867],{"class":112},[36,163396,495],{"class":42},[36,163398,163399],{"class":105},"\"没找到\"",[36,163401,922],{"class":42},[19,163403,163404],{},"常用于搜索。",[26,163406,163408],{"className":28,"code":163407,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[33,163409,163410,163431,163440,163444,163456,163467,163477,163481,163487],{"__ignoreMap":31},[36,163411,163412,163415,163417,163419,163421,163423,163425,163427,163429],{"class":38,"line":39},[36,163413,163414],{"class":42},"names ",[36,163416,47],{"class":46},[36,163418,55783],{"class":42},[36,163420,152922],{"class":105},[36,163422,478],{"class":42},[36,163424,153970],{"class":105},[36,163426,478],{"class":42},[36,163428,162765],{"class":105},[36,163430,36806],{"class":42},[36,163432,163433,163435,163437],{"class":38,"line":53},[36,163434,2782],{"class":42},[36,163436,47],{"class":46},[36,163438,163439],{"class":105}," \"小李\"\n",[36,163441,163442],{"class":38,"line":196},[36,163443,659],{"emptyLinePlaceholder":658},[36,163445,163446,163448,163451,163453],{"class":38,"line":642},[36,163447,3120],{"class":46},[36,163449,163450],{"class":42}," name ",[36,163452,1619],{"class":46},[36,163454,163455],{"class":42}," names:\n",[36,163457,163458,163460,163462,163464],{"class":38,"line":655},[36,163459,3752],{"class":46},[36,163461,163450],{"class":42},[36,163463,6652],{"class":46},[36,163465,163466],{"class":42}," target:\n",[36,163468,163469,163471,163473,163475],{"class":38,"line":662},[36,163470,1960],{"class":112},[36,163472,495],{"class":42},[36,163474,163378],{"class":105},[36,163476,922],{"class":42},[36,163478,163479],{"class":38,"line":667},[36,163480,35215],{"class":46},[36,163482,163483,163485],{"class":38,"line":679},[36,163484,5425],{"class":46},[36,163486,888],{"class":42},[36,163488,163489,163491,163493,163495],{"class":38,"line":685},[36,163490,1867],{"class":112},[36,163492,495],{"class":42},[36,163494,163399],{"class":105},[36,163496,922],{"class":42},[14,163498,163500],{"id":163499},"_412-小案例登录重试","4.12 小案例：登录重试",[19,163502,126326],{},[211,163504,163505,163508,163511],{},[214,163506,163507],{},"用户最多输入 3 次密码。",[214,163509,163510],{},"密码正确则登录成功。",[214,163512,163513],{},"3 次都错误则锁定账号。",[19,163515,13696],{},[26,163517,163519],{"className":28,"code":163518,"language":30,"meta":31,"style":31},"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",[33,163520,163521,163531,163535,163551,163567,163571,163583,163594,163598,163604,163629,163635],{"__ignoreMap":31},[36,163522,163523,163526,163528],{"class":38,"line":39},[36,163524,163525],{"class":42},"password ",[36,163527,47],{"class":46},[36,163529,163530],{"class":105}," \"123456\"\n",[36,163532,163533],{"class":38,"line":53},[36,163534,659],{"emptyLinePlaceholder":658},[36,163536,163537,163539,163541,163543,163545,163547,163549],{"class":38,"line":196},[36,163538,3120],{"class":46},[36,163540,13119],{"class":42},[36,163542,1619],{"class":46},[36,163544,1622],{"class":112},[36,163546,495],{"class":42},[36,163548,1982],{"class":112},[36,163550,848],{"class":42},[36,163552,163553,163556,163558,163560,163562,163565],{"class":38,"line":642},[36,163554,163555],{"class":42},"    user_password ",[36,163557,47],{"class":46},[36,163559,64160],{"class":112},[36,163561,495],{"class":42},[36,163563,163564],{"class":105},"\"请输入密码:\"",[36,163566,922],{"class":42},[36,163568,163569],{"class":38,"line":655},[36,163570,659],{"emptyLinePlaceholder":658},[36,163572,163573,163575,163578,163580],{"class":38,"line":662},[36,163574,3752],{"class":46},[36,163576,163577],{"class":42}," user_password ",[36,163579,6652],{"class":46},[36,163581,163582],{"class":42}," password:\n",[36,163584,163585,163587,163589,163592],{"class":38,"line":667},[36,163586,1960],{"class":112},[36,163588,495],{"class":42},[36,163590,163591],{"class":105},"\"登录成功\"",[36,163593,922],{"class":42},[36,163595,163596],{"class":38,"line":679},[36,163597,35215],{"class":46},[36,163599,163600,163602],{"class":38,"line":685},[36,163601,161056],{"class":46},[36,163603,888],{"class":42},[36,163605,163606,163608,163610,163612,163615,163618,163620,163622,163624,163627],{"class":38,"line":691},[36,163607,1960],{"class":112},[36,163609,495],{"class":42},[36,163611,3937],{"class":46},[36,163613,163614],{"class":105},"\"密码错误，还剩",[36,163616,163617],{"class":112},"{2",[36,163619,55828],{"class":46},[36,163621,6734],{"class":42},[36,163623,4815],{"class":112},[36,163625,163626],{"class":105},"次机会\"",[36,163628,922],{"class":42},[36,163630,163631,163633],{"class":38,"line":696},[36,163632,5425],{"class":46},[36,163634,888],{"class":42},[36,163636,163637,163639,163641,163644],{"class":38,"line":702},[36,163638,1867],{"class":112},[36,163640,495],{"class":42},[36,163642,163643],{"class":105},"\"账号已锁定\"",[36,163645,922],{"class":42},[14,163647,163649],{"id":163648},"_413-小案例菜单程序","4.13 小案例：菜单程序",[26,163651,163653],{"className":28,"code":163652,"language":30,"meta":31,"style":31},"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",[33,163654,163655,163663,163674,163685,163696,163707,163718,163722,163737,163741,163753,163764,163776,163787,163799,163810,163822,163832,163836,163842],{"__ignoreMap":31},[36,163656,163657,163659,163661],{"class":38,"line":39},[36,163658,112138],{"class":46},[36,163660,98843],{"class":112},[36,163662,888],{"class":42},[36,163664,163665,163667,163669,163672],{"class":38,"line":53},[36,163666,1867],{"class":112},[36,163668,495],{"class":42},[36,163670,163671],{"class":105},"\"====== 菜单 ======\"",[36,163673,922],{"class":42},[36,163675,163676,163678,163680,163683],{"class":38,"line":196},[36,163677,1867],{"class":112},[36,163679,495],{"class":42},[36,163681,163682],{"class":105},"\"1. 查询余额\"",[36,163684,922],{"class":42},[36,163686,163687,163689,163691,163694],{"class":38,"line":642},[36,163688,1867],{"class":112},[36,163690,495],{"class":42},[36,163692,163693],{"class":105},"\"2. 存款\"",[36,163695,922],{"class":42},[36,163697,163698,163700,163702,163705],{"class":38,"line":655},[36,163699,1867],{"class":112},[36,163701,495],{"class":42},[36,163703,163704],{"class":105},"\"3. 取款\"",[36,163706,922],{"class":42},[36,163708,163709,163711,163713,163716],{"class":38,"line":662},[36,163710,1867],{"class":112},[36,163712,495],{"class":42},[36,163714,163715],{"class":105},"\"0. 退出\"",[36,163717,922],{"class":42},[36,163719,163720],{"class":38,"line":667},[36,163721,659],{"emptyLinePlaceholder":658},[36,163723,163724,163727,163729,163731,163733,163735],{"class":38,"line":679},[36,163725,163726],{"class":42},"    choice ",[36,163728,47],{"class":46},[36,163730,64160],{"class":112},[36,163732,495],{"class":42},[36,163734,156107],{"class":105},[36,163736,922],{"class":42},[36,163738,163739],{"class":38,"line":685},[36,163740,659],{"emptyLinePlaceholder":658},[36,163742,163743,163745,163747,163749,163751],{"class":38,"line":691},[36,163744,3752],{"class":46},[36,163746,156120],{"class":42},[36,163748,6652],{"class":46},[36,163750,156125],{"class":105},[36,163752,888],{"class":42},[36,163754,163755,163757,163759,163762],{"class":38,"line":696},[36,163756,1960],{"class":112},[36,163758,495],{"class":42},[36,163760,163761],{"class":105},"\"余额为1000元\"",[36,163763,922],{"class":42},[36,163765,163766,163768,163770,163772,163774],{"class":38,"line":702},[36,163767,42851],{"class":46},[36,163769,156120],{"class":42},[36,163771,6652],{"class":46},[36,163773,156144],{"class":105},[36,163775,888],{"class":42},[36,163777,163778,163780,163782,163785],{"class":38,"line":708},[36,163779,1960],{"class":112},[36,163781,495],{"class":42},[36,163783,163784],{"class":105},"\"存款功能\"",[36,163786,922],{"class":42},[36,163788,163789,163791,163793,163795,163797],{"class":38,"line":713},[36,163790,42851],{"class":46},[36,163792,156120],{"class":42},[36,163794,6652],{"class":46},[36,163796,156162],{"class":105},[36,163798,888],{"class":42},[36,163800,163801,163803,163805,163808],{"class":38,"line":719},[36,163802,1960],{"class":112},[36,163804,495],{"class":42},[36,163806,163807],{"class":105},"\"取款功能\"",[36,163809,922],{"class":42},[36,163811,163812,163814,163816,163818,163820],{"class":38,"line":725},[36,163813,42851],{"class":46},[36,163815,156120],{"class":42},[36,163817,6652],{"class":46},[36,163819,156216],{"class":105},[36,163821,888],{"class":42},[36,163823,163824,163826,163828,163830],{"class":38,"line":731},[36,163825,1960],{"class":112},[36,163827,495],{"class":42},[36,163829,156227],{"class":105},[36,163831,922],{"class":42},[36,163833,163834],{"class":38,"line":736},[36,163835,35215],{"class":46},[36,163837,163838,163840],{"class":38,"line":742},[36,163839,161056],{"class":46},[36,163841,888],{"class":42},[36,163843,163844,163846,163848,163850],{"class":38,"line":748},[36,163845,1960],{"class":112},[36,163847,495],{"class":42},[36,163849,156248],{"class":105},[36,163851,922],{"class":42},[19,163853,163854,163855,163857,163858,224],{},"菜单类程序通常使用 ",[33,163856,162556],{},"，用户选择退出时 ",[33,163859,5765],{},[14,163861,163863],{"id":163862},"_414-易错点","4.14 易错点",[211,163865,163866,163871,163877,163885,163891],{},[214,163867,163868,163870],{},[33,163869,112138],{}," 循环必须更新控制变量。",[214,163872,163873,163876],{},[33,163874,163875],{},"range(1, 10)"," 不包含 10。",[214,163878,163879,163881,163882,163884],{},[33,163880,5765],{}," 结束整个循环，",[33,163883,157706],{}," 只跳过本轮。",[214,163886,163887,163888,163890],{},"嵌套循环中，",[33,163889,5765],{}," 只跳出当前所在的一层循环。",[214,163892,163893],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,163895,163897],{"id":163896},"_415-本章练习","4.15 本章练习",[211,163899,163900,163903,163906,163909,163912],{},[214,163901,163902],{},"输出 1 到 100。",[214,163904,163905],{},"计算 1 到 100 的偶数和。",[214,163907,163908],{},"输出 100 以内能被 3 和 5 同时整除的数。",[214,163910,163911],{},"编写猜数字游戏，限制最多猜 7 次。",[214,163913,163914],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[3785,163916,163917],{},"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":31,"searchDepth":53,"depth":53,"links":163919},[163920,163921,163922,163923,163924,163928,163929,163930,163931,163932,163933,163934,163935,163936,163937],{"id":162176,"depth":53,"text":162177},{"id":162206,"depth":53,"text":162207},{"id":162295,"depth":53,"text":162296},{"id":162389,"depth":53,"text":162390},{"id":162563,"depth":53,"text":162564,"children":163925},[163926,163927],{"id":162567,"depth":196,"text":162568},{"id":162631,"depth":196,"text":162632},{"id":162695,"depth":53,"text":162696},{"id":162790,"depth":53,"text":162791},{"id":162899,"depth":53,"text":162900},{"id":163095,"depth":53,"text":163096},{"id":163180,"depth":53,"text":163181},{"id":163319,"depth":53,"text":163320},{"id":163499,"depth":53,"text":163500},{"id":163648,"depth":53,"text":163649},{"id":163862,"depth":53,"text":163863},{"id":163896,"depth":53,"text":163897},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":162168,"description":26998},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":163944,"title":163945,"body":163946,"description":26998,"extension":3817,"meta":165951,"navigation":658,"path":165952,"seo":165953,"stem":165954,"__hash__":165955},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":163947,"toc":165931},[163948,163951,163955,163958,163961,163975,163978,163992,163996,163998,164017,164019,164066,164068,164082,164086,164160,164163,164167,164170,164229,164237,164240,164293,164296,164300,164305,164360,164368,164418,164422,164427,164435,164534,164540,164544,164549,164552,164563,164604,164617,164621,164624,164660,164663,164676,164679,164739,164743,164747,164750,164801,164805,164808,164855,164861,164927,164930,164934,164937,165053,165056,165060,165063,165169,165173,165176,165214,165217,165259,165262,165322,165325,165329,165793,165796,165800,165827,165833,165894,165898,165928],[10,163949,163945],{"id":163950},"_5-函数基础",[14,163952,163954],{"id":163953},"_51-为什么需要函数","5.1 为什么需要函数",[19,163956,163957],{},"函数用于封装一段可以重复使用的代码。",[19,163959,163960],{},"不使用函数的问题：",[211,163962,163963,163966,163969,163972],{},[214,163964,163965],{},"重复代码多。",[214,163967,163968],{},"修改逻辑时容易漏改。",[214,163970,163971],{},"主流程不清晰。",[214,163973,163974],{},"程序越写越长，难以维护。",[19,163976,163977],{},"使用函数后的好处：",[211,163979,163980,163983,163986,163989],{},[214,163981,163982],{},"提高复用性。",[214,163984,163985],{},"提高可读性。",[214,163987,163988],{},"便于调试。",[214,163990,163991],{},"便于分工。",[14,163993,163995],{"id":163994},"_52-函数定义","5.2 函数定义",[19,163997,8877],{},[26,163999,164001],{"className":28,"code":164000,"language":30,"meta":31,"style":31},"def 函数名():\n    函数体\n",[33,164002,164003,164012],{"__ignoreMap":31},[36,164004,164005,164007,164010],{"class":38,"line":39},[36,164006,1820],{"class":46},[36,164008,164009],{"class":101}," 函数名",[36,164011,35540],{"class":42},[36,164013,164014],{"class":38,"line":53},[36,164015,164016],{"class":42},"    函数体\n",[19,164018,18791],{},[26,164020,164022],{"className":28,"code":164021,"language":30,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[33,164023,164024,164033,164043,164053,164057,164061],{"__ignoreMap":31},[36,164025,164026,164028,164031],{"class":38,"line":39},[36,164027,1820],{"class":46},[36,164029,164030],{"class":101}," say_hello",[36,164032,35540],{"class":42},[36,164034,164035,164037,164039,164041],{"class":38,"line":53},[36,164036,1867],{"class":112},[36,164038,495],{"class":42},[36,164040,9537],{"class":105},[36,164042,922],{"class":42},[36,164044,164045,164047,164049,164051],{"class":38,"line":196},[36,164046,1867],{"class":112},[36,164048,495],{"class":42},[36,164050,149673],{"class":105},[36,164052,922],{"class":42},[36,164054,164055],{"class":38,"line":642},[36,164056,659],{"emptyLinePlaceholder":658},[36,164058,164059],{"class":38,"line":655},[36,164060,659],{"emptyLinePlaceholder":658},[36,164062,164063],{"class":38,"line":662},[36,164064,164065],{"class":42},"say_hello()\n",[19,164067,12706],{},[211,164069,164070,164073,164076,164079],{},[214,164071,164072],{},"函数必须先定义，再调用。",[214,164074,164075],{},"函数名遵循变量命名规则。",[214,164077,164078],{},"函数体需要缩进。",[214,164080,164081],{},"函数不调用就不会执行。",[14,164083,164085],{"id":164084},"_53-函数调用","5.3 函数调用",[26,164087,164089],{"className":28,"code":164088,"language":30,"meta":31,"style":31},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[33,164090,164091,164100,164111,164122,164133,164143,164147,164151,164156],{"__ignoreMap":31},[36,164092,164093,164095,164098],{"class":38,"line":39},[36,164094,1820],{"class":46},[36,164096,164097],{"class":101}," print_menu",[36,164099,35540],{"class":42},[36,164101,164102,164104,164106,164109],{"class":38,"line":53},[36,164103,1867],{"class":112},[36,164105,495],{"class":42},[36,164107,164108],{"class":105},"\"1. 查询\"",[36,164110,922],{"class":42},[36,164112,164113,164115,164117,164120],{"class":38,"line":196},[36,164114,1867],{"class":112},[36,164116,495],{"class":42},[36,164118,164119],{"class":105},"\"2. 添加\"",[36,164121,922],{"class":42},[36,164123,164124,164126,164128,164131],{"class":38,"line":642},[36,164125,1867],{"class":112},[36,164127,495],{"class":42},[36,164129,164130],{"class":105},"\"3. 删除\"",[36,164132,922],{"class":42},[36,164134,164135,164137,164139,164141],{"class":38,"line":655},[36,164136,1867],{"class":112},[36,164138,495],{"class":42},[36,164140,163715],{"class":105},[36,164142,922],{"class":42},[36,164144,164145],{"class":38,"line":662},[36,164146,659],{"emptyLinePlaceholder":658},[36,164148,164149],{"class":38,"line":667},[36,164150,659],{"emptyLinePlaceholder":658},[36,164152,164153],{"class":38,"line":679},[36,164154,164155],{"class":42},"print_menu()\n",[36,164157,164158],{"class":38,"line":685},[36,164159,164155],{"class":42},[19,164161,164162],{},"函数可以多次调用，每次调用都会执行函数体。",[14,164164,164166],{"id":164165},"_54-参数","5.4 参数",[19,164168,164169],{},"参数用于向函数传递数据。",[26,164171,164173],{"className":28,"code":164172,"language":30,"meta":31,"style":31},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[33,164174,164175,164184,164204,164208,164212,164221],{"__ignoreMap":31},[36,164176,164177,164179,164181],{"class":38,"line":39},[36,164178,1820],{"class":46},[36,164180,164030],{"class":101},[36,164182,164183],{"class":42},"(name):\n",[36,164185,164186,164188,164190,164192,164194,164196,164198,164200,164202],{"class":38,"line":53},[36,164187,1867],{"class":112},[36,164189,495],{"class":42},[36,164191,3937],{"class":46},[36,164193,160088],{"class":105},[36,164195,4766],{"class":112},[36,164197,83364],{"class":42},[36,164199,4815],{"class":112},[36,164201,4126],{"class":105},[36,164203,922],{"class":42},[36,164205,164206],{"class":38,"line":196},[36,164207,659],{"emptyLinePlaceholder":658},[36,164209,164210],{"class":38,"line":642},[36,164211,659],{"emptyLinePlaceholder":658},[36,164213,164214,164217,164219],{"class":38,"line":655},[36,164215,164216],{"class":42},"say_hello(",[36,164218,152922],{"class":105},[36,164220,922],{"class":42},[36,164222,164223,164225,164227],{"class":38,"line":662},[36,164224,164216],{"class":42},[36,164226,153970],{"class":105},[36,164228,922],{"class":42},[19,164230,164231,164233,164234,164236],{},[33,164232,83364],{}," 是形参，",[33,164235,152922],{}," 是实参。",[19,164238,164239],{},"多个参数：",[26,164241,164243],{"className":28,"code":164242,"language":30,"meta":31,"style":31},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[33,164244,164245,164253,164266,164272,164276,164280],{"__ignoreMap":31},[36,164246,164247,164249,164251],{"class":38,"line":39},[36,164248,1820],{"class":46},[36,164250,8903],{"class":101},[36,164252,154127],{"class":42},[36,164254,164255,164258,164260,164262,164264],{"class":38,"line":53},[36,164256,164257],{"class":42},"    result ",[36,164259,47],{"class":46},[36,164261,14530],{"class":42},[36,164263,4354],{"class":46},[36,164265,154138],{"class":42},[36,164267,164268,164270],{"class":38,"line":196},[36,164269,1867],{"class":112},[36,164271,80139],{"class":42},[36,164273,164274],{"class":38,"line":642},[36,164275,659],{"emptyLinePlaceholder":658},[36,164277,164278],{"class":38,"line":655},[36,164279,659],{"emptyLinePlaceholder":658},[36,164281,164282,164285,164287,164289,164291],{"class":38,"line":662},[36,164283,164284],{"class":42},"add(",[36,164286,554],{"class":112},[36,164288,478],{"class":42},[36,164290,1921],{"class":112},[36,164292,922],{"class":42},[19,164294,164295],{},"调用时参数数量必须匹配。",[14,164297,164299],{"id":164298},"_55-返回值","5.5 返回值",[19,164301,164302,164304],{},[33,164303,2822],{}," 用于把函数内部的结果返回给调用者。",[26,164306,164308],{"className":28,"code":164307,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[33,164309,164310,164318,164328,164332,164336,164354],{"__ignoreMap":31},[36,164311,164312,164314,164316],{"class":38,"line":39},[36,164313,1820],{"class":46},[36,164315,8903],{"class":101},[36,164317,154127],{"class":42},[36,164319,164320,164322,164324,164326],{"class":38,"line":53},[36,164321,7788],{"class":46},[36,164323,14530],{"class":42},[36,164325,4354],{"class":46},[36,164327,154138],{"class":42},[36,164329,164330],{"class":38,"line":196},[36,164331,659],{"emptyLinePlaceholder":658},[36,164333,164334],{"class":38,"line":642},[36,164335,659],{"emptyLinePlaceholder":658},[36,164337,164338,164341,164343,164346,164348,164350,164352],{"class":38,"line":655},[36,164339,164340],{"class":42},"result ",[36,164342,47],{"class":46},[36,164344,164345],{"class":42}," add(",[36,164347,554],{"class":112},[36,164349,478],{"class":42},[36,164351,1921],{"class":112},[36,164353,922],{"class":42},[36,164355,164356,164358],{"class":38,"line":662},[36,164357,3486],{"class":112},[36,164359,80139],{"class":42},[19,164361,164362,164363,164365,164366,224],{},"如果函数没有写 ",[33,164364,2822],{},"，默认返回 ",[33,164367,885],{},[26,164369,164371],{"className":28,"code":164370,"language":30,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[33,164372,164373,164381,164391,164395,164399,164408],{"__ignoreMap":31},[36,164374,164375,164377,164379],{"class":38,"line":39},[36,164376,1820],{"class":46},[36,164378,164030],{"class":101},[36,164380,35540],{"class":42},[36,164382,164383,164385,164387,164389],{"class":38,"line":53},[36,164384,1867],{"class":112},[36,164386,495],{"class":42},[36,164388,9537],{"class":105},[36,164390,922],{"class":42},[36,164392,164393],{"class":38,"line":196},[36,164394,659],{"emptyLinePlaceholder":658},[36,164396,164397],{"class":38,"line":642},[36,164398,659],{"emptyLinePlaceholder":658},[36,164400,164401,164403,164405],{"class":38,"line":655},[36,164402,164340],{"class":42},[36,164404,47],{"class":46},[36,164406,164407],{"class":42}," say_hello()\n",[36,164409,164410,164412,164415],{"class":38,"line":662},[36,164411,3486],{"class":112},[36,164413,164414],{"class":42},"(result)  ",[36,164416,164417],{"class":3943},"# None\n",[14,164419,164421],{"id":164420},"_56-return的作用","5.6 return的作用",[19,164423,164424,164426],{},[33,164425,2822],{}," 有两个作用：",[211,164428,164429,164432],{},[214,164430,164431],{},"返回结果。",[214,164433,164434],{},"结束函数。",[26,164436,164438],{"className":28,"code":164437,"language":30,"meta":31,"style":31},"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",[33,164439,164440,164450,164462,164469,164473,164485,164492,164496,164503,164507,164511,164522],{"__ignoreMap":31},[36,164441,164442,164444,164447],{"class":38,"line":39},[36,164443,1820],{"class":46},[36,164445,164446],{"class":101}," check_age",[36,164448,164449],{"class":42},"(age):\n",[36,164451,164452,164454,164456,164458,164460],{"class":38,"line":53},[36,164453,3752],{"class":46},[36,164455,19363],{"class":42},[36,164457,393],{"class":46},[36,164459,1004],{"class":112},[36,164461,888],{"class":42},[36,164463,164464,164466],{"class":38,"line":196},[36,164465,1239],{"class":46},[36,164467,164468],{"class":105}," \"年龄不合法\"\n",[36,164470,164471],{"class":38,"line":642},[36,164472,659],{"emptyLinePlaceholder":658},[36,164474,164475,164477,164479,164481,164483],{"class":38,"line":655},[36,164476,3752],{"class":46},[36,164478,19363],{"class":42},[36,164480,412],{"class":46},[36,164482,159319],{"class":112},[36,164484,888],{"class":42},[36,164486,164487,164489],{"class":38,"line":662},[36,164488,1239],{"class":46},[36,164490,164491],{"class":105}," \"成年人\"\n",[36,164493,164494],{"class":38,"line":667},[36,164495,659],{"emptyLinePlaceholder":658},[36,164497,164498,164500],{"class":38,"line":679},[36,164499,7788],{"class":46},[36,164501,164502],{"class":105}," \"未成年人\"\n",[36,164504,164505],{"class":38,"line":685},[36,164506,659],{"emptyLinePlaceholder":658},[36,164508,164509],{"class":38,"line":691},[36,164510,659],{"emptyLinePlaceholder":658},[36,164512,164513,164515,164518,164520],{"class":38,"line":696},[36,164514,3486],{"class":112},[36,164516,164517],{"class":42},"(check_age(",[36,164519,1921],{"class":112},[36,164521,2005],{"class":42},[36,164523,164524,164526,164528,164530,164532],{"class":38,"line":702},[36,164525,3486],{"class":112},[36,164527,164517],{"class":42},[36,164529,1308],{"class":46},[36,164531,4092],{"class":112},[36,164533,2005],{"class":42},[19,164535,164536,164537,164539],{},"函数执行到 ",[33,164538,2822],{}," 后，后面的代码不会继续执行。",[14,164541,164543],{"id":164542},"_57-none","5.7 None",[19,164545,164546,164548],{},[33,164547,885],{}," 表示空值或没有结果。",[19,164550,164551],{},"常见使用场景：",[211,164553,164554,164557,164560],{},[214,164555,164556],{},"函数没有返回值。",[214,164558,164559],{},"变量暂时没有具体值。",[214,164561,164562],{},"表示查询不到结果。",[26,164564,164566],{"className":28,"code":164565,"language":30,"meta":31,"style":31},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[33,164567,164568,164576,164580,164593],{"__ignoreMap":31},[36,164569,164570,164572,164574],{"class":38,"line":39},[36,164571,164340],{"class":42},[36,164573,47],{"class":46},[36,164575,155206],{"class":112},[36,164577,164578],{"class":38,"line":53},[36,164579,659],{"emptyLinePlaceholder":658},[36,164581,164582,164584,164587,164589,164591],{"class":38,"line":196},[36,164583,2067],{"class":46},[36,164585,164586],{"class":42}," result ",[36,164588,42486],{"class":46},[36,164590,1384],{"class":112},[36,164592,888],{"class":42},[36,164594,164595,164597,164599,164602],{"class":38,"line":642},[36,164596,1867],{"class":112},[36,164598,495],{"class":42},[36,164600,164601],{"class":105},"\"没有数据\"",[36,164603,922],{"class":42},[19,164605,164606,164607,164609,164610,164613,164614,224],{},"判断 ",[33,164608,885],{}," 推荐使用 ",[33,164611,164612],{},"is None","，不要写成 ",[33,164615,164616],{},"== None",[14,164618,164620],{"id":164619},"_58-函数文档字符串","5.8 函数文档字符串",[19,164622,164623],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[26,164625,164627],{"className":28,"code":164626,"language":30,"meta":31,"style":31},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[33,164628,164629,164639,164644],{"__ignoreMap":31},[36,164630,164631,164633,164636],{"class":38,"line":39},[36,164632,1820],{"class":46},[36,164634,164635],{"class":101}," calculate_bmi",[36,164637,164638],{"class":42},"(weight, height):\n",[36,164640,164641],{"class":38,"line":53},[36,164642,164643],{"class":105},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[36,164645,164646,164648,164651,164653,164656,164658],{"class":38,"line":196},[36,164647,7788],{"class":46},[36,164649,164650],{"class":42}," weight ",[36,164652,4455],{"class":46},[36,164654,164655],{"class":42}," height ",[36,164657,14322],{"class":46},[36,164659,51280],{"class":112},[19,164661,164662],{},"查看说明：",[26,164664,164666],{"className":28,"code":164665,"language":30,"meta":31,"style":31},"help(calculate_bmi)\n",[33,164667,164668],{"__ignoreMap":31},[36,164669,164670,164673],{"class":38,"line":39},[36,164671,164672],{"class":112},"help",[36,164674,164675],{"class":42},"(calculate_bmi)\n",[19,164677,164678],{},"较完整的写法：",[26,164680,164682],{"className":28,"code":164681,"language":30,"meta":31,"style":31},"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",[33,164683,164684,164692,164697,164702,164706,164711,164716,164721,164725],{"__ignoreMap":31},[36,164685,164686,164688,164690],{"class":38,"line":39},[36,164687,1820],{"class":46},[36,164689,164635],{"class":101},[36,164691,164638],{"class":42},[36,164693,164694],{"class":38,"line":53},[36,164695,164696],{"class":105},"    \"\"\"\n",[36,164698,164699],{"class":38,"line":196},[36,164700,164701],{"class":105},"    计算BMI。\n",[36,164703,164704],{"class":38,"line":642},[36,164705,659],{"emptyLinePlaceholder":658},[36,164707,164708],{"class":38,"line":655},[36,164709,164710],{"class":105},"    :param weight: 体重，单位kg\n",[36,164712,164713],{"class":38,"line":662},[36,164714,164715],{"class":105},"    :param height: 身高，单位m\n",[36,164717,164718],{"class":38,"line":667},[36,164719,164720],{"class":105},"    :return: BMI数值\n",[36,164722,164723],{"class":38,"line":679},[36,164724,164696],{"class":105},[36,164726,164727,164729,164731,164733,164735,164737],{"class":38,"line":685},[36,164728,7788],{"class":46},[36,164730,164650],{"class":42},[36,164732,4455],{"class":46},[36,164734,164655],{"class":42},[36,164736,14322],{"class":46},[36,164738,51280],{"class":112},[14,164740,164742],{"id":164741},"_59-变量作用域","5.9 变量作用域",[318,164744,164746],{"id":164745},"_591-局部变量","5.9.1 局部变量",[19,164748,164749],{},"在函数内部定义的变量，只能在函数内部使用。",[26,164751,164753],{"className":28,"code":164752,"language":30,"meta":31,"style":31},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[33,164754,164755,164764,164772,164778,164782,164786,164791],{"__ignoreMap":31},[36,164756,164757,164759,164762],{"class":38,"line":39},[36,164758,1820],{"class":46},[36,164760,164761],{"class":101}," test",[36,164763,35540],{"class":42},[36,164765,164766,164768,164770],{"class":38,"line":53},[36,164767,49151],{"class":42},[36,164769,47],{"class":46},[36,164771,61983],{"class":112},[36,164773,164774,164776],{"class":38,"line":196},[36,164775,1867],{"class":112},[36,164777,3901],{"class":42},[36,164779,164780],{"class":38,"line":642},[36,164781,659],{"emptyLinePlaceholder":658},[36,164783,164784],{"class":38,"line":655},[36,164785,659],{"emptyLinePlaceholder":658},[36,164787,164788],{"class":38,"line":662},[36,164789,164790],{"class":42},"test()\n",[36,164792,164793,164795,164798],{"class":38,"line":667},[36,164794,3486],{"class":112},[36,164796,164797],{"class":42},"(num)  ",[36,164799,164800],{"class":3943},"# 报错\n",[318,164802,164804],{"id":164803},"_592-全局变量","5.9.2 全局变量",[19,164806,164807],{},"在函数外部定义的变量，可以在函数内部读取。",[26,164809,164811],{"className":28,"code":164810,"language":30,"meta":31,"style":31},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[33,164812,164813,164821,164825,164829,164837,164843,164847,164851],{"__ignoreMap":31},[36,164814,164815,164817,164819],{"class":38,"line":39},[36,164816,149570],{"class":42},[36,164818,47],{"class":46},[36,164820,152387],{"class":105},[36,164822,164823],{"class":38,"line":53},[36,164824,659],{"emptyLinePlaceholder":658},[36,164826,164827],{"class":38,"line":196},[36,164828,659],{"emptyLinePlaceholder":658},[36,164830,164831,164833,164835],{"class":38,"line":642},[36,164832,1820],{"class":46},[36,164834,164030],{"class":101},[36,164836,35540],{"class":42},[36,164838,164839,164841],{"class":38,"line":655},[36,164840,1867],{"class":112},[36,164842,153694],{"class":42},[36,164844,164845],{"class":38,"line":662},[36,164846,659],{"emptyLinePlaceholder":658},[36,164848,164849],{"class":38,"line":667},[36,164850,659],{"emptyLinePlaceholder":658},[36,164852,164853],{"class":38,"line":679},[36,164854,164065],{"class":42},[19,164856,164857,164858,224],{},"如果要在函数内部修改全局变量，需要 ",[33,164859,164860],{},"global",[26,164862,164864],{"className":28,"code":164863,"language":30,"meta":31,"style":31},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[33,164865,164866,164874,164878,164882,164891,164899,164907,164911,164915,164920],{"__ignoreMap":31},[36,164867,164868,164870,164872],{"class":38,"line":39},[36,164869,149725],{"class":42},[36,164871,47],{"class":46},[36,164873,1074],{"class":112},[36,164875,164876],{"class":38,"line":53},[36,164877,659],{"emptyLinePlaceholder":658},[36,164879,164880],{"class":38,"line":196},[36,164881,659],{"emptyLinePlaceholder":658},[36,164883,164884,164886,164889],{"class":38,"line":642},[36,164885,1820],{"class":46},[36,164887,164888],{"class":101}," add_count",[36,164890,35540],{"class":42},[36,164892,164893,164896],{"class":38,"line":655},[36,164894,164895],{"class":46},"    global",[36,164897,164898],{"class":42}," count\n",[36,164900,164901,164903,164905],{"class":38,"line":662},[36,164902,162467],{"class":42},[36,164904,1658],{"class":46},[36,164906,1661],{"class":112},[36,164908,164909],{"class":38,"line":667},[36,164910,659],{"emptyLinePlaceholder":658},[36,164912,164913],{"class":38,"line":679},[36,164914,659],{"emptyLinePlaceholder":658},[36,164916,164917],{"class":38,"line":685},[36,164918,164919],{"class":42},"add_count()\n",[36,164921,164922,164924],{"class":38,"line":691},[36,164923,3486],{"class":112},[36,164925,164926],{"class":42},"(count)\n",[19,164928,164929],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,164931,164933],{"id":164932},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,164935,164936],{},"一个函数中可以调用另一个函数。",[26,164938,164940],{"className":28,"code":164939,"language":30,"meta":31,"style":31},"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",[33,164941,164942,164951,164965,164969,164973,164982,164987,165007,165028,165032,165036,165040],{"__ignoreMap":31},[36,164943,164944,164946,164949],{"class":38,"line":39},[36,164945,1820],{"class":46},[36,164947,164948],{"class":101}," print_line",[36,164950,35540],{"class":42},[36,164952,164953,164955,164957,164959,164961,164963],{"class":38,"line":53},[36,164954,1867],{"class":112},[36,164956,495],{"class":42},[36,164958,36066],{"class":105},[36,164960,1325],{"class":46},[36,164962,82219],{"class":112},[36,164964,922],{"class":42},[36,164966,164967],{"class":38,"line":196},[36,164968,659],{"emptyLinePlaceholder":658},[36,164970,164971],{"class":38,"line":642},[36,164972,659],{"emptyLinePlaceholder":658},[36,164974,164975,164977,164980],{"class":38,"line":655},[36,164976,1820],{"class":46},[36,164978,164979],{"class":101}," print_info",[36,164981,152409],{"class":42},[36,164983,164984],{"class":38,"line":662},[36,164985,164986],{"class":42},"    print_line()\n",[36,164988,164989,164991,164993,164995,164997,164999,165001,165003,165005],{"class":38,"line":667},[36,164990,1867],{"class":112},[36,164992,495],{"class":42},[36,164994,3937],{"class":46},[36,164996,159716],{"class":105},[36,164998,4766],{"class":112},[36,165000,83364],{"class":42},[36,165002,4815],{"class":112},[36,165004,4126],{"class":105},[36,165006,922],{"class":42},[36,165008,165009,165011,165013,165015,165018,165020,165022,165024,165026],{"class":38,"line":679},[36,165010,1867],{"class":112},[36,165012,495],{"class":42},[36,165014,3937],{"class":46},[36,165016,165017],{"class":105},"\"年龄:",[36,165019,4766],{"class":112},[36,165021,73775],{"class":42},[36,165023,4815],{"class":112},[36,165025,4126],{"class":105},[36,165027,922],{"class":42},[36,165029,165030],{"class":38,"line":685},[36,165031,164986],{"class":42},[36,165033,165034],{"class":38,"line":691},[36,165035,659],{"emptyLinePlaceholder":658},[36,165037,165038],{"class":38,"line":696},[36,165039,659],{"emptyLinePlaceholder":658},[36,165041,165042,165045,165047,165049,165051],{"class":38,"line":702},[36,165043,165044],{"class":42},"print_info(",[36,165046,152922],{"class":105},[36,165048,478],{"class":42},[36,165050,4521],{"class":112},[36,165052,922],{"class":42},[19,165054,165055],{},"这种方式可以把小功能组合成大功能。",[14,165057,165059],{"id":165058},"_511-参数检查","5.11 参数检查",[19,165061,165062],{},"函数内部可以检查参数是否合法。",[26,165064,165066],{"className":28,"code":165065,"language":30,"meta":31,"style":31},"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",[33,165067,165068,165077,165089,165095,165105,165109,165113,165130,165134,165146,165157,165163],{"__ignoreMap":31},[36,165069,165070,165072,165075],{"class":38,"line":39},[36,165071,1820],{"class":46},[36,165073,165074],{"class":101}," divide",[36,165076,154127],{"class":42},[36,165078,165079,165081,165083,165085,165087],{"class":38,"line":53},[36,165080,3752],{"class":46},[36,165082,14543],{"class":42},[36,165084,6652],{"class":46},[36,165086,1004],{"class":112},[36,165088,888],{"class":42},[36,165090,165091,165093],{"class":38,"line":196},[36,165092,1239],{"class":46},[36,165094,155206],{"class":112},[36,165096,165097,165099,165101,165103],{"class":38,"line":642},[36,165098,7788],{"class":46},[36,165100,14530],{"class":42},[36,165102,4455],{"class":46},[36,165104,154138],{"class":42},[36,165106,165107],{"class":38,"line":655},[36,165108,659],{"emptyLinePlaceholder":658},[36,165110,165111],{"class":38,"line":662},[36,165112,659],{"emptyLinePlaceholder":658},[36,165114,165115,165117,165119,165122,165124,165126,165128],{"class":38,"line":667},[36,165116,164340],{"class":42},[36,165118,47],{"class":46},[36,165120,165121],{"class":42}," divide(",[36,165123,554],{"class":112},[36,165125,478],{"class":42},[36,165127,1859],{"class":112},[36,165129,922],{"class":42},[36,165131,165132],{"class":38,"line":679},[36,165133,659],{"emptyLinePlaceholder":658},[36,165135,165136,165138,165140,165142,165144],{"class":38,"line":685},[36,165137,2067],{"class":46},[36,165139,164586],{"class":42},[36,165141,42486],{"class":46},[36,165143,1384],{"class":112},[36,165145,888],{"class":42},[36,165147,165148,165150,165152,165155],{"class":38,"line":691},[36,165149,1867],{"class":112},[36,165151,495],{"class":42},[36,165153,165154],{"class":105},"\"除数不能为0\"",[36,165156,922],{"class":42},[36,165158,165159,165161],{"class":38,"line":696},[36,165160,5425],{"class":46},[36,165162,888],{"class":42},[36,165164,165165,165167],{"class":38,"line":702},[36,165166,1867],{"class":112},[36,165168,80139],{"class":42},[14,165170,165172],{"id":165171},"_512-类型提示","5.12 类型提示",[19,165174,165175],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[26,165177,165179],{"className":28,"code":165178,"language":30,"meta":31,"style":31},"def add(a: int, b: int) -> int:\n    return a + b\n",[33,165180,165181,165204],{"__ignoreMap":31},[36,165182,165183,165185,165187,165190,165192,165195,165197,165200,165202],{"class":38,"line":39},[36,165184,1820],{"class":46},[36,165186,8903],{"class":101},[36,165188,165189],{"class":42},"(a: ",[36,165191,1378],{"class":112},[36,165193,165194],{"class":42},", b: ",[36,165196,1378],{"class":112},[36,165198,165199],{"class":42},") -> ",[36,165201,1378],{"class":112},[36,165203,888],{"class":42},[36,165205,165206,165208,165210,165212],{"class":38,"line":53},[36,165207,7788],{"class":46},[36,165209,14530],{"class":42},[36,165211,4354],{"class":46},[36,165213,154138],{"class":42},[19,165215,165216],{},"字符串参数：",[26,165218,165220],{"className":28,"code":165219,"language":30,"meta":31,"style":31},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[33,165221,165222,165239],{"__ignoreMap":31},[36,165223,165224,165226,165228,165231,165233,165235,165237],{"class":38,"line":39},[36,165225,1820],{"class":46},[36,165227,164030],{"class":101},[36,165229,165230],{"class":42},"(name: ",[36,165232,5038],{"class":112},[36,165234,165199],{"class":42},[36,165236,885],{"class":112},[36,165238,888],{"class":42},[36,165240,165241,165243,165245,165247,165249,165251,165253,165255,165257],{"class":38,"line":53},[36,165242,1867],{"class":112},[36,165244,495],{"class":42},[36,165246,3937],{"class":46},[36,165248,160088],{"class":105},[36,165250,4766],{"class":112},[36,165252,83364],{"class":42},[36,165254,4815],{"class":112},[36,165256,4126],{"class":105},[36,165258,922],{"class":42},[19,165260,165261],{},"列表参数：",[26,165263,165265],{"className":28,"code":165264,"language":30,"meta":31,"style":31},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[33,165266,165267,165286,165294,165306,165315],{"__ignoreMap":31},[36,165268,165269,165271,165274,165277,165279,165282,165284],{"class":38,"line":39},[36,165270,1820],{"class":46},[36,165272,165273],{"class":101}," get_total",[36,165275,165276],{"class":42},"(numbers: list[",[36,165278,1378],{"class":112},[36,165280,165281],{"class":42},"]) -> ",[36,165283,1378],{"class":112},[36,165285,888],{"class":42},[36,165287,165288,165290,165292],{"class":38,"line":53},[36,165289,162341],{"class":42},[36,165291,47],{"class":46},[36,165293,1074],{"class":112},[36,165295,165296,165298,165301,165303],{"class":38,"line":196},[36,165297,1909],{"class":46},[36,165299,165300],{"class":42}," number ",[36,165302,1619],{"class":46},[36,165304,165305],{"class":42}," numbers:\n",[36,165307,165308,165310,165312],{"class":38,"line":642},[36,165309,163016],{"class":42},[36,165311,1658],{"class":46},[36,165313,165314],{"class":42}," number\n",[36,165316,165317,165319],{"class":38,"line":655},[36,165318,7788],{"class":46},[36,165320,165321],{"class":42}," total\n",[19,165323,165324],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,165326,165328],{"id":165327},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[26,165330,165332],{"className":28,"code":165331,"language":30,"meta":31,"style":31},"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",[33,165333,165334,165344,165348,165352,165360,165371,165381,165391,165401,165411,165415,165419,165428,165450,165454,165458,165467,165473,165493,165505,165516,165520,165529,165540,165545,165549,165553,165562,165568,165587,165599,165609,165613,165624,165634,165638,165646,165657,165661,165665,165669,165677,165682,165696,165700,165712,165717,165729,165734,165746,165751,165763,165773,165777,165783],{"__ignoreMap":31},[36,165335,165336,165339,165341],{"class":38,"line":39},[36,165337,165338],{"class":42},"balance ",[36,165340,47],{"class":46},[36,165342,165343],{"class":112}," 1000\n",[36,165345,165346],{"class":38,"line":53},[36,165347,659],{"emptyLinePlaceholder":658},[36,165349,165350],{"class":38,"line":196},[36,165351,659],{"emptyLinePlaceholder":658},[36,165353,165354,165356,165358],{"class":38,"line":642},[36,165355,1820],{"class":46},[36,165357,155067],{"class":101},[36,165359,35540],{"class":42},[36,165361,165362,165364,165366,165369],{"class":38,"line":655},[36,165363,1867],{"class":112},[36,165365,495],{"class":42},[36,165367,165368],{"class":105},"\"====== ATM ======\"",[36,165370,922],{"class":42},[36,165372,165373,165375,165377,165379],{"class":38,"line":662},[36,165374,1867],{"class":112},[36,165376,495],{"class":42},[36,165378,163682],{"class":105},[36,165380,922],{"class":42},[36,165382,165383,165385,165387,165389],{"class":38,"line":667},[36,165384,1867],{"class":112},[36,165386,495],{"class":42},[36,165388,163693],{"class":105},[36,165390,922],{"class":42},[36,165392,165393,165395,165397,165399],{"class":38,"line":679},[36,165394,1867],{"class":112},[36,165396,495],{"class":42},[36,165398,163704],{"class":105},[36,165400,922],{"class":42},[36,165402,165403,165405,165407,165409],{"class":38,"line":685},[36,165404,1867],{"class":112},[36,165406,495],{"class":42},[36,165408,163715],{"class":105},[36,165410,922],{"class":42},[36,165412,165413],{"class":38,"line":691},[36,165414,659],{"emptyLinePlaceholder":658},[36,165416,165417],{"class":38,"line":696},[36,165418,659],{"emptyLinePlaceholder":658},[36,165420,165421,165423,165426],{"class":38,"line":702},[36,165422,1820],{"class":46},[36,165424,165425],{"class":101}," show_balance",[36,165427,35540],{"class":42},[36,165429,165430,165432,165434,165436,165439,165441,165444,165446,165448],{"class":38,"line":708},[36,165431,1867],{"class":112},[36,165433,495],{"class":42},[36,165435,3937],{"class":46},[36,165437,165438],{"class":105},"\"当前余额:",[36,165440,4766],{"class":112},[36,165442,165443],{"class":42},"balance",[36,165445,4815],{"class":112},[36,165447,160046],{"class":105},[36,165449,922],{"class":42},[36,165451,165452],{"class":38,"line":713},[36,165453,659],{"emptyLinePlaceholder":658},[36,165455,165456],{"class":38,"line":719},[36,165457,659],{"emptyLinePlaceholder":658},[36,165459,165460,165462,165465],{"class":38,"line":725},[36,165461,1820],{"class":46},[36,165463,165464],{"class":101}," save_money",[36,165466,35540],{"class":42},[36,165468,165469,165471],{"class":38,"line":731},[36,165470,164895],{"class":46},[36,165472,153133],{"class":42},[36,165474,165475,165478,165480,165482,165484,165486,165488,165491],{"class":38,"line":736},[36,165476,165477],{"class":42},"    money ",[36,165479,47],{"class":46},[36,165481,1341],{"class":112},[36,165483,495],{"class":42},[36,165485,57378],{"class":112},[36,165487,495],{"class":42},[36,165489,165490],{"class":105},"\"请输入存款金额:\"",[36,165492,2005],{"class":42},[36,165494,165495,165497,165499,165501,165503],{"class":38,"line":742},[36,165496,3752],{"class":46},[36,165498,153176],{"class":42},[36,165500,5323],{"class":46},[36,165502,1004],{"class":112},[36,165504,888],{"class":42},[36,165506,165507,165509,165511,165514],{"class":38,"line":748},[36,165508,1960],{"class":112},[36,165510,495],{"class":42},[36,165512,165513],{"class":105},"\"金额必须大于0\"",[36,165515,922],{"class":42},[36,165517,165518],{"class":38,"line":754},[36,165519,155395],{"class":46},[36,165521,165522,165525,165527],{"class":38,"line":760},[36,165523,165524],{"class":42},"    balance ",[36,165526,1658],{"class":46},[36,165528,153209],{"class":42},[36,165530,165531,165533,165535,165538],{"class":38,"line":766},[36,165532,1867],{"class":112},[36,165534,495],{"class":42},[36,165536,165537],{"class":105},"\"存款成功\"",[36,165539,922],{"class":42},[36,165541,165542],{"class":38,"line":772},[36,165543,165544],{"class":42},"    show_balance()\n",[36,165546,165547],{"class":38,"line":778},[36,165548,659],{"emptyLinePlaceholder":658},[36,165550,165551],{"class":38,"line":783},[36,165552,659],{"emptyLinePlaceholder":658},[36,165554,165555,165557,165560],{"class":38,"line":789},[36,165556,1820],{"class":46},[36,165558,165559],{"class":101}," withdraw_money",[36,165561,35540],{"class":42},[36,165563,165564,165566],{"class":38,"line":795},[36,165565,164895],{"class":46},[36,165567,153133],{"class":42},[36,165569,165570,165572,165574,165576,165578,165580,165582,165585],{"class":38,"line":801},[36,165571,165477],{"class":42},[36,165573,47],{"class":46},[36,165575,1341],{"class":112},[36,165577,495],{"class":42},[36,165579,57378],{"class":112},[36,165581,495],{"class":42},[36,165583,165584],{"class":105},"\"请输入取款金额:\"",[36,165586,2005],{"class":42},[36,165588,165589,165591,165593,165595,165597],{"class":38,"line":807},[36,165590,3752],{"class":46},[36,165592,153176],{"class":42},[36,165594,5323],{"class":46},[36,165596,1004],{"class":112},[36,165598,888],{"class":42},[36,165600,165601,165603,165605,165607],{"class":38,"line":813},[36,165602,1960],{"class":112},[36,165604,495],{"class":42},[36,165606,165513],{"class":105},[36,165608,922],{"class":42},[36,165610,165611],{"class":38,"line":819},[36,165612,155395],{"class":46},[36,165614,165615,165617,165619,165621],{"class":38,"line":824},[36,165616,3752],{"class":46},[36,165618,153176],{"class":42},[36,165620,4829],{"class":46},[36,165622,165623],{"class":42}," balance:\n",[36,165625,165626,165628,165630,165632],{"class":38,"line":829},[36,165627,1960],{"class":112},[36,165629,495],{"class":42},[36,165631,153271],{"class":105},[36,165633,922],{"class":42},[36,165635,165636],{"class":38,"line":851},[36,165637,155395],{"class":46},[36,165639,165640,165642,165644],{"class":38,"line":868},[36,165641,165524],{"class":42},[36,165643,153286],{"class":46},[36,165645,153209],{"class":42},[36,165647,165648,165650,165652,165655],{"class":38,"line":873},[36,165649,1867],{"class":112},[36,165651,495],{"class":42},[36,165653,165654],{"class":105},"\"取款成功\"",[36,165656,922],{"class":42},[36,165658,165659],{"class":38,"line":891},[36,165660,165544],{"class":42},[36,165662,165663],{"class":38,"line":906},[36,165664,659],{"emptyLinePlaceholder":658},[36,165666,165667],{"class":38,"line":925},[36,165668,659],{"emptyLinePlaceholder":658},[36,165670,165671,165673,165675],{"class":38,"line":943},[36,165672,112138],{"class":46},[36,165674,98843],{"class":112},[36,165676,888],{"class":42},[36,165678,165679],{"class":38,"line":948},[36,165680,165681],{"class":42},"    show_menu()\n",[36,165683,165684,165686,165688,165690,165692,165694],{"class":38,"line":971},[36,165685,163726],{"class":42},[36,165687,47],{"class":46},[36,165689,64160],{"class":112},[36,165691,495],{"class":42},[36,165693,156107],{"class":105},[36,165695,922],{"class":42},[36,165697,165698],{"class":38,"line":992},[36,165699,659],{"emptyLinePlaceholder":658},[36,165701,165702,165704,165706,165708,165710],{"class":38,"line":1020},[36,165703,3752],{"class":46},[36,165705,156120],{"class":42},[36,165707,6652],{"class":46},[36,165709,156125],{"class":105},[36,165711,888],{"class":42},[36,165713,165714],{"class":38,"line":1036},[36,165715,165716],{"class":42},"        show_balance()\n",[36,165718,165719,165721,165723,165725,165727],{"class":38,"line":1041},[36,165720,42851],{"class":46},[36,165722,156120],{"class":42},[36,165724,6652],{"class":46},[36,165726,156144],{"class":105},[36,165728,888],{"class":42},[36,165730,165731],{"class":38,"line":1052},[36,165732,165733],{"class":42},"        save_money()\n",[36,165735,165736,165738,165740,165742,165744],{"class":38,"line":1065},[36,165737,42851],{"class":46},[36,165739,156120],{"class":42},[36,165741,6652],{"class":46},[36,165743,156162],{"class":105},[36,165745,888],{"class":42},[36,165747,165748],{"class":38,"line":1077},[36,165749,165750],{"class":42},"        withdraw_money()\n",[36,165752,165753,165755,165757,165759,165761],{"class":38,"line":1082},[36,165754,42851],{"class":46},[36,165756,156120],{"class":42},[36,165758,6652],{"class":46},[36,165760,156216],{"class":105},[36,165762,888],{"class":42},[36,165764,165765,165767,165769,165771],{"class":38,"line":1125},[36,165766,1960],{"class":112},[36,165768,495],{"class":42},[36,165770,156227],{"class":105},[36,165772,922],{"class":42},[36,165774,165775],{"class":38,"line":1164},[36,165776,35215],{"class":46},[36,165778,165779,165781],{"class":38,"line":1169},[36,165780,161056],{"class":46},[36,165782,888],{"class":42},[36,165784,165785,165787,165789,165791],{"class":38,"line":1180},[36,165786,1960],{"class":112},[36,165788,495],{"class":42},[36,165790,156248],{"class":105},[36,165792,922],{"class":42},[19,165794,165795],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,165797,165799],{"id":165798},"_514-易错点","5.14 易错点",[211,165801,165802,165805,165808,165813,165818,165821],{},[214,165803,165804],{},"函数定义后必须调用才会执行。",[214,165806,165807],{},"函数名后面有括号才是调用。",[214,165809,165810,165812],{},[33,165811,2822],{}," 后面的代码不会执行。",[214,165814,165815,165816,224],{},"没有返回值的函数默认返回 ",[33,165817,885],{},[214,165819,165820],{},"局部变量不能在函数外部访问。",[214,165822,165823,165824,165826],{},"不要滥用 ",[33,165825,164860],{},"，更好的方式是让函数返回新值。",[19,165828,165829,165830,165832],{},"例如不用 ",[33,165831,164860],{}," 改写存款：",[26,165834,165836],{"className":28,"code":165835,"language":30,"meta":31,"style":31},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[33,165837,165838,165847,165858,165862,165866,165874,165887],{"__ignoreMap":31},[36,165839,165840,165842,165844],{"class":38,"line":39},[36,165841,1820],{"class":46},[36,165843,165464],{"class":101},[36,165845,165846],{"class":42},"(balance, money):\n",[36,165848,165849,165851,165854,165856],{"class":38,"line":53},[36,165850,7788],{"class":46},[36,165852,165853],{"class":42}," balance ",[36,165855,4354],{"class":46},[36,165857,153209],{"class":42},[36,165859,165860],{"class":38,"line":196},[36,165861,659],{"emptyLinePlaceholder":658},[36,165863,165864],{"class":38,"line":642},[36,165865,659],{"emptyLinePlaceholder":658},[36,165867,165868,165870,165872],{"class":38,"line":655},[36,165869,165338],{"class":42},[36,165871,47],{"class":46},[36,165873,165343],{"class":112},[36,165875,165876,165878,165880,165883,165885],{"class":38,"line":662},[36,165877,165338],{"class":42},[36,165879,47],{"class":46},[36,165881,165882],{"class":42}," save_money(balance, ",[36,165884,5445],{"class":112},[36,165886,922],{"class":42},[36,165888,165889,165891],{"class":38,"line":667},[36,165890,3486],{"class":112},[36,165892,165893],{"class":42},"(balance)\n",[14,165895,165897],{"id":165896},"_515-本章练习","5.15 本章练习",[211,165899,165900,165907,165913,165919,165925],{},[214,165901,165902,165903,165906],{},"定义函数 ",[33,165904,165905],{},"print_student(name, age)","，输出学生信息。",[214,165908,165902,165909,165912],{},[33,165910,165911],{},"get_max(a, b, c)","，返回三个数中的最大值。",[214,165914,165902,165915,165918],{},[33,165916,165917],{},"is_even(num)","，判断一个数是否为偶数。",[214,165920,165902,165921,165924],{},[33,165922,165923],{},"calculate_bmi(weight, height)","，返回 BMI。",[214,165926,165927],{},"把第 4 章的菜单程序拆分成多个函数。",[3785,165929,165930],{},"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":31,"searchDepth":53,"depth":53,"links":165932},[165933,165934,165935,165936,165937,165938,165939,165940,165941,165945,165946,165947,165948,165949,165950],{"id":163953,"depth":53,"text":163954},{"id":163994,"depth":53,"text":163995},{"id":164084,"depth":53,"text":164085},{"id":164165,"depth":53,"text":164166},{"id":164298,"depth":53,"text":164299},{"id":164420,"depth":53,"text":164421},{"id":164542,"depth":53,"text":164543},{"id":164619,"depth":53,"text":164620},{"id":164741,"depth":53,"text":164742,"children":165942},[165943,165944],{"id":164745,"depth":196,"text":164746},{"id":164803,"depth":196,"text":164804},{"id":164932,"depth":53,"text":164933},{"id":165058,"depth":53,"text":165059},{"id":165171,"depth":53,"text":165172},{"id":165327,"depth":53,"text":165328},{"id":165798,"depth":53,"text":165799},{"id":165896,"depth":53,"text":165897},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":163945,"description":26998},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":165957,"title":165958,"body":165959,"description":26998,"extension":3817,"meta":169003,"navigation":658,"path":169004,"seo":169005,"stem":169006,"__hash__":169007},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":165960,"toc":168984},[165961,165964,165968,165971,165974,166078,166081,166085,166088,166168,166171,166175,166178,166238,166241,166277,166280,166295,166299,166372,166375,166430,166433,166503,166506,166590,166600,166658,166662,166707,166710,166736,166739,166845,166849,166852,166894,166897,166961,166964,166968,166971,167032,167035,167065,167068,167106,167110,167113,167122,167125,167249,167252,167293,167297,167300,167311,167351,167354,167369,167374,167377,167444,167447,167537,167541,167544,167592,167595,167622,167624,167654,167657,167677,167680,167711,167714,167747,167751,167754,167778,167781,167805,167808,167832,167836,167839,167969,167972,168052,168055,168130,168134,168137,168187,168190,168232,168235,168259,168261,168285,168288,168343,168346,168412,168416,168419,168422,168460,168463,168516,168519,168565,168568,168601,168604,168608,168927,168931,168960,168964,168981],[10,165962,165958],{"id":165963},"_6-数据容器",[14,165965,165967],{"id":165966},"_61-什么是数据容器","6.1 什么是数据容器",[19,165969,165970],{},"数据容器用于一次保存多个数据。",[19,165972,165973],{},"常见容器：",[248,165975,165976,165993],{},[251,165977,165978],{},[254,165979,165980,165982,165985,165988,165991],{},[257,165981,29385],{},[257,165983,165984],{},"是否有序",[257,165986,165987],{},"是否可变",[257,165989,165990],{},"是否允许重复",[257,165992,31103],{},[265,165994,165995,166013,166029,166044,166061],{},[254,165996,165997,166000,166003,166006,166009],{},[270,165998,165999],{},"list列表",[270,166001,166002],{},"有序",[270,166004,166005],{},"可变",[270,166007,166008],{},"允许",[270,166010,166011],{},[33,166012,158291],{},[254,166014,166015,166018,166020,166023,166025],{},[270,166016,166017],{},"tuple元组",[270,166019,166002],{},[270,166021,166022],{},"不可变",[270,166024,166008],{},[270,166026,166027],{},[33,166028,158304],{},[254,166030,166031,166034,166036,166038,166040],{},[270,166032,166033],{},"str字符串",[270,166035,166002],{},[270,166037,166022],{},[270,166039,166008],{},[270,166041,166042],{},[33,166043,158914],{},[254,166045,166046,166049,166052,166054,166057],{},[270,166047,166048],{},"set集合",[270,166050,166051],{},"无序",[270,166053,166005],{},[270,166055,166056],{},"不允许",[270,166058,166059],{},[33,166060,158329],{},[254,166062,166063,166066,166068,166070,166073],{},[270,166064,166065],{},"dict字典",[270,166067,166002],{},[270,166069,166005],{},[270,166071,166072],{},"key不允许重复",[270,166074,166075],{},[33,166076,166077],{},"{\"name\": \"小明\"}",[19,166079,166080],{},"Python 3.7 之后，字典保持插入顺序。",[14,166082,166084],{"id":166083},"_62-列表list","6.2 列表list",[19,166086,166087],{},"列表用于保存一组有顺序的数据。",[26,166089,166091],{"className":28,"code":166090,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[33,166092,166093,166113,166138,166159],{"__ignoreMap":31},[36,166094,166095,166097,166099,166101,166103,166105,166107,166109,166111],{"class":38,"line":39},[36,166096,163414],{"class":42},[36,166098,47],{"class":46},[36,166100,55783],{"class":42},[36,166102,152922],{"class":105},[36,166104,478],{"class":42},[36,166106,153970],{"class":105},[36,166108,478],{"class":42},[36,166110,162765],{"class":105},[36,166112,36806],{"class":42},[36,166114,166115,166118,166120,166122,166124,166126,166128,166130,166132,166134,166136],{"class":38,"line":53},[36,166116,166117],{"class":42},"numbers ",[36,166119,47],{"class":46},[36,166121,55783],{"class":42},[36,166123,4092],{"class":112},[36,166125,478],{"class":42},[36,166127,498],{"class":112},[36,166129,478],{"class":42},[36,166131,1982],{"class":112},[36,166133,478],{"class":42},[36,166135,4168],{"class":112},[36,166137,36806],{"class":42},[36,166139,166140,166143,166145,166147,166149,166151,166153,166155,166157],{"class":38,"line":196},[36,166141,166142],{"class":42},"mixed ",[36,166144,47],{"class":46},[36,166146,55783],{"class":42},[36,166148,152922],{"class":105},[36,166150,478],{"class":42},[36,166152,4521],{"class":112},[36,166154,478],{"class":42},[36,166156,35066],{"class":112},[36,166158,36806],{"class":42},[36,166160,166161,166164,166166],{"class":38,"line":642},[36,166162,166163],{"class":42},"empty ",[36,166165,47],{"class":46},[36,166167,55395],{"class":42},[19,166169,166170],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,166172,166174],{"id":166173},"_63-列表索引","6.3 列表索引",[19,166176,166177],{},"正向索引从 0 开始：",[26,166179,166181],{"className":28,"code":166180,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[33,166182,166183,166203,166207,166218,166228],{"__ignoreMap":31},[36,166184,166185,166187,166189,166191,166193,166195,166197,166199,166201],{"class":38,"line":39},[36,166186,163414],{"class":42},[36,166188,47],{"class":46},[36,166190,55783],{"class":42},[36,166192,152922],{"class":105},[36,166194,478],{"class":42},[36,166196,153970],{"class":105},[36,166198,478],{"class":42},[36,166200,162765],{"class":105},[36,166202,36806],{"class":42},[36,166204,166205],{"class":38,"line":53},[36,166206,659],{"emptyLinePlaceholder":658},[36,166208,166209,166211,166214,166216],{"class":38,"line":196},[36,166210,3486],{"class":112},[36,166212,166213],{"class":42},"(names[",[36,166215,1859],{"class":112},[36,166217,8353],{"class":42},[36,166219,166220,166222,166224,166226],{"class":38,"line":642},[36,166221,3486],{"class":112},[36,166223,166213],{"class":42},[36,166225,4092],{"class":112},[36,166227,8353],{"class":42},[36,166229,166230,166232,166234,166236],{"class":38,"line":655},[36,166231,3486],{"class":112},[36,166233,166213],{"class":42},[36,166235,498],{"class":112},[36,166237,8353],{"class":42},[19,166239,166240],{},"反向索引从 -1 开始：",[26,166242,166244],{"className":28,"code":166243,"language":30,"meta":31,"style":31},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[33,166245,166246,166262],{"__ignoreMap":31},[36,166247,166248,166250,166252,166254,166256,166259],{"class":38,"line":39},[36,166249,3486],{"class":112},[36,166251,166213],{"class":42},[36,166253,1308],{"class":46},[36,166255,4092],{"class":112},[36,166257,166258],{"class":42},"])  ",[36,166260,166261],{"class":3943},"# 小刚\n",[36,166263,166264,166266,166268,166270,166272,166274],{"class":38,"line":53},[36,166265,3486],{"class":112},[36,166267,166213],{"class":42},[36,166269,1308],{"class":46},[36,166271,498],{"class":112},[36,166273,166258],{"class":42},[36,166275,166276],{"class":3943},"# 小红\n",[19,166278,166279],{},"索引越界会报错：",[26,166281,166283],{"className":28,"code":166282,"language":30,"meta":31,"style":31},"print(names[3])\n",[33,166284,166285],{"__ignoreMap":31},[36,166286,166287,166289,166291,166293],{"class":38,"line":39},[36,166288,3486],{"class":112},[36,166290,166213],{"class":42},[36,166292,1982],{"class":112},[36,166294,8353],{"class":42},[14,166296,166298],{"id":166297},"_64-列表常用方法","6.4 列表常用方法",[26,166300,166302],{"className":28,"code":166301,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[33,166303,166304,166320,166324,166333,166347,166361,166365],{"__ignoreMap":31},[36,166305,166306,166308,166310,166312,166314,166316,166318],{"class":38,"line":39},[36,166307,163414],{"class":42},[36,166309,47],{"class":46},[36,166311,55783],{"class":42},[36,166313,152922],{"class":105},[36,166315,478],{"class":42},[36,166317,153970],{"class":105},[36,166319,36806],{"class":42},[36,166321,166322],{"class":38,"line":53},[36,166323,659],{"emptyLinePlaceholder":658},[36,166325,166326,166329,166331],{"class":38,"line":196},[36,166327,166328],{"class":42},"names.append(",[36,166330,162765],{"class":105},[36,166332,922],{"class":42},[36,166334,166335,166338,166340,166342,166345],{"class":38,"line":642},[36,166336,166337],{"class":42},"names.insert(",[36,166339,4092],{"class":112},[36,166341,478],{"class":42},[36,166343,166344],{"class":105},"\"小李\"",[36,166346,922],{"class":42},[36,166348,166349,166352,166354,166356,166359],{"class":38,"line":655},[36,166350,166351],{"class":42},"names.extend([",[36,166353,12364],{"class":105},[36,166355,478],{"class":42},[36,166357,166358],{"class":105},"\"小赵\"",[36,166360,8353],{"class":42},[36,166362,166363],{"class":38,"line":662},[36,166364,659],{"emptyLinePlaceholder":658},[36,166366,166367,166369],{"class":38,"line":667},[36,166368,3486],{"class":112},[36,166370,166371],{"class":42},"(names)\n",[19,166373,166374],{},"删除元素：",[26,166376,166378],{"className":28,"code":166377,"language":30,"meta":31,"style":31},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[33,166379,166380,166389,166399,166413,166425],{"__ignoreMap":31},[36,166381,166382,166385,166387],{"class":38,"line":39},[36,166383,166384],{"class":42},"names.remove(",[36,166386,153970],{"class":105},[36,166388,922],{"class":42},[36,166390,166391,166394,166396],{"class":38,"line":53},[36,166392,166393],{"class":42},"last ",[36,166395,47],{"class":46},[36,166397,166398],{"class":42}," names.pop()\n",[36,166400,166401,166404,166406,166409,166411],{"class":38,"line":196},[36,166402,166403],{"class":42},"first ",[36,166405,47],{"class":46},[36,166407,166408],{"class":42}," names.pop(",[36,166410,1859],{"class":112},[36,166412,922],{"class":42},[36,166414,166415,166418,166421,166423],{"class":38,"line":642},[36,166416,166417],{"class":46},"del",[36,166419,166420],{"class":42}," names[",[36,166422,1859],{"class":112},[36,166424,36806],{"class":42},[36,166426,166427],{"class":38,"line":655},[36,166428,166429],{"class":42},"names.clear()\n",[19,166431,166432],{},"查询和统计：",[26,166434,166436],{"className":28,"code":166435,"language":30,"meta":31,"style":31},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[33,166437,166438,166466,166470,166481,166492],{"__ignoreMap":31},[36,166439,166440,166442,166444,166446,166448,166450,166452,166454,166456,166458,166460,166462,166464],{"class":38,"line":39},[36,166441,166117],{"class":42},[36,166443,47],{"class":46},[36,166445,55783],{"class":42},[36,166447,4092],{"class":112},[36,166449,478],{"class":42},[36,166451,498],{"class":112},[36,166453,478],{"class":42},[36,166455,1982],{"class":112},[36,166457,478],{"class":42},[36,166459,498],{"class":112},[36,166461,478],{"class":42},[36,166463,4168],{"class":112},[36,166465,36806],{"class":42},[36,166467,166468],{"class":38,"line":53},[36,166469,659],{"emptyLinePlaceholder":658},[36,166471,166472,166474,166477,166479],{"class":38,"line":196},[36,166473,3486],{"class":112},[36,166475,166476],{"class":42},"(numbers.index(",[36,166478,1982],{"class":112},[36,166480,2005],{"class":42},[36,166482,166483,166485,166488,166490],{"class":38,"line":642},[36,166484,3486],{"class":112},[36,166486,166487],{"class":42},"(numbers.count(",[36,166489,498],{"class":112},[36,166491,2005],{"class":42},[36,166493,166494,166496,166498,166500],{"class":38,"line":655},[36,166495,3486],{"class":112},[36,166497,495],{"class":42},[36,166499,11049],{"class":112},[36,166501,166502],{"class":42},"(numbers))\n",[19,166504,166505],{},"排序：",[26,166507,166509],{"className":28,"code":166508,"language":30,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[33,166510,166511,166535,166539,166544,166551,166555,166569,166575,166579,166584],{"__ignoreMap":31},[36,166512,166513,166515,166517,166519,166521,166523,166525,166527,166529,166531,166533],{"class":38,"line":39},[36,166514,166117],{"class":42},[36,166516,47],{"class":46},[36,166518,55783],{"class":42},[36,166520,1982],{"class":112},[36,166522,478],{"class":42},[36,166524,4092],{"class":112},[36,166526,478],{"class":42},[36,166528,4194],{"class":112},[36,166530,478],{"class":42},[36,166532,498],{"class":112},[36,166534,36806],{"class":42},[36,166536,166537],{"class":38,"line":53},[36,166538,659],{"emptyLinePlaceholder":658},[36,166540,166541],{"class":38,"line":196},[36,166542,166543],{"class":42},"numbers.sort()\n",[36,166545,166546,166548],{"class":38,"line":642},[36,166547,3486],{"class":112},[36,166549,166550],{"class":42},"(numbers)\n",[36,166552,166553],{"class":38,"line":655},[36,166554,659],{"emptyLinePlaceholder":658},[36,166556,166557,166560,166563,166565,166567],{"class":38,"line":662},[36,166558,166559],{"class":42},"numbers.sort(",[36,166561,166562],{"class":468},"reverse",[36,166564,47],{"class":46},[36,166566,35066],{"class":112},[36,166568,922],{"class":42},[36,166570,166571,166573],{"class":38,"line":667},[36,166572,3486],{"class":112},[36,166574,166550],{"class":42},[36,166576,166577],{"class":38,"line":679},[36,166578,659],{"emptyLinePlaceholder":658},[36,166580,166581],{"class":38,"line":685},[36,166582,166583],{"class":42},"numbers.reverse()\n",[36,166585,166586,166588],{"class":38,"line":691},[36,166587,3486],{"class":112},[36,166589,166550],{"class":42},[19,166591,166592,166595,166596,166599],{},[33,166593,166594],{},"sort()"," 会修改原列表，",[33,166597,166598],{},"sorted()"," 返回新列表。",[26,166601,166603],{"className":28,"code":166602,"language":30,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[33,166604,166605,166629,166641,166645,166651],{"__ignoreMap":31},[36,166606,166607,166609,166611,166613,166615,166617,166619,166621,166623,166625,166627],{"class":38,"line":39},[36,166608,166117],{"class":42},[36,166610,47],{"class":46},[36,166612,55783],{"class":42},[36,166614,1982],{"class":112},[36,166616,478],{"class":42},[36,166618,4092],{"class":112},[36,166620,478],{"class":42},[36,166622,4194],{"class":112},[36,166624,478],{"class":42},[36,166626,498],{"class":112},[36,166628,36806],{"class":42},[36,166630,166631,166634,166636,166639],{"class":38,"line":53},[36,166632,166633],{"class":42},"new_numbers ",[36,166635,47],{"class":46},[36,166637,166638],{"class":112}," sorted",[36,166640,166550],{"class":42},[36,166642,166643],{"class":38,"line":196},[36,166644,659],{"emptyLinePlaceholder":658},[36,166646,166647,166649],{"class":38,"line":642},[36,166648,3486],{"class":112},[36,166650,166550],{"class":42},[36,166652,166653,166655],{"class":38,"line":655},[36,166654,3486],{"class":112},[36,166656,166657],{"class":42},"(new_numbers)\n",[14,166659,166661],{"id":166660},"_65-列表遍历","6.5 列表遍历",[26,166663,166665],{"className":28,"code":166664,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[33,166666,166667,166687,166691,166701],{"__ignoreMap":31},[36,166668,166669,166671,166673,166675,166677,166679,166681,166683,166685],{"class":38,"line":39},[36,166670,163414],{"class":42},[36,166672,47],{"class":46},[36,166674,55783],{"class":42},[36,166676,152922],{"class":105},[36,166678,478],{"class":42},[36,166680,153970],{"class":105},[36,166682,478],{"class":42},[36,166684,162765],{"class":105},[36,166686,36806],{"class":42},[36,166688,166689],{"class":38,"line":53},[36,166690,659],{"emptyLinePlaceholder":658},[36,166692,166693,166695,166697,166699],{"class":38,"line":196},[36,166694,3120],{"class":46},[36,166696,163450],{"class":42},[36,166698,1619],{"class":46},[36,166700,163455],{"class":42},[36,166702,166703,166705],{"class":38,"line":642},[36,166704,1867],{"class":112},[36,166706,153694],{"class":42},[19,166708,166709],{},"需要索引时：",[26,166711,166713],{"className":28,"code":166712,"language":30,"meta":31,"style":31},"for index, name in enumerate(names):\n    print(index, name)\n",[33,166714,166715,166729],{"__ignoreMap":31},[36,166716,166717,166719,166722,166724,166726],{"class":38,"line":39},[36,166718,3120],{"class":46},[36,166720,166721],{"class":42}," index, name ",[36,166723,1619],{"class":46},[36,166725,35195],{"class":112},[36,166727,166728],{"class":42},"(names):\n",[36,166730,166731,166733],{"class":38,"line":53},[36,166732,1867],{"class":112},[36,166734,166735],{"class":42},"(index, name)\n",[19,166737,166738],{},"统计总分：",[26,166740,166742],{"className":28,"code":166741,"language":30,"meta":31,"style":31},"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",[33,166743,166744,166769,166777,166781,166792,166800,166804,166821],{"__ignoreMap":31},[36,166745,166746,166749,166751,166753,166755,166757,166759,166761,166763,166765,166767],{"class":38,"line":39},[36,166747,166748],{"class":42},"scores ",[36,166750,47],{"class":46},[36,166752,55783],{"class":42},[36,166754,4732],{"class":112},[36,166756,478],{"class":42},[36,166758,4606],{"class":112},[36,166760,478],{"class":42},[36,166762,4129],{"class":112},[36,166764,478],{"class":42},[36,166766,4432],{"class":112},[36,166768,36806],{"class":42},[36,166770,166771,166773,166775],{"class":38,"line":53},[36,166772,160294],{"class":42},[36,166774,47],{"class":46},[36,166776,1074],{"class":112},[36,166778,166779],{"class":38,"line":196},[36,166780,659],{"emptyLinePlaceholder":658},[36,166782,166783,166785,166787,166789],{"class":38,"line":642},[36,166784,3120],{"class":46},[36,166786,160817],{"class":42},[36,166788,1619],{"class":46},[36,166790,166791],{"class":42}," scores:\n",[36,166793,166794,166796,166798],{"class":38,"line":655},[36,166795,162341],{"class":42},[36,166797,1658],{"class":46},[36,166799,5314],{"class":42},[36,166801,166802],{"class":38,"line":662},[36,166803,659],{"emptyLinePlaceholder":658},[36,166805,166806,166809,166811,166814,166816,166818],{"class":38,"line":667},[36,166807,166808],{"class":42},"avg ",[36,166810,47],{"class":46},[36,166812,166813],{"class":42}," total ",[36,166815,4455],{"class":46},[36,166817,11022],{"class":112},[36,166819,166820],{"class":42},"(scores)\n",[36,166822,166823,166825,166827,166829,166832,166834,166837,166839,166841,166843],{"class":38,"line":679},[36,166824,3486],{"class":112},[36,166826,495],{"class":42},[36,166828,3937],{"class":46},[36,166830,166831],{"class":105},"\"平均分:",[36,166833,4766],{"class":112},[36,166835,166836],{"class":42},"avg",[36,166838,160193],{"class":46},[36,166840,4815],{"class":112},[36,166842,4126],{"class":105},[36,166844,922],{"class":42},[14,166846,166848],{"id":166847},"_66-元组tuple","6.6 元组tuple",[19,166850,166851],{},"元组和列表类似，但不可修改。",[26,166853,166855],{"className":28,"code":166854,"language":30,"meta":31,"style":31},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[33,166856,166857,166874],{"__ignoreMap":31},[36,166858,166859,166862,166864,166866,166868,166870,166872],{"class":38,"line":39},[36,166860,166861],{"class":42},"point ",[36,166863,47],{"class":46},[36,166865,5386],{"class":42},[36,166867,554],{"class":112},[36,166869,478],{"class":42},[36,166871,1921],{"class":112},[36,166873,922],{"class":42},[36,166875,166876,166878,166880,166882,166884,166886,166888,166890,166892],{"class":38,"line":53},[36,166877,3271],{"class":42},[36,166879,47],{"class":46},[36,166881,5386],{"class":42},[36,166883,152922],{"class":105},[36,166885,478],{"class":42},[36,166887,4521],{"class":112},[36,166889,478],{"class":42},[36,166891,72824],{"class":105},[36,166893,922],{"class":42},[19,166895,166896],{},"单元素元组必须加逗号：",[26,166898,166900],{"className":28,"code":166899,"language":30,"meta":31,"style":31},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[33,166901,166902,166916,166929,166933,166947],{"__ignoreMap":31},[36,166903,166904,166907,166909,166911,166913],{"class":38,"line":39},[36,166905,166906],{"class":42},"t1 ",[36,166908,47],{"class":46},[36,166910,5386],{"class":42},[36,166912,554],{"class":112},[36,166914,166915],{"class":42},",)\n",[36,166917,166918,166921,166923,166925,166927],{"class":38,"line":53},[36,166919,166920],{"class":42},"t2 ",[36,166922,47],{"class":46},[36,166924,5386],{"class":42},[36,166926,554],{"class":112},[36,166928,922],{"class":42},[36,166930,166931],{"class":38,"line":196},[36,166932,659],{"emptyLinePlaceholder":658},[36,166934,166935,166937,166939,166941,166944],{"class":38,"line":642},[36,166936,3486],{"class":112},[36,166938,495],{"class":42},[36,166940,106600],{"class":112},[36,166942,166943],{"class":42},"(t1))  ",[36,166945,166946],{"class":3943},"# tuple\n",[36,166948,166949,166951,166953,166955,166958],{"class":38,"line":655},[36,166950,3486],{"class":112},[36,166952,495],{"class":42},[36,166954,106600],{"class":112},[36,166956,166957],{"class":42},"(t2))  ",[36,166959,166960],{"class":3943},"# int\n",[19,166962,166963],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,166965,166967],{"id":166966},"_67-字符串str","6.7 字符串str",[19,166969,166970],{},"字符串也是序列，可以索引、切片和遍历。",[26,166972,166974],{"className":28,"code":166973,"language":30,"meta":31,"style":31},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[33,166975,166976,166984,166988,166999,167011,167015,167026],{"__ignoreMap":31},[36,166977,166978,166980,166982],{"class":38,"line":39},[36,166979,159478],{"class":42},[36,166981,47],{"class":46},[36,166983,162715],{"class":105},[36,166985,166986],{"class":38,"line":53},[36,166987,659],{"emptyLinePlaceholder":658},[36,166989,166990,166992,166995,166997],{"class":38,"line":196},[36,166991,3486],{"class":112},[36,166993,166994],{"class":42},"(text[",[36,166996,1859],{"class":112},[36,166998,8353],{"class":42},[36,167000,167001,167003,167005,167007,167009],{"class":38,"line":642},[36,167002,3486],{"class":112},[36,167004,166994],{"class":42},[36,167006,1308],{"class":46},[36,167008,4092],{"class":112},[36,167010,8353],{"class":42},[36,167012,167013],{"class":38,"line":655},[36,167014,659],{"emptyLinePlaceholder":658},[36,167016,167017,167019,167021,167023],{"class":38,"line":662},[36,167018,3120],{"class":46},[36,167020,162726],{"class":42},[36,167022,1619],{"class":46},[36,167024,167025],{"class":42}," text:\n",[36,167027,167028,167030],{"class":38,"line":667},[36,167029,1867],{"class":112},[36,167031,162737],{"class":42},[19,167033,167034],{},"字符串不可变：",[26,167036,167038],{"className":28,"code":167037,"language":30,"meta":31,"style":31},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[33,167039,167040,167048],{"__ignoreMap":31},[36,167041,167042,167044,167046],{"class":38,"line":39},[36,167043,159478],{"class":42},[36,167045,47],{"class":46},[36,167047,162715],{"class":105},[36,167049,167050,167053,167055,167057,167059,167062],{"class":38,"line":53},[36,167051,167052],{"class":42},"text[",[36,167054,1859],{"class":112},[36,167056,8140],{"class":42},[36,167058,47],{"class":46},[36,167060,167061],{"class":105}," \"P\"",[36,167063,167064],{"class":3943},"  # 报错\n",[19,167066,167067],{},"如果要得到新字符串：",[26,167069,167071],{"className":28,"code":167070,"language":30,"meta":31,"style":31},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[33,167072,167073,167081,167099],{"__ignoreMap":31},[36,167074,167075,167077,167079],{"class":38,"line":39},[36,167076,159478],{"class":42},[36,167078,47],{"class":46},[36,167080,162715],{"class":105},[36,167082,167083,167085,167087,167089,167091,167094,167096],{"class":38,"line":53},[36,167084,159478],{"class":42},[36,167086,47],{"class":46},[36,167088,167061],{"class":105},[36,167090,49124],{"class":46},[36,167092,167093],{"class":42}," text[",[36,167095,4092],{"class":112},[36,167097,167098],{"class":42},":]\n",[36,167100,167101,167103],{"class":38,"line":196},[36,167102,3486],{"class":112},[36,167104,167105],{"class":42},"(text)\n",[14,167107,167109],{"id":167108},"_68-切片","6.8 切片",[19,167111,167112],{},"切片用于从序列中取一部分。",[26,167114,167116],{"className":28,"code":167115,"language":30,"meta":31,"style":31},"序列[开始:结束:步长]\n",[33,167117,167118],{"__ignoreMap":31},[36,167119,167120],{"class":38,"line":39},[36,167121,167115],{"class":42},[19,167123,167124],{},"结束位置不包含。",[26,167126,167128],{"className":28,"code":167127,"language":30,"meta":31,"style":31},"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",[33,167129,167130,167167,167171,167190,167205,167219,167233],{"__ignoreMap":31},[36,167131,167132,167135,167137,167139,167141,167143,167145,167147,167149,167151,167153,167155,167157,167159,167161,167163,167165],{"class":38,"line":39},[36,167133,167134],{"class":42},"nums ",[36,167136,47],{"class":46},[36,167138,55783],{"class":42},[36,167140,1859],{"class":112},[36,167142,478],{"class":42},[36,167144,4092],{"class":112},[36,167146,478],{"class":42},[36,167148,498],{"class":112},[36,167150,478],{"class":42},[36,167152,1982],{"class":112},[36,167154,478],{"class":42},[36,167156,4168],{"class":112},[36,167158,478],{"class":42},[36,167160,4194],{"class":112},[36,167162,478],{"class":42},[36,167164,4219],{"class":112},[36,167166,36806],{"class":42},[36,167168,167169],{"class":38,"line":53},[36,167170,659],{"emptyLinePlaceholder":658},[36,167172,167173,167175,167178,167180,167182,167184,167187],{"class":38,"line":196},[36,167174,3486],{"class":112},[36,167176,167177],{"class":42},"(nums[",[36,167179,4092],{"class":112},[36,167181,4729],{"class":42},[36,167183,4168],{"class":112},[36,167185,167186],{"class":42},"])    ",[36,167188,167189],{"class":3943},"# [1, 2, 3]\n",[36,167191,167192,167194,167197,167199,167202],{"class":38,"line":642},[36,167193,3486],{"class":112},[36,167195,167196],{"class":42},"(nums[:",[36,167198,1982],{"class":112},[36,167200,167201],{"class":42},"])     ",[36,167203,167204],{"class":3943},"# [0, 1, 2]\n",[36,167206,167207,167209,167211,167213,167216],{"class":38,"line":655},[36,167208,3486],{"class":112},[36,167210,167177],{"class":42},[36,167212,1982],{"class":112},[36,167214,167215],{"class":42},":])     ",[36,167217,167218],{"class":3943},"# [3, 4, 5, 6]\n",[36,167220,167221,167223,167226,167228,167230],{"class":38,"line":662},[36,167222,3486],{"class":112},[36,167224,167225],{"class":42},"(nums[::",[36,167227,498],{"class":112},[36,167229,167186],{"class":42},[36,167231,167232],{"class":3943},"# [0, 2, 4, 6]\n",[36,167234,167235,167237,167239,167241,167243,167246],{"class":38,"line":667},[36,167236,3486],{"class":112},[36,167238,167225],{"class":42},[36,167240,1308],{"class":46},[36,167242,4092],{"class":112},[36,167244,167245],{"class":42},"])   ",[36,167247,167248],{"class":3943},"# 反转\n",[19,167250,167251],{},"字符串切片：",[26,167253,167255],{"className":28,"code":167254,"language":30,"meta":31,"style":31},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[33,167256,167257,167266,167280],{"__ignoreMap":31},[36,167258,167259,167261,167263],{"class":38,"line":39},[36,167260,159478],{"class":42},[36,167262,47],{"class":46},[36,167264,167265],{"class":105}," \"abcdef\"\n",[36,167267,167268,167270,167272,167274,167276,167278],{"class":38,"line":53},[36,167269,3486],{"class":112},[36,167271,166994],{"class":42},[36,167273,4092],{"class":112},[36,167275,4729],{"class":42},[36,167277,4168],{"class":112},[36,167279,8353],{"class":42},[36,167281,167282,167284,167287,167289,167291],{"class":38,"line":196},[36,167283,3486],{"class":112},[36,167285,167286],{"class":42},"(text[::",[36,167288,1308],{"class":46},[36,167290,4092],{"class":112},[36,167292,8353],{"class":42},[14,167294,167296],{"id":167295},"_69-集合set","6.9 集合set",[19,167298,167299],{},"集合特点：",[211,167301,167302,167305,167308],{},[214,167303,167304],{},"无序。",[214,167306,167307],{},"元素不重复。",[214,167309,167310],{},"可以做交集、并集、差集。",[26,167312,167314],{"className":28,"code":167313,"language":30,"meta":31,"style":31},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[33,167315,167316,167344],{"__ignoreMap":31},[36,167317,167318,167320,167322,167324,167326,167328,167330,167332,167334,167336,167338,167340,167342],{"class":38,"line":39},[36,167319,167134],{"class":42},[36,167321,47],{"class":46},[36,167323,859],{"class":42},[36,167325,4092],{"class":112},[36,167327,478],{"class":42},[36,167329,498],{"class":112},[36,167331,478],{"class":42},[36,167333,1982],{"class":112},[36,167335,478],{"class":42},[36,167337,1982],{"class":112},[36,167339,478],{"class":42},[36,167341,4168],{"class":112},[36,167343,5300],{"class":42},[36,167345,167346,167348],{"class":38,"line":53},[36,167347,3486],{"class":112},[36,167349,167350],{"class":42},"(nums)\n",[19,167352,167353],{},"创建空集合：",[26,167355,167357],{"className":28,"code":167356,"language":30,"meta":31,"style":31},"s = set()\n",[33,167358,167359],{"__ignoreMap":31},[36,167360,167361,167363,167365,167367],{"class":38,"line":39},[36,167362,14240],{"class":42},[36,167364,47],{"class":46},[36,167366,122756],{"class":112},[36,167368,903],{"class":42},[19,167370,12706,167371,167373],{},[33,167372,3649],{}," 是空字典，不是空集合。",[19,167375,167376],{},"集合常用操作：",[26,167378,167380],{"className":28,"code":167379,"language":30,"meta":31,"style":31},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[33,167381,167382,167402,167406,167415,167424,167433],{"__ignoreMap":31},[36,167383,167384,167386,167388,167390,167392,167394,167396,167398,167400],{"class":38,"line":39},[36,167385,14240],{"class":42},[36,167387,47],{"class":46},[36,167389,859],{"class":42},[36,167391,4092],{"class":112},[36,167393,478],{"class":42},[36,167395,498],{"class":112},[36,167397,478],{"class":42},[36,167399,1982],{"class":112},[36,167401,5300],{"class":42},[36,167403,167404],{"class":38,"line":53},[36,167405,659],{"emptyLinePlaceholder":658},[36,167407,167408,167411,167413],{"class":38,"line":196},[36,167409,167410],{"class":42},"s.add(",[36,167412,4168],{"class":112},[36,167414,922],{"class":42},[36,167416,167417,167420,167422],{"class":38,"line":642},[36,167418,167419],{"class":42},"s.remove(",[36,167421,498],{"class":112},[36,167423,922],{"class":42},[36,167425,167426,167429,167431],{"class":38,"line":655},[36,167427,167428],{"class":42},"s.discard(",[36,167430,554],{"class":112},[36,167432,922],{"class":42},[36,167434,167435,167437,167439,167441],{"class":38,"line":662},[36,167436,3486],{"class":112},[36,167438,495],{"class":42},[36,167440,11049],{"class":112},[36,167442,167443],{"class":42},"(s))\n",[19,167445,167446],{},"交并差：",[26,167448,167450],{"className":28,"code":167449,"language":30,"meta":31,"style":31},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[33,167451,167452,167472,167492,167496,167511,167524],{"__ignoreMap":31},[36,167453,167454,167456,167458,167460,167462,167464,167466,167468,167470],{"class":38,"line":39},[36,167455,14580],{"class":42},[36,167457,47],{"class":46},[36,167459,859],{"class":42},[36,167461,4092],{"class":112},[36,167463,478],{"class":42},[36,167465,498],{"class":112},[36,167467,478],{"class":42},[36,167469,1982],{"class":112},[36,167471,5300],{"class":42},[36,167473,167474,167476,167478,167480,167482,167484,167486,167488,167490],{"class":38,"line":53},[36,167475,14606],{"class":42},[36,167477,47],{"class":46},[36,167479,859],{"class":42},[36,167481,1982],{"class":112},[36,167483,478],{"class":42},[36,167485,4168],{"class":112},[36,167487,478],{"class":42},[36,167489,4194],{"class":112},[36,167491,5300],{"class":42},[36,167493,167494],{"class":38,"line":196},[36,167495,659],{"emptyLinePlaceholder":658},[36,167497,167498,167500,167503,167505,167508],{"class":38,"line":642},[36,167499,3486],{"class":112},[36,167501,167502],{"class":42},"(a ",[36,167504,4228],{"class":46},[36,167506,167507],{"class":42}," b)  ",[36,167509,167510],{"class":3943},"# 交集\n",[36,167512,167513,167515,167517,167519,167521],{"class":38,"line":655},[36,167514,3486],{"class":112},[36,167516,167502],{"class":42},[36,167518,4790],{"class":46},[36,167520,167507],{"class":42},[36,167522,167523],{"class":3943},"# 并集\n",[36,167525,167526,167528,167530,167532,167534],{"class":38,"line":662},[36,167527,3486],{"class":112},[36,167529,167502],{"class":42},[36,167531,1308],{"class":46},[36,167533,167507],{"class":42},[36,167535,167536],{"class":3943},"# 差集\n",[14,167538,167540],{"id":167539},"_610-字典dict","6.10 字典dict",[19,167542,167543],{},"字典通过 key-value 保存数据。",[26,167545,167547],{"className":28,"code":167546,"language":30,"meta":31,"style":31},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[33,167548,167549,167557,167567,167578,167588],{"__ignoreMap":31},[36,167550,167551,167553,167555],{"class":38,"line":39},[36,167552,152515],{"class":42},[36,167554,47],{"class":46},[36,167556,19228],{"class":42},[36,167558,167559,167561,167563,167565],{"class":38,"line":53},[36,167560,150054],{"class":105},[36,167562,54994],{"class":42},[36,167564,152922],{"class":105},[36,167566,35056],{"class":42},[36,167568,167569,167572,167574,167576],{"class":38,"line":196},[36,167570,167571],{"class":105},"    \"age\"",[36,167573,54994],{"class":42},[36,167575,4521],{"class":112},[36,167577,35056],{"class":42},[36,167579,167580,167583,167585],{"class":38,"line":642},[36,167581,167582],{"class":105},"    \"score\"",[36,167584,54994],{"class":42},[36,167586,167587],{"class":112},"95\n",[36,167589,167590],{"class":38,"line":655},[36,167591,5300],{"class":42},[19,167593,167594],{},"获取值：",[26,167596,167598],{"className":28,"code":167597,"language":30,"meta":31,"style":31},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[33,167599,167600,167611],{"__ignoreMap":31},[36,167601,167602,167604,167607,167609],{"class":38,"line":39},[36,167603,3486],{"class":112},[36,167605,167606],{"class":42},"(student[",[36,167608,66234],{"class":105},[36,167610,8353],{"class":42},[36,167612,167613,167615,167618,167620],{"class":38,"line":53},[36,167614,3486],{"class":112},[36,167616,167617],{"class":42},"(student.get(",[36,167619,66234],{"class":105},[36,167621,2005],{"class":42},[19,167623,19044],{},[26,167625,167627],{"className":28,"code":167626,"language":30,"meta":31,"style":31},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[33,167628,167629,167642],{"__ignoreMap":31},[36,167630,167631,167633,167636,167639],{"class":38,"line":39},[36,167632,155893],{"class":42},[36,167634,167635],{"class":105},"\"address\"",[36,167637,167638],{"class":42},"]     ",[36,167640,167641],{"class":3943},"# key不存在会报错\n",[36,167643,167644,167647,167649,167651],{"class":38,"line":53},[36,167645,167646],{"class":42},"student.get(",[36,167648,167635],{"class":105},[36,167650,17373],{"class":42},[36,167652,167653],{"class":3943},"# key不存在返回None\n",[19,167655,167656],{},"设置默认值：",[26,167658,167660],{"className":28,"code":167659,"language":30,"meta":31,"style":31},"print(student.get(\"address\", \"未知\"))\n",[33,167661,167662],{"__ignoreMap":31},[36,167663,167664,167666,167668,167670,167672,167675],{"class":38,"line":39},[36,167665,3486],{"class":112},[36,167667,167617],{"class":42},[36,167669,167635],{"class":105},[36,167671,478],{"class":42},[36,167673,167674],{"class":105},"\"未知\"",[36,167676,2005],{"class":42},[19,167678,167679],{},"新增和修改：",[26,167681,167683],{"className":28,"code":167682,"language":30,"meta":31,"style":31},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[33,167684,167685,167698],{"__ignoreMap":31},[36,167686,167687,167689,167691,167693,167695],{"class":38,"line":39},[36,167688,155893],{"class":42},[36,167690,72679],{"class":105},[36,167692,8140],{"class":42},[36,167694,47],{"class":46},[36,167696,167697],{"class":112}," 19\n",[36,167699,167700,167702,167704,167706,167708],{"class":38,"line":53},[36,167701,155893],{"class":42},[36,167703,167635],{"class":105},[36,167705,8140],{"class":42},[36,167707,47],{"class":46},[36,167709,167710],{"class":105}," \"北京\"\n",[19,167712,167713],{},"删除：",[26,167715,167717],{"className":28,"code":167716,"language":30,"meta":31,"style":31},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[33,167718,167719,167732,167742],{"__ignoreMap":31},[36,167720,167721,167723,167725,167728,167730],{"class":38,"line":39},[36,167722,158392],{"class":42},[36,167724,47],{"class":46},[36,167726,167727],{"class":42}," student.pop(",[36,167729,154506],{"class":105},[36,167731,922],{"class":42},[36,167733,167734,167736,167738,167740],{"class":38,"line":53},[36,167735,166417],{"class":46},[36,167737,155183],{"class":42},[36,167739,72679],{"class":105},[36,167741,36806],{"class":42},[36,167743,167744],{"class":38,"line":196},[36,167745,167746],{"class":42},"student.clear()\n",[14,167748,167750],{"id":167749},"_611-字典遍历","6.11 字典遍历",[19,167752,167753],{},"遍历 key：",[26,167755,167757],{"className":28,"code":167756,"language":30,"meta":31,"style":31},"for key in student:\n    print(key, student[key])\n",[33,167758,167759,167771],{"__ignoreMap":31},[36,167760,167761,167763,167766,167768],{"class":38,"line":39},[36,167762,3120],{"class":46},[36,167764,167765],{"class":42}," key ",[36,167767,1619],{"class":46},[36,167769,167770],{"class":42}," student:\n",[36,167772,167773,167775],{"class":38,"line":53},[36,167774,1867],{"class":112},[36,167776,167777],{"class":42},"(key, student[key])\n",[19,167779,167780],{},"遍历 value：",[26,167782,167784],{"className":28,"code":167783,"language":30,"meta":31,"style":31},"for value in student.values():\n    print(value)\n",[33,167785,167786,167798],{"__ignoreMap":31},[36,167787,167788,167790,167793,167795],{"class":38,"line":39},[36,167789,3120],{"class":46},[36,167791,167792],{"class":42}," value ",[36,167794,1619],{"class":46},[36,167796,167797],{"class":42}," student.values():\n",[36,167799,167800,167802],{"class":38,"line":53},[36,167801,1867],{"class":112},[36,167803,167804],{"class":42},"(value)\n",[19,167806,167807],{},"遍历 key 和 value：",[26,167809,167811],{"className":28,"code":167810,"language":30,"meta":31,"style":31},"for key, value in student.items():\n    print(key, value)\n",[33,167812,167813,167825],{"__ignoreMap":31},[36,167814,167815,167817,167820,167822],{"class":38,"line":39},[36,167816,3120],{"class":46},[36,167818,167819],{"class":42}," key, value ",[36,167821,1619],{"class":46},[36,167823,167824],{"class":42}," student.items():\n",[36,167826,167827,167829],{"class":38,"line":53},[36,167828,1867],{"class":112},[36,167830,167831],{"class":42},"(key, value)\n",[14,167833,167835],{"id":167834},"_612-嵌套容器","6.12 嵌套容器",[19,167837,167838],{},"列表中保存字典，是项目中最常见的结构之一。",[26,167840,167842],{"className":28,"code":167841,"language":30,"meta":31,"style":31},"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",[33,167843,167844,167852,167880,167908,167936,167940,167944,167954],{"__ignoreMap":31},[36,167845,167846,167848,167850],{"class":38,"line":39},[36,167847,162750],{"class":42},[36,167849,47],{"class":46},[36,167851,59003],{"class":42},[36,167853,167854,167856,167858,167860,167862,167864,167866,167868,167870,167872,167874,167876,167878],{"class":38,"line":53},[36,167855,151419],{"class":42},[36,167857,66234],{"class":105},[36,167859,54994],{"class":42},[36,167861,152922],{"class":105},[36,167863,478],{"class":42},[36,167865,72679],{"class":105},[36,167867,54994],{"class":42},[36,167869,4521],{"class":112},[36,167871,478],{"class":42},[36,167873,154506],{"class":105},[36,167875,54994],{"class":42},[36,167877,4858],{"class":112},[36,167879,8626],{"class":42},[36,167881,167882,167884,167886,167888,167890,167892,167894,167896,167898,167900,167902,167904,167906],{"class":38,"line":196},[36,167883,151419],{"class":42},[36,167885,66234],{"class":105},[36,167887,54994],{"class":42},[36,167889,153970],{"class":105},[36,167891,478],{"class":42},[36,167893,72679],{"class":105},[36,167895,54994],{"class":42},[36,167897,4496],{"class":112},[36,167899,478],{"class":42},[36,167901,154506],{"class":105},[36,167903,54994],{"class":42},[36,167905,4681],{"class":112},[36,167907,8626],{"class":42},[36,167909,167910,167912,167914,167916,167918,167920,167922,167924,167926,167928,167930,167932,167934],{"class":38,"line":642},[36,167911,151419],{"class":42},[36,167913,66234],{"class":105},[36,167915,54994],{"class":42},[36,167917,162765],{"class":105},[36,167919,478],{"class":42},[36,167921,72679],{"class":105},[36,167923,54994],{"class":42},[36,167925,4546],{"class":112},[36,167927,478],{"class":42},[36,167929,154506],{"class":105},[36,167931,54994],{"class":42},[36,167933,4281],{"class":112},[36,167935,8626],{"class":42},[36,167937,167938],{"class":38,"line":655},[36,167939,36806],{"class":42},[36,167941,167942],{"class":38,"line":662},[36,167943,659],{"emptyLinePlaceholder":658},[36,167945,167946,167948,167950,167952],{"class":38,"line":667},[36,167947,3120],{"class":46},[36,167949,155171],{"class":42},[36,167951,1619],{"class":46},[36,167953,155176],{"class":42},[36,167955,167956,167958,167960,167962,167965,167967],{"class":38,"line":679},[36,167957,1867],{"class":112},[36,167959,167606],{"class":42},[36,167961,66234],{"class":105},[36,167963,167964],{"class":42},"], student[",[36,167966,154506],{"class":105},[36,167968,8353],{"class":42},[19,167970,167971],{},"统计平均分：",[26,167973,167975],{"className":28,"code":167974,"language":30,"meta":31,"style":31},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[33,167976,167977,167985,167989,167999,168011,168015,168030],{"__ignoreMap":31},[36,167978,167979,167981,167983],{"class":38,"line":39},[36,167980,160294],{"class":42},[36,167982,47],{"class":46},[36,167984,1074],{"class":112},[36,167986,167987],{"class":38,"line":53},[36,167988,659],{"emptyLinePlaceholder":658},[36,167990,167991,167993,167995,167997],{"class":38,"line":196},[36,167992,3120],{"class":46},[36,167994,155171],{"class":42},[36,167996,1619],{"class":46},[36,167998,155176],{"class":42},[36,168000,168001,168003,168005,168007,168009],{"class":38,"line":642},[36,168002,162341],{"class":42},[36,168004,1658],{"class":46},[36,168006,155183],{"class":42},[36,168008,154506],{"class":105},[36,168010,36806],{"class":42},[36,168012,168013],{"class":38,"line":655},[36,168014,659],{"emptyLinePlaceholder":658},[36,168016,168017,168019,168021,168023,168025,168027],{"class":38,"line":662},[36,168018,166808],{"class":42},[36,168020,47],{"class":46},[36,168022,166813],{"class":42},[36,168024,4455],{"class":46},[36,168026,11022],{"class":112},[36,168028,168029],{"class":42},"(students)\n",[36,168031,168032,168034,168036,168038,168040,168042,168044,168046,168048,168050],{"class":38,"line":667},[36,168033,3486],{"class":112},[36,168035,495],{"class":42},[36,168037,3937],{"class":46},[36,168039,166831],{"class":105},[36,168041,4766],{"class":112},[36,168043,166836],{"class":42},[36,168045,160193],{"class":46},[36,168047,4815],{"class":112},[36,168049,4126],{"class":105},[36,168051,922],{"class":42},[19,168053,168054],{},"查找学生：",[26,168056,168058],{"className":28,"code":168057,"language":30,"meta":31,"style":31},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[33,168059,168060,168075,168079,168089,168103,168109,168113,168119],{"__ignoreMap":31},[36,168061,168062,168064,168066,168068,168070,168073],{"class":38,"line":39},[36,168063,2782],{"class":42},[36,168065,47],{"class":46},[36,168067,64160],{"class":112},[36,168069,495],{"class":42},[36,168071,168072],{"class":105},"\"请输入学生姓名:\"",[36,168074,922],{"class":42},[36,168076,168077],{"class":38,"line":53},[36,168078,659],{"emptyLinePlaceholder":658},[36,168080,168081,168083,168085,168087],{"class":38,"line":196},[36,168082,3120],{"class":46},[36,168084,155171],{"class":42},[36,168086,1619],{"class":46},[36,168088,155176],{"class":42},[36,168090,168091,168093,168095,168097,168099,168101],{"class":38,"line":642},[36,168092,3752],{"class":46},[36,168094,155183],{"class":42},[36,168096,66234],{"class":105},[36,168098,8140],{"class":42},[36,168100,6652],{"class":46},[36,168102,163466],{"class":42},[36,168104,168105,168107],{"class":38,"line":655},[36,168106,1960],{"class":112},[36,168108,153076],{"class":42},[36,168110,168111],{"class":38,"line":662},[36,168112,35215],{"class":46},[36,168114,168115,168117],{"class":38,"line":667},[36,168116,5425],{"class":46},[36,168118,888],{"class":42},[36,168120,168121,168123,168125,168128],{"class":38,"line":679},[36,168122,1867],{"class":112},[36,168124,495],{"class":42},[36,168126,168127],{"class":105},"\"没有找到\"",[36,168129,922],{"class":42},[14,168131,168133],{"id":168132},"_613-容器通用操作","6.13 容器通用操作",[19,168135,168136],{},"长度：",[26,168138,168140],{"className":28,"code":168139,"language":30,"meta":31,"style":31},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[33,168141,168142,168161,168171],{"__ignoreMap":31},[36,168143,168144,168146,168149,168151,168153,168155,168157,168159],{"class":38,"line":39},[36,168145,11049],{"class":112},[36,168147,168148],{"class":42},"([",[36,168150,4092],{"class":112},[36,168152,478],{"class":42},[36,168154,498],{"class":112},[36,168156,478],{"class":42},[36,168158,1982],{"class":112},[36,168160,8353],{"class":42},[36,168162,168163,168165,168167,168169],{"class":38,"line":53},[36,168164,11049],{"class":112},[36,168166,495],{"class":42},[36,168168,158914],{"class":105},[36,168170,922],{"class":42},[36,168172,168173,168175,168178,168180,168182,168184],{"class":38,"line":196},[36,168174,11049],{"class":112},[36,168176,168177],{"class":42},"({",[36,168179,66234],{"class":105},[36,168181,54994],{"class":42},[36,168183,152922],{"class":105},[36,168185,168186],{"class":42},"})\n",[19,168188,168189],{},"最大最小：",[26,168191,168193],{"className":28,"code":168192,"language":30,"meta":31,"style":31},"max([1, 2, 3])\nmin([1, 2, 3])\n",[33,168194,168195,168213],{"__ignoreMap":31},[36,168196,168197,168199,168201,168203,168205,168207,168209,168211],{"class":38,"line":39},[36,168198,9708],{"class":112},[36,168200,168148],{"class":42},[36,168202,4092],{"class":112},[36,168204,478],{"class":42},[36,168206,498],{"class":112},[36,168208,478],{"class":42},[36,168210,1982],{"class":112},[36,168212,8353],{"class":42},[36,168214,168215,168218,168220,168222,168224,168226,168228,168230],{"class":38,"line":53},[36,168216,168217],{"class":112},"min",[36,168219,168148],{"class":42},[36,168221,4092],{"class":112},[36,168223,478],{"class":42},[36,168225,498],{"class":112},[36,168227,478],{"class":42},[36,168229,1982],{"class":112},[36,168231,8353],{"class":42},[19,168233,168234],{},"求和：",[26,168236,168238],{"className":28,"code":168237,"language":30,"meta":31,"style":31},"sum([1, 2, 3])\n",[33,168239,168240],{"__ignoreMap":31},[36,168241,168242,168245,168247,168249,168251,168253,168255,168257],{"class":38,"line":39},[36,168243,168244],{"class":112},"sum",[36,168246,168148],{"class":42},[36,168248,4092],{"class":112},[36,168250,478],{"class":42},[36,168252,498],{"class":112},[36,168254,478],{"class":42},[36,168256,1982],{"class":112},[36,168258,8353],{"class":42},[19,168260,166505],{},[26,168262,168264],{"className":28,"code":168263,"language":30,"meta":31,"style":31},"sorted([3, 1, 2])\n",[33,168265,168266],{"__ignoreMap":31},[36,168267,168268,168271,168273,168275,168277,168279,168281,168283],{"class":38,"line":39},[36,168269,168270],{"class":112},"sorted",[36,168272,168148],{"class":42},[36,168274,1982],{"class":112},[36,168276,478],{"class":42},[36,168278,4092],{"class":112},[36,168280,478],{"class":42},[36,168282,498],{"class":112},[36,168284,8353],{"class":42},[19,168286,168287],{},"类型转换：",[26,168289,168291],{"className":28,"code":168290,"language":30,"meta":31,"style":31},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[33,168292,168293,168303,168321],{"__ignoreMap":31},[36,168294,168295,168297,168299,168301],{"class":38,"line":39},[36,168296,157104],{"class":112},[36,168298,495],{"class":42},[36,168300,158914],{"class":105},[36,168302,922],{"class":42},[36,168304,168305,168307,168309,168311,168313,168315,168317,168319],{"class":38,"line":53},[36,168306,158299],{"class":112},[36,168308,168148],{"class":42},[36,168310,4092],{"class":112},[36,168312,478],{"class":42},[36,168314,498],{"class":112},[36,168316,478],{"class":42},[36,168318,1982],{"class":112},[36,168320,8353],{"class":42},[36,168322,168323,168325,168327,168329,168331,168333,168335,168337,168339,168341],{"class":38,"line":196},[36,168324,158324],{"class":112},[36,168326,168148],{"class":42},[36,168328,4092],{"class":112},[36,168330,478],{"class":42},[36,168332,4092],{"class":112},[36,168334,478],{"class":42},[36,168336,498],{"class":112},[36,168338,478],{"class":42},[36,168340,1982],{"class":112},[36,168342,8353],{"class":42},[19,168344,168345],{},"成员判断：",[26,168347,168349],{"className":28,"code":168348,"language":30,"meta":31,"style":31},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[33,168350,168351,168368,168392],{"__ignoreMap":31},[36,168352,168353,168355,168357,168360,168363,168366],{"class":38,"line":39},[36,168354,3486],{"class":112},[36,168356,495],{"class":42},[36,168358,168359],{"class":105},"\"a\"",[36,168361,168362],{"class":46}," in",[36,168364,168365],{"class":105}," \"abc\"",[36,168367,922],{"class":42},[36,168369,168370,168372,168374,168376,168378,168380,168382,168384,168386,168388,168390],{"class":38,"line":53},[36,168371,3486],{"class":112},[36,168373,495],{"class":42},[36,168375,4092],{"class":112},[36,168377,168362],{"class":46},[36,168379,55783],{"class":42},[36,168381,4092],{"class":112},[36,168383,478],{"class":42},[36,168385,498],{"class":112},[36,168387,478],{"class":42},[36,168389,1982],{"class":112},[36,168391,8353],{"class":42},[36,168393,168394,168396,168398,168400,168402,168404,168406,168408,168410],{"class":38,"line":196},[36,168395,3486],{"class":112},[36,168397,495],{"class":42},[36,168399,66234],{"class":105},[36,168401,168362],{"class":46},[36,168403,859],{"class":42},[36,168405,66234],{"class":105},[36,168407,54994],{"class":42},[36,168409,152922],{"class":105},[36,168411,168186],{"class":42},[14,168413,168415],{"id":168414},"_614-推导式","6.14 推导式",[19,168417,168418],{},"推导式用于快速生成容器。",[19,168420,168421],{},"列表推导式：",[26,168423,168425],{"className":28,"code":168424,"language":30,"meta":31,"style":31},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[33,168426,168427,168454],{"__ignoreMap":31},[36,168428,168429,168431,168433,168436,168438,168440,168442,168444,168446,168448,168450,168452],{"class":38,"line":39},[36,168430,167134],{"class":42},[36,168432,47],{"class":46},[36,168434,168435],{"class":42}," [i ",[36,168437,3120],{"class":46},[36,168439,13119],{"class":42},[36,168441,1619],{"class":46},[36,168443,1622],{"class":112},[36,168445,495],{"class":42},[36,168447,4092],{"class":112},[36,168449,478],{"class":42},[36,168451,4219],{"class":112},[36,168453,100848],{"class":42},[36,168455,168456,168458],{"class":38,"line":53},[36,168457,3486],{"class":112},[36,168459,167350],{"class":42},[19,168461,168462],{},"带条件：",[26,168464,168466],{"className":28,"code":168465,"language":30,"meta":31,"style":31},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[33,168467,168468,168509],{"__ignoreMap":31},[36,168469,168470,168473,168475,168477,168479,168481,168483,168485,168487,168489,168491,168493,168495,168497,168499,168501,168503,168505,168507],{"class":38,"line":39},[36,168471,168472],{"class":42},"even_nums ",[36,168474,47],{"class":46},[36,168476,168435],{"class":42},[36,168478,3120],{"class":46},[36,168480,13119],{"class":42},[36,168482,1619],{"class":46},[36,168484,1622],{"class":112},[36,168486,495],{"class":42},[36,168488,4092],{"class":112},[36,168490,478],{"class":42},[36,168492,4212],{"class":112},[36,168494,17373],{"class":42},[36,168496,2067],{"class":46},[36,168498,13119],{"class":42},[36,168500,4203],{"class":46},[36,168502,18411],{"class":112},[36,168504,2073],{"class":46},[36,168506,1004],{"class":112},[36,168508,36806],{"class":42},[36,168510,168511,168513],{"class":38,"line":53},[36,168512,3486],{"class":112},[36,168514,168515],{"class":42},"(even_nums)\n",[19,168517,168518],{},"字典推导式：",[26,168520,168522],{"className":28,"code":168521,"language":30,"meta":31,"style":31},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[33,168523,168524,168558],{"__ignoreMap":31},[36,168525,168526,168529,168531,168534,168536,168538,168541,168543,168545,168547,168549,168551,168553,168555],{"class":38,"line":39},[36,168527,168528],{"class":42},"squares ",[36,168530,47],{"class":46},[36,168532,168533],{"class":42}," {i: i ",[36,168535,14322],{"class":46},[36,168537,18411],{"class":112},[36,168539,168540],{"class":46}," for",[36,168542,13119],{"class":42},[36,168544,1619],{"class":46},[36,168546,1622],{"class":112},[36,168548,495],{"class":42},[36,168550,4092],{"class":112},[36,168552,478],{"class":42},[36,168554,4219],{"class":112},[36,168556,168557],{"class":42},")}\n",[36,168559,168560,168562],{"class":38,"line":53},[36,168561,3486],{"class":112},[36,168563,168564],{"class":42},"(squares)\n",[19,168566,168567],{},"集合推导式：",[26,168569,168571],{"className":28,"code":168570,"language":30,"meta":31,"style":31},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[33,168572,168573,168594],{"__ignoreMap":31},[36,168574,168575,168578,168580,168583,168585,168587,168589,168592],{"class":38,"line":39},[36,168576,168577],{"class":42},"chars ",[36,168579,47],{"class":46},[36,168581,168582],{"class":42}," {ch ",[36,168584,3120],{"class":46},[36,168586,162726],{"class":42},[36,168588,1619],{"class":46},[36,168590,168591],{"class":105}," \"hello\"",[36,168593,5300],{"class":42},[36,168595,168596,168598],{"class":38,"line":53},[36,168597,3486],{"class":112},[36,168599,168600],{"class":42},"(chars)\n",[19,168602,168603],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,168605,168607],{"id":168606},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[26,168609,168611],{"className":28,"code":168610,"language":30,"meta":31,"style":31},"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",[33,168612,168613,168621,168641,168661,168681,168701,168705,168709,168717,168731,168740,168744,168754,168766,168770,168790,168799,168803,168819,168824,168828,168842,168846,168868,168904],{"__ignoreMap":31},[36,168614,168615,168617,168619],{"class":38,"line":39},[36,168616,162750],{"class":42},[36,168618,47],{"class":46},[36,168620,59003],{"class":42},[36,168622,168623,168625,168627,168629,168631,168633,168635,168637,168639],{"class":38,"line":53},[36,168624,151419],{"class":42},[36,168626,66234],{"class":105},[36,168628,54994],{"class":42},[36,168630,152922],{"class":105},[36,168632,478],{"class":42},[36,168634,154506],{"class":105},[36,168636,54994],{"class":42},[36,168638,4858],{"class":112},[36,168640,8626],{"class":42},[36,168642,168643,168645,168647,168649,168651,168653,168655,168657,168659],{"class":38,"line":196},[36,168644,151419],{"class":42},[36,168646,66234],{"class":105},[36,168648,54994],{"class":42},[36,168650,153970],{"class":105},[36,168652,478],{"class":42},[36,168654,154506],{"class":105},[36,168656,54994],{"class":42},[36,168658,4681],{"class":112},[36,168660,8626],{"class":42},[36,168662,168663,168665,168667,168669,168671,168673,168675,168677,168679],{"class":38,"line":642},[36,168664,151419],{"class":42},[36,168666,66234],{"class":105},[36,168668,54994],{"class":42},[36,168670,162765],{"class":105},[36,168672,478],{"class":42},[36,168674,154506],{"class":105},[36,168676,54994],{"class":42},[36,168678,4281],{"class":112},[36,168680,8626],{"class":42},[36,168682,168683,168685,168687,168689,168691,168693,168695,168697,168699],{"class":38,"line":655},[36,168684,151419],{"class":42},[36,168686,66234],{"class":105},[36,168688,54994],{"class":42},[36,168690,166344],{"class":105},[36,168692,478],{"class":42},[36,168694,154506],{"class":105},[36,168696,54994],{"class":42},[36,168698,4752],{"class":112},[36,168700,8626],{"class":42},[36,168702,168703],{"class":38,"line":662},[36,168704,36806],{"class":42},[36,168706,168707],{"class":38,"line":667},[36,168708,659],{"emptyLinePlaceholder":658},[36,168710,168711,168713,168715],{"class":38,"line":679},[36,168712,160294],{"class":42},[36,168714,47],{"class":46},[36,168716,1074],{"class":112},[36,168718,168719,168722,168724,168727,168729],{"class":38,"line":685},[36,168720,168721],{"class":42},"max_student ",[36,168723,47],{"class":46},[36,168725,168726],{"class":42}," students[",[36,168728,1859],{"class":112},[36,168730,36806],{"class":42},[36,168732,168733,168736,168738],{"class":38,"line":691},[36,168734,168735],{"class":42},"passed ",[36,168737,47],{"class":46},[36,168739,55395],{"class":42},[36,168741,168742],{"class":38,"line":696},[36,168743,659],{"emptyLinePlaceholder":658},[36,168745,168746,168748,168750,168752],{"class":38,"line":702},[36,168747,3120],{"class":46},[36,168749,155171],{"class":42},[36,168751,1619],{"class":46},[36,168753,155176],{"class":42},[36,168755,168756,168758,168760,168762,168764],{"class":38,"line":708},[36,168757,162341],{"class":42},[36,168759,1658],{"class":46},[36,168761,155183],{"class":42},[36,168763,154506],{"class":105},[36,168765,36806],{"class":42},[36,168767,168768],{"class":38,"line":713},[36,168769,659],{"emptyLinePlaceholder":658},[36,168771,168772,168774,168776,168778,168780,168782,168785,168787],{"class":38,"line":719},[36,168773,3752],{"class":46},[36,168775,155183],{"class":42},[36,168777,154506],{"class":105},[36,168779,8140],{"class":42},[36,168781,4829],{"class":46},[36,168783,168784],{"class":42}," max_student[",[36,168786,154506],{"class":105},[36,168788,168789],{"class":42},"]:\n",[36,168791,168792,168795,168797],{"class":38,"line":725},[36,168793,168794],{"class":42},"        max_student ",[36,168796,47],{"class":46},[36,168798,155199],{"class":42},[36,168800,168801],{"class":38,"line":731},[36,168802,659],{"emptyLinePlaceholder":658},[36,168804,168805,168807,168809,168811,168813,168815,168817],{"class":38,"line":736},[36,168806,3752],{"class":46},[36,168808,155183],{"class":42},[36,168810,154506],{"class":105},[36,168812,8140],{"class":42},[36,168814,412],{"class":46},[36,168816,160871],{"class":112},[36,168818,888],{"class":42},[36,168820,168821],{"class":38,"line":742},[36,168822,168823],{"class":42},"        passed.append(student)\n",[36,168825,168826],{"class":38,"line":748},[36,168827,659],{"emptyLinePlaceholder":658},[36,168829,168830,168832,168834,168836,168838,168840],{"class":38,"line":754},[36,168831,166808],{"class":42},[36,168833,47],{"class":46},[36,168835,166813],{"class":42},[36,168837,4455],{"class":46},[36,168839,11022],{"class":112},[36,168841,168029],{"class":42},[36,168843,168844],{"class":38,"line":760},[36,168845,659],{"emptyLinePlaceholder":658},[36,168847,168848,168850,168852,168854,168856,168858,168860,168862,168864,168866],{"class":38,"line":766},[36,168849,3486],{"class":112},[36,168851,495],{"class":42},[36,168853,3937],{"class":46},[36,168855,166831],{"class":105},[36,168857,4766],{"class":112},[36,168859,166836],{"class":42},[36,168861,160193],{"class":46},[36,168863,4815],{"class":112},[36,168865,4126],{"class":105},[36,168867,922],{"class":42},[36,168869,168870,168872,168874,168876,168879,168881,168884,168886,168888,168890,168892,168894,168896,168898,168900,168902],{"class":38,"line":772},[36,168871,3486],{"class":112},[36,168873,495],{"class":42},[36,168875,3937],{"class":46},[36,168877,168878],{"class":105},"\"最高分学生:",[36,168880,4766],{"class":112},[36,168882,168883],{"class":42},"max_student[",[36,168885,155916],{"class":105},[36,168887,4809],{"class":42},[36,168889,4815],{"class":112},[36,168891,859],{"class":112},[36,168893,168883],{"class":42},[36,168895,155954],{"class":105},[36,168897,4809],{"class":42},[36,168899,4815],{"class":112},[36,168901,4126],{"class":105},[36,168903,922],{"class":42},[36,168905,168906,168908,168910,168912,168915,168918,168921,168923,168925],{"class":38,"line":778},[36,168907,3486],{"class":112},[36,168909,495],{"class":42},[36,168911,3937],{"class":46},[36,168913,168914],{"class":105},"\"及格人数:",[36,168916,168917],{"class":112},"{len",[36,168919,168920],{"class":42},"(passed)",[36,168922,4815],{"class":112},[36,168924,4126],{"class":105},[36,168926,922],{"class":42},[14,168928,168930],{"id":168929},"_616-易错点","6.16 易错点",[211,168932,168933,168936,168939,168942,168948,168957],{},[214,168934,168935],{},"列表可变，元组和字符串不可变。",[214,168937,168938],{},"切片结束位置不包含。",[214,168940,168941],{},"字典通过 key 取值，不是通过索引。",[214,168943,168944,168945,224],{},"空集合要用 ",[33,168946,168947],{},"set()",[214,168949,107857,168950,168953,168954,224],{},[33,168951,168952],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[33,168955,168956],{},"get()",[214,168958,168959],{},"嵌套容器要先看清楚每一层是什么类型。",[14,168961,168963],{"id":168962},"_617-本章练习","6.17 本章练习",[211,168965,168966,168969,168972,168975,168978],{},[214,168967,168968],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[214,168970,168971],{},"输入一句话，统计每个字符出现次数。",[214,168973,168974],{},"使用集合去除列表中的重复元素。",[214,168976,168977],{},"使用字典保存一个学生的信息，并实现修改成绩。",[214,168979,168980],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[3785,168982,168983],{},"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":31,"searchDepth":53,"depth":53,"links":168985},[168986,168987,168988,168989,168990,168991,168992,168993,168994,168995,168996,168997,168998,168999,169000,169001,169002],{"id":165966,"depth":53,"text":165967},{"id":166083,"depth":53,"text":166084},{"id":166173,"depth":53,"text":166174},{"id":166297,"depth":53,"text":166298},{"id":166660,"depth":53,"text":166661},{"id":166847,"depth":53,"text":166848},{"id":166966,"depth":53,"text":166967},{"id":167108,"depth":53,"text":167109},{"id":167295,"depth":53,"text":167296},{"id":167539,"depth":53,"text":167540},{"id":167749,"depth":53,"text":167750},{"id":167834,"depth":53,"text":167835},{"id":168132,"depth":53,"text":168133},{"id":168414,"depth":53,"text":168415},{"id":168606,"depth":53,"text":168607},{"id":168929,"depth":53,"text":168930},{"id":168962,"depth":53,"text":168963},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":165958,"description":26998},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":169009,"title":169010,"body":169011,"description":26998,"extension":3817,"meta":171183,"navigation":658,"path":171184,"seo":171185,"stem":171186,"__hash__":171187},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":169012,"toc":171158},[169013,169016,169020,169023,169103,169106,169127,169130,169134,169137,169199,169202,169219,169223,169226,169271,169273,169281,169285,169288,169370,169373,169376,169401,169404,169427,169431,169434,169436,169498,169501,169503,169554,169558,169562,169568,169673,169677,169683,169754,169758,169761,169829,169832,169912,169916,169922,169958,169961,169964,170074,170080,170084,170087,170159,170162,170166,170170,170175,170237,170241,170246,170314,170318,170323,170439,170443,170446,170526,170529,170533,170536,170640,170642,170657,170660,170664,170802,170810,170814,170816,170827,170829,171087,171091,171123,171127,171155],[10,169014,169010],{"id":169015},"_7-函数进阶",[14,169017,169019],{"id":169018},"_71-多返回值","7.1 多返回值",[19,169021,169022],{},"Python 函数可以返回多个值，本质上返回的是元组。",[26,169024,169026],{"className":28,"code":169025,"language":30,"meta":31,"style":31},"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",[33,169027,169028,169037,169045,169053,169062,169069,169073,169077,169086,169092],{"__ignoreMap":31},[36,169029,169030,169032,169035],{"class":38,"line":39},[36,169031,1820],{"class":46},[36,169033,169034],{"class":101}," get_info",[36,169036,35540],{"class":42},[36,169038,169039,169041,169043],{"class":38,"line":53},[36,169040,155404],{"class":42},[36,169042,47],{"class":46},[36,169044,152387],{"class":105},[36,169046,169047,169049,169051],{"class":38,"line":196},[36,169048,155420],{"class":42},[36,169050,47],{"class":46},[36,169052,149585],{"class":112},[36,169054,169055,169057,169059],{"class":38,"line":642},[36,169056,155435],{"class":42},[36,169058,47],{"class":46},[36,169060,169061],{"class":112}," 95\n",[36,169063,169064,169066],{"class":38,"line":655},[36,169065,7788],{"class":46},[36,169067,169068],{"class":42}," name, age, score\n",[36,169070,169071],{"class":38,"line":662},[36,169072,659],{"emptyLinePlaceholder":658},[36,169074,169075],{"class":38,"line":667},[36,169076,659],{"emptyLinePlaceholder":658},[36,169078,169079,169081,169083],{"class":38,"line":679},[36,169080,164340],{"class":42},[36,169082,47],{"class":46},[36,169084,169085],{"class":42}," get_info()\n",[36,169087,169088,169090],{"class":38,"line":685},[36,169089,3486],{"class":112},[36,169091,80139],{"class":42},[36,169093,169094,169096,169098,169100],{"class":38,"line":691},[36,169095,3486],{"class":112},[36,169097,495],{"class":42},[36,169099,106600],{"class":112},[36,169101,169102],{"class":42},"(result))\n",[19,169104,169105],{},"可以直接解包：",[26,169107,169109],{"className":28,"code":169108,"language":30,"meta":31,"style":31},"name, age, score = get_info()\nprint(name, age, score)\n",[33,169110,169111,169120],{"__ignoreMap":31},[36,169112,169113,169116,169118],{"class":38,"line":39},[36,169114,169115],{"class":42},"name, age, score ",[36,169117,47],{"class":46},[36,169119,169085],{"class":42},[36,169121,169122,169124],{"class":38,"line":53},[36,169123,3486],{"class":112},[36,169125,169126],{"class":42},"(name, age, score)\n",[19,169128,169129],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,169131,169133],{"id":169132},"_72-位置参数","7.2 位置参数",[19,169135,169136],{},"位置参数按顺序传递。",[26,169138,169140],{"className":28,"code":169139,"language":30,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[33,169141,169142,169150,169178,169182,169186],{"__ignoreMap":31},[36,169143,169144,169146,169148],{"class":38,"line":39},[36,169145,1820],{"class":46},[36,169147,152406],{"class":101},[36,169149,152409],{"class":42},[36,169151,169152,169154,169156,169158,169160,169162,169164,169166,169168,169170,169172,169174,169176],{"class":38,"line":53},[36,169153,1867],{"class":112},[36,169155,495],{"class":42},[36,169157,3937],{"class":46},[36,169159,152420],{"class":105},[36,169161,4766],{"class":112},[36,169163,83364],{"class":42},[36,169165,4815],{"class":112},[36,169167,152429],{"class":105},[36,169169,4766],{"class":112},[36,169171,73775],{"class":42},[36,169173,4815],{"class":112},[36,169175,152438],{"class":105},[36,169177,922],{"class":42},[36,169179,169180],{"class":38,"line":196},[36,169181,659],{"emptyLinePlaceholder":658},[36,169183,169184],{"class":38,"line":642},[36,169185,659],{"emptyLinePlaceholder":658},[36,169187,169188,169191,169193,169195,169197],{"class":38,"line":655},[36,169189,169190],{"class":42},"introduce(",[36,169192,152922],{"class":105},[36,169194,478],{"class":42},[36,169196,4521],{"class":112},[36,169198,922],{"class":42},[19,169200,169201],{},"顺序错了就会得到错误含义：",[26,169203,169205],{"className":28,"code":169204,"language":30,"meta":31,"style":31},"introduce(18, \"小明\")\n",[33,169206,169207],{"__ignoreMap":31},[36,169208,169209,169211,169213,169215,169217],{"class":38,"line":39},[36,169210,169190],{"class":42},[36,169212,4521],{"class":112},[36,169214,478],{"class":42},[36,169216,152922],{"class":105},[36,169218,922],{"class":42},[14,169220,169222],{"id":169221},"_73-关键字参数","7.3 关键字参数",[19,169224,169225],{},"关键字参数按参数名传递。",[26,169227,169229],{"className":28,"code":169228,"language":30,"meta":31,"style":31},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[33,169230,169231,169251],{"__ignoreMap":31},[36,169232,169233,169235,169237,169239,169241,169243,169245,169247,169249],{"class":38,"line":39},[36,169234,169190],{"class":42},[36,169236,83364],{"class":468},[36,169238,47],{"class":46},[36,169240,152922],{"class":105},[36,169242,478],{"class":42},[36,169244,73775],{"class":468},[36,169246,47],{"class":46},[36,169248,4521],{"class":112},[36,169250,922],{"class":42},[36,169252,169253,169255,169257,169259,169261,169263,169265,169267,169269],{"class":38,"line":53},[36,169254,169190],{"class":42},[36,169256,73775],{"class":468},[36,169258,47],{"class":46},[36,169260,4521],{"class":112},[36,169262,478],{"class":42},[36,169264,83364],{"class":468},[36,169266,47],{"class":46},[36,169268,152922],{"class":105},[36,169270,922],{"class":42},[19,169272,120968],{},[211,169274,169275,169278],{},[214,169276,169277],{},"顺序不容易错。",[214,169279,169280],{},"调用时可读性更强。",[14,169282,169284],{"id":169283},"_74-默认参数","7.4 默认参数",[19,169286,169287],{},"默认参数给参数设置默认值。",[26,169289,169291],{"className":28,"code":169290,"language":30,"meta":31,"style":31},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[33,169292,169293,169309,169339,169343,169347,169357],{"__ignoreMap":31},[36,169294,169295,169297,169299,169302,169304,169307],{"class":38,"line":39},[36,169296,1820],{"class":46},[36,169298,125127],{"class":101},[36,169300,169301],{"class":42},"(host, port",[36,169303,47],{"class":46},[36,169305,169306],{"class":112},"3306",[36,169308,848],{"class":42},[36,169310,169311,169313,169315,169317,169320,169322,169324,169326,169328,169330,169333,169335,169337],{"class":38,"line":53},[36,169312,1867],{"class":112},[36,169314,495],{"class":42},[36,169316,3937],{"class":46},[36,169318,169319],{"class":105},"\"连接",[36,169321,4766],{"class":112},[36,169323,31006],{"class":42},[36,169325,4815],{"class":112},[36,169327,4729],{"class":105},[36,169329,4766],{"class":112},[36,169331,169332],{"class":42},"port",[36,169334,4815],{"class":112},[36,169336,4126],{"class":105},[36,169338,922],{"class":42},[36,169340,169341],{"class":38,"line":196},[36,169342,659],{"emptyLinePlaceholder":658},[36,169344,169345],{"class":38,"line":642},[36,169346,659],{"emptyLinePlaceholder":658},[36,169348,169349,169352,169355],{"class":38,"line":655},[36,169350,169351],{"class":42},"connect(",[36,169353,169354],{"class":105},"\"localhost\"",[36,169356,922],{"class":42},[36,169358,169359,169361,169363,169365,169368],{"class":38,"line":662},[36,169360,169351],{"class":42},[36,169362,169354],{"class":105},[36,169364,478],{"class":42},[36,169366,169367],{"class":112},"6379",[36,169369,922],{"class":42},[19,169371,169372],{},"注意：默认参数必须放在非默认参数后面。",[19,169374,169375],{},"错误：",[26,169377,169379],{"className":28,"code":169378,"language":30,"meta":31,"style":31},"def connect(port=3306, host):\n    pass\n",[33,169380,169381,169397],{"__ignoreMap":31},[36,169382,169383,169385,169387,169390,169392,169394],{"class":38,"line":39},[36,169384,1820],{"class":46},[36,169386,125127],{"class":101},[36,169388,169389],{"class":42},"(port",[36,169391,47],{"class":46},[36,169393,169306],{"class":112},[36,169395,169396],{"class":42},", host):\n",[36,169398,169399],{"class":38,"line":53},[36,169400,152571],{"class":46},[19,169402,169403],{},"正确：",[26,169405,169407],{"className":28,"code":169406,"language":30,"meta":31,"style":31},"def connect(host, port=3306):\n    pass\n",[33,169408,169409,169423],{"__ignoreMap":31},[36,169410,169411,169413,169415,169417,169419,169421],{"class":38,"line":39},[36,169412,1820],{"class":46},[36,169414,125127],{"class":101},[36,169416,169301],{"class":42},[36,169418,47],{"class":46},[36,169420,169306],{"class":112},[36,169422,848],{"class":42},[36,169424,169425],{"class":38,"line":53},[36,169426,152571],{"class":46},[14,169428,169430],{"id":169429},"_75-默认参数的坑","7.5 默认参数的坑",[19,169432,169433],{},"不要使用可变对象作为默认参数。",[19,169435,160657],{},[26,169437,169439],{"className":28,"code":169438,"language":30,"meta":31,"style":31},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[33,169440,169441,169456,169461,169468,169472,169476,169487],{"__ignoreMap":31},[36,169442,169443,169445,169448,169451,169453],{"class":38,"line":39},[36,169444,1820],{"class":46},[36,169446,169447],{"class":101}," add_item",[36,169449,169450],{"class":42},"(item, items",[36,169452,47],{"class":46},[36,169454,169455],{"class":42},"[]):\n",[36,169457,169458],{"class":38,"line":53},[36,169459,169460],{"class":42},"    items.append(item)\n",[36,169462,169463,169465],{"class":38,"line":196},[36,169464,7788],{"class":46},[36,169466,169467],{"class":42}," items\n",[36,169469,169470],{"class":38,"line":642},[36,169471,659],{"emptyLinePlaceholder":658},[36,169473,169474],{"class":38,"line":655},[36,169475,659],{"emptyLinePlaceholder":658},[36,169477,169478,169480,169483,169485],{"class":38,"line":662},[36,169479,3486],{"class":112},[36,169481,169482],{"class":42},"(add_item(",[36,169484,168359],{"class":105},[36,169486,2005],{"class":42},[36,169488,169489,169491,169493,169496],{"class":38,"line":667},[36,169490,3486],{"class":112},[36,169492,169482],{"class":42},[36,169494,169495],{"class":105},"\"b\"",[36,169497,2005],{"class":42},[19,169499,169500],{},"第二次调用会复用第一次的列表。",[19,169502,158922],{},[26,169504,169506],{"className":28,"code":169505,"language":30,"meta":31,"style":31},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[33,169507,169508,169522,169535,169544,169548],{"__ignoreMap":31},[36,169509,169510,169512,169514,169516,169518,169520],{"class":38,"line":39},[36,169511,1820],{"class":46},[36,169513,169447],{"class":101},[36,169515,169450],{"class":42},[36,169517,47],{"class":46},[36,169519,885],{"class":112},[36,169521,848],{"class":42},[36,169523,169524,169526,169529,169531,169533],{"class":38,"line":53},[36,169525,3752],{"class":46},[36,169527,169528],{"class":42}," items ",[36,169530,42486],{"class":46},[36,169532,1384],{"class":112},[36,169534,888],{"class":42},[36,169536,169537,169540,169542],{"class":38,"line":196},[36,169538,169539],{"class":42},"        items ",[36,169541,47],{"class":46},[36,169543,55395],{"class":42},[36,169545,169546],{"class":38,"line":642},[36,169547,169460],{"class":42},[36,169549,169550,169552],{"class":38,"line":655},[36,169551,7788],{"class":46},[36,169553,169467],{"class":42},[14,169555,169557],{"id":169556},"_76-不定长参数","7.6 不定长参数",[318,169559,169561],{"id":169560},"_761-args","7.6.1 *args",[19,169563,169564,169567],{},[33,169565,169566],{},"*args"," 接收任意数量的位置参数，得到元组。",[26,169569,169571],{"className":28,"code":169570,"language":30,"meta":31,"style":31},"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",[33,169572,169573,169586,169594,169605,169614,169620,169624,169628,169647],{"__ignoreMap":31},[36,169574,169575,169577,169579,169581,169583],{"class":38,"line":39},[36,169576,1820],{"class":46},[36,169578,8903],{"class":101},[36,169580,495],{"class":42},[36,169582,1372],{"class":46},[36,169584,169585],{"class":42},"args):\n",[36,169587,169588,169590,169592],{"class":38,"line":53},[36,169589,162341],{"class":42},[36,169591,47],{"class":46},[36,169593,1074],{"class":112},[36,169595,169596,169598,169600,169602],{"class":38,"line":196},[36,169597,1909],{"class":46},[36,169599,159214],{"class":42},[36,169601,1619],{"class":46},[36,169603,169604],{"class":42}," args:\n",[36,169606,169607,169609,169611],{"class":38,"line":642},[36,169608,163016],{"class":42},[36,169610,1658],{"class":46},[36,169612,169613],{"class":42}," num\n",[36,169615,169616,169618],{"class":38,"line":655},[36,169617,7788],{"class":46},[36,169619,165321],{"class":42},[36,169621,169622],{"class":38,"line":662},[36,169623,659],{"emptyLinePlaceholder":658},[36,169625,169626],{"class":38,"line":667},[36,169627,659],{"emptyLinePlaceholder":658},[36,169629,169630,169632,169635,169637,169639,169641,169643,169645],{"class":38,"line":679},[36,169631,3486],{"class":112},[36,169633,169634],{"class":42},"(add(",[36,169636,4092],{"class":112},[36,169638,478],{"class":42},[36,169640,498],{"class":112},[36,169642,478],{"class":42},[36,169644,1982],{"class":112},[36,169646,2005],{"class":42},[36,169648,169649,169651,169653,169655,169657,169659,169661,169663,169665,169667,169669,169671],{"class":38,"line":685},[36,169650,3486],{"class":112},[36,169652,169634],{"class":42},[36,169654,4092],{"class":112},[36,169656,478],{"class":42},[36,169658,498],{"class":112},[36,169660,478],{"class":42},[36,169662,1982],{"class":112},[36,169664,478],{"class":42},[36,169666,4168],{"class":112},[36,169668,478],{"class":42},[36,169670,4194],{"class":112},[36,169672,2005],{"class":42},[318,169674,169676],{"id":169675},"_762-kwargs","7.6.2 **kwargs",[19,169678,169679,169682],{},[33,169680,169681],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[26,169684,169686],{"className":28,"code":169685,"language":30,"meta":31,"style":31},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[33,169687,169688,169701,169712,169718,169722,169726],{"__ignoreMap":31},[36,169689,169690,169692,169694,169696,169698],{"class":38,"line":39},[36,169691,1820],{"class":46},[36,169693,164979],{"class":101},[36,169695,495],{"class":42},[36,169697,14322],{"class":46},[36,169699,169700],{"class":42},"kwargs):\n",[36,169702,169703,169705,169707,169709],{"class":38,"line":53},[36,169704,1909],{"class":46},[36,169706,167819],{"class":42},[36,169708,1619],{"class":46},[36,169710,169711],{"class":42}," kwargs.items():\n",[36,169713,169714,169716],{"class":38,"line":196},[36,169715,1960],{"class":112},[36,169717,167831],{"class":42},[36,169719,169720],{"class":38,"line":642},[36,169721,659],{"emptyLinePlaceholder":658},[36,169723,169724],{"class":38,"line":655},[36,169725,659],{"emptyLinePlaceholder":658},[36,169727,169728,169730,169732,169734,169736,169738,169740,169742,169744,169746,169748,169750,169752],{"class":38,"line":662},[36,169729,165044],{"class":42},[36,169731,83364],{"class":468},[36,169733,47],{"class":46},[36,169735,152922],{"class":105},[36,169737,478],{"class":42},[36,169739,73775],{"class":468},[36,169741,47],{"class":46},[36,169743,4521],{"class":112},[36,169745,478],{"class":42},[36,169747,73826],{"class":468},[36,169749,47],{"class":46},[36,169751,72824],{"class":105},[36,169753,922],{"class":42},[14,169755,169757],{"id":169756},"_77-参数解包","7.7 参数解包",[19,169759,169760],{},"列表或元组解包为位置参数：",[26,169762,169764],{"className":28,"code":169763,"language":30,"meta":31,"style":31},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[33,169765,169766,169775,169790,169794,169798,169818],{"__ignoreMap":31},[36,169767,169768,169770,169772],{"class":38,"line":39},[36,169769,1820],{"class":46},[36,169771,8903],{"class":101},[36,169773,169774],{"class":42},"(a, b, c):\n",[36,169776,169777,169779,169781,169783,169785,169787],{"class":38,"line":53},[36,169778,7788],{"class":46},[36,169780,14530],{"class":42},[36,169782,4354],{"class":46},[36,169784,14543],{"class":42},[36,169786,4354],{"class":46},[36,169788,169789],{"class":42}," c\n",[36,169791,169792],{"class":38,"line":196},[36,169793,659],{"emptyLinePlaceholder":658},[36,169795,169796],{"class":38,"line":642},[36,169797,659],{"emptyLinePlaceholder":658},[36,169799,169800,169802,169804,169806,169808,169810,169812,169814,169816],{"class":38,"line":655},[36,169801,167134],{"class":42},[36,169803,47],{"class":46},[36,169805,55783],{"class":42},[36,169807,4092],{"class":112},[36,169809,478],{"class":42},[36,169811,498],{"class":112},[36,169813,478],{"class":42},[36,169815,1982],{"class":112},[36,169817,36806],{"class":42},[36,169819,169820,169822,169824,169826],{"class":38,"line":662},[36,169821,3486],{"class":112},[36,169823,169634],{"class":42},[36,169825,1372],{"class":46},[36,169827,169828],{"class":42},"nums))\n",[19,169830,169831],{},"字典解包为关键字参数：",[26,169833,169835],{"className":28,"code":169834,"language":30,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[33,169836,169837,169845,169871,169875,169879,169903],{"__ignoreMap":31},[36,169838,169839,169841,169843],{"class":38,"line":39},[36,169840,1820],{"class":46},[36,169842,152406],{"class":101},[36,169844,152409],{"class":42},[36,169846,169847,169849,169851,169853,169855,169857,169859,169861,169863,169865,169867,169869],{"class":38,"line":53},[36,169848,1867],{"class":112},[36,169850,495],{"class":42},[36,169852,3937],{"class":46},[36,169854,4126],{"class":105},[36,169856,4766],{"class":112},[36,169858,83364],{"class":42},[36,169860,4815],{"class":112},[36,169862,859],{"class":112},[36,169864,73775],{"class":42},[36,169866,4815],{"class":112},[36,169868,4126],{"class":105},[36,169870,922],{"class":42},[36,169872,169873],{"class":38,"line":196},[36,169874,659],{"emptyLinePlaceholder":658},[36,169876,169877],{"class":38,"line":642},[36,169878,659],{"emptyLinePlaceholder":658},[36,169880,169881,169883,169885,169887,169889,169891,169893,169895,169897,169899,169901],{"class":38,"line":655},[36,169882,3271],{"class":42},[36,169884,47],{"class":46},[36,169886,859],{"class":42},[36,169888,66234],{"class":105},[36,169890,54994],{"class":42},[36,169892,152922],{"class":105},[36,169894,478],{"class":42},[36,169896,72679],{"class":105},[36,169898,54994],{"class":42},[36,169900,4521],{"class":112},[36,169902,5300],{"class":42},[36,169904,169905,169907,169909],{"class":38,"line":662},[36,169906,169190],{"class":42},[36,169908,14322],{"class":46},[36,169910,169911],{"class":42},"info)\n",[14,169913,169915],{"id":169914},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,169917,169918,169921],{},[33,169919,169920],{},"lambda"," 用于定义简单匿名函数。",[26,169923,169925],{"className":28,"code":169924,"language":30,"meta":31,"style":31},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[33,169926,169927,169944],{"__ignoreMap":31},[36,169928,169929,169932,169934,169937,169940,169942],{"class":38,"line":39},[36,169930,169931],{"class":42},"add ",[36,169933,47],{"class":46},[36,169935,169936],{"class":46}," lambda",[36,169938,169939],{"class":42}," a, b: a ",[36,169941,4354],{"class":46},[36,169943,154138],{"class":42},[36,169945,169946,169948,169950,169952,169954,169956],{"class":38,"line":53},[36,169947,3486],{"class":112},[36,169949,169634],{"class":42},[36,169951,4092],{"class":112},[36,169953,478],{"class":42},[36,169955,498],{"class":112},[36,169957,2005],{"class":42},[19,169959,169960],{},"常和排序、过滤等函数一起使用。",[19,169962,169963],{},"按分数排序：",[26,169965,169967],{"className":28,"code":169966,"language":30,"meta":31,"style":31},"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",[33,169968,169969,169977,169997,170017,170037,170041,170045,170068],{"__ignoreMap":31},[36,169970,169971,169973,169975],{"class":38,"line":39},[36,169972,162750],{"class":42},[36,169974,47],{"class":46},[36,169976,59003],{"class":42},[36,169978,169979,169981,169983,169985,169987,169989,169991,169993,169995],{"class":38,"line":53},[36,169980,151419],{"class":42},[36,169982,66234],{"class":105},[36,169984,54994],{"class":42},[36,169986,152922],{"class":105},[36,169988,478],{"class":42},[36,169990,154506],{"class":105},[36,169992,54994],{"class":42},[36,169994,4858],{"class":112},[36,169996,8626],{"class":42},[36,169998,169999,170001,170003,170005,170007,170009,170011,170013,170015],{"class":38,"line":196},[36,170000,151419],{"class":42},[36,170002,66234],{"class":105},[36,170004,54994],{"class":42},[36,170006,153970],{"class":105},[36,170008,478],{"class":42},[36,170010,154506],{"class":105},[36,170012,54994],{"class":42},[36,170014,4681],{"class":112},[36,170016,8626],{"class":42},[36,170018,170019,170021,170023,170025,170027,170029,170031,170033,170035],{"class":38,"line":642},[36,170020,151419],{"class":42},[36,170022,66234],{"class":105},[36,170024,54994],{"class":42},[36,170026,162765],{"class":105},[36,170028,478],{"class":42},[36,170030,154506],{"class":105},[36,170032,54994],{"class":42},[36,170034,4281],{"class":112},[36,170036,8626],{"class":42},[36,170038,170039],{"class":38,"line":655},[36,170040,36806],{"class":42},[36,170042,170043],{"class":38,"line":662},[36,170044,659],{"emptyLinePlaceholder":658},[36,170046,170047,170050,170052,170054,170056,170058,170060,170062,170064,170066],{"class":38,"line":667},[36,170048,170049],{"class":42},"students.sort(",[36,170051,156980],{"class":468},[36,170053,156983],{"class":46},[36,170055,156986],{"class":42},[36,170057,154506],{"class":105},[36,170059,2000],{"class":42},[36,170061,166562],{"class":468},[36,170063,47],{"class":46},[36,170065,35066],{"class":112},[36,170067,922],{"class":42},[36,170069,170070,170072],{"class":38,"line":679},[36,170071,3486],{"class":112},[36,170073,168029],{"class":42},[19,170075,170076,170077,170079],{},"如果逻辑复杂，不要硬写 ",[33,170078,169920],{},"，定义普通函数更清晰。",[14,170081,170083],{"id":170082},"_79-函数作为参数","7.9 函数作为参数",[19,170085,170086],{},"函数可以作为参数传给另一个函数。",[26,170088,170090],{"className":28,"code":170089,"language":30,"meta":31,"style":31},"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",[33,170091,170092,170100,170110,170114,170118,170128,170135,170139,170143],{"__ignoreMap":31},[36,170093,170094,170096,170098],{"class":38,"line":39},[36,170095,1820],{"class":46},[36,170097,8903],{"class":101},[36,170099,154127],{"class":42},[36,170101,170102,170104,170106,170108],{"class":38,"line":53},[36,170103,7788],{"class":46},[36,170105,14530],{"class":42},[36,170107,4354],{"class":46},[36,170109,154138],{"class":42},[36,170111,170112],{"class":38,"line":196},[36,170113,659],{"emptyLinePlaceholder":658},[36,170115,170116],{"class":38,"line":642},[36,170117,659],{"emptyLinePlaceholder":658},[36,170119,170120,170122,170125],{"class":38,"line":655},[36,170121,1820],{"class":46},[36,170123,170124],{"class":101}," calculate",[36,170126,170127],{"class":42},"(a, b, func):\n",[36,170129,170130,170132],{"class":38,"line":662},[36,170131,7788],{"class":46},[36,170133,170134],{"class":42}," func(a, b)\n",[36,170136,170137],{"class":38,"line":667},[36,170138,659],{"emptyLinePlaceholder":658},[36,170140,170141],{"class":38,"line":679},[36,170142,659],{"emptyLinePlaceholder":658},[36,170144,170145,170147,170150,170152,170154,170156],{"class":38,"line":685},[36,170146,3486],{"class":112},[36,170148,170149],{"class":42},"(calculate(",[36,170151,554],{"class":112},[36,170153,478],{"class":42},[36,170155,1921],{"class":112},[36,170157,170158],{"class":42},", add))\n",[19,170160,170161],{},"这种思想在排序、回调、框架中经常出现。",[14,170163,170165],{"id":170164},"_710-mapfiltersorted","7.10 map、filter、sorted",[318,170167,170169],{"id":170168},"_7101-map","7.10.1 map",[19,170171,170172,170174],{},[33,170173,77598],{}," 对每个元素执行函数。",[26,170176,170178],{"className":28,"code":170177,"language":30,"meta":31,"style":31},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[33,170179,170180,170204,170227],{"__ignoreMap":31},[36,170181,170182,170184,170186,170188,170190,170192,170194,170196,170198,170200,170202],{"class":38,"line":39},[36,170183,167134],{"class":42},[36,170185,47],{"class":46},[36,170187,55783],{"class":42},[36,170189,4092],{"class":112},[36,170191,478],{"class":42},[36,170193,498],{"class":112},[36,170195,478],{"class":42},[36,170197,1982],{"class":112},[36,170199,478],{"class":42},[36,170201,4168],{"class":112},[36,170203,36806],{"class":42},[36,170205,170206,170208,170210,170213,170215,170217,170220,170222,170224],{"class":38,"line":53},[36,170207,164340],{"class":42},[36,170209,47],{"class":46},[36,170211,170212],{"class":112}," map",[36,170214,495],{"class":42},[36,170216,169920],{"class":46},[36,170218,170219],{"class":42}," x: x ",[36,170221,1372],{"class":46},[36,170223,18411],{"class":112},[36,170225,170226],{"class":42},", nums)\n",[36,170228,170229,170231,170233,170235],{"class":38,"line":196},[36,170230,3486],{"class":112},[36,170232,495],{"class":42},[36,170234,157104],{"class":112},[36,170236,169102],{"class":42},[318,170238,170240],{"id":170239},"_7102-filter","7.10.2 filter",[19,170242,170243,170245],{},[33,170244,83605],{}," 保留满足条件的元素。",[26,170247,170249],{"className":28,"code":170248,"language":30,"meta":31,"style":31},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[33,170250,170251,170279,170304],{"__ignoreMap":31},[36,170252,170253,170255,170257,170259,170261,170263,170265,170267,170269,170271,170273,170275,170277],{"class":38,"line":39},[36,170254,167134],{"class":42},[36,170256,47],{"class":46},[36,170258,55783],{"class":42},[36,170260,4092],{"class":112},[36,170262,478],{"class":42},[36,170264,498],{"class":112},[36,170266,478],{"class":42},[36,170268,1982],{"class":112},[36,170270,478],{"class":42},[36,170272,4168],{"class":112},[36,170274,478],{"class":42},[36,170276,4194],{"class":112},[36,170278,36806],{"class":42},[36,170280,170281,170283,170285,170288,170290,170292,170294,170296,170298,170300,170302],{"class":38,"line":53},[36,170282,164340],{"class":42},[36,170284,47],{"class":46},[36,170286,170287],{"class":112}," filter",[36,170289,495],{"class":42},[36,170291,169920],{"class":46},[36,170293,170219],{"class":42},[36,170295,4203],{"class":46},[36,170297,18411],{"class":112},[36,170299,2073],{"class":46},[36,170301,1004],{"class":112},[36,170303,170226],{"class":42},[36,170305,170306,170308,170310,170312],{"class":38,"line":196},[36,170307,3486],{"class":112},[36,170309,495],{"class":42},[36,170311,157104],{"class":112},[36,170313,169102],{"class":42},[318,170315,170317],{"id":170316},"_7103-sorted","7.10.3 sorted",[19,170319,170320,170322],{},[33,170321,168270],{}," 返回排序后的新列表。",[26,170324,170326],{"className":28,"code":170325,"language":30,"meta":31,"style":31},"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",[33,170327,170328,170336,170356,170376,170396,170400,170404,170433],{"__ignoreMap":31},[36,170329,170330,170332,170334],{"class":38,"line":39},[36,170331,162750],{"class":42},[36,170333,47],{"class":46},[36,170335,59003],{"class":42},[36,170337,170338,170340,170342,170344,170346,170348,170350,170352,170354],{"class":38,"line":53},[36,170339,151419],{"class":42},[36,170341,66234],{"class":105},[36,170343,54994],{"class":42},[36,170345,152922],{"class":105},[36,170347,478],{"class":42},[36,170349,154506],{"class":105},[36,170351,54994],{"class":42},[36,170353,4858],{"class":112},[36,170355,8626],{"class":42},[36,170357,170358,170360,170362,170364,170366,170368,170370,170372,170374],{"class":38,"line":196},[36,170359,151419],{"class":42},[36,170361,66234],{"class":105},[36,170363,54994],{"class":42},[36,170365,153970],{"class":105},[36,170367,478],{"class":42},[36,170369,154506],{"class":105},[36,170371,54994],{"class":42},[36,170373,4681],{"class":112},[36,170375,8626],{"class":42},[36,170377,170378,170380,170382,170384,170386,170388,170390,170392,170394],{"class":38,"line":642},[36,170379,151419],{"class":42},[36,170381,66234],{"class":105},[36,170383,54994],{"class":42},[36,170385,162765],{"class":105},[36,170387,478],{"class":42},[36,170389,154506],{"class":105},[36,170391,54994],{"class":42},[36,170393,4281],{"class":112},[36,170395,8626],{"class":42},[36,170397,170398],{"class":38,"line":655},[36,170399,36806],{"class":42},[36,170401,170402],{"class":38,"line":662},[36,170403,659],{"emptyLinePlaceholder":658},[36,170405,170406,170408,170410,170412,170415,170417,170419,170421,170423,170425,170427,170429,170431],{"class":38,"line":667},[36,170407,164340],{"class":42},[36,170409,47],{"class":46},[36,170411,166638],{"class":112},[36,170413,170414],{"class":42},"(students, ",[36,170416,156980],{"class":468},[36,170418,156983],{"class":46},[36,170420,156986],{"class":42},[36,170422,154506],{"class":105},[36,170424,2000],{"class":42},[36,170426,166562],{"class":468},[36,170428,47],{"class":46},[36,170430,35066],{"class":112},[36,170432,922],{"class":42},[36,170434,170435,170437],{"class":38,"line":679},[36,170436,3486],{"class":112},[36,170438,80139],{"class":42},[14,170440,170442],{"id":170441},"_711-闭包入门","7.11 闭包入门",[19,170444,170445],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[26,170447,170449],{"className":28,"code":170448,"language":30,"meta":31,"style":31},"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",[33,170450,170451,170461,170471,170482,170486,170493,170497,170501,170515],{"__ignoreMap":31},[36,170452,170453,170455,170458],{"class":38,"line":39},[36,170454,1820],{"class":46},[36,170456,170457],{"class":101}," outer",[36,170459,170460],{"class":42},"(base):\n",[36,170462,170463,170465,170468],{"class":38,"line":53},[36,170464,876],{"class":46},[36,170466,170467],{"class":101}," inner",[36,170469,170470],{"class":42},"(num):\n",[36,170472,170473,170475,170478,170480],{"class":38,"line":196},[36,170474,1239],{"class":46},[36,170476,170477],{"class":42}," base ",[36,170479,4354],{"class":46},[36,170481,169613],{"class":42},[36,170483,170484],{"class":38,"line":642},[36,170485,659],{"emptyLinePlaceholder":658},[36,170487,170488,170490],{"class":38,"line":655},[36,170489,7788],{"class":46},[36,170491,170492],{"class":42}," inner\n",[36,170494,170495],{"class":38,"line":662},[36,170496,659],{"emptyLinePlaceholder":658},[36,170498,170499],{"class":38,"line":667},[36,170500,659],{"emptyLinePlaceholder":658},[36,170502,170503,170506,170508,170511,170513],{"class":38,"line":679},[36,170504,170505],{"class":42},"add_10 ",[36,170507,47],{"class":46},[36,170509,170510],{"class":42}," outer(",[36,170512,554],{"class":112},[36,170514,922],{"class":42},[36,170516,170517,170519,170522,170524],{"class":38,"line":685},[36,170518,3486],{"class":112},[36,170520,170521],{"class":42},"(add_10(",[36,170523,4194],{"class":112},[36,170525,2005],{"class":42},[19,170527,170528],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,170530,170532],{"id":170531},"_712-装饰器入门","7.12 装饰器入门",[19,170534,170535],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[26,170537,170539],{"className":28,"code":170538,"language":30,"meta":31,"style":31},"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",[33,170540,170541,170550,170559,170570,170575,170586,170590,170597,170601,170605,170610,170618,170628,170632,170636],{"__ignoreMap":31},[36,170542,170543,170545,170547],{"class":38,"line":39},[36,170544,1820],{"class":46},[36,170546,90744],{"class":101},[36,170548,170549],{"class":42},"(func):\n",[36,170551,170552,170554,170557],{"class":38,"line":53},[36,170553,876],{"class":46},[36,170555,170556],{"class":101}," wrapper",[36,170558,35540],{"class":42},[36,170560,170561,170563,170565,170568],{"class":38,"line":196},[36,170562,1960],{"class":112},[36,170564,495],{"class":42},[36,170566,170567],{"class":105},"\"函数开始执行\"",[36,170569,922],{"class":42},[36,170571,170572],{"class":38,"line":642},[36,170573,170574],{"class":42},"        func()\n",[36,170576,170577,170579,170581,170584],{"class":38,"line":655},[36,170578,1960],{"class":112},[36,170580,495],{"class":42},[36,170582,170583],{"class":105},"\"函数执行结束\"",[36,170585,922],{"class":42},[36,170587,170588],{"class":38,"line":662},[36,170589,659],{"emptyLinePlaceholder":658},[36,170591,170592,170594],{"class":38,"line":667},[36,170593,7788],{"class":46},[36,170595,170596],{"class":42}," wrapper\n",[36,170598,170599],{"class":38,"line":679},[36,170600,659],{"emptyLinePlaceholder":658},[36,170602,170603],{"class":38,"line":685},[36,170604,659],{"emptyLinePlaceholder":658},[36,170606,170607],{"class":38,"line":691},[36,170608,170609],{"class":101},"@log\n",[36,170611,170612,170614,170616],{"class":38,"line":696},[36,170613,1820],{"class":46},[36,170615,164030],{"class":101},[36,170617,35540],{"class":42},[36,170619,170620,170622,170624,170626],{"class":38,"line":702},[36,170621,1867],{"class":112},[36,170623,495],{"class":42},[36,170625,9537],{"class":105},[36,170627,922],{"class":42},[36,170629,170630],{"class":38,"line":708},[36,170631,659],{"emptyLinePlaceholder":658},[36,170633,170634],{"class":38,"line":713},[36,170635,659],{"emptyLinePlaceholder":658},[36,170637,170638],{"class":38,"line":719},[36,170639,164065],{"class":42},[19,170641,161308],{},[26,170643,170645],{"className":28,"code":170644,"language":30,"meta":31,"style":31},"say_hello = log(say_hello)\n",[33,170646,170647],{"__ignoreMap":31},[36,170648,170649,170652,170654],{"class":38,"line":39},[36,170650,170651],{"class":42},"say_hello ",[36,170653,47],{"class":46},[36,170655,170656],{"class":42}," log(say_hello)\n",[19,170658,170659],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,170661,170663],{"id":170662},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[26,170665,170667],{"className":28,"code":170666,"language":30,"meta":31,"style":31},"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",[33,170668,170669,170677,170694,170704,170723,170733,170740,170744,170750,170754,170758,170762,170770,170780,170784,170788],{"__ignoreMap":31},[36,170670,170671,170673,170675],{"class":38,"line":39},[36,170672,1820],{"class":46},[36,170674,90744],{"class":101},[36,170676,170549],{"class":42},[36,170678,170679,170681,170683,170685,170687,170690,170692],{"class":38,"line":53},[36,170680,876],{"class":46},[36,170682,170556],{"class":101},[36,170684,495],{"class":42},[36,170686,1372],{"class":46},[36,170688,170689],{"class":42},"args, ",[36,170691,14322],{"class":46},[36,170693,169700],{"class":42},[36,170695,170696,170698,170700,170702],{"class":38,"line":196},[36,170697,1960],{"class":112},[36,170699,495],{"class":42},[36,170701,170567],{"class":105},[36,170703,922],{"class":42},[36,170705,170706,170709,170711,170714,170716,170718,170720],{"class":38,"line":642},[36,170707,170708],{"class":42},"        result ",[36,170710,47],{"class":46},[36,170712,170713],{"class":42}," func(",[36,170715,1372],{"class":46},[36,170717,170689],{"class":42},[36,170719,14322],{"class":46},[36,170721,170722],{"class":42},"kwargs)\n",[36,170724,170725,170727,170729,170731],{"class":38,"line":655},[36,170726,1960],{"class":112},[36,170728,495],{"class":42},[36,170730,170583],{"class":105},[36,170732,922],{"class":42},[36,170734,170735,170737],{"class":38,"line":662},[36,170736,1239],{"class":46},[36,170738,170739],{"class":42}," result\n",[36,170741,170742],{"class":38,"line":667},[36,170743,659],{"emptyLinePlaceholder":658},[36,170745,170746,170748],{"class":38,"line":679},[36,170747,7788],{"class":46},[36,170749,170596],{"class":42},[36,170751,170752],{"class":38,"line":685},[36,170753,659],{"emptyLinePlaceholder":658},[36,170755,170756],{"class":38,"line":691},[36,170757,659],{"emptyLinePlaceholder":658},[36,170759,170760],{"class":38,"line":696},[36,170761,170609],{"class":101},[36,170763,170764,170766,170768],{"class":38,"line":702},[36,170765,1820],{"class":46},[36,170767,8903],{"class":101},[36,170769,154127],{"class":42},[36,170771,170772,170774,170776,170778],{"class":38,"line":708},[36,170773,7788],{"class":46},[36,170775,14530],{"class":42},[36,170777,4354],{"class":46},[36,170779,154138],{"class":42},[36,170781,170782],{"class":38,"line":713},[36,170783,659],{"emptyLinePlaceholder":658},[36,170785,170786],{"class":38,"line":719},[36,170787,659],{"emptyLinePlaceholder":658},[36,170789,170790,170792,170794,170796,170798,170800],{"class":38,"line":725},[36,170791,3486],{"class":112},[36,170793,169634],{"class":42},[36,170795,554],{"class":112},[36,170797,478],{"class":42},[36,170799,1921],{"class":112},[36,170801,2005],{"class":42},[19,170803,170804,170805,324,170807,170809],{},"这个写法使用 ",[33,170806,169566],{},[33,170808,169681],{}," 接收原函数的所有参数。",[14,170811,170813],{"id":170812},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,170815,126326],{},[211,170817,170818,170821,170824],{},[214,170819,170820],{},"给定一组学生数据。",[214,170822,170823],{},"封装函数，根据传入规则筛选学生。",[214,170825,170826],{},"筛选及格、优秀、未成年学生。",[19,170828,13696],{},[26,170830,170832],{"className":28,"code":170831,"language":30,"meta":31,"style":31},"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",[33,170833,170834,170842,170870,170898,170926,170930,170934,170938,170948,170956,170966,170973,170978,170984,170988,170992,171016,171039,171062,171066,171073,171080],{"__ignoreMap":31},[36,170835,170836,170838,170840],{"class":38,"line":39},[36,170837,162750],{"class":42},[36,170839,47],{"class":46},[36,170841,59003],{"class":42},[36,170843,170844,170846,170848,170850,170852,170854,170856,170858,170860,170862,170864,170866,170868],{"class":38,"line":53},[36,170845,151419],{"class":42},[36,170847,66234],{"class":105},[36,170849,54994],{"class":42},[36,170851,152922],{"class":105},[36,170853,478],{"class":42},[36,170855,72679],{"class":105},[36,170857,54994],{"class":42},[36,170859,4521],{"class":112},[36,170861,478],{"class":42},[36,170863,154506],{"class":105},[36,170865,54994],{"class":42},[36,170867,4858],{"class":112},[36,170869,8626],{"class":42},[36,170871,170872,170874,170876,170878,170880,170882,170884,170886,170888,170890,170892,170894,170896],{"class":38,"line":196},[36,170873,151419],{"class":42},[36,170875,66234],{"class":105},[36,170877,54994],{"class":42},[36,170879,153970],{"class":105},[36,170881,478],{"class":42},[36,170883,72679],{"class":105},[36,170885,54994],{"class":42},[36,170887,4496],{"class":112},[36,170889,478],{"class":42},[36,170891,154506],{"class":105},[36,170893,54994],{"class":42},[36,170895,4681],{"class":112},[36,170897,8626],{"class":42},[36,170899,170900,170902,170904,170906,170908,170910,170912,170914,170916,170918,170920,170922,170924],{"class":38,"line":642},[36,170901,151419],{"class":42},[36,170903,66234],{"class":105},[36,170905,54994],{"class":42},[36,170907,162765],{"class":105},[36,170909,478],{"class":42},[36,170911,72679],{"class":105},[36,170913,54994],{"class":42},[36,170915,4546],{"class":112},[36,170917,478],{"class":42},[36,170919,154506],{"class":105},[36,170921,54994],{"class":42},[36,170923,4752],{"class":112},[36,170925,8626],{"class":42},[36,170927,170928],{"class":38,"line":655},[36,170929,36806],{"class":42},[36,170931,170932],{"class":38,"line":662},[36,170933,659],{"emptyLinePlaceholder":658},[36,170935,170936],{"class":38,"line":667},[36,170937,659],{"emptyLinePlaceholder":658},[36,170939,170940,170942,170945],{"class":38,"line":679},[36,170941,1820],{"class":46},[36,170943,170944],{"class":101}," filter_students",[36,170946,170947],{"class":42},"(students, condition):\n",[36,170949,170950,170952,170954],{"class":38,"line":685},[36,170951,164257],{"class":42},[36,170953,47],{"class":46},[36,170955,55395],{"class":42},[36,170957,170958,170960,170962,170964],{"class":38,"line":691},[36,170959,1909],{"class":46},[36,170961,155171],{"class":42},[36,170963,1619],{"class":46},[36,170965,155176],{"class":42},[36,170967,170968,170970],{"class":38,"line":696},[36,170969,995],{"class":46},[36,170971,170972],{"class":42}," condition(student):\n",[36,170974,170975],{"class":38,"line":702},[36,170976,170977],{"class":42},"            result.append(student)\n",[36,170979,170980,170982],{"class":38,"line":708},[36,170981,7788],{"class":46},[36,170983,170739],{"class":42},[36,170985,170986],{"class":38,"line":713},[36,170987,659],{"emptyLinePlaceholder":658},[36,170989,170990],{"class":38,"line":719},[36,170991,659],{"emptyLinePlaceholder":658},[36,170993,170994,170996,170998,171001,171003,171006,171008,171010,171012,171014],{"class":38,"line":725},[36,170995,168735],{"class":42},[36,170997,47],{"class":46},[36,170999,171000],{"class":42}," filter_students(students, ",[36,171002,169920],{"class":46},[36,171004,171005],{"class":42}," s: s[",[36,171007,154506],{"class":105},[36,171009,8140],{"class":42},[36,171011,412],{"class":46},[36,171013,160871],{"class":112},[36,171015,922],{"class":42},[36,171017,171018,171021,171023,171025,171027,171029,171031,171033,171035,171037],{"class":38,"line":731},[36,171019,171020],{"class":42},"excellent ",[36,171022,47],{"class":46},[36,171024,171000],{"class":42},[36,171026,169920],{"class":46},[36,171028,171005],{"class":42},[36,171030,154506],{"class":105},[36,171032,8140],{"class":42},[36,171034,412],{"class":46},[36,171036,160822],{"class":112},[36,171038,922],{"class":42},[36,171040,171041,171044,171046,171048,171050,171052,171054,171056,171058,171060],{"class":38,"line":736},[36,171042,171043],{"class":42},"under_age ",[36,171045,47],{"class":46},[36,171047,171000],{"class":42},[36,171049,169920],{"class":46},[36,171051,171005],{"class":42},[36,171053,72679],{"class":105},[36,171055,8140],{"class":42},[36,171057,393],{"class":46},[36,171059,159319],{"class":112},[36,171061,922],{"class":42},[36,171063,171064],{"class":38,"line":742},[36,171065,659],{"emptyLinePlaceholder":658},[36,171067,171068,171070],{"class":38,"line":748},[36,171069,3486],{"class":112},[36,171071,171072],{"class":42},"(passed)\n",[36,171074,171075,171077],{"class":38,"line":754},[36,171076,3486],{"class":112},[36,171078,171079],{"class":42},"(excellent)\n",[36,171081,171082,171084],{"class":38,"line":760},[36,171083,3486],{"class":112},[36,171085,171086],{"class":42},"(under_age)\n",[14,171088,171090],{"id":171089},"_715-易错点","7.15 易错点",[211,171092,171093,171096,171104,171109,171120],{},[214,171094,171095],{},"默认参数不要写可变对象。",[214,171097,171098,171100,171101,171103],{},[33,171099,169566],{}," 是元组，",[33,171102,169681],{}," 是字典。",[214,171105,171106,171108],{},[33,171107,169920],{}," 只适合简单表达式。",[214,171110,171111,324,171113,171115,171116,171119],{},[33,171112,77598],{},[33,171114,83605],{}," 的结果是迭代器，常用 ",[33,171117,171118],{},"list()"," 转换查看。",[214,171121,171122],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,171124,171126],{"id":171125},"_716-本章练习","7.16 本章练习",[211,171128,171129,171136,171142,171147,171152],{},[214,171130,171131,171132,171135],{},"写函数 ",[33,171133,171134],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[214,171137,171131,171138,171141],{},[33,171139,171140],{},"print_user(**kwargs)","，输出用户所有字段。",[214,171143,107857,171144,171146],{},[33,171145,169920],{}," 对学生列表按年龄排序。",[214,171148,107857,171149,171151],{},[33,171150,83605],{}," 找出成绩不及格的学生。",[214,171153,171154],{},"写一个装饰器，统计函数执行前后的提示信息。",[3785,171156,171157],{},"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":31,"searchDepth":53,"depth":53,"links":171159},[171160,171161,171162,171163,171164,171165,171169,171170,171171,171172,171177,171178,171179,171180,171181,171182],{"id":169018,"depth":53,"text":169019},{"id":169132,"depth":53,"text":169133},{"id":169221,"depth":53,"text":169222},{"id":169283,"depth":53,"text":169284},{"id":169429,"depth":53,"text":169430},{"id":169556,"depth":53,"text":169557,"children":171166},[171167,171168],{"id":169560,"depth":196,"text":169561},{"id":169675,"depth":196,"text":169676},{"id":169756,"depth":53,"text":169757},{"id":169914,"depth":53,"text":169915},{"id":170082,"depth":53,"text":170083},{"id":170164,"depth":53,"text":170165,"children":171173},[171174,171175,171176],{"id":170168,"depth":196,"text":170169},{"id":170239,"depth":196,"text":170240},{"id":170316,"depth":196,"text":170317},{"id":170441,"depth":53,"text":170442},{"id":170531,"depth":53,"text":170532},{"id":170662,"depth":53,"text":170663},{"id":170812,"depth":53,"text":170813},{"id":171089,"depth":53,"text":171090},{"id":171125,"depth":53,"text":171126},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":169010,"description":26998},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":171189,"title":171190,"body":171191,"description":26998,"extension":3817,"meta":173710,"navigation":658,"path":173711,"seo":173712,"stem":173713,"__hash__":173714},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":171192,"toc":173685},[171193,171196,171200,171203,171206,171237,171241,171245,171248,171275,171279,171282,171333,171336,171351,171354,171389,171393,171395,171419,171422,171482,171486,171490,171493,171550,171553,171573,171577,171580,171643,171647,171650,171706,171713,171737,171741,171744,171807,171811,171816,171867,171870,171874,171879,171946,171949,172031,172035,172040,172091,172094,172098,172101,172104,172112,172115,172161,172164,172210,172214,172220,172264,172267,172313,172316,172356,172359,172420,172424,172427,172517,172520,172662,172665,172732,172736,172739,172742,172883,172886,172964,172967,173143,173147,173149,173160,173162,173361,173365,173609,173613,173647,173651,173682],[10,171194,171190],{"id":171195},"_8-文件操作",[14,171197,171199],{"id":171198},"_81-文件操作的意义","8.1 文件操作的意义",[19,171201,171202],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,171204,171205],{},"常见文件类型：",[211,171207,171208,171214,171220,171226,171232],{},[214,171209,171210,171213],{},[33,171211,171212],{},".txt","：普通文本。",[214,171215,171216,171219],{},[33,171217,171218],{},".csv","：表格文本。",[214,171221,171222,171225],{},[33,171223,171224],{},".json","：结构化数据。",[214,171227,171228,171231],{},[33,171229,171230],{},".log","：日志文件。",[214,171233,171234,171236],{},[33,171235,149386],{},"：Python 源代码。",[14,171238,171240],{"id":171239},"_82-路径","8.2 路径",[318,171242,171244],{"id":171243},"_821-相对路径","8.2.1 相对路径",[19,171246,171247],{},"相对当前运行目录：",[26,171249,171251],{"className":28,"code":171250,"language":30,"meta":31,"style":31},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[33,171252,171253],{"__ignoreMap":31},[36,171254,171255,171257,171259,171261,171263,171265,171267,171269,171271,171273],{"class":38,"line":39},[36,171256,90468],{"class":112},[36,171258,495],{"class":42},[36,171260,149830],{"class":105},[36,171262,478],{"class":42},[36,171264,149835],{"class":105},[36,171266,478],{"class":42},[36,171268,149840],{"class":468},[36,171270,47],{"class":46},[36,171272,149845],{"class":105},[36,171274,922],{"class":42},[318,171276,171278],{"id":171277},"_822-绝对路径","8.2.2 绝对路径",[19,171280,171281],{},"从根目录或盘符开始：",[26,171283,171285],{"className":28,"code":171284,"language":30,"meta":31,"style":31},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[33,171286,171287,171310],{"__ignoreMap":31},[36,171288,171289,171291,171293,171296,171298,171300,171302,171304,171306,171308],{"class":38,"line":39},[36,171290,90468],{"class":112},[36,171292,495],{"class":42},[36,171294,171295],{"class":105},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[36,171297,478],{"class":42},[36,171299,149835],{"class":105},[36,171301,478],{"class":42},[36,171303,149840],{"class":468},[36,171305,47],{"class":46},[36,171307,149845],{"class":105},[36,171309,922],{"class":42},[36,171311,171312,171314,171316,171319,171321,171323,171325,171327,171329,171331],{"class":38,"line":53},[36,171313,90468],{"class":112},[36,171315,495],{"class":42},[36,171317,171318],{"class":105},"\"D:\u002Fdata\u002Fdata.txt\"",[36,171320,478],{"class":42},[36,171322,149835],{"class":105},[36,171324,478],{"class":42},[36,171326,149840],{"class":468},[36,171328,47],{"class":46},[36,171330,149845],{"class":105},[36,171332,922],{"class":42},[19,171334,171335],{},"Windows 路径建议写成：",[26,171337,171339],{"className":28,"code":171338,"language":30,"meta":31,"style":31},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[33,171340,171341],{"__ignoreMap":31},[36,171342,171343,171346,171348],{"class":38,"line":39},[36,171344,171345],{"class":42},"path ",[36,171347,47],{"class":46},[36,171349,171350],{"class":105}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,171352,171353],{},"或原始字符串：",[26,171355,171357],{"className":28,"code":171356,"language":30,"meta":31,"style":31},"path = r\"D:\\data\\data.txt\"\n",[33,171358,171359],{"__ignoreMap":31},[36,171360,171361,171363,171365,171367,171369,171372,171375,171378,171380,171382,171384,171387],{"class":38,"line":39},[36,171362,171345],{"class":42},[36,171364,47],{"class":46},[36,171366,20744],{"class":46},[36,171368,4126],{"class":105},[36,171370,171371],{"class":51534},"D:",[36,171373,171374],{"class":112},"\\d",[36,171376,171377],{"class":51534},"ata",[36,171379,171374],{"class":112},[36,171381,171377],{"class":51534},[36,171383,842],{"class":112},[36,171385,171386],{"class":51534},"txt",[36,171388,28747],{"class":105},[14,171390,171392],{"id":171391},"_83-open函数","8.3 open函数",[19,171394,8877],{},[26,171396,171398],{"className":28,"code":171397,"language":30,"meta":31,"style":31},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[33,171399,171400],{"__ignoreMap":31},[36,171401,171402,171404,171406,171408,171411,171413,171415,171417],{"class":38,"line":39},[36,171403,48912],{"class":468},[36,171405,673],{"class":46},[36,171407,149825],{"class":112},[36,171409,171410],{"class":42},"(文件路径, 打开模式, ",[36,171412,149840],{"class":468},[36,171414,47],{"class":46},[36,171416,149845],{"class":105},[36,171418,922],{"class":42},[19,171420,171421],{},"常见模式：",[248,171423,171424,171433],{},[251,171425,171426],{},[254,171427,171428,171431],{},[257,171429,171430],{},"模式",[257,171432,29483],{},[265,171434,171435,171444,171453,171462,171472],{},[254,171436,171437,171441],{},[270,171438,171439],{},[33,171440,4541],{},[270,171442,171443],{},"只读，文件不存在会报错",[254,171445,171446,171450],{},[270,171447,171448],{},[33,171449,4665],{},[270,171451,171452],{},"只写，文件不存在会创建，存在会清空",[254,171454,171455,171459],{},[270,171456,171457],{},[33,171458,4113],{},[270,171460,171461],{},"追加，文件不存在会创建",[254,171463,171464,171469],{},[270,171465,171466],{},[33,171467,171468],{},"rb",[270,171470,171471],{},"二进制只读",[254,171473,171474,171479],{},[270,171475,171476],{},[33,171477,171478],{},"wb",[270,171480,171481],{},"二进制只写",[14,171483,171485],{"id":171484},"_84-读取文件","8.4 读取文件",[318,171487,171489],{"id":171488},"_841-read","8.4.1 read",[19,171491,171492],{},"一次读取全部内容：",[26,171494,171496],{"className":28,"code":171495,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[33,171497,171498,171524,171536,171543],{"__ignoreMap":31},[36,171499,171500,171502,171504,171506,171508,171510,171512,171514,171516,171518,171520,171522],{"class":38,"line":39},[36,171501,48912],{"class":468},[36,171503,673],{"class":46},[36,171505,149825],{"class":112},[36,171507,495],{"class":42},[36,171509,149830],{"class":105},[36,171511,478],{"class":42},[36,171513,149835],{"class":105},[36,171515,478],{"class":42},[36,171517,149840],{"class":468},[36,171519,47],{"class":46},[36,171521,149845],{"class":105},[36,171523,922],{"class":42},[36,171525,171526,171529,171531,171533],{"class":38,"line":53},[36,171527,171528],{"class":42},"content ",[36,171530,47],{"class":46},[36,171532,151187],{"class":468},[36,171534,171535],{"class":42},".read()\n",[36,171537,171538,171540],{"class":38,"line":196},[36,171539,3486],{"class":112},[36,171541,171542],{"class":42},"(content)\n",[36,171544,171545,171547],{"class":38,"line":642},[36,171546,48912],{"class":468},[36,171548,171549],{"class":42},".close()\n",[19,171551,171552],{},"可以指定读取字符数：",[26,171554,171556],{"className":28,"code":171555,"language":30,"meta":31,"style":31},"content = file.read(10)\n",[33,171557,171558],{"__ignoreMap":31},[36,171559,171560,171562,171564,171566,171569,171571],{"class":38,"line":39},[36,171561,171528],{"class":42},[36,171563,47],{"class":46},[36,171565,151187],{"class":468},[36,171567,171568],{"class":42},".read(",[36,171570,554],{"class":112},[36,171572,922],{"class":42},[318,171574,171576],{"id":171575},"_842-readline","8.4.2 readline",[19,171578,171579],{},"一次读取一行：",[26,171581,171583],{"className":28,"code":171582,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[33,171584,171585,171611,171615,171626,171633,171637],{"__ignoreMap":31},[36,171586,171587,171589,171591,171593,171595,171597,171599,171601,171603,171605,171607,171609],{"class":38,"line":39},[36,171588,48912],{"class":468},[36,171590,673],{"class":46},[36,171592,149825],{"class":112},[36,171594,495],{"class":42},[36,171596,149830],{"class":105},[36,171598,478],{"class":42},[36,171600,149835],{"class":105},[36,171602,478],{"class":42},[36,171604,149840],{"class":468},[36,171606,47],{"class":46},[36,171608,149845],{"class":105},[36,171610,922],{"class":42},[36,171612,171613],{"class":38,"line":53},[36,171614,659],{"emptyLinePlaceholder":658},[36,171616,171617,171619,171621,171623],{"class":38,"line":196},[36,171618,150286],{"class":42},[36,171620,47],{"class":46},[36,171622,151187],{"class":468},[36,171624,171625],{"class":42},".readline()\n",[36,171627,171628,171630],{"class":38,"line":642},[36,171629,3486],{"class":112},[36,171631,171632],{"class":42},"(line)\n",[36,171634,171635],{"class":38,"line":655},[36,171636,659],{"emptyLinePlaceholder":658},[36,171638,171639,171641],{"class":38,"line":662},[36,171640,48912],{"class":468},[36,171642,171549],{"class":42},[318,171644,171646],{"id":171645},"_843-readlines","8.4.3 readlines",[19,171648,171649],{},"读取所有行，返回列表：",[26,171651,171653],{"className":28,"code":171652,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[33,171654,171655,171681,171693,171700],{"__ignoreMap":31},[36,171656,171657,171659,171661,171663,171665,171667,171669,171671,171673,171675,171677,171679],{"class":38,"line":39},[36,171658,48912],{"class":468},[36,171660,673],{"class":46},[36,171662,149825],{"class":112},[36,171664,495],{"class":42},[36,171666,149830],{"class":105},[36,171668,478],{"class":42},[36,171670,149835],{"class":105},[36,171672,478],{"class":42},[36,171674,149840],{"class":468},[36,171676,47],{"class":46},[36,171678,149845],{"class":105},[36,171680,922],{"class":42},[36,171682,171683,171686,171688,171690],{"class":38,"line":53},[36,171684,171685],{"class":42},"lines ",[36,171687,47],{"class":46},[36,171689,151187],{"class":468},[36,171691,171692],{"class":42},".readlines()\n",[36,171694,171695,171697],{"class":38,"line":196},[36,171696,3486],{"class":112},[36,171698,171699],{"class":42},"(lines)\n",[36,171701,171702,171704],{"class":38,"line":642},[36,171703,48912],{"class":468},[36,171705,171549],{"class":42},[19,171707,171708,171709,171712],{},"每一行通常带有换行符，可以用 ",[33,171710,171711],{},"strip()"," 去掉：",[26,171714,171716],{"className":28,"code":171715,"language":30,"meta":31,"style":31},"for line in lines:\n    print(line.strip())\n",[33,171717,171718,171730],{"__ignoreMap":31},[36,171719,171720,171722,171725,171727],{"class":38,"line":39},[36,171721,3120],{"class":46},[36,171723,171724],{"class":42}," line ",[36,171726,1619],{"class":46},[36,171728,171729],{"class":42}," lines:\n",[36,171731,171732,171734],{"class":38,"line":53},[36,171733,1867],{"class":112},[36,171735,171736],{"class":42},"(line.strip())\n",[318,171738,171740],{"id":171739},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,171742,171743],{},"推荐读取大文件时使用：",[26,171745,171747],{"className":28,"code":171746,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[33,171748,171749,171775,171779,171791,171797,171801],{"__ignoreMap":31},[36,171750,171751,171753,171755,171757,171759,171761,171763,171765,171767,171769,171771,171773],{"class":38,"line":39},[36,171752,48912],{"class":468},[36,171754,673],{"class":46},[36,171756,149825],{"class":112},[36,171758,495],{"class":42},[36,171760,149830],{"class":105},[36,171762,478],{"class":42},[36,171764,149835],{"class":105},[36,171766,478],{"class":42},[36,171768,149840],{"class":468},[36,171770,47],{"class":46},[36,171772,149845],{"class":105},[36,171774,922],{"class":42},[36,171776,171777],{"class":38,"line":53},[36,171778,659],{"emptyLinePlaceholder":658},[36,171780,171781,171783,171785,171787,171789],{"class":38,"line":196},[36,171782,3120],{"class":46},[36,171784,171724],{"class":42},[36,171786,1619],{"class":46},[36,171788,151187],{"class":468},[36,171790,888],{"class":42},[36,171792,171793,171795],{"class":38,"line":642},[36,171794,1867],{"class":112},[36,171796,171736],{"class":42},[36,171798,171799],{"class":38,"line":655},[36,171800,659],{"emptyLinePlaceholder":658},[36,171802,171803,171805],{"class":38,"line":662},[36,171804,48912],{"class":468},[36,171806,171549],{"class":42},[14,171808,171810],{"id":171809},"_85-with语句","8.5 with语句",[19,171812,171813,171815],{},[33,171814,111308],{}," 会自动关闭文件，推荐使用。",[26,171817,171819],{"className":28,"code":171818,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[33,171820,171821,171851,171861],{"__ignoreMap":31},[36,171822,171823,171825,171827,171829,171831,171833,171835,171837,171839,171841,171843,171845,171847,171849],{"class":38,"line":39},[36,171824,111308],{"class":46},[36,171826,149825],{"class":112},[36,171828,495],{"class":42},[36,171830,149830],{"class":105},[36,171832,478],{"class":42},[36,171834,149835],{"class":105},[36,171836,478],{"class":42},[36,171838,149840],{"class":468},[36,171840,47],{"class":46},[36,171842,149845],{"class":105},[36,171844,17373],{"class":42},[36,171846,617],{"class":46},[36,171848,151187],{"class":468},[36,171850,888],{"class":42},[36,171852,171853,171855,171857,171859],{"class":38,"line":53},[36,171854,149857],{"class":42},[36,171856,47],{"class":46},[36,171858,151187],{"class":468},[36,171860,171535],{"class":42},[36,171862,171863,171865],{"class":38,"line":196},[36,171864,1867],{"class":112},[36,171866,171542],{"class":42},[19,171868,171869],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,171871,171873],{"id":171872},"_86-写入文件","8.6 写入文件",[19,171875,171876,171878],{},[33,171877,4665],{}," 模式会清空原文件。",[26,171880,171882],{"className":28,"code":171881,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[33,171883,171884,171914,171931],{"__ignoreMap":31},[36,171885,171886,171888,171890,171892,171894,171896,171898,171900,171902,171904,171906,171908,171910,171912],{"class":38,"line":39},[36,171887,111308],{"class":46},[36,171889,149825],{"class":112},[36,171891,495],{"class":42},[36,171893,149830],{"class":105},[36,171895,478],{"class":42},[36,171897,155010],{"class":105},[36,171899,478],{"class":42},[36,171901,149840],{"class":468},[36,171903,47],{"class":46},[36,171905,149845],{"class":105},[36,171907,17373],{"class":42},[36,171909,617],{"class":46},[36,171911,151187],{"class":468},[36,171913,888],{"class":42},[36,171915,171916,171919,171922,171925,171927,171929],{"class":38,"line":53},[36,171917,171918],{"class":468},"    file",[36,171920,171921],{"class":42},".write(",[36,171923,171924],{"class":105},"\"hello",[36,171926,159559],{"class":112},[36,171928,4126],{"class":105},[36,171930,922],{"class":42},[36,171932,171933,171935,171937,171940,171942,171944],{"class":38,"line":196},[36,171934,171918],{"class":468},[36,171936,171921],{"class":42},[36,171938,171939],{"class":105},"\"python",[36,171941,159559],{"class":112},[36,171943,4126],{"class":105},[36,171945,922],{"class":42},[19,171947,171948],{},"写入多行：",[26,171950,171952],{"className":28,"code":171951,"language":30,"meta":31,"style":31},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[33,171953,171954,171989,171993,172024],{"__ignoreMap":31},[36,171955,171956,171958,171960,171962,171965,171967,171969,171971,171974,171976,171978,171980,171983,171985,171987],{"class":38,"line":39},[36,171957,171685],{"class":42},[36,171959,47],{"class":46},[36,171961,55783],{"class":42},[36,171963,171964],{"class":105},"\"小明,18",[36,171966,159559],{"class":112},[36,171968,4126],{"class":105},[36,171970,478],{"class":42},[36,171972,171973],{"class":105},"\"小红,17",[36,171975,159559],{"class":112},[36,171977,4126],{"class":105},[36,171979,478],{"class":42},[36,171981,171982],{"class":105},"\"小刚,19",[36,171984,159559],{"class":112},[36,171986,4126],{"class":105},[36,171988,36806],{"class":42},[36,171990,171991],{"class":38,"line":53},[36,171992,659],{"emptyLinePlaceholder":658},[36,171994,171995,171997,171999,172001,172004,172006,172008,172010,172012,172014,172016,172018,172020,172022],{"class":38,"line":196},[36,171996,111308],{"class":46},[36,171998,149825],{"class":112},[36,172000,495],{"class":42},[36,172002,172003],{"class":105},"\"students.txt\"",[36,172005,478],{"class":42},[36,172007,155010],{"class":105},[36,172009,478],{"class":42},[36,172011,149840],{"class":468},[36,172013,47],{"class":46},[36,172015,149845],{"class":105},[36,172017,17373],{"class":42},[36,172019,617],{"class":46},[36,172021,151187],{"class":468},[36,172023,888],{"class":42},[36,172025,172026,172028],{"class":38,"line":642},[36,172027,171918],{"class":468},[36,172029,172030],{"class":42},".writelines(lines)\n",[14,172032,172034],{"id":172033},"_87-追加文件","8.7 追加文件",[19,172036,172037,172039],{},[33,172038,4113],{}," 模式不会清空原内容，而是在末尾追加。",[26,172041,172043],{"className":28,"code":172042,"language":30,"meta":31,"style":31},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[33,172044,172045,172076],{"__ignoreMap":31},[36,172046,172047,172049,172051,172053,172056,172058,172060,172062,172064,172066,172068,172070,172072,172074],{"class":38,"line":39},[36,172048,111308],{"class":46},[36,172050,149825],{"class":112},[36,172052,495],{"class":42},[36,172054,172055],{"class":105},"\"log.txt\"",[36,172057,478],{"class":42},[36,172059,168359],{"class":105},[36,172061,478],{"class":42},[36,172063,149840],{"class":468},[36,172065,47],{"class":46},[36,172067,149845],{"class":105},[36,172069,17373],{"class":42},[36,172071,617],{"class":46},[36,172073,151187],{"class":468},[36,172075,888],{"class":42},[36,172077,172078,172080,172082,172085,172087,172089],{"class":38,"line":53},[36,172079,171918],{"class":468},[36,172081,171921],{"class":42},[36,172083,172084],{"class":105},"\"程序启动",[36,172086,159559],{"class":112},[36,172088,4126],{"class":105},[36,172090,922],{"class":42},[19,172092,172093],{},"日志类文件常用追加模式。",[14,172095,172097],{"id":172096},"_88-文件编码","8.8 文件编码",[19,172099,172100],{},"编码决定文字如何保存为字节。",[19,172102,172103],{},"常见编码：",[211,172105,172106,172109],{},[214,172107,172108],{},"UTF-8：推荐。",[214,172110,172111],{},"GBK：部分 Windows 中文文件常见。",[19,172113,172114],{},"读取文件乱码时，可以尝试：",[26,172116,172118],{"className":28,"code":172117,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[33,172119,172120,172151],{"__ignoreMap":31},[36,172121,172122,172124,172126,172128,172130,172132,172134,172136,172138,172140,172143,172145,172147,172149],{"class":38,"line":39},[36,172123,111308],{"class":46},[36,172125,149825],{"class":112},[36,172127,495],{"class":42},[36,172129,149830],{"class":105},[36,172131,478],{"class":42},[36,172133,149835],{"class":105},[36,172135,478],{"class":42},[36,172137,149840],{"class":468},[36,172139,47],{"class":46},[36,172141,172142],{"class":105},"\"gbk\"",[36,172144,17373],{"class":42},[36,172146,617],{"class":46},[36,172148,151187],{"class":468},[36,172150,888],{"class":42},[36,172152,172153,172155,172157,172159],{"class":38,"line":53},[36,172154,149857],{"class":42},[36,172156,47],{"class":46},[36,172158,151187],{"class":468},[36,172160,171535],{"class":42},[19,172162,172163],{},"写文件时建议统一 UTF-8：",[26,172165,172167],{"className":28,"code":172166,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[33,172168,172169,172199],{"__ignoreMap":31},[36,172170,172171,172173,172175,172177,172179,172181,172183,172185,172187,172189,172191,172193,172195,172197],{"class":38,"line":39},[36,172172,111308],{"class":46},[36,172174,149825],{"class":112},[36,172176,495],{"class":42},[36,172178,149830],{"class":105},[36,172180,478],{"class":42},[36,172182,155010],{"class":105},[36,172184,478],{"class":42},[36,172186,149840],{"class":468},[36,172188,47],{"class":46},[36,172190,149845],{"class":105},[36,172192,17373],{"class":42},[36,172194,617],{"class":46},[36,172196,151187],{"class":468},[36,172198,888],{"class":42},[36,172200,172201,172203,172205,172208],{"class":38,"line":53},[36,172202,171918],{"class":468},[36,172204,171921],{"class":42},[36,172206,172207],{"class":105},"\"中文内容\"",[36,172209,922],{"class":42},[14,172211,172213],{"id":172212},"_89-pathlib","8.9 pathlib",[19,172215,172216,172219],{},[33,172217,172218],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[26,172221,172223],{"className":28,"code":172222,"language":30,"meta":31,"style":31},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[33,172224,172225,172235,172239,172257],{"__ignoreMap":31},[36,172226,172227,172229,172231,172233],{"class":38,"line":39},[36,172228,645],{"class":46},[36,172230,111786],{"class":42},[36,172232,611],{"class":46},[36,172234,111791],{"class":42},[36,172236,172237],{"class":38,"line":53},[36,172238,659],{"emptyLinePlaceholder":658},[36,172240,172241,172243,172245,172247,172250,172252,172254],{"class":38,"line":196},[36,172242,171345],{"class":42},[36,172244,47],{"class":46},[36,172246,112020],{"class":42},[36,172248,172249],{"class":105},"\"data\"",[36,172251,17373],{"class":42},[36,172253,4455],{"class":46},[36,172255,172256],{"class":105}," \"students.txt\"\n",[36,172258,172259,172261],{"class":38,"line":642},[36,172260,3486],{"class":112},[36,172262,172263],{"class":42},"(path)\n",[19,172265,172266],{},"创建目录：",[26,172268,172270],{"className":28,"code":172269,"language":30,"meta":31,"style":31},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[33,172271,172272,172282,172286,172299],{"__ignoreMap":31},[36,172273,172274,172276,172278,172280],{"class":38,"line":39},[36,172275,645],{"class":46},[36,172277,111786],{"class":42},[36,172279,611],{"class":46},[36,172281,111791],{"class":42},[36,172283,172284],{"class":38,"line":53},[36,172285,659],{"emptyLinePlaceholder":658},[36,172287,172288,172291,172293,172295,172297],{"class":38,"line":196},[36,172289,172290],{"class":42},"data_dir ",[36,172292,47],{"class":46},[36,172294,112020],{"class":42},[36,172296,172249],{"class":105},[36,172298,922],{"class":42},[36,172300,172301,172304,172307,172309,172311],{"class":38,"line":642},[36,172302,172303],{"class":42},"data_dir.mkdir(",[36,172305,172306],{"class":468},"exist_ok",[36,172308,47],{"class":46},[36,172310,35066],{"class":112},[36,172312,922],{"class":42},[19,172314,172315],{},"判断文件是否存在：",[26,172317,172319],{"className":28,"code":172318,"language":30,"meta":31,"style":31},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[33,172320,172321,172334,172338,172345],{"__ignoreMap":31},[36,172322,172323,172325,172327,172329,172332],{"class":38,"line":39},[36,172324,171345],{"class":42},[36,172326,47],{"class":46},[36,172328,112020],{"class":42},[36,172330,172331],{"class":105},"\"data\u002Fstudents.txt\"",[36,172333,922],{"class":42},[36,172335,172336],{"class":38,"line":53},[36,172337,659],{"emptyLinePlaceholder":658},[36,172339,172340,172342],{"class":38,"line":196},[36,172341,2067],{"class":46},[36,172343,172344],{"class":42}," path.exists():\n",[36,172346,172347,172349,172351,172354],{"class":38,"line":642},[36,172348,1867],{"class":112},[36,172350,495],{"class":42},[36,172352,172353],{"class":105},"\"文件存在\"",[36,172355,922],{"class":42},[19,172357,172358],{},"读写文本：",[26,172360,172362],{"className":28,"code":172361,"language":30,"meta":31,"style":31},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[33,172363,172364,172376,172380,172397,172414],{"__ignoreMap":31},[36,172365,172366,172368,172370,172372,172374],{"class":38,"line":39},[36,172367,171345],{"class":42},[36,172369,47],{"class":46},[36,172371,112020],{"class":42},[36,172373,149830],{"class":105},[36,172375,922],{"class":42},[36,172377,172378],{"class":38,"line":53},[36,172379,659],{"emptyLinePlaceholder":658},[36,172381,172382,172385,172387,172389,172391,172393,172395],{"class":38,"line":196},[36,172383,172384],{"class":42},"path.write_text(",[36,172386,148910],{"class":105},[36,172388,478],{"class":42},[36,172390,149840],{"class":468},[36,172392,47],{"class":46},[36,172394,149845],{"class":105},[36,172396,922],{"class":42},[36,172398,172399,172401,172403,172406,172408,172410,172412],{"class":38,"line":642},[36,172400,171528],{"class":42},[36,172402,47],{"class":46},[36,172404,172405],{"class":42}," path.read_text(",[36,172407,149840],{"class":468},[36,172409,47],{"class":46},[36,172411,149845],{"class":105},[36,172413,922],{"class":42},[36,172415,172416,172418],{"class":38,"line":655},[36,172417,3486],{"class":112},[36,172419,171542],{"class":42},[14,172421,172423],{"id":172422},"_810-json文件","8.10 JSON文件",[19,172425,172426],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[26,172428,172430],{"className":28,"code":172429,"language":30,"meta":31,"style":31},"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",[33,172431,172432,172438,172442,172450,172460,172470,172478,172482,172486,172511],{"__ignoreMap":31},[36,172433,172434,172436],{"class":38,"line":39},[36,172435,611],{"class":46},[36,172437,150125],{"class":42},[36,172439,172440],{"class":38,"line":53},[36,172441,659],{"emptyLinePlaceholder":658},[36,172443,172444,172446,172448],{"class":38,"line":196},[36,172445,152515],{"class":42},[36,172447,47],{"class":46},[36,172449,19228],{"class":42},[36,172451,172452,172454,172456,172458],{"class":38,"line":642},[36,172453,150054],{"class":105},[36,172455,54994],{"class":42},[36,172457,152922],{"class":105},[36,172459,35056],{"class":42},[36,172461,172462,172464,172466,172468],{"class":38,"line":655},[36,172463,167571],{"class":105},[36,172465,54994],{"class":42},[36,172467,4521],{"class":112},[36,172469,35056],{"class":42},[36,172471,172472,172474,172476],{"class":38,"line":662},[36,172473,167582],{"class":105},[36,172475,54994],{"class":42},[36,172477,167587],{"class":112},[36,172479,172480],{"class":38,"line":667},[36,172481,5300],{"class":42},[36,172483,172484],{"class":38,"line":679},[36,172485,659],{"emptyLinePlaceholder":658},[36,172487,172488,172490,172492,172495,172497,172499,172501,172503,172505,172507,172509],{"class":38,"line":685},[36,172489,159478],{"class":42},[36,172491,47],{"class":46},[36,172493,172494],{"class":42}," json.dumps(student, ",[36,172496,150171],{"class":468},[36,172498,47],{"class":46},[36,172500,37547],{"class":112},[36,172502,478],{"class":42},[36,172504,155046],{"class":468},[36,172506,47],{"class":46},[36,172508,498],{"class":112},[36,172510,922],{"class":42},[36,172512,172513,172515],{"class":38,"line":691},[36,172514,3486],{"class":112},[36,172516,167105],{"class":42},[19,172518,172519],{},"写入 JSON 文件：",[26,172521,172523],{"className":28,"code":172522,"language":30,"meta":31,"style":31},"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",[33,172524,172525,172531,172535,172543,172571,172599,172603,172607,172637],{"__ignoreMap":31},[36,172526,172527,172529],{"class":38,"line":39},[36,172528,611],{"class":46},[36,172530,150125],{"class":42},[36,172532,172533],{"class":38,"line":53},[36,172534,659],{"emptyLinePlaceholder":658},[36,172536,172537,172539,172541],{"class":38,"line":196},[36,172538,162750],{"class":42},[36,172540,47],{"class":46},[36,172542,59003],{"class":42},[36,172544,172545,172547,172549,172551,172553,172555,172557,172559,172561,172563,172565,172567,172569],{"class":38,"line":642},[36,172546,151419],{"class":42},[36,172548,66234],{"class":105},[36,172550,54994],{"class":42},[36,172552,152922],{"class":105},[36,172554,478],{"class":42},[36,172556,72679],{"class":105},[36,172558,54994],{"class":42},[36,172560,4521],{"class":112},[36,172562,478],{"class":42},[36,172564,154506],{"class":105},[36,172566,54994],{"class":42},[36,172568,4858],{"class":112},[36,172570,8626],{"class":42},[36,172572,172573,172575,172577,172579,172581,172583,172585,172587,172589,172591,172593,172595,172597],{"class":38,"line":655},[36,172574,151419],{"class":42},[36,172576,66234],{"class":105},[36,172578,54994],{"class":42},[36,172580,153970],{"class":105},[36,172582,478],{"class":42},[36,172584,72679],{"class":105},[36,172586,54994],{"class":42},[36,172588,4496],{"class":112},[36,172590,478],{"class":42},[36,172592,154506],{"class":105},[36,172594,54994],{"class":42},[36,172596,4681],{"class":112},[36,172598,8626],{"class":42},[36,172600,172601],{"class":38,"line":662},[36,172602,36806],{"class":42},[36,172604,172605],{"class":38,"line":667},[36,172606,659],{"emptyLinePlaceholder":658},[36,172608,172609,172611,172613,172615,172617,172619,172621,172623,172625,172627,172629,172631,172633,172635],{"class":38,"line":679},[36,172610,111308],{"class":46},[36,172612,149825],{"class":112},[36,172614,495],{"class":42},[36,172616,154865],{"class":105},[36,172618,478],{"class":42},[36,172620,155010],{"class":105},[36,172622,478],{"class":42},[36,172624,149840],{"class":468},[36,172626,47],{"class":46},[36,172628,149845],{"class":105},[36,172630,17373],{"class":42},[36,172632,617],{"class":46},[36,172634,151187],{"class":468},[36,172636,888],{"class":42},[36,172638,172639,172642,172644,172646,172648,172650,172652,172654,172656,172658,172660],{"class":38,"line":685},[36,172640,172641],{"class":42},"    json.dump(students, ",[36,172643,48912],{"class":468},[36,172645,478],{"class":42},[36,172647,150171],{"class":468},[36,172649,47],{"class":46},[36,172651,37547],{"class":112},[36,172653,478],{"class":42},[36,172655,155046],{"class":468},[36,172657,47],{"class":46},[36,172659,498],{"class":112},[36,172661,922],{"class":42},[19,172663,172664],{},"读取 JSON 文件：",[26,172666,172668],{"className":28,"code":172667,"language":30,"meta":31,"style":31},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[33,172669,172670,172676,172680,172710,172722,172726],{"__ignoreMap":31},[36,172671,172672,172674],{"class":38,"line":39},[36,172673,611],{"class":46},[36,172675,150125],{"class":42},[36,172677,172678],{"class":38,"line":53},[36,172679,659],{"emptyLinePlaceholder":658},[36,172681,172682,172684,172686,172688,172690,172692,172694,172696,172698,172700,172702,172704,172706,172708],{"class":38,"line":196},[36,172683,111308],{"class":46},[36,172685,149825],{"class":112},[36,172687,495],{"class":42},[36,172689,154865],{"class":105},[36,172691,478],{"class":42},[36,172693,149835],{"class":105},[36,172695,478],{"class":42},[36,172697,149840],{"class":468},[36,172699,47],{"class":46},[36,172701,149845],{"class":105},[36,172703,17373],{"class":42},[36,172705,617],{"class":46},[36,172707,151187],{"class":468},[36,172709,888],{"class":42},[36,172711,172712,172714,172716,172718,172720],{"class":38,"line":642},[36,172713,156071],{"class":42},[36,172715,47],{"class":46},[36,172717,151198],{"class":42},[36,172719,48912],{"class":468},[36,172721,922],{"class":42},[36,172723,172724],{"class":38,"line":655},[36,172725,659],{"emptyLinePlaceholder":658},[36,172727,172728,172730],{"class":38,"line":662},[36,172729,3486],{"class":112},[36,172731,168029],{"class":42},[14,172733,172735],{"id":172734},"_811-csv文件","8.11 CSV文件",[19,172737,172738],{},"CSV 是逗号分隔值，常用于表格数据。",[19,172740,172741],{},"写入 CSV：",[26,172743,172745],{"className":28,"code":172744,"language":30,"meta":31,"style":31},"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",[33,172746,172747,172754,172758,172766,172784,172800,172816,172820,172824,172864,172878],{"__ignoreMap":31},[36,172748,172749,172751],{"class":38,"line":39},[36,172750,611],{"class":46},[36,172752,172753],{"class":42}," csv\n",[36,172755,172756],{"class":38,"line":53},[36,172757,659],{"emptyLinePlaceholder":658},[36,172759,172760,172762,172764],{"class":38,"line":196},[36,172761,162750],{"class":42},[36,172763,47],{"class":46},[36,172765,59003],{"class":42},[36,172767,172768,172771,172773,172775,172777,172779,172782],{"class":38,"line":642},[36,172769,172770],{"class":42},"    [",[36,172772,76653],{"class":105},[36,172774,478],{"class":42},[36,172776,76686],{"class":105},[36,172778,478],{"class":42},[36,172780,172781],{"class":105},"\"成绩\"",[36,172783,91389],{"class":42},[36,172785,172786,172788,172790,172792,172794,172796,172798],{"class":38,"line":655},[36,172787,172770],{"class":42},[36,172789,152922],{"class":105},[36,172791,478],{"class":42},[36,172793,4521],{"class":112},[36,172795,478],{"class":42},[36,172797,4858],{"class":112},[36,172799,91389],{"class":42},[36,172801,172802,172804,172806,172808,172810,172812,172814],{"class":38,"line":662},[36,172803,172770],{"class":42},[36,172805,153970],{"class":105},[36,172807,478],{"class":42},[36,172809,4496],{"class":112},[36,172811,478],{"class":42},[36,172813,4681],{"class":112},[36,172815,91389],{"class":42},[36,172817,172818],{"class":38,"line":667},[36,172819,36806],{"class":42},[36,172821,172822],{"class":38,"line":679},[36,172823,659],{"emptyLinePlaceholder":658},[36,172825,172826,172828,172830,172832,172835,172837,172839,172841,172843,172845,172847,172849,172852,172854,172856,172858,172860,172862],{"class":38,"line":685},[36,172827,111308],{"class":46},[36,172829,149825],{"class":112},[36,172831,495],{"class":42},[36,172833,172834],{"class":105},"\"students.csv\"",[36,172836,478],{"class":42},[36,172838,155010],{"class":105},[36,172840,478],{"class":42},[36,172842,149840],{"class":468},[36,172844,47],{"class":46},[36,172846,149845],{"class":105},[36,172848,478],{"class":42},[36,172850,172851],{"class":468},"newline",[36,172853,47],{"class":46},[36,172855,11343],{"class":105},[36,172857,17373],{"class":42},[36,172859,617],{"class":46},[36,172861,151187],{"class":468},[36,172863,888],{"class":42},[36,172865,172866,172869,172871,172874,172876],{"class":38,"line":691},[36,172867,172868],{"class":42},"    writer ",[36,172870,47],{"class":46},[36,172872,172873],{"class":42}," csv.writer(",[36,172875,48912],{"class":468},[36,172877,922],{"class":42},[36,172879,172880],{"class":38,"line":696},[36,172881,172882],{"class":42},"    writer.writerows(students)\n",[19,172884,172885],{},"读取 CSV：",[26,172887,172889],{"className":28,"code":172888,"language":30,"meta":31,"style":31},"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",[33,172890,172891,172897,172901,172931,172945,172957],{"__ignoreMap":31},[36,172892,172893,172895],{"class":38,"line":39},[36,172894,611],{"class":46},[36,172896,172753],{"class":42},[36,172898,172899],{"class":38,"line":53},[36,172900,659],{"emptyLinePlaceholder":658},[36,172902,172903,172905,172907,172909,172911,172913,172915,172917,172919,172921,172923,172925,172927,172929],{"class":38,"line":196},[36,172904,111308],{"class":46},[36,172906,149825],{"class":112},[36,172908,495],{"class":42},[36,172910,172834],{"class":105},[36,172912,478],{"class":42},[36,172914,149835],{"class":105},[36,172916,478],{"class":42},[36,172918,149840],{"class":468},[36,172920,47],{"class":46},[36,172922,149845],{"class":105},[36,172924,17373],{"class":42},[36,172926,617],{"class":46},[36,172928,151187],{"class":468},[36,172930,888],{"class":42},[36,172932,172933,172936,172938,172941,172943],{"class":38,"line":642},[36,172934,172935],{"class":42},"    reader ",[36,172937,47],{"class":46},[36,172939,172940],{"class":42}," csv.reader(",[36,172942,48912],{"class":468},[36,172944,922],{"class":42},[36,172946,172947,172949,172952,172954],{"class":38,"line":655},[36,172948,1909],{"class":46},[36,172950,172951],{"class":42}," row ",[36,172953,1619],{"class":46},[36,172955,172956],{"class":42}," reader:\n",[36,172958,172959,172961],{"class":38,"line":662},[36,172960,1960],{"class":112},[36,172962,172963],{"class":42},"(row)\n",[19,172965,172966],{},"使用字典写入：",[26,172968,172970],{"className":28,"code":172969,"language":30,"meta":31,"style":31},"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",[33,172971,172972,172978,172982,172990,173018,173046,173050,173054,173092,173113,173134,173139],{"__ignoreMap":31},[36,172973,172974,172976],{"class":38,"line":39},[36,172975,611],{"class":46},[36,172977,172753],{"class":42},[36,172979,172980],{"class":38,"line":53},[36,172981,659],{"emptyLinePlaceholder":658},[36,172983,172984,172986,172988],{"class":38,"line":196},[36,172985,162750],{"class":42},[36,172987,47],{"class":46},[36,172989,59003],{"class":42},[36,172991,172992,172994,172996,172998,173000,173002,173004,173006,173008,173010,173012,173014,173016],{"class":38,"line":642},[36,172993,151419],{"class":42},[36,172995,66234],{"class":105},[36,172997,54994],{"class":42},[36,172999,152922],{"class":105},[36,173001,478],{"class":42},[36,173003,72679],{"class":105},[36,173005,54994],{"class":42},[36,173007,4521],{"class":112},[36,173009,478],{"class":42},[36,173011,154506],{"class":105},[36,173013,54994],{"class":42},[36,173015,4858],{"class":112},[36,173017,8626],{"class":42},[36,173019,173020,173022,173024,173026,173028,173030,173032,173034,173036,173038,173040,173042,173044],{"class":38,"line":655},[36,173021,151419],{"class":42},[36,173023,66234],{"class":105},[36,173025,54994],{"class":42},[36,173027,153970],{"class":105},[36,173029,478],{"class":42},[36,173031,72679],{"class":105},[36,173033,54994],{"class":42},[36,173035,4496],{"class":112},[36,173037,478],{"class":42},[36,173039,154506],{"class":105},[36,173041,54994],{"class":42},[36,173043,4681],{"class":112},[36,173045,8626],{"class":42},[36,173047,173048],{"class":38,"line":662},[36,173049,36806],{"class":42},[36,173051,173052],{"class":38,"line":667},[36,173053,659],{"emptyLinePlaceholder":658},[36,173055,173056,173058,173060,173062,173064,173066,173068,173070,173072,173074,173076,173078,173080,173082,173084,173086,173088,173090],{"class":38,"line":679},[36,173057,111308],{"class":46},[36,173059,149825],{"class":112},[36,173061,495],{"class":42},[36,173063,172834],{"class":105},[36,173065,478],{"class":42},[36,173067,155010],{"class":105},[36,173069,478],{"class":42},[36,173071,149840],{"class":468},[36,173073,47],{"class":46},[36,173075,149845],{"class":105},[36,173077,478],{"class":42},[36,173079,172851],{"class":468},[36,173081,47],{"class":46},[36,173083,11343],{"class":105},[36,173085,17373],{"class":42},[36,173087,617],{"class":46},[36,173089,151187],{"class":468},[36,173091,888],{"class":42},[36,173093,173094,173097,173099,173101,173103,173105,173107,173109,173111],{"class":38,"line":685},[36,173095,173096],{"class":42},"    fieldnames ",[36,173098,47],{"class":46},[36,173100,55783],{"class":42},[36,173102,66234],{"class":105},[36,173104,478],{"class":42},[36,173106,72679],{"class":105},[36,173108,478],{"class":42},[36,173110,154506],{"class":105},[36,173112,36806],{"class":42},[36,173114,173115,173117,173119,173122,173124,173126,173129,173131],{"class":38,"line":691},[36,173116,172868],{"class":42},[36,173118,47],{"class":46},[36,173120,173121],{"class":42}," csv.DictWriter(",[36,173123,48912],{"class":468},[36,173125,478],{"class":42},[36,173127,173128],{"class":468},"fieldnames",[36,173130,47],{"class":46},[36,173132,173133],{"class":42},"fieldnames)\n",[36,173135,173136],{"class":38,"line":696},[36,173137,173138],{"class":42},"    writer.writeheader()\n",[36,173140,173141],{"class":38,"line":702},[36,173142,172882],{"class":42},[14,173144,173146],{"id":173145},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,173148,126326],{},[211,173150,173151,173154,173157],{},[214,173152,173153],{},"读取文本文件。",[214,173155,173156],{},"统计每个单词出现次数。",[214,173158,173159],{},"输出出现次数最多的前 10 个单词。",[19,173161,13696],{},[26,173163,173165],{"className":28,"code":173164,"language":30,"meta":31,"style":31},"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",[33,173166,173167,173177,173181,173194,173210,173214,173224,173233,173237,173249,173269,173278,173282,173300,173304,173334,173338,173354],{"__ignoreMap":31},[36,173168,173169,173171,173173,173175],{"class":38,"line":39},[36,173170,645],{"class":46},[36,173172,111786],{"class":42},[36,173174,611],{"class":46},[36,173176,111791],{"class":42},[36,173178,173179],{"class":38,"line":53},[36,173180,659],{"emptyLinePlaceholder":658},[36,173182,173183,173185,173187,173189,173192],{"class":38,"line":196},[36,173184,171345],{"class":42},[36,173186,47],{"class":46},[36,173188,112020],{"class":42},[36,173190,173191],{"class":105},"\"article.txt\"",[36,173193,922],{"class":42},[36,173195,173196,173198,173200,173202,173204,173206,173208],{"class":38,"line":642},[36,173197,171528],{"class":42},[36,173199,47],{"class":46},[36,173201,172405],{"class":42},[36,173203,149840],{"class":468},[36,173205,47],{"class":46},[36,173207,149845],{"class":105},[36,173209,922],{"class":42},[36,173211,173212],{"class":38,"line":655},[36,173213,659],{"emptyLinePlaceholder":658},[36,173215,173216,173219,173221],{"class":38,"line":662},[36,173217,173218],{"class":42},"words ",[36,173220,47],{"class":46},[36,173222,173223],{"class":42}," content.lower().split()\n",[36,173225,173226,173229,173231],{"class":38,"line":667},[36,173227,173228],{"class":42},"counter ",[36,173230,47],{"class":46},[36,173232,91421],{"class":42},[36,173234,173235],{"class":38,"line":679},[36,173236,659],{"emptyLinePlaceholder":658},[36,173238,173239,173241,173244,173246],{"class":38,"line":685},[36,173240,3120],{"class":46},[36,173242,173243],{"class":42}," word ",[36,173245,1619],{"class":46},[36,173247,173248],{"class":42}," words:\n",[36,173250,173251,173254,173256,173259,173262,173264,173267],{"class":38,"line":691},[36,173252,173253],{"class":42},"    word ",[36,173255,47],{"class":46},[36,173257,173258],{"class":42}," word.strip(",[36,173260,173261],{"class":105},"\".,!?;:",[36,173263,159529],{"class":112},[36,173265,173266],{"class":105},"'()[]\"",[36,173268,922],{"class":42},[36,173270,173271,173273,173275],{"class":38,"line":696},[36,173272,3752],{"class":46},[36,173274,42489],{"class":46},[36,173276,173277],{"class":42}," word:\n",[36,173279,173280],{"class":38,"line":702},[36,173281,151546],{"class":46},[36,173283,173284,173287,173289,173292,173294,173296,173298],{"class":38,"line":708},[36,173285,173286],{"class":42},"    counter[word] ",[36,173288,47],{"class":46},[36,173290,173291],{"class":42}," counter.get(word, ",[36,173293,1859],{"class":112},[36,173295,17373],{"class":42},[36,173297,4354],{"class":46},[36,173299,1661],{"class":112},[36,173301,173302],{"class":38,"line":713},[36,173303,659],{"emptyLinePlaceholder":658},[36,173305,173306,173309,173311,173313,173316,173318,173320,173322,173324,173326,173328,173330,173332],{"class":38,"line":719},[36,173307,173308],{"class":42},"items ",[36,173310,47],{"class":46},[36,173312,166638],{"class":112},[36,173314,173315],{"class":42},"(counter.items(), ",[36,173317,156980],{"class":468},[36,173319,156983],{"class":46},[36,173321,156986],{"class":42},[36,173323,4092],{"class":112},[36,173325,2000],{"class":42},[36,173327,166562],{"class":468},[36,173329,47],{"class":46},[36,173331,35066],{"class":112},[36,173333,922],{"class":42},[36,173335,173336],{"class":38,"line":725},[36,173337,659],{"emptyLinePlaceholder":658},[36,173339,173340,173342,173345,173347,173350,173352],{"class":38,"line":731},[36,173341,3120],{"class":46},[36,173343,173344],{"class":42}," word, count ",[36,173346,1619],{"class":46},[36,173348,173349],{"class":42}," items[:",[36,173351,554],{"class":112},[36,173353,168789],{"class":42},[36,173355,173356,173358],{"class":38,"line":736},[36,173357,1867],{"class":112},[36,173359,173360],{"class":42},"(word, count)\n",[14,173362,173364],{"id":173363},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[26,173366,173368],{"className":28,"code":173367,"language":30,"meta":31,"style":31},"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",[33,173369,173370,173376,173386,173390,173402,173406,173410,173418,173428,173434,173438,173468,173478,173482,173486,173494,173524,173548,173552,173556,173564,173593,173598],{"__ignoreMap":31},[36,173371,173372,173374],{"class":38,"line":39},[36,173373,611],{"class":46},[36,173375,150125],{"class":42},[36,173377,173378,173380,173382,173384],{"class":38,"line":53},[36,173379,645],{"class":46},[36,173381,111786],{"class":42},[36,173383,611],{"class":46},[36,173385,111791],{"class":42},[36,173387,173388],{"class":38,"line":196},[36,173389,659],{"emptyLinePlaceholder":658},[36,173391,173392,173394,173396,173398,173400],{"class":38,"line":642},[36,173393,154858],{"class":112},[36,173395,673],{"class":46},[36,173397,112020],{"class":42},[36,173399,154865],{"class":105},[36,173401,922],{"class":42},[36,173403,173404],{"class":38,"line":655},[36,173405,659],{"emptyLinePlaceholder":658},[36,173407,173408],{"class":38,"line":662},[36,173409,659],{"emptyLinePlaceholder":658},[36,173411,173412,173414,173416],{"class":38,"line":667},[36,173413,1820],{"class":46},[36,173415,154882],{"class":101},[36,173417,35540],{"class":42},[36,173419,173420,173422,173424,173426],{"class":38,"line":679},[36,173421,3752],{"class":46},[36,173423,42489],{"class":46},[36,173425,154893],{"class":112},[36,173427,154896],{"class":42},[36,173429,173430,173432],{"class":38,"line":685},[36,173431,1239],{"class":46},[36,173433,55395],{"class":42},[36,173435,173436],{"class":38,"line":691},[36,173437,659],{"emptyLinePlaceholder":658},[36,173439,173440,173442,173444,173446,173448,173450,173452,173454,173456,173458,173460,173462,173464,173466],{"class":38,"line":696},[36,173441,37738],{"class":46},[36,173443,149825],{"class":112},[36,173445,495],{"class":42},[36,173447,154858],{"class":112},[36,173449,478],{"class":42},[36,173451,149835],{"class":105},[36,173453,478],{"class":42},[36,173455,149840],{"class":468},[36,173457,47],{"class":46},[36,173459,149845],{"class":105},[36,173461,17373],{"class":42},[36,173463,617],{"class":46},[36,173465,151187],{"class":468},[36,173467,888],{"class":42},[36,173469,173470,173472,173474,173476],{"class":38,"line":702},[36,173471,1239],{"class":46},[36,173473,151198],{"class":42},[36,173475,48912],{"class":468},[36,173477,922],{"class":42},[36,173479,173480],{"class":38,"line":708},[36,173481,659],{"emptyLinePlaceholder":658},[36,173483,173484],{"class":38,"line":713},[36,173485,659],{"emptyLinePlaceholder":658},[36,173487,173488,173490,173492],{"class":38,"line":719},[36,173489,1820],{"class":46},[36,173491,154992],{"class":101},[36,173493,154995],{"class":42},[36,173495,173496,173498,173500,173502,173504,173506,173508,173510,173512,173514,173516,173518,173520,173522],{"class":38,"line":725},[36,173497,37738],{"class":46},[36,173499,149825],{"class":112},[36,173501,495],{"class":42},[36,173503,154858],{"class":112},[36,173505,478],{"class":42},[36,173507,155010],{"class":105},[36,173509,478],{"class":42},[36,173511,149840],{"class":468},[36,173513,47],{"class":46},[36,173515,149845],{"class":105},[36,173517,17373],{"class":42},[36,173519,617],{"class":46},[36,173521,151187],{"class":468},[36,173523,888],{"class":42},[36,173525,173526,173528,173530,173532,173534,173536,173538,173540,173542,173544,173546],{"class":38,"line":731},[36,173527,155031],{"class":42},[36,173529,48912],{"class":468},[36,173531,478],{"class":42},[36,173533,150171],{"class":468},[36,173535,47],{"class":46},[36,173537,37547],{"class":112},[36,173539,478],{"class":42},[36,173541,155046],{"class":468},[36,173543,47],{"class":46},[36,173545,498],{"class":112},[36,173547,922],{"class":42},[36,173549,173550],{"class":38,"line":736},[36,173551,659],{"emptyLinePlaceholder":658},[36,173553,173554],{"class":38,"line":742},[36,173555,659],{"emptyLinePlaceholder":658},[36,173557,173558,173560,173562],{"class":38,"line":748},[36,173559,162750],{"class":42},[36,173561,47],{"class":46},[36,173563,156076],{"class":42},[36,173565,173566,173569,173571,173573,173575,173577,173579,173581,173583,173585,173587,173589,173591],{"class":38,"line":754},[36,173567,173568],{"class":42},"students.append({",[36,173570,66234],{"class":105},[36,173572,54994],{"class":42},[36,173574,152922],{"class":105},[36,173576,478],{"class":42},[36,173578,72679],{"class":105},[36,173580,54994],{"class":42},[36,173582,4521],{"class":112},[36,173584,478],{"class":42},[36,173586,154506],{"class":105},[36,173588,54994],{"class":42},[36,173590,4858],{"class":112},[36,173592,168186],{"class":42},[36,173594,173595],{"class":38,"line":760},[36,173596,173597],{"class":42},"save_students(students)\n",[36,173599,173600,173602,173604,173607],{"class":38,"line":766},[36,173601,3486],{"class":112},[36,173603,495],{"class":42},[36,173605,173606],{"class":105},"\"保存成功\"",[36,173608,922],{"class":42},[14,173610,173612],{"id":173611},"_814-易错点","8.14 易错点",[211,173614,173615,173619,173625,173630,173637,173644],{},[214,173616,173617,171878],{},[33,173618,4665],{},[214,173620,173621,173622,224],{},"读写中文要指定 ",[33,173623,173624],{},"encoding=\"utf-8\"",[214,173626,173627,173628,224],{},"打开文件后要关闭，推荐使用 ",[33,173629,111308],{},[214,173631,173632,173633,173636],{},"读取大文件不要直接 ",[33,173634,173635],{},"read()"," 全部内容。",[214,173638,173639,173640,173643],{},"Windows 写 CSV 时建议加 ",[33,173641,173642],{},"newline=\"\"","，避免空行。",[214,173645,173646],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,173648,173650],{"id":173649},"_815-本章练习","8.15 本章练习",[211,173652,173653,173660,173665,173668,173671],{},[214,173654,173655,173656,173659],{},"写入一个 ",[33,173657,173658],{},"students.txt","，每行保存一个学生姓名。",[214,173661,107846,173662,173664],{},[33,173663,173658],{}," 并输出所有学生。",[214,173666,173667],{},"把学生列表保存为 JSON 文件。",[214,173669,173670],{},"从 JSON 文件读取学生数据，计算平均分。",[214,173672,173673,173674,173677,173678,173681],{},"写一个日志函数 ",[33,173675,173676],{},"write_log(message)","，每次调用向 ",[33,173679,173680],{},"app.log"," 追加一行。",[3785,173683,173684],{},"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":31,"searchDepth":53,"depth":53,"links":173686},[173687,173688,173692,173693,173699,173700,173701,173702,173703,173704,173705,173706,173707,173708,173709],{"id":171198,"depth":53,"text":171199},{"id":171239,"depth":53,"text":171240,"children":173689},[173690,173691],{"id":171243,"depth":196,"text":171244},{"id":171277,"depth":196,"text":171278},{"id":171391,"depth":53,"text":171392},{"id":171484,"depth":53,"text":171485,"children":173694},[173695,173696,173697,173698],{"id":171488,"depth":196,"text":171489},{"id":171575,"depth":196,"text":171576},{"id":171645,"depth":196,"text":171646},{"id":171739,"depth":196,"text":171740},{"id":171809,"depth":53,"text":171810},{"id":171872,"depth":53,"text":171873},{"id":172033,"depth":53,"text":172034},{"id":172096,"depth":53,"text":172097},{"id":172212,"depth":53,"text":172213},{"id":172422,"depth":53,"text":172423},{"id":172734,"depth":53,"text":172735},{"id":173145,"depth":53,"text":173146},{"id":173363,"depth":53,"text":173364},{"id":173611,"depth":53,"text":173612},{"id":173649,"depth":53,"text":173650},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":171190,"description":26998},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":173716,"title":173717,"body":173718,"description":26998,"extension":3817,"meta":175904,"navigation":658,"path":175905,"seo":175906,"stem":175907,"__hash__":175908},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":173719,"toc":175871},[173720,173723,173727,173730,173733,173825,173827,173846,173851,173855,173858,173861,173890,173897,173900,173904,173907,173936,173938,173990,173996,174049,174053,174151,174154,174221,174225,174282,174284,174290,174294,174299,174305,174396,174401,174405,174408,174486,174489,174527,174531,174649,174652,174656,174659,174704,174707,174711,174716,174722,174772,174775,174806,174810,174814,174844,174848,174883,174887,174922,174962,174966,174982,174985,174989,174993,175072,175076,175117,175121,175176,175180,175214,175218,175248,175257,175264,175270,175327,175330,175338,175341,175345,175352,175355,175361,175364,175381,175386,175390,175396,175409,175412,175449,175452,175463,175466,175480,175483,175497,175501,175508,175541,175544,175546,175552,175555,175559,175561,175567,175572,175745,175749,175812,175816,175840,175844,175868],[10,173721,173717],{"id":173722},"_9-异常模块与包",[14,173724,173726],{"id":173725},"_91-什么是异常","9.1 什么是异常",[19,173728,173729],{},"异常是程序运行过程中出现的错误。",[19,173731,173732],{},"常见异常：",[248,173734,173735,173744],{},[251,173736,173737],{},[254,173738,173739,173742],{},[257,173740,173741],{},"异常",[257,173743,29483],{},[265,173745,173746,173756,173766,173775,173785,173795,173805,173815],{},[254,173747,173748,173753],{},[270,173749,173750],{},[33,173751,173752],{},"NameError",[270,173754,173755],{},"使用了未定义变量",[254,173757,173758,173763],{},[270,173759,173760],{},[33,173761,173762],{},"TypeError",[270,173764,173765],{},"类型不匹配",[254,173767,173768,173772],{},[270,173769,173770],{},[33,173771,157868],{},[270,173773,173774],{},"值不合法",[254,173776,173777,173782],{},[270,173778,173779],{},[33,173780,173781],{},"IndexError",[270,173783,173784],{},"列表索引越界",[254,173786,173787,173792],{},[270,173788,173789],{},[33,173790,173791],{},"KeyError",[270,173793,173794],{},"字典 key 不存在",[254,173796,173797,173802],{},[270,173798,173799],{},[33,173800,173801],{},"FileNotFoundError",[270,173803,173804],{},"文件不存在",[254,173806,173807,173812],{},[270,173808,173809],{},[33,173810,173811],{},"ZeroDivisionError",[270,173813,173814],{},"除数为 0",[254,173816,173817,173822],{},[270,173818,173819],{},[33,173820,173821],{},"ImportError",[270,173823,173824],{},"导入失败",[19,173826,18791],{},[26,173828,173830],{"className":28,"code":173829,"language":30,"meta":31,"style":31},"num = int(\"abc\")\n",[33,173831,173832],{"__ignoreMap":31},[36,173833,173834,173836,173838,173840,173842,173844],{"class":38,"line":39},[36,173835,158821],{"class":42},[36,173837,47],{"class":46},[36,173839,6094],{"class":112},[36,173841,495],{"class":42},[36,173843,158914],{"class":105},[36,173845,922],{"class":42},[19,173847,173848,173849,224],{},"会触发 ",[33,173850,157868],{},[14,173852,173854],{"id":173853},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,173856,173857],{},"如果不处理异常，程序会直接终止。",[19,173859,173860],{},"例如用户输入年龄：",[26,173862,173864],{"className":28,"code":173863,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[33,173865,173866,173884],{"__ignoreMap":31},[36,173867,173868,173870,173872,173874,173876,173878,173880,173882],{"class":38,"line":39},[36,173869,149580],{"class":42},[36,173871,47],{"class":46},[36,173873,6094],{"class":112},[36,173875,495],{"class":42},[36,173877,57378],{"class":112},[36,173879,495],{"class":42},[36,173881,155428],{"class":105},[36,173883,2005],{"class":42},[36,173885,173886,173888],{"class":38,"line":53},[36,173887,3486],{"class":112},[36,173889,158795],{"class":42},[19,173891,173892,173893,173896],{},"用户输入 ",[33,173894,173895],{},"abc","，程序就会报错退出。",[19,173898,173899],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,173901,173903],{"id":173902},"_93-try-except","9.3 try except",[19,173905,173906],{},"基础语法：",[26,173908,173910],{"className":28,"code":173909,"language":30,"meta":31,"style":31},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[33,173911,173912,173919,173924,173931],{"__ignoreMap":31},[36,173913,173914,173917],{"class":38,"line":39},[36,173915,173916],{"class":46},"try",[36,173918,888],{"class":42},[36,173920,173921],{"class":38,"line":53},[36,173922,173923],{"class":42},"    可能出错的代码\n",[36,173925,173926,173929],{"class":38,"line":196},[36,173927,173928],{"class":46},"except",[36,173930,888],{"class":42},[36,173932,173933],{"class":38,"line":642},[36,173934,173935],{"class":42},"    出错后的处理代码\n",[19,173937,18791],{},[26,173939,173941],{"className":28,"code":173940,"language":30,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[33,173942,173943,173949,173967,173973,173979],{"__ignoreMap":31},[36,173944,173945,173947],{"class":38,"line":39},[36,173946,173916],{"class":46},[36,173948,888],{"class":42},[36,173950,173951,173953,173955,173957,173959,173961,173963,173965],{"class":38,"line":53},[36,173952,155420],{"class":42},[36,173954,47],{"class":46},[36,173956,6094],{"class":112},[36,173958,495],{"class":42},[36,173960,57378],{"class":112},[36,173962,495],{"class":42},[36,173964,155428],{"class":105},[36,173966,2005],{"class":42},[36,173968,173969,173971],{"class":38,"line":196},[36,173970,1867],{"class":112},[36,173972,158795],{"class":42},[36,173974,173975,173977],{"class":38,"line":642},[36,173976,173928],{"class":46},[36,173978,888],{"class":42},[36,173980,173981,173983,173985,173988],{"class":38,"line":655},[36,173982,1867],{"class":112},[36,173984,495],{"class":42},[36,173986,173987],{"class":105},"\"年龄必须是数字\"",[36,173989,922],{"class":42},[19,173991,173992,173993,173995],{},"不建议裸写 ",[33,173994,173928],{},"，最好指定异常类型。",[26,173997,173999],{"className":28,"code":173998,"language":30,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[33,174000,174001,174007,174025,174031,174039],{"__ignoreMap":31},[36,174002,174003,174005],{"class":38,"line":39},[36,174004,173916],{"class":46},[36,174006,888],{"class":42},[36,174008,174009,174011,174013,174015,174017,174019,174021,174023],{"class":38,"line":53},[36,174010,155420],{"class":42},[36,174012,47],{"class":46},[36,174014,6094],{"class":112},[36,174016,495],{"class":42},[36,174018,57378],{"class":112},[36,174020,495],{"class":42},[36,174022,155428],{"class":105},[36,174024,2005],{"class":42},[36,174026,174027,174029],{"class":38,"line":196},[36,174028,1867],{"class":112},[36,174030,158795],{"class":42},[36,174032,174033,174035,174037],{"class":38,"line":642},[36,174034,173928],{"class":46},[36,174036,155260],{"class":112},[36,174038,888],{"class":42},[36,174040,174041,174043,174045,174047],{"class":38,"line":655},[36,174042,1867],{"class":112},[36,174044,495],{"class":42},[36,174046,173987],{"class":105},[36,174048,922],{"class":42},[14,174050,174052],{"id":174051},"_94-捕获多个异常","9.4 捕获多个异常",[26,174054,174056],{"className":28,"code":174055,"language":30,"meta":31,"style":31},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[33,174057,174058,174064,174085,174105,174112,174120,174131,174140],{"__ignoreMap":31},[36,174059,174060,174062],{"class":38,"line":39},[36,174061,173916],{"class":46},[36,174063,888],{"class":42},[36,174065,174066,174069,174071,174073,174075,174077,174079,174081,174083],{"class":38,"line":53},[36,174067,174068],{"class":42},"    nums ",[36,174070,47],{"class":46},[36,174072,55783],{"class":42},[36,174074,4092],{"class":112},[36,174076,478],{"class":42},[36,174078,498],{"class":112},[36,174080,478],{"class":42},[36,174082,1982],{"class":112},[36,174084,36806],{"class":42},[36,174086,174087,174090,174092,174094,174096,174098,174100,174103],{"class":38,"line":196},[36,174088,174089],{"class":42},"    index ",[36,174091,47],{"class":46},[36,174093,6094],{"class":112},[36,174095,495],{"class":42},[36,174097,57378],{"class":112},[36,174099,495],{"class":42},[36,174101,174102],{"class":105},"\"请输入索引:\"",[36,174104,2005],{"class":42},[36,174106,174107,174109],{"class":38,"line":642},[36,174108,1867],{"class":112},[36,174110,174111],{"class":42},"(nums[index])\n",[36,174113,174114,174116,174118],{"class":38,"line":655},[36,174115,173928],{"class":46},[36,174117,155260],{"class":112},[36,174119,888],{"class":42},[36,174121,174122,174124,174126,174129],{"class":38,"line":662},[36,174123,1867],{"class":112},[36,174125,495],{"class":42},[36,174127,174128],{"class":105},"\"索引必须是整数\"",[36,174130,922],{"class":42},[36,174132,174133,174135,174138],{"class":38,"line":667},[36,174134,173928],{"class":46},[36,174136,174137],{"class":112}," IndexError",[36,174139,888],{"class":42},[36,174141,174142,174144,174146,174149],{"class":38,"line":679},[36,174143,1867],{"class":112},[36,174145,495],{"class":42},[36,174147,174148],{"class":105},"\"索引越界\"",[36,174150,922],{"class":42},[19,174152,174153],{},"多个异常使用相同处理逻辑：",[26,174155,174157],{"className":28,"code":174156,"language":30,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[33,174158,174159,174165,174183,174196,174210],{"__ignoreMap":31},[36,174160,174161,174163],{"class":38,"line":39},[36,174162,173916],{"class":46},[36,174164,888],{"class":42},[36,174166,174167,174169,174171,174173,174175,174177,174179,174181],{"class":38,"line":53},[36,174168,49151],{"class":42},[36,174170,47],{"class":46},[36,174172,6094],{"class":112},[36,174174,495],{"class":42},[36,174176,57378],{"class":112},[36,174178,495],{"class":42},[36,174180,158830],{"class":105},[36,174182,2005],{"class":42},[36,174184,174185,174187,174189,174191,174193],{"class":38,"line":196},[36,174186,1867],{"class":112},[36,174188,495],{"class":42},[36,174190,554],{"class":112},[36,174192,159080],{"class":46},[36,174194,174195],{"class":42}," num)\n",[36,174197,174198,174200,174202,174204,174206,174208],{"class":38,"line":642},[36,174199,173928],{"class":46},[36,174201,5386],{"class":42},[36,174203,157868],{"class":112},[36,174205,478],{"class":42},[36,174207,173811],{"class":112},[36,174209,848],{"class":42},[36,174211,174212,174214,174216,174219],{"class":38,"line":655},[36,174213,1867],{"class":112},[36,174215,495],{"class":42},[36,174217,174218],{"class":105},"\"输入不合法\"",[36,174220,922],{"class":42},[14,174222,174224],{"id":174223},"_95-获取异常信息","9.5 获取异常信息",[26,174226,174228],{"className":28,"code":174227,"language":30,"meta":31,"style":31},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[33,174229,174230,174236,174250,174261],{"__ignoreMap":31},[36,174231,174232,174234],{"class":38,"line":39},[36,174233,173916],{"class":46},[36,174235,888],{"class":42},[36,174237,174238,174240,174242,174244,174246,174248],{"class":38,"line":53},[36,174239,49151],{"class":42},[36,174241,47],{"class":46},[36,174243,6094],{"class":112},[36,174245,495],{"class":42},[36,174247,158914],{"class":105},[36,174249,922],{"class":42},[36,174251,174252,174254,174256,174258],{"class":38,"line":196},[36,174253,173928],{"class":46},[36,174255,155260],{"class":112},[36,174257,68159],{"class":46},[36,174259,174260],{"class":42}," e:\n",[36,174262,174263,174265,174267,174269,174272,174274,174276,174278,174280],{"class":38,"line":642},[36,174264,1867],{"class":112},[36,174266,495],{"class":42},[36,174268,3937],{"class":46},[36,174270,174271],{"class":105},"\"出错了:",[36,174273,4766],{"class":112},[36,174275,3958],{"class":42},[36,174277,4815],{"class":112},[36,174279,4126],{"class":105},[36,174281,922],{"class":42},[19,174283,149491],{},[26,174285,174288],{"className":174286,"code":174287,"language":80,"meta":31},[78],"出错了:invalid literal for int() with base 10: 'abc'\n",[33,174289,174287],{"__ignoreMap":31},[14,174291,174293],{"id":174292},"_96-else和finally","9.6 else和finally",[19,174295,174296,174298],{},[33,174297,5425],{},"：没有异常时执行。",[19,174300,174301,174304],{},[33,174302,174303],{},"finally","：无论是否异常都会执行。",[26,174306,174308],{"className":28,"code":174307,"language":30,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[33,174309,174310,174316,174334,174342,174352,174358,174379,174385],{"__ignoreMap":31},[36,174311,174312,174314],{"class":38,"line":39},[36,174313,173916],{"class":46},[36,174315,888],{"class":42},[36,174317,174318,174320,174322,174324,174326,174328,174330,174332],{"class":38,"line":53},[36,174319,49151],{"class":42},[36,174321,47],{"class":46},[36,174323,6094],{"class":112},[36,174325,495],{"class":42},[36,174327,57378],{"class":112},[36,174329,495],{"class":42},[36,174331,158830],{"class":105},[36,174333,2005],{"class":42},[36,174335,174336,174338,174340],{"class":38,"line":196},[36,174337,173928],{"class":46},[36,174339,155260],{"class":112},[36,174341,888],{"class":42},[36,174343,174344,174346,174348,174350],{"class":38,"line":642},[36,174345,1867],{"class":112},[36,174347,495],{"class":42},[36,174349,156248],{"class":105},[36,174351,922],{"class":42},[36,174353,174354,174356],{"class":38,"line":655},[36,174355,5425],{"class":46},[36,174357,888],{"class":42},[36,174359,174360,174362,174364,174366,174369,174371,174373,174375,174377],{"class":38,"line":662},[36,174361,1867],{"class":112},[36,174363,495],{"class":42},[36,174365,3937],{"class":46},[36,174367,174368],{"class":105},"\"输入正确:",[36,174370,4766],{"class":112},[36,174372,5393],{"class":42},[36,174374,4815],{"class":112},[36,174376,4126],{"class":105},[36,174378,922],{"class":42},[36,174380,174381,174383],{"class":38,"line":667},[36,174382,174303],{"class":46},[36,174384,888],{"class":42},[36,174386,174387,174389,174391,174394],{"class":38,"line":679},[36,174388,1867],{"class":112},[36,174390,495],{"class":42},[36,174392,174393],{"class":105},"\"程序结束\"",[36,174395,922],{"class":42},[19,174397,174398,174400],{},[33,174399,174303],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,174402,174404],{"id":174403},"_97-抛出异常","9.7 抛出异常",[19,174406,174407],{},"程序可以主动抛出异常。",[26,174409,174411],{"className":28,"code":174410,"language":30,"meta":31,"style":31},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[33,174412,174413,174422,174434,174447,174467,174471,174475],{"__ignoreMap":31},[36,174414,174415,174417,174420],{"class":38,"line":39},[36,174416,1820],{"class":46},[36,174418,174419],{"class":101}," set_age",[36,174421,164449],{"class":42},[36,174423,174424,174426,174428,174430,174432],{"class":38,"line":53},[36,174425,3752],{"class":46},[36,174427,19363],{"class":42},[36,174429,393],{"class":46},[36,174431,1004],{"class":112},[36,174433,888],{"class":42},[36,174435,174436,174438,174440,174442,174445],{"class":38,"line":196},[36,174437,106925],{"class":46},[36,174439,155260],{"class":112},[36,174441,495],{"class":42},[36,174443,174444],{"class":105},"\"年龄不能为负数\"",[36,174446,922],{"class":42},[36,174448,174449,174451,174453,174455,174457,174459,174461,174463,174465],{"class":38,"line":642},[36,174450,1867],{"class":112},[36,174452,495],{"class":42},[36,174454,3937],{"class":46},[36,174456,165017],{"class":105},[36,174458,4766],{"class":112},[36,174460,73775],{"class":42},[36,174462,4815],{"class":112},[36,174464,4126],{"class":105},[36,174466,922],{"class":42},[36,174468,174469],{"class":38,"line":655},[36,174470,659],{"emptyLinePlaceholder":658},[36,174472,174473],{"class":38,"line":662},[36,174474,659],{"emptyLinePlaceholder":658},[36,174476,174477,174480,174482,174484],{"class":38,"line":667},[36,174478,174479],{"class":42},"set_age(",[36,174481,1308],{"class":46},[36,174483,4092],{"class":112},[36,174485,922],{"class":42},[19,174487,174488],{},"调用者可以捕获：",[26,174490,174492],{"className":28,"code":174491,"language":30,"meta":31,"style":31},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[33,174493,174494,174500,174511,174521],{"__ignoreMap":31},[36,174495,174496,174498],{"class":38,"line":39},[36,174497,173916],{"class":46},[36,174499,888],{"class":42},[36,174501,174502,174505,174507,174509],{"class":38,"line":53},[36,174503,174504],{"class":42},"    set_age(",[36,174506,1308],{"class":46},[36,174508,4092],{"class":112},[36,174510,922],{"class":42},[36,174512,174513,174515,174517,174519],{"class":38,"line":196},[36,174514,173928],{"class":46},[36,174516,155260],{"class":112},[36,174518,68159],{"class":46},[36,174520,174260],{"class":42},[36,174522,174523,174525],{"class":38,"line":642},[36,174524,1867],{"class":112},[36,174526,70554],{"class":42},[14,174528,174530],{"id":174529},"_98-自定义异常","9.8 自定义异常",[26,174532,174534],{"className":28,"code":174533,"language":30,"meta":31,"style":31},"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",[33,174535,174536,174550,174554,174558,174562,174570,174580,174591,174601,174605,174609,174615,174632,174643],{"__ignoreMap":31},[36,174537,174538,174540,174543,174545,174548],{"class":38,"line":39},[36,174539,832],{"class":46},[36,174541,174542],{"class":101}," BalanceNotEnoughError",[36,174544,495],{"class":42},[36,174546,174547],{"class":112},"Exception",[36,174549,848],{"class":42},[36,174551,174552],{"class":38,"line":53},[36,174553,152571],{"class":46},[36,174555,174556],{"class":38,"line":196},[36,174557,659],{"emptyLinePlaceholder":658},[36,174559,174560],{"class":38,"line":642},[36,174561,659],{"emptyLinePlaceholder":658},[36,174563,174564,174566,174568],{"class":38,"line":655},[36,174565,1820],{"class":46},[36,174567,153220],{"class":101},[36,174569,165846],{"class":42},[36,174571,174572,174574,174576,174578],{"class":38,"line":662},[36,174573,3752],{"class":46},[36,174575,153176],{"class":42},[36,174577,4829],{"class":46},[36,174579,165623],{"class":42},[36,174581,174582,174584,174587,174589],{"class":38,"line":667},[36,174583,106925],{"class":46},[36,174585,174586],{"class":42}," BalanceNotEnoughError(",[36,174588,153271],{"class":105},[36,174590,922],{"class":42},[36,174592,174593,174595,174597,174599],{"class":38,"line":679},[36,174594,7788],{"class":46},[36,174596,165853],{"class":42},[36,174598,1308],{"class":46},[36,174600,153209],{"class":42},[36,174602,174603],{"class":38,"line":685},[36,174604,659],{"emptyLinePlaceholder":658},[36,174606,174607],{"class":38,"line":691},[36,174608,659],{"emptyLinePlaceholder":658},[36,174610,174611,174613],{"class":38,"line":696},[36,174612,173916],{"class":46},[36,174614,888],{"class":42},[36,174616,174617,174619,174621,174624,174626,174628,174630],{"class":38,"line":702},[36,174618,165524],{"class":42},[36,174620,47],{"class":46},[36,174622,174623],{"class":42}," withdraw(",[36,174625,4186],{"class":112},[36,174627,478],{"class":42},[36,174629,5445],{"class":112},[36,174631,922],{"class":42},[36,174633,174634,174636,174639,174641],{"class":38,"line":708},[36,174635,173928],{"class":46},[36,174637,174638],{"class":42}," BalanceNotEnoughError ",[36,174640,617],{"class":46},[36,174642,174260],{"class":42},[36,174644,174645,174647],{"class":38,"line":713},[36,174646,1867],{"class":112},[36,174648,70554],{"class":42},[19,174650,174651],{},"入门阶段大多数情况使用内置异常即可。",[14,174653,174655],{"id":174654},"_99-traceback","9.9 traceback",[19,174657,174658],{},"调试时可以输出完整异常堆栈。",[26,174660,174662],{"className":28,"code":174661,"language":30,"meta":31,"style":31},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[33,174663,174664,174671,174675,174681,174691,174699],{"__ignoreMap":31},[36,174665,174666,174668],{"class":38,"line":39},[36,174667,611],{"class":46},[36,174669,174670],{"class":42}," traceback\n",[36,174672,174673],{"class":38,"line":53},[36,174674,659],{"emptyLinePlaceholder":658},[36,174676,174677,174679],{"class":38,"line":196},[36,174678,173916],{"class":46},[36,174680,888],{"class":42},[36,174682,174683,174685,174687,174689],{"class":38,"line":642},[36,174684,5697],{"class":112},[36,174686,495],{"class":42},[36,174688,158914],{"class":105},[36,174690,922],{"class":42},[36,174692,174693,174695,174697],{"class":38,"line":655},[36,174694,173928],{"class":46},[36,174696,155260],{"class":112},[36,174698,888],{"class":42},[36,174700,174701],{"class":38,"line":662},[36,174702,174703],{"class":42},"    traceback.print_exc()\n",[19,174705,174706],{},"日志系统中常把异常堆栈记录到文件。",[14,174708,174710],{"id":174709},"_910-什么是模块","9.10 什么是模块",[19,174712,174713,174714,129017],{},"模块就是一个 ",[33,174715,149386],{},[19,174717,174718,174719,28234],{},"例如创建 ",[33,174720,174721],{},"my_math.py",[26,174723,174725],{"className":28,"code":174724,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[33,174726,174727,174735,174745,174749,174753,174762],{"__ignoreMap":31},[36,174728,174729,174731,174733],{"class":38,"line":39},[36,174730,1820],{"class":46},[36,174732,8903],{"class":101},[36,174734,154127],{"class":42},[36,174736,174737,174739,174741,174743],{"class":38,"line":53},[36,174738,7788],{"class":46},[36,174740,14530],{"class":42},[36,174742,4354],{"class":46},[36,174744,154138],{"class":42},[36,174746,174747],{"class":38,"line":196},[36,174748,659],{"emptyLinePlaceholder":658},[36,174750,174751],{"class":38,"line":642},[36,174752,659],{"emptyLinePlaceholder":658},[36,174754,174755,174757,174760],{"class":38,"line":655},[36,174756,1820],{"class":46},[36,174758,174759],{"class":101}," sub",[36,174761,154127],{"class":42},[36,174763,174764,174766,174768,174770],{"class":38,"line":662},[36,174765,7788],{"class":46},[36,174767,14530],{"class":42},[36,174769,1308],{"class":46},[36,174771,154138],{"class":42},[19,174773,174774],{},"在另一个文件中导入：",[26,174776,174778],{"className":28,"code":174777,"language":30,"meta":31,"style":31},"import my_math\n\nprint(my_math.add(1, 2))\n",[33,174779,174780,174787,174791],{"__ignoreMap":31},[36,174781,174782,174784],{"class":38,"line":39},[36,174783,611],{"class":46},[36,174785,174786],{"class":42}," my_math\n",[36,174788,174789],{"class":38,"line":53},[36,174790,659],{"emptyLinePlaceholder":658},[36,174792,174793,174795,174798,174800,174802,174804],{"class":38,"line":196},[36,174794,3486],{"class":112},[36,174796,174797],{"class":42},"(my_math.add(",[36,174799,4092],{"class":112},[36,174801,478],{"class":42},[36,174803,498],{"class":112},[36,174805,2005],{"class":42},[14,174807,174809],{"id":174808},"_911-import导入","9.11 import导入",[318,174811,174813],{"id":174812},"_9111-导入模块","9.11.1 导入模块",[26,174815,174817],{"className":28,"code":174816,"language":30,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\n",[33,174818,174819,174825,174829],{"__ignoreMap":31},[36,174820,174821,174823],{"class":38,"line":39},[36,174822,611],{"class":46},[36,174824,48886],{"class":42},[36,174826,174827],{"class":38,"line":53},[36,174828,659],{"emptyLinePlaceholder":658},[36,174830,174831,174833,174836,174838,174840,174842],{"class":38,"line":196},[36,174832,3486],{"class":112},[36,174834,174835],{"class":42},"(random.randint(",[36,174837,4092],{"class":112},[36,174839,478],{"class":42},[36,174841,554],{"class":112},[36,174843,2005],{"class":42},[318,174845,174847],{"id":174846},"_9112-导入指定内容","9.11.2 导入指定内容",[26,174849,174851],{"className":28,"code":174850,"language":30,"meta":31,"style":31},"from random import randint\n\nprint(randint(1, 10))\n",[33,174852,174853,174864,174868],{"__ignoreMap":31},[36,174854,174855,174857,174859,174861],{"class":38,"line":39},[36,174856,645],{"class":46},[36,174858,61351],{"class":42},[36,174860,611],{"class":46},[36,174862,174863],{"class":42}," randint\n",[36,174865,174866],{"class":38,"line":53},[36,174867,659],{"emptyLinePlaceholder":658},[36,174869,174870,174872,174875,174877,174879,174881],{"class":38,"line":196},[36,174871,3486],{"class":112},[36,174873,174874],{"class":42},"(randint(",[36,174876,4092],{"class":112},[36,174878,478],{"class":42},[36,174880,554],{"class":112},[36,174882,2005],{"class":42},[318,174884,174886],{"id":174885},"_9113-起别名","9.11.3 起别名",[26,174888,174890],{"className":28,"code":174889,"language":30,"meta":31,"style":31},"import random as rd\n\nprint(rd.randint(1, 10))\n",[33,174891,174892,174903,174907],{"__ignoreMap":31},[36,174893,174894,174896,174898,174900],{"class":38,"line":39},[36,174895,611],{"class":46},[36,174897,61351],{"class":42},[36,174899,617],{"class":46},[36,174901,174902],{"class":42}," rd\n",[36,174904,174905],{"class":38,"line":53},[36,174906,659],{"emptyLinePlaceholder":658},[36,174908,174909,174911,174914,174916,174918,174920],{"class":38,"line":196},[36,174910,3486],{"class":112},[36,174912,174913],{"class":42},"(rd.randint(",[36,174915,4092],{"class":112},[36,174917,478],{"class":42},[36,174919,554],{"class":112},[36,174921,2005],{"class":42},[26,174923,174925],{"className":28,"code":174924,"language":30,"meta":31,"style":31},"from random import randint as rint\n\nprint(rint(1, 10))\n",[33,174926,174927,174943,174947],{"__ignoreMap":31},[36,174928,174929,174931,174933,174935,174938,174940],{"class":38,"line":39},[36,174930,645],{"class":46},[36,174932,61351],{"class":42},[36,174934,611],{"class":46},[36,174936,174937],{"class":42}," randint ",[36,174939,617],{"class":46},[36,174941,174942],{"class":42}," rint\n",[36,174944,174945],{"class":38,"line":53},[36,174946,659],{"emptyLinePlaceholder":658},[36,174948,174949,174951,174954,174956,174958,174960],{"class":38,"line":196},[36,174950,3486],{"class":112},[36,174952,174953],{"class":42},"(rint(",[36,174955,4092],{"class":112},[36,174957,478],{"class":42},[36,174959,554],{"class":112},[36,174961,2005],{"class":42},[318,174963,174965],{"id":174964},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[26,174967,174969],{"className":28,"code":174968,"language":30,"meta":31,"style":31},"from random import *\n",[33,174970,174971],{"__ignoreMap":31},[36,174972,174973,174975,174977,174979],{"class":38,"line":39},[36,174974,645],{"class":46},[36,174976,61351],{"class":42},[36,174978,611],{"class":46},[36,174980,174981],{"class":46}," *\n",[19,174983,174984],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,174986,174988],{"id":174987},"_912-常用内置模块","9.12 常用内置模块",[318,174990,174992],{"id":174991},"_9121-random","9.12.1 random",[26,174994,174996],{"className":28,"code":174995,"language":30,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[33,174997,174998,175004,175008,175022,175041],{"__ignoreMap":31},[36,174999,175000,175002],{"class":38,"line":39},[36,175001,611],{"class":46},[36,175003,48886],{"class":42},[36,175005,175006],{"class":38,"line":53},[36,175007,659],{"emptyLinePlaceholder":658},[36,175009,175010,175012,175014,175016,175018,175020],{"class":38,"line":196},[36,175011,3486],{"class":112},[36,175013,174835],{"class":42},[36,175015,4092],{"class":112},[36,175017,478],{"class":42},[36,175019,554],{"class":112},[36,175021,2005],{"class":42},[36,175023,175024,175026,175029,175031,175033,175035,175037,175039],{"class":38,"line":642},[36,175025,3486],{"class":112},[36,175027,175028],{"class":42},"(random.choice([",[36,175030,152922],{"class":105},[36,175032,478],{"class":42},[36,175034,153970],{"class":105},[36,175036,478],{"class":42},[36,175038,162765],{"class":105},[36,175040,36703],{"class":42},[36,175042,175043,175045,175048,175050,175052,175054,175056,175058,175060,175062,175064,175066,175068,175070],{"class":38,"line":655},[36,175044,3486],{"class":112},[36,175046,175047],{"class":42},"(random.sample([",[36,175049,4092],{"class":112},[36,175051,478],{"class":42},[36,175053,498],{"class":112},[36,175055,478],{"class":42},[36,175057,1982],{"class":112},[36,175059,478],{"class":42},[36,175061,4168],{"class":112},[36,175063,478],{"class":42},[36,175065,4194],{"class":112},[36,175067,2000],{"class":42},[36,175069,498],{"class":112},[36,175071,2005],{"class":42},[318,175073,175075],{"id":175074},"_9122-time","9.12.2 time",[26,175077,175079],{"className":28,"code":175078,"language":30,"meta":31,"style":31},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[33,175080,175081,175087,175091,175098,175106],{"__ignoreMap":31},[36,175082,175083,175085],{"class":38,"line":39},[36,175084,611],{"class":46},[36,175086,35417],{"class":42},[36,175088,175089],{"class":38,"line":53},[36,175090,659],{"emptyLinePlaceholder":658},[36,175092,175093,175095],{"class":38,"line":196},[36,175094,3486],{"class":112},[36,175096,175097],{"class":42},"(time.time())\n",[36,175099,175100,175102,175104],{"class":38,"line":642},[36,175101,98622],{"class":42},[36,175103,4092],{"class":112},[36,175105,922],{"class":42},[36,175107,175108,175110,175112,175115],{"class":38,"line":655},[36,175109,3486],{"class":112},[36,175111,495],{"class":42},[36,175113,175114],{"class":105},"\"1秒后执行\"",[36,175116,922],{"class":42},[318,175118,175120],{"id":175119},"_9123-datetime","9.12.3 datetime",[26,175122,175124],{"className":28,"code":175123,"language":30,"meta":31,"style":31},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[33,175125,175126,175138,175142,175152,175159],{"__ignoreMap":31},[36,175127,175128,175130,175133,175135],{"class":38,"line":39},[36,175129,645],{"class":46},[36,175131,175132],{"class":42}," datetime ",[36,175134,611],{"class":46},[36,175136,175137],{"class":42}," datetime\n",[36,175139,175140],{"class":38,"line":53},[36,175141,659],{"emptyLinePlaceholder":658},[36,175143,175144,175147,175149],{"class":38,"line":196},[36,175145,175146],{"class":42},"now ",[36,175148,47],{"class":46},[36,175150,175151],{"class":42}," datetime.now()\n",[36,175153,175154,175156],{"class":38,"line":642},[36,175155,3486],{"class":112},[36,175157,175158],{"class":42},"(now)\n",[36,175160,175161,175163,175166,175169,175171,175174],{"class":38,"line":655},[36,175162,3486],{"class":112},[36,175164,175165],{"class":42},"(now.strftime(",[36,175167,175168],{"class":105},"\"%Y-%m-",[36,175170,159725],{"class":112},[36,175172,175173],{"class":105}," %H:%M:%S\"",[36,175175,2005],{"class":42},[318,175177,175179],{"id":175178},"_9124-os","9.12.4 os",[26,175181,175183],{"className":28,"code":175182,"language":30,"meta":31,"style":31},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[33,175184,175185,175191,175195,175202],{"__ignoreMap":31},[36,175186,175187,175189],{"class":38,"line":39},[36,175188,611],{"class":46},[36,175190,48863],{"class":42},[36,175192,175193],{"class":38,"line":53},[36,175194,659],{"emptyLinePlaceholder":658},[36,175196,175197,175199],{"class":38,"line":196},[36,175198,3486],{"class":112},[36,175200,175201],{"class":42},"(os.getcwd())\n",[36,175203,175204,175206,175209,175212],{"class":38,"line":642},[36,175205,3486],{"class":112},[36,175207,175208],{"class":42},"(os.listdir(",[36,175210,175211],{"class":105},"\".\"",[36,175213,2005],{"class":42},[318,175215,175217],{"id":175216},"_9125-sys","9.12.5 sys",[26,175219,175221],{"className":28,"code":175220,"language":30,"meta":31,"style":31},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[33,175222,175223,175230,175234,175241],{"__ignoreMap":31},[36,175224,175225,175227],{"class":38,"line":39},[36,175226,611],{"class":46},[36,175228,175229],{"class":42}," sys\n",[36,175231,175232],{"class":38,"line":53},[36,175233,659],{"emptyLinePlaceholder":658},[36,175235,175236,175238],{"class":38,"line":196},[36,175237,3486],{"class":112},[36,175239,175240],{"class":42},"(sys.version)\n",[36,175242,175243,175245],{"class":38,"line":642},[36,175244,3486],{"class":112},[36,175246,175247],{"class":42},"(sys.path)\n",[14,175249,175251,175252,175254,175255,4126],{"id":175250},"_913-if-name-main","9.13 if ",[4027,175253,83364],{}," == \"",[4027,175256,105569],{},[19,175258,175259,175260,175263],{},"模块被直接运行和被导入时，",[33,175261,175262],{},"__name__"," 的值不同。",[19,175265,175266,175267,28234],{},"创建 ",[33,175268,175269],{},"my_module.py",[26,175271,175273],{"className":28,"code":175272,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[33,175274,175275,175283,175293,175297,175301,175313],{"__ignoreMap":31},[36,175276,175277,175279,175281],{"class":38,"line":39},[36,175278,1820],{"class":46},[36,175280,8903],{"class":101},[36,175282,154127],{"class":42},[36,175284,175285,175287,175289,175291],{"class":38,"line":53},[36,175286,7788],{"class":46},[36,175288,14530],{"class":42},[36,175290,4354],{"class":46},[36,175292,154138],{"class":42},[36,175294,175295],{"class":38,"line":196},[36,175296,659],{"emptyLinePlaceholder":658},[36,175298,175299],{"class":38,"line":642},[36,175300,659],{"emptyLinePlaceholder":658},[36,175302,175303,175305,175307,175309,175311],{"class":38,"line":655},[36,175304,2067],{"class":46},[36,175306,2070],{"class":112},[36,175308,2073],{"class":46},[36,175310,2076],{"class":105},[36,175312,888],{"class":42},[36,175314,175315,175317,175319,175321,175323,175325],{"class":38,"line":662},[36,175316,1867],{"class":112},[36,175318,169634],{"class":42},[36,175320,4092],{"class":112},[36,175322,478],{"class":42},[36,175324,498],{"class":112},[36,175326,2005],{"class":42},[19,175328,175329],{},"作用：",[211,175331,175332,175335],{},[214,175333,175334],{},"直接运行该文件时，执行测试代码。",[214,175336,175337],{},"被其他文件导入时，不执行测试代码。",[19,175339,175340],{},"这是写模块时很常用的习惯。",[14,175342,175344],{"id":175343},"_914-包","9.14 包",[19,175346,175347,175348,175351],{},"包是包含 ",[33,175349,175350],{},"__init__.py"," 的目录，用于组织多个模块。",[19,175353,175354],{},"目录结构：",[26,175356,175359],{"className":175357,"code":175358,"language":80,"meta":31},[78],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[33,175360,175358],{"__ignoreMap":31},[19,175362,175363],{},"导入：",[26,175365,175367],{"className":28,"code":175366,"language":30,"meta":31,"style":31},"from utils.file_utils import read_file\n",[33,175368,175369],{"__ignoreMap":31},[36,175370,175371,175373,175376,175378],{"class":38,"line":39},[36,175372,645],{"class":46},[36,175374,175375],{"class":42}," utils.file_utils ",[36,175377,611],{"class":46},[36,175379,175380],{"class":42}," read_file\n",[19,175382,175383,175385],{},[33,175384,175350],{}," 可以为空，也可以写包初始化逻辑。",[14,175387,175389],{"id":175388},"_915-第三方包","9.15 第三方包",[19,175391,175392,175393,175395],{},"第三方包通过 ",[33,175394,141],{}," 安装。",[26,175397,175399],{"className":92,"code":175398,"language":94,"meta":31,"style":31},"pip install requests\n",[33,175400,175401],{"__ignoreMap":31},[36,175402,175403,175405,175407],{"class":38,"line":39},[36,175404,141],{"class":101},[36,175406,109],{"class":105},[36,175408,149132],{"class":105},[19,175410,175411],{},"使用：",[26,175413,175415],{"className":28,"code":175414,"language":30,"meta":31,"style":31},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[33,175416,175417,175423,175427,175442],{"__ignoreMap":31},[36,175418,175419,175421],{"class":38,"line":39},[36,175420,611],{"class":46},[36,175422,149132],{"class":42},[36,175424,175425],{"class":38,"line":53},[36,175426,659],{"emptyLinePlaceholder":658},[36,175428,175429,175432,175434,175437,175440],{"class":38,"line":196},[36,175430,175431],{"class":42},"response ",[36,175433,47],{"class":46},[36,175435,175436],{"class":42}," requests.get(",[36,175438,175439],{"class":105},"\"https:\u002F\u002Fwww.example.com\"",[36,175441,922],{"class":42},[36,175443,175444,175446],{"class":38,"line":642},[36,175445,3486],{"class":112},[36,175447,175448],{"class":42},"(response.status_code)\n",[19,175450,175451],{},"查看已安装包：",[26,175453,175455],{"className":92,"code":175454,"language":94,"meta":31,"style":31},"pip list\n",[33,175456,175457],{"__ignoreMap":31},[36,175458,175459,175461],{"class":38,"line":39},[36,175460,141],{"class":101},[36,175462,121989],{"class":105},[19,175464,175465],{},"导出项目依赖：",[26,175467,175468],{"className":92,"code":149327,"language":94,"meta":31,"style":31},[33,175469,175470],{"__ignoreMap":31},[36,175471,175472,175474,175476,175478],{"class":38,"line":39},[36,175473,141],{"class":101},[36,175475,149336],{"class":105},[36,175477,29835],{"class":46},[36,175479,149341],{"class":105},[19,175481,175482],{},"安装项目依赖：",[26,175484,175485],{"className":92,"code":149347,"language":94,"meta":31,"style":31},[33,175486,175487],{"__ignoreMap":31},[36,175488,175489,175491,175493,175495],{"class":38,"line":39},[36,175490,141],{"class":101},[36,175492,109],{"class":105},[36,175494,122673],{"class":112},[36,175496,149341],{"class":105},[14,175498,175500],{"id":175499},"_916-模块搜索路径","9.16 模块搜索路径",[19,175502,175503,175504,175507],{},"Python 导入模块时会在 ",[33,175505,175506],{},"sys.path"," 中查找。",[26,175509,175511],{"className":28,"code":175510,"language":30,"meta":31,"style":31},"import sys\n\nfor path in sys.path:\n    print(path)\n",[33,175512,175513,175519,175523,175535],{"__ignoreMap":31},[36,175514,175515,175517],{"class":38,"line":39},[36,175516,611],{"class":46},[36,175518,175229],{"class":42},[36,175520,175521],{"class":38,"line":53},[36,175522,659],{"emptyLinePlaceholder":658},[36,175524,175525,175527,175530,175532],{"class":38,"line":196},[36,175526,3120],{"class":46},[36,175528,175529],{"class":42}," path ",[36,175531,1619],{"class":46},[36,175533,175534],{"class":42}," sys.path:\n",[36,175536,175537,175539],{"class":38,"line":642},[36,175538,1867],{"class":112},[36,175540,172263],{"class":42},[19,175542,175543],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,175545,160657],{},[26,175547,175550],{"className":175548,"code":175549,"language":80,"meta":31},[78],"random.py\njson.py\ntime.py\n",[33,175551,175549],{"__ignoreMap":31},[19,175553,175554],{},"这些文件名可能导致导入异常。",[14,175556,175558],{"id":175557},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,175560,175354],{},[26,175562,175565],{"className":175563,"code":175564,"language":80,"meta":31},[78],"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",[33,175566,175564],{"__ignoreMap":31},[19,175568,175569,28234],{},[33,175570,175571],{},"utils\u002Ffile_utils.py",[26,175573,175575],{"className":28,"code":175574,"language":30,"meta":31,"style":31},"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",[33,175576,175577,175583,175593,175597,175601,175611,175621,175629,175635,175639,175666,175676,175680,175684,175694,175720],{"__ignoreMap":31},[36,175578,175579,175581],{"class":38,"line":39},[36,175580,611],{"class":46},[36,175582,150125],{"class":42},[36,175584,175585,175587,175589,175591],{"class":38,"line":53},[36,175586,645],{"class":46},[36,175588,111786],{"class":42},[36,175590,611],{"class":46},[36,175592,111791],{"class":42},[36,175594,175595],{"class":38,"line":196},[36,175596,659],{"emptyLinePlaceholder":658},[36,175598,175599],{"class":38,"line":642},[36,175600,659],{"emptyLinePlaceholder":658},[36,175602,175603,175605,175608],{"class":38,"line":655},[36,175604,1820],{"class":46},[36,175606,175607],{"class":101}," read_json",[36,175609,175610],{"class":42},"(path):\n",[36,175612,175613,175616,175618],{"class":38,"line":662},[36,175614,175615],{"class":42},"    path ",[36,175617,47],{"class":46},[36,175619,175620],{"class":42}," Path(path)\n",[36,175622,175623,175625,175627],{"class":38,"line":667},[36,175624,3752],{"class":46},[36,175626,42489],{"class":46},[36,175628,172344],{"class":42},[36,175630,175631,175633],{"class":38,"line":679},[36,175632,1239],{"class":46},[36,175634,55395],{"class":42},[36,175636,175637],{"class":38,"line":685},[36,175638,659],{"emptyLinePlaceholder":658},[36,175640,175641,175643,175645,175648,175650,175652,175654,175656,175658,175660,175662,175664],{"class":38,"line":691},[36,175642,37738],{"class":46},[36,175644,149825],{"class":112},[36,175646,175647],{"class":42},"(path, ",[36,175649,149835],{"class":105},[36,175651,478],{"class":42},[36,175653,149840],{"class":468},[36,175655,47],{"class":46},[36,175657,149845],{"class":105},[36,175659,17373],{"class":42},[36,175661,617],{"class":46},[36,175663,151187],{"class":468},[36,175665,888],{"class":42},[36,175667,175668,175670,175672,175674],{"class":38,"line":696},[36,175669,1239],{"class":46},[36,175671,151198],{"class":42},[36,175673,48912],{"class":468},[36,175675,922],{"class":42},[36,175677,175678],{"class":38,"line":702},[36,175679,659],{"emptyLinePlaceholder":658},[36,175681,175682],{"class":38,"line":708},[36,175683,659],{"emptyLinePlaceholder":658},[36,175685,175686,175688,175691],{"class":38,"line":713},[36,175687,1820],{"class":46},[36,175689,175690],{"class":101}," write_json",[36,175692,175693],{"class":42},"(path, data):\n",[36,175695,175696,175698,175700,175702,175704,175706,175708,175710,175712,175714,175716,175718],{"class":38,"line":719},[36,175697,37738],{"class":46},[36,175699,149825],{"class":112},[36,175701,175647],{"class":42},[36,175703,155010],{"class":105},[36,175705,478],{"class":42},[36,175707,149840],{"class":468},[36,175709,47],{"class":46},[36,175711,149845],{"class":105},[36,175713,17373],{"class":42},[36,175715,617],{"class":46},[36,175717,151187],{"class":468},[36,175719,888],{"class":42},[36,175721,175722,175725,175727,175729,175731,175733,175735,175737,175739,175741,175743],{"class":38,"line":725},[36,175723,175724],{"class":42},"        json.dump(data, ",[36,175726,48912],{"class":468},[36,175728,478],{"class":42},[36,175730,150171],{"class":468},[36,175732,47],{"class":46},[36,175734,37547],{"class":112},[36,175736,478],{"class":42},[36,175738,155046],{"class":468},[36,175740,47],{"class":46},[36,175742,498],{"class":112},[36,175744,922],{"class":42},[19,175746,175747,28234],{},[33,175748,157641],{},[26,175750,175752],{"className":28,"code":175751,"language":30,"meta":31,"style":31},"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",[33,175753,175754,175765,175769,175782,175802],{"__ignoreMap":31},[36,175755,175756,175758,175760,175762],{"class":38,"line":39},[36,175757,645],{"class":46},[36,175759,175375],{"class":42},[36,175761,611],{"class":46},[36,175763,175764],{"class":42}," read_json, write_json\n",[36,175766,175767],{"class":38,"line":53},[36,175768,659],{"emptyLinePlaceholder":658},[36,175770,175771,175773,175775,175778,175780],{"class":38,"line":196},[36,175772,162750],{"class":42},[36,175774,47],{"class":46},[36,175776,175777],{"class":42}," read_json(",[36,175779,154865],{"class":105},[36,175781,922],{"class":42},[36,175783,175784,175786,175788,175790,175792,175794,175796,175798,175800],{"class":38,"line":642},[36,175785,173568],{"class":42},[36,175787,66234],{"class":105},[36,175789,54994],{"class":42},[36,175791,152922],{"class":105},[36,175793,478],{"class":42},[36,175795,154506],{"class":105},[36,175797,54994],{"class":42},[36,175799,4858],{"class":112},[36,175801,168186],{"class":42},[36,175803,175804,175807,175809],{"class":38,"line":655},[36,175805,175806],{"class":42},"write_json(",[36,175808,154865],{"class":105},[36,175810,175811],{"class":42},", students)\n",[14,175813,175815],{"id":175814},"_918-易错点","9.18 易错点",[211,175817,175818,175821,175826,175831,175834,175837],{},[214,175819,175820],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[214,175822,175823,175824,224],{},"能指定异常类型就不要裸写 ",[33,175825,173928],{},[214,175827,175828,175830],{},[33,175829,174303],{}," 无论是否出错都会执行。",[214,175832,175833],{},"模块文件名不要和标准库重名。",[214,175835,175836],{},"导入自己写的模块时，要注意运行目录。",[214,175838,175839],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,175841,175843],{"id":175842},"_919-本章练习","9.19 本章练习",[211,175845,175846,175849,175852,175858,175865],{},[214,175847,175848],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[214,175850,175851],{},"写函数读取文件，如果文件不存在则返回空字符串。",[214,175853,175266,175854,175857],{},[33,175855,175856],{},"math_utils.py","，实现加减乘除函数并导入使用。",[214,175859,175860,175861,175864],{},"创建一个 ",[33,175862,175863],{},"utils"," 包，把 JSON 读写函数放进去。",[214,175866,175867],{},"写一个程序，捕获除零异常和输入格式异常。",[3785,175869,175870],{},"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":31,"searchDepth":53,"depth":53,"links":175872},[175873,175874,175875,175876,175877,175878,175879,175880,175881,175882,175883,175889,175896,175898,175899,175900,175901,175902,175903],{"id":173725,"depth":53,"text":173726},{"id":173853,"depth":53,"text":173854},{"id":173902,"depth":53,"text":173903},{"id":174051,"depth":53,"text":174052},{"id":174223,"depth":53,"text":174224},{"id":174292,"depth":53,"text":174293},{"id":174403,"depth":53,"text":174404},{"id":174529,"depth":53,"text":174530},{"id":174654,"depth":53,"text":174655},{"id":174709,"depth":53,"text":174710},{"id":174808,"depth":53,"text":174809,"children":175884},[175885,175886,175887,175888],{"id":174812,"depth":196,"text":174813},{"id":174846,"depth":196,"text":174847},{"id":174885,"depth":196,"text":174886},{"id":174964,"depth":196,"text":174965},{"id":174987,"depth":53,"text":174988,"children":175890},[175891,175892,175893,175894,175895],{"id":174991,"depth":196,"text":174992},{"id":175074,"depth":196,"text":175075},{"id":175119,"depth":196,"text":175120},{"id":175178,"depth":196,"text":175179},{"id":175216,"depth":196,"text":175217},{"id":175250,"depth":53,"text":175897},"9.13 if name == \"main\"",{"id":175343,"depth":53,"text":175344},{"id":175388,"depth":53,"text":175389},{"id":175499,"depth":53,"text":175500},{"id":175557,"depth":53,"text":175558},{"id":175814,"depth":53,"text":175815},{"id":175842,"depth":53,"text":175843},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":173717,"description":26998},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":175910,"title":175911,"body":175912,"description":176075,"extension":3817,"meta":176076,"navigation":658,"path":176077,"seo":176078,"stem":176079,"__hash__":176080},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":175913,"toc":176070},[175914,175917,175920,175923,175934,175936,176010,176013,176016,176019,176022,176025,176028,176031,176034,176037,176040],[10,175915,175911],{"id":175916},"python教程",[19,175918,175919],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,175921,175922],{},"建议学习环境：",[211,175924,175925,175928,175931],{},[214,175926,175927],{},"Python 版本：Python 3.10 及以上。",[214,175929,175930],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[214,175932,175933],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,175935,120112],{"id":120112},[211,175937,175938,175944,175950,175956,175962,175968,175974,175980,175986,175992,175998,176004],{},[214,175939,175940],{},[4113,175941,175943],{"href":175942},".\u002Fch1-Python","Python环境与第一个程序",[214,175945,175946],{},[4113,175947,175949],{"href":175948},".\u002Fch2","基础语法、变量与字符串",[214,175951,175952],{},[4113,175953,175955],{"href":175954},".\u002Fch3","判断语句",[214,175957,175958],{},[4113,175959,175961],{"href":175960},".\u002Fch4","循环语句",[214,175963,175964],{},[4113,175965,175967],{"href":175966},".\u002Fch5","函数基础",[214,175969,175970],{},[4113,175971,175973],{"href":175972},".\u002Fch6","数据容器",[214,175975,175976],{},[4113,175977,175979],{"href":175978},".\u002Fch7","函数进阶",[214,175981,175982],{},[4113,175983,175985],{"href":175984},".\u002Fch8","文件操作",[214,175987,175988],{},[4113,175989,175991],{"href":175990},".\u002Fch9","异常、模块与包",[214,175993,175994],{},[4113,175995,175997],{"href":175996},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[214,175999,176000],{},[4113,176001,176003],{"href":176002},".\u002Fch11","面向对象基础",[214,176005,176006],{},[4113,176007,176009],{"href":176008},".\u002Fch12","综合案例与复习路线",[14,176011,176012],{"id":176012},"学习路线",[19,176014,176015],{},"第一阶段：能运行程序。",[19,176017,176018],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,176020,176021],{},"第二阶段：能组织数据。",[19,176023,176024],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,176026,176027],{},"第三阶段：能封装逻辑。",[19,176029,176030],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,176032,176033],{},"第四阶段：能做小项目。",[19,176035,176036],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,176038,176039],{"id":176039},"参考资料",[211,176041,176042,176049,176056,176063],{},[214,176043,176044,176045],{},"黑马程序员 Python 入门教程推荐：",[4113,176046,176047],{"href":176047,"rel":176048},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[27481],[214,176050,176051,176052],{},"Python 官方中文教程：",[4113,176053,176054],{"href":176054,"rel":176055},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[27481],[214,176057,176058,176059],{},"Python 标准库文档：",[4113,176060,176061],{"href":176061,"rel":176062},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[27481],[214,176064,176065,176066],{},"pyecharts 文档：",[4113,176067,176068],{"href":176068,"rel":176069},"https:\u002F\u002Fpyecharts.org\u002F",[27481],{"title":31,"searchDepth":53,"depth":53,"links":176071},[176072,176073,176074],{"id":120112,"depth":53,"text":120112},{"id":176012,"depth":53,"text":176012},{"id":176039,"depth":53,"text":176039},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":27000},"\u002Fwiki\u002F2024-10-10-python",{"title":175911,"description":176075},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331472252]